Ansible介紹
Ansible是一個(gè)輕量級(jí)的自動(dòng)化管理工具贰拿,它不需要在客戶端安裝代理蛤袒,通過(guò)OpenSSH
或者WinRM
連接到被管理主機(jī)并運(yùn)行任務(wù)。
Ansible安裝
只需要在控制節(jié)點(diǎn)主機(jī)上配置epel
源壮不,然后執(zhí)行yum install ansible
安裝即可汗盘。在被管理主機(jī)上不需要執(zhí)行任何操作。
建議控制節(jié)點(diǎn)和被管理主機(jī)的python
版本一致
Ansible配置文件
在Ansible
安裝完成后询一,會(huì)默認(rèn)生成/etc/ansible/ansible.cfg
配置文件隐孽。我們也可以使用其他的配置文件
查看當(dāng)前使用的配置文件
[root@localhost ~]# ansible --version |grep cfg
config file = /etc/ansible/ansible.cfg
設(shè)置其他配置文件
Ansible
只會(huì)使用它檢索到的第一個(gè)配置文件中的配置。
除了默認(rèn)的配置文件健蕊,我們還可以用其他位置的配置文件菱阵,優(yōu)先級(jí)由高到低的順序如下:
# 通過(guò)環(huán)境變量指定的配置文件優(yōu)先級(jí)最高
ANSIBLE_CONFIG
# 其次是當(dāng)前目錄下的ansible.cfg文件
./ansible.cfg
# 再次是用戶家目錄下的.ansible.cfg文件
~/.ansible_cfg
# 默認(rèn)的配置文件優(yōu)先級(jí)最低
/etc/ansible/ansible.cfg
建議在要運(yùn)行Ansible
命令的目錄中創(chuàng)建ansible.cfg
文件,并將其他相關(guān)的文件都放在同一目錄下缩功。
配置文件內(nèi)容
Ansible
的配置文件是以sector
作為劃分的晴及。每個(gè)方括號(hào)表示一個(gè)sector
常用選項(xiàng)
# 基本配置
[defaults]
# 該配置文件默認(rèn)使用的inventory文件
inventory = /etc/ansible/hosts
# 該配置文件使用root用戶進(jìn)行ssh連接
remote_user = root
# 使用root用戶進(jìn)行ssh連接時(shí)不提示輸入密碼
ask_pass = false
# 權(quán)限提升相關(guān)配置
[privilege_escalation]
# 如果remote_user使用root用戶,就不需要配置提權(quán)部分嫡锌。
# 如果remote_user不是root虑稼,但不需要做特權(quán)操作,也不需要配置
# 權(quán)限實(shí)際是否提升取決于被管理主機(jī)是否配置了sudoers文件
# 需要提權(quán)
become = true
# 提權(quán)的方式
become_method = sudo
# 提權(quán)到root用戶
become_user = root
# 進(jìn)行sudo操作的時(shí)候不需要輸入密碼
become_ask_pass = false
Ansible inventory文件
inventory
文件就是記錄哪些主機(jī)可以被Ansible
控制
inventory
文件可以分為靜態(tài)文件和動(dòng)態(tài)文件兩種
靜態(tài)inventory文件
靜態(tài)inventory
文件就是一個(gè)文本文件势木,里面記錄了被管理主機(jī)的ip
或者host
可以將多個(gè)主機(jī)放在一個(gè)主機(jī)組中蛛倦,便于批量管理。也可以將多個(gè)主機(jī)組放入到一個(gè)大組中啦桌。
可以使用[]
符號(hào)指定多個(gè)主機(jī)
# 主機(jī)示例
# 使用IP地址
192.169.1.100
# 使用主機(jī)名
servera
# 主機(jī)組示例
# group1中包含server1和server2
[group1]
server1
server2
# group2中包含server3和server4
[group2]
server[3:4]
# group3中包含group1和group2里面的所有主機(jī)
# 使用:children來(lái)代表下面定義的是主機(jī)組
[group3:children]
group1
group2
特殊組
除了在inventory
文件中定義的組以外溯壶,Ansible
還有兩個(gè)特殊的組
-
all
表示inventory
中的所有被管理主機(jī)主機(jī) -
ungrouped
表示不屬于任何主機(jī)組的被管理主機(jī)
動(dòng)態(tài)inventory文件
動(dòng)態(tài)inventory
文件實(shí)際上就是一個(gè)腳本,可以用來(lái)從其他位置獲取被管理主機(jī)的信息甫男。
腳本可以使用任何語(yǔ)言進(jìn)行編寫(xiě)且改,返回的值需要是JSON
格式
使用動(dòng)態(tài)inventory文件
ansible -i inventory.py all --list-hosts
注意動(dòng)態(tài)inventory
文件需要具有執(zhí)行權(quán)限
使用JSON格式查看inventory文件
ansible-inventory -i inventory --list
靜態(tài)Inventory文件和JSON格式對(duì)照及說(shuō)明
# 靜態(tài)inventory文件
[root@localhost ~]# cat inventory
server1
[group1]
server2 user=root
server3
[group2]
server[4:6]
[group3:children]
group1
group2
[group2:vars]
user=devops
password=123
# 對(duì)應(yīng)的JSON格式文件
[root@localhost ~]# ansible-inventory -i inventory --list
## 整個(gè)JSON是一個(gè)Python中的字典,該字典中的key值包括以下兩種
## 1. `_mata` 記錄了所有主機(jī)和主機(jī)的變量
## 2. `主機(jī)組名` 記錄了組中的主機(jī)列表或子組列表
{
## _mata的值是一個(gè)字典板驳,其中包括一個(gè)hostvars的key又跛,對(duì)應(yīng)的value是一個(gè)記錄主機(jī)名和相關(guān)變量的字典
"_meta": {
"hostvars": {
# hostvars的值,是以主機(jī)名為key的字典若治,如果主機(jī)名沒(méi)有變量慨蓝,對(duì)應(yīng)的value值是個(gè)空字典,如果主機(jī)名有對(duì)應(yīng)的變量直砂,對(duì)應(yīng)的value值是一個(gè)key=變量名菌仁,value=變量值的字典
# 注意主機(jī)組變量在這里會(huì)記錄到組中的所有主機(jī)中
"server1": {},
"server2": {
"user": "root"
},
"server3": {},
"server4": {
"password": 123,
"user": "devops"
},
"server5": {
"password": 123,
"user": "devops"
},
"server6": {
"password": 123,
"user": "devops"
}
}
},
## 主機(jī)組名作為key的value值也是字典,該字典的key-value可能有以下幾種
## key=children value=子主機(jī)組的列表
## key=hosts value=組中主機(jī)的列表
## key=vars value=對(duì)應(yīng)變量的字典
"all": {
"children": [
"group3",
"ungrouped"
]
},
"group1": {
"hosts": [
"server2",
"server3"
]
},
"group2": {
"hosts": [
"server4",
"server5",
"server6"
]
},
"group3": {
"children": [
"group1",
"group2"
]
},
"ungrouped": {
"hosts": [
"server1"
]
}
}
查看inventory中定義的主機(jī)
ansible -i inventory group1 --list-hosts