【Ansible Tower/AWX】shellモジュールの使い方


この記事はプロモーションを含みます。

Ansible

ホーム > Ansible AWX・Tower リファレンス

Ansibleで、Linuxのコマンドを実行することが出来る「shell」モジュールの使用方法について解説します。

shellモジュールについて

shellモジュールは、Linuxのコマンド(pwdなど)を使用する際に使用します。

パラメーター

shellモジュールでよく使用されるパラメータになります。
これらを組み合わせることで、様々な処理を行うことが可能です。

パラメータ選択肢/デフォルト機能
chdirカレントディレクトリを変更しつつ、コマンドを実行します。
warn・no
yes←
[no]の場合、タスクの警告を表示しない。
[yes]の場合、タスクの警告を表示する。

その他のパラメーターは公式をご覧ください。

実行環境について

本記事の実行環境は「Ansible AWX」としています。
以下は、Ansible AWX での各種定義について記載しています。

テンプレート

今回実行するテンプレートの設定になります。

  • 名前:Module Shell Template
  • 説明:shellモジュール
  • ジョブタイプ:実行
  • インベントリー:Test Server Inventory
  • プロジェクト:秋拓プロジェクト
  • PLAYBOOK:shell.yml
  • 認証情報:awx
  • 詳細:1(Verbose)

認証情報

今回使用する認証情報の設定になります。

  • 名前:awx
  • 説明:awxユーザ
  • 認証情報タイプ:マシン
  • ユーザー名:awx
  • パスワード:「ユーザー名」に設定したユーザーに対応したパスワード

インベントリー

今回使用するインベントリーの設定になります。

  • 名前:Test Server Inventory
  • 説明:試験環境向けインベントリ

Linuxのコマンドを実行する

shellモジュールの最もシンプルな使い方である、Linuxのコマンドを実行する方法です。

プレイブック

「ls -l /home/awx/」コマンドを実行するサンプルです。

---
- hosts: all
  gather_facts: False
  tasks:

  - name: lsコマンドの実行
    shell: ls -l /home/awx/

実行結果

Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 
PLAY [all] *********************************************************************
TASK [lsコマンドの実行] ***************************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "ls -l /home/awx/", "delta": "0:00:00.003596", "end": "2022-09-23 13:55:19.105482", "rc": 0, "start": "2022-09-23 13:55:19.101886", "stderr": "", "stderr_lines": [], "stdout": "total 0\n-rw-r--r-- 1 awx awx 0 Jul  7 19:43 test.txt", "stdout_lines": ["total 0", "-rw-r--r-- 1 awx awx 0 Jul  7 19:43 test.txt"]}
PLAY RECAP *********************************************************************
192.168.56.105             : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

コマンドの実行結果を変数に格納する

registerモジュールを使用することで、コマンドの実行結果を変数に格納することが可能です。

プレイブック

「pwd」コマンドを実行し、その実行結果を変数[result]に格納するサンプルです。

---
- hosts: all
  gather_facts: False
  tasks:

  - name: コマンドの実行
    shell: pwd
    register: result

  - name: 変数の内容を表示
    debug:
      msg: "{{ result }}"

実行結果

Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 
PLAY [all] *********************************************************************
TASK [コマンドの実行] *****************************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "pwd", "delta": "0:00:00.003111", "end": "2022-09-24 02:31:57.443974", "rc": 0, "start": "2022-09-24 02:31:57.440863", "stderr": "", "stderr_lines": [], "stdout": "/home/awx", "stdout_lines": ["/home/awx"]}
TASK [変数の内容を表示] ****************************************************************
ok: [192.168.56.105] => {
    "msg": {
        "changed": true,
        "cmd": "pwd",
        "delta": "0:00:00.003111",
        "end": "2022-09-24 02:31:57.443974",
        "failed": false,
        "rc": 0,
        "start": "2022-09-24 02:31:57.440863",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "/home/awx",
        "stdout_lines": [
            "/home/awx"
        ]
    }
}
PLAY RECAP *********************************************************************
192.168.56.105             : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

