Chapter 27

タグ#2

y_mrok
y_mrok
2021.10.24に更新
このチャプターの目次

説明

この章の説明はこのリンクをクリックしてください。

演習問題

プレイブック「 install_package.yml 」は Webmin と Apache をインストールします。

  • インベントリーファイルの内容
    hosts.yml
    ---
    all:
      hosts:
        marutamachi:
    
    group_vars/all.yml
    ---
    ansible_user: vagrant
    ansible_password: vagrant
    
    host_vas/marutamachi.yml
    ---
    ansible_host: 192.168.111.101
    
  • 変更対象のプレイブック
    install_package.yml
    ---
    - name: Install multiple packages.
      hosts: all
      gather_facts: no
      become: yes
    
      tasks:
        - name: Register a repository for Webmin.
          ansible.builtin.blockinfile:
            path: "/etc/yum.repos.d/webmin.repo"
            create: yes
            block: |
              [webmin]
              name=Webmin Repository
              baseurl=http://download.webmin.com/download/yum/
              gpgcheck=1
              enabled=1
              gpgkey=http://www.webmin.com/jcameron-key.asc
            state: present
        - name: Install the perl-Net-SSLeay module.
          ansible.builtin.dnf:
            name: perl-Net-SSLeay
            state: present
        - name: Install the Webmin module.
          ansible.builtin.dnf:
            name: webmin
            state: present
    
        - name: Install the httpd module.
          ansible.builtin.dnf:
            name: httpd
            state: present
        - name: Start httpd service.
          ansible.builtin.systemd:
            name: httpd.service
            state: started
    

Q1. プレイブック「 install_package.yml 」をタグを使用して Webmin だけ、Apache だけをインストールするよう変更してください。

  • Webmin と Apache をインストールする部分はそれぞれロールにします。
  • 作成したロールは ansible.builtin.import_role モジュールを使用して取り込みます。
解答
  • ディレクトリー「 host_vars/ 」と「 group_vars/ 」の内容 / 構成は変更しません(そのまま使用します)。
instal_package.yml
- name: Install multiple packages.
  hosts: all
  gather_facts: no

  tasks:
    - name: Install Webmin.
      ansible.builtin.import_role:
        name: install_webmin
      tags: webmin

    - name: Install Apache.
      ansible.builtin.import_role:
        name: install_apache
      tags: apache
roles/install_webmin/tasks/main.yml
---
- name: Register a repository for Webmin.
  ansible.builtin.blockinfile:
    path: "/etc/yum.repos.d/webmin.repo"
    create: yes
    block: |
      [webmin]
      name=Webmin Repository
      baseurl=http://download.webmin.com/download/yum/
      gpgcheck=1
      enabled=1
      gpgkey=http://www.webmin.com/jcameron-key.asc
    state: present
  become: yes
- name: Install the perl-Net-SSLeay module.
  ansible.builtin.dnf:
    name: perl-Net-SSLeay
    state: present
  become: yes
- name: Install the Webmin module.
  ansible.builtin.dnf:
    name: webmin
    state: present
  become: yes
roles/install_apache/tasks/main.yml
---
- name: Install the httpd module.
  ansible.builtin.dnf:
    name: httpd
    state: present
  become: yes
- name: Start httpd service.
  ansible.builtin.systemd:
    name: httpd.service
    state: started
  become: yes

タグ webmin を指定した実行ログ

y_mrok@ctrl:~/code/chap27$ ansible-playbook -i hosts.yml -t webmin install_package.yml 

PLAY [Install multiple packages.] ********************************************************************************************************************

TASK [install_webmin : Register a repository for Webmin.] ********************************************************************************************
changed: [marutamachi]

TASK [install_webmin : Install the perl-Net-SSLeay module.] ******************************************************************************************
changed: [marutamachi]

TASK [install_webmin : Install the Webmin module.] ***************************************************************************************************
changed: [marutamachi]

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

y_mrok@ctrl:~/code/chap27$ 

タグ apache を指定した実行ログ

y_mrok@ctrl:~/code/chap27$ ansible-playbook -i hosts.yml -t apache install_package.yml 

PLAY [Install multiple packages.] ********************************************************************************************************************

TASK [install_apache : Install the httpd module.] ****************************************************************************************************
changed: [marutamachi]

TASK [install_apache : Start httpd service.] *********************************************************************************************************
changed: [marutamachi]

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

