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

- 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

Spec-Zone.ru

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