Ansible學習筆記之經常使用模塊彙總

Ansible的模塊應該是平常中用的最多的,掌握好模塊的使用,能更好的寫出palybook,因此我從網上收集總結了經常使用的的一些模塊,以作記錄和以後的查詢使用。python

(1)、fetch模塊:文件拉取模塊,主要是將遠程主機中的文件拷貝到本機中

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

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檢查nginx

案例1:從遠程機器上牀送文件到主控機
# ansible server -m fetch -a 「src=/root/123 dest=/root
src表示爲遠程主機上須要傳送的文件的路徑,dest表示爲本機上的路徑,在傳送過來的文件,是按照IP地址或hostname進行分類,而後路徑是源文件的路徑,例如上面的最終路徑爲/root/192.168.1.60/root/123在拉取文件的時候,必須拉取的是文件,不能拉取文件夾git

案例2:指定路徑目錄進行保存
# ansible pythonserver -m fetch -a 「src=/root/Ssh.py dest=/root/kel/ flat=yes」
在使用參數爲flat的時候,若是dest的後綴名爲/,那麼就會保存在目錄中,而後直接保存爲文件名,如上例的結果爲 dest」: 「/root/kel/Ssh.py;
當dest後綴不爲/的時候,那麼就會直接保存爲kel的文件,如上例1所示。主要是在於dest是否已/結尾,從而來區分這是個目錄仍是路徑。web

(2)、assemble模塊:文件組裝模塊,主要是將多份配置文件組裝爲一份配置文件。

Backup:Yes/no 是否建立備份文件,使用時間戳
Delimiter:配置文件內容之間的分隔符
Dest:目的文件用來鏈接全部的源文件
Follow:Yes/no 表示文件系統的連接,若是存在,應該follow
Group:文件所屬組,至關於chown
Mode:文件屬性,0644,記住保留前面的0
Owner:文件所屬用戶
Regexp:組裝的時候是否匹配相關的文件進行組合
Remote_src:True/False,False表示src文件在本機上,True表示src在遠程主機上
Src:已經存在的目錄文件shell

案例:將本機上的配置文件組裝發送到遠程主機
# ansible pythonserver -m assemble -a 「src=/root/kel/ dest=/tmp/kel.conf remote_src=False」
在本機目錄/root/kel的文件進行組裝,發送到遠程配置文件/tmp/kel.conf中,在此注意參數remote_src爲False表示組裝本機的配置文件,若是在本機目錄中不存在文件,那麼將會顯示Python代碼和亂碼ubuntu

(3)、file模塊:文件屬性設置

force:須要在兩種狀況下強制建立軟連接,一種是源文件不存在,但以後會創建的狀況下;另外一種是目標軟連接已存在,須要先取消以前的軟鏈,而後建立新的
軟鏈,有兩個選項:yes|no
group:定義文件/目錄的屬組
mode:定義文件/目錄的權限
owner:定義文件/目錄的屬主
path:必選項,定義文件/目錄的路徑
recurse:遞歸設置文件的屬性,只對目錄有效
src:被連接的源文件路徑,只應用於state=link的狀況
dest:被連接到的路徑,只應用於state=link的狀況
state:
directory:若是目錄不存在,就建立目錄
file:即便文件不存在,也不會被建立
link:建立軟連接
hard:建立硬連接
touch:若是文件不存在,則會建立一個新的文件,若是文件或目錄已存在,則更新其最後修改時間
absent:刪除目錄、文件或者取消連接文件centos

案例:遠程文件符號連接建立
# ansible storm_cluster -m file -a 「src=/etc/resolv.conf dest=/tmp/resolv.conf state=link」
src表示已經存在的文件,dest表示建立的軟鏈接的文件名,最後的state狀態爲link
案例:遠程文件符號連接刪除
# ansible storm_cluster -m file -a 「path=/tmp/resolv.conf state=absent」服務器

(4)、copy模塊:複製文件到遠程主機

