2016-04-25 28 views
1

我被困在需要忽略错误并继续执行Puppet Recipe的情况下。需要忽略错误并继续执行Puppet Recipe,像厨师的“ignore_failure”

厨师是否有像“ignore_failure”这样的属性,以便我可以从下面的情况中克服。如果不是,请建议解决相同的问题。

第1步:在/ tmp目录中找到.txt文件并从/ tmp目录中删除。

第2步:执行第1步[退出代码0或1]后,必须创建当前时间打印的文件。

问题 ::如果.txt文件不在/ tmp目录中,则出现错误,第2步无法执行。的清单

件上傀儡师:

执行[ 'delete_str_tmp'] - >文件[ '/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") 
} 

当我跑“木偶剂 - 测试',它给出了以下错误:

注意:/ Stage [main]/Main/Node [app1-server]/Exec [delete_str_tmp]/returns:rm:missing operand注意:/ Stage [主] /主/节点[APP1-服务器]/Exec [delete_str_tmp] /返回:尝试'rm --help'以获取更多信息。错误:find/tmp/-name'.txt'-type f | xargs -n 1 rm & & true返回123而不是[0] Error:/ Stage [main]/Main/Node [app1-server]/Exec [delete_str_tmp] /返回:从notrun更改为0失败:find/tmp/-name'.txt'-type f | xargs -n 1 rm & & true返回123代替[0]中的一个注意:/Stage[main]/Main/Node[app1-server]/File[/info.txt]:Dependency Exec [delete_str_tmp]失败:真正的警告: /Stage[main]/Main/Node[app1-server]/File[/info.txt]:因为依赖失败的跳绳

+0

http://serverfault.com/questions/450602/puppet-error-returned-1-instead-of-one-of-0说:“你可以将'returns'设置为成功期望的退出代码集“ –

+0

谢谢杰里,我已经在成功的exec资源中设置了预期的退出代码。从这我可以忽略错误并继续执行Puppet Recipe。 Exec ['delete_str_tmp'] - >文件['/info.txt'] exec {'delete_str_tmp': path => ['/ bin /','/ sbin /','/ usr/bin/','/ usr/sbin /'], command =>“find/tmp/-name'* .txt'-type f | xargs -n 1 rm”, returns => [123] } file {'/info.txt': ensure =>'present', content => inline_template(“由Puppet在<%= Time.now%>创建\ n”) } –

回答

1

为您的特定情况下,使用Tidy资源,而不是一个Exec执行清理:(缺省情况下,整齐不删除目录)

tidy { 'delete_str_tmp': 
    path => '/tmp', 
    matches => '*.txt' 
} 

更一般地说,指定与Puppet的资源关系,就像您通过链运算符所做的那样,表示依赖资源只能在独立资源同步时正确同步。从这一点开始排序,但是如果Puppet无法同步独立资源,也不会尝试同步从属资源。

对于Exec特别是,您必须确保Puppet将正确地将退出状态映射为成功或失败。您可以通过仔细选择您的命令或使用returns参数来执行此操作。对于这种情况,我认为前者更合适,因为它不依赖于预测所有可能的退出状态。你可以做这样的:

exec { 'delete_str_tmp': 
    path => [ '/bin/', '/sbin/' , '/usr/bin/', '/usr/sbin/' ], 
    command => "find /tmp/ -name '*.txt' -type f | xargs -n 1 rm || :", 
} 

:是一个标准的shell内置一个什么也不做,并返回一个成功代码。因此,将“||:”添加到命令的末尾是标准的shell技巧,可确保总体命令始终成功。

+0

谢谢John,两种方法解决了我的问题问题。 –

+0

@PeterSouter,有没有理由编辑我的完美链接到另一个(虽然也很好)的链接? –

+0

对不起,我只是不想引起企业和开源文档之间的混淆,尽管对于Puppet,它们与Puppet> 4相同:) –