1. 程式人生 > >【Ansible學習】- 常用檔案操作模組之copy模組

【Ansible學習】- 常用檔案操作模組之copy模組

簡介

  • copy模組用於將本地或遠端機器上的檔案拷貝到遠端主機上。

模組引數

名稱 必選 預設值 可選值 備註
backup no no yes/no 在覆蓋之前將原檔案備份,備份檔案包含時間資訊
content no 當用content代替src引數的時候,可以把文件的內容設定到特定的值
dest yes 目標絕對路徑。如果src是一個目錄,dest也必須是一個目錄。如果dest是不存在的路徑,並且如果dest以/結尾或者src是目錄,則dest被建立。如果srcdest
是檔案,如果dest的父目錄不存在,任務將失敗
follow no no yes/no 是否遵循目的機器中的檔案系統連結
force no yes yes/no 當內容不同於源時,將替換遠端檔案。設定為no,則只有在目標不存在的情況下才會傳輸檔案
group no 設定檔案/目錄的所屬組,將被饋送到chown
local_follow no yes yes/no 是否遵循本地機器中的檔案系統連結
mode no 設定檔案許可權,模式實際上是八進位制數字(如0644),少了前面的零可能會有意想不到的結果。從版本1.8開始,可以將模式指定為符號模式(例如u+rwx或u=rw,g=r,o=r)
owner no 設定檔案/目錄的所屬使用者,將被饋送到chown
remote_src(2.0+) no no yes/no 如果yes它會從目標機上搜索src檔案
src no 將本地路徑複製到遠端伺服器; 可以是絕對路徑或相對的。如果是一個目錄,它將被遞迴地複製。如果路徑以/結尾,則只有該目錄下內容被複制到目的地,如果沒有使用/來結尾,則包含目錄在內的整個內容全部複製
unsafe_writes no yes/no 是否以不安全的方式進行,可能導致資料損壞
validate no None 複製前是否檢驗需要複製目的地的路徑

示例

  • 拷貝前備份
[root@centos7 ~]# ansible test -m copy -a "src=test.sh backup=yes dest=/root"
172.20.21.121 | SUCCESS => {
    "backup_file": "/root/[email protected]:35:35~", 
    "changed": true, 
    "checksum": "e989084b3f4610a41811c5ea280b14f7c5e855f5", 
    "dest": "/root/test.sh", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "7c211ce4c7941a5bb064e77d69e3d9ff", 
    "mode": "0755", 
    "owner": "root", 
    "secontext": "unconfined_u:object_r:admin_home_t:s0", 
    "size": 23, 
    "src": "/root/.ansible/tmp/ansible-tmp-1515735334.86-21848883747071/source", 
    "state": "file", 
    "uid": 0
}
  • src和dest都是檔案,若dest的檔案的父目錄不存在將報錯
[root@centos7 ~]# ansible test -m copy -a "src=test.sh dest=/root/liuhao/test"
172.20.21.121 | FAILED! => {
    "changed": false, 
    "checksum": "e989084b3f4610a41811c5ea280b14f7c5e855f5", 
    "msg": "Destination directory /root/liuhao does not exist"
}
[root@centos7 ~]# ansible test -m copy -a "src=test.sh dest=/root/liuhao/"
172.20.21.121 | SUCCESS => {
    "changed": true, 
    "checksum": "e989084b3f4610a41811c5ea280b14f7c5e855f5", 
    "dest": "/root/liuhao/test.sh", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "7c211ce4c7941a5bb064e77d69e3d9ff", 
    "mode": "0644", 
    "owner": "root", 
    "secontext": "system_u:object_r:admin_home_t:s0", 
    "size": 23, 
    "src": "/root/.ansible/tmp/ansible-tmp-1515736119.26-238832413210409/source", 
    "state": "file", 
    "uid": 0
}
  • 設定檔案許可權
[root@centos7 ~]# ansible test -m copy -a "src=test.sh dest=/root dest=/tmp owner=liuhao group=liuhao mode=0644"
172.20.21.121 | SUCCESS => {
    "changed": true, 
    "checksum": "e989084b3f4610a41811c5ea280b14f7c5e855f5", 
    "dest": "/tmp/test.sh", 
    "gid": 1000, 
    "group": "liuhao", 
    "md5sum": "7c211ce4c7941a5bb064e77d69e3d9ff", 
    "mode": "0644", 
    "owner": "liuhao", 
    "secontext": "unconfined_u:object_r:admin_home_t:s0", 
    "size": 23, 
    "src": "/root/.ansible/tmp/ansible-tmp-1515735466.22-33633697447932/source", 
    "state": "file", 
    "uid": 1000
}

目標機器上的結果

  • content引數
[root@centos7 ~]# ansible test -m copy -a "content='liuhao \n test\n' dest=/root/liuhaotest"
172.20.21.121 | SUCCESS => {
    "changed": true, 
    "checksum": "bd3aa5bf19112271f30c07be425f9a5c08463568", 
    "dest": "/root/liuhaotest", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "7585dc638fd8e219c453c3b1330c7e14", 
    "mode": "0644", 
    "owner": "root", 
    "secontext": "system_u:object_r:admin_home_t:s0", 
    "size": 14, 
    "src": "/root/.ansible/tmp/ansible-tmp-1515735713.37-60072089981042/source", 
    "state": "file", 
    "uid": 0
}

content引數
- force引數

[root@centos7 ~]# ansible test -m copy -a "src=test.sh dest=/root/liuhaotest force=no"
172.20.21.121 | SUCCESS => {
    "changed": false, 
    "dest": "/root/liuhaotest", 
    "src": "/root/test.sh"
}
  • src是目錄時
    源目錄以/結尾,只拷貝了目錄下的內容:
[root@centos7 test]# ansible test -m copy -a "src=/root/test/ dest=/tmp/"
172.20.21.121 | SUCCESS => {
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/tmp/1", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "mode": "0644", 
    "owner": "root", 
    "secontext": "unconfined_u:object_r:admin_home_t:s0", 
    "size": 0, 
    "src": "/root/.ansible/tmp/ansible-tmp-1515736521.16-258766767883601/source", 
    "state": "file", 
    "uid": 0
}

只拷貝了目錄下的內容

源目錄未以/結尾,直接將src目錄本身拷貝到目的地:

[root@centos7 test]# ansible test -m copy -a "src=/root/test dest=/tmp/"
172.20.21.121 | SUCCESS => {
    "changed": true, 
    "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", 
    "dest": "/tmp/test/1", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d41d8cd98f00b204e9800998ecf8427e", 
    "mode": "0644", 
    "owner": "root", 
    "secontext": "unconfined_u:object_r:admin_home_t:s0", 
    "size": 0, 
    "src": "/root/.ansible/tmp/ansible-tmp-1515736532.2-82893359525841/source", 
    "state": "file", 
    "uid": 0
}

直接將src目錄本身拷貝到目的地

如果覺得有用,歡迎關注我的微信,有問題可以直接交流:

你的關注是對我最大的鼓勵!