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

时间:2017-01-18 08:45:42

标签: puppet hiera

我有一个正在运行的木偶主代理设置,目前正试图找出如何使用hiera来配置php。

我的Puppetfile:

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

我的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:

根据我的理解,所有服务器上应该存在的常规配置都会进入common.yaml。通过此设置,我设法在我的节点上使用此配置在hieradata/common.yaml

安装ntp
---
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

现在,我的两个问题是:

我的hiera文件是否在正确的位置?我错过了什么让它为我的代理提供php?

1 个答案:

答案 0 :(得分:3)

这里有多个问题/可能性,所以让我们迭代地浏览它们。

首先,您使用的是默认datadir

/etc/puppetlabs/code/environments/%{environment}/hieradata

但是,您的优先级为:

"environment/%{server_facts.environment}"

这没有意义,因为您具有根据目录环境区分节点数据的优先级,但您也将hieradata直接放在目录环境中。如果您想要基于目录环境的优先级,请将您的hieradata目录更改为在以下直接环境之外:

/etc/puppetlabs/code/hieradata

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

其次,你没有展示自己的site.pp,但是你还记得你的hiera_include('classes')吗?这将查找数组classes,然后包含它们,这是你想要的。如果您没有这样做,那么您所描述的节点配置问题就会发生。

第三,site中的modulepath是?您需要将其添加到puppet.confenvironment.conf

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

附注:

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