你如何配置一个Puppet exec来执行另一个命令作为onlyif的一部分

问题描述 投票:0回答:1

我正在编写一个Puppet模块来部署Hyperic,如果服务没有运行,最后一部分正在执行hq-agent.sh start。要确定服务是否正在运行,我可以执行hq-agent.sh状态,其中包含文本“HQ代理正在运行”。

Puppet文档声明只有if可以工作,但是如果运行则需要返回退出代码1,如果没有运行则返回0;什么是适用的bash(?)命令进行转换?

伪代码=> if('hq-agent.sh status'包含“running”)返回1;否则返回0;

bash puppet centos7 hyperic
1个回答
1
投票

这听起来非常像应该通过Service资源建模的东西,而不是Exec。这样做不需要通过系统的常规服务控制子系统(initscripts,systemd,...)来管理服务,但我肯定会建议安排它,即使你必须自己编写适当的脚本或配置文件。然而,在这种情况下,hq-agent.sh脚本听起来像是有一个类似于传统脚本的接口,如果不相同的话。如果是这样,那么将其设置为普通的系统服务可能非常容易。如果你这样做,那么管理就可以了

service { 'hq-agent':
  ensure => 'running',
  enable => true,
}

但是,如果您只是想使用临时脚本来管理服务,Puppet可以支持它。具体来说,the Service resource具有startrestartstatusstop属性,您可以使用这些属性指定用于管理服务的任意命令。例如,

service { 'hq-agent':
  ensure     => 'running',
  provider   => 'service',
  hasstatus  => false,
  hasrestart => false,
  status     => 'hq-agent.sh status',
  start      => 'hq-agent.sh start',
  stop       => 'hq-agent.sh stop',
  path       => '/path/to/hyperic/bin',
  # no 'enable' attribute specified
}

该特定示例基于其与标准SysV initscript的表面相似性,对hq-agent.sh脚本的退出代码做出一些假设。具体来说,它假设它们符合LSB specifications。如果它们实际上没有,那么您需要测试脚本的输出而不是其退出代码,那么典型的方法是将输出管道输入grep。例如,

  status => 'hq-agent.sh status | grep -q running'

但请注意,您可能需要测试脚本的标准错误而不是标准输出。

© www.soinside.com 2019 - 2024. All rights reserved.