backup: #在覆蓋以前,將源文件備份,備份文件包含時間信息。有兩個選項:yes|no
content: #用於替代「src」,能夠直接設定指定文件的值
dest: #必選項。要將源文件複製到的遠程主機的絕對路徑,若是源文件是一個目錄,那麼該路徑也必須是個目錄
directory_mode: #遞歸設定目錄的權限,默認爲系統默認權限
force: #若是目標主機包含該文件,但內容不一樣,若是設置爲yes,則強制覆蓋,若是爲no,則只有當目標主機的目標位置不存在該文件時,才複製。默認爲yes
others:#全部的file模塊裏的選項均可以在這裏使用
group # 複製到遠程主機後,指定文件或目錄的屬
mode # 複製到遠程主機後,指定文件或目錄權限,相似與 `chmod’指明如 0644
owner # 複製到遠程主機後,指定文件或目錄屬主
src:被複制到遠程主機的本地文件,能夠是絕對路徑,也能夠是相對路徑。若是路徑是一個目錄,它將遞歸複製。在這種狀況下,若是路徑使用「/」來結尾,則只複製目錄裏的內容,若是沒有使用「/」來結尾,則包含目錄在內的整個內容所有複製,相似於rsync。ssh

案例:將本地文件「/etc/ansible/ansible.cfg」複製到遠程服務器,設置屬主和屬組及文件權限
# ansible storm_cluster -m copy -a 「src=/etc/ansible/ansible.cfg dest=/tmp/ansible.cfg owner=root group=root mode=0644″

(5)、command模塊:在遠程主機上執行命令

Command不適用於有shell變量的狀況,也不適用於有管道符或者&&的狀況,若是要使用此種狀況,那麼可使用shell模塊

相關選項以下:
creates:一個文件名,當該文件存在,則該命令不執行
free_form:要執行的linux指令
chdir:在執行指令以前,先切換到該目錄
removes:一個文件名,當該文件不存在,則該選項不執行
executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑

案例:查看遠程服務器的負載信息
# ansible storm_cluster -m command -a 「uptime」

(6)、shell模塊:切換到某個shell執行指定的指令,與command不一樣的是,此模塊能夠支持命令管道,同時還有另外一個模塊也具有此功能:raw

chdir # 執行以前,先cd到指定目錄在執行命令
creates # 一個文件名,當這個文件存在,則該命令不執行
executable # 切換shell來執行命令,須要使用命令的絕對路徑
free_form= # 執行的命令
removes # 一個文件名,這個文件不存在,則該命令不執行

案例:遠程執行shell腳本
# ansible storm_cluster -m shell -a 「/tmp/rocketzhang_test.sh」

(7)、service模塊:系統服務管理

arguments # 向服務傳遞的命令行參數
enabled # 設置服務開機自動啓動,參數爲yes|no
name= # 控制服務的名稱
pattern # 若是經過status指令來查看服務的狀態時,沒有響應,就會經過ps指令在進程中根據該模式進行查找,若是匹配到,則認爲該服務依然在運行
runlevel # 設置服務自啓動級別
sleep # 若是執行了restarted,則在stop和start之間沉睡幾秒鐘
state # 啓動`started’ 關閉`stopped’ 從新啓動 `restarted’ 重載 `reloaded’

案例:啓動http服務,並添加到啓動服務項中,設置開機啓動
# ansible web -m service -a 「name=httpd state=started enabled=yes 」

(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 )

案例1:在指定節點上定義一個計劃任務,每隔3分鐘到主控端更新一次時間
# ansible all -m cron -a ‘name=」custom job」 minute=*/3 hour=* day=* month=* weekday=* job=」/usr/sbin/ntpdate 172.16.254.139″‘

案例2:新建一個cron文件
# ansible pythonserver -m cron -a 「name=’for test’ weekday=’2′ minute=’0′ hour=12 user=’root’ job=’cat /etc/passwd >/root/111′ cron_file=’test ansible'」
新增一個任務,在目錄/etc/cron.d/目錄中,文件名稱爲test ansible,用戶爲root

(9)、yum模塊:軟件包安裝管理

conf_file # yum的配置文件
disable_gpg_check # 關閉gpg_check
disablerepo # 不啓用某個源
enablerepo # 啓用某個源
List # 非冪等性命令
name= # 指定要安裝的包,若是有多個版本須要指定版本,不然安裝最新的包
state # 安裝(`present’),安裝最新版(`latest’),卸載程序包(`absent’)

