วิธีตั้งค่า: datadir: เมื่อใช้ Hiera กับ Puppet และ Vagrant


10

ผมอยากจะทราบวิธีการตั้งค่า:datadir:ในhiera.yamlการใช้งานที่เหมาะสมกับหุ่นและคนจรจัด ขณะนี้ฉันใช้ Vagrant 1.5.0 กับ virtualbox 4.2 บน Ubuntu 13.10 กับ Ubuntu 12.04 แขกที่ใช้งานหุ่นกระบอก 3.1.1

ฉันพยายามที่จะตั้งค่าสภาพแวดล้อมที่คล้ายกับการโพสต์บล็อกนี้หุ่นปฏิบัติที่ดีที่สุด: configs โดยเฉพาะ 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_pathhiera.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"

ทดสอบสิ่งนี้จาก commandline:

$ hiera -c hiera.yaml myvar
test

จนถึงตอนนี้ดีมาก อย่างไรก็ตามถ้าฉันพยายามทดสอบสิ่งนี้จากไฟล์รายการหุ่นกระบอกไม่พบตัวแปรและฉันได้รับข้อผิดพลาด ตัวอย่างการทดสอบ:

$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หุ่นกระบอกของฉันจะสามารถเข้าถึงข้อมูล Hiera ของฉันได้ ฉันสามารถทำสิ่งนี้ด้วยเส้นทางสัมพัทธ์ได้ไหม?

คำตอบ:


9

ฉันพบวิธีแก้ปัญหาขณะบันทึกคำถาม เปลี่ยน: วันที่: ถึงอ่าน:

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

หุ่นกระบอกจะให้เส้นทางไปยังไดเรกทอรีรายการในการตั้งค่า $: manifestdir การจัดเก็บข้อมูล Hiera ภายในไดเรกทอรีรายการนั้นมีประโยชน์เพราะ Vagrant จะติดตั้งไดเรกทอรีนี้อย่างชัดเจนก่อนที่จะเรียกใช้ Puppet ในระบบเกสต์และไดเรกทอรีอื่น ๆ ที่คุณอาจเลือกเพื่อจุดประสงค์นี้อาจไม่สามารถใช้ได้


นี่หมายความว่าฉันต้องการ 2 hiera.yamlไฟล์หนึ่งไฟล์สำหรับใช้กับคนจรจัดและอีกหนึ่งไฟล์สำหรับใช้กับ Puppet (กำลังการผลิต)
เฟลิเป้อัลวาเรซ

ฉันมีไฟล์ hiera.yaml เพียงไฟล์เดียวเท่านั้น ฉันไม่ได้ใช้การตั้งค่านี้อีกต่อไป แต่ฉันเชื่อว่าเทคนิคในคำตอบนี้จะไม่ทำงานใน Puppet รุ่นล่าสุดอีกต่อไป หากคุณมีปัญหากับมันโปรดดูคำตอบอื่น ๆ
greg_1_anderson

2

hiera.yamlฉันกำลังทำงานกับระบุ:datadir: /etc/puppet/hieraและผมมีโชคใด ๆ กับการตั้งค่า--yamldirตัวเลือกเป็นบางส่วนของคำตอบอื่น ๆ ที่ระบุไว้ อย่างไรก็ตามฉันรู้ว่าหลังจากนั้นไม่นานฉันก็สามารถแมปข้อมูลสรุปของฉันไปยังตำแหน่งนั้นบน guest vm:

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

มันใช้งานได้ดี :-)


นี่คือการตั้งค่าที่ฉันมี ฉันสร้างโฟลเดอร์ที่แมปconfig.vm.synced_folder("D:/branches/preprod/hieradata", "/etc/puppet/hieradata")และระบุไว้puppet.hiera_config_path = "D:/branches/preprod/hiera.yaml"ในชุดการกำหนดค่าหุ่นเชิด
Felipe Alvarez

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 : เนื่องจากคุณต้องระบุเส้นทางแบบสัมบูรณ์ (และเนื่องจากคนจรจัด) คุณควรตั้งค่าโฟลเดอร์ที่ใช้ร่วมกันของคุณเองเพื่อให้คุณสามารถระบุได้อย่างชัดเจนว่าอยู่ที่ไหนและไม่ได้ตั้งสมมติฐานบนเส้นทางชุดคนจรจัดสำหรับการดำเนินการหุ่น เพิ่มลงในของคุณVagrantfile:

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

จากนั้นเปลี่ยนบรรทัดแรกด้านบนเป็น:

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

ขอบคุณสำหรับการอ้างอิงถึง - yamldir; มันมีประโยชน์มาก อย่างไรก็ตามปัญหาคือฉันต้องใช้เส้นทางสัมพัทธ์ ถ้าฉันใส่เส้นทางที่แน่นอนฉันจะต้องใช้ ["--yamldir / tmp / vagrant-puppet-2 / รายการ / การตั้งค่า"]; อย่างไรก็ตามฉันไม่สามารถเชื่อได้ว่า / tmp / vagrant-puppet-2 จะเป็นเส้นทางที่มั่นคง มีตัวแปรที่ฉันสามารถอ้างอิงใน Vagrantfile ที่มีเส้นทางนี้หรือไม่ หรือฉันสามารถตั้งค่าตัวแปรบางอย่างเพื่อกำหนดเส้นทางที่จะใช้แทน / tmp / vagrant-puppet-2 ได้ไหม? อะไรก็ตามที่หลีกเลี่ยงการตั้งสมมติฐานเกี่ยวกับเส้นทางที่ Vagrant จะใช้จะทำงานได้
greg_1_anderson

@ greg_1_anderson คุณสามารถตั้งค่าไดเรกทอรีของคุณเองในแบบที่คุณชัดเจนเกี่ยวกับไดเรกทอรีและไม่ได้ตั้งสมมติฐานเกี่ยวกับคนจรจัด config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"
ferventcoder

อัปเดตคำตอบ นอกจากนี้หากคุณรู้สึกว่าเส้นทางสัมพัทธ์จะเป็นประโยชน์โปรดสร้างตั๋วที่tickets.puppetlabs.com/browse/HI - ขอบคุณ!
ferventcoder

หุ่นไม่อนุญาตให้ทางญาติสำหรับการกำหนดค่า datadir hiera puppet applyเมื่อทำงาน datadir จะสัมพันธ์กับ dir ปัจจุบันที่หุ่นกระบอกถูกเรียกใช้
นาธาน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.