你如何配置 Puppet exec 来执行另一个命令作为 onlyif 的一部分
How do you configure a Puppet exec to execute another command as part of onlyif
我正在编写一个 Puppet 模块来部署 Hyperic,最后一部分正在执行 hq-agent.sh start 如果服务不是 运行 .要确定服务是否为 运行,我可以执行 hq-agent.sh status,其中包含文本 "HQ Agent is running"。
Puppet 文档指出 onlyif 可以工作,但是需要 return 退出代码 1 如果 运行 和 0 如果不是 运行;执行转换的适用 bash(?) 命令是什么?
伪代码 => if ('hq-agent.sh status' contains "running") return 1;否则 return 0;
这听起来很像是应该通过 Service
资源而不是 Exec
建模的东西。这样做不需要通过系统的常规服务控制子系统(initscripts、systemd 等)来管理服务,尽管我肯定会建议为此进行安排,即使您必须自己编写适当的脚本或配置文件.然而,在这种情况下,hq-agent.sh
脚本听起来与传统的 initscript 具有类似(如果不完全相同)的接口。如果是这样,那么将其设置为普通系统服务可能会非常容易。如果你这样做了,那么管理它就可以像
一样简单
service { 'hq-agent':
ensure => 'running',
enable => true,
}
但如果您只想使用 临时 脚本来管理服务,Puppet 可以支持。具体来说,the Service
resource 具有 start
、restart
、status
和 stop
属性,您可以使用这些属性指定任意命令来管理服务。例如,
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 启动脚本的表面相似性,对 hq-agent.sh
脚本的退出代码做出了一些假设。具体来说,它假定它们符合 LSB specifications。如果实际上它们没有,那么您需要测试脚本的输出而不是其退出代码,那么典型的方法是将输出通过管道传输到 grep
。例如,
status => 'hq-agent.sh status | grep -q running'
但是请注意,您可能需要测试脚本的标准错误而不是标准输出。
我正在编写一个 Puppet 模块来部署 Hyperic,最后一部分正在执行 hq-agent.sh start 如果服务不是 运行 .要确定服务是否为 运行,我可以执行 hq-agent.sh status,其中包含文本 "HQ Agent is running"。
Puppet 文档指出 onlyif 可以工作,但是需要 return 退出代码 1 如果 运行 和 0 如果不是 运行;执行转换的适用 bash(?) 命令是什么?
伪代码 => if ('hq-agent.sh status' contains "running") return 1;否则 return 0;
这听起来很像是应该通过 Service
资源而不是 Exec
建模的东西。这样做不需要通过系统的常规服务控制子系统(initscripts、systemd 等)来管理服务,尽管我肯定会建议为此进行安排,即使您必须自己编写适当的脚本或配置文件.然而,在这种情况下,hq-agent.sh
脚本听起来与传统的 initscript 具有类似(如果不完全相同)的接口。如果是这样,那么将其设置为普通系统服务可能会非常容易。如果你这样做了,那么管理它就可以像
service { 'hq-agent':
ensure => 'running',
enable => true,
}
但如果您只想使用 临时 脚本来管理服务,Puppet 可以支持。具体来说,the Service
resource 具有 start
、restart
、status
和 stop
属性,您可以使用这些属性指定任意命令来管理服务。例如,
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 启动脚本的表面相似性,对 hq-agent.sh
脚本的退出代码做出了一些假设。具体来说,它假定它们符合 LSB specifications。如果实际上它们没有,那么您需要测试脚本的输出而不是其退出代码,那么典型的方法是将输出通过管道传输到 grep
。例如,
status => 'hq-agent.sh status | grep -q running'
但是请注意,您可能需要测试脚本的标准错误而不是标准输出。