モジュールのデフォルト

同じ引数で同じモジュールを繰り返し呼び出す場合は、module_defaults 属性を使用して、その特定のモジュールのデフォルト引数を定義すると便利です。

以下に基本的な例を示します。

  • hosts: localhost module_defaults:

    file:

    owner: root group: root mode: 0755

    tasks:
    • file:
      state: touch path: /tmp/file1
    • file:
      state: touch path: /tmp/file2
    • file:
      state: touch path: /tmp/file3

Module_defaults 属性は、プレイ、ブロック、およびタスクのレベルで使用できます。タスクに明示的に指定されているモジュール引数は、そのモジュール引数に対して確立されたデフォルトを上書きします。

  • block:
    • debug:
      msg: “a different message”
    module_defaults:
    debug:
    msg: “a default message”

空の dict を指定して、モジュールの以前に設定されたデフォルトを削除することもできます。

  • file:
    state: touch path: /tmp/file1
    module_defaults:
    file: {}

Note

プレイレベルで設定されるモジュールのデフォルト (include_role または import_role を使用する際のブロックまたはタスクのレベル) は、使用されるロールに適用されます。これにより、ロールで予期しない動作が発生する可能性があります。

この機能のより実用的なユースケースを以下に示します。

auth を必要とする API との対話

特定の EC2 関連のモジュールにデフォルトの AWS リージョンを設定します。

  • hosts: localhost vars:

    my_region: us-west-2

    module_defaults:
    ec2:

    region: ‘{{ my_region }}’

    ec2_instance_info:

    region: ‘{{ my_region }}’

    ec2_vpc_net_info:

    region: ‘{{ my_region }}’

モジュールのデフォルトグループ

New in version 2.7.

Ansible 2.7 は preview-status 機能を追加して、共通のパラメーターセットを共有するモジュールをグループ化します。これにより、 クラウドモジュールなどの API ベースのモジュールを多用して、Playbook を簡単に作成できます。

Group Purpose Ansible Version
aws Amazon Web Services 2.7
azure Azure 2.7
gcp Google Cloud Platform 2.7
k8s Kubernetes 2.8
os OpenStack 2.8

グループ名の前に group/ を追加して (例: group/aws)、module_defaults でグループを使用します。

Playbook では、一般的な AWS リージョンの設定など、モジュールのグループ全体にモジュールのデフォルトを設定できます。

# example_play.yml
- hosts: localhost
  module_defaults:
    group/aws:
      region: us-west-2
  tasks:
  - aws_s3_bucket_info:
  # now the region is shared between both info modules
  - ec2_ami_info:
      filters:
        name: 'RHEL*7.5*'