ansible ad-hoc和常用模組總結
1. ad-hoc介紹
ansible中有兩種模式:ad-hoc模式和ansible-playbook模式。
ad-hoc命令是一種可以快速輸入的命令,而且不需要儲存起來的命令。
ad-hoc適合解決一些簡單或者平時工作中臨時遇到的困難。
2. ad-hoc的使用場景
- 在多臺機器上,檢視某個程序是否啟動
- 在多臺機器上,拷貝指定檔案到本地等等
3. ad-hoc模式命令的使用
命令+主機名稱+指定的模組+模組名稱+模組動作+具體的命令
如:ansible ans -m shell -a 'ls /root'
4. ansible幫助檢視方式
ansible-doc -l #檢視所有的模組與簡要說明 ansible-doc copy #檢視指定模組的方式 ansible-doc -s copy #檢視指定模組的playbook程式碼段
5. ad-hoc命令引數
ansible <host-pattern> [options] -v|--version #輸出更詳細的執行過程資訊,-vvv可得到執行過程所有的資訊 -i|PATH|--inventory(清單)=PATH #指定inventory(清單)資訊,預設/etc/ansible/hosts-f NUM|--forks=NUM #併發執行緒數,預設是5個 --private-key=PRIVATE_KEY_FILE #指定金鑰檔案 -m NAME|--module-name=NAME #指定使用的模組 -M DIRECTORY,--module-path=DIRECTORY #指定模組存放路徑,預設/usr/share/ansible,也可以通過ANSIBLE_LIBRARY設定預設路徑。-a ‘ARGUMENTS’,--args=‘ARGUMENTS’ #模組引數。 -k,--ask-pass SSH #認證密碼 -K,--ask-sudo-pass sudo #使用者的密碼(--sudo時使用)。 -o,--one-line #標準輸出至一行。 -s,--sudo #相當於Linux系統下的sudo命令。 -t DIRECTORY,--tree=DIRECTORY #輸出資訊至DIRECTORY目錄下,結果檔案以遠端主機命名。 -T SECONDS,--timeout=SECONDS #指定連線遠端主機的最大超時,單位是秒。 -B NUM,--background=NUM #後臺執行命令,超NUM秒後中止正在執行的任務。 -P NUM,--poll=NUM #定期返回後臺任務進度。 -u USERNAME,--user=USERNAME #指定遠端主機以USERNAME執行命令。 -U SUDO_USERNAME,--sudo-user=SUDO_USERNAME #使用sudo,相當於LInux下的sudo命令。 -c CONNECTION,--connection=CONNECTION #指定連線方式,可用選項paramiko(SSH)、ssh、local,local方式常用於crontab和kickstarts。 -l SUBSET,--limit=SUBSET #指定執行主機。 -l ~REGEX,--limit=~REGEX #指定執行主機(正則)。 --list-hosts #列出符合條件的主機列表,不執行任何命令。
6. ansible常用模組
模組(也被稱為 “task plugins” 或 “library plugins”)是在 Ansible 中實際在執行的.它們就 是在每個 playbook 任務中被執行的.你也可以僅僅通過 ‘ansible’ 命令來執行它們。
6.1 command模組
命令模組適合使用簡單的命令,無法支援"<"、">"、"|"、";"、"&"等符號,功能是在遠端主機上執行命令,此模組為預設模組,可以忽略-m選項。
chdir #在執行命令前,進入到指定的目錄中 creates #判斷指定檔案是否存在,如果存在,不執行後面的操作 removes #判斷指定檔案是否存在,如果存在,執行後面的操作 free_from #必須要輸入一個合理的命令 ansible mail -m command -a 'chdir=/data pwd' ansible mail -m command -a "touch my_right.cnf creates=/data/my_right.cnf" ansible mail -m command -a "rm -f mysql.repo removes=/data/mysql.repo"
6.2 shell模組
類似於command模組,但是功能比command要更強大。支援"<"、">"、"|"、";"、"&"等符號。
chdir #在執行命令前,進入到指定目錄中 creates #判斷指定檔案是否存在,如果存在,不執行後面的操作 removes #判斷指定檔案是否存在,如果存在,執行後面的操作 free_form #必須要輸入一個合理的命令
exectuable #預設系統會使用bash這個shell執行,如果要切換shell就使用這個命令 ansible mail -m shell -a "ps -ef | grep ssh"
6.3 copy模組
主要是從管理機器複製檔案到遠端主機上。copy模組在複製資料的時候,如果資料是軟連線檔案,會將連結指定的原始檔進行復制。
src #用於指定本地檔案的儲存位置,也就是ansible管理主機的檔案位置 backup #預設資料複製到遠端主機,會覆蓋原有的檔案(yes會將原始檔進行備份)
force #遠端主機檔案存在強制拷貝,預設兩個選項yes/no content #用於替代src引數使用,可以直接設定指定檔案的值 dest(required) #指定檔案將被拷貝到遠端主機的哪個目錄中,此選項必選 group #檔案資料複製到遠端主機,設定檔案的屬組的資訊 mode #檔案資料複製到遠端主機,設定檔案的許可權 owner #檔案資料複製到遠端主機,設定檔案的屬主的資訊 remote_src #如果設定yes,表示將遠端主機上的資料進行移動操作,如果設定為no,表示將管理主機上的資料進行分發操作
others #所有的file模組裡的選項都可以在這裡使用
directory_mode #遞迴設定目錄的許可權,預設為系統預設許可權
ansible mail -m copy -a "src=/data/mysql.repo dest=/data/ backup=yes"
6.4 fetch模組
主要是抓取檔案到管理機器上。
src #要獲取的遠端系統上檔案,必須是檔案,不能是目錄 dest #用於儲存檔案的目錄 ansible mail -m fetch -a "src=/root/default.conf dest=/data"
6.5 file模組
實現建立/刪除檔案資訊、對資料許可權進行修改。
dest/path/name #將資料複製到遠端節點的路徑資訊 group #檔案資料複製到遠端主機,並設定檔案的屬組資訊 mode #檔案資料複製到遠端主機,並設定資料許可權 owner #檔案資料複製到遠端主機,並設定檔案屬主 src #被連結原始檔路徑/只應用於state=link,只用於軟連線或硬連結
dest #被連結到的路徑/只應用於state=link,只用於軟連線或硬連結
recurse #遞迴設定檔案的屬性,相當於chmod -R
state #狀態 state 後面的引數有: absent #檔案狀態:刪除或取消一個連結 directory #檔案狀態:如果目錄不存在則建立 file #檔案狀態:即使目錄不存在也不建立 touch #檔案狀態:檔案不存在則建立 hark/link #建立連線檔案 ansible mail -m file -a "path=/data/kai state=directory"
6.6 yum模組
使用yum模組來對軟體進行安裝、升級、降級、刪除和列出軟體包和組。
name #指定軟體名稱資訊 state #使用remove/absent將軟體進行解除安裝,使用present/installed進行軟體的安裝,使用latest安裝最新的軟體
disable_gpg_check #用於禁用對rpm包的公鑰gpg驗證,預設值為no
enablerepo #用於指定安裝軟體包時臨時啟用yum源
diablerepo #用於指定安裝軟體包臨時禁用的yum源
6.7 service模組
管理服務的執行狀態。
enable #設定伺服器是否自開啟,如果引數不指定,原有的服務開機自啟動狀態進行保留 name #設定要啟動/停止伺服器的名稱 state #使用引數reloaded是平滑重啟,restarted引數是重啟,started引數是啟動,stopped引數是停止
6.8 mount模組
批量管理主機進行掛載解除安裝的操作。
fstype #指定掛載檔案的系統型別
opts #指定掛載的引數資訊
path #定義一個掛載點資訊
src #定義裝置檔案資訊
state #使用引數absent會進行解除安裝,也會修改fstab檔案資訊,使用unmounted會進行解除安裝但是不會修改fstab檔案,present不會掛載,只會修改fstab檔案,mounted會進行掛載也會修改fstab檔案
6.9 cron模組
定時任務模組,可以幫助我們管理遠端主機中的計劃任務,功能相當於crontab命令。
job #指定計劃的任務中需要實際執行的命令或者指令碼
name #用於設定計劃任務的名稱,計劃任務的名稱會在註釋中顯示
state #如果引數是absent代表刪除定時任務,如果引數是disabled代表將指定的定時任務進行註釋或者取消註釋
user #用於設定當前計劃任務屬於哪個使用者,當不使用此引數時,預設為管理員使用者
backup #此引數的值設定為yes,那麼當修改或者刪除對應的計劃任務時,會對計劃任務備份
$time #指定具體的執行時間,minute分,hour時,day天,month月,weekday 0-7 代表周
注意:如果時間引數不寫,預設是*
6.10 group模組
遠端批量建立使用者組資訊。
gid #建立組的ID資訊
name #建立組的名稱資訊
state #如果引數是absent代表刪除指定的使用者組,如果引數是present代表是建立指定的使用者組
6.11 user模組
遠端批量建立使用者資訊。
password #輸入密碼資訊 name #指定使用者名稱資訊 uid #指定使用者UID資訊 group #指定使用者主要屬於哪個使用者組 groups #指定使用者屬於哪個附加組資訊 shell #/bin/bash或者/sbin/nologin用來指定使用者是否能夠登陸 create_home #是否建立家目錄 home #指定家目錄建立在什麼路徑預設是/home 注意:password設定密碼的時候不能使用明文的方式,只能使用密文方式,可以給使用者設定密碼,還可以給使用者修改密碼。
6.12 script模組
script模組可以幫助我們在遠端主機上執行我們編寫的管理主機的指令碼,就是指令碼就在你管理主機的本地,無需手動拷貝到遠端主機。
free_from #必要的引數,預設會使用
chdir #指定一個目錄,在執行命令前首先會切換指定的目錄中去
creates #當指定的檔案存在時,就不指定對應的命令,起到判斷的作用
removes #與creates引數相反,當指定的檔案不存在的時候,就不執行對應的命令
6.13 find模組
find命令用來查詢指定目錄下的檔案,任何位於引數之前的字串都將會被視為欲查詢的目錄名,如果使用該命令時,不設定任何的引數,那麼find命令將在當前的目錄下查詢子目錄和檔案,並將查到的子目錄和檔案全部顯示出來,find模組就像find命令一樣可以幫助我們在被管理機器中查詢符合條件的檔案。
paths #指定在哪個目錄中查詢檔案,可以指定多個路徑用逗號隔開 recurse #是否為遞迴子目錄查詢檔案 hidden #是否查詢隱藏檔案 file_type #指定查詢的檔案型別,可以是any、directory、file、link四種 patterns #指定需要查詢檔案的名稱,如果想要使用python正則表示式去匹配檔案需要使用use_regex=yes use_regex #是否啟用python正則來查詢檔案 contains #根據文章內容查詢檔案,這個引數是一個正則表示式 age #指定檔案間隔的時間,可以使用的單位有秒、分、時、天、星期 age_stamp #根據時間範圍查詢檔案,檔案時間屬性有三個,atime、ctime、mtime size #根據檔案的大小來進行查詢,可以使用的單位有t、g、m、k、b get_checksum #當有符合查詢檔案被找到的時候,會同時返回對應檔案的sha1校驗碼
6.14 unarchive模組
unarchive模組的功能是解壓縮,這個模組有兩種用法:
- 將ansible主機上的壓縮包在本地解壓縮之後傳到遠端主機上這種情況下copy=yes
- 將遠端主機上的某個解壓包壓縮到指定的路徑下,這種情況下copy=no
copy #在解壓檔案之前,是否先將檔案複製到遠端主機上,預設是yes creates #指定一個檔名,當該檔案存在的時候,解壓命令不執行 src #如果copy是yes需要指定壓縮檔案的源路徑 dest #遠端主機上的一個路徑,即檔案解壓的路徑 list_files #列出壓縮包裡面的檔案,yes/no mode #解壓檔案的許可權設定 group #解壓後的目錄檔案的屬組 owner #解壓檔案或目錄的屬主
6.15 replace模組
replace模組可以根據我們指定的正則表示式替換檔案中的字串,檔案中所有被匹配的字串都會被替換,也就是說它是一種全域性替換工具。
path #必須的引數,指定要執行的操作檔名稱
regexp #必須引數,指定一個正則表示式
replace #指定最後要替換成的文字
backup #在修改檔案之前對檔案進行備份,yes/no
6.16 lineinfile模組
lineinfile模組相當重要,在自動化運維中起到了相當重要的目的,他可以通過正則表示式替換指定文字,例如開啟一些配置選項等,還可以新加一行文字,或者是刪除指定的行。
path #必須引數,指定要操作的檔案路徑 line #必須引數,指定要替換的文字內容 regexp #匹配正則語句和要過濾的關鍵字 state #引數是absent意思是刪除,present意思是預設 backrefs #表示是否開啟後向引用,預設是no,yes/no create #當檔案不存在的時候,是否建立對應的檔案 backup #是否在修改檔案之前對檔案進行備份 insertafter #藉助insertafter引數可以將文字插入到"指定行"之後 insertbefore #藉助insertafter引數可以將文字插入到"指定行"之前
6.17 setup模組
setup模組用於收集遠端主機的一些基本資訊,其可以收集幾乎主機上的任何資料,方便我們後期進行分析工作。
ansible_all_ipv4_addresses #僅顯示ipv4的資訊
ansible_devices #僅顯示磁碟裝置資訊
ansible_distribution #顯示是什麼系統,例:centos,suse等
ansible_distribution_major_version #顯示是系統主版本
ansible_distribution_version #僅顯示系統版本
ansible_machine #顯示系統型別,例:32位還是64位
ansible_eth0 #僅顯示eth0的資訊
ansible_hostname #僅顯示主機名
ansible_kernel #僅顯示核心版本
ansible_lvm #顯示lvm相關資訊
ansible_memtotal_mb #顯示系統總記憶體
ansible_memfree_mb #顯示可用系統記憶體
ansible_memory_mb #詳細顯示記憶體情況
ansible_swaptotal_mb #顯示總的swap記憶體
ansible_swapfree_mb #顯示swap記憶體的可用記憶體
ansible_mounts #顯示系統磁碟掛載情況
ansible_processor #顯示cpu個數(具體顯示每個cpu的型號)
ansible_processor_vcpus #顯示cpu個數(只顯示總的個數)
ansible all -m setup
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"
6.18 get_url模組
get_url模組用於下載指定檔案到本地。
dest #檔案下載到遠端的那個目錄下 force #是否強制覆蓋yes/no url #指定一個url地址
6.19 archive模組
對指定的內容進行打包。
path #源路徑,準備打包的檔案
dest #打包成什麼格式的包,放到什麼位置
mode #許可權