PuppetとVagrantでHieraを使用する場合の:datadir:のセットアップ方法


10

私は設定方法を知りたい: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...

を介してマシンにsshするとvagrant ssh、Vagrantがマニフェストディレクトリを/ tmp / vagrant-puppet-2にマウントしていることがわかります。hiera.yamlファイルを編集して:datadir:フルパスに置き換えると/tmp/vagrant-puppet-2/manifests/configuration、PuppetマニフェストがHieraデータにアクセスできるようになります。相対パスでこれを行うことはできますか?

回答:


9

質問を文書化しているときに解決策を見つけました。:datadir:を次のように変更します。

  :datadir: "%{settings::manifestdir}/configuration"

Puppetは$ settings :: manifestdirのマニフェストディレクトリへのパスを提供します。VagrantはゲストシステムでPuppetを実行する前にこのディレクトリを明示的にマウントし、この目的のために選択した他のディレクトリが利用できない場合があるため、マニフェストディレクトリ内にHieraデータを保存すると便利です。


これはhiera.yaml、2つのファイルが必要であることを意味します。1つはvagrantで使用するためのもので、もう1つはPuppetで使用するためのものです(実稼働中)。
フェリペアルバレス

hiera.yamlファイルは1つしかありませんでした。私はこの設定をもう使用していませんが、この回答の手法はPuppetの最近のバージョンでは機能しないと思います。問題がある場合は、他の回答をいくつか参照してください。
greg_1_anderson 2016年

2

hiera.yaml私は指定して働いている:datadir: /etc/puppet/hieraと私は設定して運がなかった--yamldir指定された他の回答の一部としてオプションを選択します。ただし、しばらくすると、hieradataをゲストvmのその場所にマッピングできることに気付きました。

config.vm.synced_folder "../puppet/hiera", "/etc/puppet/hiera"

これはうまく動作します:-)


これはまさに私が持っていたセットアップでした。マップされたフォルダーを作成し、puppet構成スタンザにconfig.vm.synced_folder("D:/branches/preprod/hieradata", "/etc/puppet/hieradata")も指定しpuppet.hiera_config_path = "D:/branches/preprod/hiera.yaml"ました。
フェリペアルバレス2016年

1

これは私が自分の人形の実験でやっていることです。

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

0

あなたの元の問題は:datadir絶対パスである必要がありました/です。Hieraでは、の相対パスを指定できません:datadir。許可する必要があると思われる場合は、変更リクエストを送信してください。

manifestdirは非推奨です。代わりにyamldirを使用することをお勧めします。パペット適用をパスするときに、その設定をオーバーライドできます。

浮浪者の場合:

 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であるため)、独自の共有フォルダーをセットアップして、それがどこにあるかを明示し、パペット実行のvagrantセットパスを想定しないようにする必要があります。これをあなたに追加してくださいVagrantfile

config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"

上記の最初の行を次のように変更します。

servername.vm.provision :puppet, :options => ["--yamldir /hieradata"]  do |puppet|

--yamldirへの参照をありがとう; それはとても役に立ちます。ただし、問題は相対パスを使用する必要があることです。絶対パスを指定した場合、["-yamldir / tmp / vagrant-puppet-2 / manifests / configuration"]を使用する必要があります。ただし、/ tmp / vagrant-puppet-2が安定したパスになるとは信じられません。このパスを含むVagrantfileで参照できる変数はありますか?または、/ tmp / vagrant-puppet-2の代わりに使用するパスを規定する変数を設定できますか?Vagrantがどのパスを使用するかについての想定から離れることは何でも機能します。
greg_1_anderson 2015

@ greg_1_anderson独自のディレクトリを設定できます。これにより、ディレクトリについて明示的になり、浮浪者を想定しません。config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"
ferventcoder、2015

回答を更新しました。また、相対パスが役立つと思われる場合は、tickets.puppetlabs.com / browse / HIでチケットを作成してください。ありがとうございます。
ferventcoder、2015

Puppetは、実行時にhiera datadir構成の相対パスを許可しますpuppet apply。datadirは、Puppetが実行された現在のディレクトリを基準にしています。
ネイサン、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.