あなたが Vagrant を選択したことは、あなたが探しているものへの良い出発点であると言えますが、プロビジョニング プロセスをさらに自動化するには、Chef または Puppet のいずれかをもう少し深く掘り下げる必要があります。
あなたのシーンでは、最初に Vagrantfile と対応する Puppet マニフェストの両方をプロジェクトの一部としてバージョン管理下に置くことをお勧めします。さらに、このマシンに関するすべての構成もバージョン管理に入れるか、なんらかのアーティファクト リポジトリを通じて利用できるようにする必要があります。
2 つ目は、他のチーム メンバーの準備ができていると見なされた場合に、環境に変更を加える (少なくとも長く存続させる必要があるものは) チェックインする必要があるというルールをチーム内に確立します。
2 番目の質問について、冒頭に戻ります。Puppet (私は好きです) または Chef は、あなたが選択するツールであり、あなたとあなたの同僚の将来の多くの作業を節約することができます。私は Chef があまり得意ではないので、ここでは Puppet に固執します。
puppet を使用すると、パッケージのインストール、構成の変更、特定のサービスが実行されていることの確認、または一般的にシステムが希望する状態になっていることなど、必要なものすべてを管理できます。さらに良いことに、あなたまたは別のチームメンバーが自分のボックスに悪意のある変更を加えた場合、Vagrantfile/Puppet マニフェストの変更をロールバックするだけで、次のように入力できます。
vagrant destroy && vagrant up
また、ボックスは簡単に最新バージョンの状態に戻すことができます。
たとえば、次のマニフェスト ファイルを使用します。
package { "mysql-server-5.1":
ensure => present
}
file { "/etc/mysql/my.cnf":
owner => "root",
content => "http://myrepository.local/myProject/configurations/mysql/my.cnf",
require => Package["mysql-server-5.1"]
}
service { "mysql":
ensure => running,
subscribe => File["/etc/mysql/my.cnf"],
require => File["/etc/mysql/my.cnf"]
}
これが行うことは、パッケージ「mysql-server-5.1」がインストールされている場合、最初にボックス内のOSのパッケージメカニズムをチェックし(例の名前は最近のUbuntuを想定しています)、インストールされていない場合はインストールしますそれ。「require」属性を介して、最初のディレクティブの後に 2 番目のディレクティブが実行され (それが機能した場合のみ)、MySQL 構成を、チェックインおよび/または到達可能な場所に公開したものに変更します (これは、 Vagrantfile と同じフォルダーに配置すると、/vagrant の下のボックスで使用できるようになります)。構成の変更が機能した場合にのみ実行される最後のステップは、「mysql」サービスが稼働中であること、または構成が変更されたときに既に実行されていた場合は再起動されていることを確認します。
これで、このマニフェストを Vagrantfile に接続できます。
Vagrant::Config.run do |config|
config.vm.box = "lucid32"
config.vm.box_url = "http://files.vagrantup.com/lucid32.box"
config.vm.define "node1" do |cfg|
cfg.vm.network "10.23.5.11"
cfg.vm.provision :puppet do |puppet|
puppet.manifests_path = "manifests"
puppet.manifest_file = "node1.pp"
end
end
end
このように環境に加えられた「試行錯誤」以外のすべての変更により、すべてのチームメンバーは同じ設定を簡単に再現できることが保証されます。
私は個人的に、ボックスにあるものを手作業で試すのが好きです。適切なセットアップと構成が見つかったら、それを Puppet マニフェストに変換して、後で使用したりチーム メンバーと共有したりできるようにします。
Puppet (および Chef も) は、必要なほぼすべて (ユーザー、cron ジョブ、パッケージ、サービス、ファイルなど) を管理できるため、まさにそのような問題に適しています。必要に応じて、後でステージング環境またはテスト環境をプロビジョニングするための構成。Puppet にはさらに多くのオプションがあり、言語ガイドを読むと、Puppet でさらに何ができるかがわかります。
私が助けてくれることを願っています:)