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が必要な本番環境モジュールと現在の環境モジュールにアクセスできるようになっているようです。
パペット実行のすべてのオプションを指定できます。次のようなものを使用できます。
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
私は同様の問題を解決するためにここに来ました。配列を使用して、複数のモジュールパスを連結することができました。そのため、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