Невозможно получить данные, используя внешний источник данных - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь получить значения из лазури, используя внешний источник данных в terraform.Тем не менее, я не понимаю, что я делаю неправильно, когда я пытаюсь экспортировать значения, используя запись-вывод, получая ошибку

data.external.powershell_test: data.external.powershell_test: command "Powershell.exe"произвел недопустимый JSON: недопустимый символ 'l' ищет начало строки ключа объекта"

Ниже приведен мой скрипт

$vm=(Get-AzureRmVM -ResourceGroupName MFA-RG -Name vm2).name | convertTo-json
Write-Output "{""first"" : ""$vm""}"

Файл Main.tf

data "external" "powershell_test" {
  program = ["Powershell.exe", "./vm.ps1"]
}

output "value" {
  value = "${data.external.powershell_test.result.first}"
}

Может кто-нибудь сказать мне, что не так со сценарием? И правильно ли я использую запись?

Отредактировано -------------

Нижеэто снимок экрана, когда я запускаю vm.ps1 напрямую enter image description here

Кроме того, когда я непосредственно назначаю значение переменной, как показано ниже, terraform может выполнить код.

$vm = "testvm"
Write-Output "{""first"" : ""$vm""}"

enter image description here

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Для вашей проблемы вы должны изменить свою команду PowerShell следующим образом:

$vm=(Get-AzureRmVM -ResourceGroupName MFA-RG -Name vm2).name | convertTo-json
Write-Output "{""first"" : $vm}"

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

data "external" "powershell_test" {
      program = ["Powershell.exe", "${path.module}/vm.ps1"]
    }

Результат на моей стороне ниже:

enter image description here

Я использую новый модуль Azure PowerShell Az, и мой код показан здесь:

PowerShell:

$vm=(Get-AzVM -ResourceGroupName charles -Name azureUbuntu18).name | convertTo-json
Write-Output "{""first"" : $vm}"

Терраформ:

data "external" "powershell_test" {
  program = ["Powershell.exe", "${path.module}/vm.ps1"]
}

output "value" {
  value = "${data.external.powershell_test.result.first}"
}
1 голос
/ 14 марта 2019

data.external.powershell_test.result является единственным действительным атрибутом, и это карта.

Таким образом, код будет изменен на

output "value" {
  value = "${data.external.powershell_test.result['first']}"
}

Ссылка:

https://www.terraform.io/docs/configuration-0-11/interpolation.html#user-map-variables

...