根据{CREATE_OID_SCHEMA}是否为true,尝试将模板变量{USE_EXISTING_SCHEMA}设置为= true或false。 在指定{CREATE_OID_SCHEMA}的IF条件时,我应该使用==或=吗?
case node['fmw']['shortname']
when /oid1/
IS_SECOND_OID_INSTALL = "false"
CONFIGURE_OVD_COMPONENT = "true"
CREATE_OID_SCHEMA = "true"
if CREATE_OID_SCHEMA = "true" then
USE_EXISTING_SCHEMA = "false"
else USE_EXISTING_SCHEMA = "true"
when /oid2/
IS_SECOND_OID_INSTALL = "true"
CONFIGURE_OVD_COMPONENT = "false"
CREATE_OID_SCHEMA = "false"
if CREATE_OID_SCHEMA = "true" then
USE_EXISTING_SCHEMA = "false"
else USE_EXISTING_SCHEMA = "true"
end
答案 0 :(得分:1)
=
运算符始终是赋值运算符,即使在if语句中也是如此。因此,你的陈述
if CREATE_OID_SCHEMA = "true" then
始终将字符串"true"
分配给CREATE_OID_SCHEMA
常量(并在此处输出警告)。由于字符串"true"
也是真的,因此if语句将始终匹配。
展望未来,您可能希望按如下方式更新代码:
case node['fmw']['shortname']
when /oid1/
is_second_oid_install = "false"
configure_ovd_component = "true"
create_oid_schema = "true"
if create_oid_schema == "true"
use_existing_schema = "false"
else
use_existing_schema = "true"
end
when /oid2/
is_second_oid_install = "true"
configure_ovd_component = "false"
create_oid_schema = "false"
if create_oid_schema == "true"
use_existing_schema = "false"
else
use_existing_schema = "true"
end
end
在上面的代码中,我执行了以下更改:
==
而不是赋值运算符=
。snake_case
。以大写字母开头的单词被认为是Ruby中的常量,只能分配一次。then
关键字。请改用换行符。进一步更新代码时,应使用实际布尔值(true
和false
)而不是包含该字的字符串。这样,您可以缩短比较范围,更好地反映您的意图。通常,除false
和nil
之外的所有值在Ruby中都是真的(因此在if语句中匹配)。这包括所有字符串,数字,正则表达式......