文章目錄
- 一、Ansible-playbook
-
-
- 1.1 核心元素
- 1.2 YAML編寫格式
- 1.3 常用指令
-
- 二、Ansible-playbook的簡單編寫
-
-
- 2.1 安裝且配置httpd
-
- 三、playbook基礎詳解
-
-
- 3.1 Tasks 清單
- 3.2 Handlers:在發生改變時執行的操作
- 3.3 變量的優先級
-
一、Ansible-playbook
一個不同于Ansible指令行執行方式的模式,其功能更強大靈活。簡單來說,playbooks是一個非常簡單的配置管理和多主機部署系統。值得注意,playbook是通過YAML格式來進行描述定義的。
Playbooks 可用于聲明配置,在 playbooks 中可以編排有序的執行過程,甚至于做到在多組機器間,來回有序的執行特别指定的步驟.并且可以同步或異步的發起任務.
- 作用:将多個子產品操作的功能進行整合;實作重複工作簡單化(提高工作效率);實作特殊需求
- 使用adhoc 時,主要是使用 /usr/bin/ansible 程式執行任務.而使用 playbooks 時,更多是将之放入源碼控制之中,用之推送你的配置或是用于确認你的遠端系統的配置是否符合配置規範.
- Ansible中文權威指南
1.1 核心元素
- Hosts 執行的遠端主機清單
- Tasks 任務集
- Varniables 内置變量或自定義變量在playbook中調用
- Templates 模闆,即使用模闆文法的檔案,比如配置檔案等
- Handlers 和notity結合使用,由特定條件觸發的操作,滿足條件方才執行,否則不執行
1.2 YAML編寫格式
- 檔案的第一行應該以"—"三個連字元開始,表示YAML檔案的開始。可以連續三個連子号(—)區分多個play。
- 在同一行中,#之後的内容表示注釋
- YMAL中的清單元素以 “-” 開頭然後緊跟着一個空格,同一個清單中的元素應該保持相同的的縮進。
- 注意縮進的關系:兩個空格一個縮進關系。縮進的級别也必須是一緻的,同樣的縮進代表同樣的級别,程式判别配置的級别是通過縮進結合換行實作的。
- 建立鍵值對 :使用冒号(如 age: 18)冒号後面必須是一個空格;如果沒有空格是錯誤的;(如 age:18(錯誤))
1.3 常用指令
運作ymal檔案 : ansible-playbook filename.yml
檢查文法結構 : ansible-playbook --syntax-check filename.yml
模拟執行劇本 : ansible-playbook -C filename.yml
[[email protected] PlayBook]# ansible-playbook -h
#ansible-playbook常用選項:
--check or -C #隻檢測可能會發生的改變,但不真正執行操作
--list-hosts #列出運作任務的主機
--list-tags #列出playbook檔案中定義所有的tags
--list-tasks #列出playbook檔案中定義的是以任務集
--limit #主機清單 隻針對主機清單中的某個主機或者某個組執行
-f #指定并發數,預設為5個
-t #指定tags運作,運作某一個或者多個tags。(前提playbook中有定義tags)
-v #顯示過程 -vv -vvv更詳細
二、Ansible-playbook的簡單編寫
為了編寫友善,我們可以更改目前目錄的縮進為:兩個空格為一個縮進。
編寫 .vimrc檔案

2.1 安裝且配置httpd
1、建立playbook檔案: vim install.yml
- 注意:調用copy子產品去配置apache預設通路頁面時,copy子產品要調用的檔案和YAML檔案是在同一目錄下的。
2、執行playbook : ansible-playbook apache/install.yml
3、還可以加入變量 http_port 使得YMAL檔案更加便于使用
---
- hosts: test
vars:
- http_port: 80
tasks:
- name: install apache
yum:
name: httpd
state: present
- name: config apache
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart apache
- name: start apache
service:
name: httpd
state: started
enabled: yes
- name: create index.html
copy:
src: index.html
dest: /var/www/html/index.html
- name: start firewalld
service:
name: firewalld
state: started
enabled: yes
- name: config firewalld
firewalld:
service: http
state: enabled
permanent: yes
immediate: yes
handlers:
- name: restart apache
service:
name: httpd
state: restarted
- hosts: localhost
become: false
tasks:
- name: test apache
uri:
url: 'http://172.25.37.2:{{ http_port }}'
return_content: yes
三、playbook基礎詳解
3.1 Tasks 清單
- 每一個 play 包含了一個 task 清單.一個 task 在其所對應的所有主機上執行完畢之後,下一個 task 才會執行。
-
在運作 playbook 時(從上到下執行),如果一個 host 執行 task 失敗,這個 host 将會從整個playbook
的整個執行過程中移除. 如果發生執行失敗的情況,改正playbook 中的錯誤,然後重新執行即可.
- 每個 task 的目标在于執行一個 moudle, 通常是帶有特定的參數來執行.在參數中可以使用變量(variables)modules 具有幂等性,即,遇到遠端系統被意外改動,需要恢複原狀,當再一次地執行 moudle,moudle隻會執行必要的改動,隻會改變需要改變的地方.是以重複多次執行 playbook 也很安全.
3.2 Handlers:在發生改變時執行的操作
當發生改動時,notify actions 會在 playbook 的每一個 task 結束時被觸發,而且即使有多個不同的 task 通知改動的發生, notify 隻會被觸發一次.
- Handlers 最佳的應用場景是用來重新開機服務,或者觸發系統重新開機操作.
- handlers 會按照聲明的順序執行
3.3 變量的優先級
如果同樣名稱的變量在多個地方都有定義,那麼采納是有個确定的順序,如下:
- extra vars (在指令行中使用 -e)優先級最高
- 然後是在inventory中定義的連接配接變量(比如ansible_ssh_user)
- 接着是大多數的其它變量(指令行轉換,play中的變量,included的變量,role中的變量等)
- 然後是在inventory定義的其它變量
- 然後是由系統發現的facts
- 然後是 “role預設變量”, 這個是最預設的值,很容易喪失優先權