Adicionar prompts personalizados ao fluxo de trabalho

Por padrão, azd up solicita três coisas: nome do ambiente, assinatura e localização. No entanto, projetos reais geralmente precisam de entrada extra, como um tipo de ambiente, proprietário do projeto ou nome da equipe. Este artigo descreve três abordagens para adicionar prompts personalizados, da mais simples à mais flexível. Você pode misturar e combinar todas as três abordagens no mesmo modelo.

Opção 1: lista de opções com o decorador @allowed

A maneira mais simples de adicionar um prompt personalizado é usar o decorador @allowed em um parâmetro Bicep. Quando azd encontra um parâmetro com @allowed valores e nenhum valor é fornecido, ele exibe uma lista de seleção interativa, semelhante aos seletores internos de assinatura e local.

Adicione o parâmetro decorado ao arquivo infra/main.bicep :

@description('The environment type')
@allowed([
  'dev'
  'staging'
  'prod'
])
param environmentType string

Quando você executa azd up, azd apresenta automaticamente uma lista de seleção para esse parâmetro. O usuário pode navegar usando teclas de direção e digitar para filtrar, assim como o seletor de assinatura.

Nenhuma configuração extra é necessária. Adicione o parâmetro ao arquivo Bicep e azd manipula o restante.

Dica

Use o decorador @metadata com azd.default para destacar uma seleção padrão.

@allowed(['dev', 'staging', 'prod'])
@metadata({
  azd: {
    default: 'dev'
  }
})
param environmentType string

Para obter mais opções de decorador, consulte Trabalhando com metadados da CLI do desenvolvedor do Azure para parâmetros de entrada do Bicep.

Opção 2: entrada de texto livre

Se você precisar de entrada aberta em vez de uma lista fixa, declare um parâmetro sem valor padrão. Quando azd encontra um parâmetro necessário que não tem valor padrão nem valor em main.parameters.json, ele solicita ao usuário um texto livre.

Adicione o parâmetro ao arquivo infra/main.bicep :

@description('Who owns this project')
param projectOwner string

Quando você executa azd up, o usuário digita um valor e pressiona Enter.

Opção 3: Ganchos para lógica personalizada

Decoradores do Bicep abrangem a maioria dos cenários, mas às vezes você precisa de mais flexibilidade, como listas dinâmicas de uma API, prompts condicionais, validação ou uma interface de usuário personalizada em estilo de menu. Nesses casos, use um preprovision gancho para executar um script personalizado antes azd provision.

Entender o fluxo

A abordagem do gancho funciona por meio da seguinte cadeia:

  1. Um script de gancho é executado e solicita ao usuário menus personalizados, validação ou outra lógica.
  2. O script armazena valores usando azd env set VARIABLE_NAME value.
  3. Os valores persistem em .azure/<env>/.env.
  4. main.parameters.json faz referência aos valores como ${VARIABLE_NAME}.
  5. Bicep recebe-os como parâmetros regulares durante o provisionamento.

Criar o script de gancho

Crie um script de gancho que solicite ao usuário e armazene o resultado. Os exemplos a seguir incluem uma proteção de idempotência que ignora o prompt em novas execuções se um valor já estiver definido e um caso que manipula a entrada inválida.

Crie um hooks/preprovision.ps1 arquivo:

Write-Host "========================================"
Write-Host "  Custom Pre-Provision Configuration"
Write-Host "========================================"

# Skip prompt if value is already set
$existingTeam = $null
$output = azd env get-value CUSTOM_TEAM_NAME 2>&1
if ($LASTEXITCODE -eq 0 -and $output) {
    $existingTeam = $output.Trim()
}

if ($existingTeam) {
    Write-Host "Team name is already set to: $existingTeam"
    exit 0
}

Write-Host "Available teams:"
Write-Host "  1) platform-engineering"
Write-Host "  2) app-development"
Write-Host "  3) data-science"
Write-Host "  4) devops"
Write-Host "  5) Enter custom value"

$choice = Read-Host "Select a team (1-5)"
$teamName = switch ($choice) {
    "1" { "platform-engineering" }
    "2" { "app-development" }
    "3" { "data-science" }
    "4" { "devops" }
    "5" { Read-Host "Enter custom team name" }
    default {
        Write-Error "Invalid selection: $choice"
        exit 1
    }
}

# Store in azd environment
azd env set CUSTOM_TEAM_NAME $teamName
Write-Host "Team name set to: $teamName"

Mapear a variável para um parâmetro Bicep

main.parameters.json No arquivo, faça referência à variável de ambiente:

{
  "parameters": {
    "customTeamName": {
      "value": "${CUSTOM_TEAM_NAME}"
    }
  }
}

No arquivo main.bicep, declare o parâmetro com um padrão, para que azd também não o solicite.

@description('Team name - set by preprovision hook')
param customTeamName string = ''

Habilitar o gancho

Adicione a configuração do gancho ao seu azure.yaml:

hooks:
  preprovision:
    windows:
      shell: pwsh
      run: hooks/preprovision.ps1
      interactive: true
    posix:
      shell: sh
      run: hooks/preprovision.sh
      interactive: true

A interactive: true configuração associa o script ao console para que ele possa ler a entrada do usuário. Para obter mais informações sobre a configuração de ganchos, consulte Personalize seus fluxos de trabalho da CLI do Desenvolvedor Azure utilizando ganchos de comando e de evento.

Escolher a abordagem certa

Scenario Abordagem
Escolha em uma lista fixa de valores. @allowed decorador (opção 1)
Coletar entrada de texto livre. Parâmetro sem padrão (Opção 2)
Listas dinâmicas, chamadas à API ou lógica condicional. Script de gancho (Opção 3)
Ignore todos os prompts em CI/CD. Valores pré-definidos (consulte a seção a seguir)

Ignorar prompts em CI/CD

Todas as três opções dão suporte ao modo não interativo. Predefinir valores antes de executar azd e passar --no-prompt:

# Set hook values
azd env set CUSTOM_TEAM_NAME "platform-engineering"

# Set Bicep parameter values
azd env config set infra.parameters.environmentType "prod"
azd env config set infra.parameters.projectOwner "ci-bot"

# Run with no prompts
azd up --subscription <subscription-id> --location eastus --no-prompt

Se um valor necessário estiver ausente, azd relatará exatamente qual parâmetro está ausente e mostrará o azd env config set comando necessário para corrigi-lo.