y_mrok@ctrl:~/code/chap27$ 

冪等性を確認

y_mrok@ctrl:~/code/chap27$ ansible-playbook -i hosts.yml -t webmin install_package.yml 

PLAY [Install multiple packages.] ********************************************************************************************************************

TASK [install_webmin : Register a repository for Webmin.] ********************************************************************************************
ok: [marutamachi]

TASK [install_webmin : Install the perl-Net-SSLeay module.] ******************************************************************************************
ok: [marutamachi]

TASK [install_webmin : Install the Webmin module.] ***************************************************************************************************
ok: [marutamachi]

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

y_mrok@ctrl:~/code/chap27$ 
y_mrok@ctrl:~/code/chap27$ ansible-playbook -i hosts.yml -t apache install_package.yml 

PLAY [Install multiple packages.] ********************************************************************************************************************

TASK [install_apache : Install the httpd module.] ****************************************************************************************************
ok: [marutamachi]

TASK [install_apache : Start httpd service.] *********************************************************************************************************
ok: [marutamachi]

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

y_mrok@ctrl:~/code/chap27$ 

Q2. 「 Q1. 」の実行後、管理対象ノードで Webmin や Apache が動作していることを確認してください。

解答
  • Webmin
https://192.168.111.101:10000/
  • Apache
http://192.168.111.101/

Q3. プレイブック「 install_package.yml 」をタグを使用して Webmin だけ、Apache だけをインストールするよう変更してください。

  • Webmin と Apache をインストールする部分はそれぞれロールにします。
  • 作成したロールは ansible.builtin.include_role モジュールを使用して取り込みます。
解答
  • ディレクトリー「 host_vars/ 」と「 group_vars/ 」の内容 / 構成は変更しません(そのまま使用します)。
instal_package.yml
- name: Install multiple packages.
  hosts: all
  gather_facts: no

  tasks:
    - name: Install Webmin.
      ansible.builtin.include_role:
        name: install_webmin
      tags: webmin
    - name: Install Apache.
      ansible.builtin.include_role:
        name: install_apache
      tags: apache
roles/install_webmin/tasks/main.yml
---
- name: Register a repository for Webmin.
  ansible.builtin.blockinfile:
    path: "/etc/yum.repos.d/webmin.repo"
    create: yes
    block: |
      [webmin]
      name=Webmin Repository
      baseurl=http://download.webmin.com/download/yum/
      gpgcheck=1
      enabled=1
      gpgkey=http://www.webmin.com/jcameron-key.asc
    state: present
  become: yes
  tags: webmin
- name: Install the perl-Net-SSLeay module.
  ansible.builtin.dnf:
    name: perl-Net-SSLeay
    state: present
  become: yes
  tags: webmin
- name: Install the Webmin module.
  ansible.builtin.dnf:
    name: webmin
    state: present
  become: yes
  tags: webmin
roles/install_apache/tasks/main.yml
---
- name: Install the httpd module.
  ansible.builtin.dnf:
    name: httpd
    state: present
  become: yes
  tags: apache
- name: Start httpd service.
  ansible.builtin.systemd:
    name: httpd.service
    state: started
  become: yes
  tags: apache

タグ webmin を指定した実行ログ

y_mrok@ctrl:~/code/chap27$ ansible-playbook -i hosts.yml -t webmin install_package.yml 

PLAY [Install multiple packages.] ********************************************************************************************************************

TASK [Install Webmin.] *******************************************************************************************************************************

TASK [install_webmin : Register a repository for Webmin.] ********************************************************************************************
changed: [marutamachi]

TASK [install_webmin : Install the perl-Net-SSLeay module.] ******************************************************************************************
changed: [marutamachi]

TASK [install_webmin : Install the Webmin module.] ***************************************************************************************************
changed: [marutamachi]

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

y_mrok@ctrl:~/code/chap27$ 

タグ apache を指定した実行ログ

y_mrok@ctrl:~/code/chap27$ ansible-playbook -i hosts.yml -t apache install_package.yml 

PLAY [Install multiple packages.] ********************************************************************************************************************

TASK [Install Apache.] *******************************************************************************************************************************

TASK [install_apache : Install the httpd module.] ****************************************************************************************************
changed: [marutamachi]

TASK [install_apache : Start httpd service.] *********************************************************************************************************
changed: [marutamachi]

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

y_mrok@ctrl:~/code/chap27$ 

冪等性を確認

