Значения по умолчанию модулей
Если вы обнаружите, что неоднократно вызываете один и тот же модуль с одними и теми же аргументами, может быть полезно определить значения аргументов по умолчанию для данного модуля, используя атрибут module_defaults.
Вот базовый пример:
- hosts: localhost
module_defaults:
file:
owner: root
group: root
mode: 0755
tasks:
- file:
state: touch
path: /tmp/file1
- file:
state: touch
path: /tmp/file2
- file:
state: touch
path: /tmp/file3
Атрибут module_defaults можно использовать на уровне выполнения, блока и задачи. Любые аргументы модуля, явно указанные в задаче, переопределят любые установленные значения по умолчанию для этого аргумента модуля:
- block:
- debug:
msg: "a different message"
module_defaults:
debug:
msg: "a default message"
Также можно удалить все ранее установленные значения по умолчанию для модуля, указав пустой словарь:
- file:
state: touch
path: /tmp/file1
module_defaults:
file: {}
Примечание
Любые значения по умолчанию модуля, установленные на уровне выполнения (и на уровне блока/задачи при использовании include_role или import_role), будут применяться ко всем используемым ролям, что может привести к неожиданному поведению в роли.
Вот несколько более реалистичных примеров использования этой функции.
Взаимодействие с API, требующим аутентификации:
- hosts: localhost
module_defaults:
uri:
force_basic_auth: true
user: some_user
password: some_password
tasks:
- uri:
url: http://some.api.host/v1/whatever1
- uri:
url: http://some.api.host/v1/whatever2
- uri:
url: http://some.api.host/v1/whatever3
Установка региона AWS по умолчанию для определенных модулей, связанных с EC2:
- hosts: localhost
vars:
my_region: us-west-2
module_defaults:
ec2:
region: '{{ my_region }}'
ec2_instance_info:
region: '{{ my_region }}'
ec2_vpc_net_info:
region: '{{ my_region }}'
Группы значений по умолчанию модулей
Новое в версии 2.7.
Ansible 2.7 добавляет функцию предварительного просмотра для группировки модулей, которые используют общие наборы параметров. Это упрощает создание playbooks, активно использующих API-модули, такие как модули облачных сервисов.
| Группа | Назначение | Версия Ansible |
|---|---|---|
| aws | Amazon Web Services | 2.7 |
| azure | Azure | 2.7 |
| gcp | Google Cloud Platform | 2.7 |
| k8s | Kubernetes | 2.8 |
| os | OpenStack | 2.8 |
Используйте группы с module_defaults путем добавления префикса к имени группы group/ - например, group/aws
В playbook вы можете установить значения по умолчанию для целых групп модулей, например, установив общий регион AWS.
# example_play.yml
- hosts: localhost
module_defaults:
group/aws:
region: us-west-2
tasks:
- aws_s3_bucket_info:
# now the region is shared between both info modules
- ec2_ami_info:
filters:
name: 'RHEL*7.5*'
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.9/user_guide/playbooks_module_defaults.html