運維自動化工具 Ansible-playbook (一)
阿新 • • 發佈:2018-09-14
handlers chang 配置管理 復雜 賬戶 程序 roc clu host 一、簡介
playbook是一個非常簡單的配置管理和多主機部署系統。可作為一個適合部署復雜應用程序的基礎。
playbook可以定制配置,可以按指定的操作步驟有序執行,支持同步和異步方式。
playbook是通過YAML格式來進行描述定義的,可實現多臺主機應用的部署,對不同分組的主機執行特定指令步驟。
第一個playbook
---
- hosts: all
remote_user: root
tasks:
- name: test yml
command: /usr/bin/wall "hello world"
Playbook工作流程
二、Playbook核心元素
hosts
hosts 行的內容是一個或多個組或主機的 patterns,以逗號為分隔符。通常是/etc/ansible/hosts定義的主機列表。
remote_user 就是遠程執行任務的賬戶名。
---
- hosts: cluster1,cluster2
remote_user: root
tasks
任務集
tasks: - name: install httpd yum: name=httpd - name: start httpd service: name=httpd state=started - name: check http port shell: ss -ntl|grep 80 > /tmp/httpd.txt - name: fetch fetch: src=/tmp/httpd.txt dest=/tmp
一個yml文件裏可以設計多個playbook,不過呢,為了更清晰的管理,建議應該獨立存放不同任務需求,方便以後調用。
Handlers 和 notity
由特定條件觸發的操作,滿足條件方才執行,否則不執行。
Handlers也是task列表,這些task與前述的tasks並沒有本質上的不同,用於當關註的資源發生變化時,才會采取一定的操作
還是拿上個例子的playbook修改下。
--- - hosts: clutser1 remote_user: root tasks: - name: install httpd yum: name=httpd - name: change httpd.conf copy: src=/app/httpd.conf dest=/etc/httpd/conf/ backup=yes notify: restart httpd # 在 notify 中定義內容一定要和handlers中定義的 - name 內容一樣,這樣才能達到觸發的效果,否則會不生效。 - name: start httpd service: name=httpd state=started - name: wall http status shell: /usr/bin/wall `ss -nltp|grep httpd` handlers: - name: restart httpd # 只有接收到通知才會執行這裏的任務 service: name=httpd state=restarted
運維自動化工具 Ansible-playbook (一)