Puppet
Puppet 模組未在代理上執行,而這已在 Puppetmaster 上的 Hiera 中定義
一旦我安裝了 Puppet、Foreman、Hiera 和 Facter,我如何讓它們相互協作?
Foreman GUI 執行正常,可以使用瀏覽器查看。Hiera 已安裝,根據我在網際網路上閱讀的指南,它似乎配置正確,Facter 也可以正常工作,但代理沒有從 Puppet 伺服器獲取模組。
我添加了一個非常簡單的 MOTD 模組並將其配置為在
common.yaml
. 但是代理機器上沒有安裝該模組,並且沒有顯示錯誤。
puppet agent -t
在伺服器和客戶端上執行有效:[root@puppet production]# puppet agent -t Info: Retrieving pluginfacts Info: Retrieving plugin Info: Loading facts Info: Caching catalog for puppet.nj.peer39.com Info: Applying configuration version '1425802774' Notice: Finished catalog run in 0.05 seconds [root@puppet production]#
hiera.yaml
看起來像這樣:[root@puppet production]# cat /etc/puppet/hiera.yaml :backends: - yaml :yaml: :datadir: '/etc/puppet/hieradata/%{::environment}' :hierarchy: - fqdns/%{::fqdn} - roles/%{::role} - domains/%{::domain} - common
environment.conf
看起來像這樣:[root@puppet production]# pwd /etc/puppet/environments/production [root@puppet production]# cat environment.conf modulepath = modules manifest = /etc/puppet/environments/production/manifests/ [root@puppet production]#
我也嘗試通過
fqdn.yaml
文件載入模組,但無濟於事,也沒有顯示錯誤。
/etc/puppet/puppet.conf
看起來像這樣:[master] autosign = $confdir/autosign.conf { mode = 664 } reports = foreman external_nodes = /etc/puppet/node.rb node_terminus = exec ca = true ssldir = /var/lib/puppet/ssl certname = puppet.company.com strict_variables = false environmentpath = $confdir/environments
編輯#1:
我的
common.yaml
樣子是這樣的:classes: - motd
當我說
fqdn.yaml
我的意思是:[root@puppet fqdns]# pwd /etc/puppet/hieradata/production/fqdns [root@puppet fqdns]# ll total 8 -rw-r--r-- 1 root root 23 Mar 11 09:26 pnd01.company.yaml -rw-r--r-- 1 root root 17 Mar 12 08:24 puppet.company.com.yaml [root@puppet fqdns]#
那是我的
site.pp
,位於/etc/puppet/environments/production/manifests
:[root@puppet manifests]# cat site.pp hiera_include("classes", []) Package { allow_virtual => false, } node default { }
hiera.yaml
如果已更改,則需要重新啟動 Puppetmaster- hiera 文件的格式很重要,即兩個空格而不是 null 和
---
common.yaml
--- classes: - motd
代替
classes: - motd
- 如果啟用了 Puppet Environments,則應按如下方式配置 datadir:
/etc/puppet/hiera.yaml
:yaml: :datadir: "/etc/puppet/environments/%{::environment}/hieradata"
每個環境都應該包含一個 hieradata 目錄,並且應該包含 common.yaml。如果沒有使用環境,hiera.yaml 如下所示:
:yaml: :datadir: "/etc/puppet/hieradata"
將 common.yaml 移至該目錄並重啟 puppetmaster
hiera_include('classes')
在site.pp
而不是定義hiera_include("classes", [])
就足夠了