Настройки модулей по умолчанию
Если вы часто вызываете один и тот же модуль с одними и теми же аргументами, может быть полезно определить аргументы по умолчанию для этого конкретного модуля, используя ключевое слово 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 добавляет функцию предварительного просмотра для группирования модулей, которые используют общие наборы параметров. Это упрощает создание 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*'
В ansible-core 2.12 коллекции могут определять свои собственные группы в файле meta/runtime.yml. module_defaults не учитывает ключевое слово collections, поэтому для новых групп в module_defaults необходимо использовать полное имя группы.
Вот пример runtime.yml файла для коллекции ns.coll. Этот файл определяет группу действий под именем ns.coll.my_group и помещает sample_module из ns.coll и another_module из another.collection в эту группу.
# collections/ansible_collections/ns/coll/meta/runtime.yml
action_groups:
my_group:
- sample_module
- another.collection.another_module
Теперь эту группу можно использовать в playbook так:
- hosts: localhost
module_defaults:
group/ns.coll.my_group:
option_name: option_value
tasks:
- ns.coll.sample_module:
- another.collection.another_module:
© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/user_guide/playbooks_module_defaults.html