需要忽略错误并继续执行Puppet Recipe,例如" ignore_failure"在厨师

时间:2016-04-25 13:53:43

标签: puppet devops

我遇到了需要忽略错误并继续执行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**

1 个答案:

答案 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技巧,以确保整个命令始终成功。