コマンドの実行結果は様々な情報が格納されています。
単純なコマンドの実行結果を取得するには「変数名.stdout」と記述します。
サンプルの場合は「result.stdout」と記述することで、下記の pwdコマンドの実行結果を取得することが可能です。

取得例:/home/awx

カレントディレクトリを変更しつつコマンドを実行する

パラメーターの1つである「chdir」を使用することで、カレントディレクトリを変更しつつ、コマンドを実行することが可能です。

プレイブック

1回目の pwdは、カレントディレクトリを変更せず実行し、2回目はカレントディレクトリを変更しつつ実行するサンプルです。

---
- hosts: all
  gather_facts: False
  tasks:

  - name: コマンドの実行
    shell: pwd
    register: result

  - name: 実行結果の確認1
    debug:
      msg: "{{ result.stdout }}"

  - name: コマンドの実行
    shell: pwd
    args:
      chdir: /tmp/test/
    register: result

  - name: 実行結果の確認2
    debug:
      msg: "{{ result.stdout }}"

実行結果

サンプルの実行結果です。1回目はカレントディレクトリを変更していないため、被管理ホストに接続しているユーザーのホームディレクトリが実行結果として取得されています。
2回目の pwdでは、カレントディレクトリを変更しているので、指定したパスが実行結果として取得されています。

Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 
PLAY [all] *********************************************************************
TASK [コマンドの実行] *****************************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "pwd", "delta": "0:00:00.003210", "end": "2022-09-24 03:07:47.485832", "rc": 0, "start": "2022-09-24 03:07:47.482622", "stderr": "", "stderr_lines": [], "stdout": "/home/awx", "stdout_lines": ["/home/awx"]}
TASK [実行結果の確認①] ****************************************************************
ok: [192.168.56.105] => {
    "msg": "/home/awx"
}
TASK [コマンドの実行] *****************************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "pwd", "delta": "0:00:00.003034", "end": "2022-09-24 03:07:48.330286", "rc": 0, "start": "2022-09-24 03:07:48.327252", "stderr": "", "stderr_lines": [], "stdout": "/tmp/test", "stdout_lines": ["/tmp/test"]}
TASK [実行結果の確認②] ****************************************************************
ok: [192.168.56.105] => {
    "msg": "/tmp/test"
}
PLAY RECAP *********************************************************************
192.168.56.105             : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

タスクの警告を抑止する

タスク実行時に表示される警告を抑止する方法です。

Ansibleで、sudoコマンドを使用すると、以下のような警告が表示されます。
これは、sudoではなく、becomeディレクティブを使用して権限昇格をしなさいという意味です。

[WARNING]: Consider using ‘become’, ‘become_method’, and ‘become_user’ rather9than running sudo

プレイブック

sudoコマンドで権限昇格しつつ、pwdコマンドを実行するサンプルです。
その際に表示される警告は抑止しています。

---
- hosts: all
  gather_facts: False
  tasks:

  - name: コマンドの実行
    shell: sudo pwd
    args:
      warn: no

実行結果

実行結果に「warning」が表示されていないことが分かります。

Using /etc/ansible/ansible.cfg as config file
SSH password: 
BECOME password[defaults to SSH password]: 
PLAY [all] *********************************************************************
TASK [コマンドの実行] *****************************************************************
changed: [192.168.56.105] => {"changed": true, "cmd": "sudo pwd", "delta": "0:00:00.014755", "end": "2022-09-24 03:56:10.255236", "rc": 0, "start": "2022-09-24 03:56:10.240481", "stderr": "", "stderr_lines": [], "stdout": "/home/awx", "stdout_lines": ["/home/awx"]}
PLAY RECAP *********************************************************************
192.168.56.105             : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

コメント

タイトルとURLをコピーしました