ifvarclass => 'class'
构造与class::
构建工作的方式有什么不同吗?我可以互换使用吗?
答案 0 :(得分:2)
不完全,但差不多。请注意,每次使用类表达式时
(expression::
)上下文限制适用于下一个表达式或
直到下一个承诺类型,因此它可能一次适用于多个承诺
ifvarclass一次只适用于一个承诺。也是因为3.7.0那里
是if
alias到ifvarclass
,输入恕我直言更好。
对于基于简单类的约束,是的,它们可以互换使用。
bundle agent main
{
vars:
"classes" slist => { "linux", "windows" };
reports:
"I am a Linux box"
ifvarclass => "linux";
linux::
"I am still a Linux box";
}
R: I am a Linux box
R: I am still a Linux box
您也可以互换使用简单表达式。
bundle agent main
{
vars:
"classes" slist => { "linux", "windows" };
reports:
"I am a Linux box"
ifvarclass => "linux.64_bit";
linux.64_bit::
"I am still a Linux box";
}
R: I am a Linux box
R: I am still a Linux box
在3.7.0之前,您无法在传统的上下文类表达式中使用变量
($(my_variable)::
)和ifvarclass
对于能够使用a非常有用
将变量作为约束。
例如,直到3.7你必须这样做:
bundle agent main
{
vars:
"classes" slist => { "linux", "windows" };
reports:
"I am $(classes) box"
ifvarclass => "$(classes)";
}
R: I am linux box
从3.7开始,您可以使用variable class expressions:
bundle agent main
{
vars:
"classes" slist => { "linux", "windows" };
reports:
"$(classes)"::
"I am $(classes) box";
}
R: I am linux box
在你的检查包含字符的列表之前,它可以正常工作
在类(如破折号)中无效。这是ifvarclass
最多的地方
有用,因为它允许您动态转换字符串甚至使用函数
返回类似isvariable()
的布尔值。
以下示例显示了与canonify()
一起使用的ifvarclass
。
bundle agent main
{
classes:
# A class that was derived from a string containing invalid characters like special-class
"special_class" expression => "any";
vars:
"classes" slist => { "linux", "windows", "special-class" };
reports:
"I am $(classes) box"
ifvarclass => canonify( $(classes) );
}
R: I am linux box
R: I am special-class box