Параметры модулей по умолчанию
Если вы часто вызываете один и тот же модуль с одними и теми же аргументами, может быть полезно определить аргументы по умолчанию для этого конкретного модуля, используя атрибут 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 может использоваться на уровнях выполнения (play), блоков и задач. Любые аргументы модуля, явно указанные в задаче, переопределят любые установленные значения по умолчанию для этого аргумента модуля:
- 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 добавляет функцию предварительного статуса для группирования модулей, которые используют общие наборы параметров. Это упрощает создание 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 |
acme | ACME | 2.10 |
docker* | Docker | 2.10 |
ovirt | oVirt | 2.10 |
vmware | VMware | 2.10 |
- Модуль docker_stack не включён в группу параметров по умолчанию для
docker.
Используйте группы с module_defaults , добавив префикс имени группы group/ — например group/aws.
В playbook вы можете задать значения по умолчанию для целых групп модулей, например, задав общий регион 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–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.10/user_guide/playbooks_module_defaults.html