安裝
yum -y install epel-release
yum -y install ansible
Ansible基礎(chǔ)
Ansible架構(gòu)圖
Ansible核心組件說(shuō)明
- Ansible:Ansible的核心程序
- Host Lnventory:記錄了每一個(gè)由Ansible管理的主機(jī)信息龟劲,信息包括ssh端口昌跌,root帳號(hào)密碼,ip地址等等答恶∑加眨可以通過(guò)file來(lái)加載裕坊,可以通過(guò)CMDB加載
- Playbooks:YAML格式文件籍凝,多個(gè)任務(wù)定義在一個(gè)文件中,使用時(shí)可以統(tǒng)一調(diào)用声诸,
劇本
用來(lái)定義那些主機(jī)需要調(diào)用那些模塊來(lái)完成的功能 - Core Modules:Ansible執(zhí)行任何管理任務(wù)都不是由Ansible自己完成退盯,而是由核心模塊完成得问;Ansible管理主機(jī)之前,先調(diào)用
core Modules
中的模塊焚挠,然后指明管理Host Lnventory中的主機(jī)蝌衔,就可以完成管理主機(jī)蝌蹂。 - Custom Modules:自定義模塊孤个,完成Ansible核心模塊無(wú)法完成的功能,此模塊支持任何語(yǔ)言編寫斥废。
- Connection Plugins:連接插件,Ansible和Host通信使用
Ansible執(zhí)行過(guò)程
暖色調(diào)的代表已經(jīng)模塊化
清單文件
[servers]
172.20.21.120
172.20.21.121
172.20.21.123
默認(rèn)清單文件是/etc/ansible/hosts
。
同時(shí)也可以在運(yùn)行時(shí)通過(guò)-i
參數(shù)來(lái)指定清單文件统锤。
測(cè)試主機(jī)連通性
ansible www.baidu.com -m ping
發(fā)現(xiàn)執(zhí)行結(jié)果異常饲窿,這是因?yàn)?code>ansible只納管定義在清單文件中的主機(jī)免绿。
ansible servers -m ping
ansible servers -m ping -o
通過(guò)-o
參數(shù),可以讓結(jié)果在一行中進(jìn)行顯示嘲驾。
執(zhí)行遠(yuǎn)程指令
ansible servers -m shell -a 'uptime'
ansible servers -m command -a 'uptime'
遠(yuǎn)程主機(jī)的yum管理
確認(rèn)軟件是否安裝
[root@centos7 ~]# ansible servers -m shell -a 'rpm -qa|grep httpd'
[WARNING]: Consider using yum, dnf or zypper module rather than running rpm
172.20.21.121 | FAILED | rc=1 >>
non-zero return code
安裝httpd
[root@centos7 ~]# ansible servers -m yum -a 'name=httpd state=latest'
172.20.21.121 | SUCCESS => {
"changed": true,
"msg": "Repository base is listed more than once in the configuration\nRepository updates is listed more than once in the configuration\nRepository extras is listed more than once in the configuration\nRepository centosplus is listed more than once in the configuration\nThere are unfinished transactions remaining. You might consider running yum-complete-transaction, or \"yum-complete-transaction --cleanup-only\" and \"yum history redo last\", first to finish them. If those don't work you'll have to try removing/installing packages by hand (maybe package-cleanup can help).\nThe program yum-complete-transaction is found in the yum-utils package.\n",
"rc": 0,
"results": [
..."
]
}
再次安裝
再次安裝時(shí)徒仓,就會(huì)檢查客戶端已安裝的組件是否是最新的誊垢,若是最新的就不會(huì)再次安裝掉弛。changed
字段會(huì)返回false
。
[root@centos7 ~]# ansible servers -m yum -a 'name=httpd state=latest'
172.20.21.121 | SUCCESS => {
"changed": false,
"msg": "",
"rc": 0,
"results": [
"All packages providing httpd are up to date",
""
]
}
Ansible組件 - Inventory
Inventory主機(jī)清單
inventory文件通常用于定義要管理主機(jī)的認(rèn)證信息喂走,例如ssh登錄所需的用戶名殃饿、密碼以及key相關(guān)信息。
/etc/ansible/hosts
文件配置:
[apache]
172.20.21.121
172.20.21.123
[nginx]
172.20.21.[120:121]
# 把一個(gè)組作為另一個(gè)組的子成員
[servers:children]
apache
nginx
# 定義組變量
[servers:vars]
ansible_ssh_user='root'
ansible_ssh_pass='123456'
[root@centos7 ~]# ansible apache --list-hosts
hosts (2):
172.20.21.121
172.20.21.123
[root@centos7 ~]# ansible nginx --list-hosts
hosts (2):
172.20.21.120
172.20.21.121
[root@centos7 ~]# ansible servers --list-hosts
hosts (3):
172.20.21.121
172.20.21.123
172.20.21.120
[root@centos7 ~]# ansible all -m shell -a 'hostname' -o
172.20.21.123 | SUCCESS | rc=0 | (stdout) centos7
172.20.21.121 | SUCCESS | rc=0 | (stdout) centos7
172.20.21.120 | SUCCESS | rc=0 | (stdout) centos7
Ansible Inventory 內(nèi)置參數(shù)
參數(shù) | 用途 | 例子 |
---|---|---|
ansible_ssh_host | 將要連接的遠(yuǎn)程主機(jī)名ssh地址 | ansible_ssh_host=192.168.1.100 |
ansible_ssh_port | ssh端口 | ansible_ssh_port=3000 |
ansible_ssh_user | ssh 用戶名 | ansible_ssh_user=user |
ansible_ssh_pass | ssh 密碼 | ansible_ssh_pass=pass |
ansible_sudo | sudo 用戶 | |
ansible_sudo_pass | sudo 密碼 | |
ansible_sudo_exe | sudo 執(zhí)行路徑 | ansible_sudo_exe=/usr/bin/sudo |
ansible_connection | hosts 連接方式 | ansible_connection=local |
ansible_ssh_private_key_file | hosts 私鑰 | ansible_ssh_private_key_file=/root/key |
Ansible組件 - Ad-Hoc
ad hoc芋肠,臨時(shí)的乎芳,在ansible中是指需要快速執(zhí)行,并且不需要報(bào)錯(cuò)的命令帖池。對(duì)于復(fù)雜的命令則需要playbook。
執(zhí)行命令 -m shell
[root@centos7 ~]# ansible servers -m shell -a 'hostname' -o
172.20.21.121 | SUCCESS | rc=0 | (stdout) centos7
172.20.21.123 | SUCCESS | rc=0 | (stdout) centos7
172.20.21.120 | SUCCESS | rc=0 | (stdout) centos7
[root@centos7 ~]# ansible servers -m shell -a 'uname -r' -o
172.20.21.121 | SUCCESS | rc=0 | (stdout) 3.10.0-514.26.2.el7.x86_64
172.20.21.123 | SUCCESS | rc=0 | (stdout) 3.10.0-514.26.2.el7.x86_64
172.20.21.120 | SUCCESS | rc=0 | (stdout) 3.10.0-514.26.2.el7.x86_64
復(fù)制文件 -m copy
ansible all -m copy -a "src=test.sh dest=/tmp"
軟件包管理 -m yum
ansible apache -m yum -a "name=vim state=present"
ansible apache -m yum -a 'name=httpd state=absent'
服務(wù)管理 -m service
ansible apache -m service -a "name=httpd state=restarted enabled=yes"
Ansible組件 - Facts
facts組件是Ansible用于采集被管理主機(jī)信息的功能睡汹,可以使用setup
模塊查看主機(jī)所有的facts信息肴甸。可以使用filter
參數(shù)對(duì)結(jié)果進(jìn)行過(guò)濾囚巴。
ansible apache -m setup
ansible apache -m setup -a "filter=ansible_default_ipv4"
Ansible組件 - playbook
playbook
是有一個(gè)或者多個(gè)play
組成的列表原在。play
的主要功能在于將實(shí)現(xiàn)歸并為一組的主機(jī)裝扮成實(shí)現(xiàn)通過(guò)ansible中的task
定義好的角色role
友扰。
根本上來(lái)講,所謂的task
無(wú)非是調(diào)用ansible的一個(gè)module
晤斩。將多個(gè)play
組織在一個(gè)playbook
中焕檬,即可以讓他們聯(lián)合起來(lái)按事先編排的機(jī)制完成某一任務(wù)。
playbook示例
yaml劇本
- hosts: apache
tasks:
- name: Install httpd
yum: name=httpd state=present
- name: copy httpd conf
template: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
owner=root group=root mode=0644
notify:
- Restart Apache Service
- name: enable httpd is runing
service: name=httpd state=started enabled=yes
handlers:
- name: Restart Apache Service
service: name=httpd state=restarted
檢查
ansible-playbook apapche.yaml --syntax-check
ansible-playbook apapche.yaml --list-task
ansible-playbook apapche.yaml --list-hosts
執(zhí)行playbook
ansible-playbook apapche.yaml
如果覺得有用澳泵,歡迎關(guān)注我的微信,有問(wèn)題可以直接交流: