【Ansible學習】- 常用檔案操作模組之copy模組
阿新 • • 發佈:2018-12-22
簡介
copy
模組用於將本地或遠端機器上的檔案拷貝到遠端主機上。
模組引數
名稱 | 必選 | 預設值 | 可選值 | 備註 |
---|---|---|---|---|
backup | no | no | yes /no |
在覆蓋之前將原檔案備份,備份檔案包含時間資訊 |
content | no | 當用content代替src引數的時候,可以把文件的內容設定到特定的值 | ||
dest | yes | 目標絕對路徑。如果src 是一個目錄,dest 也必須是一個目錄。如果dest 是不存在的路徑,並且如果dest以/ 結尾或者src是目錄,則dest被建立。如果src 和dest 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
}
- 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
}
如果覺得有用,歡迎關注我的微信,有問題可以直接交流: