Значения по умолчанию для модулей
Если вы часто вызываете один и тот же модуль с одними и теми же аргументами, может быть полезно задать для этого модуля аргументы по умолчанию с помощью ключевого слова 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: {}
Примечание
Значения по умолчанию для модулей, заданные на уровне play (а также на уровне блока или задачи при использовании 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 }}'
Группы значений по умолчанию для модулей
Группы значений по умолчанию для модулей позволяют задавать общие параметры для связанных между собой групп модулей. Коллекции могут определять такие группы в файле 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
Теперь эту группу можно использовать в плейбуке следующим образом:
- hosts: localhost
module_defaults:
group/ns.coll.my_group:
option_name: option_value
tasks:
- ns.coll.sample_module:
- another.collection.another_module:
По историческим причинам и для обеспечения обратной совместимости существуют специальные группы:
Группа | Расширенная группа модулей |
|---|---|
aws | amazon.aws.aws and community.aws.aws |
azure | azure.azcollection.azure |
gcp | google.cloud.gcp |
k8s | community.kubernetes.k8s, community.general.k8s, community.kubevirt.k8s, community.okd.k8s, and kubernetes.core.k8s |
os | openstack.cloud.os |
acme | community.crypto.acme |
docker* | community.general.docker and community.docker.docker |
ovirt | ovirt.ovirt.ovirt and community.general.ovirt |
vmware | community.vmware.vmware |
- Обратитесь к документации коллекции или к её файлу meta/runtime.yml, чтобы узнать, какие плагины действий и модули входят в группу.
Используйте группы с 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*'
Дополнительную информацию о meta/runtime.yml, в том числе полный формат для action_groups, можно найти в разделе runtime.yml.
© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/playbook_guide/playbooks_module_defaults.html