在puppet hiera设置中放置hiera文件的位置

在puppet hiera设置中放置hiera文件的位置,puppet,hiera,Puppet,Hiera,我有一个正在运行的puppet master agent设置,目前正试图找出如何使用hiera来配置php 我的木偶文件: forge "http://forge.puppetlabs.com" mod "jfryman/nginx" mod "puppetlabs/mysql" mod "mayflower/php" mod 'puppetlabs-vcsrepo' mod 'puppetlabs/ntp', '4.1.0' mod 'puppetlabs/stdlib' 我的网站.pp:

我有一个正在运行的puppet master agent设置,目前正试图找出如何使用hiera来配置php

我的木偶文件:

forge "http://forge.puppetlabs.com"

mod "jfryman/nginx"
mod "puppetlabs/mysql"
mod "mayflower/php"
mod 'puppetlabs-vcsrepo'
mod 'puppetlabs/ntp', '4.1.0'
mod 'puppetlabs/stdlib'
我的
网站.pp

hiera_include('classes')
class profile::php {
  class { '::php': }
}
My
environment.conf
,其中维护模块路径:

manifest = site.pp
modulepath = modules:site
木偶主机上的My hiera配置位于
/etc/puppetlabs/puppet/hiera.yml

---
:backends:
  - yaml
:hierarchy:
  - "nodes/%{::trusted.certname}"
  - "environment/%{server_facts.environment}"
  - common

:yaml:
# datadir is empty here, so hiera uses its defaults:
# - /etc/puppetlabs/code/environments/%{environment}/hieradata on *nix
# - %CommonAppData%\PuppetLabs\code\environments\%{environment}\hieradata on Windows
# When specifying a datadir, make sure the directory exists.
  :datadir:
---
classes:
 - 'profile::base'

ntp::servers:
  - server 0.de.pool.ntp.org
  - server 1.de.pool.ntp.org
  - server 2.de.pool.ntp.org
  - server 3.de.pool.ntp.org
据我所知,应该出现在所有服务器上的常规配置进入了
common.yaml
。通过此设置,我成功地在节点上安装了ntp,配置为
hieradata/common.yaml

---
:backends:
  - yaml
:hierarchy:
  - "nodes/%{::trusted.certname}"
  - "environment/%{server_facts.environment}"
  - common

:yaml:
# datadir is empty here, so hiera uses its defaults:
# - /etc/puppetlabs/code/environments/%{environment}/hieradata on *nix
# - %CommonAppData%\PuppetLabs\code\environments\%{environment}\hieradata on Windows
# When specifying a datadir, make sure the directory exists.
  :datadir:
---
classes:
 - 'profile::base'

ntp::servers:
  - server 0.de.pool.ntp.org
  - server 1.de.pool.ntp.org
  - server 2.de.pool.ntp.org
  - server 3.de.pool.ntp.org
现在,我的层次结构还声明所有特定于节点的配置都应该进入
hieradata/nodes/{fqdn of the node}.yml

现在,最后来回答我的问题:

我有一个文件
hieradata/nodes/myserver.example.com.yml
,其中包含以下内容:

classes:
  - 'profile::php'
以及
site/profile/manifests/php.pp
下的清单:

hiera_include('classes')
class profile::php {
  class { '::php': }
}
但这并没有提供php。如您所见,我使用的是来自锻造厂的
mayflower/php

现在,我的两个问题是:


我的php hiera文件在正确的位置吗?那么,我还缺少什么才能让它成为我的代理呢?

这里有很多问题/可能性,所以让我们反复讨论一下


首先,您使用的是默认的
datadir

/etc/puppetlabs/code/environments/%{environment}/hieradata
但是,您有以下优先权:

"environment/%{server_facts.environment}"
这是没有意义的,因为您有一个根据节点的目录环境区分节点数据的优先级,但您也将hieradata直接放置在目录环境中。如果需要基于目录环境的优先级,请将hieradata目录更改为直接环境之外的目录,地址为:

/etc/puppetlabs/code/hieradata
否则,您应该从优先级中删除该级别,因为它不会增加任何值,并且会增加查找时间


其次,您没有显示您的
站点.pp
,但您还记得您的
hiera\u include('classes')
?这将查找数组
,然后包含它们,这似乎是您想要的。如果不这样做,则会出现您描述的节点配置问题


第三,您的
模块路径中是否有
站点
?您需要将其附加到
puppet.conf
environment.conf


第四,节点的
fqdn
可能与
certname
不匹配。检查Puppetmaster上的certs目录以获取节点的证书


旁注:

  • 你问题的前半部分包含了很多无关的信息,缺少了很多有用的相关信息。请考虑编辑问题,以提供更多有用的信息和更简洁。
  • 由于
    ntp
    工作正常,我假设您使用
    r10k
    成功地将模块安装到环境目录中。另外,我假设节点的目录环境中存在模块
  • 没有真正的理由在声明中使用
    ::php
    php
    类指定为全局类

谢谢!我缩短了介绍。此外,我还添加了我的site.pp和保存modulepath的environment.conf。此外,我使用
puppet cert list(所有
)检查我的证书,certname包含在其中,并且具有
+
,我理解这意味着它已添加。此外,我按照您的建议从层次结构中删除了环境部分。反正我也没打算用它。实际上,我不知道你把php作为一个全局模块是什么意思。模块出现在我的环境路径中。@chrisissory我更新了答案以澄清全局
php
声明注释。