ansible.builtin.copy

copy 可以把檔案複製到連線的主機去。

目的地一定都是連線過去的那台主機,例如下面的例子就是把本地主機上的 README.md 複製到連線主機上的 /tmp/README.md

---
- name: Example for ansible.builtin.copy
  hosts: all

  tasks:
    - name: Copy local file to target
      copy:
        src: README.md
        dest: /tmp/README.md

那如果要複製連線主機上的檔案呢?那就要加上 remote_src: true

---
- name: Example for ansible.builtin.copy
  hosts: all

  tasks:
    - name: Copy file on target to target
      copy:
        remote_src: true
        src: /etc/os-release
        dest: /tmp/os-release

在複製時,來源可以直接使用文字,copy 會把文字作為檔案的內容。

---
- name: Example for ansible.builtin.copy
  hosts: all

  tasks:
    - name: Copy content to target
      copy:
        content: "Hello world!"
        dest: /tmp/README.md

如果連線主機上的檔案已經存在,可以使用 backup: true 來要求備份,檔案在備份後,檔名會是原來的檔名加上日期。 複製時,也可以指定擁有者、權限、SELinux 屬性等等。

---
- name: Example for ansible.builtin.copy
  hosts: all

  tasks:
    - name: Copy content to target
      ansible.builtin.copy:
        src: /srv/myfiles/foo.conf
        dest: /etc/foo.conf
        owner: foo
        group: foo
        mode: u+rw,g-wx,o-rwx
        backup: true

force 是一個需要特別說明的部份:

  • force 為 true 時,當連線主機上的檔案內容跟原始檔不相符時,就寫入。
  • force 為 false 時,當連線主機上沒有這檔案才寫入,如果已經有這檔案了,就不寫入。

ansible.builtin.copy 是最常被使用到的模組,請務必熟悉。

參考資料: