不同的唯一条件作为厨师的守卫

时间:2017-08-30 14:48:15

标签: ruby scripting chef chef-recipe guard

有没有办法在厨师中使用这个脚本(或看起来大致相同的东西)作为only_if后卫?

#!/bin/bash
application = application_name
if (( $(ps -ef | grep -v grep | grep $service | wc -l) > 0 ))
then  *do something*
fi

我尝试了经典的方法,但它没有返回任何内容,因此默认情况下only_if条件通过,或者它告诉我我不能将字符串与整数进行比较(这很明显)。

execute "script" do
command "my command here"
only_if "$(ps -ef | grep -v grep | grep service_name | wc -l) > 0"

任何想法或建议都表示赞赏。

2 个答案:

答案 0 :(得分:1)

要按字面意思转换它,您需要使用test命令,通常别名为[only_if "[ $(ps -ef | grep -v grep | grep service_name | wc -l) > 0 ]"。但是你也可以在Ruby代码中做得更好:

only_if { shell_out!('ps -ef').include?('service_name') }

答案 1 :(得分:0)

要更一般地回答这个问题,如果您想要为only_ifnot_if后卫使用任意脚本,您可以按照以下方式执行操作:

my_guard_script = File.join Chef::Config[:file_cache_path], 'my_guard_script.sh'

file my_guard_script do
  content <<- EOF
#!/bin/sh

# contents of your script here
EOF
end

resource 'my_awesome_resource' do
  some_parameter 'some_value'
  only_if my_guard_script
end

警告:我没有对此进行测试,因此可能存在错误。