1. 程式人生 > >運維自動化工具 Ansible-playbook (一)

運維自動化工具 Ansible-playbook (一)

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 (一)