Ansible運維自動化工具19個常用模塊使用實例【轉】


一、模塊列表

1、setup

2、ping

3、file

4、copy

5、command

6、shell

7、script

8、cron

9、yum

10、service

11、group

12、user

13、stat

14、mount

15、fetch

16、synchronize

17、get_url

18、hostname

19、wait_for

 

二、模塊示例

1、setup 功能:搜集系統信息

#通過命令獲取所有的系統信息,搜集主機的所有系統信息

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m setup

注意:/etc/ansible/.hosts 文件的寫法很關鍵,官網也出了相關的說明,只不過官方的文檔分版本描述的,稍不注意就掉坑了,具體格式如下:

[xxxx-root]

192.168.1.51 ansible_become=True ansible_become_method=su ansible_become_user=root ansible_become_pass=1111111111

192.168.1.52 ansible_become=True ansible_become_method=su ansible_become_user=root ansible_become_pass=1111111111

#搜集系統信息並以主機名為文件名分別保存在/tmp/facts 目錄

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m setup --tree /tmp/facts

#搜集和內存相關的信息

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m setup -a 'filter=ansible_*_mb'

#搜集網卡信息

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m setup -a 'filter=ansible_eth[0-2]'


2、ping 功能:測試網絡連通性, ping模塊沒有參數

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m ping


3、file 功能:文件屬性設置

force:需要在兩種情況下強制創建軟鏈接,一種是源文件不存在,但之后會建立的情況下;另一種是目標軟鏈接已存在,需要先取消之前的軟鏈,然后創建新的軟鏈,有兩個選項:yes|no

group:定義文件/目錄的屬組

mode:定義文件/目錄的權限

owner:定義文件/目錄的屬主

path:必選項,定義文件/目錄的路徑

recurse:遞歸設置文件的屬性,只對目錄有效

src:被鏈接的源文件路徑,只應用於state=link的情況

dest:被鏈接到的路徑,只應用於state=link的情況

state包括以下:

directory:如果目錄不存在,就創建目錄

file:即使文件不存在,也不會被創建

link:創建軟鏈接

hard:創建硬鏈接

touch:如果文件不存在,則會創建一個新的文件,如果文件或目錄已存在,則更新其最后修改時間

absent:刪除目錄、文件或者取消鏈接文件

創建軟鏈接:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m file -a "src=/etc/resolv.conf dest=/tmp/resolv.conf state=link"

刪除軟連接:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m file -a "path=/tmp/resolv.conf state=absent"

創建目錄(文件):

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m file -a "path=/root/testfile group=ihavecar owner=ihavecar mode=700 state=directory"


4、copy 功能:復制文件到遠程主機

backup: #在覆蓋之前,將源文件備份,備份文件包含時間信息。有兩個選項:yes|no

content: #用於替代“src”,可以直接設定指定文件的值

dest: #必選項。要將源文件復制到的遠程主機的絕對路徑,如果源文件是一個目錄,那么該路徑也必須是個目錄

directory_mode: #遞歸設定目錄的權限,默認為系統默認權限

force: #如果目標主機包含該文件,但內容不同,如果設置為yes,則強制覆蓋,如果為no,則只有當目標主機的目標位置不存在該文件時,才復制。默認為yes

others:#所有的file模塊里的選項都可以在這里使用

group # 復制到遠程主機后,指定文件或目錄的屬

mode # 復制到遠程主機后,指定文件或目錄權限,類似與 `chmod’指明如 0644

owner # 復制到遠程主機后,指定文件或目錄屬主

src:被復制到遠程主機的本地文件,可以是絕對路徑,也可以是相對路徑。如果路徑是一個目錄,它將遞歸復制。在這種情況下,如果路徑使用“/”來結尾,則只復制目錄里的內容,如果沒有用“/”來結尾,則包含目錄在內的整個內容全部復制,類似於rsync。

將本地文件“/etc/ansible/ansible.cfg”復制到遠程服務器,設置屬主和屬組及文件權限

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m copy -a "src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=ihavecar group=root mode=400"


5、command 功能:在遠程主機上執行命令

Command不適用於有shell變量的情況,也不適用於有管道符或者&&的情況,如果要使用此種情況,那么可以使用shell模塊

相關選項如下:

creates:一個文件名,當該文件存在,則該命令不執行

free_form:要執行的linux指令

chdir:在執行指令之前,先切換到該目錄

