ホーム > Ansible Tower・AWX リファレンス
AnsibleのcopyモジュールをAWXと組み合わせて使用する方法を解説します。
copyモジュールでは、ファイルやディレクトリをコピーすることが可能です。
コマンドラインのAnsible、Towerでも同様に使用可能です。
copyモジュールについて
copyモジュールは、Linuxでの[cp]コマンドと似たような機能になります。
copyモジュールでよく使用するパラメータになります。
これらを組み合わせることで、様々な処理を行うことが可能です。
パラメータ | 選択肢/デフォルト | 機能 |
---|---|---|
backup | ・no← ・yes | [yes]の場合、上書きされるファイルのバックアップを取得する。 |
dest | 必須 | コピー先を指定する。 |
directory_mode | ディレクトリのパーミッションを指定する。 指定されていない場合はシステムのデフォルト値が使用される。 このパラメータは、新しく作成されるディレクトリにのみ適用され、既存ディレクトリには適用されない。 | |
force | ・no ・yes← | [no]の場合、内容が異なる場合のみ、処理が実行される。 [yes]の場合、常に処理が実行される。 |
group | グループを指定する。 | |
mode | ファイルのパーミッションを指定する。 | |
owner | 所有者を指定する。 | |
remote_src | ・no← ・yes | [no]の場合、コントロールノード→ターゲットノード間で処理を行う。 [yes]の場合、ターゲットノード→ターゲットノード間で処理を行う。 |
src | コピー元を指定する。 |
その他のパラメーターは公式をご覧ください。
AWXの各種定義
Ansible AWX での各種定義について記載しています。
テンプレート
今回実行するテンプレートの設定になります。
認証情報
今回使用する認証情報の設定になります。
インベントリー
今回使用するインベントリーの設定になります。
ファイルのコピー(コントロールノード→ターゲットノード)
下記の条件でコピーを行います。
・所有者:awx
・グループ:awx
・パーミッション:777
Ansibleのcopyモジュールは、通常(パラメータを指定しない)の場合、コントロールノードからターゲットノードへのコピーを行います。
Linuxにおける[cp]コマンドよりは、[rcp],[scp]に近いイメージです。
プレイブック
---
- hosts: all
gather_facts: False
tasks:
- name: ファイルのコピー
copy:
src: /home/workspace/test_file_01.txt
dest: /home/release/
owner: awx
group: awx
mode: 0777
[mode]パラメーターでパーミッションを指定する際、「644」や「777」と3桁で指定すると予期しない結果になるので注意が必要です。
先頭に「0」を付けて、「0644」、「0777」のように指定する必要があります。
また、引用符で囲み「’644’」、「’777’」のように記述しても問題ありません。
実行結果
Using /etc/ansible/ansible.cfg as config file
SSH password:
PLAY [all] *********************************************************************
TASK [ファイルのコピー] ****************************************************************
changed: [192.168.56.105] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "/home/release/test_file_01.txt", "gid": 1000, "group": "awx", "mode": "0777", "owner": "awx", "path": "/home/release/test_file_01.txt", "size": 0, "state": "file", "uid": 1000}
PLAY RECAP *********************************************************************
192.168.56.105 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
タスク「ファイルのコピー」の詳細情報になります。
{
"diff": {
"before": {
"path": "/home/release/test_file_01.txt",
"mode": "0664"
},
"after": {
"path": "/home/release/test_file_01.txt",
"mode": "0777"
}
},
"path": "/home/release/test_file_01.txt",
"changed": true,
"uid": 1000,
"gid": 1000,
"owner": "awx",
"group": "awx",
"mode": "0777",
"state": "file",
"size": 0,
"invocation": {
"module_args": {
"owner": "awx",
"group": "awx",
"mode": 511,
"dest": "/home/release/",
"_original_basename": "test_file_01.txt",
"recurse": false,
"state": "file",
"path": "/home/release/test_file_01.txt",
"force": false,
"follow": true,
"modification_time_format": "%Y%m%d%H%M.%S",
"access_time_format": "%Y%m%d%H%M.%S",
"_diff_peek": null,
"src": null,
"modification_time": null,
"access_time": null,
"seuser": null,
"serole": null,
"selevel": null,
"setype": null,
"attributes": null,
"content": null,
"backup": null,
"remote_src": null,
"regexp": null,
"delimiter": null,
"directory_mode": null,
"unsafe_writes": null
}
},
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/home/release/test_file_01.txt",
"_ansible_no_log": false
}
ディレクトリのコピー(コントロールノード→ターゲットノード)
下記の条件でコピーを行います。
・所有者:awx
・グループ:awx
・ディレクトリのパーミッション:777
コピー元のディレクトリが空の場合は、コピーが行われないので注意が必要です。
ジョブは「ok」となり、正常終了扱いですが、実際にはコピーされていません。
プレイブック
---
- hosts: all
gather_facts: False
tasks:
- name: ディレクトリのコピー
copy:
src: /home/workspace/test_dir_01
dest: /home/release
owner: awx
group: awx
directory_mode: '777'
実行結果
Using /etc/ansible/ansible.cfg as config file
SSH password:
PLAY [all] *********************************************************************
TASK [ディレクトリのコピー] **************************************************************
changed: [192.168.56.105] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "/home/release/test_dir_01/test_file_01.txt", "gid": 1000, "group": "awx", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0664", "owner": "awx", "size": 0, "src": "/home/awx/.ansible/tmp/ansible-tmp-1645690967.5846834-425-229254520218955/source", "state": "file", "uid": 1000}
PLAY RECAP *********************************************************************
192.168.56.105 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
タスク「ディレクトリのコピー」の詳細情報になります。
ディレクトリをコピーする際、ディレクトリ内のファイルも一緒にコピーされますが、パラメーターの指定が「directory_mode」のみの場合、ディレクトリのパーミッションのみ変更されます。
ファイルのパーミッションも同時に変更する場合は、下記のように「mode」も指定する必要があります。
- name: ディレクトリのコピー
copy:
src: /home/workspace/test_dir_01
dest: /home/release
owner: awx
group: awx
directory_mode: '777'
mode: 0644
{
"diff": [],
"dest": "/home/release/test_dir_01/test_file_01.txt",
"src": "/home/awx/.ansible/tmp/ansible-tmp-1645690967.5846834-425-229254520218955/source",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"changed": true,
"uid": 1000,
"gid": 1000,
"owner": "awx",
"group": "awx",
"mode": "0664",
"state": "file",
"size": 0,
"invocation": {
"module_args": {
"src": "/home/awx/.ansible/tmp/ansible-tmp-1645690967.5846834-425-229254520218955/source",
"dest": "/home/release/test_dir_01/test_file_01.txt",
"owner": "awx",
"group": "awx",
"directory_mode": "777",
"_original_basename": "test_dir_01/test_file_01.txt",
"follow": false,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"backup": false,
"force": true,
"content": null,
"validate": null,
"remote_src": null,
"local_follow": null,
"mode": null,
"seuser": null,
"serole": null,
"selevel": null,
"setype": null,
"attributes": null,
"regexp": null,
"delimiter": null,
"unsafe_writes": null
}
},
"_ansible_no_log": false
}
ファイルのコピー(ターゲットノードA→ターゲットノードA)
同一ターゲットノード内でのコピー、Linuxでの[cp]コマンド相当のコピー方法になります。
下記の条件でコピーを行います。
・所有者:awx
・グループ:awx
・ファイルのパーミッション:644
プレイブック
Linuxでのコマンドだと下記のコマンドを同時に実行するイメージになります。
cp -pv /home/release/test_dir_01/test_file_01.txt /home/release/test_dir_02
chown awx:awx /home/release/test_dir_02/test_file_01.txt
chmod 644 /home/release/test_dir_02/test_file_01.txt
---
- hosts: all
gather_facts: False
tasks:
- name: ファイルのコピー
copy:
src: /home/release/test_dir_01/test_file_01.txt
dest: /home/release/test_dir_02
owner: awx
group: awx
mode: 0644
remote_src: yes
実行結果
Using /etc/ansible/ansible.cfg as config file
SSH password:
PLAY [all] *********************************************************************
TASK [ファイルのコピー] ****************************************************************
changed: [192.168.56.105] => {"changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "/home/release/test_dir_02/test_file_01.txt", "gid": 1000, "group": "awx", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0644", "owner": "awx", "size": 0, "src": "/home/release/test_dir_01/test_file_01.txt", "state": "file", "uid": 1000}
PLAY RECAP *********************************************************************
192.168.56.105 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
タスク「ファイルのコピー」の詳細情報になります。
{
"dest": "/home/release/test_dir_02/test_file_01.txt",
"src": "/home/release/test_dir_01/test_file_01.txt",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"changed": true,
"uid": 1000,
"gid": 1000,
"owner": "awx",
"group": "awx",
"mode": "0644",
"state": "file",
"size": 0,
"invocation": {
"module_args": {
"src": "/home/release/test_dir_01/test_file_01.txt",
"dest": "/home/release/test_dir_02/test_file_01.txt",
"owner": "awx",
"group": "awx",
"mode": 420,
"remote_src": true,
"backup": false,
"force": true,
"follow": false,
"_original_basename": null,
"content": null,
"validate": null,
"directory_mode": null,
"local_follow": null,
"checksum": null,
"seuser": null,
"serole": null,
"selevel": null,
"setype": null,
"attributes": null,
"regexp": null,
"delimiter": null,
"unsafe_writes": null
}
},
"_ansible_no_log": false
}
ディレクトリのコピー(ターゲットノードA→ターゲットノードA)
同一ターゲットノード内でのコピー、Linuxでの[cp -rpv]コマンド相当のコピー方法になります。
下記の条件でコピーを行います。
・所有者:awx
・グループ:awx
プレイブック
ターゲットノード間のコピーでは、以下のパラメーターが正常に動作しませんでした。
サンプルのプレイブック上は、コメントアウトにしています。
---
- hosts: all
gather_facts: False
tasks:
- name: ディレクトリのコピー
copy:
src: /home/release/test_dir_01
dest: /home/release2
owner: awx
group: awx
# directory_mode: 0775
# mode: 0644
remote_src: yes
実行結果
Using /etc/ansible/ansible.cfg as config file
SSH password:
PLAY [all] *********************************************************************
TASK [ディレクトリのコピー] **************************************************************
changed: [192.168.56.105] => {"changed": true, "checksum": null, "dest": "/home/release2/test_dir_01", "gid": 1000, "group": "awx", "md5sum": null, "mode": "0777", "owner": "awx", "size": 30, "src": "/home/release/test_dir_01", "state": "directory", "uid": 1000}
PLAY RECAP *********************************************************************
192.168.56.105 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
タスク「ディレクトリのコピー」の詳細情報になります。
{
"dest": "/home/release2/test_dir_01",
"src": "/home/release/test_dir_01",
"md5sum": null,
"checksum": null,
"changed": true,
"uid": 1000,
"gid": 1000,
"owner": "awx",
"group": "awx",
"mode": "0777",
"state": "directory",
"size": 30,
"invocation": {
"module_args": {
"src": "/home/release/test_dir_01",
"dest": "/home/release2/test_dir_01",
"owner": "awx",
"group": "awx",
"remote_src": true,
"backup": false,
"force": true,
"follow": false,
"_original_basename": null,
"content": null,
"validate": null,
"directory_mode": null,
"local_follow": null,
"checksum": null,
"mode": null,
"seuser": null,
"serole": null,
"selevel": null,
"setype": null,
"attributes": null,
"regexp": null,
"delimiter": null,
"unsafe_writes": null
}
},
"_ansible_no_log": false
}
記事は以上になります。
copyモジュールを使用した各ノード間での、ファイル・ディレクトリのコピー方法を解説しました。
使用頻度も高いモジュールだと思いますので、しっかり覚えておきましょう。
コメント