Ansible:copyモジュールについて(Ansible 2.9.6)

インフラサーバ

copy モジュールについて

copy モジュールを使用することで、Ansible マシンのローカルに存在するファイルやディレクトリを管理対象機器側へ転送することができます。

◆公式ドキュメント

ansible.builtin.copy – Copy files to remote locations — Ansible Documentation

主なパラメータ

パラメータ必須選択肢/デフォルト説明
srcAnsible マシン側のファイル/ディレクトリのパス
ディレクトリの場合:
・パスが”/”で終わる場合ディレクトリの中身のみ転送する
・パスの最後が”/”でない場合ディレクトリごと転送する
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

―――――――――――――

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