Cách thiết lập: datadir: khi sử dụng Hiera với Puppet và Vagrant


10

Tôi muốn biết làm thế nào để thiết lập :datadir:trong hiera.yamlđể sử dụng tối ưu với rối và Vagrant. Hiện tại tôi đang sử dụng vagrant 1.5.0 với virtualbox 4.2 trên Ubuntu 13.10 với một khách Ubuntu 12.04 đang chạy rối 3.1.1

Tôi đang cố gắng thiết lập một môi trường tương tự như bài đăng trên blog này, Puppet Best Practice: Môi trường cụ thể cấu hình . Cụ thể, Vagrantfile của tôi chứa:

  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

Tôi có thể xác nhận rằng đó hiera_config_pathlà chính xác, vì tôi gặp lỗi nếu tôi xóa hiera.yaml.

puppet/hiera.yaml chứa đựng:

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

Và, hơn nữa, puppet/manifests/configuration/common.yamlchứa:

---
myvar: "test"

Kiểm tra điều này từ dòng lệnh:

$ hiera -c hiera.yaml myvar
test

Càng xa càng tốt. Tuy nhiên, nếu tôi thử kiểm tra điều này từ trong tệp kê khai con rối, biến không thể tìm thấy và tôi gặp lỗi. Ví dụ kiểm tra:

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

Lỗi là:

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

Nếu tôi ssh vào máy của mình thông qua vagrant ssh, tôi có thể thấy Vagrant đang gắn thư mục tệp kê khai của tôi tại / tmp / vagrant-Puppet-2. Nếu tôi chỉnh sửa hiera.yamltệp và thay thế :datadir:bằng đường dẫn đầy đủ /tmp/vagrant-puppet-2/manifests/configuration, thì bảng kê khai rối của tôi có thể truy cập dữ liệu Hiera của tôi. Tôi có thể làm điều này với một con đường tương đối, mặc dù?

Câu trả lời:


9

Tôi tìm thấy giải pháp trong khi ghi lại câu hỏi của tôi. Thay đổi: datadir: để đọc:

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

Con rối sẽ cung cấp đường dẫn đến thư mục tệp kê khai trong $ settings :: manifestdir. Lưu trữ dữ liệu Hiera bên trong thư mục tệp kê khai rất hữu ích vì Vagrant sẽ gắn kết thư mục này một cách rõ ràng trước khi chạy Puppet trong hệ thống khách và các thư mục khác bạn có thể chọn cho mục đích này có thể không khả dụng.


Điều này có nghĩa là tôi cần 2 hiera.yamltệp, một để sử dụng với vagrant và một để sử dụng với Puppet (trong sản xuất)?
Felipe Alvarez

Tôi chỉ có một tệp hiera.yaml. Tôi không sử dụng thiết lập này nữa, nhưng tôi tin rằng kỹ thuật trong câu trả lời này không còn hoạt động trong các phiên bản gần đây của Puppet. Nếu bạn gặp rắc rối với nó, xin vui lòng xem một số câu trả lời khác.
greg_1_anderson

2

Các hiera.yamlTôi đang làm việc với quy định cụ thể :datadir: /etc/puppet/hieravà tôi đã không may mắn với thiết lập các --yamldirtùy chọn như một số các câu trả lời khác quy định. Tuy nhiên, sau một thời gian tôi nhận ra rằng tôi chỉ có thể ánh xạ siêu dữ liệu của mình đến vị trí đó trên máy khách vm:

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

Điều này hoạt động độc đáo :-)


Đây chính xác là thiết lập mà tôi có. Tôi đã tạo một thư mục ánh xạ config.vm.synced_folder("D:/branches/preprod/hieradata", "/etc/puppet/hieradata")và cũng được chỉ định puppet.hiera_config_path = "D:/branches/preprod/hiera.yaml"trong khổ thơ cấu hình con rối.
Felipe Alvarez

1

Đây là những gì tôi đang làm trong các thí nghiệm con rối của riêng tôi.

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 tối giản của tôi trông như thế này:

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

Và với mục đích minh họa, cấu trúc thư mục của tôi trên máy chủ (MacBook) trông như thế này:

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

Vấn đề ban đầu của bạn là / đó :datadircần phải là một con đường tuyệt đối. Hiera không cho phép bạn chỉ định các đường dẫn tương đối cho :datadir. Nếu bạn cảm thấy điều này nên được cho phép, xin vui lòng gửi yêu cầu thay đổi nó .

manifestdir đang bị phản đối . Bạn có thể thích sử dụng yamldir thay thế. Bạn có thể ghi đè cài đặt đó khi bạn vượt qua con rối áp dụng.

Dành cho người lang thang:

 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

CẬP NHẬT : Vì bạn cần cung cấp một đường dẫn tuyệt đối (và vì mơ hồ), bạn nên thiết lập thư mục dùng chung của riêng mình để bạn có thể rõ ràng về vị trí của nó và không đưa ra các giả định trên đường dẫn được đặt mơ hồ để thực hiện rối. Thêm phần này vào Vagrantfile:

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

và sau đó thay đổi dòng đầu tiên ở trên thành:

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

Cảm ơn bạn đã tham khảo --yamldir; điều đó rất hữu ích Tuy nhiên, vấn đề là tôi cần sử dụng một đường dẫn tương đối. Nếu tôi đặt một đường dẫn tuyệt đối, tôi sẽ phải sử dụng ["--yamldir / tmp / vagrant-Puppet-2 / manifest / configure"]; tuy nhiên, tôi không thể tin rằng / tmp / vagrant-Puppet-2 sẽ là một con đường ổn định. Có một biến tôi có thể tham chiếu trong Vagrantfile có chứa đường dẫn này không? Hoặc tôi có thể đặt một số biến để quy định đường dẫn nào sẽ sử dụng thay vì / tmp / vagrant-Puppet-2 không? Bất cứ điều gì tránh khỏi việc đưa ra các giả định về những con đường mà Vagrant sẽ sử dụng sẽ hoạt động.
greg_1_anderson 24/2/2015

@ greg_1_anderson bạn có thể thiết lập các thư mục của riêng mình, theo cách đó bạn rõ ràng về thư mục và không đưa ra các giả định về sự mơ hồ. config.vm.synced_folder "puppet/manifests/configuration", "/hieradata"
ferventcoder

Cập nhật câu trả lời. Ngoài ra nếu bạn cảm thấy rằng đường dẫn tương đối sẽ hữu ích, vui lòng tạo một vé tại Ticket.puppetlabs.com/browse/HI - cảm ơn!
ferventcoder

Con rối không cho phép các đường dẫn tương đối cho cấu hình hiera datadir khi chạy puppet apply. Các datadir sẽ liên quan đến thư mục hiện tại nơi Puppet được chạy.
Nathan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.