Я справился с этим с помощью local-exec
.
provisioner "local-exec" {
command = <<COMMAND
az login --service-principal --username #{APP_ID}# --password #{SP_PASSWORD}# --tenant #{TENANT_ID}#
az webapp config access-restriction add --resource-group ${azurerm_resource_group.example.name} --name ${azurerm_app_service.example.name} --rule-name developers --action Allow --ip-address 130.220.0.0/27 --priority 200
COMMAND
interpreter = ["PowerShell", "-Command"]
}
К сожалению, для этой цели мне пришлось создать другого участника службы, поскольку я не хотел сбрасывать тот, который используется Azure DevOps (но Вы можете попробовать и повторно использовать этот).
Я использовал эти команды:
az ad sp create-for-rbac --name sp-for-cli
az role assignment create --assignee APP_ID --role Contributor
В качестве следующего я объявил переменные APP_ID, SP_PASSWORD и TENANT_ID в моем конвейере выпуска со значениями, данными командой выше.
Как последний шаг Я добавил маркер замены шаг :
steps:
- task: qetza.replacetokens.replacetokens-task.replacetokens@3
displayName: 'Replace tokens in main.tf'
inputs:
rootDirectory: '$(System.DefaultWorkingDirectory)/terraform/drop'
targetFiles: main.tf
Теперь, когда я запускаю az webapp config access-restriction show --resource-group example-resources --name example-app-service-for-cli
, я получаю:
"ipSecurityRestrictions": [
{
"action": "Allow",
"additional_properties": {},
"description": null,
"ip_address": "130.220.0.0/27",
"name": "developers",
"priority": 200,
"subnet_mask": null,
"subnet_traffic_tag": null,
"tag": "Default",
"vnet_subnet_resource_id": null,
"vnet_traffic_tag": null
},
Весь код вы можете найти здесь .