首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Puppet:如果另一个Exec资源失败,如何执行Exec资源

Puppet:如果另一个Exec资源失败,如何执行Exec资源
EN

Stack Overflow用户
提问于 2020-07-21 06:18:34
回答 1查看 130关注 0票数 0

是否可以仅在另一个exec资源出现故障时执行资源。

代码语言:javascript
复制
exec {'register_host':
   unless    => '/etc/is_host_exist.sh',
   command   => '/etc/script/register_host.sh -h hostname',
   path      => '/usr/bin:/usr/sbin/',
   provider  => 'shell',
   notify    => 'register_service',
}

exec {'register_service':
   command  => '/etc/script/register_service.sh -s svcname',
   path     => '/usr/bin:/usr/sbin/',
   provider => 'shell',
}

所以,这里我想在register_host失败时执行register_service。有些是我的依赖逻辑不起作用。

谢谢詹姆斯

EN

回答 1

Stack Overflow用户

发布于 2020-07-21 10:10:35

Exec资源不是幂等的,应该尽可能避免。

话虽如此,让我们看看您希望在伪代码中发生什么:

代码语言:javascript
复制
register_host_success = register_host()
if (!register_host_success) {
  register_service()
}

使用notify

因此,考虑到is_host_exist.sh可以检查register_host是否失败,那么:

  1. 您需要执行subscribe => Exec['register_host'],因此您需要确保每当触发Exec['register_host']时也会触发Exec['register_service']
  2. 您需要确保仅由于
  3. 而调用Exec['register_service']仅在Exec['register_host']失败时才运行Exec['register_service']

代码语言:javascript
复制
exec {'register_host':
   unless    => '/etc/is_host_exist.sh',
   command   => '/etc/script/register_host.sh -h hostname',
   path      => '/usr/bin:/usr/sbin/',
   provider  => 'shell',
}

exec {'register_service':
   command   => '/etc/script/register_service.sh -s svcname',
   path      => '/usr/bin:/usr/sbin/',
   provider  => 'shell',
   unless    => '/etc/is_host_exist.sh',
   refresh   => true,
   subscribe => Exec['register_host']
}

假设您的脚本(*.sh)在成功时将使用exit 0,在失败时将使用exitnon 0notify/subscribe可以互换使用,使用任何您认为最好的( more docs )

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63004621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档