y_mrok@ctrl:~/code/chap27$ ansible-playbook -i hosts.yml -t webmin install_package.yml 

PLAY [Install multiple packages.] ********************************************************************************************************************

TASK [Install Webmin.] *******************************************************************************************************************************

TASK [install_webmin : Register a repository for Webmin.] ********************************************************************************************
ok: [marutamachi]

TASK [install_webmin : Install the perl-Net-SSLeay module.] ******************************************************************************************
ok: [marutamachi]

TASK [install_webmin : Install the Webmin module.] ***************************************************************************************************
ok: [marutamachi]

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

y_mrok@ctrl:~/code/chap27$ 
y_mrok@ctrl:~/code/chap27$ ansible-playbook -i hosts.yml -t apache install_package.yml 

PLAY [Install multiple packages.] ********************************************************************************************************************

TASK [Install Apache.] *******************************************************************************************************************************

TASK [install_apache : Install the httpd module.] ****************************************************************************************************
ok: [marutamachi]

TASK [install_apache : Start httpd service.] *********************************************************************************************************
ok: [marutamachi]

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

y_mrok@ctrl:~/code/chap27$ 

Q4. 「 Q3. 」の実行後、管理対象ノードで Webmin や Apache が動作していることを確認してください。

解答
  • Webmin
https://192.168.111.101:10000/
  • Apache
http://192.168.111.101/

Q5. 「 Q1. 」の「 tasks/main.yml 」ファイル内の各タスクにタグが不要で、「 Q3. 」の「 tasks/main.yml 」ファイル内の各タスクにタグが必要な理由を説明してください。

解答

Q1.
ansible.builtin.import_role モジュールを使用したタスクにタグを設定した場合、取り込まれるロールの「 tasks/main.yml 」ファイル内の各タスクに設定したタグを継承します。そのため、「 tasks/main.yml 」ファイル内の各タスクにタグが設定していなくても、設定しているのと同じ動作をします。

Q3.
ansible.builtin.include_role モジュールを使用したタスクにタグを設定した場合、タスク自体にタグが設定されます。取り込まれるロールの「 tasks/main.yml 」ファイル内の各タスクに設定したタグは継承されません。そのため、取り込まれるロールの「 tasks/main.yml 」ファイル内の各タスクにもタグが必要です。
取り込まれるロールの「 tasks/main.yml 」ファイル内の各タスクにもタグを設定しないと、下記の結果になります。

instal_package.yml
- name: Install multiple packages.
  hosts: all
  gather_facts: no

  tasks:
    - name: Install Webmin.
      ansible.builtin.include_role:
        name: install_webmin
      tags: webmin
    - name: Install Apache.
      ansible.builtin.include_role:
        name: install_apache
      tags: apache
roles/install_webmin/tasks/main.yml
---
- name: Register a repository for Webmin.
  ansible.builtin.blockinfile:
    path: "/etc/yum.repos.d/webmin.repo"
    create: yes
    block: |
      [webmin]
      name=Webmin Repository
      baseurl=http://download.webmin.com/download/yum/
      gpgcheck=1
      enabled=1
      gpgkey=http://www.webmin.com/jcameron-key.asc
    state: present
  become: yes
- name: Install the perl-Net-SSLeay module.
  ansible.builtin.dnf:
    name: perl-Net-SSLeay
    state: present
  become: yes
- name: Install the Webmin module.
  ansible.builtin.dnf:
    name: webmin
    state: present
  become: yes
roles/install_apache/tasks/main.yml
---
- name: Install the httpd module.
  ansible.builtin.dnf:
    name: httpd
    state: present
  become: yes
- name: Start httpd service.
  ansible.builtin.systemd:
    name: httpd.service
    state: started
  become: yes
y_mrok@ctrl:~/code/chap27$ ansible-playbook -i hosts.yml -t webmin install_package.yml 

PLAY [Install multiple packages.] ********************************************************************************************************************

TASK [Install Webmin.] *******************************************************************************************************************************

PLAY RECAP *******************************************************************************************************************************************

y_mrok@ctrl:~/code/chap27$ 
y_mrok@ctrl:~/code/chap27$ ansible-playbook -i hosts.yml -t apache install_package.yml 

PLAY [Install multiple packages.] ********************************************************************************************************************

TASK [Install Apache.] *******************************************************************************************************************************

PLAY RECAP *******************************************************************************************************************************************

y_mrok@ctrl:~/code/chap27$