【问题标题】:RegEx for filtering in Azure using Terraform用于在 Azure 中使用 Terraform 进行过滤的 RegEx
【发布时间】:2021-07-16 03:03:44
【问题描述】:

Terraform azurerm_image 数据源允许您使用正则表达式来识别其 ID 与正则表达式匹配的机器映像。

应该使用什么正则表达式来检索包含字符串 MyImageName 并采用完整形式 /subscriptions/abc-123-def-456-ghi-789-jkl/resourceGroups/MyResourceGroupName/providers/Microsoft.Compute/images/MyImageName1618954096 的图像?

以下版本的 RegEx 引发错误,因为它不接受两个 * 字符。但是,当我们只使用结尾的* 时,图像并没有被检索到。

data "azurerm_image" "search" {
  name_regex          = "*MyImageName*"
  resource_group_name = var.resourceGroupName
}

请注意,结果仅返回单个图像,因此您无需担心返回多个图像。可以设置一个标志来指定升序或降序排序以检索最旧或最新的匹配项。

我们得到的准确错误是:

Error: "name_regex": error parsing regexp: missing argument to repetition operator: `*`  

尼克的建议

根据@Nick 的建议,我们尝试了:

data "azurerm_image" "search" {
  name_regex          = "/MyImageName[^/]+$"
  resource_group_name = 
var.resourceGroupName
}

但结果是:

Error: No Images were found for Resource Group "MyResourceGroupName"  

我们在 Azure 门户中进行了检查,在名为 MyResourceGroupName 的资源组中存在一个名称中包含 MyImageName 的图像。我们还确认 Terraform 作为订阅所有者运行,因此我们假设订阅所有者有足够的权限来过滤图像名称。

我们还能尝试什么?

【问题讨论】:

  • * 表示重复前一个字符 0 次或多次。在您的“正则表达式”中,您在第一个 * 之前没有字符,因此出现错误。您的第二个正则表达式不起作用,因为它与字符串 MyImageNam 后跟 0 个或多个 es 匹配。你可能想要/MyImageName[^/]+$
  • @Nick 谢谢。我们刚刚将尝试您的建议的结果发布到了 OP 的末尾。还有什么想法吗?
  • 如果正则表达式需要匹配整个名称,那么可能是.+/MyImageName[^/]+?不幸的是,我看不到有关此参数的任何文档以提供更多线索。顺便说一句,您是否尝试输入确切的名称(作为 name 而不是 name_regex)来检查是否匹配?
  • @Nick 再次感谢您。您建议的更改会导致相同的错误。然后,当我们将我们从 Azure 门户手动复制的实际图像的整个资源 ID 粘贴在双引号 "..." 中时,我们也遇到了同样的错误。
  • 对不起,这超出了我对 terraform 的知识水平(也就是说,没有:)。我给你的正则表达式应该匹配名称字符串(例如参见regex101.com/r/mhNhVi/1)。我希望你能找到其他在 terraform 方面更专业的人来提供帮助。

标签: regex azure terraform virtual-machine azure-rm


【解决方案1】:

经过我的验证,当name_regex 仅包含一个尾随* 时,它似乎有效。如果有一个前缀*,则会生成该错误消息。

例如,我的资源组中有一个图像名称rrr-image-20210421150018

以下作品:

r*
-*
8*
rrr*
image*
2021*

以下不起作用:

*r
*-
*8
*image*
*rrr*

另外,请验证您是否拥有最新的 azurerm 提供程序。

结果

【讨论】:

  • 我们的问题出在下游。您在这里的回复帮助我们将注意力重新集中在下游的潜在原因上,从而解决了我们的实际问题,这超出了本 OP 的范围。谢谢你和 +1。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2020-11-09
  • 1970-01-01
相关资源
最近更新 更多