PuppetとVagrantで最適に使用するために:datadir:
でhiera.yaml
を設定する方法を教えてください。現在、puppet 3.1.1を実行しているUbuntu 12.04ゲストでUbuntu 13.10上のvirtualbox 4.2を使用してvagrant 1.5.0を使用しています
このブログ投稿 Puppetのベストプラクティス:環境固有の構成 のような環境をセットアップしようとしています。具体的には、私のVagrantfileには以下が含まれます。
config.vm.define "servername" do |servername|
servername.vm.box = "precise-puppet-3"
servername.vm.network "private_network", ip: "192.168.213.2",
virtualbox__intnet: "networkname"
# Provision with puppet.
servername.vm.provision :puppet do |puppet|
puppet.hiera_config_path = "puppet/hiera.yaml"
puppet.manifests_path = "puppet/manifests"
puppet.module_path = "puppet/modules"
puppet.manifest_file = "servername.pp"
puppet.facter = {
"vagrant" => "1",
"server" => "servername",
}
end
end
hiera_config_path
を削除するとエラーが発生するため、hiera.yaml
が正しいことを確認できます。
puppet/hiera.yaml
に含まれるもの:
---
:backends: yaml
:yaml:
:datadir: "manifests/configuration"
:hierarchy:
- "%{::clientcert}"
- "%{::environment}"
- "virtual_%{::is_virtual}"
- common
:logger: console
さらに、puppet/manifests/configuration/common.yaml
には以下が含まれます:
---
myvar: "test"
コマンドラインからこれをテストする:
$ hiera -c hiera.yaml myvar
test
ここまでは順調ですね。ただし、puppetマニフェストファイル内からこれをテストしようとすると、変数が見つからず、エラーが発生します。テストの例:
$myvariable = hiera(myvar)
notice("My variable is: ${myvar}")
エラーは:
Error: Could not find data item myvar in any Hiera data file and no default supplied at...
vagrant ssh
を介してsshでマシンにログインすると、Vagrantがマニフェストディレクトリを/ tmp/vagrant-puppet-2にマウントしていることがわかります。 hiera.yaml
ファイルを編集し、:datadir:
をフルパス/tmp/vagrant-puppet-2/manifests/configuration
に置き換えると、PuppetマニフェストがHieraデータにアクセスできます。相対パスでこれを行うことはできますか?
質問を文書化しているときに解決策を見つけました。 :datadir:を次のように変更します。
:datadir: "%{settings::manifestdir}/configuration"
Puppetは$ settings :: manifestdirのマニフェストディレクトリへのパスを提供します。 VagrantはゲストシステムでPuppetを実行する前にこのディレクトリを明示的にマウントし、この目的のために選択した他のディレクトリが利用できない場合があるため、マニフェストディレクトリ内にHieraデータを保存すると便利です。
hiera.yaml
私は指定を使用しています:datadir: /etc/puppet/hiera
と私は--yamldir
オプションを他の回答の一部として指定。しかし、しばらくすると、hieradataをゲストvmのその場所にマッピングするだけでよいことがわかりました。
config.vm.synced_folder "../puppet/hiera", "/etc/puppet/hiera"
これはうまく動作します:-)
これは私が自分の人形の実験でやっていることです。
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "puppetlabs/debian-7.8-64-puppet" # source box on atlas
config.vm.hostname = "wheezybox" # hostname of box
# Include Hiera Data Directory (no automatic option for this)
config.vm.synced_folder "../../hieradata", "/tmp/vagrant-puppet/hieradata"
# Puppet Configuration
config.vm.provision :puppet do |puppet|
puppet.manifests_path = "../../manifests/"
puppet.manifest_file = "site.pp"
puppet.module_path = ["../../modules/"] # shared modules
puppet.hiera_config_path = "../../hiera.yaml" # hiera config file
puppet.working_directory = "/tmp/vagrant-puppet" # default hiera path
puppet.options = "--verbose --debug"
end
end
私のミニマリストhiera.yamlは次のようになります。
---
:backends:
- yaml
:yaml:
:datadir: "hieradata"
:hierarchy:
- "node/%{::hostname}"
説明のために、ホスト(MacBook)のディレクトリ構造は次のようになっています。
.
├── hiera.yaml
├── hieradata
│ └── node
│ ├── centos6box.yaml
│ ├── precisebox.yaml
│ └── wheezybox.yaml
├── manifests
│ └── site.pp
├── modules -> ../puppet-common/modules/
└── vagrants
├── README.md
├── centos6
│ └── Vagrantfile
├── precise
│ └── Vagrantfile
└── wheezy
└── Vagrantfile
元の問題は:datadir
が絶対パスである必要があるということでした。 Hieraでは、:datadir
の相対パスを指定できません。これを許可する必要があると思われる場合は、 変更のリクエストを送信 してください。
manifestdirは 非推奨 です。代わりに yamldir を使用することをお勧めします。 puppet applyを渡すと、その設定をオーバーライドできます。
浮浪者の場合:
servername.vm.provision :puppet, :options => ["--yamldir some/absolute/path"] do |puppet|
puppet.hiera_config_path = "puppet/hiera.yaml"
puppet.manifests_path = "puppet/manifests"
puppet.module_path = "puppet/modules"
puppet.manifest_file = "servername.pp"
puppet.facter = {
"vagrant" => "1",
"server" => "servername",
}
end
[〜#〜] update [〜#〜]:絶対パスを指定する必要があるため(そしてvagrantのため)、独自のパスを設定する必要があります共有フォルダー。これにより、どこにあるかを明示でき、人形の実行用の浮浪者セットのパスを想定しません。これをVagrantfile
に追加:
config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"
上記の最初の行を次のように変更します。
servername.vm.provision :puppet, :options => ["--yamldir /hieradata"] do |puppet|