無能が苦悩したメモ

無能な著者が学んだことを忘れないための覚え書きです...

Ansible:copyモジュールについてメモ

*ansible 2.9.6での設定を想定しています

copyモジュールはコントロールノードのファイルをリモートホストへコピーするモジュールです。
srcでコピー元のファイル、destでコピー先を指定します。

---
- hosts: all
  tasks:
    - name: copied hello.txt
      copy: 
        src: hello.txt
        dest: /tmp/hello.txt


mode:ファイルの権限設定

modeオプションをつけることでコピー先のファイルの権限を設定できます。
modeオプションをつけない場合、コピー元のファイルと同じ権限でコピー先のファイルは作られます。

linuxのchmodコマンドのように8進数で権限を指定できます。ansibleに8進数として認識させるため「0644」のように先頭に0をつけるのがポイントです。先頭に0をつけないとansibleに10進数として認識されてしまい予期しない動作をする可能性があります。

---
- hosts: all
  tasks:
    - name: copied hello.txt
      copy: 
        src: hello.txt
        dest: /tmp/hello.txt
        mode: 0644


ちなみに、'644'のようにシングルクォートで囲んでもOKです。

---
- hosts: all
  tasks:
    - name: copied hello.txt
      copy: 
        src: hello.txt
        dest: /tmp/hello.txt
        mode: '644'


force:コピーする条件を指定

forceオプションでyesを指定すれば、コピー先に既にファイルが存在する場合、ファイルの中身を比較して差分がある場合はコピーを実施します。noを指定した場合、コピー先にファイルが存在しない場合にのみ、コピーを実施します。なお、forceオプションはデフォルトでyesが指定されています。

---
- hosts: all
  tasks:
    - name: copied hello.txt
      copy: 
        src: hello.txt
        dest: /tmp/hello.txt
        mode: 0644
        force: no


backup:コピー時にバックアップを取得

backupオプションでyesを指定すると、コピー先に既にファイルが存在する場合、そのファイルのバックアップを取得します。

バックアップはコピー先のファイルが存在するディレクトリと同じディレクトリに作成されます。バックアップのファイル名は「(元のファイル名).(タイムスタンプ)」となります。

下の例であればバックアップとして「/tmp/hello.txt.2020-12-31@12:00:11~」のようなファイルが作成されます。

---
- hosts: all
  tasks:
    - name: copied hello.txt
      copy: 
        src: hello.txt
        dest: /tmp/hello.txt
        mode: 0644
        backup: yes


remote_src:リモートホスト内でのファイルコピー

remote_srcオプションでyesを指定すると、リモートホスト内でファイルのコピーができます。
以下の例では、/tmp/hello.txtをコピーして/tmp/hello2.txtを作成します。

---
- hosts: all
  tasks:
    - name: copied hello.txt
      copy: 
        src: /tmp/hello.txt
        dest: /tmp/hello2.txt
        mode: 0644
        remote_src: yes