前言
ansible是一款很強(qiáng)大的運(yùn)維工具, 隨著微服務(wù)和devops的加強(qiáng),有效的利用ansible可以大大提高運(yùn)維效率
安裝
mac上安裝ansible非常簡單
brew instsall ansible
安裝完成后,可以執(zhí)行ansible --version來查看信息, 可以看到我們安裝的ansible版本是2.4.2.0
配置文件
創(chuàng)建一個(gè)ansible的文件夾,然后添加文件ansible.cfg, 里面配置的ansible的基本配置,在這個(gè)目錄下執(zhí)行ansible命令, 默認(rèn)是讀取的這個(gè)文件里面的內(nèi),讀取配置文件的順序是:
* ansible.cfg (in the current directory)
* ANSIBLE_CONFIG (an environment variable)
* .ansible.cfg (in the home directory)
* /etc/ansible/ansible.cfg
inventory目錄
創(chuàng)建inventory目錄, 里面加入hosts文件,來對(duì)機(jī)器進(jìn)行管理和設(shè)置。在運(yùn)行的時(shí)候 通過 ansible -i inventory 來進(jìn)行指定,ansible會(huì)讀取里面的hosts文件,另外可以定義 host_vars和group_vars目錄, 來根據(jù)主機(jī)和組來定義變量,使得變量更加靈活。
role.yml文件
role.yml是一個(gè)入口文件,ansible-playbook命令可以通過-e傳入?yún)?shù)到role.yml里面,然后role.yml根據(jù)傳入的參數(shù),執(zhí)行對(duì)應(yīng)的roles文件夾里面的項(xiàng)目:
例子:
ansible-playbook -i inventory -e target=all -e role=ping role.yml
上面的命令,表示讀取inventory文件夾里面的hosts,把role.yml里面的target替換成all,把role替換成ping,來進(jìn)行執(zhí)行。
roles目錄
這個(gè)目錄下面把不同的操作按子目錄進(jìn)行分離,通過上面的role傳入的參數(shù),選擇對(duì)應(yīng)名稱的子目錄,比如上面role=ping,則就在下面找到ping的目錄,進(jìn)行后續(xù)對(duì)應(yīng)的操作。
后面的操作常用的主要有
- tasks 表示執(zhí)行的任務(wù)
tasks是從上到下順序執(zhí)行,如果中間發(fā)生錯(cuò)誤,那么整個(gè)playbook會(huì)中止。你可以改修文件后,再重新執(zhí)行。
每一個(gè)task的對(duì)module的一次調(diào)用。使用不同的參數(shù)和變量而已。
每一個(gè)task最好有name屬性,這個(gè)是供人讀的,沒有實(shí)際的操作。然后會(huì)在命令行里面輸出,提示用戶執(zhí)行情況。
- handlers 表示相應(yīng)的事件
Handlers里面的每一個(gè)handler,也是對(duì)module的一次調(diào)用。而handlers與tasks不同,tasks會(huì)默認(rèn)的按定義順序執(zhí)行每一個(gè)task,handlers則不會(huì),它需要在tasks中被調(diào)用,才有可能被執(zhí)行。
Tasks中的任務(wù)都是有狀態(tài)的,changed或者ok。 在Ansible中,只在task的執(zhí)行狀態(tài)為changed的時(shí)候,才會(huì)執(zhí)行該task調(diào)用的handler,這也是handler與普通的event機(jī)制不同的地方。
- templates 表示模版文件,模版中可以使用對(duì)應(yīng)的變量,讀取vars里面的變量
- vars 表示變量文件,可以定義變量
- files 定義文件
學(xué)習(xí)
可以通過具體的例子來進(jìn)行學(xué)習(xí), 好的學(xué)習(xí)例子就是官方提供的example
地址: https://github.com/ansible/ansible-examples