ansible文件模塊使用
1、 文件組裝模塊-assemble
assemble主要是將多份配置文件組裝為一份配置文件。
參數 |
必填 |
默認 |
選項 |
說明 |
否 |
No |
Yes/no |
是否創建備份文件,使用時間戳 |
|
Delimiter |
否 |
|
|
配置文件內容之間的分隔符 |
Dest |
是 |
|
|
目的文件用來連接所有的源文件 |
Follow |
否 |
No |
Yes/no |
表示文件系統的鏈接,如果存在,應該follow |
Group |
否 |
|
|
文件所屬組,相當於chown |
Mode |
否 |
|
|
文件屬性,0644,記住保留前面的0 |
Owner |
否 |
|
|
文件所屬用戶 |
Regexp |
否 |
|
|
組裝的時候是否匹配相關的文件進行組合 |
Remote_src |
否 |
True |
True/False |
False表示src文件在本機上,True表示src在遠程主機上 |
Src |
是 |
|
|
已經存在的目錄文件 |
1.1 將本機上的配置文件組裝發送到遠程主機
[root@ansibleserver kel]# ansible pythonserver -m assemble -a "src=/root/kel/ dest=/tmp/kel.conf remote_src=False" SSH password: 192.168.1.60 | success >> { "changed": true, "dest": "/tmp/kel.conf", "gid": 0, "group": "root", "md5sum": "23245453347840c2aa288bcc274bc298", "mode": "0600", "owner": "root", "size": 32, "src": "/root/.ansible/tmp/ansible-tmp-1453144282.9-4482221307096/src", "state": "file", "uid": 0 } |
在本機目錄/root/kel的文件進行組裝,發送到遠程配置文件/tmp/kel.conf中,在此注意參數remote_src為False表示組裝本機的配置文件
如果在本機目錄中不存在文件,那么將會顯示python代碼和亂碼
1.2 使用分隔符
[root@ansibleserver kel]# ansible pythonserver -m assemble -a "src=/root/kel/ dest=/tmp/kel.conf remote_src=False delimiter='####'" SSH password: 192.168.1.60 | success >> { "changed": true, "dest": "/tmp/kel.conf", "gid": 0, "group": "root", "md5sum": "b46dcc49d69688a6be5bfd5b82737c0c", "mode": "0600", "owner": "root", "size": 42, "src": "/root/.ansible/tmp/ansible-tmp-1453144492.01-279709420329993/src", "state": "file", "uid": 0 } |
使用分隔符進行分割每個配置文件的內容,分隔符參數為delimiter
2、 文件復制模塊-copy
copy模塊是將本機中的文件復制到遠程主機當中,fetch模塊是將遠程主機中的內容復制到本機中,如果在復制文件的過程當中需要使用變量,那么就使用template模塊
參數 |
必填 |
默認 |
選項 |
說明 |
Backup |
否 |
No |
Yes/no |
是否創建備份文件,使用時間戳 |
Content |
否 |
|
|
當使用content替代src的時候,可以把文檔中內容設定為特定值 |
Dest |
是 |
|
|
文件復制的目的地 |
Follow |
否 |
No |
Yes/no |
表示文件系統的鏈接,如果存在,應該follow |
Group |
否 |
|
|
文件所屬組,相當於chown |
Mode |
否 |
|
|
文件屬性,0644,記住保留前面的0 |
Owner |
否 |
|
|
文件所屬用戶 |
Directory_mode |
否 |
|
|
設定目錄的權限,只有在新建的時候才會使用,不會影響已經存在的目錄 |
Remote_src |
否 |
True |
True/False |
False表示src文件在本機上,True表示src在遠程主機上 |
Src |
否 |
|
|
已經存在的目錄文件 |
Force |
否 |
No |
Yes/no |
是否覆蓋 |
Validate |
否 |
|
|
復制前是否需要檢驗復制的目的地 |
2.1 設定權限進行拷貝
[root@ansibleserver kel]# ansible pythonserver -m copy -a "src=/root/kel/1 dest=/tmp/kel owner=root group=root mode=0777" SSH password: 192.168.1.60 | success >> { "changed": true, "dest": "/tmp/kel", "gid": 0, "group": "root", "md5sum": "799e373c68e4b72dd2eb7ed715cfced9", "mode": "0777", "owner": "root", "size": 4, "src": "/root/.ansible/tmp/ansible-tmp-1453145233.73-276909183600356/source", "state": "file", "uid": 0 } |
設定了文件的權限,設定mode為0777,用戶和組均為root
2.2 拷貝的時候備份
[root@ansibleserver kel]# ansible pythonserver -m copy -a "src=/root/kel/1 dest=/tmp/kel owner=root group=root backup=yes" SSH password: 192.168.1.60 | success >> { "backup_file": "/tmp/kel.2016-01-18@14:34~", "changed": true, "dest": "/tmp/kel", "gid": 0, "group": "root", "md5sum": "a8cb3ba3ab8a8840e019c6b21521c483", "mode": "0777", "owner": "root", "size": 8, "src": "/root/.ansible/tmp/ansible-tmp-1453145701.59-117060156554446/source", "state": "file", "uid": 0 } |
備份的時候,只有在文件發生了變化的時候,那么會在遠程主機上進行備份,而不是在本機上進行備份源文件,備份的是遠程主機上被修改的文件
2.3 拷貝文件之后進行驗證
[root@ansibleserver kel]# ansible pythonserver -m copy -a "src=/etc/sudoers dest=/tmp/2 validate='visudo -cf %s'" SSH password: 192.168.1.60 | success >> { "changed": true, "dest": "/tmp/2", "gid": 0, "group": "root", "md5sum": "4093e52552d97099d003c645f15f9372", "mode": "0644", "owner": "root", "size": 3797, "src": "/root/.ansible/tmp/ansible-tmp-1453146150.33-246902811238377/source", "state": "file", "uid": 0 } |
拷貝之后進行驗證
3、 文件拉取模塊-fetch
文件拉取模塊主要是將遠程主機中的文件拷貝到本機中,和copy模塊的作用剛剛相反,並且在保存的時候使用hostname來進行保存,當文件不存在的時候,會出現錯誤,除非設置了選項fail_on_missing為yes
參數 |
必填 |
默認值 |
選項 |
說明 |
Dest |
Yes |
|
|
用來存放文件的目錄,例如存放目錄為backup,源文件名稱為/etc/profile在主機pythonserver中,那么保存為/backup/pythonserver/etc/profile |
Fail_on_missing |
No |
No |
Yes/no |
當源文件不存在的時候,標識為失敗 |
Flat |
No |
|
|
允許覆蓋默認行為從hostname/path到/file的,如果dest以/結尾,它將使用源文件的基礎名稱 |
Src |
Yes |
|
|
在遠程拉取的文件,並且必須是一個file,不能是目錄 |
Validate_checksum |
No |
Yes |
Yes/no |
當文件fetch之后進行md5檢查 |
3.1 fetch一個文件進行保存
[root@ansibleserver ~]# ansible pythonserver -m fetch -a "src=/root/123 dest=/root" SSH password: 192.168.1.60 | success >> { "changed": true, "dest": "/root/192.168.1.60/root/123", "md5sum": "31be5a34915d52fe0a433d9278e99cac", "remote_md5sum": "31be5a34915d52fe0a433d9278e99cac" } |
src表示為遠程主機上需要傳送的文件路徑,dest表示為本機上的路徑,在傳送過來的文件,是按照IP地址進行分類,然后路徑是源文件的路徑
在拉取文件的時候,必須拉取的是文件,不能拉取文件夾
3.2 指定路徑目錄進行保存
[root@ansibleserver ~]# ansible pythonserver -m fetch -a "src=/root/Ssh.py dest=/root/kel/ flat=yes" SSH password: 192.168.1.60 | success >> { "changed": true, "dest": "/root/kel/Ssh.py", "md5sum": "63f8a200d1d52d41f6258b41d7f8432c", "remote_md5sum": "63f8a200d1d52d41f6258b41d7f8432c" } |
在使用參數為flat的時候,如果dest的后綴名為/,那么就會保存在目錄中,然后直接保存為文件名;當dest后綴不為/的時候,那么就會直接保存為kel的文件,如上例所示。
主要是在於dest是否已/結尾,從而來區分這是個目錄還是路徑。
4、 文件管理模塊-file
主要用來設置文件、鏈接、目錄的屬性,或者移除文件、鏈接、目錄,很多其他的模塊也會包含這種作用,例如copy,assemble和template
參數 |
必填 |
默認 |
選項 |
說明 |
Follow |
No |
No |
Yes/no |
這個標識說明這是系統鏈接文件,如果存在,應該遵循 |
Force |
No |
No |
Yes/no |
強制創建鏈接在兩種情況下:源文件不存在(過會會存在);目標存在但是是文件(創建鏈接文件替代) |
Group |
No |
|
|
文件所屬用戶組 |
Mode |
No |
|
|
文件所屬權限 |
Owner |
No |
|
|
文件所屬用戶 |
Path |
Yes |
|
|
要控制文件的路徑 |
Recurse |
No |
No |
Yes/no |
當文件為目錄時,是否進行遞歸設置權限 |
Src |
No |
|
|
文件鏈接路徑,只有狀態為link的時候,才會設置,可以是絕對相對不存在的路徑 |
State |
No |
File |
File/link Directory Hard/touch Absent |
如果是目錄不存在,那么會創建目錄;如果是文件不存在,那么不會創建文件;如果是link,那么軟鏈接會被創建或者修改;如果是absent,那么目錄下的所有文件都會被刪除,如果是touch,會創建不存在的目錄和文件 |
4.1 設置文件屬性
[root@ansibleserver ~]# ansible pythonserver -m file -a "path=/root/123 owner=kel group=kel mode=0644" SSH password: 192.168.1.60 | success >> { "changed": true, "gid": 500, "group": "kel", "mode": "0644", "owner": "kel", "path": "/root/123", "size": 294, "state": "file", "uid": 500 } |
文件路徑為path,表示文件路徑,設定所屬用戶和所屬用戶組,權限為0644
[root@ansibleserver ~]# ansible pythonserver -m file -a "path=/tmp/kel/ owner=kel group=kel mode=0644 recurse=yes" SSH password: 192.168.1.60 | success >> { "changed": true, "gid": 500, "group": "kel", "mode": "0644", "owner": "kel", "path": "/tmp/kel/", "size": 4096, "state": "directory", "uid": 500 } |
文件路徑為path,使用文件夾進行遞歸修改權限,使用的參數為recurse表示為遞歸
4.2 創建目錄
[root@ansibleserver ~]# ansible pythonserver -m file -a "path=/tmp/kel state=directory mode=0755" SSH password: 192.168.1.60 | success >> { "changed": true, "gid": 0, "group": "root", "mode": "0755", "owner": "root", "path": "/tmp/kel", "size": 4096, "state": "directory", "uid": 0 } |
創建目錄,使用的參數主要是state為directory
4.3 修改權限
[root@ansibleserver ~]# ansible pythonserver -m file -a "path=/tmp/kel mode=0444" SSH password: 192.168.1.60 | success >> { "changed": true, "gid": 0, "group": "root", "mode": "0444", "owner": "root", "path": "/tmp/kel", "size": 4096, "state": "directory", "uid": 0 } |
直接使用mode來進行修改權限
4.4 創建軟連接
[root@ansibleserver tmp]# ansible pythonserver -m file -a "src=/tmp/1 dest=/tmp/2 owner=kel state=link" SSH password: 192.168.1.60 | success >> { "changed": true, "dest": "/tmp/2", "gid": 0, "group": "root", "mode": "0777", "owner": "kel", "size": 6, "src": "/tmp/1", "state": "link", "uid": 500 } |
src表示已經存在的文件,dest表示創建的軟連接的文件名,最后的state狀態為link
5、 ini文件管理模塊-ini_file
Ini_file模塊主要是用來設置ini文件的格式的文件。
添加、刪除、修改單獨的ini格式的文件,其中主要是用來修改部分的配置信息,而不是template或者是assemble,添加失去的section。
參數 |
必填 |
默認 |
選擇 |
說明 |
Backup |
No |
No |
Yes/no |
在修改之前進行備份 |
Dest |
Yes |
|
|
Ini類型文件的路徑,如果不存在會創建 |
Follow |
No |
No |
Yes/no |
標識是否文件系統鏈接,如果存在,那么將遵循 |
Group |
No |
|
|
組名 |
Mode |
No |
|
|
權限 |
Option |
No |
|
|
如果需要修改一個值,那么可以設置,如果添加刪除一個整段,那么可以忽略 |
Others |
No |
|
|
文件模塊所使用的參數可以在這里使用 |
Owner |
No |
|
|
用戶名 |
Section |
Yes |
|
|
在ini文件中的section名稱,如果狀態為present並且設置了一個值,那么會添加 |
State |
No |
Present |
Absent Present |
新增/刪除 |
Value |
No |
|
|
這個值和option相關聯,如果刪除那么會忽略 |
5.1 添加其中的節的值
[root@ansibleserver tmp]# ansible pythonserver -m ini_file -a "dest=/tmp/kel section=kel option=kel value=kel mode=0600 backup=yes" SSH password: 192.168.1.60 | success >> { "changed": true, "dest": "/tmp/kel", "gid": 0, "group": "root", "mode": "0600", "msg": "OK", "owner": "root", "size": 29, "state": "file", "uid": 0 } |
表示在ini文件格式中添加一個值,路徑為/tmp/kel,節名稱為kel,字符為kel值為kel,在修改之前進行備份,ini文件格式如下:
[section]
key=value