copy モジュールについて
copy モジュールを使用することで、Ansible マシンのローカルに存在するファイルやディレクトリを管理対象機器側へ転送することができます。
主なパラメータ
パラメータ | 必須 | 選択肢/デフォルト | 説明 |
src | Ansible マシン側のファイル/ディレクトリのパス ディレクトリの場合: ・パスが”/”で終わる場合ディレクトリの中身のみ転送する ・パスの最後が”/”でない場合ディレクトリごと転送する | ||
dest | ● | 管理対象機器側の転送先のパス src がディレクトリの場合 dest もディレクトリとする | |
owner | 転送後のファイル/ディレクトリの所有ユーザ | ||
group | 転送後のファイル/ディレクトリの所有グループ | ||
mode | 転送後のファイル/ディレクトリの権限 例:“0664”、”u=rw,g=r,o=r” | ||
force | ・no ・yes ← | ・yes ⇒ dest が存在する場合、内容が異なれば src で置換 ・no ⇒ dest が存在しない場合のみ src を転送する |
使用例
作業環境
- CentOS 8.0
- Python 3.7.7
- Ansible 2.9.6
ファイルを転送する
- 転送元(Ansible側) → /root/test.txt
- 転送先(管理対象側) → /root/test/test-remote.txt
- 所有ユーザ、所有グループ、権限 → root, root, 0664
■ Playbook の例
- hosts: all
become: yes
tasks:
- name: Copy test.txt
copy:
src: /root/test.txt
dest: /root/test/test-remote.txt
owner: root
group: root
mode: 0664
■ Ansible 実行後の管理対象機器の /root/test ディレクトリ
# ls -l /root/test
total 4
-rw-rw-r-- 1 root root 20 Apr 17 08:18 test-remote.txt
エラー例
dest として指定したパス(ディレクトリ)が存在しない場合は以下のようにエラーになります。
# ansible-playbook -i hosts playbook.yml
PLAY [all] *******************************************************************************************************
TASK [Gathering Facts] *******************************************************************************************
ok: [localhost]
TASK [Copy test.txt] *********************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "checksum": "67b72e5c6901398bce436853b3cc445a057ac397", "msg": "Destination directory /root/test does not exist"}
PLAY RECAP *******************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
―――――――――――――