Значения по умолчанию модулей
Если вы часто вызываете один и тот же модуль с одними и теми же аргументами, может быть полезно определить значения аргументов по умолчанию для этого конкретного модуля, используя ключевое слово module_defaults.
Вот базовый пример:
- hosts: localhost
module_defaults:
ansible.builtin.file:
owner: root
group: root
mode: 0755
tasks:
- name: Create file1
ansible.builtin.file:
state: touch
path: /tmp/file1
- name: Create file2
ansible.builtin.file:
state: touch
path: /tmp/file2
- name: Create file3
ansible.builtin.file:
state: touch
path: /tmp/file3
Ключевое слово module_defaults может использоваться на уровнях выполнения, блока и задачи. Любые аргументы модуля, явно указанные в задаче, переопределят любые установленные значения по умолчанию для этого аргумента модуля:
- block:
- name: Print a message
ansible.builtin.debug:
msg: "Different message"
module_defaults:
ansible.builtin.debug:
msg: "Default message"
Вы можете удалить ранее установленные значения по умолчанию для модуля, указав пустой словарь:
- name: Create file1
ansible.builtin.file:
state: touch
path: /tmp/file1
module_defaults:
file: {}
Примечание
Любые значения по умолчанию модулей, установленные на уровне выполнения (и на уровне блока/задачи при использовании include_role или import_role), будут применяться ко всем ролям, что может привести к непредсказуемому поведению в роли.
Вот несколько более реалистичных примеров использования этой функции.
Взаимодействие с API, требующим аутентификации:
- hosts: localhost
module_defaults:
ansible.builtin.uri:
force_basic_auth: true
user: some_user
password: some_password
tasks:
- name: Interact with a web service
ansible.builtin.uri:
url: http://some.api.host/v1/whatever1
- name: Interact with a web service
ansible.builtin.uri:
url: http://some.api.host/v1/whatever2
- name: Interact with a web service
ansible.builtin.uri:
url: http://some.api.host/v1/whatever3
Установка значения по умолчанию для региона AWS для конкретных модулей, связанных с EC2:
- hosts: localhost
vars:
my_region: us-west-2
module_defaults:
amazon.aws.ec2:
region: '{{ my_region }}'
community.aws.ec2_instance_info:
region: '{{ my_region }}'
amazon.aws.ec2_vpc_net_info:
region: '{{ my_region }}'
Группы значений по умолчанию модулей
Новая функция в версии 2.7.
Ansible 2.7 добавляет функцию предварительного просмотра для объединения модулей, которые используют общие наборы параметров. Это упрощает создание файлов сценариев, интенсивно использующих 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 |
acme | ACME | 2.10 |
docker* | Docker | 2.10 |
ovirt | oVirt | 2.10 |
vmware | VMware | 2.10 |
- Модуль docker_stack не включён в группу значений по умолчанию
docker.
Используйте группы с module_defaults, добавляя префикс имени группы group/ - например, group/aws.
В файле сценария вы можете установить значения по умолчанию для модулей целых групп, например, установив общий регион AWS.
# example_play.yml
- hosts: localhost
module_defaults:
group/aws:
region: us-west-2
tasks:
- name: Get info
aws_s3_bucket_info:
# now the region is shared between both info modules
- name: Get info
ec2_ami_info:
filters:
name: 'RHEL*7.5*'
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/user_guide/playbooks_module_defaults.html