清单中的 Puppet Hiera 查找不起作用
Puppet Hiera lookup in manifest not working
我正在学习 Puppet,刚刚阅读了有关 Hiera 的内容。
在讨论这个问题之前,我在下面提供了一些配置设置:
$ cat /etc/puppetlabs/puppet/puppet.conf
[master]
codedir = /etc/puppetlabs/code
[agent]
server = puppet.example.com
[master]
certname = puppet.example.com
[master]
vardir = /var/opt/puppetlabs/puppetserver
ssldir = $vardir/ssl
[main]
environmentpath = /etc/puppetlabs/code/environments
basemodulepath = /etc/puppetlabs/code/modules
$ cat /etc/puppetlabs/puppet/hiera.yaml
---
:backends:
- yaml
:hierarchy:
- "nodes/%{::trusted.certname}"
- 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:
更新:通过@um-FelixFrank 的回答后,我更改了默认的 Hiera 配置文件位置。配置文件包含以下内容:
$ cat /etc/puppetlabs/code/hiera.yaml
---
:backends:
- yaml
:hierarchy:
- "hostname/%{facts.hostname}"
- "os/%{facts.osfamily}"
- common
:yaml:
:datadir: /etc/puppetlabs/code/hieradata
我在 /etc/puppetlabs/code
下创建了 hieradata 目录
$ ll /etc/puppetlabs/code/
total 4
drwxr-xr-x. 4 root root 32 Dec 20 11:17 environments
drwxr-xr-x. 3 root root 39 Dec 21 12:22 hieradata
-rw-r--r--. 1 root root 153 Dec 20 16:51 hiera.yaml
drwxr-xr-x. 2 root root 6 Dec 21 11:02 modules
$ cat /etc/puppetlabs/code/hieradata/common.yaml
---
puppet::status: 'running'
puppet::enabled: true
我尝试在我的主机名 yaml 文件中覆盖上述值,如下所述:
$ cat /etc/puppetlabs/code/hieradata/hostname/delvmplgc1.yaml
---
puppet::status: 'stopped'
puppet::enabled: false
$ facter hostname
delvmplgc1
我在 Puppet 服务器上创建了一个示例清单,以查看我是否能够在清单中执行 Hiera 查找。
$ cat /etc/puppetlabs/code/environments/qa/manifests/hierasample.pp
notify { 'welcome':
message => "Hello!",
}
$status = lookup({ name => 'puppet::status', default_value => 'running' })
$enabled = lookup({ name => 'puppet::enabled', default_value => true })
service { 'puppet':
ensure => $status,
enable => $enabled,
}
现在的问题是,当我尝试执行清单时,我没有看到与 Hiera 相关的消息。
$ puppet apply /etc/puppetlabs/code/environments/qa/manifests/hierasample.pp
Notice: Compiled catalog for delvmplgc1.sapient.com in environment production in 0.99 seconds
Notice: Hello!
Notice: /Stage[main]/Main/Notify[welcome]/message: defined 'message' as 'Hello!'
Notice: Applied catalog in 0.10 seconds
我们将不胜感激。
正如标准 hiera.yaml
中的注释所述,datadir
位于
/etc/puppetlabs/code/environments/%{environment}/hieradata
因此,与其直接在 /etc/puppetlabs/code
中创建 hieradata
,不如将其向下移动两层到 /etc/puppetlabs/code/environments/qa
和其他环境中。
我正在学习 Puppet,刚刚阅读了有关 Hiera 的内容。
在讨论这个问题之前,我在下面提供了一些配置设置:
$ cat /etc/puppetlabs/puppet/puppet.conf
[master]
codedir = /etc/puppetlabs/code
[agent]
server = puppet.example.com
[master]
certname = puppet.example.com
[master]
vardir = /var/opt/puppetlabs/puppetserver
ssldir = $vardir/ssl
[main]
environmentpath = /etc/puppetlabs/code/environments
basemodulepath = /etc/puppetlabs/code/modules
$ cat /etc/puppetlabs/puppet/hiera.yaml
---
:backends:
- yaml
:hierarchy:
- "nodes/%{::trusted.certname}"
- 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:
更新:通过@um-FelixFrank 的回答后,我更改了默认的 Hiera 配置文件位置。配置文件包含以下内容:
$ cat /etc/puppetlabs/code/hiera.yaml
---
:backends:
- yaml
:hierarchy:
- "hostname/%{facts.hostname}"
- "os/%{facts.osfamily}"
- common
:yaml:
:datadir: /etc/puppetlabs/code/hieradata
我在 /etc/puppetlabs/code
$ ll /etc/puppetlabs/code/
total 4
drwxr-xr-x. 4 root root 32 Dec 20 11:17 environments
drwxr-xr-x. 3 root root 39 Dec 21 12:22 hieradata
-rw-r--r--. 1 root root 153 Dec 20 16:51 hiera.yaml
drwxr-xr-x. 2 root root 6 Dec 21 11:02 modules
$ cat /etc/puppetlabs/code/hieradata/common.yaml
---
puppet::status: 'running'
puppet::enabled: true
我尝试在我的主机名 yaml 文件中覆盖上述值,如下所述:
$ cat /etc/puppetlabs/code/hieradata/hostname/delvmplgc1.yaml
---
puppet::status: 'stopped'
puppet::enabled: false
$ facter hostname
delvmplgc1
我在 Puppet 服务器上创建了一个示例清单,以查看我是否能够在清单中执行 Hiera 查找。
$ cat /etc/puppetlabs/code/environments/qa/manifests/hierasample.pp
notify { 'welcome':
message => "Hello!",
}
$status = lookup({ name => 'puppet::status', default_value => 'running' })
$enabled = lookup({ name => 'puppet::enabled', default_value => true })
service { 'puppet':
ensure => $status,
enable => $enabled,
}
现在的问题是,当我尝试执行清单时,我没有看到与 Hiera 相关的消息。
$ puppet apply /etc/puppetlabs/code/environments/qa/manifests/hierasample.pp
Notice: Compiled catalog for delvmplgc1.sapient.com in environment production in 0.99 seconds
Notice: Hello!
Notice: /Stage[main]/Main/Notify[welcome]/message: defined 'message' as 'Hello!'
Notice: Applied catalog in 0.10 seconds
我们将不胜感激。
正如标准 hiera.yaml
中的注释所述,datadir
位于
/etc/puppetlabs/code/environments/%{environment}/hieradata
因此,与其直接在 /etc/puppetlabs/code
中创建 hieradata
,不如将其向下移动两层到 /etc/puppetlabs/code/environments/qa
和其他环境中。