ホーム > 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
カレントディレクトリを変更しつつコマンドを実行する
パラメーターの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
タスクの警告を抑止する
タスク実行時に表示される警告を抑止する方法です。
プレイブック
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
コメント