来自主机名的 Puppet 动态变量

Puppet dynamic variable from hostname

我正在尝试从我的 ec2 主机名中获取动态变量。主机名遵循此模式

us-east-1b-application-type-environment-138-10.domain.com

我希望我的变量最终看起来像这样

application-type-environment

使用这个

$variable = regsubst($hostname, '/[a-z]{1}[0-9]{1}-([^-]+)-[0-9]{1,3}/', '')

虽然我最终还是这样

us-east-1b-application-type-environment-138-10

如何获得预期的结果?

regsubst 中不需要正则表达式分隔符。您需要匹配整个字符串才能将其删除并只保留您需要的内容。该技术包括匹配您不想保留的内容以及匹配和捕获您确实想要的内容。

您可以使用

regsubst($hostname, '^[^0-9]*[0-9][a-z]-(.*?)-[0-9]{1,3}.*$', '')

我认为您正试图获取第一个 [数字][小写字母] 块和一个三位数块之间的内容。

这是一个regex demo

表达式分解:

  • ^ - 行首(如果是字符串开头,替换为 \A
  • [^0-9]* - 0 个或多个非数字符号(除数字外,都可以用 \D* 代替)
  • [0-9][a-z]- - 数字后跟小写字母后跟 -(与 \d[a-z] 相同)
  • (.*?) - 匹配并捕获任何字符,但在最接近的字符之前尽可能少的换行...
  • -[0-9]{1,3} - 1 到 3 位数字(与 \d{1,3} 相同)
  • .*$ - 0 个或更多字符,但换行符一直到行尾(如果表示字符串结尾,请替换为 \z)。