Terraform 脚本列出在 Terraform 中使用的动态变量名称的能力
Terraform script to list out ability to dynamic variable names for use in terraform
我想在 terraform 中定义和声明不同资源组的相同资源。
最终目标是在我 运行 terraform 计划时从命令行获取所有创建的资源,这些资源属于我 select 的特定资源组。下面是我尝试 运行 但不确定下面的定义声明是否 correct.Please 的 terraform 脚本建议我如何编写或格式化此脚本。我是 terraform 广告的新手,探索了许多博客来创建以下脚本,但需要说明。
以下是资源变量名的2个资源组。
var.tf:
variable "properties" {
type = object( {
resourcegroup_name = string
location = string
keyvault_name = string
Networksecuritygroup_name = string
Storageaccount_name = string
Storageaccount_dev = string
APImanagement_name = string
APP-serviceplan_name = string
webappservice_name = string
SQLDatabase_name = string
NetworkInterface_name = string
VirtualMachine_name = string
EndPoint = string
CDNProfile = string
ApplicationInsigt_name = string
TrafficManagerProfile_name = string
SQLServer_name = string
Subnet_name = string
})
variable "resourcegroup1" {
default = [{
resourcegroup_name = "001-rg"
location = "UK South"
keyvault_name = "kv-001"
TrafficManagerProfile_name = "tmp-001"
Storageaccount_name = "stg001"
APImanagement_name = "apm-001"
APPserviceplan_name = "asp-001"
webappservice_name = "was-001"
Storageaccount_dev = "devstg001"
SQLDatabase_name = "DB-001"
NetworkInterface_name = "NIC-01"
VirtualMachine_name = "VM001"
EndPoint1 = "stg001 (stg001/stg001)"
CDNProfile1 = "cdn_001"
EndPoint2 = "devstg001 (devstg001/devstg001)"
CDNProfile2 = "cdn_dev001"
ApplicationInsigt_name = "AI-001"
SQLServer_name = "Db-server-001"
Subnet_name = "subnet001"
}]
},
variable "resourcegroup2" {
default = [{
resourcegroup_name = "002-rg"
location = "UK South"
keyvault_name = "kv-002"
TrafficManagerProfile_name = "tmp-002"
Storageaccount_name = "stg002"
APImanagement_name = "apm-002"
APPserviceplan_name = "asp-002"
webappservice_name = "was-002"
Storageaccount_dev = "devstg002"
SQLDatabase_name = "DB-002"
NetworkInterface_name = "NIC-02"
VirtualMachine_name = "VM002"
EndPoint1 = "stg002 (stg002/stg002)"
CDNProfile1 = "cdn_002"
EndPoint2 = "devstg002 (devstg002/devstg002)"
CDNProfile2 = "cdn_dev002"
ApplicationInsigt_name = "AI-002"
SQLServer_name = "Db-server-002"
Subnet_name = "subnet002"
}]
}
main.tf:
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "2.90.0"
}
}
}
provider "azurerm" {
# Configuration options
features{}
}
data "azurerm_client_config" "current" {}
resource "azurerm_key_vault" "keyvault" {
name = "${var.keyvault_name}"
location = "${var.location}"
resource_group_name = "${var.resourcegroup_name}"
enabled_for_disk_encryption = true
tenant_id = "${data.azurerm_client_config.current.tenant_id}"
sku_name = "standard"
access_policy {
tenant_id = "987654"
object_id = "123456"
key_permissions = [
"Get",
]
secret_permissions = [
"Get",
]
storage_permissions = [
"Get",
]
}
}
#---------------------------------------API Management Serrvice---------------------------------------
variable "apimAdminEmail"{
default= "abc@gmail.com"
}
variable "apimTier"{
default= "Developer_1"
}
variable "apimCapacity"{
default= "1"
}
variable "hostName"{
default= "api3"
}
resource "azurerm_api_management" "APIM" {
name = "${var.APImanagement_name}"
location = "${var.location}"
resource_group_name = "${var.resourcegroup_name}"
publisher_name = "API"
publisher_email = "${var.apimAdminEmail}"
sku_name = "${var.apimTier}"
#capacity = "${var.apimCapacity}"
identity {
type = "SystemAssigned"
}
}
我不太确定你的问题,但我假设你想要两个使用单个 main.tf (两个不同环境的通用模板)部署两个不同的环境
示例:Dev 和 Stage 环境。
如果是这种情况,请为每个环境配置两个单独的 variable.tf 文件,并在初始化 terraform 时将 variable.tf 文件传递给。
请检查下面的例子
- 创建两个名称不同的变量文件(dev.tfvars 和 stage.tfvars)
dev.tfvars
resourcegroup_name = "002-rg"
location = "UK South"
keyvault_name = "kv-002"
TrafficManagerProfile_name = "tmp-002"
stage.tfvars
resourcegroup_name = "001-rg"
location = "UK South"
keyvault_name = "kv-001"
TrafficManagerProfile_name = "tmp-001"
- 声明每个变量的默认值
variables.tf
variable "resourcegroup_name" {
default = ""
}
variable "location" {
default = ""
}
....
- 当运行 terraform自动化时,传递你创建的var fie
terraform init
terraform plan -var-file="dev.tfvars"
terraform apply -var-file="dev.tfvars"
我想在 terraform 中定义和声明不同资源组的相同资源。
最终目标是在我 运行 terraform 计划时从命令行获取所有创建的资源,这些资源属于我 select 的特定资源组。下面是我尝试 运行 但不确定下面的定义声明是否 correct.Please 的 terraform 脚本建议我如何编写或格式化此脚本。我是 terraform 广告的新手,探索了许多博客来创建以下脚本,但需要说明。
以下是资源变量名的2个资源组。 var.tf:
variable "properties" {
type = object( {
resourcegroup_name = string
location = string
keyvault_name = string
Networksecuritygroup_name = string
Storageaccount_name = string
Storageaccount_dev = string
APImanagement_name = string
APP-serviceplan_name = string
webappservice_name = string
SQLDatabase_name = string
NetworkInterface_name = string
VirtualMachine_name = string
EndPoint = string
CDNProfile = string
ApplicationInsigt_name = string
TrafficManagerProfile_name = string
SQLServer_name = string
Subnet_name = string
})
variable "resourcegroup1" {
default = [{
resourcegroup_name = "001-rg"
location = "UK South"
keyvault_name = "kv-001"
TrafficManagerProfile_name = "tmp-001"
Storageaccount_name = "stg001"
APImanagement_name = "apm-001"
APPserviceplan_name = "asp-001"
webappservice_name = "was-001"
Storageaccount_dev = "devstg001"
SQLDatabase_name = "DB-001"
NetworkInterface_name = "NIC-01"
VirtualMachine_name = "VM001"
EndPoint1 = "stg001 (stg001/stg001)"
CDNProfile1 = "cdn_001"
EndPoint2 = "devstg001 (devstg001/devstg001)"
CDNProfile2 = "cdn_dev001"
ApplicationInsigt_name = "AI-001"
SQLServer_name = "Db-server-001"
Subnet_name = "subnet001"
}]
},
variable "resourcegroup2" {
default = [{
resourcegroup_name = "002-rg"
location = "UK South"
keyvault_name = "kv-002"
TrafficManagerProfile_name = "tmp-002"
Storageaccount_name = "stg002"
APImanagement_name = "apm-002"
APPserviceplan_name = "asp-002"
webappservice_name = "was-002"
Storageaccount_dev = "devstg002"
SQLDatabase_name = "DB-002"
NetworkInterface_name = "NIC-02"
VirtualMachine_name = "VM002"
EndPoint1 = "stg002 (stg002/stg002)"
CDNProfile1 = "cdn_002"
EndPoint2 = "devstg002 (devstg002/devstg002)"
CDNProfile2 = "cdn_dev002"
ApplicationInsigt_name = "AI-002"
SQLServer_name = "Db-server-002"
Subnet_name = "subnet002"
}]
}
main.tf:
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "2.90.0"
}
}
}
provider "azurerm" {
# Configuration options
features{}
}
data "azurerm_client_config" "current" {}
resource "azurerm_key_vault" "keyvault" {
name = "${var.keyvault_name}"
location = "${var.location}"
resource_group_name = "${var.resourcegroup_name}"
enabled_for_disk_encryption = true
tenant_id = "${data.azurerm_client_config.current.tenant_id}"
sku_name = "standard"
access_policy {
tenant_id = "987654"
object_id = "123456"
key_permissions = [
"Get",
]
secret_permissions = [
"Get",
]
storage_permissions = [
"Get",
]
}
}
#---------------------------------------API Management Serrvice---------------------------------------
variable "apimAdminEmail"{
default= "abc@gmail.com"
}
variable "apimTier"{
default= "Developer_1"
}
variable "apimCapacity"{
default= "1"
}
variable "hostName"{
default= "api3"
}
resource "azurerm_api_management" "APIM" {
name = "${var.APImanagement_name}"
location = "${var.location}"
resource_group_name = "${var.resourcegroup_name}"
publisher_name = "API"
publisher_email = "${var.apimAdminEmail}"
sku_name = "${var.apimTier}"
#capacity = "${var.apimCapacity}"
identity {
type = "SystemAssigned"
}
}
我不太确定你的问题,但我假设你想要两个使用单个 main.tf (两个不同环境的通用模板)部署两个不同的环境 示例:Dev 和 Stage 环境。
如果是这种情况,请为每个环境配置两个单独的 variable.tf 文件,并在初始化 terraform 时将 variable.tf 文件传递给。
请检查下面的例子
- 创建两个名称不同的变量文件(dev.tfvars 和 stage.tfvars)
dev.tfvars
resourcegroup_name = "002-rg"
location = "UK South"
keyvault_name = "kv-002"
TrafficManagerProfile_name = "tmp-002"
stage.tfvars
resourcegroup_name = "001-rg"
location = "UK South"
keyvault_name = "kv-001"
TrafficManagerProfile_name = "tmp-001"
- 声明每个变量的默认值
variables.tf
variable "resourcegroup_name" {
default = ""
}
variable "location" {
default = ""
}
....
- 当运行 terraform自动化时,传递你创建的var fie
terraform init
terraform plan -var-file="dev.tfvars"
terraform apply -var-file="dev.tfvars"