Spec-Zone.ru › Ansible

Значения по умолчанию для модулей

Если вы часто вызываете один и тот же модуль с одними и теми же аргументами, может быть полезно задать для этого модуля аргументы по умолчанию с помощью ключевого слова 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API