removes:一個文件名,當該文件不存在,則該選項不執行

executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑

遠程執行查詢系統負載:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m command -a "uptime"

如帶有管道的,則會如下報錯,command是不允許有管道的:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m command -a "uptime | grep 192.168.1.50"


6、shell 功能:切換到某個shell執行指定的指令

切換到某個shell執行指定的指令,與command不同的是,此模塊可以支持命令管道,同時還有另一個模塊也具備此功能:raw

chdir # 執行之前,先cd到指定目錄在執行命令

creates # 一個文件名,當這個文件存在,則該命令不執行

executable # 切換shell來執行命令,需要使用命令的絕對路徑

free_form= # 執行的命令

removes # 一個文件名,這個文件不存在,則該命令不執行

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m shell -a "cat /etc/passwd | grep root"

可遠程執行腳本:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m shell -a "sh /tmp/echo.sh"


7、script 功能:指定本地的腳本文件,到遠程主機運行一次

注意這個模塊和shell模塊的不同,shell模塊是要求客戶端上有這個腳本才能執行;script是要求ansible服務端有這個腳本就可以了,執行的時候是不會拷貝這個腳本到客戶端的。

creates # 一個文件名,當這個文件存在,則該命令不執行

free_form= # 本地腳本路徑

removes # 一個文件名,這個文件不存在,則該命令不執行

ansible端的已有腳本,就只有一條/sbin/ifconfig 命令,該腳本被拿到客戶端上執行,並返回結果:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m script -a "/etc/ansible/masterecho.sh"


8、cron 功能:計划任務管理

backup # 如果設置,創建一個crontab備份

cron_file # 如果指定, 使用這個文件cron.d,而不是單個用戶crontab

day # 日應該運行的工作( 1-31, *, */2, etc )

hour # 小時 ( 0-23, *, */2, etc )

job # 指明運行的命令是什么

minute # 分鍾( 0-59, *, */2, etc )

month # 月( 1-12, *, */2, etc )

name # 定時任務描述

reboot # 任務在重啟時運行,不建議使用,建議使用special_time

special_time # 特殊的時間范圍,參數:reboot(重啟時),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小時)

state # 指定狀態,prsent表示添加定時任務,也是默認設置,absent表示刪除定時任務

user # 以哪個用戶的身份執行

weekday # 周 ( 0-6 for Sunday-Saturday, *, etc )

定義一個時間任務,每隔3分鍾執行一次時間記錄任務:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m cron -a 'name="ntp datatime job" minute=*/3 hour=* day=* month=* weekday=* job="echo `date` >> /tmp/linshidata.txt"'

效果如下:

刪除一個時間任務:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m cron -a 'name="ntp datatime job" minute=*/3 hour=* day=* month=* weekday=* job="echo `date` >> /tmp/linshidata.txt" state=absent'

 


9、yum 功能:軟件包安裝管理

conf_file # yum的配置文件

disable_gpg_check # 關閉gpg_check

disablerepo # 不啟用某個源

enablerepo # 啟用某個源

List # 非冪等性命令

name= # 指定要安裝的包,如果有多個版本需要指定版本,否則安裝最新的包

state # 安裝(`present’),安裝最新版(`latest’),卸載程序包(`absent’)

指定版本安裝包:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m yum -a "name=httpd-devel-2.2.15 state=present"

指定安裝最新版本的包:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m yum -a "name=httpd-devel-2.2.15 state=latest"

指定rpm包來安裝:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m yum -a "name=/usr/local/src/kel.noarch.rpm state=present"

指定遠程網址rpm包來進行安裝:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m yum -a "name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6.0.el6.ngx.noarch.rpm state=present"

刪除包:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m yum -a "name=httpd-devel-2.2.15 state=absent"


10、service 功能:系統服務管理

arguments # 向服務傳遞的命令行參數

enabled # 設置服務開機自動啟動,參數為yes|no

name= # 控制服務的名稱

pattern # 如果通過status指令來查看服務的狀態時,沒有響應,就會通過ps指令在進程中根據該模式進行查找,如果匹配到,則認為該服務依然在運行

runlevel # 設置服務自啟動級別

sleep # 如果執行了restarted,則在stop和start之間沉睡幾秒鍾

state # 啟動`started’ 關閉`stopped’ 重新啟動 `restarted’ 重載 `reloaded’

設置httpd服務為開機自啟動模式,並限制開啟httpd服務

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m service -a "name=httpd state=started enabled=yes"

