使用Puppet在Windows上管理主机文件

时间:2016-09-09 08:11:18

标签: puppet hosts hiera

我正在尝试使用Puppet和Hiera在Windows机器上管理我的主机文件。我的问题是我从未真正使用过Hiera,而且我正在努力将数据内容解析成适当的格式。

hieradata/hiera.yaml中的相关部分如下所示:

myhosts : [
'host1 1.2.3.4',
'host2 2.3.4.5',
'host3 3.4.5.6']

我有使用主机模块的代码,但它也依赖于我没有的类,所以自然它不起作用。

class hosts::module (
  $myhosts = hiera('myhosts'),
)
{
  define update_hosts {

    $value = split($name,' ')

    host {
      "${value[0]}" : ip => "${value[1]}",
    }
  }
  update_hosts { $myhosts :; }
}

我尝试使用file资源而不是host资源,并尝试不使用任何类,但出于某种原因我收到此错误

Error: Could not retrieve catalog from remote server: Error 500 on SERVER:
Server Error: Evaluation Error: Error while evaluating a Resource Statement, 
Evaluation Error: Error while evaluating a Resource Statement, Duplicate
declaration: File[C:\Temp\tmp.txt] is already declared in file
/etc/puppetlabs/code/environments/production/manifests/site.pp:4; cannot redeclare 
at /etc/puppetlabs/code/environments/production/manifests/site.pp:4
at /etc/puppetlabs/code/environments/production/manifests/site.pp:4:1
at /etc/puppetlabs/code/environments/production/manifests/site.pp:10 on node puppet-agent

正如你所看到的,它声称我有一个重复的声明,但奇怪的是它说它有同一行的问题。它认为它出于某种原因两次声明同样的事情。

这是我现在的代码(我知道它不起作用,但错误并不真正相关)

define hosts_update($content) {
  file { 'C:\Temp\tmp.txt' :
    ensure  => file,
    content =>  $content,
  }
}

hosts_update{ hiera('myhosts'):
content => split($name," "),
}

知道如何做到这一点吗?

1 个答案:

答案 0 :(得分:0)

修好了。

site.pp

s = """13:45:09 HEY HOW ARE YOU

     I AM FINE

13:50:10 OK THEN

     Bye"""

import re

m = re.search('^\d\d:\d\d:\d\d(.*?)(?=\d\d:\d\d:\d\d)', s, re.I + re.M + re.S)
print(m.groups()[0])

init.pp

include update_hosts

host.pp

class update_hosts::host
(
  $hosts = hiera('hosts_list'),
)
{
        update_host { $hosts :; }
}