Terraform从YAML创建Artifactory用户:动态生成用户名的单资源实现
单个Terraform资源实现动态用户名生成
完全可以通过单个artifactory_user资源实现需求,核心是利用Terraform的条件表达式动态拼接用户名,同时兼容YAML中ro字段存在或不存在的情况。
修改后的完整资源代码
resource "artifactory_user" "users" { for_each = local.tst_project["user_config_data"] admin = false disable_ui_access = each.value["disable_ui_access"] email = "${local.tst_project["project_key"]}_${lookup(each.value, "ro", false) ? "ro_" : ""}${each.value["rt_env"]}_user@example.com" groups = lookup(each.value, "groups", false) ? ["readers"] : [] internal_password_disabled = false name = "${local.tst_project["project_key"]}_${lookup(each.value, "ro", false) ? "ro_" : ""}${each.value["rt_env"]}_user" profile_updatable = true }
关键逻辑说明
动态用户名生成
使用lookup(each.value, "ro", false)显式获取ro字段的值,默认设为false(处理YAML中无ro字段的条目)。通过条件表达式condition ? 真值内容 : 假值内容决定是否插入ro_前缀:- 当
ro为true时,用户名格式为{project_key}_ro_{rt_env}_user(如tst_ro_dev_user) - 当
ro为false或不存在时,用户名格式为{project_key}_{rt_env}_user(如tst_adm_user)
- 当
优化其他字段
disable_ui_access:直接使用原布尔值,无需字符串插值,符合资源参数类型要求groups:根据YAML中的groups字段动态设置数组,groups为false时设为空数组,更贴合配置逻辑email:补充了符合用户名格式的示例邮箱,实际可根据需求调整
效果验证
该资源会遍历user_config_data中的5条配置,自动生成以下5个符合要求的用户名:
tst_adm_usertst_dev_usertst_prod_usertst_ro_dev_usertst_ro_prod_user
内容的提问来源于stack exchange,提问作者hashim vayalar
相关产品推荐
相关产品推荐

