Playbook 介紹
Playbook 是由一個或多個piay組成的清單,隻要功能是講task 定義好角色歸并未一組進行統一管理,也就是通過task調用 Ansible 的模講多個play組成在一個playbook中運作
playbooks本身由以下各部分組成
- Tasks:任務,即調用子產品完成的某操作;就當執行的事物,若有一條語句沒有執行成功則復原
- Variables:變量 可以劇本中定義變量,預定義變量 主機清單 定義在指令-e
- Templates:模闆 修改配置檔案
- Handlers:處理器,當某條件滿足時,觸發執行的操作;
- Roles:角色。分文别類的存放,存放完了再進行統一部署
playbook的示例
- hosts: webserver //定義的主機組,即應用的主機
vars: //定義變量
http_port: 80
max_clients: 200
user: root
tasks: //執行的任務
- name: ensure apache is at the latest version #顯示資訊自定義顯示輸出
yum: pkg=httpd state=latest #子產品對參數 state=latest 檢查最新版本
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf #放在管理端
notify: #調用
- restart apache #調用下面的參數
- name: ensure apache is running
service: name=httpd state=started #開啟 restarted 重新開機 stopped 停止
handlers: //處理器
- name: restart apache
service: name=httpd state=restarted
執行一個playbook
ansible-playbook [yaml檔案名]
例如:ansible-playbook ping.yml
參數:-k(–ask-pass) 用來互動輸入ssh密碼
-K(-ask-become-pass) 用來互動輸入sudo密碼
-u 指定使用者

指令 | 說明 |
---|---|
ansible-playbook nginx.yaml --syntax-check | 檢查yaml檔案的文法是否正确 |
ansible-playbook nginx.yaml --list-task | 檢查tasks任務 |
ansible-playbook nginx.yaml --list-hosts | 檢查生效的主機 |
ansible-playbook nginx.yaml --start-at-task='Copy Nginx.conf' | 指定從某個task開始運作 |
實驗部署
名稱 | IP | 組号 |
---|---|---|
主伺服器 | 192.168.10.5 | |
被管理伺服器 | 192.168.10.8 | aaa |
192.168.10.11 | bbb |
可以為每個任務定義遠端執行使用者:
- hosts: mysql
remote_user: root
tasks: #任務
- name: test connection #顯示信
ping: #使用ping這個子產品
remote_user: zhangsan #指定遠端主機執行tasks的運作使用者為zhangsan
指定遠端主機sudo切換使用者:
- hosts: mysql
remote_user: root
become: yes #2.6版本以後的參數,之前是sudo,意思為切換使用者運作
become_user: mysql #指定sudo使用者為mysql
tasks清單和action 介紹
-
Play的主體部分是task清單,task清單中的各任務按次序逐個在hosts中指定的主機上執行,即在所有主機上完成第一個任務後再開始第二個任務。
在運作playbook時(從上到下執行),如果一個host執行task失敗,整個tasks都會復原,請修正playbook 中的錯誤,然後重新執行即可。
Task的目的是使用指定的參數執行子產品,而在子產品參數中可以使用變量,子產品執行時幂等的,這意味着多次執行是安全的,因為其結果一緻。
- 每一個task必須有一個名稱name,這樣在運作playbook時,從其輸出的任務執行資訊中可以很好的辨識出是屬于哪一個task的。如果沒有定義name,‘action’的值将會用作輸出資訊中标記特定的task。
- 定義一個task,常見的格式:”module: options” 例如:yum: name=httpd
- ansible的自帶子產品中,command子產品和shell子產品無需使用key=value格式
忽略錯誤,強制傳回成功
- hosts: webserver
remote_user: root
tasks:
- name: disable selinux
command: '/sbin/setenforce 0'
ignore_errors: True #忽略錯誤,強制傳回成功
- name: make sure apache is running
service: name=httpd state=started
Handlers介紹
Handlers也是一些task的清單,和一般的task并沒有什麼差別。
是由通知者進行的notify,如果沒有被notify,則Handlers不會執行,假如被notify了,則Handlers被執行
不管有多少個通知者進行了notify,等到play中的所有task執行完成之後,handlers也隻會被執行一次
playbook使用變量的方法:
- 通過ansible指令傳遞
自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 在主配置檔案中定義變量
自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本 自動化運維Ansible之Playbook之劇本