案例1:肯定一個包安裝的是指定版本,以下:
# ansible server -m yum -a 「name=acme-1.5 state=present」
案例2:安裝一個最新版包:
# ansible server -m yum -a 「name=acme state=latest」
案例3:指定repo來進行安裝包
# ansible server -m yum -a 「name=httpd enablerepo=kel state=present」
在指定源的時候,使用enablerepo,注意這個名字是配置文件/etc/yum.repo.d/目錄中文件的section的名稱,以下所示:
# cat rhel-source.repo |grep kel
[kel]name=kel
baseurl=file:///tmp/kel
案例4:更新全部安裝包
# ansible server -m yum -a 「name=* state=latest
案例5:指定rpm進行安裝
# ansible server -m yum -a 「name=/usr/local/src/kel.noarch.rpm state=present」
案例6:指定遠程網址rpm進行安裝
# ansible server -m yum -a 「name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6.0.el6.ngx.noarch.rpm state=present」

(10)、synchronize模塊:使用rsync同步文件

使用rsync 模塊,系統必須安裝rsync 包,不然沒法使用這個模塊

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功能,能夠經過mode=pull更改推送模式爲拉取模式
recursive # 是否遞歸 yes/no
rsync_opts # 使用rsync 的參數
rsync_path # 指定遠程服務器上的rsync命令所在路徑信息。這個參考rsync命令的–rsync-path參數,–rsync-path=PATH
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=\‘#\‘」 # 同步的數據源目錄或文件
–exclude=.Git #忽略同步.git結尾的文件

因爲模塊默認啓用了archive參數,該參數默認開啓了recursive,links,perms,times,owner,group和-D參數。若是你將該參數設置爲no,那麼你將中止不少參數,好比會致使以下目的遞歸失敗,致使沒法拉取

案例1:把本機根目錄下的time.sh文件同步到目標主機上。目標機器須要安裝rsync軟件
# ansible web -a ‘yum install rsync -y’
# ansible web -m synchronize -a ‘src=/time.sh dest=/tmp/’

(11)、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 webserves -m user -a 「name=foo password= home=/home/foo shell=/sbin/nologin」

(12)、group模塊:系統用戶組管理

gid # 設置組的GID號
name= # 管理組的名稱
state # 指定組狀態,默認爲建立,設置值爲absent爲刪除
system # 設置值爲yes,表示爲建立系統組

案例:建立一個foo組,指定gid號
# ansible webserves -m group -a 「name=foo gid=360 system=yes」

(13)、Script模塊:將本地腳本複製到遠程主機並運行

creates # 一個文件名,當這個文件存在,則該命令不執行
free_form= # 本地腳本路徑
removes # 一個文件名,這個文件不存在,則該命令不執行

案例:
#主控端/root/下必須有local.sh腳本。
#ansible test -m script -a ‘/root/local.sh’

(14)、setup模塊:收集遠程主機的facts

每一個被管理節點在接收並運行管理命令以前,會將本身主機相關信息,如操做系統版本、IP地址等報告給遠程的ansbile主機
Fact_path:/etc/ansible/facts.d,Fact的路徑
Filter:過濾串

案例1:收集fact而且進行保存
# ansible server -m setup –tree /tmp/facts
執行以後,會顯示相關的fact,而且在/tmp/facts中會保存fact信息

案例2:收集內存信息並輸出
# ansible pythonserver -m setup -a 「filter=ansible_*_mb」
使用過濾字符串,從而進行了相關的匹配,獲得相關的內存信息以下:
「ansible_facts」: {

「ansible_memfree_mb」: 746,

「ansible_memtotal_mb」: 996,

「ansible_swapfree_mb」: 2015,

「ansible_swaptotal_mb」: 2015

}

(15)、ini_file模塊:ini文件管理模塊主要是用來設置ini文件的格式的文件

添加、刪除、修改單獨的ini格式的文件,其中主要是用來修改部分的配置信息,而不是template或者是assemble,添加失去的section。

Backup: Yes/no,在修改以前進行備份
Dest: Ini類型文件的路徑,若是不存在會建立
Follow: Yes/no,標識是否文件系統連接,若是存在,那麼將遵循
Group:組名
Mode:權限
Option: 若是須要修改一個值,那麼能夠設置,若是添加刪除一個整段,那麼能夠忽略
Others: 文件模塊所使用的參數能夠在這裏使用
Owner:用戶名
Section:在ini文件中的section名稱,若是狀態爲present而且設置了一個值,那麼會添加
State: 狀態
Absent 刪除
Present 新增(默認)
Value: 這個值和option相關聯,若是刪除那麼會忽略

