Puppet

Vagrant Puppet 在錯誤的環境中應用清單

  • November 11, 2016

我在標準客戶端-伺服器模式下使用 Puppet 3.7,使用環境,並使用 Hiera 處理數據。我使用 Vagrant 直接從我的 Puppet 儲存庫測試 Puppet 清單。

我最近開始使用 Hiera 並更改了我的 Vagrantfile(和 Vagrant 目錄)以使用它。它現在似乎可以與 Hiera 一起使用,但出現了另一個問題:Vagrant 認為我的虛擬機處於實驗階段時處於環境生產中。(這以前工作得很好)

Puppet 儲存庫看起來像

~/code/puppet
└── environments
   ├── experimental
   │   ├── manifests
   │   │   └── site.pp
   │   ├── modules
   │   └── Puppetfile
   ├── production
   │   ├── manifests
   │   │   └── site.pp
   │   ├── modules
   │   └── Puppetfile
   └── testing
       ├── manifests
       │   └── site.pp
       ├── modules
       └── Puppetfile

我的 Vagrant 設置儲存在另一個目錄中。我在此目錄中創建了一個指向 ~/code/puppet 的符號連結 (ln -s),名為 puppet。Vagrantfile 看起來

config.vm.define "standalone", primary: true do |config|
   config.vm.box = "debian_wheezy+vbox_jessie+puppet_3.7"
   config.vm.hostname = "standalone.puppet.vagrant"
   config.vm.network "private_network", ip:"192.168.10.21"

   config.vm.synced_folder "puppet/hieradata", "/etc/puppet/hieradata"
   config.vm.provision :puppet, :options => ["--yamldir /hieradata"] do |puppet|
       puppet.manifests_path = "puppet/environments/experimental/manifests"
       puppet.manifest_file = "site.pp"
       puppet.module_path = [ "puppet/environments/experimental/modules", "puppet/environments/production/modules", "puppet/modules" ]
       puppet.hiera_config_path = "puppet/hiera.yaml"
   end
 end

我想我最近在使用 Hiera 後所做的更改對 Vagrant 來說是不正確的,也許黑客(連結 puppet 程式碼目錄)是原因,但我看不出應該如何組織。

有沒有人知道這個問題以及如何解決它?

謝謝

更新

我變了

puppet.manifests_path = "puppet/environments/#{env}/manifests" 

並刪除 puppet.working_directory 以啟動/配置我的 VM。

puppet.module_path = [ "puppet/modules", "puppet/environments/production/modules" ] 

它似乎讓我的虛擬機可以訪問我需要的生產和目前環境模組。

您可以為您的 puppet 執行指定所有選項。你可以使用這樣的東西:

srv.vm.provision :puppet do |puppet|
     puppet.working_directory = "/vagrant/puppet"
     puppet.module_path       = "puppet/modules"
     puppet.manifests_path    = "puppet/manifests"
     puppet.manifest_file     = "site.pp"
     puppet.hiera_config_path = "puppet/hiera.yaml"
     puppet.options           = "--debug --verbose --environment #{env}"
end

這意味著您的模組位於“puppet/modules/#{env}”中,而您的清單位於“puppet/manifests/#{env}. 現在,“env”是一個可以在 Vagrantfile 中設置的變數:

env = "production"

或者:您可以將所有變數(例如“env”)放在一個 yaml 文件中並載入它。

作為參考,您可以在此處找到所有 puppet 提供選項:https ://www.vagrantup.com/docs/provisioning/puppet_apply.html

引用自:https://serverfault.com/questions/761595