假设我有一个名为“env”的字符串类型变量(值可以是“dev”或“Production”)
使用以下数据,如何获取“dev”或“product”中第一个元素的setting1的值?
locals{
environments = {
dev = {
"hello001" = {
setting1 = "abc"
setting2 = "def"
setting3 = "ghi"
}
"hello002" = {
setting1 = "jkl"
setting2 = "mno"
setting3 = "pqr"
}
}
production = {
"hello003" = {
setting1 = "abc"
setting2 = "def"
setting3 = "ghi"
}
"hello004" = {
setting1 = "jkl"
setting2 = "mno"
setting3 = "pqr"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试过
local.environments[var.env][0].setting1
Run Code Online (Sandbox Code Playgroud)
但出现错误“该值没有任何索引”
问题:为了解决表的 GCP 数据目录标记的一些其他问题,将 terraform 从 0.14.4 更新到 1.0.8 后,我在尝试应用 terraform 时遇到了新错误。
\n\xe2\x94\x82 Error: Request cancelled\n\xe2\x94\x82 \n\xe2\x94\x82 with module.ds-bigquery.google_bigquery_table.prism_tables_no_partition["co.expenses"],\n\xe2\x94\x82 on ds-bigquery/bq-prism-tables.tf line 249, in resource "google_bigquery_table" "prism_tables_no_partition":\n\xe2\x94\x82 249: resource "google_bigquery_table" "prism_tables_no_partition" {\n\xe2\x94\x82 \n\xe2\x94\x82 The plugin.(*GRPCProvider).UpgradeResourceState request was cancelled.\nRun Code Online (Sandbox Code Playgroud)\n和这个痕迹
\nStack trace from the terraform-provider-google_v3.61.0_x5 plugin:\n\npanic: interface conversion: interface {} is string, not map[string]interface {}\n\ngoroutine 4466 [running]:\ngithub.com/hashicorp/terraform-provider-google/google.bigQueryTablecheckNameExists(0xc000df9600, 0x1, 0x1, 0x0, 0x2d21b78)\n /opt/teamcity-agent/work/5d79fe75d4460a2f/src/github.com/hashicorp/terraform-provider-google/google/resource_bigquery_table.go:26 +0x164\ngithub.com/hashicorp/terraform-provider-google/google.jsonCompareWithMapKeyOverride(0x2526520, 0xc000543940, 0x2526520, 0xc000543ae0, 0x2d22688, 0x40c201, 0xc000df9f30, 0x10)\n /opt/teamcity-agent/work/5d79fe75d4460a2f/src/github.com/hashicorp/terraform-provider-google/google/resource_bigquery_table.go:47 +0x63f\ngithub.com/hashicorp/terraform-provider-google/google.jsonCompareWithMapKeyOverride(0x275dac0, 0xc000c5ec00, 0x275dac0, 0xc000c5f140, 0x2d22688, 0x1, 0xc000f90120, 0xc000fd1000)\n …Run Code Online (Sandbox Code Playgroud) 我有一个地形变量地图,如下所示
variable "MyProj" {
type = map(object({
name = string
type = string
}))
default = {
"Proj1" = {
name = "Proj1"
programme = "java"
},
"Proj2" = {
name = "Proj2"
programme = "npm"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个空资源代码,只要根据上述映射(对象())和所需状态识别出更改,该代码就会运行批处理脚本。
resource "null_resource" "nullr" {
for_each = var.MyProj
provisioner "local-exec" {
command = "bash /home/myscript.sh ${each.value.name} ${each.value.progrmme}
}
}
Run Code Online (Sandbox Code Playgroud)
我的意图是,每当在上面的 map() 中识别出更改时,就应该运行空资源。
当我将 terraform 状态保留在本地计算机中时,它会按预期运行。但是,当我使用 azurem 后端将 terraform 状态保留在 Azure blob 容器中时,它不会运行 null_resource。即使我使用 terraform 状态的后端,我也应该在配置中进行哪些更改
我可以azurerm_app_configuration为 Azure 应用程序配置创建应用程序配置。并可以azurerm_private_endpoint使用 terraform 进行创建。
但我没有找到哪个 terraform 函数可以用于禁用公共访问,如下图所示。
有谁可以帮忙吗
我目前被列为 Google Workspace 管理员,但由于某种原因,我似乎仍然无法执行某些操作,例如创建文件夹来组织项目。我们使用 terraform 生成一些项目,生成的项目仅授予对权限中直接指定的项目的访问权限。
我看到网站上引用的继承权限/访问权限。我们如何设置它,以便我和其他一些人始终继承访问权限以查看为组织创建的每个项目?
google-cloud-platform terraform google-iam google-cloud-iam terraform-provider-gcp
如何在 terraform 中检查具有两个值的变量字符串。
\n我想用两个字符串值检查变量中的字符串,类似于下面的代码。
\nvirtual_network_type = var.vnet_type == "External" || "Internal" ? var.vnet_type : null\n\nRun Code Online (Sandbox Code Playgroud)\n但 terraform 抛出以下错误消息
\nError: Invalid operand\n\xe2\x94\x82 \n\xe2\x94\x82 on ../../modules/test/test-instance.tf line 51, in resource "azurerm_api_management" "apim_demo":\n\xe2\x94\x82 51: virtual_network_type = var.vnet_type == "External" || "Internal" ? var.vnet_type : null\n\xe2\x94\x82 \n\xe2\x94\x82 Unsuitable value for right operand: a bool is required.\n\xe2\x95\xb5\nRun Code Online (Sandbox Code Playgroud)\n我们可以在地形中做到这一点吗?
\n我想使用 Terraform 部署 Azure 逻辑应用程序。我需要添加 2-3 个自定义操作。我目前正在测试添加 2 个变量。
我希望所有操作都相继运行,但目前操作是并行部署的。我不知道哪个参数决定操作是否应该并行部署或一个接一个地部署。
我已复制并粘贴以下代码:
https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/logic_app_trigger_http_request
https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/logic_app_action_custom
Run Code Online (Sandbox Code Playgroud)
如何让动作依次部署?
# Define Terraform provider
terraform {
required_version = ">= 0.12"
}
# Configure the Azure provider
provider "azurerm" {
environment = "public"
version = ">= 2.0.0"
features {}
}
resource "azurerm_resource_group" "example" {
name = "my-logicapp-rg"
location = "West Europe"
}
resource "azurerm_logic_app_workflow" "example" {
name = "workflow1"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
}
resource "azurerm_logic_app_trigger_http_request" "example" {
name = "some-http-trigger"
logic_app_id = azurerm_logic_app_workflow.example.id …Run Code Online (Sandbox Code Playgroud) 使用 Terraform,我创建了一个 Azure 静态 Web 应用程序,如下所示。但文档 没有演示如何设置资源的应用程序设置。对于普通的Azure功能应用程序,我们可以看到app_settings参数。但是如何为使用 Terraform 创建的 Azure 静态 Web 应用程序设置应用程序设置?
resource "azurerm_static_site" "example" {
name = "example"
resource_group_name = "example"
location = "West Europe"
}
Run Code Online (Sandbox Code Playgroud)
我喜欢为 Azure 静态 Web 应用程序设置参数AAD_CLIENT_ID并配置身份提供程序,如 Microsoft文档中所示。AAD_CLIENT_SECRET
我正在尝试 terraform 移动块,但在使用它时出现以下错误。
main.tf 文件如下所示:-
module "docdb" {
`source = "./modules/docdb"`
docdb_subnet_group_name = "${var.project_name}-${var.environment}-group"
docdb_subnet_ids = module.vpc.private_subnets
docdb_cluster_identifier = "${var.project_name}-${var.environment}-docdb"
docdb_username = random_password.uname_create[0].result
docdb_password = random_password.password_create[0].result
skip_final_snapshot = var.skip_final_snapshot
docdb_vpc_security_group_ids = [module.sg_docdb.security_group_id]
docdb_cluster_instance_count = var.docdb_cluster_instance_count
docdb_cluster_instance_identifier = "docdb-cluster-${var.environment}-${count.index}"
instance_class = var.instance_class
docdb_parameter_group_name = "${var.project_name}-${var.environment}-docdb"
}
moved {
from = aws_docdb_cluster.docdb
to = module.docdb.aws_docdb_subnet_group.docdbgroup
}
moved {
from = aws_docdb_cluster_instance.docdb_cluster_instances[0]
to = module.docdb.aws_docdb_cluster.docdb
}
moved {
from = aws_docdb_cluster_parameter_group.cluster_para_group
to = module.docdb.aws_docdb_cluster_instance.docdb_cluster_instances
}
moved {
from = aws_docdb_subnet_group.docdbgroup
to = module.docdb.aws_docdb_cluster_parameter_group.cluster_para_group …Run Code Online (Sandbox Code Playgroud) rds.tf:-
module "db" {
**count = var.environment == "dev" || var.environment == "qa" ? 1 : 0**
source = "../rds"
identifier = var.db_name
engine = var.rds_engine
engine_version = var.rds_engine_version
output.tf:
output "rds_instance_endpoint" {
description = "The connection endpoint"
value = module.db.db_instance_endpoint
}
ERROR:-
Error: Unsupported attribute
on outputs.tf line 28, in output "rds_instance_endpoint":
28: value = module.db.db_instance_endpoint
module.db is a list of object, known only after apply
Can't access attributes on a list of objects. Did you mean to access …Run Code Online (Sandbox Code Playgroud)