一.前言
在企業(yè)中運維工作人員通常需要同時管理幾十臺甚至幾百臺主機(虛擬機)榔幸,如果需要批量修改設(shè)置或者做更新操作的話,即便是事先編寫好腳本矮嫉,一臺一臺的去運行腳本也是非常耗時的削咆,效率也十分低下。所以這時候我們需要可以在一臺主機上蠢笋,同時操作拨齐、控制多臺其他主機的運維工具。
目前主流的工具很多挺尿,基本可以分為兩類
1奏黑、agent:需要事先在被管控主機上安裝一個小的程序,用于接受和控制遠端主機编矾,代表軟件有puppet熟史、func。這類軟件運行起來比較安全窄俏,但是需要提前部署代理程序蹂匹,當(dāng)主機很多的時候會比較麻煩
2、agentless:不需要代理程序凹蜈,而是直接使用ssh協(xié)議連接限寞、控制被管控主機,后者只需要開啟SSH服務(wù)就可以了仰坦,代表軟件有farbic履植,ansible。這種軟件比較方便悄晃,但是不太安全玫霎,畢竟要遠程使用管理員賬戶登錄,所以通常管控主機要使用有sudo權(quán)限的普通賬戶進行操作妈橄。
=======================================================
二.ansible的一些基礎(chǔ)****概念
ansible的公司成立于2012年庶近,目前已經(jīng)被紅帽以1.5億美元的價格收購了。雖然ansible作為一款開源軟件面世的時間不長眷蚓,但是卻十分好用鼻种,它既兼具了puppet的一部分功能,也有fabric的部分功能沙热,而且叉钥,只要有SS協(xié)議,它就可以工作篙贸,非常的輕量化沼侣,但是正因為基于SSH工作,所以它無法同時處理過多的主機歉秫,一般用在千臺以下的環(huán)境蛾洛。
ansible有以下一些特性:
1、模塊化雁芙,ansible本身非常輕量轧膘,通過調(diào)用特定的模塊來完成不同的任務(wù)
2、基于Python語言實現(xiàn)兔甘,由Paramiko谎碍,PyYAML和jinja2三個關(guān)鍵模塊實現(xiàn)。
3洞焙、部署簡單蟆淀、agentless
4拯啦、主從模式工作
5、支持自定義模塊
6熔任、支持playbook褒链,批量執(zhí)行一串任務(wù)
<wbr>而且ansible還要有冪等性:即同樣的命令重復(fù)執(zhí)行多次,不會出現(xiàn)問題疑苔。
ansible包含以下幾個模塊:
1甫匹、ansible core: ansible自己的核心
2、host inventory: 被管控主機列表惦费,只要將能通信的主機列在這個文件里兵迅,ansible就可以管控
3、connection plugins:鏈接插件薪贫,用于與每一個被管控主機建立會話并發(fā)送控制指令
4恍箭、modules:包含兩類模塊:core modules 核心模塊;custom modules 自定義模塊瞧省。
5季惯、playbooks: 設(shè)定一個流程化腳本,讓多個ansible任務(wù)按順序執(zhí)行臀突。
ansible可以通過yum自動安裝勉抓,但是它在epel源中。
ansible的主配置文件是 /etc/ansible/ansible.cfg
Host inventory : /etc/ansible/hosts <wbr> <wbr> <wbr>用于定義被管控的主機列表候学,它的格式是這樣的
這個文件使用的是INI風(fēng)格的藕筋,可以直接寫主機名,IP地址梳码;也可以設(shè)置一個組隐圾,向組中加入多個主機,并且一個主機還可以同時屬于不同的組掰茶;還可以在域名中直接調(diào)用組里的主機名暇藏。不過通常可以不用寫的那么復(fù)雜濒蒋。
=======================================================
三.ansible的常用命令
ansible-doc -l : 列出常用的模塊文檔列表盐碱。ansible支持超多的模塊,可以使用這個命令找到自己想要使用的對應(yīng)模塊沪伙。
ansible-doc -s 模塊名稱: 查看某一個模塊支持的具體參數(shù) <wbr>
示例:
ansible-doc -s ping:查看ping命令的詳細幫助
接下來寫一些常用模塊瓮顽,在這之前先做一些準(zhǔn)備工作
1、我的/etc/ansible/hosts配置是這樣的
2.由于ansible是基于ssh管理被管控主機围橡,所以需要配置ssh基于秘鑰認(rèn)證進行連接暖混,否則每次發(fā)送一個管控命令都會提示輸入ssh的用戶密碼。
ssh-keygen -t rsa -P '' <wbr>
ssh-copy-id -i .ssh/id_rsa.pub root@172.16.26.1
由于有7被管控個主機翁授,同樣的命令要敲7次拣播,本來想弄個腳本解決晾咪,但是由于傳送秘鑰的時候需要交互輸入對端用戶密碼,我不會解決這個問題贮配,所以就沒做 <wbr>- - # .....
<wbr> <wbr>
command模塊:對被管控主機做一些操作命令谍倦,并將各主機上的結(jié)果輸出回ansible主機上。
示例:ansible all -m command -a ‘ifconfig ’
注:all的含義是:操作對象為所有hosts文件中的主機和組牧嫉,-m的含義是調(diào)用模塊,而command是默認(rèn)模塊减途,如果不添加-m選項的話默認(rèn)就為command酣藻,而且command只支持一些簡單的命令块促,不支持管道符龄句,如果想用管道符谎倔,要使用shell模塊
user模塊:可以快速在被管控主機上批量添加用戶
示例:ansible all -m user -a 'name=ly state=present' <wbr>
常用參數(shù):
state=present <wbr> : 創(chuàng)建用戶
home= <wbr> <wbr> :來指定用戶家目錄路徑镰吆;
system=true <wbr> :創(chuàng)建系統(tǒng)用戶
uid= ** <wbr>:** 來指定用戶uid
shell= <wbr> <wbr> <wbr> :指定用戶的默認(rèn)shell
如果執(zhí)行成功如上圖帜羊,其中changed為被控主機確實發(fā)生了更改凭涂,即断傲,之前沒有該用戶败徊,現(xiàn)在已經(jīng)創(chuàng)建辟拷。如果同樣的命令再執(zhí)行一次會怎么樣撞羽?
雖然當(dāng)前執(zhí)行結(jié)果也成功了,但是兩臺被控主機并未發(fā)生任何變化衫冻,即诀紊,他們之前就已經(jīng)存在了ly用戶
刪除用戶:
ansible all -m user -a 'name=ly state=absent remove=true'
state=absent : 刪除用戶
remove=true : 刪除用戶家目錄!
group模塊
和user類似隅俘,用于創(chuàng)建系統(tǒng)組
示例:ansible all -m group -a ‘name=go state=present gid=5001 system=true’
system=true <wbr>: <wbr> 創(chuàng)建一個系統(tǒng)組
如果要刪除該組邻奠,只需要將state=present改成absent就可以了
cron模塊
為被管控主機在crontab -e列表中添加計劃任務(wù)
示例:ansible all -m cron -a “minute='/5' job='/usr/sbin/ntpdate 172.16.0.1 &> /dev/null' name='sync time' state='present'"*
為所有被管控主機添加一條計劃任務(wù),每5分鐘向172.16.0.1同步一次系統(tǒng)時間
name= <wbr> <wbr> <wbr> <wbr> :表示工作名稱
job= <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> :表示具體運行什么命令
hour=* <wbr> <wbr> <wbr> <wbr> <wbr>: 每小時
day=* <wbr> <wbr> <wbr>: <wbr> 每天
month=3 <wbr> <wbr>: 3月
weekday=3 <wbr> : 周三
file模塊
為被管控主機創(chuàng)建新文件
示例:ansible all -m file -a 'path=/tmp/test.txt state=touch owner=user1 mode=600'
在/tmp下創(chuàng)建一個叫test.txt的普通文件为居,屬主為user1碌宴,權(quán)限為600
mode= <wbr> <wbr> <wbr> : 文件權(quán)限
group= <wbr> <wbr> <wbr>: 文件屬組
state=touch:創(chuàng)建普通文件
state=directory: 創(chuàng)建目錄
state=link <wbr> :創(chuàng)建一個軟連接,還要使用src=/etc/passwd參數(shù)來指定源文件蒙畴。
state=hard <wbr>: 創(chuàng)建一個硬鏈接贰镣,和上面一樣也要使用src參數(shù)
state=absent:刪除文件
yum模塊
為被管控主機用yum安裝軟件
示例:ansible all -m yum -a 'name=httpd state=present'
為所有管控主機安裝httpd,各管控主機默認(rèn)從自己的base源中進行安裝
state=latest <wbr> <wbr> : 為某個包做更新操作
enablerepo= <wbr> <wbr> :啟動某個倉庫源
disablerepo= <wbr> <wbr> :禁用某個倉庫源
copy模塊
為被管控主機執(zhí)行復(fù)制操作
示例:ansible all -m copy -a 'src=/etc/fstab dest=/tmp/fstab owner=ly group=ly mode=600'
讓所有被管控主機復(fù)制管控主機的/etc/fstab文件到被管控主機的/tmp/fstab膳凝,屬主屬組為ly八孝,權(quán)限為600
content=123 <wbr> :將‘123’復(fù)制到dest=字段指定的文件中,會覆蓋目標(biāo)文件的所有內(nèi)容鸠项,基本就是遠程輸出重定向的意思干跛。而且和src=參數(shù)不能一起用。
service
可以管理被管控主機上的各種服務(wù)程序祟绊,從簡單的開啟和關(guān)閉楼入,到 在不同級別下是否開機自動啟動等都可以操作
示例:ansbile all -m service -a 'name=httpd state=started ' <wbr>
這個主機啟動失敗的原因是80端口被占用了哥捕,我在上面跑著haproxy
另一個示例
ansible all -m service -a 'name=httpd runlevel=5 enabled=true'
在級別5下,自動啟動httpd服務(wù)
script
這個模塊非常有用嘉熊,可以把本地的腳本在各被管控主機上跑一遍遥赚,我可以現(xiàn)在本地主機的/root目錄下建立一個腳本123.sh,然后運行:
ansible <wbr>all -m script -a '/root/123.sh'
shell : <wbr>
直接在被管控主機上啟動一個子shell進程來運行命令阐肤,可以支持絕大多數(shù)的shell命令凫佛,包括管道符
ansible all -m shell -a "echo $RANDOM | tr <wbr>'0-9' 'a-z' > /root/123"
其實上面大多數(shù)操作都可以直接使用shell完成,不過用shell返回的信息并不太詳細孕惜。
=======================================================
四.ansible的playbook
雖然ansible可以同時操作很多個主機愧薛,但是如果有些命令可以批量執(zhí)行,而不用一條一條的打的話其實會更加理想衫画,而ansible的playbook就提供了這樣的功能毫炉,它其實也是一種類型的腳本,核心元素有這幾個:
1削罩、Tasks <wbr>: 任務(wù)
2瞄勾、varibales :變量
3、Templates:模板
4弥激、Handlers:觸發(fā)器
5进陡、Roles:規(guī)則
而它的代碼組織格式為YAML,它是一種編程語言微服,誕生于2001年四濒,類似于xml這種半結(jié)構(gòu)化語句,但是它并不需要那么多標(biāo)簽职辨,所以很適合用于配置盗蟆。
playbook的基本格式:
- hosts:172.16.26.1 <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr># <wbr>指定要操作的主機
<wbr> <wbr> <wbr> <wbr>vars : <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr># <wbr>指定變量
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> var1:
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> var2:
<wbr> <wbr> <wbr> <wbr>tasks: <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> # <wbr>指定任務(wù)
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> - name: <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr># <wbr>指定任務(wù)名字
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> shell : <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> # 具體的操作命令
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> - name:
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> command <wbr>: <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>
<wbr> <wbr> <wbr> <wbr>handlers: <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr>
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr>- name :
<wbr> <wbr> <wbr> <wbr>remote_user: <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr># 在被管控主機上執(zhí)行這些任務(wù)的用戶,也可以使用sudo
host:172.16.26.2
host:172.16.26.3
舉個栗子
-name 后是自定義的名字舒裤,用來標(biāo)識不同的任務(wù)喳资。
定義好playbook后,使用ansible-playbook 123.yml 來啟動
ansible會先獲取主機上的FACTS變量腾供。然后開始一項一項的執(zhí)行定義好的任務(wù)仆邓。OK則說明
其中OK則代表有三項任務(wù)執(zhí)行成功,但是沒發(fā)生任何改變伴鳖;
changed則也表示成功节值,但是被管控主機做出了變化,比如本來沒有httpd榜聂,通過劇本安裝了httpd搞疗,狀態(tài)就會發(fā)生改變,則為changed须肆。
failed=1 就是某個task執(zhí)行失敗了匿乃,這里失敗的原因是我的playbook中的命令寫錯了 - -# 桩皿。
上面的playbook中只有一個hosts字段,我們也可以設(shè)置多個hosts幢炸,分別設(shè)置不同的任務(wù)泄隔,如果一臺主機在多個hosts字段中都存在,會按hosts字段的順序執(zhí)行宛徊,即最后task中做的設(shè)置會生效佛嬉。
剛才的playbook中只是最基本的一些設(shè)置,其實還有一個重要的元素是變量闸天,playbook中的變量和其他語言中的變量類似暖呕,只能使用字母、數(shù)字和下劃線組成号枕,并僅能以字母開頭缰揪。
ansible中包含以下幾種變量:
1陨享、facts變量
2葱淳、自定義變量
3、主機變量
4抛姑、組變量
5赞厕、一些啟動參數(shù)
什么是facts變量呢?
facts簡單來說就是由被管控主機返回來的自身的一些屬性信息定硝,比如ip地址皿桑,系統(tǒng)版本,硬件信息等蔬啡,他們被存在ansible的facts變量中诲侮,可以使用 ansbile all -m setup 命令來手動查看facts變量
facts是系統(tǒng)變量,不需要聲明就可以直接調(diào)用箱蟆,如果要使用自定義變量的話沟绪,需要提前聲明,聲明有兩種方法空猜,命令行和roles:
可以用playbook命令時绽慈,使用參數(shù)的方式來來聲明,比如
ansible-playbook 123.yml --extra-vars "host=www user=ly"
這就聲明了兩個變量:host與user
roles的話辈毯,下小節(jié)再說吧坝疼。
主機變量:定義在host inventory中(就是/etc/ansible/hosts) 中的主機之后的變量,
組變量:定義在host inventory中(就是/etc/ansible/hosts) 中的組后面的變量
啟動參數(shù):也是定義在定義在host inventory中(就是/etc/ansible/hosts) 中的主機之后的谆沃,但是并不是自定義的變量钝凶,更像一些參數(shù)。
其中NUM是我自己定義的變量唁影,后邊三個則是ansible內(nèi)置的一些參數(shù)
ansible_ssh_user=root <wbr> <wbr> <wbr> <wbr> <wbr> # 用于連接ssh的賬戶
ansible_ssh_pass= <wbr> <wbr> <wbr> <wbr> <wbr> <wbr># <wbr> <wbr>連接ssh時使用的密碼腿椎,如果事先沒有設(shè)置秘鑰認(rèn)證桌硫,這個選項就很必要!
ansible_ssh_port= <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> # 有些主機更改了ssh監(jiān)聽的端口啃炸,這個選項就很有用铆隘。
如何在playbook中定義并使用變量?
只需要加入vars字段南用,并在下面直接聲明就可以了膀钠;調(diào)用的時候要加雙大括號
這時候又有一個問題:如果我在命令行中傳遞了一樣的變量username,和playbook中的變量沖突了裹虫,哪個生效肿嘲?肯定是命令行中定義的變量生效,命令行定義的值會覆蓋playbook中寫死的變量值筑公。
playbook中除了變量以外雳窟,還可以添加條件變量,在某task后面添加when子句即可實現(xiàn)條件測試功能匣屡;when語句支持jinja2語法封救;
ansible_os_family : 內(nèi)置變量,保存了唄管控主機的系統(tǒng)類型捣作。
當(dāng)被管控主機是Debian時誉结,才執(zhí)行install web package這個tasks。
skipping表示任務(wù)直接跳過了券躁,沒有執(zhí)行惩坑,因為我的c6組中的主機都是CentOS 6。
ansible中還有一種迭代變量也拜,用起來也十分簡單:
httpd以舒、php、php-mysql會按順序輪流替換上方的item變量進行安裝慢哈。
handlers:類似一個觸發(fā)器蔓钟,可以監(jiān)控在某一個tasks中的name字段上,一旦這個name在執(zhí)行發(fā)生了改變岸军,即標(biāo)注了change奋刽,則就會觸發(fā)handlers,并執(zhí)行handlers中定義的命令艰赞。
notify字段類似一個監(jiān)控器佣谐,可以監(jiān)控某個任務(wù),一旦該任務(wù)狀態(tài)為change方妖,則觸發(fā)handlers狭魂,注意notify后的名字一定要和handlers的名字對應(yīng)上,然后執(zhí)行handlers里預(yù)先定義的任務(wù),圖中為重啟httpd服務(wù)雌澄。
圖中的大體含義是:首先安裝httpd斋泄,然后復(fù)制管控主機上的定制好的配置文件到所有被管控主機上,如果復(fù)制配置文件這一步為changed镐牺,就會觸發(fā)handlers炫掐,即重啟httpd服務(wù)讓復(fù)制過去的配置文件生效。然后無論是否觸發(fā)了handler睬涧,都要嘗試啟動httpd服務(wù)募胃。
這樣設(shè)置的好處就在于,只有修改了配置文件的主機才會重啟httpd服務(wù)畦浓,而不會影響到其他未發(fā)生變化的主機痹束。
templates <wbr>
剛才我們有一步復(fù)制了一個本地已經(jīng)定義好的配置文件到被管控主機上作為被管控主機上的,但是如果被管控主機各自需要的配置不相同怎么辦讶请?比如說祷嘶,4臺被管控主機都是httpd服務(wù)器,但是需要監(jiān)聽的端口不一樣夺溢,我們?nèi)绻驯镜氐呐渲梦募?fù)制給它們论巍,那它們的配置文件都一樣,勢必監(jiān)聽的端口也都一樣企垦,這時要如何處理环壤?這時候就可以使用templates功能晒来。
templates使用jinja2風(fēng)格的語法钞诡,我們可以先在/etc/ansible/hosts上為不同的主機各自定義不同的變量,比如:
然后修改本地/root/httpd.conf的listen字段湃崩,并給他改名為荧降?/root/httpd.conf.j2,把它做成一個真正的模板文件攒读。
接下來再修改b.yml朵诫,把copy任務(wù)換成template字段,把源改為/root/httpd.conf.j2
接下來運行ansible-playbook b.yml薄扁, 每個主機會自動用httpd.conf.j2這個模板文件生成自己的配置文件剪返,并用自己的port變量替換掉模板中的{{ port }}字段。
這里172.16.26.104這臺主機失敗了邓梅,是由于我之前并沒有為它配置port變量導(dǎo)致的脱盲。另外3個則配置成功了。讓我們看一下另外三臺主機監(jiān)聽的端口日缨。
和我們剛才設(shè)定的變量值一模一樣钱反,我們也可以使用更多的變量來替換模板中的固定內(nèi)容,讓同一批被管控主機可以分別擁有自己的個性化配置。
=======================================================
五.roles <wbr>
roles可以把一個完整playbook中的元素分拆面哥,以層級結(jié)構(gòu)分別放到磁盤中特定的位置保存起來哎壳,然后可以讓不同的hosts靈活的調(diào)用這些被分拆的元素代碼,重新組合成一個新的臨時playbook來運行尚卫。
我們可以在/etc/ansible/roles目錄下建立多個不同的目錄归榕,給它們?nèi)∩喜煌拿郑總€roles目錄下可以以文件的方式存放不同的元素(tasks吱涉,variables蹲坷,handlers等),然后在playbook中直接調(diào)用roles目錄的名字邑飒,就可以自動執(zhí)行roles目錄下的所有元素循签。roles目錄類似于一個存放在磁盤上的函數(shù),里面包含了很多元素疙咸,需要使用的時候县匠,直接調(diào)用roles目錄的目錄名就可以運行目錄下的所有元素。
比如撒轮,我們在/etc/ansible/roles目錄下建立一個目錄乞旦,叫test,然后在test目錄下建立多個子目錄:files/,
tasks/,handlers,vars,meta题山。
files/:此roles下用到的所有文件均可放置于此目錄中
templates/: jinja2模板文件存放位置
tasks/:任務(wù)列表文件兰粉; 可以有多個文件,但至少有一個叫做main.yml的文件顶瞳。
vars/:變量字典文件玖姑,用于自定義多個變量,上小節(jié)說的通過role傳遞變量就是指這里慨菱; <wbr>可以有多個文件焰络,但至少有一個叫做main.yml的文件。
handlers/ : 處理器列表文件符喝; <wbr>可以有多個文件闪彼,但至少有一個叫做main.yml的文件。
meta/ : 此roles的特殊設(shè)定及依賴關(guān)系等
我們可以現(xiàn)在/etc/ansible/roles下創(chuàng)建幾個目錄:
mkdir testrole/{meta协饲,files畏腕,templates,tasks茉稠,vars,handlers} <wbr> <wbr> #這些目錄并非都是必須的
如果我們需要定義變量的話描馅,可以在vars目錄下創(chuàng)建一個main.yml的文件,然后進行定義
定義兩個變量战惊,user=ly <wbr>group=ly
然后在tasks目錄下創(chuàng)建main.yml來定義任務(wù)列表流昏。
圖例的配置和剛才的b.yml劇本幾乎一樣扎即,但是注意在roles中,handler不能再和tasks放在一起了况凉,要單獨定義在handlers目錄中谚鄙;而且template處指定的源是一個相對路徑,相對路徑就是roels/testrole/templates這個目錄中刁绒,所以我們把所有的j2配置模板放在這里就好闷营。
我們在handlers目錄中建立一個文件main.yml
注意這里的name還是要和notify監(jiān)控字段指定的名字要一樣,否則當(dāng)我們有多個handler的時候知市,notify不知道我們要激活哪一個handler傻盟。
然后把之前的/root/httpd.conf.j2復(fù)制到roles/testrole/templates目錄下,然后修改一下這個j2模板文件嫂丙,讓他們能利用上我們之前在vars/main.yml中定義的兩個變量:
現(xiàn)在一個role就設(shè)置完畢了娘赴,我們?nèi)绻胍{(diào)用這個role,需要在/etc/ansible下創(chuàng)建一個playbook文件
testrole是我們之前在roles目錄下創(chuàng)建的那個子目錄名字跟啤,調(diào)用這個目錄名字诽表,就可以調(diào)用這個目錄下所有我們剛才定義好的元素。
注意:如果確定要調(diào)用roles話隅肥,playbook文件盡量放在/etc/ansible目錄下竿奏,否則容易出現(xiàn)一些小問題。
然后運行我們剛剛創(chuàng)建好的腳本文件
運行基本沒有問題腥放。
注意泛啸,roles下的層級結(jié)構(gòu)一定要遵循規(guī)范,否則無法成功調(diào)用
tags:標(biāo)簽
有的role中可能有很多個task任務(wù)秃症,如果我們只想運行role中的某一個task候址,而不想所有task都運行一遍怎么辦?
可以給task加上不同的標(biāo)簽伍纫,用來標(biāo)識不同的task宗雇,然后我們在運行playbook的時候昂芜,可以用-t 選項指定標(biāo)簽莹规,來運行我們指定的任務(wù),而不是所有role中的任務(wù)全都跑一遍泌神。比如良漱,修改testrole/tasks/main.yml
給修改配置文件的步驟添加一個標(biāo)簽,然后運行
ansible-playbook -t conf abc.yml
此時只會運行role中的其中一個task欢际,而不會所有的task全跑一遍母市。
=======================================================
六.總結(jié)
1、ansible安裝包在epel源中损趋,如果想通過yum安裝患久,需要配置好epel源
2、ansible裝好后需要先配置被管控主機列表/etc/ansible/hosts;而且最好先把管控主機的秘鑰傳給所有被管控主機
3蒋失、除了shell模塊以外返帕,大多數(shù)的模塊最基本的格式都是name=XX state=present|absent <wbr>
4、playbook和roles用法很類似篙挽,只不過roles要分散設(shè)置各各不同的元素荆萤。而且同一個playbook可以調(diào)用多個roles,所以當(dāng)很多tasks等元素需要大量復(fù)用時可以考慮roles