使用 Terraform 在 Azure 中过滤的 RegEx

问题描述

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

应该使用什么 RegEx 来检索包含字符串 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 门户,在名为 MyImageName 的资源组中有一个名称中包含 MyResourceGroupName 的图像。我们还确认 terraform 作为订阅所有者运行,因此我们假设订阅所有者有足够的权限来过滤图像名称

我们还能尝试什么?

解决方法

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

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

以下工作:

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

以下不起作用:

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

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

结果

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...