Terraform, выберите значение в виде сетки PowerShell - PullRequest
0 голосов
/ 08 июня 2019

Я выполнил файл terraform, который вызывает команды powershell. Моя идея заключается в том, что на экране появляются разные подписки, и выберите одну из них, чтобы позже я смог создать определенные ресурсы в Azure.

После выбора Группа ресурсов правильно создается в выбранной подписке, но после ее повторного выполнения и выбора другой подписки я больше ничего не создаю, и появляется сообщение добавления и удаления

provider "azurerm" {
    version = "=1.28.0"
 }

resource "null_resource" "script1" {

    triggers {
        build_number = "${timestamp()}"
    }
    provisioner "local-exec" {
    command = <<EOT
        Login-AzureRmAccount
        $SubscriptionId = (Get-AzureRmSubscription | select Name, State, SubscriptionId, TenantId | Out-GridView -Title "Azure Subscription Selector" -PassThru).SubscriptionId
        Get-AzureRmSubscription -SubscriptionId $SubscriptionId | Select-AzureRmSubscription
    EOT

        interpreter = ["powershell"]
        }
    }

#variable "subscripcion" {}


resource "azurerm_resource_group" "resources_groups" {
    name        =  "resources_groups"
    location    =   "west europe"
 }

Подать заявку завершено! Ресурсы: 1 добавлено, 0 изменено, 1 уничтожено.

Как я могу использовать эту опцию и могу ли я использовать другую подписку для создания указанных ресурсов, не удаляя то, что я уже реализовал?

Спасибо

1 Ответ

0 голосов
/ 08 июня 2019

Когда вы применяете терраформу, она сначала обновляет состояние существующих ресурсов. Допустим, вы уже создали группу ресурсов в одной подписке, когда вы снова запустите команду apply, она обновит состояние группы ресурсов в этой конкретной подписке.

Когда вы подтвердите операцию применения, она изменит подписку, выбранную в вашей локальной оболочке (через null_resource), но на данный момент она уже подсчитала, что в ранее выбранной подписке не требуется никаких изменений.

Если вы запустите это снова после того, как local-exec выберет желаемую подписку, это, вероятно, сработает.

Могу ли я предложить вам передать subscription_id в качестве аргумента при вызове terraform apply? Таким образом, поставщик будет настроен с правильной подпиской с самого начала.

Код ниже:

variable "subscription_id" {
  type = "string"
}

provider "azurerm" {
    version = "=1.28.0"
    subscription_id = var.subscription_id
 }

resource "azurerm_resource_group" "resources_groups" {
    name        =  "resources_groups"
    location    =   "uksouth"
 }

и вызовите с помощью команды terraform apply -var 'subscription_id=<my_subscription_id>

Затем вы можете просто запустить terraform, используя powershell, чтобы получить интерактивный выбор

Login-AzAccount
$SubscriptionId = (Get-AzSubscription | select Name, State, SubscriptionId, TenantId | Out-GridView -Title "Azure Subscription Selector" -PassThru).SubscriptionId
terraform apply -var `subscription_id=$SubscriptionId`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...