重啟httpd服務,中間sleep 10秒鍾

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m service -a "name=httpd state=restarted sleep=10"


11、group 功能:系統用戶組管理

gid # 設置組的GID號

name= # 管理組的名稱

state # 指定組狀態,默認為創建,設置值為absent為刪除

system # 設置值為yes,表示為創建系統組

創建一個foo組,指定gid號

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m group -a "name=foo gid=360 system=no"

刪除一個組:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m group -a "name=foo gid=360 system=no state=absent"


12、user 功能:系統用戶賬號管理

comment # 用戶的描述信息

createhome # 是否創建家目錄

force # 在使用`state=absent’時, 行為與`userdel –force’一致.

group # 指定基本組

groups # 指定附加組,如果指定為(‘groups=’)表示刪除所有組

home # 指定用戶家目錄

login_class # 可以設置用戶的登錄類 FreeBSD, OpenBSD and NetBSD系統.

move_home # 如果設置為`home=’時, 試圖將用戶主目錄移動到指定的目錄

name= # 指定用戶名

non_unique # 該選項允許改變非唯一的用戶ID值

password # 指定用戶密碼

remove # 在使用 `state=absent’時, 行為是與 `userdel –remove’一致.

shell # 指定默認shell

state #設置帳號狀態,不指定為創建,指定值為absent表示刪除

system # 當創建一個用戶,設置這個用戶是系統用戶。這個設置不能更改現有用戶。

uid #指定用戶的uid

update_password # 更新用戶密碼

添加用戶foo,指定密碼,設置家目錄,不允許遠程登錄

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m user -a "name=foo password=123456 home=/home/foo shell=/sbin/nologin"

徹底刪除一個用戶,包括家目錄:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m user -a "name=foo remove=yes state=absent"

    


13、stat 功能:獲取遠程文件信息

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m stat -a "path=/etc/passwd"


14、mount 功能:配置掛載點

fstype:必選項,掛載文件的類型

name:必選項,掛載點

opts:傳遞給mount命令的參數

src:必選項,要掛載的文件

state:必選項

present:只處理fstab中的配置

absent:刪除掛載點

mounted:自動創建掛載點並掛載之

umounted:卸載

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m mount -a "name=/mnt src=/dev/sda5 fstype=ext4 opts=ro state=present"


15、fetch 功能:文件拉取模塊,主要是將遠程主機中的文件拷貝到本機中

和copy模塊的作用剛剛相反,並且在保存的時候使用hostname來進行保存,當文件不存在的時候,會出現錯誤,除非設置了選項fail_on_missing為yes

Dest:用來存放文件的目錄,例如存放目錄為backup,源文件名稱為/etc/profile在主機pythonserver中,那么保存為/backup/pythonserver/etc/profile

Fail_on_missing: Yes/no,當源文件不存在的時候,標識為失敗

Flat: 允許覆蓋默認行為從hostname/path到/file的,如果dest以/結尾,它將使用源文件的基礎名稱

Src: 在遠程拉取的文件,並且必須是一個file,不能是目錄

Validate_checksum Yes/no,當文件fetch之后進行md5檢查

從遠程機器上傳送文件到ansible服務器

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m fetch -a "src=/root/123 dest=/root"

src表示為遠程主機上需要傳送的文件的路徑,dest表示為本機上的路徑,在傳送過來的文件,是按照IP地址或hostname進行分類,然后路徑是源文件的路徑,例如上面的最終路徑為/root/192.168.1.50/root/123在拉取文件的時候,必須拉取的是文件,不能拉取文件夾

指定路徑目錄進行保存:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m fetch -a "src=/root/Ssh.py dest=/root/kel/ flat=yes"

在使用參數為flat的時候,如果dest的后綴名為/,那么就會保存在目錄中,然后直接保存為文件名,如上例的結果為 dest”: “/root/kel/Ssh.py;

當dest后綴不為/的時候,那么就會直接保存為kel的文件,如上例1所示。主要是在於dest是否已/結尾,從而來區分這是個目錄還是路徑。


16、synchronize 功能:將主控方/root/a目錄推送到指定節點的/tmp目錄下

選項說明

archive # 是否采用歸檔模式同步,即以源文件相同屬性同步到目標地址

checksum # 是否效驗

compress # 開啟壓縮,默認為開啟

copy_links # 同步的時候是否復制連接

