Terraform-如何映射不同的天蓝色环境变量文件?

时间:2020-04-12 06:48:41

标签: azure terraform devops configuration-management

我在以下两个环境中有Terraform文件

  1. devenv_variables.tfvars
  2. testenv_variables.tfvars

这是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和密码以登录各自的订阅。

2 个答案:

答案 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 文件中获取值。