【发布时间】:2021-11-09 13:32:32
【问题描述】:
这是我的一段主厨 ruby 代码,我正在尝试将一个值从一个块传递到另一个块。 我们在服务器上运行了多个端口,下面的代码将检查端口,如果它没有运行,它将尝试执行第二个块。我附上了代码和错误。请帮助我哪里出错了。
ports.each do |port|
bash "Check_port_running_#{port}" do
code <<-EOH
pidval=$(ps -ef | grep /opt/redis/src/redis-server | grep *:#{port} | grep -vc grep)
if (($pidval == 0));then
portval_#{port}=true
else
portval_#{port}=false
fi
EOH
end
bash "Starting_redis_after_crash_for_port - #{port}" do
only_if { "portval_#{port}" }
code <<-EOH
rm -f #{port}.pid
sudo service redis@#{port} start
EOH
end
end
错误:低于错误
================================================================================
Error executing action `run` on resource 'bash[Starting_redis_after_crash_for_port - 54321]'
================================================================================
Errno::ENOENT
-------------
No such file or directory - portval_54321
Resource Declaration:
---------------------
# In /tmp/kitchen/cache/cookbooks/csg_orderservices_redis/recipes/configure.rb
184: bash "Starting_redis_after_crash_for_port - #{port}" do
185: only_if "portval_#{port}"
186: code <<-EOH
187: rm -f #{port}.pid
188: sudo service redis@#{port} start
189: EOH
190: end
191: end
Compiled Resource:
------------------
# Declared in /tmp/kitchen/cache/cookbooks/csg_orderservices_redis/recipes/configure.rb:184:in `block in from_file'
bash("Starting_redis_after_crash_for_port - 54321") do
action [:run]
default_guard_interpreter :default
backup 5
interpreter "bash"
declared_type :bash
cookbook_name "csg_orderservices_redis"
recipe_name "configure"
code " rm -f 54321.pid\n sudo service redis@54321 start\n"
domain nil
user nil
only_if "portval_54321"
end
【问题讨论】:
-
only_if守卫应该评估为true/false。您可能需要一个表达式来比较它并返回 true 或 false 状态。 -
或者您是否希望找到具有该名称的文件(根据错误)?
-
不..我不期待任何文件..不知道为什么找不到目录或文件,
-
那么当你使用
only_if的时候,你想和portval_#{port}匹配什么条件呢? -
试图从第一个块中获取真值或假值。
标签: ruby shell chef-infra