Terraform:如何在for_each循环中实现变量自增?
为Okta应用组分配设置递增的Priority值
在使用Terraform管理Okta应用组分配时,需要为每个组设置递增的priority值(如1、2、3...),但由于data.okta_groups.all_groups是通过for_each生成的对象类型,无法直接使用index函数获取位置,尝试本地变量自增也没成功,以下是可行的实现方法。
实现步骤
- 先通过本地变量对
data.okta_groups.all_groups的键进行排序,生成一个有序的键列表,确保每次执行的顺序一致。 - 在
okta_app_group_assignments资源中,利用index函数获取当前each.key在有序列表中的位置,再加1得到从1开始的递增priority值。
代码示例
首先添加本地变量块,生成有序的组键列表:
locals { # 对data.okta_groups.all_groups的键按字典序排序,生成稳定的有序列表 sorted_group_keys = sort(keys(data.okta_groups.all_groups)) }
然后修改okta_app_group_assignments资源,设置递增的priority:
resource "okta_app_group_assignments" "idc_app_assignments" { app_id = okta_app_saml.aws_identity_center.id for_each = data.okta_groups.all_groups group { id = each.value.groups.0.id # 通过index获取当前key在有序列表中的索引,加1得到从1开始的priority值 priority = index(local.sorted_group_keys, each.key) + 1 } }
说明
sort(keys(data.okta_groups.all_groups))会将对象的键按字典序排序,生成一个稳定的有序列表,避免每次Terraform运行时键的顺序变化导致priority值变动。index(local.sorted_group_keys, each.key)返回当前键在有序列表中的索引(从0开始),加1后就得到了从1开始的连续递增priority值。
内容的提问来源于stack exchange,提问作者Thrupthi
相关产品推荐
相关产品推荐

