社区首页 >问答首页 >Terraform将列表/设置从根模块传递到子模块问题

Terraform将列表/设置从根模块传递到子模块问题
EN

Stack Overflow用户
提问于 2022-10-01 16:58:30
回答 1查看 112关注 0票数 0

我有这个根模块,它调用子模块来创建GCP项目和创建IAM角色绑定。

代码语言:javascript
代码运行次数:0
复制
module "test_project" {
  source         = "terraform.dev.mydomain.com/Dev/sbxprjmodule/google"
  version        = "1.0.3"
  short_name     = "looker-nwtest"
  owner_bindings = ["group:npe-cloud-platformeng-contractors@c.mydomain.com", "group:npe-sbox-rw-tfetraining@c.mydomain.com"]
}

variable "owner_bindings" {
  type    = list(string)
  default = null
}

这是执行分配任务的子模块。

代码语言:javascript
代码运行次数:0
复制
resource "google_project_iam_binding" "g-sbox-iam-owner" {
  count = var.owner_bindings == null ? 0 : length(var.owner_bindings)
  project = "${var.project_id}-${var.short_name}"
  role    = "roles/owner"
  members = [var.owner_bindings[count.index]]
}

variable "owner_bindings" {
  type    = list(string)
  default = null
}
/* 

当我做一个地形规划和应用时,它正确地创建了两个绑定,循环了两次。然后,当我再次运行一个地形图并应用时,它将显示下面的更改。

代码语言:javascript
代码运行次数:0
复制
# module.lookernwtest_project.google_project_iam_binding.g-sbox-iam-owner[0] will be updated in-place
  ~ resource "google_project_iam_binding" "g-sbox-iam-owner" {
        id      = "g-prj-npe-sbox-looker-nwtest/roles/owner"
      ~ members = [
          + "group:npe-cloud-platformeng-contractors@c.mydomain.com",
          - "group:npe-sbox-rw-tfetraining@c.mydomain.com",
        ]
        # (3 unchanged attributes hidden)
    }

下一次,当我做一个地形图和申请,它显示如下。然后,在随后的每个计划中,在两个小组之间交替进行并应用。

代码语言:javascript
代码运行次数:0
复制
# module.lookernwtest_project.google_project_iam_binding.g-sbox-iam-owner[1] will be updated in-place
  ~ resource "google_project_iam_binding" "g-sbox-iam-owner" {
        id      = "g-prj-npe-sbox-looker-nwtest/roles/owner"
      ~ members = [
          - "group:npe-cloud-platformeng-contractors@c.relayhealth.com",
          + "group:npe-sbox-rw-tfetraining@c.relayhealth.com",
        ]
        # (3 unchanged attributes hidden)
    }

试图将数据结构从列表更改为set,但问题相同。这些组不被继承,并且也仅在项目级别上应用。所以不知道我做错了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-03 07:45:22

而不是count,您可以使用for_each,更改很简单.

子模块中的资源如下所示:

代码语言:javascript
代码运行次数:0
复制
resource "google_project_iam_binding" "g-sbox-iam-owner" {
  for_each = var.owner_bindings == null ? toset([]) : toset(var.owner_bindings)  
  project  = "${var.project_id}-${var.short_name}"
  role     = "roles/owner"
  members  = [each.value]
}

计数更改for_each,在成员中我们使用each.value

对于状态更改的for_each,您将不再看到数字数组:

代码语言:javascript
代码运行次数:0
复制
# module.lookernwtest_project.google_project_iam_binding.g-sbox-iam-owner[0]
...
# module.lookernwtest_project.google_project_iam_binding.g-sbox-iam-owner[1]

相反,它将有名称,类似于:

代码语言:javascript
代码运行次数:0
复制
# module.lookernwtest_project.google_project_iam_binding.g-sbox-iam-owner["abc"]
...
# module.lookernwtest_project.google_project_iam_binding.g-sbox-iam-owner["def"]

循环或不循环

看了一会儿之后,我想知道为什么我们需要单独的iam_binding,如果他们都有相同的角色,如果所有的成员都有相同的“角色/所有者”,我们就可以这样做:

代码语言:javascript
代码运行次数:0
复制
resource "google_project_iam_binding" "g-sbox-iam-owner" {
  project = "${var.project_id}-${var.short_name}"
  role    = "roles/owner"
  members = [var.owner_bindings]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73922725

复制
相关文章
cluster模块设置子进程的stdio
子进程的stdout及stderr需要被设置为某个文件,根据文档 setupMaster 说明,需要设置stdio数组:
欲休
2019/12/12
7530
【翻译】Terraform 最佳实践:模块组合
原文:https://www.terraform.io/language/modules/develop/composition
顾宇
2022/03/26
2K0
利用fluorineFx将DataTable从.Net传递到Flash
FluorineFx自带的示例都不错,就是有点不简洁,下面的代码基本上已经最简版了(环境vs2010) 1、先创建一个Web Application,然后添加FluorineFx以及FluorineFx.ServiceBrowser的引用 这二个程序集的默认位置在: C:\Program Files (x86)\FluorineFx\Bin\net\3.5\FluorineFx.dll C:\Program Files (x86)\FluorineFx\Bin\net\3.5\FluorineFx.Serv
菩提树下的杨过
2018/01/23
2.4K0
利用fluorineFx将DataTable从.Net传递到Flash
【Python】模块导入 ③ ( 模块导入语法 | from 导入部分模块功能 | 为导入的模块设置别名 | import 导入模块设置别名 | from 导入模块设置别名 )
在导入模块时 , 有时不需要使用模块的完整功能 , 只需要导入指定的部分功能即可 , 这样也符合最少知识设计原则 ;
韩曙亮
2023/10/11
2970
【Python】模块导入 ③ ( 模块导入语法 | from 导入部分模块功能 | 为导入的模块设置别名 | import 导入模块设置别名 | from 导入模块设置别名 )
Angular 从入坑到挖坑 - 模块简介
Angular 入坑记录的笔记第七篇,介绍 Angular 中的模块的相关概念,了解相关的使用场景,以及知晓如何通过特性模块来组织我们的 Angular 应用
程序员宇说
2020/06/29
1.8K0
Angular 从入坑到挖坑 - 模块简介
Nest.js 从零到壹系列(一):项目创建&路由设置&模块
本系列将以前端的视角进行书写,分享自己的踩坑经历。教程主要面向前端或者毫无后端经验,但是又想尝试 Node.js 的读者,当然,也欢迎后端大佬斧正。
一只图雀
2020/04/07
5.4K0
Python 模块之间传递变量
最近在做实验时发现个问题,我想在一个模块中调用另一个模块的变量,首先想到了用return 
py3study
2020/01/10
3.8K0
设置npm安装模块目录<nodejs>
nodejs安装模块命令: npm install <input_name> # 本地安装 npm install <input_name> -g # 全局安装 1.npm install <input_name> -g --模块安装到全局目录 npm config set prefix --设置全局目录路径 npm config get prefix --获取当前设置全局目录。 2.npm install <input_name>     --模块安装到当前命令行所在目录 D:\>npm
用户1148881
2018/01/17
1.2K0
5.MOVE从入门到实战-发布新模块
我们还可以使用以下命令检查存储中已编译的字节码:move sandbox view
Tiny熊
2022/11/07
3410
Java从入门到精通十九(java模块化)
初步了解一些模块java9增加的模块化编程的思想。之前没有学过,自己找视频看到的,并按照操作了一遍,因为怕忘记,所以记录下来会比较好。
兰舟千帆
2022/07/16
5510
Java从入门到精通十九(java模块化)
【Android 组件化】从模块化到组件化
Android 应用项目 , 都存在一个应用模块 ( Application Module ) , 在 build.gradle 构建脚本中 , 第一个插件配置 com.android.application , 表明 该 Module 编译打包后的输出是 APK 安装包 ; 该项目可以直接运行 ;
韩曙亮
2023/03/29
1K0
安装模块 pyodbc 问题
环境 CentOS7 问题 执行如下命令后报错: pip3 install pyodbc 报错信息如下图所示: 解决办法 1.安装环境依赖 gcc-c++,建议使用如下命令: yum install
小闫同学啊
2019/08/06
1.4K0
安装模块 pyodbc 问题
爬虫入门到放弃05:从程序模块设计到代理池
上篇文章吧啦吧啦讲了一些有的没的,现在还是回到主题写点技术相关的。本篇文章作为基础爬虫知识的最后一篇,将以爬虫程序的模块设计来完结。
叫我阿柒啊
2022/05/09
3460
爬虫入门到放弃05:从程序模块设计到代理池
Tars-cpp源码走读——网络模块和业务模块的数据传递
(参考:Tars-cpp源码走读——网络模块初始化和网络连接处理)](https://cloud.tencent.com/developer/article/1377231%29%29)
windealli
2019/01/08
9880
【说站】python列表如何传递到线程?
python列表如何传递到线程? 说明 1、所有线程在一个过程中共享全局变量,便于在多个线程之间共享数据。 2、线程是对全局变量的随意遂改可能导致多线程之间的混乱(即线程不安全)。 实例 import time from threading import Thread     def work1(nums):     nums.append(44)     print("----in work1---",nums)     def work2(nums):     #延时一会,保证t1线程中的事情做完
很酷的站长
2022/11/24
5150
【说站】python列表如何传递到线程?
VUE 如何将父组件中的数据传递到子组件中
因为异步调用的问题,如果我不采取手段,子页面没有办法获得父页面中的数据,页面将会显示为 没有数据。
HoneyMoose
2022/09/14
6.7K0
VUE 如何将父组件中的数据传递到子组件中
python 模块导入问题
在python中,模块导入和编码都是比较重要的,这两种东西一定要花时间弄清楚,如果摸棱两可,每次出问题都靠猜,那是非常痛苦的。
叶子陪你玩
2022/05/22
1.7K0
python 模块导入问题
从A到Z,26个实用Python模块/函数速览
花下猫说:今天听了左耳朵耗子的《左耳听风》专栏,我受到启发,所以尝试转载一篇英文技术文章和大家分享。获取第一手的信息源,锻炼英文阅读能力,以期长足的技术进步。文末也附上了一篇翻译文章的链接,方便大家对照阅读。这种形式是一个尝试,若你觉得有帮助,麻烦在文末点个赞,这样我会更有动力,继续采集优秀的英文技术文章与大家共读。
Python猫
2019/04/10
8810
Requests模块怎么设置字符编码
这里我们在headers中加入'Accept-Encoding': 'utf-8',就可以设置发送请求的编码为utf-8。
用户9006224
2023/10/11
8860
14、 webpack从0到1-HMR(热模块更新)
说下热模块更新这个时常被谈到的问题,工作中也比较常见到、面试中也比较常问到的问题。 git仓库:webpack-demo 1、HMR HMR(Hot Module Replacement)也就是热模块更新,是用来干什么的呢?就是你可以实时的更新某个状态而浏览器不重新刷新。 举个具体的例子可能就理解了啊,比如我们现在要把一个div块的颜色从白色改为黑色,最直接方便的办法是怎样?不是去编辑器里面改代码,然后等浏览器refresh这样去看效果;而是直接打开调试着工具,改一下它的颜色就可以看到效果了。 使
Ewall
2020/03/24
4470
14、 webpack从0到1-HMR(热模块更新)

相似问题

Terraform模块-从根识别子模块变量

11

将变量传递到customer terraform模块

23

如何将Terraform计数从资源传递到模块?

14

尝试将变量从根模块传递到子模块并获取错误

19

Terraform模块-无法从根访问变量

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档