需要忽略错误并继续执行 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 技巧,可确保整个命令始终成功。
我遇到了需要忽略错误并继续执行 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 技巧,可确保整个命令始终成功。