module - 模块中的提供程序未传递给子模块 - terraform
问题描述
我是gitlabhq/gitlab
带有 terrafrom 的 usgin 模块。
我为 gitlab 资源创建了一个单独的模块./terraform-modules/terraform-gitlab-project-variables-aws-iam-access-keys
terraform {
required_providers {
gitlab = {
source = "gitlabhq/gitlab"
version = "3.3.0"
}
}
}
data "gitlab_projects" "projects-name" {
search = var.projectSearch
visibility = var.projectVisibility
}
resource "aws_iam_access_key" "user" {
user = var.projectUserName
}
resource "gitlab_project_variable" "aws_access_key_user" {
project = data.gitlab_projects.projects-name.projects[0].id
key = "AWS_ACCESS_KEY_ID"
value = aws_iam_access_key.user.id
protected = var.projectAccessKeyProtected
masked = var.projectAccessKeyMasked
environment_scope = var.projectEnvironmentScope
}
resource "gitlab_project_variable" "aws_secret_key_user" {
project = data.gitlab_projects.projects-name.projects[0].id
key = "AWS_SECRET_ACCESS_KEY"
value = aws_iam_access_key.user.secret
protected = var.projectAccessSecretProtected
masked = var.projectAccessSecretMasked
environment_scope = var.projectEnvironmentScope
}
如您所见,我添加了提供程序配置块,并在根模块中省略了提供程序的定义。
注意:子模块只继承提供者配置,而不是提供者源或版本要求。每个模块都必须声明自己的提供者要求。这对于非 HashiCorp 提供商尤其重要。
配置中的每个资源都必须与一个提供者配置相关联。与 Terraform 中的大多数其他概念不同,提供程序配置对于整个 Terraform 配置是全局的,并且可以跨模块边界共享。提供者配置只能在根 Terraform 模块中定义。
这是我的根模块,我正在使用模块中的前一个gitlab_projectNetwork
模块./project/main.tf
:
provider "aws" {
access_key = var.aws_access_key_id
secret_key = var.aws_secret_access_key
region = var.aws_region
}
terraform {
required_providers {
gitlab = {
source = "gitlabhq/gitlab"
version = "3.3.0"
}
}
}
provider "gitlab" {
token = var.gitlab_token
}
terraform {
backend "http" {}
}
module "network_user" {
source = "git::https://gitlab.com/xxx/terraform-modules/terraform-aws-iam-user.git"
userName = "${var.project}-${var.env}-network"
userPath = "/infra/"
arnList = ["arn:aws:iam::${var.aws_account_id}:policy/infra/${var.project}-network-ec2-isolated-${var.env}-iam-policy"]
userTags = {
"Project": var.project,
"Environment": var.env,
"Name":"network-user"}
}
module "gitlab_projectNetwork" {
source = "git::https://gitlab.com/xxx/terraform-modules/terraform-gitlab-project-variables-aws-iam-access-keys.git"
projectUserName = module.network_user.awsIamUserName
projectSearch = "network"
projectVisibility = "private"
projectEnvironmentScope = var.env
}
当我运行脚本时,出现以下错误:
2021/02/05 01:08:48 [TRACE] dag/walk: upstream of "root" errored, so skipping
Error: GET https://gitlab.com/api/v4/user: 401 {message: 401 Unauthorized}
on main.tf line 18, in provider "gitlab":
18: provider "gitlab" {
我不确定这里有什么问题,我将日志增加到 TRACE 并且没有什么有趣的。我怀疑提供者的配置不会以某种方式进一步传递给子模块。
现在,有趣的是,如果我将其添加provider block
到子模块中,脚本工作得非常好。但是官方文档没有建议反对它吗?任何想法为什么这不起作用?
解决方案
推荐阅读
- python - 如何以异步方式迭代标准字典
- html - 在响应模式下缺少页脚链接(Firefox 和 Chrome)
- javascript - 在javascript中的foreach执行时删除元素的最佳方法是什么?
- python - 具有相同数据集(UCI 学生表现数据集)的 Sklearn 线性回归的不同结果
- java - 在 Java 中获取单词的反义词 - Wordnet JWI
- output - pytesseract 在结果值之后添加一两行返回吗?
- reactjs - 通过平滑滚动应用持续时间
- python - Django Admin:应用程序部分而不是身份验证部分中的自定义用户模型
- javascript - 从异步函数返回 https 获取请求正文值
- node.js - nodejs 已经是最新版本但没有找到