Windows操作系统下使用Puppet管理hosts文件



我正在尝试使用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"
        }
}

相关内容

  • 没有找到相关文章

最新更新