在 Puppet hiera 设置中将 hiera 文件放在哪里
Where to put hiera files in puppet hiera setup
我有一个 运行 puppet 主代理设置,目前正在尝试弄清楚如何使用 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'
我的site.pp
:
hiera_include('classes')
我的environment.conf
,维护模块路径的地方:
manifest = site.pp
modulepath = modules:site
我在 /etc/puppetlabs/puppet/hiera.yml
上的 puppet master 上的 hiera 配置:
---
: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:
据我了解,应该出现在所有服务器上的一般配置进入 common.yaml
。通过此设置,我设法使用此配置在我的节点上安装 ntp hieradata/common.yaml
:
---
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
下的清单:
class profile::php {
class { '::php': }
}
但这并没有规定php。如您所见,我使用锻造中的 mayflower/php
。
现在,我的两个问题是:
我的 php 的 hiera 文件在正确的位置吗?那么我缺少什么来向我的代理人提供php?
您这里有多个 issues/possibilities,所以让我们反复检查它们。
首先,您使用的是 datadir
的默认值:
/etc/puppetlabs/code/environments/%{environment}/hieradata
但是,您的优先级为:
"environment/%{server_facts.environment}"
这没有意义,因为您具有根据目录环境区分节点数据的优先级,但您也将 hieradata 直接放置在目录环境中。如果你想要基于目录环境的优先级,那么将你的 hieradata 目录更改为在直接环境之外:
/etc/puppetlabs/code/hieradata
否则,您应该将该级别从您的优先级中删除,因为它没有任何价值并且会增加查找时间。
其次,你没有展示你的site.pp
,但是你还记得你的hiera_include('classes')
吗?这将查找数组 classes
然后包含它们,这似乎是你想要的。如果您不这样做,就会出现您描述的节点配置问题。
第三,你的modulepath
中有site
吗?您需要将其附加到 puppet.conf
或 environment.conf
.
中
第四,您节点的fqdn
可能与certname
不匹配。检查 Puppetmaster 上的 certs 目录以获取节点证书。
旁注:
- 你问题的前半部分包含很多无关信息,并且缺少很多有用的相关信息。请考虑编辑问题以提供更多有用的信息并更加简洁。
- 由于
ntp
有效,我假设您的模块已成功安装 r10k
到环境目录中。我还假设模块存在于您的节点的目录环境中。
- 没有真正的理由在您的
::php
. 声明中将 php
class 指定为全局
我有一个 运行 puppet 主代理设置,目前正在尝试弄清楚如何使用 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'
我的site.pp
:
hiera_include('classes')
我的environment.conf
,维护模块路径的地方:
manifest = site.pp
modulepath = modules:site
我在 /etc/puppetlabs/puppet/hiera.yml
上的 puppet master 上的 hiera 配置:
---
: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:
据我了解,应该出现在所有服务器上的一般配置进入 common.yaml
。通过此设置,我设法使用此配置在我的节点上安装 ntp hieradata/common.yaml
:
---
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
下的清单:
class profile::php {
class { '::php': }
}
但这并没有规定php。如您所见,我使用锻造中的 mayflower/php
。
现在,我的两个问题是:
我的 php 的 hiera 文件在正确的位置吗?那么我缺少什么来向我的代理人提供php?
您这里有多个 issues/possibilities,所以让我们反复检查它们。
首先,您使用的是 datadir
的默认值:
/etc/puppetlabs/code/environments/%{environment}/hieradata
但是,您的优先级为:
"environment/%{server_facts.environment}"
这没有意义,因为您具有根据目录环境区分节点数据的优先级,但您也将 hieradata 直接放置在目录环境中。如果你想要基于目录环境的优先级,那么将你的 hieradata 目录更改为在直接环境之外:
/etc/puppetlabs/code/hieradata
否则,您应该将该级别从您的优先级中删除,因为它没有任何价值并且会增加查找时间。
其次,你没有展示你的site.pp
,但是你还记得你的hiera_include('classes')
吗?这将查找数组 classes
然后包含它们,这似乎是你想要的。如果您不这样做,就会出现您描述的节点配置问题。
第三,你的modulepath
中有site
吗?您需要将其附加到 puppet.conf
或 environment.conf
.
第四,您节点的fqdn
可能与certname
不匹配。检查 Puppetmaster 上的 certs 目录以获取节点证书。
旁注:
- 你问题的前半部分包含很多无关信息,并且缺少很多有用的相关信息。请考虑编辑问题以提供更多有用的信息并更加简洁。
- 由于
ntp
有效,我假设您的模块已成功安装r10k
到环境目录中。我还假设模块存在于您的节点的目录环境中。 - 没有真正的理由在您的
::php
. 声明中将
php
class 指定为全局