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

使用Puppet在Windows上管理主机文件,puppet,hosts,hiera,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 = hier

我正在尝试使用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 :; }
}
我尝试过使用
文件
资源而不是
主机
资源,也尝试过在没有任何类的情况下使用它,但由于某种原因,我遇到了这个错误

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
正如你所看到的,它声称我有一个重复的声明,但奇怪的是,它说它在同一行有问题。它认为出于某种原因,它两次声明同一件事

这就是我现在拥有的代码(我知道它不起作用,但错误听起来并不相关)

你知道怎么做吗?

解决了这个问题

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"
        }
}
修好了

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"
        }
}

首先让我感到吃惊的是,您的yaml数据和两个Puppet片段都有语法错误。此外,错误消息属于您的站点清单,与您正在显示的代码无关,因此请向我们显示该代码。这就是代码。您在
站点内的类中放置了定义。pp
?lol yes,起初它不在那里,这是最后一次尝试好的,我将重新表述我的问题。有人能告诉我需要做什么才能使它工作吗?你可以忽略我的代码。我只需要了解如何在windows和linux上实现它,它工作得非常好。我首先想到的一件大事是,您的yaml数据和两个Puppet片段都有语法错误。此外,错误消息属于您的站点清单,与您正在显示的代码无关,因此请向我们显示该代码。这就是代码。您在
站点内的类中放置了定义。pp
?lol yes,起初它不在那里,这是最后一次尝试好的,我将重新表述我的问题。有人能告诉我需要做什么才能使它工作吗?你可以忽略我的代码。我只需要了解如何在windows和linux上实现它,它非常好用