Nasıl kurulur: datadir: Hiera'yı Kukla ve Vagrant ile kullanırken


10

Ben nasıl ayarlanacağı bilmek istiyorum :datadir:içinde hiera.yamlKukla ve Vagrant ile optimum kullanım için. Şu anda Ubuntu 13.10 üzerinde sanal kutu 4.2 ile vagrant 1.5.0 kullanıyorum ve Ubuntu 12.04 konuk kukla 3.1.1 çalıştıran

Bu blog yayınına benzer bir ortam kurmaya çalışıyorum, Kukla En İyi Uygulamaları: Ortama özgü yapılandırmalar . Özellikle, benim Vagrantfile içerir:

  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_pathDoğru olduğunu onaylayabilirim , çünkü sildiğimde bir hata alıyorum hiera.yaml.

puppet/hiera.yaml içerir:

---
:backends: yaml
:yaml:
  :datadir: "manifests/configuration"
:hierarchy:
  - "%{::clientcert}"
  - "%{::environment}"
  - "virtual_%{::is_virtual}"
  - common
:logger: console

Ve ayrıca puppet/manifests/configuration/common.yamlşunları içerir:

---
myvar: "test"

Bunu komut satırından test etme:

$ hiera -c hiera.yaml myvar
test

Çok uzak çok iyi. Ancak, bunu bir kukla manifest dosyasından test etmeye çalışırsam, değişken bulunamaz ve bir hata alırım. Örnek test:

$myvariable = hiera(myvar)
notice("My variable is: ${myvar}")

Hata:

Error: Could not find data item myvar in any Hiera data file and no default supplied at...

Eğer makineme ssh vagrant sshkoyarsam Vagrant'ın manifest dizinimi / tmp / vagrant-kukla-2'ye bağladığını görebiliyorum. hiera.yamlDosyayı düzenler ve :datadir:tam yolla değiştirirsem /tmp/vagrant-puppet-2/manifests/configuration, Kukla manifestolarım Hiera verilerime erişebilir. Yine de bunu göreceli bir yolla yapabilir miyim?

Yanıtlar:


9

Sorumu belgelendirirken çözümü buldum. Değiştir: datadir: okumak için:

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

Kukla, manifest dizininin yolunu $ settings :: manifestdir dizininde sağlayacaktır. Hiera verilerini manifest dizini içinde saklamak yararlıdır, çünkü Vagrant bu dizini Puppet'i konuk sistemde çalıştırmadan önce açıkça bağlayacaktır ve bu amaçla seçebileceğiniz diğer dizinler kullanılamayabilir.


Bu hiera.yaml, biri vagrant ile kullanım ve diğeri Kukla ile kullanım için 2 dosyaya ihtiyacım olduğu anlamına mı geliyor ?
Felipe Alvarez

Ben sadece bir hiera.yaml dosyası vardı. Bu kurulumu artık kullanmıyorum, ancak bu cevaptaki tekniğin artık Kukla'nın son sürümlerinde çalışmadığına inanıyorum. Sorun yaşıyorsanız, lütfen diğer yanıtlardan bazılarına bakın.
greg_1_anderson

2

hiera.yamlBen belirtiyorsa ile çalışıyorum :datadir: /etc/puppet/hierave ben ayarlama hiçbir şans oldu --yamldirbelirtilen diğer bazı yanıtlar olarak seçeneği. Ancak, bir süre sonra sadece hieradata konuk vm o konuma eşlemek olabilir fark:

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

Bu güzel çalışıyor :-)


Tam olarak sahip olduğum kurulum buydu. Eşlenmiş bir klasör oluşturdum config.vm.synced_folder("D:/branches/preprod/hieradata", "/etc/puppet/hieradata")ve ayrıca puppet.hiera_config_path = "D:/branches/preprod/hiera.yaml"kukla yapılandırma stanzlarında da belirledim .
Felipe Alvarez

1

Kendi kukla deneylerimde bunu yapıyorum.

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

Benim minimalist hiera.yaml şöyle görünür:

---
:backends:
  - yaml
:yaml:
  :datadir: "hieradata"
:hierarchy:
  - "node/%{::hostname}"

Örnekleme amacıyla, ana bilgisayardaki (MacBook) dizin yapım şöyle:

    .
    ├── 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

Orijinal sorununuz, :datadirmutlak bir yol olması gerektiğiydi. Hiera, için göreli yollar belirtmenize izin vermez :datadir. Buna izin verilmesi gerektiğini düşünüyorsanız, lütfen değiştirmek için bir istek gönderin .

manifestdir kullanımdan kaldırıldı . Bunun yerine yamldir kullanmayı tercih edebilirsiniz . Kukla uygulamasını geçtiğinizde bu ayarı geçersiz kılabilirsiniz.

Vagrant için:

 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

GÜNCELLEME : Mutlak bir yol (ve vagrant nedeniyle) sağlamanız gerektiğinden, kendi paylaşılan klasörünüzü ayarlamanız gerekir; böylece nerede olduğu hakkında açık olursunuz ve kukla yürütme için vagrant olarak ayarlanmış bir yolda varsayımlar yapmazsınız. Bunu şu adrese ekleyin Vagrantfile:

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

ve yukarıdaki ilk satırı şu şekilde değiştirin:

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

--Yamldir'e referansınız için teşekkür ederiz; bu çok faydalı. Ancak sorun göreli bir yol kullanmam gerektiğidir. Mutlak bir yol koyarsam ["--yamldir / tmp / vagrant-kukla-2 / manifests / configuration"] kullanmam gerekir; ancak, / tmp / vagrant-kukla-2'nin kararlı bir yol olacağına inanamıyorum. Bu yolu içeren Vagrantfile içinde başvurabileceğim bir değişken var mı? Veya / tmp / vagrant-kukla-2 yerine hangi yolu kullanacağımı belirlemek için bazı değişkenler ayarlayabilir miyim? Vagrant'ın hangi yolları kullanacağına dair varsayımlarda bulunmaktan kaçan her şey işe yarardı.
greg_1_anderson

@ greg_1_anderson kendi dizinlerinizi ayarlayabilirsiniz, böylece dizin hakkında açık ve vagrant üzerinde varsayımlarda bulunmazsınız. config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"
ferventcoder

Yanıt güncellendi. Ayrıca göreceli yolun yararlı olacağını düşünüyorsanız, lütfen tickets.puppetlabs.com/browse/HI adresinden bir bilet oluşturun - teşekkürler!
ferventcoder

Kukla, çalışırken hiera datadir yapılandırması için göreli yollara izin verir puppet apply. Datadir, Kukla'nın çalıştırıldığı geçerli dizine göreceli olacaktır.
Nathan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.