在无主木偶中读取角色,环境文件的功能

时间:2017-08-25 00:52:16

标签: ruby puppet

我在无主配置中使用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,
    }

}

似乎有更好的方法来做到这一点。我完全不在基地吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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