Chapter 29

フィルター

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

説明

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

演習問題

Q1. ユーザーアカウントを登録するプレイブックを作成してください。プレイブックは次の条件を満たしてください。

  • プレイブックファイル名は「 regist_account.yml 」にする。
  • パスワードは sha-512 形式に変換して登録すること。
  • ソルトは 0 ~ 65534 までの間のランダムな数字を使用すること。
  • パスワードの指定がない場合、パスワードは "defaultpassword" にすること。
  • 登録するアカウント
    • 1 件目
      ユーザー名 taro
      パスワード password@taro
    • 2 件目
      ユーザー名 jiro
    • 3 件目
      ユーザー名 hanako
      パスワード password@hanako
  • インベントリーファイルの内容
    hosts.yml
    ---
    all:
      hosts:
        marutamachi:
          ansible_host: 192.168.111.101
          ansible_user: vagrant
          ansible_password: vagrant
    
解答
regist_account.yml
---
- name: Example of filter usage
  hosts: all
  gather_facts: no

  tasks:
    - name: Register a user account for the password authentication method.
      ansible.builtin.user:
        name: "{{ item['name'] }}"
        password: "{{ item['password'] | default('defaultpassword') | password_hash('sha512', 65534 | random(seed=inventory_hostname) | string) }}"
      loop: "{{ accounts }}"
      vars:
        accounts:
          - name: taro
            password: password@taro
          - name: jiro
          - name: hanako
            password: password@hanako
      become: yes
y_mrok@ctrl:~/code/chap29$ ansible-playbook -i hosts.yml regist_account.yml 

PLAY [Example of filter usage] ***************************************************************************************************************

TASK [Register a user account for the password authentication method.] ***********************************************************************
changed: [marutamachi] => (item={'name': 'taro', 'password': 'password@taro'})
changed: [marutamachi] => (item={'name': 'jiro'})
changed: [marutamachi] => (item={'name': 'hanako', 'password': 'password@hanako'})

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

y_mrok@ctrl:~/code/chap29$ 

冪等性を確認

y_mrok@ctrl:~/code/chap29$ ansible-playbook -i hosts.yml regist_account.yml 

PLAY [Example of filter usage] ***************************************************************************************************************

TASK [Register a user account for the password authentication method.] ***********************************************************************
ok: [marutamachi] => (item={'name': 'taro', 'password': 'password@taro'})
ok: [marutamachi] => (item={'name': 'jiro'})
ok: [marutamachi] => (item={'name': 'hanako', 'password': 'password@hanako'})

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

y_mrok@ctrl:~/code/chap29$ 

Q2. 作成したアカウントで管理対象ノードに ssh 接続してください。。

解答
y_mrok@ctrl:~/code/chap29$ ssh 192.168.111.101 -l taro
Warning: Permanently added '192.168.111.101' (ECDSA) to the list of known hosts.
taro@192.168.111.101's password: 
[taro@marutamachi ~]$ logout
Connection to 192.168.111.101 closed.
y_mrok@ctrl:~/code/chap29$ ssh 192.168.111.101 -l jiro
Warning: Permanently added '192.168.111.101' (ECDSA) to the list of known hosts.
jiro@192.168.111.101's password: 
[jiro@marutamachi ~]$ logout
Connection to 192.168.111.101 closed.
y_mrok@ctrl:~/code/chap29$ ssh 192.168.111.101 -l hanako
Warning: Permanently added '192.168.111.101' (ECDSA) to the list of known hosts.
hanako@192.168.111.101's password: 
[hanako@marutamachi ~]$ logout
Connection to 192.168.111.101 closed.
y_mrok@ctrl:~/code/chap29$