问题标签 [terraform-provider-gcp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1737 浏览

terraform - terraform中基于条件创建嵌套资源参数块

我正在尝试创建一个创建计算实例的 terraform 模块。当且仅当我在模块调用期间attached_disk_enabled设置了变量时,我希望资源具有附加的磁盘。true我有这个:

已经为模块声明了变量vars.tf。模块调用是这样的:

我知道动态块以及如何使用for循环遍历列表并设置多个块,但我不确定如何使用此方法从资源中排除块:

我想if代替for_each. 有没有办法做到这一点?

0 投票
1 回答
4476 浏览

terraform - 没有循环时,terraform destroy 会产生循环错误

地形版本

Terraform 配置文件

main.tf在我的根提供商中:

这是模块“组织信息”:

然后模块“堆栈信息”:

最后,“项目信息”模块:

调试输出

完成后terraform destroy -auto-approve,我得到:

terraform graph -verbose -draw-cycles -type=plan-destroy给了我这张图: 图片 来源:

预期行为

这个想法是在组织、项目和堆栈级别使用模块来设置可以在所有资源中重复使用的命名约定。Organisation-info 加载组织信息,关于项目的项目信息,堆栈信息根据当前工作空间确定要定位的项目。

我在模块中省略了一堆其他逻辑,以保持它们在这个问题上的清洁。

根据terraform没有循环,destroy应该可以正常工作。

实际行为

我们得到了我在上面发布的循环,即使 terraform 没有显示循环。

重现步骤

  1. 设置三个模块,organisation-infoproject-info, 和stack-info如上所示。
  2. 如上所示设置根提供程序。
  3. terraform init
  4. terraform destroy(如果你先申请似乎并不重要)

附加上下文

奇怪的是,如果我在 中注释掉这个输出stack-info,循环就会停止:

这看起来真的很奇怪......我既不明白为什么输出变量会有所作为,也不明白为什么在没有循环的情况下会出现循环错误。

奇怪terraform plan -destroy的是,不显示循环,只有terraform destroy

我的蜘蛛侠感觉告诉我邪恶正在发生。

感谢任何可以告诉我发生了什么,这是否是一个错误,以及如何解决的人。

0 投票
1 回答
940 浏览

google-cloud-platform - 使用 Terraformer\Terraform 克隆 GCP 项目

我刚开始使用 Inferstracture 作为 Google 云中的代码。

  1. 安装的 Terraform
  2. 安装 Terraformer
  3. 创建了一个包含虚拟机的新 GCP 项目。

我的目标是将项目及其所有组件复制到一个新项目中。

为了做到这一点,我使用Terraformer对我现有的项目进行反向 terraform。命令:

自从 google-api 回复 Not-Found 错误代码以来,似乎我有某种权限问题。

我猜 Terraformer 正在访问的是使用 gcloud 权限来访问我的 gcp 环境,这是真的吗?

如果是真的,我登录的凭据就是这个项目的所有者。

我应该检查什么?如何解决这个问题?

0 投票
1 回答
791 浏览

terraform - 使用 GCP 的 Terraform:将 vm 实例复制到不同的 gcp 项目

背景

我有两个谷歌云项目:[project1] 和 [project2]。[project1] 有一个名为my-vm. 我想复制my-vm到 [project2]。

我做的步骤

所以,我创建了这个 terraform 文件 ( main.tf):

将其保存到新目录中。现在,运行以下命令:

在这一点上,我发现我错过了resource "google_compute_instance" "my-vm"声明。所以,我将它添加到main.tf. 现在它看起来像这样:

现在,我正在运行相同的terraform import命令 agian 并且它成功了。创建了一个terraform.tfstate文件。但是,文件main.tf没有改变。我期待在其中看到 vm 导入的数据,但它resource "google_compute_instance" "my-vm"是空的。奇怪的...

现在,我正在运行命令plan并得到了这个:

问题:

  1. 为什么导入资源后无法调用plan方法?
  2. 我看到了一些使用 terraform 复制和部署的示例。所有这些示例都是基于机器的基本图像复制机器。因此,如果开发人员对虚拟机实例添加了一些更改,它就不会出现在重复的资源 ([project2]) 中。这是否可以复制 vm-disk 而不是 vm-image?
0 投票
1 回答
41 浏览

google-cloud-platform - 如何在后续的 Terraform 步骤中使用尚不可用的信息?

我正在使用以下身份验证设置创建这样的 GKE 集群:

创建集群后,我将使用另一个提供程序来安装 helm 图表:

我的问题是如何kubernetes用可能从集群创建步骤获得的身份验证信息填充块?

0 投票
0 回答
71 浏览

terraform - Terraform 实例组不会选择任何运行状况检查,即使它已在 auto_healing_policies 中定义

我正在通过 Terraform 创建 GCP 实例组。首先,我使用以下内容创建运行状况检查:

之后,我有了我的实例组代码,我在其中定义了“auto_healing_policies”并附加了我的运行状况检查:

terraform 验证:成功

地形规划:

我可以看到以下内容;

但是当我去实例组检查一切是否正确时,健康检查设置为“无健康检查”,但我的健康检查创建得很好。

我试图了解为什么实例组不应用我的运行状况检查。

谢谢,。

0 投票
2 回答
958 浏览

terraform - 使用 Terraform helm 提供程序安装 Helm 图表时出错

我正在尝试使用以下 terraform 脚本使用 Terraform Helm Provider 安装 helm chart

我已经成功使用 Kubernetes 提供程序来部署一些 k8s 资源,但它不适用于 Helm

地形 v0.11.13

提供者.helm v0.10

提供者.kubernetes v1.9

但我收到以下错误

0 投票
0 回答
482 浏览

terraform-provider-gcp - 如何有条件地启用/禁用 GCP 存储桶的生命周期规则

在我的模块中,我想根据是否设置了变量来启用或禁用 gcp 存储桶生命周期规则,所以基本上我希望一些存储桶启用规则,而其他存储桶忽略规则设置。但是 terraform 不支持enabled可以轻松做到这一点的 GCP 生命周期规则(请查看下面的 AWS 链接)。

AWS:https ://www.terraform.io/docs/providers/aws/r/s3_bucket.html#enabled-1

GCP: https ://www.terraform.io/docs/providers/google/r/storage_bucket.html#lifecycle_rule

我尝试有条件地将规则的操作类型和 storage_class 设置为“”

但是 gcp api 给出了这个错误:

发生 1 个错误:

  • module.log_archive_bucket.google_storage_bucket.bucket_ageoff:发生 1 个错误:

  • google_storage_bucket.bucket_ageoff:googleapi:错误 400:无效参数,无效

以下是代码实际尝试执行的操作:

错误:module.log_archive_bucket.google_storage_bucket.bucket_ageoff:lifecycle_rule.1:无效或未知密钥:已启用

任何实现上述要求的想法都值得赞赏。

0 投票
1 回答
224 浏览

terraform - Terraform 是否在多云部署中并行执行?

我想使用 Terraform 从单个 Terraform 脚本(例如 GCP、AWS、Azure)在不同的云提供商中创建一个 VM。所以,我想知道,Terraform 会在所有公共云中并行创建 VM 实例吗?

0 投票
0 回答
28 浏览

terraform-provider-gcp - GCP-terraform 删除角色但不重新创建(1.20)

美好的一天。希望你做得很好。

你能帮忙解决这个问题吗...

当我们向现有组添加新角色(例如:roles/pubsub.admin)时,由于我们将角色视为列表,因此 terraform 会删除并重新创建该组的现有角色(如果有的话)。在幕后,它们被存储在索引列表中,因此在列表中间插入一个角色会导致其后所有角色的索引发生变化,但最终结果应该相同。

在少数情况下,terraform 无法重新创建已删除的角色。例如:roles/errorreporting.admin 是现有角色,terraform 删除了此角色,但未能重新创建它(到 terraform 执行完成时)。

所以为了解决这个问题,每次我们都必须运行计划并为每个应用程序申请 2 次。不确定这是正确的方法

注意:我们将 terraform 与云构建集成。