我有一个名为$ applist的数组。这些值用于生成像这样的cron条目
$minute = 0
$applist.each |$application| {
$minute = $minute + 2
# notify{"Setting clear_logs for ${application}":}
# generate clear log entries
cron {"clear-logs_${application}":
command => "mk-job clear-logs_${application} /root/scripts/clear_logs.py -l 60 -d ${application}/logs -v -n >/dev/null 2>&1",
user => root,
hour => "3",
minute => "${minute}",
}
}
在我的迭代步骤中,分钟数不会增加2。我很确定它与lamdas有关,但我不知道如何解决这个困境
答案 0 :(得分:1)
我使用$ index这样解决了它
$minute = 0
$applist.each |$index, $application| {
$cron_minute = $minute + $index * 10
# notify{"Setting clear_logs for ${application}":}
# generate clear log entries
cron {"clear-logs_${application}":
command => "mk-job clear-logs_${application} /root/scripts/clear_logs.py -l 60 -d ${application}/logs -v -n >/dev/null 2>&1",
user => root,
hour => "3",
minute => "${cron_minute}",
}
}
答案 1 :(得分:1)
这是一个很好的问题,以上是正确的解决方案。
我想补充一点,这里的问题是Puppet中的变量无法重新分配:ref。
通常,如果你有如下代码 -
$c = 0
$c = $c + 1
您会收到评估错误:
Error: Evaluation Error: Cannot reassign variable '$c' (file: /tmp/foo.pp, line: 2, column: 4) on node alexs-macbook-pro.local
人们常常注意到,Puppet的变量因此不变“#34; ;他们是不变的。
更令人困惑的是,这种行为在迭代器块中发生了变化。请考虑此代码与问题中的示例更相似:
$c = 0
[1, 2, 3].each |$x| {
$c = $c + 1
notice($c)
}
现在代码编译得很好,但Puppet仍然无法重新分配变量$c
:
$ puppet apply /tmp/foo.pp
Notice: Scope(Class[main]): 1
Notice: Scope(Class[main]): 1
Notice: Scope(Class[main]): 1
这里要做的最好的事情就是在OP对他们的问题的答案中所示,并且每个都使用索引(类似于Ruby each_with_index
但语法略有不同):ref。
考虑:
$c = 0
[1, 2, 3].each |$i, $x| {
notice("Index is $i, x is $x")
}
现在我们得到:
Notice: Scope(Class[main]): Index is 0, x is 1
Notice: Scope(Class[main]): Index is 1, x is 2
Notice: Scope(Class[main]): Index is 2, x is 3