案例:添加其中的節的值
# ansible pythonserver -m ini_file -a 「dest=/tmp/kel section=kel option=kel value=kel mode=0600 backup=yes」
表示在ini文件格式中添加一個值,路徑爲/tmp/kel,節名稱爲kel,字符爲kel值爲kel,在修改以前進行備份,ini文件格式以下:
[section]key=value

(16)、hostname模塊:主要用來修改主機的名稱

Name:主機名稱

案例:修改主機名稱
# ansible server -m hostname -a 「name=Ansible」
在查看的時候,主要查看文件/etc/sysconfig/network,重啓以後才能生效

(17)、ping模塊:主要是無心義的測試模塊

主要用來檢查ansible是否能夠用的模塊以及python是否配置好的,在playbook中基本不會使用,在能成功鏈接以後,老是返回結果pong

# ansible all -m ping

(18)、raw模塊:ssh命令執行模塊

此模塊的執行,在遠程主機上,不須要python環境,主要是用來執行髒的ssh命令。
Free_form:須要執行的腳本(沒有真正的參數爲free_form)
Removes:當文件名稱存在的時候,此步不會執行

raw模塊是底層ssh的通信,不依靠python的模塊,因此若是碰到低版本的系統,或者客戶端是路由器的話,那麼沒有python模塊的話,command和shell模塊沒法使用,能夠先用這條命令安裝完須要的包。

(19)、template模塊:進行文檔內變量的替換的模塊

template使用了Jinjia2格式做爲文件模版,它的每次使用都會被ansible標記爲」changed」狀態。且template下的文件可使用var裏面定義的變量

backup: yes/no 創建個包括timestamp在內的文件備份,以備不時之需.
dest: 遠程節點上的絕對路徑,用於放置template文件。
group: 設置遠程節點上的的template文件的所屬用戶組
mode: 設置遠程節點上的template文件權限。相似Linux中chmod的用法
owner: 設置遠程節點上的template文件所屬用戶
src: 本地Jinjia2模版的template文件位置。

案例:把/templates/foo.j2文件通過填寫參數後,複製到遠程節點的/etc/file.conf,設置文件權限
# ansible pythonserver -m template -a 「src=/templates/foo.j2 dest=/etc/file.conf owner=foo group=foo mode=0644″

(20)、apt模塊:ubuntu/debian的包管理工具

這個模塊是ubuntu做爲遠端節點的OS的時候,用的最多的

cache_valid_time 若是update_cache參數起做用的時候,這個參數纔會起做用。其用來控制update_cache的總體有效時間
deb 這個用於安裝遠程機器上的.deb後綴的軟件包
default_release 等同於apt命令的-t選項,這裏就很少說了
force yes/no,強制執行apt install/remove
install_recommends yes/no,這個參數能夠控制遠程電腦上是否只是下載軟件包,仍是下載後安裝,默認爲true,設置爲false的時候光下載軟件包不安裝
name apt要下載的軟件包名字,支持name=git=1.6 這種制定版本的模式
purge yes/no,若是state參數值爲absent,這個參數爲yes的時候,將會強行乾淨的卸載
state 定義軟件包的最終狀態,latest時爲安裝最新軟件,默認爲present
latest
absent
present
update_cache yes/no,當這個參數爲yes的時候等於apt-get update
upgrade yes/safe/full/dist,若是參數爲yes或者safe,等同於apt-get upgrade.若是是full就是完整更新。若是是dist等於apt-get dist-upgrade。

案例:安裝nginx最新的名字爲squeeze-backport發佈包,而且安裝前執行更新
# ansible web -m apt -a 「name=nginx state=latest default_release=squeeze-backports update_cache=yes」

(21)、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

案例1:10秒後在當前主機開始檢查8000端口,直到端口啓動後返回# ansible web -m wait_for -a 「port=8000 delay=10″案例2:檢查path=/tmp/foo直到文件存在後繼續# ansible web -m wait_for -a 「path=/tmp/foo」案例3:確認/var/lock/file.lock不存在繼續# ansible web -m wait_for -a 「path=/var/lock/file.lock state=absent」

相關文章
相關標籤/搜索