需要忽略错误并继续执行 Puppet Recipe,例如 chef 中的 "ignore_failure"

Need ignore error and continue with execution of Puppet Recipe, like "ignore_failure" in chef

我遇到了需要忽略错误并继续执行 Puppet Recipe 的情况。

Chef中有没有像“ignore_failure”这样的属性,让我克服下面的情况。如果不是,请建议解决同样的问题。

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

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

问题 :: 如果 .txt 文件不存在于 /tmp 目录中,我将收到错误消息并且无法执行第 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")
    }

当我在 Puppet Agent 上 运行 'puppet agent --test' 时,出现以下错误:

> 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**

对于您的特定情况,使用 Tidy 资源而不是 Exec 来执行清理:

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

(默认情况下,tidy 不会删除目录。)

更一般地说,指定与 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 内置函数,什么都不做,returns 是一个成功代码。因此,在命令末尾添加“|| :”是一个标准的 shell 技巧,可确保整个命令始终成功。