Terraform中如何根据指定子串获取列表变量中的对应元素?
在Terraform中过滤包含指定子串的列表元素
嘿,这个需求在Terraform里处理起来很简单,我给你分享两种实用的方法:
方法一:基础子串匹配(精确大小写)
最直接的方式是用for表达式结合contains函数来过滤列表,代码示例如下:
variable "mylist" { default = ["cardigan.com", "crazy-apple.com", "blue-pen.com"] } locals { # 过滤出包含"apple"子串的元素 apple_matching_items = [for item in var.mylist : item if contains(item, "apple")] }
代码解释:
- 我们通过
for遍历var.mylist中的每一个元素 contains(item, "apple")会检查当前元素是否包含指定的"apple"子串,返回布尔值- 只有满足条件的元素会被收集到
local.apple_matching_items这个局部变量中
之后你就可以在资源定义里直接引用这个局部变量了,比如如果确定列表里只有一个匹配项,你可以用local.apple_matching_items[0]来获取单个元素。
方法二:大小写不敏感的子串匹配
如果需要忽略大小写(比如要匹配"Apple"、"APPLE"这类变体),可以结合lower函数统一转换为小写后再判断:
locals { # 忽略大小写过滤包含"apple"子串的元素 apple_matching_items_case_insensitive = [ for item in var.mylist : item if contains(lower(item), "apple") ] }
这种写法会先把每个元素转为小写,再检查是否包含小写的"apple",能覆盖更多匹配场景。
需要注意的是,这两种方法都要求Terraform版本在0.12及以上,这也是目前主流的版本啦。
内容的提问来源于stack exchange,提问作者Jessica
相关产品推荐
相关产品推荐

