如何在Puppet中创建两次相同的资源
我的要求是使用循环执行一些重复的文件配置工作,如以下内容:如何在Puppet中创建两次相同的资源,puppet,Puppet,我的要求是使用循环执行一些重复的文件配置工作,如以下内容: $no_of_managers = 2 $array = ['One','two','Three'] define loop() { notice("Configuring The Manager Nodes!!") if ($name == $no_of_managers+1) { notice("Loop Iteration Finished!!!") } else { notice("Itera
$no_of_managers = 2
$array = ['One','two','Three']
define loop() {
notice("Configuring The Manager Nodes!!")
if ($name == $no_of_managers+1) {
notice("Loop Iteration Finished!!!")
}
else
{
notice("Iteration Number : $name \n")
# Doing All Stuff Here
resource {$array:}
$next = $name + 1
loop { $next: }
}
}
loop { "1":}
define resource () {
# Doing my other Stuff
notice ("The Parsed value Name : ${name}\n")
}
现在,当第二次迭代运行时,出现以下错误:
Error: Duplicate declaration: Resource[One] is already declared in file
如何克服这个问题,我正在做的是集群设置。我是木偶的新手,所以非常感谢您的指导
用例:
我正在尝试设置一个具有多个Manager/Worker节点的集群,因此使用此脚本,用户有权选择需要多少Manager节点。因此,第一个循环用于复制必要的文件并创建所需数量的节点
第二个循环用于推送所有.erb模板。由于每个节点的配置稍有不同,.erb文件内部有自己的逻辑
因此,在每次迭代之后,我想将.erb模板推送到相应的节点。在Puppet 3.x中,您无法以您尝试的方式构建循环
resource { $array: }
是$array
内容的循环
你想解决的问题并不十分清楚。如果你能让你的问题更具体一点,我们可能会建议一个实际的实施方案
更新
如果您真的想走这条路,您需要为派生资源生成唯一的名称
$local_names = regsubst($array, '$', "-$name")
resource { $local_names: }
在您定义的类型中,您必须通过删除后缀来检索原始含义
define resource() {
$orig_name = regsubst($name, '-[0-9]+$', '')
# use $orig_name where you used $name before
}
请注意,即使导出的资源也必须具有唯一的名称。因此,转换可能必须在接收节点的清单中进行。您好,我已经编辑了这个问题,循环工作得很好。我有木偶3.6.2。是的,第二个回路在阵列上,我明白了。严格地说,您刚刚构建了一个递归定义;)我会更新我的答案。哇,你真是太棒了…非常感谢…:)