Chapter 20

import_tasks と include_tasks のまとめ

y_mrok
y_mrok
2021.10.17に更新

差異のまとめ

ansible.builtin.import_tasks モジュールと ansible.builtin.include_tasks モジュールを使用したタスクの差異のまとめ ( 比較 ) です。

ansible.builtin.import_tasks ansible.builtin.include_tasks
取り込むファイルをチェックするタイミング プレイブックを実行する前 タスクを実行するとき
指定したディレクティブの適用箇所 取り込むファイル内の各タスクに継承 ( 適用 ) される ansible.builtin.include_tasks モジュールを使用したタスク自体に適用される
become ディレクティブ 設定できる 設定できない
loop ディレクティブ 設定できない 設定できる
  • 「指定したディレクティブの適用箇所」の「ディレクティブ」は become ディレクティブと loop ディレクティブを除く。

ディレクティブの適用の差異

ansible.builtin.import_tasks モジュールと ansible.builtin.include_tasks モジュールのどちらにも設定できる when ディレクテティブを使用し、その適用の差異を確認します。

ansible.builtin.import_tasks モジュール

register-account3.yml
---
- name: Register a user account.
  hosts: all
  gather_facts: no

  vars:
    backup_path: /tmp/backup_files/
  vars_files:
    - accounts.yml

  tasks:
    - name: Back up your files.
      ansible.builtin.import_tasks:
        file: file-backup.yml
    - name: Register an account.
      ansible.builtin.import_tasks:
        file: regist-account.yml
      when: inventory_hostname == "imadegawa"
      become: yes
regist-account.yml
  ---
- name: Create a groups.
  ansible.builtin.group:
    name: "{{ item['group'] }}"
    state: present
  loop: "{{ accounts }}"

- name: Register a user accounts.
  ansible.builtin.user:
    name: "{{ item['name'] }}"
    group: "{{ item['group'] }}"
    password: "{{ item['passwd'] | password_hash('sha512' , 65534 | random(seed=inventory_hostname) | string) }}"
    state: present
  loop: "{{ accounts }}"

- name: The manager group will be granted administrative privileges.
  ansible.builtin.template:
    src: sudo.j2
    dest: "/etc/sudoers.d/{{ item['name'] }}"
    mode: 0440
    owner: root
    group: root
  loop: "{{ accounts }}"
  when: item['group'] == "manager"

実行ログです。 ansible.builtin.import_tasks に設定した when ディレクティブは、取り込むファイル内の各タスクに適用されます。

y_mrok@ctrl:~/code/exam11$ ansible-playbook -i hosts.yml register-account3.yml 

PLAY [Register a user account.] **********************************************************************************************************************

TASK [Create a backup directory.] ********************************************************************************************************************
changed: [marutamachi]
changed: [ebisugawa]

TASK [Back up the "/etc/passwd" file.] ***************************************************************************************************************
changed: [ebisugawa]
changed: [marutamachi]

TASK [Back up the "/etc/shadow" file.] ***************************************************************************************************************
changed: [ebisugawa]
changed: [marutamachi]

TASK [Create a groups.] ******************************************************************************************************************************
skipping: [marutamachi] => (item={'name': 'taro', 'passwd': 'taro-no-password', 'group': 'manager'}) 
skipping: [marutamachi] => (item={'name': 'jiro', 'passwd': 'jiro-no-password', 'group': 'employee'}) 
skipping: [marutamachi] => (item={'name': 'hanako', 'passwd': 'hanako-no-passwd', 'group': 'manager'}) 
skipping: [ebisugawa] => (item={'name': 'taro', 'passwd': 'taro-no-password', 'group': 'manager'}) 
skipping: [ebisugawa] => (item={'name': 'jiro', 'passwd': 'jiro-no-password', 'group': 'employee'}) 
skipping: [ebisugawa] => (item={'name': 'hanako', 'passwd': 'hanako-no-passwd', 'group': 'manager'}) 

TASK [Register a user accounts.] *********************************************************************************************************************
skipping: [marutamachi] => (item={'name': 'taro', 'passwd': 'taro-no-password', 'group': 'manager'}) 
skipping: [marutamachi] => (item={'name': 'jiro', 'passwd': 'jiro-no-password', 'group': 'employee'}) 
skipping: [marutamachi] => (item={'name': 'hanako', 'passwd': 'hanako-no-passwd', 'group': 'manager'}) 
skipping: [ebisugawa] => (item={'name': 'taro', 'passwd': 'taro-no-password', 'group': 'manager'}) 
skipping: [ebisugawa] => (item={'name': 'jiro', 'passwd': 'jiro-no-password', 'group': 'employee'}) 
skipping: [ebisugawa] => (item={'name': 'hanako', 'passwd': 'hanako-no-passwd', 'group': 'manager'}) 

