我正在尝试在 required_providers 中以新的方式设置我的提供程序的版本,如下所示
\nterraform {\n required_providers {\n cloudflare = {\n source = "cloudflare/cloudflare"\n version = "~> 2.11.0"\n }\n google = {\n source = "hashicorp/google"\n version = "~> 3.39.0"\n }\n kubernetes = {\n source = "hashicorp/kubernetes"\n version = "~> 1.13.2"\n }\n vault = {\n source = "hashicorp/vault"\n version = "~> 2.14.0"\n }\n }\n required_version = "~> 0.13.2"\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,当我运行时,terraform init
我仍然得到以下输出。
The following providers do not have any version constraints in configuration,\nso the …
Run Code Online (Sandbox Code Playgroud) 我的队友正在使用 terraform v0.12.28,我开始与他一起工作,但我使用的是 v0.13.x 并做了一些更改,我们使用存储在 GCS 存储桶中的状态文件。
现在我的队友让我降级,因为他写了一些与v0.12.28兼容的模块,我确实降级了我的版本,但远程状态仍然是v0.13.x。
现在我们陷入了具有更高版本的远程状态。解决这个问题最安全的方法是什么?我们处于初始阶段,因此我们可以破坏整个基础设施,但仍然想知道解决方法。
如何将 terraform 输出分配给环境变量?
假设我在main.tf中定义了以下输出
output "gce_public_ip" {
value = element(concat(google_compute_instance.vm_instance.*.network_interface.0.access_config.0.nat_ip, list("")), 0)
}
Run Code Online (Sandbox Code Playgroud)
我想导出gce_public_ip
,因此它将作为环境变量提供GCE_PUBLIC_IP
目标:创建一个计算实例并使用 terraform 将其添加到 GCP 中的非托管实例组。
问题:已成功创建计算实例和非托管实例组,但该实例未添加到该组中并给出: 错误无效实例 URL:资源“google_compute_instance_group”“t-compute-instance-group”
不过,可以在运行 terraform 配置后手动将实例添加到组中。
服务帐户密钥已分配项目编辑器权限。
代码: https: //github.com/sagar-aj7/terraform_unmanagement_inst_group
我知道 Terraform google 提供商的 Github 上也有类似的问题,涉及 google_container_cluster 的幂等性;然而,似乎没有一个与我的简单例子相符。任何应用 Terraform 计划的尝试都会破坏并重新创建我的集群,这是一个 6 分钟以上的操作。
集群没有明显的变化,但是 terraform 状态表明集群的 id 是集群的名称,但是新的 id 是计算出来的;因此,必须重新创建集群。我可以阻止这种情况吗?
我按照建议的示例设置集群:使用remove_initial_node_pool=true
和定义集群initial_node_count=1
,然后创建显式节点池作为依赖资源。我还尝试使用初始节点池创建默认集群。我没有指定其他人与幂等性问题相关的任何其他属性(例如 master_ipv4_cidr_block)。
这是基本的 Terraform 设置。我正在使用 Terraform v0.11.13 和provider.google v2.6.0。
provider "google" {
project = "${var.google_project}"
region = "${var.google_region}"
zone = "${var.google_zone}"
}
resource "google_container_cluster" "cluster" {
project = "${var.google_project}"
name = "${var.cluster_name}"
location = "${var.google_region}"
remove_default_node_pool = true
initial_node_count = 1
master_auth {
username = ""
password = ""
}
timeouts {
create = "20m"
update = …
Run Code Online (Sandbox Code Playgroud) 您能帮我使用 terraform 实现以下场景吗?我需要在字符串值中的每个特殊字符前加上 // 前缀。
示例:mysplchr="test O'riel*abc"
这必须更改为"test O//'riel//*abc"
谢谢
terraform terraform-provider-azure terraform-provider-aws terraform-provider-gcp terraform0.12+
我正在尝试监视实例组并拥有基于正则表达式的过滤器。查询看起来像这样
fetch instance_group
| metric 'compute.googleapis.com/instance_group/size'
| filter (resource.instance_group_name =~ 'nat-ecmp-[1|2]')
| group_by 1m, [value_size_mean: mean(value.size)]
| every 1m
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试在 terraform 中做同样的事情。
这就是我到目前为止所想到的
condition_threshold {
filter = <<-EOF
resource.type=\"instance_group\"
metric.type=\"compute.googleapis.com/instance_group/size\"
resource.label."instance_group_name"=~"nat-ecmp-[1|2]"
EOF
duration = "300s"
comparison = "COMPARISON_LT"
threshold_value = "1"
Run Code Online (Sandbox Code Playgroud)
但这会产生错误
Error creating AlertPolicy: googleapi: Error 400: Field alert_policy.conditions[0].condition_threshold.filter had an invalid value of "resource.type="instance_group"
metric.type="compute.googleapis.com/instance_group/size"
resource.label."instance_group_name"=~"nat-ecmp-[1|2]"
": Could not parse filter "resource.type=\"instance_group\"\nmetric.type=\"compute.googleapis.com/instance_group/size\"\nresource.label.\"instance_group_name\"=~\"nat-ecmp-[1|2]\"\n"; syntax error at line 3, column 37, token '=~'
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个
condition_threshold {
filter = <<-EOF
resource.type=\"instance_group\" …
Run Code Online (Sandbox Code Playgroud) 有没有办法使用 terraform 和metric.label.check_id
已部署资源的过滤器值创建用于正常运行时间检查的 GCP 警报策略?
terraform 文档中提供的示例仅显示指标的警报策略,而不显示已部署资源的正常运行时间检查,因此我\xe2\x80\x99m 不确定 terraform 是否可以做到这一点。
\n我想限制向我通过 Google Terraform 提供商创建的任何给定用户提供的权限。默认情况下,创建的任何用户都会放置在该cloudsqlsuperuser
组中,并且创建的任何新数据库都将该角色/组作为所有者。这使通过 GCP 控制台或google_sql_user
Terraform 资源创建的任何用户可以完全控制以类似方式创建的任何数据库。
到目前为止,我们能想到的最好办法是通过单次运行的 k8s 作业创建和更改用户。这充其量看起来很迂回,特别是考虑到如果我们想通过 Terraform 管理该资源,则必须稍后手动导入该资源。
是否有更好的方法来创建权限仅限于单个特定于应用程序的数据库的用户?
我需要通过 Terraform Google 云提供商创建基于日志的警报策略: https://cloud.google.com/logging/docs/alerting/monitoring-logs#lba
我从 Terraform 官方文档中查看,看到了“google_monitoring_alert_policy”资源:https ://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/monitoring_alert_policy
我没有在该文档中找到如何创建基于日志的警报策略。
我可以创建类型为“指标”的警报策略,但不能创建类型为“日志”的警报策略
我使用最新版本的 Terraform Google 云提供商:https://registry.terraform.io/providers/hashicorp/google/latest
我如何使用 Terraform Google 提供商创建基于日志的警报策略?
在此先感谢您的帮助。
google-cloud-platform terraform google-cloud-monitoring terraform-provider-gcp
terraform ×9