我正在尝试使用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," "),
}
知道如何做到这一点吗?
答案 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 :; }
}