我正在尝试使用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:Temptmp.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:Temptmp.txt' :
ensure => file,
content => $content,
}
}
hosts_update{ hiera('myhosts'):
content => split($name," "),
}
你知道怎么做吗?
修复。
site.pp
include update_hosts
init.pp
class update_hosts::host
(
$hosts = hiera('hosts_list'),
)
{
update_host { $hosts :; }
}
host.pp
define update_host {
$value = split($name,' ')
host {
"${value[0]}" : ip => "${value[1]}",
target => "C:/Windows/System32/drivers/etc/hosts"
}
}