Vagrantfile
から2つのVMをプロビジョニングしようとしています。私の目標は、Webサーバーとdbサーバーをスピンアップし、いくつかの一般的な構成を適用し、システムがデータやWebサイトをホストしているかどうかに応じて、より具体的な構成を適用できるようにすることです。明らかに私が2つの静的VMを実行している場合、これは問題ではありませんが、最終的にはシステムの数が動的になる可能性がありますので、まずこれを把握したいと思います。ここVagrantfile
の要旨は次のとおりです。複数の仮想マシンを独自の人形環境でプロビジョニングする
Vagrant.config(2) do |config|
config.vm.provision :shell, inline: 'apt-get install -y -q puppet'
config.vm.box = 'ubuntu/xenial64'
config.vm.provision :puppet do |default_puppet|
puppet.manifests_path = 'puppet/manifests'
puppet.module_path = 'puppet/modules'
end
config.vm.define 'web' do |web|
config.vm.provision :puppet do |web_puppet|
web_puppet.environment_path = 'puppet/environments'
web_puppet.environment = 'web'
end
end
config.vm.define 'db' do |db|
config.vm.provision :puppet do |db_puppet|
db_puppet.environment_path = 'puppet/environments'
db_puppet.environment = 'db'
end
end
end
私は次のディレクトリ構造を持っている:
# Set up some default stuff that both servers should have
class { '::ntp':
servers => [
'0.ubuntu.pool.ntp.org',
'1.ubuntu.pool.ntp.org',
'2.ubuntu.pool.ntp.org',
'3.ubuntu.pool.ntp.org',
]
}
file { '/home/ubuntu/file0.txt':
ensure => file,
content => 'should be available on all systems'
}
そして/environments/{db,web}/manifests/default.pp
ファイルもかなりある:
.
├── Vagrantfile
└── puppet
├── environments
│ ├── db
│ │ └── manifests
│ │ └── default.pp
│ └── web
│ └── manifests
│ └── default.pp
├── hiera.yaml
├── manifests
│ └── default.pp
└── modules
├── ntp
└── stdlib
は私のmanifests/default.pp
は非常に簡単ですシンプルで、基本的にはこれだけです:
# set up something specifically for the database server
file { '/home/ubuntu/file1.txt':
ensure => file,
content => 'this file should only be on the db server.'
}
ファイル名と内容が変更されているため、ディレクトリがすべて正常に動作していることがわかります。
ほとんどの場合、manifests/default.pp
を更新すると、両方に変更が適用されます。 environments/web/manifests/default.pp
を更新すると、web
サーバーがその変更を取得します。 I規定db
環境しかし、とき、それは両方の環境を取得します。
==> web: Running provisioner: puppet...
==> web: Running Puppet with default.pp...
==> web: Info: Loading facts
==> web: Notice: Compiled catalog for web.vm in environment production in 0.64 seconds
==> web: Info: Applying configuration version '1481059856'
==> web: Notice: /Stage[main]/Main/File[/home/ubuntu/file0.txt]/ensure: defined content as '{md5}ba94d90e4b2e228b54c75d9110e3179c'
==> web: Notice: Finished catalog run in 0.07 seconds
==> web: Running provisioner: puppet...
==> web: Running Puppet with environment web...
==> web: Notice: Compiled catalog for web.vm in environment web in 0.12 seconds
==> web: Notice: Finished catalog run in 0.01 seconds
==> db: Running provisioner: puppet...
==> db: Running Puppet with default.pp...
==> db: Info: Loading facts
==> db: Notice: Compiled catalog for db.vm in environment production in 0.64 seconds
==> db: Info: Applying configuration version '1481059866'
==> db: Notice: /Stage[main]/Main/File[/home/ubuntu/file0.txt]/ensure: defined content as '{md5}ba94d90e4b2e228b54c75d9110e3179c'
==> db: Notice: Finished catalog run in 0.07 seconds
** shouldn't be doing this **
==> db: Running provisioner: puppet...
==> db: Running Puppet with environment web...
==> db: Notice: Compiled catalog for db.vm in environment web in 0.11 seconds
==> db: Notice: Finished catalog run in 0.01 seconds
** this is fine though **
==> db: Running provisioner: puppet...
==> db: Running Puppet with environment db...
==> db: Notice: Compiled catalog for db.vm in environment db in 0.12 seconds
==> db: Notice: Finished catalog run in 0.01 seconds
私はvagrant provision
を実行すると、この問題が発生しました。今、私がvagrant provision db
を実行した場合、db
環境のみが適用されることを発見しました。しかし、マルチマシンのマシンごとの環境を設定することはできません。Vagrantfile
?私がやろうとしていることをする別の方法がありますか?