Как установить вывод команды как env. переменную в Windows cmd?

#windows #terraform #azure-cli

#Windows #terraform #azure-cli

Вопрос:

Я сохранил ключ хранилища Azure в хранилище ключей, и я хочу получить ключ с помощью Azure cli и установить его как env. переменную в window cmd, прежде чем запускать сценарий terraform.

Приведенная ниже команда не работает, кто-нибудь может сказать мне, что нужно изменить?

 set ARM_ACCESS_KEY=$(az keyvault secret show --name terraform-backend-key --vault-name myKeyVault)
  

Ошибка при инициализации

введите описание изображения здесь

Main.tf

 variable "count" {}
variable "prefix" {
default="RG"
 }
terraform {
backend "azurerm" {
container_name       = "new"
storage_account_name  = "mfarg"
key                  = "terraform.tfstate"
}}
resource "azurerm_resource_group" "test" {
count ="${var.count}"
name     = "${var.prefix}-${count.index}"
location = "West US 2"
}
  

Вывод командной строки

введите описание изображения здесь

Комментарии:

1. Если вы не получили достаточно ответов здесь, вы также можете задать аналогичный вопрос по ошибке сервера или суперпользователю .

2. вы присваиваете многострочный документ JSON переменной, которая, вероятно, завершается ошибкой. используйте «—путь запроса —вывод tsv», чтобы получить именно то свойство, которое вам нужно.

Ответ №1:

Чтобы задать переменную среды в Windows, я предлагаю вам использовать команду PowerShell для достижения этой цели. В PowerShell вы можете просто сделать это следующим образом:

 $env:ACCESS_KEY=$(az keyvault secret show -n terraform-backend-key --vault-name myKeyVault --query value -o tsv)
  

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

введите описание изображения здесь

Комментарии:

1. Я попытался установить env. переменную, как предложено вами, но после ее установки я получаю сообщение об ошибке при инициализации terraform (с использованием хранилища terraform remote state azure) для сохранения файла состояния в azure, связана ли ошибка с модулем AzureRM? потому что я работаю над новым модулем AZ

2. @user2549572 Сохраняйте состояние в хранилище Azure, вам следует экспортировать переменную среды ARM_ACCESS_KEY , а не ACCESS_KEY . Я просто покажу вам, как установить переменную среды через PowerShell.

3. Извините, я виноват. это сработало после изменения имени. Можете ли вы также рассказать мне, как установить env. variable с помощью командной строки?

4. @user2549572 Вы можете использовать предоставленную вами команду set var='' . Но, похоже, вы можете установить переменную с помощью вывода команды CLI напрямую.

5. @user2549572 Как я уже сказал, похоже, вы не можете установить вывод команды в виде переменной напрямую. Я также не нахожу способ.

Ответ №2:

Поздний ответ, но, возможно, полезный для тех, у кого все еще есть та же проблема. Этот метод будет работать в командной строке Windows, cmd.

 For /f %%i in ('az keyvault secret show --vault-name "Your-KeyVault-Name" --name "Your-Secret-Name" --query "value"') do set "password=%%i"
  

Теперь, если вы просто запустите «echo % password%», вы увидите свое секретное значение.
Помните, что команда az должна находиться между ‘ ‘, например ‘az keyvault secret и т.д.’.