Survey-переменные
Survey-переменные — это пользовательские поля ввода, которые можно добавить в шаблоны задач для получения данных от пользователя при запуске задач. Вместо того чтобы жёстко прописывать значения в playbook или скриптах, вы можете определить пользовательские переменные, значения которых запрашиваются у пользователей во время запуска.
Эта функция полезна для:
- Запуска одного и того же шаблона с разными параметрами (например, значениями конфигурации)
- Приёма динамических данных через вызовы API
- Передачи пользовательских параметров в запланированных задачах
- Запуска задач из интеграций с данными, извлечёнными из webhook

Survey-переменные и Prompts
Важно понимать разницу между survey-переменными и prompts:
| Характеристика | Survey-переменные | Prompts |
|---|---|---|
| Определение | Пользовательские поля, которые вы создаёте | Предопределённые опции, специфичные для шаблона |
| Примеры | Название окружения, номер версии, конечная точка API | Ansible: --limit, --tagsTerraform: workspaces |
| Настройка | Добавляются в настройках шаблона с указанием имени и типа | Включаются флажками в шаблоне |
| Передаются как | Ansible: --extra-varsTerraform: -var | Встроенные флаги CLI |
Survey-переменные — это гибкие пользовательские поля, которые вы определяете сами, а prompts — встроенные опции, специфичные для каждого типа шаблона (например, флаги --limit или --tags в Ansible).
Добавление survey-переменных в шаблон
Survey-переменные настраиваются в настройках шаблона:
- Перейдите в Шаблоны задач и выберите ваш шаблон
- Перейдите в раздел Survey Variables в настройках шаблона
- Нажмите Add Survey Variable
- Настройте переменную:
- Name: имя переменной (используется в вашем коде)
- Title: отображаемая подпись в форме
- Type: выберите тип поля
- Pass variable as: extra-переменная (по умолчанию) или переменная окружения
- Default value: необязательное предзаполненное значение, отображаемое при открытии формы задачи
- Required: должно ли поле быть обязательно заполнено
- Сохраните шаблон
Когда пользователи запускают задачу из этого шаблона, они видят форму с вашими пользовательскими survey-переменными.
Типы переменных
Survey-переменные поддерживают шесть типов:
String
Текстовое поле ввода для строковых значений.
Сценарии использования: названия окружений, имена веток, имена хостов, пути к файлам
Пример: переменная с именем environment предлагает пользователям ввести «production», «staging» или «development»
Integer
Числовое поле ввода для целочисленных значений.
Сценарии использования: номера портов, количество повторных попыток, таймауты, лимиты ресурсов
Пример: переменная с именем timeout_seconds предлагает пользователям ввести «300» или «600»
Text
Многострочное текстовое поле для длинных строковых значений.
Сценарии использования: сообщения commit, фрагменты JSON, произвольные заметки, многострочная конфигурация
Пример: переменная с именем changelog, в которую пользователи вставляют примечания к вып уску перед развёртыванием
Enum (единичный выбор)
Выпадающий список, в котором пользователь выбирает ровно один вариант из предопределённого списка.
Сценарии использования: тип окружения, стратегия развёртывания, варианты вида «да/нет»
Пример: переменная с именем deployment_type с вариантами: «rolling», «blue-green», «canary»
При создании enum-переменной добавьте каждый вариант с отображаемой подписью и значением в редакторе переменной.
Select (множественный выбор)
Выпадающий список, в котором пользователь может выбрать один или несколько вариантов из предопределённого списка. Выбранные значения передаются как JSON-массив (например, ["staging","production"]), а не как одна строка.
Сценарии использования: целевые регионы, feature flags, несколько гру пп хостов, списки тегов
Пример: переменная с именем target_regions с вариантами us-east-1, eu-west-1, ap-southeast-1
Ограничения:
- Значения по умолчанию должны выбираться из списка вариантов и могут включать несколько значений
- В шаблонах Bash, PowerShell и Python разбирайте JSON-массив из аргумента или значения переменной окружения (см. примеры ниже)
Secret
Поле ввода пароля, в котором значение скрыто.
Сценарии использования: ключи API, пароли, token'ы, конфиденциальная конфигурация
Пример: переменная с именем api_token, введённое значение которой отображается точками в целях безопасности
В шаблонах Ansible значение попадает в playbook в файле, зашифрованном с помощью Ansible Vault, а не через командную строку.
Значения по умолчанию
Для большинства типов переменных можно задать необязательное значение по умолчанию. Когда пользователь открывает диалог запуска задачи, поля предзаполняются этими значениями.
- String, integer, text, secret: одно значение по умолчанию
- Enum: один вариант из списка
- Select: один или несколько вариантов из списка
Значения по умолчанию полезны для расписаний и интеграций, где один и тот же шаблон многократно запускается с предсказуемыми параметрами. Пользователи по-прежнему могут изменить значения перед запуском задачи.
Способ передачи переменной (цель)
Каждая survey-переменная может быть передана одним из двух способов:
| Настройка | Поведение |
|---|---|
| Extra variable (по умолчанию) | Передаётся способом, специфичным для приложения: Ansible --extra-vars, Terraform -var или аргументы CLI вида name=value для shell-приложений |
| Environment variable | Задаётся как переменная окружения процесса, имя которой совпадает с именем survey-переменной |
Используйте Environment variable, когда ваш скрипт или инструмент читает значения из окружения, а не из флагов CLI. Для переменных Terraform, которые должны следовать соглашению TF_VAR_, назовите survey-переменную TF_VAR_instance_type и установите в качестве цели переменную окружения.
Переменные с целью «переменная окружения» не дублируются в extra-vars, -var или аргументах CLI. Каждое значение передаётся ровно один раз.
Как survey-переменные передаются задачам
Survey-переменные передаются по-разному в зависимости от типа шаблона и настройки Pass variable as.
Значения множественного выбора (тип select) — это массивы в формате JSON при любом способе передачи (JSON extra-vars, -var, аргументы CLI и переменные окружения). Выбор вариантов 1 и 2 превращается в ["1","2"], а не в строку, разделённую пробелами.
Шаблоны Ansible
Survey-переменные передаются как extra-переменные Ansible. Semaphore записывает их во временный
YAML-файл и передаёт его с помощью --extra-vars @file; файл доступен для чтения только пользователю
задачи и удаляется после её завершения.
Пример: если вы определили survey-переменную с именем app_version:
---
- hosts: webservers
tasks:
- name: Deploy application
command: deploy.sh {{ app_version }}
При запуске задачи пользователь вводит «2.5.0» в форме survey, и Ansible получает это как:
app_version: "2.5.0"
Каждое значение записывается как строка в кавычках, поэтому ответ, который выглядит как число,
логическое значение или дата, например 2026.08 или 00123, остаётся в playbook строкой. Значение,
содержащее разделитель Jinja2 ({{ … }}, {% … %} или {# … #}), дополнительно помечается тегом !unsafe:
Ansible использует его буквально и никогда не вычисляет выражение Jinja2, введённое в поле survey,
сохранённое в группе переменных или переданное из рабочего процесса.
Survey-переменная типа secret попадает во второй файл, зашифрованный с помощью Ansible Vault
одноразовым паролем, который Semaphore вводит в ответ на запрос vault, поэтому секреты никогда не
появляются в командной строке и не хранятся на диске в открытом виде.
Шаблоны Terraform/OpenTofu
Survey-переменные передаются как переменные Terraform с помощью флага -var.
Пример: если вы определили survey-переменную с именем 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
}