2017-08-25 30 views
0

我正在使用無主配置中的Puppet 4.5,並試圖創建一個Puppet函數來讀取指派角色和環境的簡單配置文件。我沒有任何可以改變的hiera/facter的集成。函數讀取masterless puppet中的角色,環境文件

的文件格式是:

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

木偶的功能,將讀取該文件是一個名爲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, 
    } 

} 

好像有將是一個更好的方式來做到這一點。我完全脫離基地嗎?

+0

無主,無法改變Facter或Hiera?鑑於這些苛刻的限制,這似乎是一個合理的選擇。 –

+0

@MattSchuchard - 我對傀儡有點新鮮。有沒有什麼辦法可以在我的git倉庫中使用hiera/factor,並且獨立於默認的系統配置(/etc/puppet.conf)? – saarp

+0

是的:您可以使用外部和自定義事實。另外,如果您使用的是非古老版本的Puppet(> = 4.3),則可以使用Hiera模塊數據。請注意,在Puppet 4.8之前,模塊數據不是「生產準備」。 –

回答

0

事實證明,這是一個更簡單的方法,而不是嘗試創建一個讀取非標準配置文件的函數。相反,我使用site.pp文件創建node {}條目。我還參數化了myapp類以基於節點進行輸入。

所以我site.pp樣子:

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

這或許可以得到改善。其中一個問題是使用非Puppet配置文件,我也能夠在我的bash包裝器腳本中控制執行。儘管如此,隨着節點定義的需求大部分消失了。