delete # 刪除源中沒有而目標存在的文件(即以推送方為主)

dest= # 目標地址

dest_port # 目標接受的端口,ansible配置文件中的 ansible_ssh_port 變量優先級高於該 dest_port 變量

dirs # 以非遞歸的方式傳輸目錄

existing_only # Skip creating new files on receiver.

group # Preserve group

links # Copy symlinks as symlinks.

mode # 模式,rsync 同步的方式 PUSH\PULL,默認都是推送push。如果你在使用拉取pull功能的時候,可以參考如下來實現mode=pull 更改推送模式為拉取模式

recursive # 是否遞歸 yes/no

rsync_opts # 使用rsync 的參數

rsync_path # 服務的路徑,指定 rsync 命令來在遠程服務器上運行。這個參考rsync命令的--rsync-path參數,--rsync-path=PATH # 指定遠程服務器上的rsync命令所在路徑信息

rsync_timeout # 指定 rsync 操作的 IP 超時時間,和rsync命令的 --timeout 參數效果一樣.

set_remote_user # put user@ for the remote paths. If you have a custom ssh config to define the remote user for

src=\‘#\‘" # 源,同步的數據源

times #

--exclude=.Git 忽略同步.git結尾的文件

由於模塊默認啟用了archive參數,該參數默認開啟了recursive, links, perms, times, owner,group和-D參數。如果你將該參數設置為no,那么你將停止很多參數,比如會導致如下目的遞歸失敗,導致無法拉取

壓縮傳輸a目錄到被控節點:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m synchronize -a 'src=/root/a dest=/tmp/ compress=yes'

注意:主控端的a目錄傳輸到被控節點,文件屬性過去被控節點后,只能是remote user的權限,也就是ihavecar的,不能是root的,也不允許傳輸到ihavecar這個用戶無權限的目錄下去,不然會報錯。

使用pull模式拉取文件到主控節點:

由於模塊,默認都是推送push。因此,如果你在使用拉取pull功能的時候,可以參考如下來實現

mode=pull 更改推送模式為拉取模式。

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m synchronize -a 'mode=pull src=/tmp/a dest=/root/ compress=yes'

注意:從被控節點傳目錄回到主控節點,可以遵循權限,被控節點端目錄的屬性是什么,傳回主控節點的目錄權限就是什么,並不會像push方式那樣屬性改變成普通用戶的。還有一點需要注意的是,從被控節點傳輸回主控節點,只有一個節點能傳輸成功,其他的節點都會失敗。當然,如果各個被控節點的文件如果不是一樣的話,那么各個節點都會傳文件回來。那樣主控端就會收到各個節點的全部文件。


17、get_url 功能:將某個url的文件下載到被控節點的某個位置

將simplejson-3.8.2.tar.gz 下載到/tmp/下:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m get_url -a "url=https://pypi.python.org/packages/source/s/simplejson/simplejson-3.8.2.tar.gz dest=/tmp/"


18、hostname 功能:主要用來修改主機的名稱

在查看的時候,主要查看文件/etc/sysconfig/network,重啟之后才能生效

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m hostname -a "name=ansible-test"


19、wait_for 功能:等待一個事件發生或處理完后,再繼續運行下面的事情

connect_timeout 默認5秒,在下一個事情發生前等待鏈接的時間,單位是秒

delay 延時,大家都懂,在做下一個事情前延時多少秒

host 默認127.0.0.1,執行這個模塊的host

path 當一個文件存在於文件系統中,下一步才繼續。

port 端口號,如8080

state 默認started,對象是端口的時候start狀態會確保端口是打開的,stoped狀態會確認端口是關閉的

present 對象是文件的時候present或者started會確認文件是存在的,而absent會確認文件是不存在的。

started

stopped

absent

10秒后在當前主機開始檢查8000端口,直到端口啟動后返回:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m wait_for -a "port=22612 delay=10"

檢查path=/tmp/foo直到文件存在后繼續:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m wait_for -a "path=/tmp/foo"

確認/var/lock/file.lock不存在繼續:

# ansible -i /etc/ansible/.hosts-root jr-root -c paramiko -m wait_for -a "path=/var/look/file.lock state=absent"

 

本文轉自

精心匯總,史上最全-Ansible運維自動化工具19個常用模塊使用實例(root用戶角度)-Ansible-運維人生 http://www.ywadmin.com/?id=91

https://www.cnblogs.com/paul8339/p/10608024.html#_label18 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM