ターミナルで実行する通常のコマンドと同様に、一部のタスクでは、Ansibleがリモートノードで正常に実行するために特別な特権が必要になります。

Ansibleで特権昇格がどのように機能するかを理解して、適切なアクセス許可でタスクを実行できるようにすることが重要です。 デフォルトでは、タスクは接続ユーザーとして実行されます。これは、 root か、インベントリファイル内のリモートノードにSSHアクセスできる通常のユーザーのいずれかです。

sudoを必要とするコマンドなど、拡張された権限を持つコマンドを実行するには、becomeディレクティブをyesに設定してプレイに含める必要があります。 これは、そのプレイ内のすべてのタスクに有効なグローバル設定として、またはタスクごとに適用される個別の命令として実行できます。 sudoユーザーがリモートノード内でどのように設定されているかによっては、ユーザーのsudoパスワードも提供する必要がある場合があります。 次の例では、root権限を必要とするタスクであるaptキャッシュを更新します。

ansible-practiceディレクトリにplaybook-07.ymlという名前の新しいファイルを作成します。

  1. nano ~/ansible-practice/playbook-07.yml

次に、次の行を新しいプレイブックファイルに追加します。

〜/ ansible-practice / playbook-07.yml
---
- hosts: all
  become: yes
  tasks:
    - name: Update apt cache
      apt:
        update_cache: yes

完了したら、ファイルを保存して閉じます。

このプレイブックを実行するには、ansible-playbookコマンド内に-Kオプションを含める必要があります。 これにより、Ansibleは指定されたユーザーのsudoパスワードの入力を求めます。

  1. ansible-playbook -i inventory playbook-07.yml -u sammy -K

タスクやプレイの実行中に切り替えるユーザーを変更することもできます。 これを行うには、become_userディレクティブを切り替え先のリモートユーザーの名前に設定します。 これは、sudoに依存するプレイブックにいくつかのタスクがある場合に役立ちますが、通常のユーザーとして実行する必要のあるタスクもいくつかあります。

次の例では、このプレイのすべてのタスクがデフォルトでsudoで実行されることを定義しています。 これは、hosts定義の直後のプレイレベルで設定されます。 最初のタスクは、root特権を使用して/tmpにファイルを作成します。これは、デフォルトのbecame_user値であるためです。 ただし、最後のタスクは独自のbecome_userを定義します。

ansible-practiceディレクトリにplaybook-08.ymlという名前の新しいファイルを作成します。

  1. nano ~/ansible-practice/playbook-08.yml

次のコンテンツを新しいプレイブックファイルに追加します。

〜/ ansible-practice / playbook-08.yml
---
- hosts: all
  become: yes
  vars:
    user: "{{ ansible_env.USER }}"
  tasks:
    - name: Create root file
      file:
        path: /tmp/my_file_root
        state: touch

    - name: Create user file
      become_user: "{{ user }}"
      file:
        path: /tmp/my_file_{{ user }}
        state: touch

終了したら、ファイルを保存して閉じます。

ansible_env.USERファクトには、接続しているユーザーのユーザー名が含まれています。これは、-uオプションを指定してansible-playbookコマンドを実行するときに実行時に定義できます。 このガイド全体を通して、sammyとして接続しています。

  1. ansible-playbook -i inventory playbook-08.yml -u sammy -K
Output
BECOME password: PLAY [all] ********************************************************************************************** TASK [Gathering Facts] ********************************************************************************** ok: [203.0.113.10] TASK [Create root file] ********************************************************************************* changed: [203.0.113.10] TASK [Create user file] ********************************************************************************* changed: [203.0.113.10] PLAY RECAP ********************************************************************************************** 203.0.113.10 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

プレイブックの実行が終了したら、リモートノードにログオンして、/tmpにそれぞれ異なる所有権情報を持つ2つの新しいファイルが作成されたことを確認できます。

  1. ssh sammy@203.0.113.10
  1. ls -la /tmp/my_file*
Output
-rw-r--r-- 1 root root 0 Apr 14 13:19 /tmp/my_file_root -rw-r--r-- 1 sammy sudo 0 Apr 14 12:07 /tmp/my_file_sammy

Ansibleでの特権昇格の詳細については、公式ドキュメントを参照してください。