Как запустить ниже сценарий PowerShell внутри terraform local-exec - PullRequest
1 голос
/ 09 мая 2020

Я пытаюсь изменить стек веб-приложений с помощью средства обеспечения local-exe c в шаблоне terraform.

# Create azure Webapp 1
resource "azurerm_app_service" "webapp1" {
  name                = var.webapp1
  location            = azurerm_resource_group.dev.location
  resource_group_name = azurerm_resource_group.dev.name
  app_service_plan_id = azurerm_app_service_plan.dev.id
  https_only          = "true"
  site_config {
    always_on                 = "true"
    ftps_state                = "FtpsOnly"
    dotnet_framework_version  = "v4.0"
    http2_enabled             = "true"
    min_tls_version           = "1.2"
    use_32_bit_worker_process = "false"
    default_documents = ["hostingstart.html"]

  }
 provisioner "local-exec" {
 command =<<EOT  
$PropertiesObject = @{"CURRENT_STACK" = "dotnetcore"}
New-AzResource -PropertyObject $PropertiesObject -ResourceGroupName azurerm_resource_group.dev.name -ResourceType Microsoft.Web/sites/config/metadata -ResourceName azurerm_app_service.webapp1.name -ApiVersion 2018-02-01 -Force
EOT}

Но это дает мне следующую ошибку:

azurerm_app_service.webapp1 (local-exec): Executing: ["cmd" "/C" "    $PropertiesObject = @{\r\n    \"CURRENT_STACK\" = \"dotnetcore\"\r\n    }\r\n    New-AzResource -PropertyObject $PropertiesObject -ResourceGroupName azurerm_resource_group.dev.name -ResourceType Microsoft.Web/sites/config/metadata -ResourceName azurerm_app_service.webapp1.name -ApiVersion 2018-02-01 -Force  \r\n"]
azurerm_app_service.webapp1 (local-exec): '$PropertiesObject' is not recognized as an internal or external command,
azurerm_app_service.webapp1 (local-exec): operable program or batch file.


Error: Error running command '    $PropertiesObject = @{
    "CURRENT_STACK" = "dotnetcore"
    }
    New-AzResource -PropertyObject $PropertiesObject -ResourceGroupName azurerm_resource_group.dev.name -ResourceType Microsoft.Web/sites/config/metadata -ResourceName azurerm_app_service.webapp1.name -ApiVersion 2018-02-01 -Force
': exit status 1. Output: '$PropertiesObject' is not recognized as an internal or external command,
operable program or batch file.

Есть идеи, как это исправить.

1 Ответ

0 голосов
/ 09 мая 2020

Я предпочитаю работать с файлами, а не с необработанным сценарием, так как сценарий может измениться в будущем, и его удобнее и удобнее изменить в отдельном файле.

Выполните следующие шаги:

Создайте новый файл для сценария PowerShell (убедитесь, что расширение - .ps1) Вставьте следующий код:
Param
(
    [Parameter(Mandatory=$True)]
    [string]$ResourceGroupName,
    [Parameter(Mandatory=$True)]
    [string]$ResourceType,
    [Parameter(Mandatory=$True)]
    [string]$ApiVersion,
    [Parameter(Mandatory=$True)]
    [string]$PropertiesObject
)   

New-AzResource -PropertyObject $PropertiesObject -ResourceGroupName $ResourceGroupName -ResourceType $ResourceType -ResourceName $ResourceName -ApiVersion $ApiVersion -Force

Создать соответствующие переменные:
variable "apiversion" {
    type = "string"
    default = "2018-02-01"
}
variable "resourcetype" {
    type = "string"
    default = "Microsoft.Web/sites/config/metadata 1"
}

variable "propertiesobject" {
  type    = "map"
  default = {
    "CURRENT_STACK" = "dotnetcore"
  }
}
Завершите скрипт и передайте соответствующие аргументы:
    provisioner "local-exec" {
        command = "PowerShell -file .\%FILE NAME FROM STEP 1%.ps1 -ResourceGroupName azurerm_resource_group.dev.name -ResourceType ${var.resourcetype} -ApiVersion ${var.apiversion} -PropertiesObject ${var.propertiesobject} "
    }

Этот пример еще не тестировался, но вот как я работаю с другими скриптами PowerShell.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...