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命令傳遞
在主配置文件中定義變量
條件測試
如果需要根據變量、facts(setup)或此前任務的執行結果來作爲某task執行與否的前提時要用到條件測試,在Playbook中條件測試使用when子句。
在task後添加when子句即可使用條件測試:when子句支持jinjia2表達式或語法
迭代
當有需要重複性執行的任務時,可以使用迭代機制。其使用格式爲將需要迭代的內容定義爲item變量引用,並通過with_items語句指明迭代的元素列表即可。
定義標籤
事實上,不光可以爲單個或多個task指定同一個tags。playbook還提供了一個特殊的tags爲always。作用就是當使用always當tags的task時,無論執行哪一個tags時,定義有always的tags都會執行