ansible-playbook的使用
1. ansible playbook介紹:
簡單的說就是定義一個配置文件,文件中寫入你需要安裝的服務,配置文件,變量等信息,使他們可以按照事先定義好的機制完成一個任務。
ansible Playbook使用YAML語法結構,所以配置閱讀起來都比較簡單。
2. ansible playbook組成結構:
- target section: 定義將要執行playbook的遠程主機組
- variable section: 定義playbook運行時需要使用的變量
- task section: 定義將要在遠程主機上執行的任務列表
- handler section: 定義task執行完成以後需要調用的任務
3. ansible playbook主要參數:
3.1. Target section常用參數:
- hosts:定義遠程主機組
- remote_user:執行該任務的用戶
- sudo: 設置爲yes的時候,執行任務的時候使用root權限
- sudo_user 如果你設置用戶爲 admin ,那麼你執行的時候會使用 admin 用戶的權限
- connection 通過什麼方式連接到遠程主機,默認是ssh
- gather_facks 是否啓用在遠程主機執行setup模塊,默認是會執行的,可用同setup模塊獲取遠程主機的信息,在定義變量的時候使用
3.2 Variabler section常用參數:
- vars: 定義格式 變量名:變量值
- vars_files: 指定變量文件
- vars_prompt: 用戶交互模式自定義變量
- setup: 模塊取遠程主機的值
3.3 Task section常用參數:
- name:輸出到屏幕的信息
- action:定義執行的動作調用ansible的模塊例如:yum name=http state=installed就是安裝apache服務
- copy:複製本地文件到遠程主機
- template:複製.j2格式的變量文件到遠程主機,並且複製之後的文件替換變量的值
- service :定義服務的狀態
3.4 handler section常用參數:
可以理解爲處理器,主要爲 task section 進行調用,爲任務列表操作完畢後的後續動作,當關注的資源發生變化時執行的操作
4. ansible playbook測試案例:
4.1 案例1: 安裝httpd服務
vim httpd_v1.yaml
- hosts: websrvs
remote_user: root
tasks:
- name: install httpd service
yum: name=httpd state=present
- name: copy httpd conf
copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
- name: start httpd service
service: name=httpd state=started
ansible-playbook --syntax-check httpd_v1.yaml #檢查代碼語法
ansible-playbook httpd_v1.yaml
案例1主要是安裝apache httpd web服務器,通過yum模塊安裝,copy模塊將配置文件拷貝到遠程主機,並且啓動服務
4.2 案例2: 配置文件更新後自動重啓httpd服務:
vim httpd_v2.yaml
- hosts: websrvs
remote_user: root
tasks:
- name: install httpd service
yum: name=httpd state=present
- name: copy httpd conf
copy: src=/etc/httpd/conf/httpd.conf dest=/etc/httpd/conf/httpd.conf
tags: config
notify:
- restart httpd service
- name: start httpd service
service: name=httpd state=started
handlers:
- name: restart httpd service
service: name=httpd state=restarted
ansible-playbook --syntax-check httpd_v2.yaml
ansible-playbook -t config httpd_v2.yaml
案例2使用了handlers模塊,只要httpd.conf配置文件更新了,比如我們更改了httpd的暴露端口,默認是80端口,現在我更改成8080,那麼就可以觸發服務重啓handlers. 同時針對複製配置文件專門打了tag,執行ansible-playbook -t config httpd_v2.yaml 可以實現只執行copy文件的這一個tasks;
4.3 案例3: 通過變量的方式修改配置文件的值:
vim httpd_v3.yaml
- hosts: websrvs
remote_user: root
vars:
http_port: "8899"
src_httpd_dir: /etc/httpd/conf
dst_httpd_dir: "/etc/httpd/conf"
tasks:
- name: install httpd service
yum: name=httpd state=present
- name: copy httpd conf
template: src="{{src_httpd_dir}}/httpd.conf.j2" dest="{{dst_httpd_dir}}/httpd.conf"
notify:
- restart httpd service
- name: start httpd service
service: name=httpd state=started
handlers:
- name: restart httpd service
service: name=httpd state=restarted
cp -r /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.j2 #定義httpd的模板配置文件
vim /etc/httpd/conf/httpd.conf.j2 #修改模板配置文件,主要修改監聽的端口和主機名兩個地方
Listen {{ansible_default_ipv4['address']}}:{{http_port}}
ServerName {{ansible_nodename}}:{{http_port}}
此處用到了template模塊,可以拷貝含有變量的文件到目標機器,這裏實際上用到的是python的jinja2語法。源機器的配置文件裏面用到了自動以變量httpd_port,也用到了setup 中的 facts,facts的查看可以使用如下命令:
[root@rainbondmanager playbooks]# ansible websrvs -m setup -a "filter=ansible_all_ipv4_addresses"
10.83.32.130 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"10.83.32.130"
],
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
10.83.32.131 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"10.83.32.131"
],
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
如果不使用filter過濾的話,會把所有的facts查詢出來,這些都是系統默認的,ansible默認可以獲取到的遠程主機信息,包括cpu、內存、磁盤、網卡、ip等信息;
今天的博文就寫到這裏了,下期還會繼續帶大家一起探討和學習ansible的使用。最近一個人生活,老婆和小孩都回老家了,所以有了更多的時間來看書、學習、運動,還有就是寫博文了。感謝大家一直以來的持續關注,最近我準備再出一系列專門針對新手的linux運維專欄,主要從最簡單的LNMP安裝 LAMP安裝 tomcat安裝 MYSQL安裝 linux基礎命令等入手。