我在以下两个环境中有Terraform文件
这是devenv_variables.tfvars
location = "westeurope"
resource_group_name = "devenv-cloudresources-rg"
这是testenv_variables.tfvars
location = "westeurope"
resource_group_name = "testenv-cloudresources-rg"
这是我的main.tf
# Configure the Microsoft Azure Provider
provider "azurerm" {
version = "=2.0.0"
features {}
subscription_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
provider "azurerm" {
alias = "testenv"
subscription_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
# Create a resource group
resource "azurerm_resource_group" {
provider = "azurerm.testenv" //How do I pass provider based on variables here?
name = "${var.resource_group_name}"
location = "${var.location}"
}
我的要求是,基于传递的tfvar
文件作为参数,它应该选择订阅。
terraform apply -var-file="devenv_variables.tfvars"
当我在下面键入命令资源时,将在测试环境中创建
terraform apply -var-file="testenv_variables.tfvars"
我认为,我需要定义客户端ID和密码以登录各自的订阅。
答案 0 :(得分:1)
tfvars
文件应仅包含变量的值。
变量的声明应出现在常规tf
文件中。
variables.tf
variable "location" {
type = "string"
description = "The azure location where the resources is created"
}
devenv_variables.tfvars
location = "West Europe"
This tutorial还可以为您提供更多信息和示例。
答案 1 :(得分:1)
您只需在两个文件中创建相同的变量名称即可。当您运行命令 terraform plan–var-file='variable's_file_name'
& terraform apply–var-file='variable's_file_name'
在那一点上,terraform 将从不同的文件中获得不同的值。
用于演示
variable.tf(包含所有变量)
variable "resource_group" {
type = string
description = "Resource Group"
default = ""
}
dev.tfvars(包含开发变量的值)
resource_group="name_of_my_resource_group_dev"
prod.tfvars(包含生产变量的值)
resource_group="name_of_my_resource_group_prod"
现在,当您运行命令 terraform plan–var-file='dev.tfvars'
时,它会从 dev.tfvars 文件中获取值。