读取角色的功能,无主傀儡中的环境文件



我正在无主配置中使用Puppet 4.5,并尝试创建一个Puppet函数来读取分配角色和环境的简单配置文件。我没有任何可以更改的与 hiera/facter 的集成。

文件格式为:

host1::java_app_node::qa
host2::nodejs_app_node::prod

将读取此文件的 Puppet 函数位于名为homebase的模块中。我想函数返回一个哈希或拆分配置值的哈希数组。这将让我在模板中使用它们。

modules/homebase/manifests/init.pp中,我定义了:

$role_file = 'puppet://role.lst'

然后我创建了如下modules/homebase/functions/get_roles.pp

function homebase::get_roles() {
$func_name = 'homebase::get_roles()'
if ! File.exists?($::homebase::role_file) {
fail("Could not find #{$::homebase::role_file}")
}
hosts = { }
File.open($::homebase::role_file).each |line| {
parts = line.split(/::/)
hosts[parts[0]] = { 'host' => parts[0], 'role' => parts[1], 'env' => parts[2] }
}
return hosts
}

在其他类中,我想调用:

class myapp {
$servers = homebase::get_roles().each | k, v | { 
$v['host'] if $v['role'] =~ /myapp/ && $v['env'] == $environment
}    
file { 'myapp.cfg':
ensure => file,
path => '/opt/myapp/myapp.cfg',
source => template("/myapp/myapp.cfg.erb"),
mode => '0644',
owner => myuser,
group => myuser,
}
}

似乎会有更好的方法来做到这一点。我完全偏离了基础吗?

事实证明,有一种更简单的方法可以做到这一点,而不是尝试创建一个函数来读取非标准配置文件。相反,我使用site.pp文件来创建node {}条目。我还参数化了myapp类以基于节点获取输入。

所以我的site.pp看起来像:

node 'server1.mydomain', 'server2.mydomain' {
$myvar = [ 'val1', 'val2' ]
class { 'myapp':
values => $myvar
}
}

这也许可以改进。其中一个问题是使用非 Puppet 配置文件,我还能够在我的 bash 包装器脚本中控制执行。但是,当节点定义时,大部分需求都消失了。

最新更新