Ansible系列(3):Ansible ad-hoc命令及實(shí)例介紹

這是Ansible系列課程第三節(jié)僻肖,Ansible Ad-hoc命令介紹伪节。介紹一下ad-hoc命令是什么,以及幾個(gè)具體的實(shí)例逆航。

該系列課程前后章節(jié)都是有關(guān)聯(lián)性的,對(duì)于初學(xué)者建議按順序閱讀渔肩。也可以選擇特定的章節(jié)了解單個(gè)知識(shí)點(diǎn)因俐。

上一節(jié)我們完成了Ansible的基礎(chǔ)環(huán)境搭建,并且成功執(zhí)行了第一條ad-hoc命令周偎。正所謂“麻雀雖小五臟俱全”抹剩,ad-hoc命令雖然簡(jiǎn)單但也是一次完整的ansible任務(wù),對(duì)于了解Ansible以及Ansible playbook的使用也很有幫助蓉坎。這一節(jié)主要介紹一下什么是ad-hoc命令澳眷,有什么用處并且列舉幾個(gè)常見(jiàn)的使用場(chǎng)景。

什么是ad-hoc命令

ad-hoc命令是指使用/usr/bin/ansible命令行工具在一個(gè)或多個(gè)管理節(jié)點(diǎn)上執(zhí)行單個(gè)任務(wù)的命令蛉艾。這其實(shí)是一個(gè)概念性的名字钳踊,是相對(duì)于 Ansible playbook 來(lái)說(shuō)的。當(dāng)我們需要快速的完成一些任務(wù)而不需要將執(zhí)行的命令保存下來(lái)勿侯,這樣的命令就稱(chēng)為ad-hoc命令箍土。

Ansible提供兩種方式去執(zhí)行任務(wù):一種是ad-hoc 命令,另一種是寫(xiě) Ansible playbook罐监。前者可以處理一些簡(jiǎn)單的任務(wù),而后者需要處理比較復(fù)雜的任務(wù)瞒爬。ad-hoc命令與playbook的關(guān)系類(lèi)似于在命令行敲入的shell命令和shell scripts之間的關(guān)系弓柱。

ad-hoc命令雖然簡(jiǎn)單,但也展示出了Ansible的強(qiáng)大功能侧但,并且也有很多使用場(chǎng)景矢空,比如在多個(gè)遠(yuǎn)程主機(jī)上快速執(zhí)行一次性的任務(wù),或者想測(cè)試某個(gè)模塊的行為以決定是否要加入到playbook中等等禀横。

單個(gè)ad-hoc命令介紹

下面介紹一下ad-hoc命令如何使用屁药,ad-hoc命令的格式如下:

$ ansible[pattern]-m[module]-a"[module options]"

舉個(gè)例子:

$ ansibledevops-mfile-a"path=/mnt/1.txt state=touch"

這個(gè)格式包含四個(gè)主要部分:

ansible:ad-hoc命令是通過(guò)ansible執(zhí)行的,類(lèi)似于ansible-playbook執(zhí)行playbook腳本柏锄。

pattern:指定該命令要在哪些管理節(jié)點(diǎn)或者哪組管理節(jié)點(diǎn)上執(zhí)行酿箭,比如例子中的devops主機(jī)組。選擇管理節(jié)點(diǎn)或者主機(jī)組的方式有很多種趾娃,在后面章節(jié)會(huì)有介紹缭嫡。

-m [module]:指定該命令要執(zhí)行哪個(gè)模塊,比如例子中的file模塊抬闷。ansible中自帶許多模塊妇蛀,通過(guò)命令或playbook在遠(yuǎn)程管理節(jié)點(diǎn)上執(zhí)行耕突。

-a [module options]:指定該模塊執(zhí)行時(shí)所需要的選項(xiàng),比如例子中的"path=/mnt/1.txt state=touch"评架。每個(gè)模塊都包含很多功能眷茁,通過(guò)傳入不同的選項(xiàng)執(zhí)行具體的操作。

例子的含義就是:在devops主機(jī)組中通過(guò)file模塊創(chuàng)建一個(gè)路徑為/mnt/1.txt的文件纵诞。

上面格式只列出里ansible命令的幾個(gè)參數(shù)上祈,其他的更多參數(shù)可以通過(guò)執(zhí)行ansible --help命令查看。

[root@controll-node ~]# ansible --help

usage: ansible [-h] [--version] [-v] [-b] [--become-method BECOME_METHOD]

? ? ? ? ? ? ? [--become-user BECOME_USER] [-K] [-i INVENTORY] [--list-hosts]

? ? ? ? ? ? ? [-l SUBSET] [-P POLL_INTERVAL] [-B SECONDS] [-o] [-t TREE] [-k]

? ? ? ? ? ? ? [--private-key PRIVATE_KEY_FILE] [-u REMOTE_USER]

? ? ? ? ? ? ? [-c CONNECTION] [-T TIMEOUT]

? ? ? ? ? ? ? [--ssh-common-args SSH_COMMON_ARGS]

? ? ? ? ? ? ? [--sftp-extra-args SFTP_EXTRA_ARGS]

? ? ? ? ? ? ? [--scp-extra-args SCP_EXTRA_ARGS]

? ? ? ? ? ? ? [--ssh-extra-args SSH_EXTRA_ARGS] [-C] [--syntax-check] [-D]

? ? ? ? ? ? ? [-e EXTRA_VARS] [--vault-id VAULT_IDS]

[--ask-vault-pass |--vault-password-fileVAULT_PASSWORD_FILES]

? ? ? ? ? ? ? [-f FORKS] [-M MODULE_PATH] [--playbook-dir BASEDIR]

? ? ? ? ? ? ? [-a MODULE_ARGS] [-m MODULE_NAME]

? ? ? ? ? ? ? pattern

Define and run a single task'playbook'against asetof hosts

positional arguments:

? pattern ? ? ? ? ? ? ? host pattern

......

默認(rèn)模塊command

ansible中的模塊很多挣磨,這里只說(shuō)一下command模塊雇逞,因?yàn)樗莂nsible命令行工具的默認(rèn)模塊,也就是說(shuō)茁裙,在執(zhí)行ansible命令時(shí)塘砸,可以不用傳入-m參數(shù)指定模塊名。比如:

#將devops主機(jī)組的服務(wù)器重啟

$ ansibledevops-a"/sbin/reboot"

command模塊的功能是有限的晤锥,該模塊不支持shell語(yǔ)法掉蔬,比如管道符、重定向矾瘾、$PATH女轿、$HOME變量等。如果我們的命令里需要使用shell語(yǔ)法壕翩,就要使用shell模塊蛉迹,這里要注意的是選項(xiàng)里單引號(hào)的用法(單引號(hào)獲取的是管理節(jié)點(diǎn)的變量,雙引號(hào)獲取的是控制節(jié)點(diǎn)的變量)放妈。從下面示例中也可以看出北救。

#這里獲取的是管理節(jié)點(diǎn)的變量

[root@controll-node ~]# ansible devops -m shell -a 'echo $HOSTNAME'

118.195.199.238 | CHANGED |rc=0>>

manage-node

#這里獲取的是控制節(jié)點(diǎn)的變量

[root@controll-node ~]# ansible devops -m shell -a "echo $HOSTNAME"

118.195.199.238 | CHANGED |rc=0>>

controll-node

舉幾個(gè)具體的實(shí)例

①管理組和用戶(hù)

利用group模塊管理用戶(hù)組,包括創(chuàng)建芜抒、刪除用戶(hù)組珍策,通過(guò)下面的命令創(chuàng)建devops用戶(hù)組:

$ ansibledevops-mgroup-a"name=devops state=present"


利用user模塊管理用戶(hù),包括創(chuàng)建宅倒、刪除和修改用戶(hù)屬性等攘宙,通過(guò)下面命令創(chuàng)建用戶(hù)devops,并將其添加到devops組中拐迁。

$ ansibledevops-muser-a'name=devops password=$6$.evG1Z/VuVrACjw.$ZrxtGWn3NCaFNGbR3195bEQgU5insiI1.H/0Sho/iIl2o1kcGka04bDA.rUPtd0pIHhfxnunAIeotzYynEqSs1 groups=devops'

②管理文件

可以利用file模塊管理文件蹭劈、目錄和鏈接,包括創(chuàng)建线召、刪除和修改屬性链方。下面通過(guò)ad-hoc命令在devops主機(jī)組創(chuàng)建一個(gè)文件,命令如下:

$ ansibledevops-mfile-a"path=/mnt/1.txt state=touch"


