问题标签 [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.
terraform - 有没有办法跟踪我的状态文件被放置/引用的位置?
我在 GCP 上使用 TF 0.11.11。我将我的 backend.tfvars 文件设置为按状态文件存储在 GCP 存储桶中:
但是,在我运行我的 init 并应用之后,我注意到我的存储桶中不存在该文件夹 (bucket.folder.sbx)。init 和 apply 运行良好,没有错误。所以我想知道......我的状态文件在哪里?
有没有办法追踪这个?
作为第二个问题,我的本地“terraform.tfstate”文件似乎没有放在我的 .terraform 目录中,而是放在根目录中。我想知道这是为什么?您如何控制本地 terraform.tfstate 文件的放置位置?
terraform - 如何使用相同的模块添加资源?
Terraform新手在这里。我有一个在 GCP 中创建实例的模块。我正在使用变量和 terraform.tfvars 来初始化它们。我成功创建了一个实例 - 比如说 instance-1。但是当我修改 .tfvars 文件以创建第二个实例(除了第一个实例)时,它说它必须销毁第一个实例。如何运行模块以“添加”实例,而不是“替换实例”?我知道创建的第一个实例在 terraform.tfstate 中。但这并不能解释无法“添加”实例。
也许我错了,但我将“模块”(及其配置文件)视为函数——这样我就可以随时使用不同的参数调用它们。情况似乎并非如此。
terraform - Terraform:如果子网不存在,则将 interface 设置为 null
我正在创建一个在 GCP 中创建多网卡 VM 的自定义模块。在部署时,可能会出现 VM 不需要使用多个接口的情况。
如果子网不存在,是否可以将 network_interface 设置为空值?如果可能,我想避免为每个接口计数创建多个模块。
terraform - 如何在 Terraform 中插入表达式?
我正在尝试使用keys
Terraform 中的表达式来获取键列表(来自地图变量)并将其分配给局部变量。这是代码片段:
但是,我收到以下错误:
我在这里错过了什么吗?我在任何地方都找不到这个表达式的例子。糟糕的是,即使是官方文档也无济于事 - https://www.terraform.io/docs/configuration/functions/keys.html
HashiCorp 在其网站上为初学者详细阐述 Terraform 的细微差别方面确实做得很差。
terraform - 如何在同一个列表上迭代多个资源?
此处是 Terraform 的新手。我正在尝试使用 Terraform 创建多个项目(在 Google Cloud 中)。问题是我必须执行多个资源才能完全建立一个项目。我试过count
了,但我怎样才能按顺序使用多个资源count
?以下是我需要为每个项目执行的以下资源:
- 使用创建项目
resource "google_project"
- 使用启用 API 服务
resource "google_project_service"
resource "google_compute_shared_vpc_service_project"
使用(我正在使用共享 VPC)将服务项目附加到宿主项目
如果我想创建一个项目,这很有效。但是,如果我传递一个项目列表作为输入,我如何才能按顺序为该列表中的每个项目执行上述所有资源?
例如。
输入
依次执行以下操作:
我正在使用不支持for
循环的 Terraform 0.11 版
terraform - Terraform GCP:只需使用 google_storage_bucket_object 上传文件名
我想将文件从本地文件系统上传到新的 GCP 存储桶。我想在存储桶中创建一个新目录以供本地文件驻留。
我可以成功地做到这一点,但是 Terraform 在存储桶中创建了完整的本地文件路径。我只想创建 GCP 存储桶,在 GCP 存储桶中创建新目录,并上传本地文件。
上面的代码在我的 GCP Bucket 中创建了以下文件结构:
我希望 GCP 文件结构看起来像这样:
terraform - 有没有办法防止 Terraform google_container_cluster 在没有任何变化时被破坏和重新创建?
我知道关于 google_container_cluster 的幂等性,Terraform google 提供商的 Github 上有类似的问题;但是,似乎没有一个与我的简单示例相匹配。任何应用 Terraform 计划的尝试都希望破坏并重新创建我的集群,这是一个 6 分钟以上的操作。
集群没有明显的变化,但是terraform状态提示集群的id是集群的名字,但是计算的是新的id;因此,必须重新创建集群。我可以防止这种情况吗?
我正在按照推荐的示例来设置集群:使用remove_initial_node_pool=true
and定义集群initial_node_count=1
,然后创建一个显式节点池作为依赖资源。我还尝试使用初始节点池创建默认集群。我没有指定其他人与幂等性问题相关的任何其他属性(例如 master_ipv4_cidr_block)。
这是基本的 Terraform 设置。我正在使用 Terraform v0.11.13 和 provider.google v2.6.0。
等等。未显示用于启用 Helm 服务帐户的服务帐户和集群角色绑定以及 Helm 版本。我不认为这些在这里重要。
如果我做terraform apply
两次,第二次调用想要销毁并创建一个新集群。什么都没有改变,所以这不应该发生。
这通常是可以的,除了我倾向于看到来自 terraform 提供程序的大量超时,并且必须重新申请,这让我无处可去,因为重新申请会导致集群被破坏和重新创建。
输出terraform apply
如下所示:
terraform - 如何在 Terraform 中伪造云提供商凭据?
我正在编写一个跨云 Terraform 模块(用于 google 和 aws),它接受cloud
输入变量并相应地应用它,例如:
这种方法的问题是我只想为所选云提供凭据,而不是两者都提供 -cloud=aws
例如我得到的设置:
有什么方法可以伪造未选择的云的云提供商凭据,还是我需要实施某种 Terraform 模板?
google-cloud-platform - 如何输出创建的资源的属性?
我正在执行 GCP 模块来创建服务帐户。
主文件:
创建帐户后,将创建一个terraform.tfstate
包含帐户所有详细信息的文件。
terraform.tfstate
正如您在上面看到的,在模块中,我正在输出account_id
输入变量。有没有办法输出attributes
可视化。id
等name
,以便它们可以被另一个模块访问?在attributes
创建资源后计算。
amazon-web-services - Terraform - .tfstate 文件中的唯一 ID 是否总是从未使用过?
在 Terraform 状态文件中,以下是针对 OpenStack 的 .tfstate 文件的一部分(它使用 AWS API,因此 AWS 是提供者):
假设我在控制台中手动删除了一个实例/资源。我的 Terraform 配置可以更改为 Terraform 计划可以触发 ai) 重新创建 (+/-) 或 aii) 销毁 (-) 和创建/添加 (+)。
问题是:在任何一种情况下,创建的新节点是否有可能具有与之前在状态文件中相同的“id”属性?
换句话说,"id"
属性("instance_id"
在 GCP 的情况下)在整个基础设施的生命周期中是否总是唯一的?(以便我知道在将旧 tfstate 文件与新 tfstate 文件与"id"
或"instance_id"
属性进行比较时确定创建/重新创建了一个新节点,并确保 .tfstate 反映了计划中所说的情况。)
我检查 .tfstate 是否反映计划(创建/重新创建/销毁的确切数量)的原因是,尽管“应用”是根据“计划”发生的,但有时 .tfstate 并不反映这一点。
原因是在 "apply" 之后,terraform 似乎对提供者进行了 GET 调用以更新 .tfstate 文件,并且此 GET 调用有时会返回基础设施的不一致状态(即,即使它可能不会返回节点的详细信息被创建并且是基础设施的一部分!)。
在这种情况下,我必须在我们的自动化工具中告知 .tfstate 没有按照计划发生,因此 .tfstate 文件中可能存在损坏/不一致,以便通过手动导入来修复它。