Puppet

Puppet 模組未在代理上執行,而這已在 Puppetmaster 上的 Hiera 中定義

  • March 17, 2015

一旦我安裝了 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 {
}
  1. hiera.yaml如果已更改,則需要重新啟動 Puppetmaster
  2. hiera 文件的格式很重要,即兩個空格而不是 null 和---

common.yaml

---
classes:
 - motd

代替

classes:
- motd
  1. 如果啟用了 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

  1. hiera_include('classes')site.pp而不是定義hiera_include("classes", [])就足夠了

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