You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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
}

关键逻辑说明

  1. 动态用户名生成
    使用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)
  2. 优化其他字段

    • disable_ui_access:直接使用原布尔值,无需字符串插值,符合资源参数类型要求
    • groups:根据YAML中的groups字段动态设置数组,groups为false时设为空数组,更贴合配置逻辑
    • email:补充了符合用户名格式的示例邮箱,实际可根据需求调整

效果验证

该资源会遍历user_config_data中的5条配置,自动生成以下5个符合要求的用户名:

  • tst_adm_user
  • tst_dev_user
  • tst_prod_user
  • tst_ro_dev_user
  • tst_ro_prod_user

内容的提问来源于stack exchange,提问作者hashim vayalar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 09:45:34