Variáveis de survey
As variáveis de survey são campos de entrada personalizados que você pode adicionar aos templates de tarefa para coletar informações do usuário ao executar tarefas. Em vez de fixar valores nos seus playbooks ou scripts, você pode definir variáveis personalizadas que solicitam valores aos usuários em tempo de execução.
Esse recurso é útil para:
- Executar o mesmo template com parâmetros diferentes (por exemplo, valores de configuração)
- Aceitar entradas dinâmicas por chamadas de API
- Passar parâmetros personalizados em tarefas agendadas
- Acionar tarefas a partir de integrações com dados extraídos de webhooks

Variáveis de survey vs. Prompts
É importante entender a diferença entre variáveis de survey e prompts:
| Recurso | Variáveis de Survey | Prompts |
|---|---|---|
| Definição | Campos personalizados criados por você | Opções predefinidas específicas do template |
| Exemplos | Nome do ambiente, número da versão, endpoint de API | Ansible: --limit, --tagsTerraform: workspaces |
| Configuração | Adicionadas nas configurações do template com nome e tipo | Ativadas por caixas de seleção no template |
| Passadas como | Ansible: --extra-varsTerraform: -var | Flags de CLI integradas |
As variáveis de survey são campos personalizados flexíveis que você mesmo define, enquanto os prompts são opções integradas específicas de cada tipo de template (como as flags --limit ou --tags do Ansible).
Adicionando variáveis de survey a um template
As variáveis de survey são configuradas nas configurações do template:
- Vá em Templates de Tarefa e selecione o seu template
- Navegue até a seção Survey Variables nas configurações do template
- Clique em Add Survey Variable
- Configure a variável:
- Name: nome da variável (usado no seu código)
- Title: rótulo exibido no formulário
- Type: escolha o tipo do campo
- Pass variable as: variável extra (padrão) ou variável de ambiente
- Default value: valor opcional pré-preenchido exibido quando o formulário da tarefa é aberto
- Required: se o campo deve ser obrigatoriamente preenchido
- Salve o template
Quando os usuários executarem uma tarefa a partir desse template, verão um formulário com as suas variáveis de survey personalizadas.
Tipos de variável
As variáveis de survey suportam seis tipos:
String
Campo de texto para valores do tipo string.
Casos de uso: nomes de ambiente, nomes de branch, hostnames, caminhos de arquivo
Exemplo: uma variável chamada environment solicita que os usuários informem "production", "staging" ou "development"
Integer
Campo numérico para valores inteiros.
Casos de uso: números de porta, contagens de tentativas, timeouts, limites de recursos
Exemplo: uma variável chamada timeout_seconds solicita que os usuários informem "300" ou "600"
Text
Área de texto de várias linhas para valores de string mais longos.
Casos de uso: mensagens de commit, trechos de JSON, anotações livres, configuração de várias linhas
Exemplo: uma variável chamada changelog na qual os usuários colam as notas de versão antes do deploy
Enum (seleção única)
Menu suspenso no qual o usuário escolhe exatamente uma opção de uma lista predefinida.
Casos de uso: tipo de ambiente, estratégia de deploy, escolhas do tipo booleano
Exemplo: uma variável chamada deployment_type com as opções: "rolling", "blue-green", "canary"
Ao criar uma variável enum, adicione cada opção com um rótulo de exibição e um valor no editor de variáveis.
Select (seleção múltipla)
Menu suspenso no qual o usuário pode escolher uma ou mais opções de uma lista predefinida. Os valores selecionados são passados como um array JSON (por exemplo, ["staging","production"]), e não como uma única string.
Casos de uso: regiões de destino, feature flags, vários grupos de hosts, listas de tags
Exemplo: uma variável chamada target_regions com as opções us-east-1, eu-west-1, ap-southeast-1
Restrições:
- Os valores padrão devem ser escolhidos da lista de opções e podem incluir várias seleções
- Em templates do Bash, PowerShell e Python, faça o parse do array JSON a partir do argumento ou do valor da variável de ambiente (veja os exemplos abaixo)
Secret
Campo do tipo senha, no qual o valor fica oculto.
Casos de uso: chaves de API, senhas, tokens, configurações sensíveis
Exemplo: uma variável chamada api_token na qual o valor digitado aparece como pontos por segurança
Em templates do Ansible, o valor chega ao playbook em um arquivo criptografado com o Ansible Vault, e não pela linha de comando.
Valores padrão
Você pode definir um valor padrão opcional para a maioria dos tipos de variável. Quando um usuário abre a caixa de diálogo de execução da tarefa, os campos são pré-preenchidos com esses padrões.
- String, integer, text, secret: um único valor padrão
- Enum: uma opção da lista
- Select: uma ou mais opções da lista
Os valores padrão são úteis para agendamentos e integrações nos quais o mesmo template é executado repetidamente com parâmetros previsíveis. Os usuários ainda podem alterar os valores antes de iniciar uma tarefa.
Pass variable as (destino)
Cada variável de survey pode ser entregue de uma de duas formas:
| Configuração | Comportamento |
|---|---|
| Extra variable (padrão) | Passada da forma específica de cada aplicação: --extra-vars do Ansible, -var do Terraform ou argumentos de CLI name=value para aplicações shell |
| Environment variable | Definida como uma variável de ambiente do processo cujo nome corresponde ao nome da variável de survey |
Use Environment variable quando o seu script ou ferramenta lê do ambiente em vez de flags de CLI. Para variáveis do Terraform que precisam seguir a convenção TF_VAR_, nomeie a variável de survey como TF_VAR_instance_type e defina o destino como variável de ambiente.
As variáveis com destino de ambiente não são duplicadas em extra-vars, -var ou argumentos de CLI. Cada valor é entregue exatamente uma vez.
Como as variáveis de survey são passadas às tarefas
As variáveis de survey são passadas de formas diferentes dependendo do tipo do template e da configuração Pass variable as.
Os valores de seleção múltipla (tipo select) são arrays codificados em JSON em todos os caminhos de entrega (JSON de extra-vars, -var, argumentos de CLI e variáveis de ambiente). Uma seleção das opções 1 e 2 se torna ["1","2"], e não uma string separada por espaços.
Templates do Ansible
As variáveis de survey são passadas como variáveis extras do Ansible. O Semaphore as grava em um
arquivo YAML temporário e o passa com --extra-vars @file; o arquivo pode ser lido apenas pelo
usuário da tarefa e é excluído quando a tarefa termina.
Exemplo: se você definir uma variável de survey chamada app_version:
---
- hosts: webservers
tasks:
- name: Deploy application
command: deploy.sh {{ app_version }}
Ao executar a tarefa, o usuário informa "2.5.0" no formulário de survey, e o Ansible a recebe como:
app_version: "2.5.0"
Todo valor é escrito como uma string entre aspas, então uma resposta que parece um número, um
booleano ou uma data, como 2026.08 ou 00123, continua sendo uma string no playbook. Um valor que
contém um delimitador Jinja2 ({{ … }}, {% … %} ou {# … #}) também recebe a tag !unsafe: o Ansible o usa
literalmente e nunca avalia uma expressão Jinja2 digitada em um campo de survey, armazenada em um
grupo de variáveis ou entregue por um workflow.
Uma variável de survey do tipo secret vai para um segundo arquivo, criptografado com o Ansible Vault
usando uma senha de uso único que o Semaphore informa no prompt do vault, de modo que os segredos nunca
aparecem na linha de comando nem em texto claro no disco.
Templates do Terraform/OpenTofu
As variáveis de survey são passadas como variáveis do Terraform usando a flag -var.
Exemplo: se você definir uma variável de survey chamada instance_count:
variable "instance_count" {
type = number
description = "Number of instances to create"
}
resource "aws_instance" "web" {
count = var.instance_count
instance_type = "t2.micro"
# ... other configuration
}
Ao executar a tarefa, o usuário informa "3" no formulário de survey, e o Terraform a recebe como:
terraform apply -var="instance_count=3"
Templates Shell/Bash
As variáveis de survey são passadas ao script Bash como argumentos de linha de comando:
/bin/bash your_script.sh var1=val1 var2=val2 ... varN=valN
Você pode usar o código a seguir dentro do script para fazer o parse dos argumentos em um array:
declare -A args
for arg in "$@"; do
KEY="${arg%%=*}"
VALUE="${arg#*=}"
args["$KEY"]="$VALUE"
done
echo "ARG1: ${args[ARG1]}"
echo "ARG2: ${args[ARG2]}"
Para variáveis de seleção múltipla, o valor é uma string com um array JSON. Faça o parse com jq (certifique-se de que o jq está disponível na imagem do seu executor):
regions_json='["us-east-1","eu-west-1"]'
regions=$(echo "$regions_json" | jq -r '.[]')
for region in $regions; do
echo "Deploying to $region"
done
Templates do PowerShell
As variáveis de survey são passadas ao script PowerShell em execução como argumentos de linha de comando:
pwsh your_script.sh var1=val1 var2=val2 ... varN=valN
Para fazer o parse dos argumentos, use o código a seguir no script em execução:
$parsed = @{}
foreach ($a in $args) {
if ($a -match "^([^=]+)=(.*)$") {
$key = $matches[1]
$val = $matches[2]
$parsed[$key] = $val
}
}
Write-Host "Parsed arguments:"
write-host $parsed['env1']
write-host $parsed.env1
Para variáveis de seleção múltipla, faça o parse do array JSON a partir do valor do argumento:
$regions = $parsed['target_regions'] | ConvertFrom-Json
foreach ($region in $regions) {
Write-Host "Deploying to $region"
}
Templates do Python
As variáveis de survey são passadas ao script Python em execução como argumentos de linha de comando:
python3 your_script.sh var1=val1 var2=val2 ... varN=valN
Para fazer o parse dos argumentos, use o código a seguir no script em execução:
import sys
parsed = {}
for arg in sys.argv[1:]:
if "=" in arg:
key, val = arg.split("=", 1)
parsed[key] = val
print("Parsed arguments:")
print(parsed.get("env1"))
print(parsed["env1"] if "env1" in parsed else None)
Para variáveis de seleção múltipla, faça o parse do array JSON:
import json
regions = json.loads(parsed["target_regions"])
for region in regions:
print(f"Deploying to {region}")
Usando variáveis de survey
Execução manual de tarefas
Ao executar uma tarefa a partir de um template com variáveis de survey:
- Clique em Run no template
- Um formulário aparece com todas as variáveis de survey definidas
- Preencha os valores de cada campo
- Clique em Run Task
A tarefa é executada com os valores fornecidos, passados ao playbook ou script.