從結(jié)果可以看出文件創(chuàng)建成功了灶搜。默認(rèn)情況下祟蚀,ansible使用的是當(dāng)前登錄用戶(hù)工窍,那么如何用另一個(gè)用戶(hù)執(zhí)行該任務(wù)呢?ansible提供了-u選項(xiàng)指定用戶(hù)前酿。假如我們想用devops賬號(hào)創(chuàng)建該文件呢患雏,命令如下:

$ ansibledevops-mfile-a"path=/mnt/2.txt state=touch"-u devops


結(jié)果失敗了,從錯(cuò)誤信息里可以看出是沒(méi)有在/mnt下創(chuàng)建文件的權(quán)限罢维,下面我們使用sudo創(chuàng)建文件淹仑。注意:請(qǐng)確保devops用戶(hù)在sudo的組里,如果沒(méi)有肺孵,將其添加到/etc/sudoers文件中匀借,可使用visudo命令添加。在ansible中使用--become選項(xiàng)來(lái)使用sudo平窘。

$ ansibledevops-mfile-a"path=/mnt/2.txt state=touch"-u devops --become


結(jié)果又失敗了吓肋,從錯(cuò)誤信息可以看出是缺少sudo的密碼。ansible提供了--ask-become-pass選項(xiàng)輸入sudo的密碼瑰艘。

$ ansibledevops-mfile-a"path=/mnt/2.txt state=touch"-u devops --become --ask-become-pass


輸入sudo密碼后是鬼,這次終于成功了。

③管理軟件

有時(shí)候需要在管理節(jié)點(diǎn)上安裝軟件紫新,比如安裝Git均蜜,就可以利用Linux的包管理器模塊進(jìn)行安裝,CentOS平臺(tái)是yum模塊芒率,可以通過(guò)下面的命令進(jìn)行安裝:

$ ansibledevops-myum-a"name=git state=present"


如果要卸載軟件囤耳,只需要修改參數(shù)中的state值為absent即可,完整命令如下:

$ ansibledevops-myum-a"name=git state=absent"


好了偶芍,ad-hoc命令的使用場(chǎng)景先介紹到這里紫皇,更詳細(xì)的用法可以在模塊介紹里面查找。

總結(jié)

這一節(jié)介紹了ad-hoc命令的用法并通過(guò)幾個(gè)例子介紹了幾個(gè)常用的使用場(chǎng)景腋寨。可以看出化焕,ad-hoc命令就是一條簡(jiǎn)單而具體的任務(wù)萄窜,既不能保存命令也不能存儲(chǔ)結(jié)果,復(fù)雜的業(yè)務(wù)邏輯更是處理不了撒桨。而這些就需要ansible另一個(gè)強(qiáng)大的功能playbook完成的查刻,并且在使用Ansible過(guò)程中基本上就是編寫(xiě)playbook來(lái)處理復(fù)雜的場(chǎng)景。下一節(jié)詳細(xì)介紹一下inventory凤类,看看如何更好的管理主機(jī)穗泵。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谜疤,隨后出現(xiàn)的幾起案子佃延,更是在濱河造成了極大的恐慌现诀,老刑警劉巖履肃,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仔沿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡尺棋,警方通過(guò)查閱死者的電腦和手機(jī)封锉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)膘螟,“玉大人成福,你說(shuō)我怎么就攤上這事【2校” “怎么了奴艾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)脊阴。 經(jīng)常有香客問(wèn)我握侧,道長(zhǎng),這世上最難降的妖魔是什么嘿期? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任品擎,我火速辦了婚禮,結(jié)果婚禮上备徐,老公的妹妹穿的比我還像新娘萄传。我一直安慰自己,他們只是感情好蜜猾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布秀菱。 她就那樣靜靜地躺著,像睡著了一般蹭睡。 火紅的嫁衣襯著肌膚如雪衍菱。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天肩豁,我揣著相機(jī)與錄音脊串,去河邊找鬼。 笑死清钥,一個(gè)胖子當(dāng)著我的面吹牛琼锋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祟昭,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼缕坎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了篡悟?” 一聲冷哼從身側(cè)響起谜叹,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤匾寝,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后叉谜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體旗吁,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年停局,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了很钓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡董栽,死狀恐怖码倦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锭碳,我是刑警寧澤袁稽,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站擒抛,受9級(jí)特大地震影響推汽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜歧沪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一歹撒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诊胞,春花似錦暖夭、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至邪码,卻和暖如春裕菠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闭专。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工奴潘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喻圃。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像粪滤,于是被迫代替她去往敵國(guó)和親斧拍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容