1

現在、多数の EC2 インスタンスを一連のパペット スクリプトに変換し、Vagrant を使用してローカル開発用のリグを仮想化しています。

浮浪者でネットワークを管理し、それを本番環境にマッピングすることに行き詰まりました。

まず、次のようなものがあります。

# Main Web Server
config.vm.define :app do |app_config|
    app_config.vm.host_name = "web1"
    app_config.vm.network :hostonly, "10.0.0.2"
    app_config.vm.box = "precise64"

    ...etc
        puppet.manifest_file = "persist/web.pp"
end 

# First DB server
config.vm.define :db1 do |db1_config|
    db1_config.vm.host_name = "db1"
    db1_config.vm.network :hostonly, "10.0.0.3"
    db1_config.vm.box = "precise64"
    ...etc
        puppet.manifest_file = "persist/db.pp"
end

etc.

次に、この場合、web.pp と db.pp は合理的に単純で、python、uwsgi、nginx、mysql などをセットアップするだけです。

だから問題:私は内部に必要です例えば、puppet/modules/hosts/files/hosts次のようなものを指定する必要があります:

10.0.0.3    db1.X.com
10.0.0.4    db2.X.com
etc.

本番環境では、サイトの DNS と ec2 インスタンスの DNS レコードを組み合わせて使用​​します (これをホストに入れることはできません)。通常、haproxy ホストにはパブリック DNS レコードがあり、構成に EC2 名が保持されます (これにより、hosts ファイルの使用が不可能になります)。

では、puppet と vagrant の両方が次のようなグローバル マッピングをインポートして使用できるファイルを作成するにはどうすればよいでしょうか。

hosts = {
         web => 10.0.0.2,
         db1 => 10.0.0.3,
         db2 => 10.0.0.4,
}

たとえば、パペットテンプレート内からアクセスできますhaproxy.cfgが、Vagrant ファイル内からもアクセスできるため、それに設定vm.networkすることもできます。

制限:

  • IP のみにすることはできません。IP または DNS のいずれかに対するシンボリック名にする必要があります
  • パペット マスターは使用できません (残念ながら、これには柔軟性がありません)。
  • DNSサーバーの仮想化も面倒なので、そうではありません。

また、私はRubyに本当に慣れていません。例を提供する場合(これは素晴らしいことです)、Rubyドキュメントから自分の道を見つけることができるように十分に説明してください。

4

1 に答える 1

0

2 オプション:

1)ファイルから表示したハッシュをvagrantに読み取らせ(ディレクトリ、DBなどに配置)、そのコンテンツを使用してVagrantfileを生成できます。Vagrant の構成は、そうでない場合は Ruby コードを実行するだけです (私はそう思います)。

2) シェル スクリプトで Vagrantfile および/または puppet config / static ファイルを生成します。

実装の詳細は簡単です。

于 2012-09-12T10:56:01.790 に答える