我遇到了需要忽略错误并继续执行Puppet Recipe的情况。
是否存在类似" ignore_failure "在厨师,以便我可以从下面的情况克服。如果没有,请建议解决相同的问题。
第1步:在/ tmp目录中找到.txt文件并从/ tmp目录中删除。
第2步:执行第1步[退出代码0或1]后,我必须创建以当前时间打印的文件。
问题 ::如果/ tmp目录中没有.txt文件,我收到错误,第2步无法执行。
Puppet Master上的清单:
Exec ['delete_str_tmp'] -> File [ '/info.txt' ]
exec { 'delete_str_tmp':
path => [ '/bin/', '/sbin/' , '/usr/bin/', '/usr/sbin/' ],
command => "find /tmp/ -name '*.txt' -type f | xargs -n 1 rm",
}
file { '/info.txt' :
ensure => 'present',
content => inline_template("Created by Puppet at <%= Time.now %>\n")
}
当我跑去傀儡代理人时 - 测试&#39;在Puppet Agent上,它出现以下错误:
> Notice:
> /Stage[main]/Main/Node[app1-server]/Exec[delete_str_tmp]/returns: rm:
> missing operand Notice:
> /Stage[main]/Main/Node[app1-server]/Exec[delete_str_tmp]/returns: Try
> 'rm --help' for more information. Error: find /tmp/ -name '.txt' -type
> f | xargs -n 1 rm && true returned 123 instead of one of [0] Error:
> /Stage[main]/Main/Node[app1-server]/Exec[delete_str_tmp]/returns:
> change from notrun to 0 failed: find /tmp/ -name '.txt' -type f |
> xargs -n 1 rm && true returned 123 instead of one of [0] Notice:
> /Stage[main]/Main/Node[app1-server]/File[/info.txt]: **Dependency
> Exec[delete_str_tmp] has failures: true Warning:**
> /Stage[main]/Main/Node[app1-server]/File[/info.txt]: **Skipping
> because of failed dependencies**
答案 0 :(得分:2)
对于您的特定情况,请使用Tidy
资源而不是public class Node: NSObject {
internal lazy var staticState: NodeState = {
return NodeState(node: self)
}()
}
来执行清理:
Exec
(默认情况下,tidy不会删除目录。)
更一般地说,通过链式运算符指定与Puppet的资源关系表示只有在独立资源同步时才能正确同步从属资源。从那里开始排序,但如果Puppet无法同步独立资源,也不会尝试同步从属资源。
特别是对于tidy { 'delete_str_tmp':
path => '/tmp',
matches => '*.txt'
}
,您必须确保Puppet将正确映射退出状态为成功或失败。您可以通过仔细选择命令或使用Exec
参数来执行此操作。对于这样的情况,我认为前者更合适,因为它并不依赖于您预测所有可能的退出状态。你可以这样做:
returns
exec { 'delete_str_tmp':
path => [ '/bin/', '/sbin/' , '/usr/bin/', '/usr/sbin/' ],
command => "find /tmp/ -name '*.txt' -type f | xargs -n 1 rm || :",
}
是内置的标准shell,不执行任何操作并返回成功代码。添加&#34; || :&#34;因此,命令的结尾是一个标准的shell技巧,以确保整个命令始终成功。