2016-12-06 6 views
0

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?私がやろうとしていることをする別の方法がありますか?

答えて

0

そして、私は両方の定義されたマシンのために同じconfig名前空間で働いていることに気付きました。ここで私の調整は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| 
     # now it's web.vm.provision, not config.vm.provision 
     web.vm.provision :puppet do |web_puppet| 
      web_puppet.environment_path = 'puppet/environments' 
      web_puppet.environment = 'web' 
     end 
    end 

    config.vm.define 'db' do |db| 
     # now it's db.vm.provision, not config.vm.provision 
     db.vm.provision :puppet do |db_puppet| 
      db_puppet.environment_path = 'puppet/environments' 
      db_puppet.environment = 'db' 
     end 
    end 
end 
関連する問題