web-dev-qa-db-ja.com

VagrantPuppetが間違った環境でマニフェストを適用する

Puppet 3.7を標準のクライアントサーバーモードで使用し、環境を使用し、データにHieraを使用しています。 Vagrantを使用して、Puppetリポジトリから直接Puppetマニフェストをテストします。

最近Hieraを使い始め、Vagrantfile(およびVagrantディレクトリ)をそれで動作するように変更しました。現在、Hieraで動作しているように見えますが、別の問題が発生します。Vagrantは、私のVMは、実験的なものであるときに環境の本番環境にあると考えています。(これは以前は正常に機能していました)

Puppetリポジトリは次のようになります

~/code/puppet
└── environments
    ├── experimental
    │   ├── manifests
    │   │   └── site.pp
    │   ├── modules
    │   └── Puppetfile
    ├── production
    │   ├── manifests
    │   │   └── site.pp
    │   ├── modules
    │   └── Puppetfile
    └── testing
        ├── manifests
        │   └── site.pp
        ├── modules
        └── Puppetfile

Vagrantのセットアップは別のディレクトリに保存されています。このディレクトリに、puppetという名前の〜/ code/puppetへのシンボリックリンク(ln -s)を作成しました。 Vagrantfileは見えます

config.vm.define "standalone", primary: true do |config|
    config.vm.box = "debian_wheezy+vbox_jessie+puppet_3.7"
    config.vm.hostname = "standalone.puppet.vagrant"
    config.vm.network "private_network", ip:"192.168.10.21"

    config.vm.synced_folder "puppet/hieradata", "/etc/puppet/hieradata"
    config.vm.provision :puppet, :options => ["--yamldir /hieradata"] do |puppet|
        puppet.manifests_path = "puppet/environments/experimental/manifests"
        puppet.manifest_file = "site.pp"
        puppet.module_path = [ "puppet/environments/experimental/modules", "puppet/environments/production/modules", "puppet/modules" ]
        puppet.hiera_config_path = "puppet/hiera.yaml"
    end
  end

Hieraの使用後の最近の変更はVagrantに正しくなく、ハッキング(パペットコードディレクトリのリンク)が原因である可能性があると思いますが、これをどのように構成する必要があるのか​​わかりません。

この問題とその解決方法を知っている人はいますか?

ありがとう

更新

私が変更され

puppet.manifests_path = "puppet/environments/#{env}/manifests" 

puppet.working_directoryを削除して、私のVM up/provisionを作成しました。

puppet.module_path = [ "puppet/modules", "puppet/environments/production/modules" ] 

私のVMが必要な本番環境モジュールと現在の環境モジュールにアクセスできるようになっているようです。

2
daks

パペット実行のすべてのオプションを指定できます。次のようなものを使用できます。

srv.vm.provision :puppet do |puppet|
      puppet.working_directory = "/vagrant/puppet"
      puppet.module_path       = "puppet/modules"
      puppet.manifests_path    = "puppet/manifests"
      puppet.manifest_file     = "site.pp"
      puppet.hiera_config_path = "puppet/hiera.yaml"
      puppet.options           = "--debug --verbose --environment #{env}"
end

つまり、モジュールは「puppet/modules /#{env}にあり、マニフェストは「puppet/manifests /#{env}」にあります。これで、「env」はVagrantfileで設定できる変数になります。

env = "production"

または:「env」などのすべての変数をyamlファイルに入れて、それをロードすることができます。

参考までに、ここですべてのpuppetプロビジョニングオプションを見つけることができます: https://www.vagrantup.com/docs/provisioning/puppet_apply.html

1
Marc Lambrichs

私は同様の問題を解決するためにここに来ました。配列を使用して、複数のモジュールパスを連結することができました。そのため、modulepathは

modulepath = ../puppet/environments/dev/modules:../puppet/modules

あなたの道は異なります。

私のvagrant環境は常にdevなので、このモジュールパスをここでハードコーディングしても問題ありません。

私のVagrantfileは次のようになります:

Vagrant.configure(2) do |config|
  config.vm.box = "centos7"
  config.vm.synced_folder("../../puppet/trunk/server/hieradata", "/etc/puppet/hieradata")
  config.vm.provision "puppet" do |puppet|
    puppet.environment       = "dev"
    puppet.environment_path  = "../../puppet/trunk/server/environments"
    puppet.hiera_config_path = "../../puppet/trunk/server/hiera.yaml"
    puppet.module_path       = [ "../../puppet/trunk/server/environments/dev/modules", "../../puppet/trunk/server/modules" ]
  end
end
0
Felipe Alvarez