2

我正在为我的 puppet master 配置文件/角色使用 control-repo。

我正在使用 Hiera,我想在层次结构中添加角色

我的hiera.yaml看起来像:

:backends:
  - yaml
:yaml:
  :datadir: "/etc/puppetlabs/code/environments/%{::environment}/hieradata"
:hierarchy:
  - "nodes/%{::trusted.certname}"
  - "roles/%{::role}"
  - "common"

网站.pp

node xx01 {
include role::cassandra
}

node xx02 {
include role::mysql
}

node xx03 {
include role::cassandra
}

例如,我应该为节点 xx01 和 xx03 添加角色事实。因此,将来为每个新节点添加事实是没有用的。所以我希望为每个新节点添加这个事实。

因此,最好的方法是添加代码以在控件存储库中添加角色的事实。不在模块中。

傀儡代理似乎本质上没有角色事实,所以我在中添加了角色事实/etc/puppetlabs/facter/facts.d

如果主机名反映了角色,我认为与主机名进行比较以添加角色的事实是没有用的。所以我可以使用带有主机名而不是角色的层次结构。

4

1 回答 1

1

您可以使用外部事实或自定义事实来执行此操作。我还应该注意,您的 hiera 文件完全没有问题,一旦填充了该事实,它将自动获取您的角色事实以进行数据解析。我还将从该 hiera 文件中假设您正在使用 Puppet 4、Facter 3 和 Hiera 3(不是具有模块数据查找等的 Puppet Data Provider),因为您使用的语法和约定与这些一致。

假设您有角色 app、db 和 report。

对于自定义事实,您可能希望在lib/facter/role.rb已编译模块的目录中编写如下代码:

Facter.add('role') do
  setcode do
    case Facter.value(:hostname)
    when /db/ then role = 'db'
    when /app/ then role = 'app'
    when /report/ then role = 'report'
    else role = default
    role
  end
end

这将是如何执行此操作的一个简单示例。

lib/facts.d您也可以使用放置在已编译模块目录中的外部事实来执行此操作,例如文件role.yamlrole.sh文件。yaml 将适用于静态数据,shell 脚本将是如何在不使用 ruby​​ 的情况下动态确定服务器角色的示例。

您可以在此处查看其他文档:https ://docs.puppet.com/facter/3.4/custom_facts.html

于 2016-09-17T12:07:37.410 回答