一.安裝
#] yum -y install ansible
一.ansible簡(jiǎn)介
要求ansible可以無密碼連接受控節(jié)點(diǎn)(Control node)(也可以使用用戶名,密碼管理),受控節(jié)點(diǎn)無需安裝任何客戶端
- 控制節(jié)點(diǎn)(Control node)
指安裝了Ansible的主機(jī),也叫Ansible服務(wù)器端,管理機(jī)。 Ansible控制節(jié)點(diǎn)主要用于發(fā)布運(yùn)行任務(wù),執(zhí)行控制命令。Ansible的程序都安裝在控制節(jié)點(diǎn)上,控制節(jié)點(diǎn)需要安裝Python和Ansible所需的各種依賴庫。注意:目前Ansible還不能安裝在Windows下
受控節(jié)點(diǎn)(Managed nodes)
也叫客戶機(jī),就是想用Ansible執(zhí)行任務(wù)的客戶服務(wù)器。清單(Inventory)
受控節(jié)點(diǎn)的列表,就是所有要管理的主機(jī)列表。host文件
清單列表通常保存在一個(gè)名為host文件中。在host文件中,可以使用IP地址或者主機(jī)名來表示具體的管理主機(jī)和認(rèn)證信息,并可以根據(jù)主機(jī)的用戶進(jìn)行分組。缺省文件:/etc/ansible/hosts,可以通過-i指定自定義的host文件。
模塊(Modules)
模塊是Ansible執(zhí)行特定任務(wù)的代碼塊。比如:添加用戶,上傳文件和對(duì)客戶機(jī)執(zhí)行ping操作等。Ansible現(xiàn)在默認(rèn)自帶450多個(gè)模塊,,Ansible Galaxy公共存儲(chǔ)庫則包含大約3000多個(gè)模塊,現(xiàn)在還在不斷跟新,也可以用python編寫適合自己業(yè)務(wù)模塊任務(wù)(Task)
是Ansible客戶機(jī)上執(zhí)行的操作??梢允褂胊d-hoc單行命令執(zhí)行一個(gè)任務(wù)。劇本(Playbook)
是利用YAML標(biāo)記語言編寫的可重復(fù)執(zhí)行的任務(wù)的列表,playbook實(shí)現(xiàn)任務(wù)的更便捷的讀寫和貢獻(xiàn)。比如,在Github上有大量的Ansible playbooks共享,你要你有一雙善于發(fā)現(xiàn)的眼睛你就能找到大量的寶藏。角色(roles):角色是Ansible 1.2版本引入的新特性,用于層次性、結(jié)構(gòu)化地組織playbook。roles能夠根據(jù)層次型結(jié)構(gòu)自動(dòng)裝載變量文件、tasks以及handlers等。
二.安裝
#] yum -y install ansible
三.配置
配置文件
默認(rèn)的配置文件位于/etc/ansible/ansible.cfg下??梢允褂么伺渲梦募硇薷慕^Ansible大多數(shù)設(shè)置,一般無需額外多配置,默認(rèn)配置應(yīng)能滿足大多數(shù)使用情況。關(guān)于Ansible配置文件,其執(zhí)行程序會(huì)按照一定順序搜索配置:
Ansible按照以下順序搜索配置文件,優(yōu)先配置優(yōu)先使用,而忽略其余配置文件:
$ANSIBLE_CONFIG環(huán)境變量。
任務(wù)當(dāng)前目錄下的:ansible.cfg(如果在當(dāng)前目錄中)。
當(dāng)前用戶下的ansible.cfg:~/.ansible.cfg
默認(rèn)配置文件:/etc/ansible/ansible.cfg。
]# vim /etc/ansible/ansible.cfg
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False #首次連接時(shí)不要手動(dòng)輸yes,ansible自己輸
主機(jī)清單文件
默認(rèn)清單配置文件位于/etc/ansible/hosts中,但是通過ansible.cfg配置文件中修改此位置。也可以通過-i自定義hosts清單。
為了安全起見,建議不要直接在/etc/ansible/host配置清單,尤其是有用戶認(rèn)賬等信息時(shí)候。對(duì)于長期不執(zhí)行ansible可以將host文件加密鎖定,防止信息泄露,引起安全事故。
清單文件格式如下:
[dbs]
db1
db2 ansible_ssh_user=root ansible_ssh_pass=password ansible_ssh_port=22
[webs]
web1
web2
[lamp:children]
dbs
webs
四.常用模塊
ping
]# ansible dbs -m pingshell
]# ansible dbs -m shell -a "df -h | grep home"copy
script //本地寫腳本,然后script模塊批量執(zhí)行
]# ansible dbs -m script -a "/root/test.sh"yum
service
lineinfile
setup
獲取主機(jī)計(jì)信系,playbooks里經(jīng)常會(huì)用到的另一個(gè)參數(shù)gather_facts與該模塊相關(guān),setup模塊經(jīng)常用的是filter參數(shù)
]# ansible webs -m setup -a "filter=ansible_distribution"
五.playbook(劇本)
Ansible 的劇本文件格式使用的是 YAML 語法,每一個(gè) YAML 文件都是從一個(gè)列表開始. 列表中的每一項(xiàng)都是一個(gè)鍵值對(duì), 通常它們被稱為一個(gè) “哈希” 或 “字典”. 所以, 我們需要知道如何在 YAML 中編寫列表和字典.

hosts(主機(jī)和用戶) 用于指明 playbook 作用的目標(biāo)
tasks(任務(wù)列表 ) 用于定義 playbook 所要執(zhí)行的操作,比如安裝軟件,拷貝文件等
handlers (在發(fā)生改變時(shí)會(huì)被觸發(fā)的操作)
每一個(gè) task 必須有一個(gè)名稱 name,這樣在運(yùn)行 playbook 時(shí),從其輸出的任務(wù)執(zhí)行信息中可以很好的辨別出是屬于哪一個(gè) task 的。每一個(gè)name下一行都是一個(gè)模塊
ansible-playbook apache.yaml --syntax-check 檢驗(yàn)語法(最好每次執(zhí)行前都去檢測(cè)寫語法)
ansible-playbook apache.yaml --list-tasks 列出任務(wù)
ansible-playbook apache.yaml --list-hosts 列出主機(jī)
ansible-playbook apache.yaml -C 試運(yùn)行
ansible-playbook apache.yaml 運(yùn)行