Puppet 条件不起作用,因为因素返回的是字符串而不是数字

Puppet 条件不起作用,因为因素返回的是字符串而不是数字

我在升级我的代码(为 3.x 编写)以便在我们新的 5.x puppet 环境中顺利运行时遇到了一个问题。我的问题具体与“问号条件”有关(不确定如何描述它们)..

在下面的代码片段中,我已经验证了 facter 变量 $operatingsystemmajrelease 确实解析为 6 ...在 puppet 3.x 及以下版本中...我在末尾添加的“notify”将返回“six”(如预期的那样)..但在 puppet 4.x 及以上版本中...它会下降到默认的“不知道”(因此比较运算符不匹配)..我相信这与 facter 将值作为字符串返回有关,我知道 puppet 4.x 对字符串的要求要严格得多..我试过引用条件“5”、“6”等...但没有成功..有人知道我如何解决这个问题才能让这个条件正常工作吗

  $version = $operatingsystemmajrelease ? {
    5                 => 'five',
    6                 => 'six',
    7                 => 'seven',
    default           => 'dont know'
  }

  notify {"version  is $version":}

答案1

这一事实一个字符串,你可以用以下方法证明:

notice("${type($operatingsystemmajrelease)}")

它将返回:

Notice: Scope(Class[main]): String

因此,即使它看起来是数字,它也应该是:

$version = $operatingsystemmajrelease ? {
  '5'     => 'five',
  '6'     => 'six',
  '7'     => 'seven',
  default => "don't know",
}

如果您希望它成为一个实整数以便使用</>运算符,您可以这样做:

$version = Integer($operatingsystemmajrelease)
notice("${version} is of type ${type($version)}")

这给你:

Notice: Scope(Class[main]): 7 is of type Integer[7, 7]

等等。但是还有versioncmp()专门用于比较版本号的函数。还有较新的结构化事实,因此您可能想要使用$facts['os']['release']['major'],(它也恰好是字符串)。

相关内容