TASK [The manager group will be granted administrative privileges.] **********************************************************************************
skipping: [marutamachi] => (item={'name': 'taro', 'passwd': 'taro-no-password', 'group': 'manager'}) 
skipping: [marutamachi] => (item={'name': 'jiro', 'passwd': 'jiro-no-password', 'group': 'employee'}) 
skipping: [marutamachi] => (item={'name': 'hanako', 'passwd': 'hanako-no-passwd', 'group': 'manager'}) 
skipping: [ebisugawa] => (item={'name': 'taro', 'passwd': 'taro-no-password', 'group': 'manager'}) 
skipping: [ebisugawa] => (item={'name': 'jiro', 'passwd': 'jiro-no-password', 'group': 'employee'}) 
skipping: [ebisugawa] => (item={'name': 'hanako', 'passwd': 'hanako-no-passwd', 'group': 'manager'}) 

PLAY RECAP *******************************************************************************************************************************************
ebisugawa                  : ok=3    changed=3    unreachable=0    failed=0    skipped=3    rescued=0    ignored=0   
marutamachi                : ok=3    changed=3    unreachable=0    failed=0    skipped=3    rescued=0    ignored=0   

y_mrok@ctrl:~/code/exam11$ 

ansible.builtin.include_tasks モジュール

register-account4.yml
---
- name: Register a user account.
  hosts: all
  gather_facts: no

  vars:
    backup_path: /tmp/backup_files/
  vars_files:
    - accounts.yml

  tasks:
    - name: Back up your files.
      ansible.builtin.include_tasks:
        file: file-backup.yml
    - name: Register an account.
      ansible.builtin.include_tasks:
        file: regist-account1.yml
      loop: "{{ accounts }}"
      when: inventory_hostname == "imadegawa"
regist-account1.yml
---
- name: Create a groups.
  ansible.builtin.group:
    name: "{{ item['group'] }}"
    state: present
  become: yes

- name: Register a user accounts.
  ansible.builtin.user:
    name: "{{ item['name'] }}"
    group: "{{ item['group'] }}"
    password: "{{ item['passwd'] | password_hash('sha512' , 65534 | random(seed=inventory_hostname) | string) }}"
    state: present
  become: yes

- name: The manager group will be granted administrative privileges.
  ansible.builtin.template:
    src: sudo.j2
    dest: "/etc/sudoers.d/{{ item['name'] }}"
    mode: 0440
    owner: root
    group: root
  when: item['group'] == "manager"
  become: yes

実行ログです。 when ディレクティブは ansible.builtin.include_tasks 自体に適用されます。

y_mrok@ctrl:~/code/exam11$ ansible-playbook -i hosts.yml register-account4.yml 

PLAY [Register a user account.] **********************************************************************************************************************

TASK [Back up your files.] ***************************************************************************************************************************
included: /home/y_mrok/code/exam11/file-backup.yml for marutamachi, ebisugawa

TASK [Create a backup directory.] ********************************************************************************************************************
changed: [marutamachi]
changed: [ebisugawa]

TASK [Back up the "/etc/passwd" file.] ***************************************************************************************************************
changed: [ebisugawa]
changed: [marutamachi]

TASK [Back up the "/etc/shadow" file.] ***************************************************************************************************************
changed: [marutamachi]
changed: [ebisugawa]

TASK [Register an account.] **************************************************************************************************************************
skipping: [marutamachi] => (item={'name': 'taro', 'passwd': 'taro-no-password', 'group': 'manager'}) 
skipping: [marutamachi] => (item={'name': 'jiro', 'passwd': 'jiro-no-password', 'group': 'employee'}) 
skipping: [ebisugawa] => (item={'name': 'taro', 'passwd': 'taro-no-password', 'group': 'manager'}) 
skipping: [marutamachi] => (item={'name': 'hanako', 'passwd': 'hanako-no-passwd', 'group': 'manager'}) 
skipping: [ebisugawa] => (item={'name': 'jiro', 'passwd': 'jiro-no-password', 'group': 'employee'}) 
skipping: [ebisugawa] => (item={'name': 'hanako', 'passwd': 'hanako-no-passwd', 'group': 'manager'}) 

PLAY RECAP *******************************************************************************************************************************************
ebisugawa                  : ok=4    changed=3    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
marutamachi                : ok=4    changed=3    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

y_mrok@ctrl:~/code/exam11$ 

演習問題

演習問題はこのリンクをクリックしてください。