Расширения#
Расширение (plugin) – это фрагмент кода, который расширяет основные функции Ansible. Расширения используются для управления подключениями, обработки данных, ведения журналов, написания пользовательских модулей и многого другого.
Описание работы различных типов расширений см. в документе Расширение.
Повышение привилегий#
Расширение |
Описание |
Пример |
|---|---|---|
Выполнение задач от имени другого пользователя в Windows. |
---
# ...
tasks:
- name: Install application as Administrator
ansible.windows.win_package:
path: C:\\installers\\app.msi
state: present
become: true
become_method: ansible.builtin.runas
become_user: Administrator
|
|
Выполнение задач от имени другого пользователя в Linux. |
---
# ...
tasks:
- name: Pull execution environment image from Private Automation Hub
ansible.builtin.shell: "podman pull {{ ee_image }}"
become: true
become_method: ansible.builtin.su
become_user: {{ privileged_user }}
|
|
Выполнение задач с привилегиями администратора в Linux. |
---
# ...
tasks:
- name: Restart nginx service with sudo
ansible.builtin.service:
name: nginx
state: restarted
become: true
become_method: ansible.builtin.sudo
|
Кеширование#
Расширение |
Описание |
Пример |
|---|---|---|
Сохранение кеша в виде файлов формата JSON. |
[defaults]
fact_caching = ansible.builtin.jsonfile
fact_caching_connection = /tmp/ansible_facts
fact_caching_timeout = 7200
|
|
Временное хранение фактов в оперативной памяти. Используется только в рамках текущего процесса. |
[defaults]
fact_caching = ansible.builtin.memory
|
Обратный вызов#
Расширение |
Описание |
Пример |
|---|---|---|
Вывод данных в стандартный поток. |
[defaults]
stdout_callback = ansible.builtin.default
|
|
Вывод результата работы набора сценариев в формате JUnit XML. |
[defaults]
stdout_callback = ansible.builtin.junit
junit_output_dir = /tmp/junit-reports
|
|
Вывод только ключевой информации о выполнении задач. |
[defaults]
stdout_callback = ansible.builtin.minimal
|
|
Представление результата работы каждой задачи в однострочном формате. |
[defaults]
stdout_callback = ansible.builtin.oneline
|
|
Сохранение результатов выполнения сценариев в виде файлов в формате JSON. |
[defaults]
callback_whitelist = ansible.builtin.tree
tree_dir = /tmp/ansible-output
|
Соединение#
Расширение |
Описание |
Пример |
|---|---|---|
Локальное выполнение задач на управляющем узле. |
---
# ...
hosts: localhost
connection: ansible.builtin.local
tasks:
- name: Run local task
ansible.builtin.shell: echo "Running locally"
|
|
Подключение по протоколу SSH через библиотеку Python Paramiko. |
[defaults]
connection = ansible.builtin.paramiko_ssh
|
|
Подключение к узлам Windows по протоколу PSRP. |
[defaults]
connection = ansible.builtin.psrp
|
|
Подключение по протоколу SSH. |
[defaults]
connection = ansible.builtin.ssh
|
|
Подключение к узлам Windows по протоколу WinRM. |
[defaults]
connection = ansible.builtin.winrm
|
Фильтры#
Расширение |
Описание |
Пример |
|---|---|---|
Декодирование строки из формата Base64. |
---
# ...
tasks:
- name: Decode Base64 string
ansible.builtin.debug:
msg: "{{ 'SGVsbG8gd29ybGQ=' | ansible.builtin.b64decode }}"
|
|
Кодирование строки в формат Base64. |
---
# ...
tasks:
- name: Encode string to Base64
ansible.builtin.debug:
msg: "{{ 'Hello world' | ansible.builtin.b64encode }}"
|
|
Получение базового названия файла или каталога из полного пути. |
---
# ...
tasks:
- name: Get basename of file path
ansible.builtin.debug:
msg: "{{ '/etc/nginx/nginx.conf' | ansible.builtin.basename }}"
|
|
Приведение значения к логическому типу. |
---
# ...
vars:
feature_enabled: "yes"
tasks:
- name: Convert string to boolean
ansible.builtin.debug:
msg: "{{ feature_enabled | ansible.builtin.bool }}"
|
|
Вычисление контрольной суммы по алгоритму SHA-1. |
---
# ...
tasks:
- name: Calculate checksum of string
ansible.builtin.debug:
msg: "{{ 'important content' | ansible.builtin.checksum }}"
|
|
Формировка всех возможных комбинаций элементов списка. |
---
# ...
tasks:
- name: Generate combinations
ansible.builtin.debug:
msg: "{{ [1, 2, 3] | ansible.builtin.combinations(2) }}"
|
|
Объединение нескольких словарей в один. |
---
# ...
vars:
dict1: {a: 1, b: 2}
dict2: {b: 3, c: 4}
tasks:
- name: Merge dictionaries
ansible.builtin.debug:
msg: "{{ dict1 | ansible.builtin.combine(dict2) }}"
|
|
Добавление комментариев. |
---
# ...
tasks:
- name: Comment a line
ansible.builtin.debug:
msg: "{{ 'MaxConnections 100' | ansible.builtin.comment('#') }}"
|
|
Получение части пути, общей для путей из указанного списка. |
---
# ...
tasks:
- name: Find common path
ansible.builtin.debug:
msg: "{{ ['/etc/nginx/nginx.conf', '/etc/dev'] | ansible.builtin.commonpath }}"
|
|
Преобразование словаря в список пар типа ключ-значение. |
---
# ...
vars:
my_dict: {one: 1, two: 2}
tasks:
- name: Convert dict to items
ansible.builtin.debug:
msg: "{{ my_dict | ansible.builtin.dict2items }}"
|
|
Вычисление разницы между двумя списками. |
---
# ...
vars:
list1: [a, b, c]
list2: [b, c]
tasks:
- name: Show difference between lists
ansible.builtin.debug:
msg: "{{ list1 | ansible.builtin.difference(list2) }}"
|
|
Получение названия каталога из полного пути. |
---
# ...
tasks:
- name: Get directory from path
ansible.builtin.debug:
msg: "{{ '/var/log/syslog' | ansible.builtin.dirname }}"
|
|
Замена символа |
---
# ...
tasks:
- name: Expand tilde to home directory
ansible.builtin.debug:
msg: "{{ '~/.ssh/id_rsa' | ansible.builtin.expanduser }}"
|
|
Подстановка значений переменных окружения. |
---
# ...
tasks:
- name: Expand environment variable
ansible.builtin.debug:
msg: "{{ '$HOME/.ssh' | ansible.builtin.expandvars }}"
|
|
Извлечение значения по индексу или ключу из структуры. |
---
# ...
vars:
my_dict: {"key1": "value1", "key2": "value2"}
tasks:
- name: Extract value by key
ansible.builtin.debug:
msg: "{{ my_dict | ansible.builtin.extract('key2') }}"
|
|
Получение списка файлов, названия которых удовлетворяют указанному шаблону. |
---
# ...
tasks:
- name: List configuration files
ansible.builtin.debug:
msg: "{{ '/etc/nginx/*.conf' | ansible.builtin.fileglob }}"
|
|
Выравнивание вложенных списков до указанного значения. |
---
# ...
vars:
nested_list: [[1, 2], [3, 4]]
tasks:
- name: Flatten nested list
ansible.builtin.debug:
msg: "{{ nested_list | ansible.builtin.flatten }}"
|
|
Преобразование строки в формате JSON в словарь Ansible. |
---
# ...
vars:
json_data: '{"name": "admin", "role": "devops"}'
tasks:
- name: Parse JSON string
ansible.builtin.debug:
msg: "{{ json_data | ansible.builtin.from_json }}"
|
|
Преобразование строки в формате YAML в словарь Ansible. |
---
# ...
vars:
yaml_data: "name: admin\nrole: devops"
tasks:
- name: Parse YAML string
ansible.builtin.debug:
msg: "{{ yaml_data | ansible.builtin.from_yaml }}"
|
|
Преобразование строки с несколькими документами YAML в список словарей Ansible. |
---
# ...
vars:
multi_yaml: |
---
kind: Deployment
name: backend
---
kind: Service
name: backend-svc
tasks:
- name: Parse multi-document YAML
ansible.builtin.debug:
msg: "{{ multi_yaml | ansible.builtin.from_yaml_all }}"
|
|
Вычисление хеша данных по указанному алгоритму. |
---
# ...
tasks:
- name: Hash password with SHA256
ansible.builtin.debug:
msg: "{{ 'supersecret' | ansible.builtin.hash('sha256') }}"
|
|
Преобразование битов и байтов в удобочитаемый формат. |
---
# ...
tasks:
- name: Convert bytes to readable format
ansible.builtin.debug:
msg: "{{ 15728640 | ansible.builtin.human_readable }}"
|
|
Преобразование строки в удобочитаемом формате в число байтов. |
---
# ...
tasks:
- name: Convert human size to bytes
ansible.builtin.debug:
msg: "{{ '15 MB' | ansible.builtin.human_to_bytes }}"
|
|
Поиск пересечения элементов в списках. |
---
# ...
vars:
list1: ['nginx', 'postgres', 'redis']
list2: ['redis', 'mysql']
tasks:
- name: Find common packages
ansible.builtin.debug:
msg: "{{ list1 | ansible.builtin.intersect(list2) }}"
|
|
Преобразование списка пар типа ключ-значение в словарь. |
---
# ...
vars:
pairs:
- {'key': 'env', 'value': 'prod'}
- {'key': 'debug', 'value': false}
tasks:
- name: Convert pairs to dict
ansible.builtin.debug:
msg: "{{ pairs | ansible.builtin.items2dict }}"
|
|
Вычисление логарифма числа. |
---
# ...
tasks:
- name: Calculate natural log
ansible.builtin.debug:
msg: "{{ 100 | ansible.builtin.log }}"
|
|
Проверка, имеет ли переменная или выражение определенное значение. |
---
# ...
vars:
# the secret_token variable is not defined
tasks:
- name: Fail if secret_token is not set
ansible.builtin.debug:
msg: "{{ secret_token | ansible.builtin.mandatory }}"
|
|
Вычисление хеша данных по алгоритму MD5. |
---
# ...
tasks:
- name: Calculate MD5 hash of a string
ansible.builtin.debug:
msg: "{{ 'important_data' | ansible.builtin.md5 }}"
|
|
Нормализация пути к файлу или каталогу путем удаления лишних слешей и обработки переходов к вышестоящим каталогам. |
---
# ...
tasks:
- name: Normalize a path
ansible.builtin.debug:
msg: "{{ '/var/www/../index.html' | ansible.builtin.normpath }}"
|
|
Вычисление хеша пароля. |
---
# ...
vars:
plain_password: "MySecretPass123"
tasks:
- name: Generate password hash
ansible.builtin.debug:
msg: "{{ plain_password | ansible.builtin.password_hash('sha512') }}"
|
|
Объединение компонентов пути. |
---
# ...
vars:
parts:
- "/var"
- "log"
- "ansible"
tasks:
- name: Join path components
ansible.builtin.debug:
msg: "{{ parts | ansible.builtin.path_join }}"
|
|
Генерация всех перестановок элементов списка. |
---
# ...
vars:
my_list: [1, 2, 3]
tasks:
- name: Generate all permutations of a list
ansible.builtin.debug:
msg: "{{ my_list | ansible.builtin.permutations }}"
|
|
Возведение числа в степень. |
---
# ...
tasks:
- name: Calculate power of a number
ansible.builtin.debug:
msg: "{{ 5 | ansible.builtin.pow(3) }}" # 5 в кубе
|
|
Декартово произведение списков. |
---
# ...
vars:
list1: [1, 2]
list2: ['a', 'b']
tasks:
- name: Generate Cartesian product of two lists
ansible.builtin.debug:
msg: "{{ [list1, list2] | ansible.builtin.product }}"
|
|
Экранирование строки. |
---
# ...
vars:
unsafe_string: "some string with spaces & special$chars"
tasks:
- name: Escape string for safe usage
ansible.builtin.debug:
msg: "{{ unsafe_string | ansible.builtin.quote }}"
|
|
Выбор случайного числа или элемента. |
---
# ...
vars:
ports: [8080, 8081, 8082]
tasks:
- name: Choose random port from list
ansible.builtin.debug:
msg: "{{ ports | ansible.builtin.random }}"
|
|
Преобразование относительного пути в абсолютный. |
---
# ...
tasks:
- name: Convert relative path to absolute
ansible.builtin.debug:
msg: "{{ './configs/nginx.conf' | ansible.builtin.realpath }}"
|
|
Экранирование специальных символов в регулярных выражениях. |
---
# ...
vars:
user_input: "a+b*c?"
tasks:
- name: Escape regex special characters
ansible.builtin.debug:
msg: "{{ user_input | ansible.builtin.regex_escape }}"
|
|
Поиск всех совпадений по регулярному выражению. |
---
# ...
vars:
text: "error: fail at line 10; error: fail at line 25"
pattern: "error: [^;]+"
tasks:
- name: Find all error messages
ansible.builtin.debug:
msg: "{{ text | ansible.builtin.regex_findall(pattern) }}"
|
|
Замена фрагмента строки по регулярному выражению. |
---
# ...
vars:
path: "/home/user//folder///file.txt"
pattern: "/+"
replacement: "/"
tasks:
- name: Normalize path by replacing multiple slashes
ansible.builtin.debug:
msg: "{{ path | ansible.builtin.regex_replace(pattern, replacement) }}"
|
|
Поиск первого совпадения по регулярному выражению. |
---
# ...
vars:
text: "User: admin, Role: root"
pattern: "Role: (\\w+)"
tasks:
- name: Extract user role from string
ansible.builtin.debug:
msg: "{{ (text | ansible.builtin.regex_search(pattern)).groups()[0] }}"
|
|
Преобразование списка словарей в один словарь, где ключи берутся из одного из полей (членов) каждого словаря. |
---
# ...
vars:
users:
- id: 1
name: "alice"
- id: 2
name: "bob"
tasks:
- name: Rekey list of dicts by 'id'
ansible.builtin.debug:
msg: "{{ users | ansible.builtin.rekey_on_member('id') }}"
|
|
Преобразование абсолютного пути в относительный. |
---
# ...
vars:
start: "/home/user/project"
target: "/home/user/project/src/module/file.py"
tasks:
- name: Get relative path from start to target
ansible.builtin.debug:
msg: "{{ target | ansible.builtin.relpath(start) }}"
|
|
Извлечение корня из числа. |
---
# ...
tasks:
- name: Calculate square root of 16
ansible.builtin.debug:
msg: "{{ 16 | ansible.builtin.root(2) }}"
|
|
Вычисление хеша строки по алгоритму SHA-1. |
---
# ...
vars:
secret: "supersecret"
tasks:
- name: Compute SHA-1 hash
ansible.builtin.debug:
msg: "{{ secret | ansible.builtin.sha1 }}"
|
|
Перемешивание элементов списка. |
---
# ...
vars:
servers: ["node1", "node2", "node3"]
tasks:
- name: Shuffle list of servers
ansible.builtin.debug:
msg: "{{ servers | ansible.builtin.shuffle }}"
|
|
Преобразование строки в список с помощью разделителя. |
---
# ...
vars:
data: "one,two,three"
tasks:
- name: Split string by comma
ansible.builtin.debug:
msg: "{{ data | ansible.builtin.split(',') }}"
|
|
Разделение пути на название файла и расширение. |
---
# ...
vars:
filepath: "/tmp/archive.tar.gz"
tasks:
- name: Split file path into name and extension
ansible.builtin.debug:
msg: "{{ filepath | ansible.builtin.splitext }}"
|
|
Форматирование даты и времени по шаблону. |
---
# ...
vars:
timestamp: 1689993600
format: "%Y-%m-%d %H:%M:%S"
tasks:
- name: Format timestamp as readable date
ansible.builtin.debug:
msg: "{{ timestamp | ansible.builtin.strftime(format) }}"
|
|
Преобразование списка словарей с вложенными списками в пары, где каждая пара – это словарь и один из его подэлементов. |
---
# ...
vars:
servers:
- name: "server1"
ips:
- "10.0.0.1"
- "10.0.0.2"
- name: "server2"
ips:
- "10.0.1.1"
tasks:
- name: Loop over servers and their IPs
ansible.builtin.debug:
msg: "Server {{ item.0.name }} has IP {{ item.1 }}"
loop: "{{ servers | ansible.builtin.subelements('ips') }}"
|
|
Возврат элементов, уникальных для обоих списков. |
---
# ...
vars:
list_a: ["nginx", "mysql", "redis"]
list_b: ["mysql", "postgres", "redis"]
tasks:
- name: Find symmetric difference between two lists
ansible.builtin.debug:
msg: "{{ list_a | ansible.builtin.symmetric_difference(list_b) }}"
|
|
Условный тернарный оператор. |
---
# ...
vars:
is_enabled: true
tasks:
- name: Use ternary operator
ansible.builtin.debug:
msg: "{{ is_enabled | ansible.builtin.ternary('Enabled', 'Disabled') }}"
|
|
Преобразование строки в объект |
---
# ...
vars:
raw_date: "2024-01-15T14:00:00Z"
tasks:
- name: Convert to datetime object
ansible.builtin.debug:
msg: "{{ raw_date | ansible.builtin.to_datetime('%Y-%m-%dT%H:%M:%SZ') }}"
|
|
Преобразование переменной или структуры данных Ansible в строку формата JSON. |
---
# ...
vars:
user:
name: "admin"
role: "root"
tasks:
- name: Convert dict to JSON string
ansible.builtin.debug:
msg: "{{ user | ansible.builtin.to_json }}"
|
|
Преобразование переменной в удобочитаемый JSON. |
---
# ...
vars:
config:
app: "myapp"
version: 2
tasks:
- name: Pretty-print JSON
ansible.builtin.debug:
msg: "{{ config | ansible.builtin.to_nice_json }}"
|
|
Преобразование переменной в удобочитаемый YAML. |
---
# ...
vars:
data:
key: value
number: 123
tasks:
- name: Convert to pretty YAML
ansible.builtin.debug:
msg: "{{ data | ansible.builtin.to_nice_yaml }}"
|
|
Генерация UUID версии 5. |
---
# ...
tasks:
- name: Generate UUID
ansible.builtin.debug:
msg: "{{ '' | ansible.builtin.to_uuid }}"
|
|
Преобразование переменной в строку в формате YAML. |
---
# ...
vars:
list:
- apple
- banana
tasks:
- name: Convert list to YAML
ansible.builtin.debug:
msg: "{{ list | ansible.builtin.to_yaml }}"
|
|
Определение типа переменной. |
---
# ...
vars:
var: 42
tasks:
- name: Show variable type
ansible.builtin.debug:
msg: "{{ var | ansible.builtin.type_debug }}"
|
|
Объединение двух списков с удалением дубликатов. |
---
# ...
vars:
a: [1, 2, 3]
b: [3, 4]
tasks:
- name: Union of lists
ansible.builtin.debug:
msg: "{{ a | ansible.builtin.union(b) }}"
|
|
Удаление дубликатов из списка. |
---
# ...
vars:
values: [1, 2, 2, 3, 1]
tasks:
- name: Remove duplicates
ansible.builtin.debug:
msg: "{{ values | ansible.builtin.unique }}"
|
|
Расшифровка данных, зашифрованных с помощью Ansible Vault. |
---
# ...
vars:
secret: !vault |
$ANSIBLE_VAULT;1.1;AES256
...
tasks:
- name: Decrypt vault variable
ansible.builtin.debug:
msg: "{{ secret | ansible.builtin.unvault }}"
|
|
Декодирование строк URL. |
---
# ...
vars:
encoded: "name%3Dvalue%26id%3D42"
tasks:
- name: Decode URL
ansible.builtin.debug:
msg: "{{ encoded | ansible.builtin.urldecode }}"
|
|
Разделение URL на компоненты. |
---
# ...
vars:
full_url: "https://example.com:8080/path?query=value"
tasks:
- name: Split URL into parts
ansible.builtin.debug:
msg: "{{ full_url | ansible.builtin.urlsplit }}"
|
|
Шифрование данных с помощью Ansible Vault. |
---
# ...
vars:
secret: "my_secret_value"
tasks:
- name: Encrypt with vault
ansible.builtin.debug:
msg: "{{ secret | ansible.builtin.vault }}"
|
|
Получение названия файла из пути в ОС Windows. |
---
# ...
vars:
win_path: "C:\\Users\\Admin\\document.txt"
tasks:
- name: Get basename from Windows path
ansible.builtin.debug:
msg: "{{ win_path | ansible.builtin.win_basename }}"
|
|
Получение каталога из пути в ОС Windows. |
---
# ...
vars:
win_path: "D:\\Games\\Steam\\steam.exe"
tasks:
- name: Get dirname from Windows path
ansible.builtin.debug:
msg: "{{ win_path | ansible.builtin.win_dirname }}"
|
|
Разделение пути на диск и остальной путь в ОС Windows. |
---
# ...
vars:
win_path: "E:\\Data\\backup.zip"
tasks:
- name: Split Windows path into drive and path
ansible.builtin.debug:
msg: "{{ win_path | ansible.builtin.win_splitdrive }}"
|
|
Объединение элементов нескольких списков параллельно. |
---
# ...
vars:
keys: ["name", "age"]
values: ["Alice", 30]
tasks:
- name: Zip keys and values
ansible.builtin.debug:
msg: "{{ keys | ansible.builtin.zip(values) }}"
|
|
Объединение нескольких списков в список списков (кортежей) с совмещением элементов с одинаковыми индексами. |
---
# ...
vars:
x: ["a", "b"]
y: [1]
tasks:
- name: Zip longest lists
ansible.builtin.debug:
msg: "{{ x | ansible.builtin.zip_longest(y, fillvalue='N/A') }}"
|
Инвентарь#
Расширение |
Описание |
Пример |
|---|---|---|
Обработка шаблонов узлов с диапазонами. |
---
# ...
hosts: all[1:3]
tasks:
- ansible.builtin.debug:
msg: "Running on {{ inventory_hostname }}"
|
|
Автоматическое определение расширения инвентаря. |
[defaults]
inventory = auto_inventory.yaml
|
|
Динамическое формирование групп узлов и переменных узлов с помощью выражений Jinja2 на основе уже существующих описаний инвентаря. |
---
# ...
plugin: ansible.builtin.constructed
strict: false
groups:
alse: ansible_facts['os_family'] == "Astra Linux"
|
|
Создание узлов и групп узлов на основе шаблонов с использованием Jinja2 и файла конфигурации в формате YAML. |
---
# ...
plugin: ansible.builtin.generator
hosts:
count: 3
name: "vm{{ item }}"
loop_control:
loop_var: item
|
|
Указание списка узлов в виде строки, разделенной запятыми. |
---
- name: Example using host_list
hosts: server1,server2
gather_facts: no
tasks:
- name: Check availability
ansible.builtin.ping:
# ...
|
|
Использование файла инвентаря в формате INI. |
[web]
server1
server2 ansible_host=10.1.1.2
|
|
Использование внешнего сценария в качестве источника инвентаря. |
#!/bin/bash
echo '{
"web": {
"hosts": ["server1", "server2"]
}
}'
|
|
Использование файла инвентаря в формате TOML. |
[web]
hosts = ["host1", "host2"]
|
|
Использование файла инвентаря в формате YAML. |
---
all:
children:
web:
hosts:
host1:
host2:
|
Поиск#
Расширение |
Описание |
Пример |
|---|---|---|
Получение действующих настроек Ansible. |
---
# ...
tasks:
- name: Show default config value
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.config', 'DEFAULT_TIMEOUT') }}"
|
|
Чтение данных из файла в формате CSV или TSV. |
---
# ...
vars:
user_data: "{{ lookup('ansible.builtin.csvfile', 'users.csv') }}"
tasks:
- name: Show user data
ansible.builtin.debug:
msg: "{{ user_data }}"
|
|
Преобразование словаря в список элементов типа ключ-значение. |
---
# ...
vars:
my_dict: { "a": 1, "b": 2 }
tasks:
- name: Loop over dict
ansible.builtin.debug:
msg: "{{ item.key }} => {{ item.value }}"
loop: "{{ lookup('ansible.builtin.dict', my_dict) }}"
|
|
Чтение значения переменной окружения. |
---
# ...
tasks:
- name: Show environment variable
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.env', 'HOME') }}"
|
|
Чтение содержимого файла. |
---
# ...
tasks:
- name: Read config file
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.file', 'config.txt') }}"
|
|
Возврат списка файлов, соответствующих шаблону. |
---
# ...
tasks:
- name: List files
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.fileglob', '*.conf', wantlist=True) }}"
|
|
Возврат первого найденного файла из списка в соответствии с заданным списком путей или шаблонов. |
---
# ...
vars:
params:
files:
- settings.yml
- default.yml
tasks:
- name: Load config
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.first_found', params) }}"
|
|
Возврат списка элементов с их индексами. |
---
# ...
vars:
mylist: ["alpha", "beta"]
tasks:
- name: Show indexed items
ansible.builtin.debug:
msg: "{{ item.0 }}: {{ item.1 }}"
loop: "{{ lookup('ansible.builtin.indexed_items', mylist) }}"
|
|
Чтение данных из файла в формате INI. |
---
# ...
tasks:
- name: Read setting from INI
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.ini', 'my_key', file='settings.ini', section='my_section') }}"
|
|
Получение списка узлов из инвентаря по шаблону. |
---
# ...
tasks:
- name: Get web hosts
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.inventory_hostnames', 'web') }}"
|
|
Перечисление элементов списка. |
---
# ...
vars:
servers: ['srv1', 'srv2']
tasks:
- name: Iterate over items
ansible.builtin.debug:
msg: "{{ item }}"
loop: "{{ lookup('ansible.builtin.items', servers) }}"
|
|
Разбиение текста на строки. |
---
# ...
vars:
raw_output: |
line1
line2
tasks:
- name: Print lines
ansible.builtin.debug:
msg: "{{ item }}"
loop: "{{ lookup('ansible.builtin.lines', raw_output) }}"
|
|
Преобразование значения в список. |
---
# ...
vars:
csv_string: "a,b,c"
tasks:
- name: Convert to list
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.list', csv_string.split(',')) }}"
|
|
Формирование вложенных пар из нескольких списков. |
---
# ...
vars:
x: [1, 2]
y: ['a', 'b']
tasks:
- name: Show combinations
ansible.builtin.debug:
msg: "{{ item }}"
loop: "{{ lookup('ansible.builtin.nested', x, y) }}"
|
|
Генерация и сохранение пароля в файл или возврат ранее сгенерированного пароля, если файл уже существует. |
---
# ...
tasks:
- name: Generate password
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.password', '/tmp/secret.txt', length=8) }}"
|
|
Возврат результата выполнения команды. |
---
# ...
tasks:
- name: Get current user
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.pipe', 'whoami') }}"
|
|
Выбор случайного значения из списка. |
---
# ...
vars:
servers: ['srv1', 'srv2', 'srv3']
tasks:
- name: Pick random server
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.random_choice', servers) }}"
|
|
Генерация числовой последовательности. |
---
# ...
tasks:
- name: Show numbers
ansible.builtin.debug:
msg: "{{ item }}"
loop: "{{ lookup('ansible.builtin.sequence', start=1, end=3) }}"
|
|
Объединение родительских и вложенных элементов. |
---
# ...
vars:
users:
- name: alice
groups: ['admin', 'dev']
tasks:
- name: Show subelements
ansible.builtin.debug:
msg: "{{ item }}"
loop: "{{ lookup('ansible.builtin.subelements', users, 'groups') }}"
|
|
Рендеринг шаблона Jinja2 из файла. |
---
# ...
tasks:
- name: Render Jinja2 template
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.template', 'mytemplate.j2') }}"
|
|
Группировка нескольких списков по элементам. |
---
# ...
vars:
a: [1, 2]
b: ['x', 'y']
tasks:
- name: Show zipped lists
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.together', a, b) }}"
|
|
Расшифровка данных, зашифрованных с помощью Ansible Vault. |
---
# ...
tasks:
- name: Load secret data
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.unvault', 'secrets.yml') }}"
|
|
Загрузка содержимого по URL. |
---
# ...
tasks:
- name: Download content
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.url', 'https://example.com/data.txt') }}"
|
|
Получение списка переменных по шаблону названия. |
---
# ...
vars:
my_var_1: one
my_var_2: two
tasks:
- name: Find matching vars
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.varnames', 'my_var_*') }}"
|
|
Получение значения переменной по названию. |
---
# ...
vars:
user: "admin"
tasks:
- name: Access variable dynamically
ansible.builtin.debug:
msg: "{{ lookup('ansible.builtin.vars', 'user') }}"
|
Оболочки#
Расширение |
Описание |
Пример |
|---|---|---|
Выполнение команд в командной строке Windows. |
---
# ...
tasks:
- name: Run Windows command with cmd
ansible.builtin.win_command: "net use"
|
|
Выполнение команд в Windows PowerShell. |
---
# ...
tasks:
- name: Run PowerShell script
ansible.builtin.win_shell: |
Get-Service | Where-Object {$_.Status -eq "Running"}
|
|
Выполнение команд в |
---
# ...
tasks:
- name: Run shell command with /bin/sh
ansible.builtin.shell: |
echo "User: $(whoami)"
|
Стратегии#
Расширение |
Описание |
Пример |
|---|---|---|
Пошаговое выполнение задач с возможностью интерактивной отладки. |
[defaults]
strategy = debug
|
|
Параллельное выполнение задач на узлах без ожидания синхронизации. |
[defaults]
strategy = free
|
|
Последовательное выполнение всех задач на одном узле до перехода к следующему. |
[defaults]
strategy = host_pinned
|
|
Линейная стратегия с синхронным выполнением задач. |
[defaults]
strategy = linear
|
Тестирование#
Расширение |
Описание |
Пример |
|---|---|---|
Проверка, является ли путь абсолютным. |
---
# ...
vars:
my_path: "/etc/hosts"
tasks:
- name: Check if path is absolute
ansible.builtin.debug:
msg: "Absolute path"
when: my_path is ansible.builtin.abs
|
|
Проверка, что все элементы в списке истинные. |
---
# ...
vars:
services_status: [true, true, true]
tasks:
- name: All services are running
ansible.builtin.debug:
msg: "All good"
when: services_status is ansible.builtin.all
|
|
Проверка, что хотя бы один элемент в списке истинный. |
---
# ...
vars:
services_status: [false, false, true]
tasks:
- name: At least one service is up
ansible.builtin.debug:
msg: "Something is alive"
when: services_status is ansible.builtin.any
|
|
Проверка, изменило ли выполнение задачи состояние системы. |
---
# ...
tasks:
- name: Install package
package:
name: httpd
state: present
register: result
- name: Notify on change
ansible.builtin.debug:
msg: "Package was installed"
when: result is ansible.builtin.changed
|
|
Проверка наличия элемента в списке. |
---
# ...
vars:
user_groups: ['admins', 'wheel']
tasks:
- name: Is user in admins group?
ansible.builtin.debug:
msg: "Access granted"
when: user_groups is ansible.builtin.contains('admins')
|
|
Проверка, что путь указывает на существующий каталог. |
---
# ...
vars:
dir_path: "/var/log"
tasks:
- name: Clean directory
file:
path: "{{ dir_path }}"
state: absent
when: dir_path is ansible.builtin.directory
|
|
Проверка существования файла или каталога по указанному пути. |
---
# ...
vars:
config_path: "/etc/myapp/config.yml"
tasks:
- name: Config exists
ansible.builtin.debug:
msg: "Using existing config"
when: config_path is ansible.builtin.exists
|
|
Проверка, завершилась ли задача с ошибкой. |
---
# ...
tasks:
- name: Run a command that may fail
ansible.builtin.command: /bin/false
register: result
ignore_errors: true
- name: Notify if previous task failed
ansible.builtin.debug:
msg: "Previous task failed"
when: result is ansible.builtin.failed
|
|
Определение, является ли значение логически ложным. |
---
# ...
vars:
my_flag: false
tasks:
- name: Skip if flag is falsy
ansible.builtin.debug:
msg: "Nothing to do"
when: my_flag is ansible.builtin.falsy
|
|
Проверка, что путь указывает на файл. |
---
# ...
vars:
config_path: "/etc/app.conf"
tasks:
- name: Validate file
ansible.builtin.debug:
msg: "Valid file"
when: config_path is ansible.builtin.file
|
|
Проверка, завершена ли асинхронная задача. |
---
# ...
tasks:
- name: Wait for async result
async_status:
jid: "{{ job_result.ansible_job_id }}"
register: async_status_result
- name: Check if finished
ansible.builtin.debug:
msg: "Async task done"
when: async_status_result is ansible.builtin.finished
|
|
Проверка, что объект по пути является символической ссылкой. |
---
# ...
vars:
target_path: "/usr/bin/mytool"
tasks:
- name: Check if symlink
ansible.builtin.debug:
msg: "This is a symlink"
when: target_path is ansible.builtin.link
|
|
Проверка существования пути, включая символические ссылки. |
---
# ...
vars:
link_path: "/usr/local/bin/app"
tasks:
- name: Link exists
ansible.builtin.debug:
msg: "Valid symlink"
when: link_path is ansible.builtin.link_exists
|
|
Проверка соответствия строки регулярному выражению. |
---
# ...
vars:
my_email: "admin@example.com"
tasks:
- name: Validate email
ansible.builtin.debug:
msg: "Valid email"
when: my_email is ansible.builtin.match("^[\\w.-]+@[\\w.-]+\\.[a-zA-Z]{2,}$")
|
|
Проверка, что путь является точкой монтирования. |
---
# ...
vars:
mount_path: "/mnt/data"
tasks:
- name: Mounted check
ansible.builtin.debug:
msg: "Mount point OK"
when: mount_path is ansible.builtin.mount
|
|
Обнаружение значений |
---
# ...
vars:
result_value: "NaN"
tasks:
- name: Handle NaN
ansible.builtin.debug:
msg: "Not a number"
when: result_value is ansible.builtin.nan
|
|
Показывает, завершилась ли задача из-за проблем с доступностью узла. |
---
# ...
tasks:
- name: Try to ping host
ansible.builtin.ping:
register: result
ignore_unreachable: true
- name: Notify if host is unreachable
ansible.builtin.debug:
msg: "Host unreachable"
when: result is not ansible.builtin.reachable
|
|
Проверка строки на полное соответствие регулярному выражению. |
---
# ...
vars:
username: "admin_01"
tasks:
- name: Username matches pattern
ansible.builtin.debug:
msg: "Valid username"
when: username is ansible.builtin.regex("^[a-zA-Z0-9_]+$")
|
|
Проверка, указывают ли два пути на один и тот же файл. |
---
# ...
vars:
src: "/etc/hosts"
dst: "/private/etc/hosts"
tasks:
- name: Check file identity
ansible.builtin.debug:
msg: "Same file"
when: src is ansible.builtin.same_file(dst)
|
|
Проверка наличия совпадения строки с регулярным выражением. |
---
# ...
vars:
log_line: "ERROR: Disk full"
tasks:
- name: Error found in log
ansible.builtin.debug:
msg: "Disk issue detected"
when: log_line is ansible.builtin.search("disk", ignorecase=True)
|
|
Проверка, была ли задача пропущена. |
---
# ...
tasks:
- name: Run optional step
command: /usr/bin/false
when: false
register: maybe_skipped
ignore_errors: true
- name: Check if skipped
ansible.builtin.debug:
msg: "Task was skipped"
when: maybe_skipped is ansible.builtin.skipped
|
|
Проверка, была ли асинхронная задача запущена. |
---
# ...
tasks:
- name: Run an async job
ansible.builtin.command: /bin/sleep 5
async: 10
poll: 0
register: async_result
- name: Check if async job started
ansible.builtin.debug:
msg: "Async job started"
when: async_result is ansible.builtin.started
|
|
Проверка, входит ли один список в состав другого. |
---
# ...
vars:
required_roles: ['admin', 'user']
actual_roles: ['user', 'admin', 'devops']
tasks:
- name: All required roles present
ansible.builtin.debug:
msg: "Access granted"
when: required_roles is ansible.builtin.subset(actual_roles)
|
|
Проверка успешности выполнения задачи. |
---
# ...
tasks:
- name: Try command
command: /usr/bin/true
register: try_result
- name: Check success
ansible.builtin.debug:
msg: "Command succeeded"
when: try_result is ansible.builtin.success
|
|
Проверка, включает ли один список все элементы другого. |
---
# ...
vars:
config_set: ['a', 'b', 'c']
required: ['a', 'b']
tasks:
- name: Config covers requirements
ansible.builtin.debug:
msg: "Config is complete"
when: config_set is ansible.builtin.superset(required)
|
|
Проверка, является ли значение логически истинным. |
---
# ...
vars:
deploy_enabled: "yes"
tasks:
- name: Deploy is allowed
ansible.builtin.debug:
msg: "Proceeding with deployment"
when: deploy_enabled is ansible.builtin.truthy
|
|
Проверка, завершилась ли задача из-за полной недоступности узла. |
---
# ...
tasks:
- name: Node unreachable
ansible.builtin.debug:
msg: "Host is unreachable"
when: result is ansible.builtin.unreachable
|
|
Проверка, является ли строка корректным URI. |
---
# ...
vars:
endpoint: "urn:isbn:3250541540"
tasks:
- name: URI is valid
ansible.builtin.debug:
msg: "Valid resource reference"
when: endpoint is ansible.builtin.uri
|
|
Проверка, является ли строка корректным URL. |
---
# ...
vars:
endpoint: "https://api.example.com/v1/data"
tasks:
- name: Valid API URL
ansible.builtin.debug:
msg: "Ready to connect"
when: endpoint is ansible.builtin.url
|
|
Проверка, является ли строка корректным URN. |
---
# ...
vars:
identifier: "urn:isbn:0451450523"
tasks:
- name: Valid URN
ansible.builtin.debug:
msg: "URN recognized"
when: identifier is ansible.builtin.urn
|
|
Проверка, что строка зашифрована с помощью Ansible Vault. |
---
# ...
vars:
secret_data: "$ANSIBLE_VAULT;1.1;AES256..."
tasks:
- name: Encrypted string
ansible.builtin.debug:
msg: "This is vault data"
when: secret_data is ansible.builtin.vault_encrypted
|
|
Сравнение версии ПО. |
---
# ...
vars:
current_version: "2.5.1"
tasks:
- name: Version is sufficient
ansible.builtin.debug:
msg: "Version OK"
when: current_version is ansible.builtin.version('>=2.4')
|
Переменные#
Расширение |
Описание |
Пример |
|---|---|---|
Загрузка переменных из файлов в каталогах |
ansible.cfg:#[defaults]
yaml_valid_extensions = .yml, .yaml, .json
[vars_host_group_vars]
stage = all
group_vars/webservers.yml#app_port: 8080
playbook.yml#---
# ...
tasks:
- name: Show app port
ansible.builtin.debug:
msg: "App runs on port {{ app_port }}"
|