自動化運維-Ansible (第三部:Playbook 介紹)

前言

以前有兩篇文章分別講了 Ansible 的部署、Ansible 的 模塊使用,對 Ansible 有了最初的瞭解,這篇文章最主要是要介紹 Playbook。
須要瞭解 Ansible 的部署請點擊:Ansible 第一部 :部署
須要瞭解 Ansible 的模塊慶典節:Ansible 第二部:模塊使用
mysql


Playbook 介紹

Playbook 是由一個或多個play 組成的列表,主要功能是將task 定義好的角色歸併爲一組進行統一管理,也就是經過task 調用 Asible 的模板將多個 play 組織在一個 Playbook 中運行。linux

playbook 由如下各部分組成:
        (1)Tasks :任務,即調用模塊完成的一個操做;
        (2)Variables:變量;
        (3)Templates:模板;
        (4)Handlers:處理器,當一個條件知足時,觸發執行的操做;
        (5)Roles:角色。

YAML 介紹

YAML 是一種用來表達資料順序的格式,它因爲餐卡了其餘多種語言,因此具備很高的可讀性。能夠認爲它就是一種語言格式,必須按照它的這種格式來寫語言,才能生效。
它的特性:
1)具備很好的可讀性,易於實現;
2)表達能力強,擴展性好;
3)和腳本語言的交互性好;
4)有一個一致的信息規模;
5)能夠居於流來處理。
sql

官網地址:http://www.yaml.orgapache


YAML 經常使用的數據類型

YML 中有兩種經常使用的數據類型,分別是:list 和 dictionary。
(1)list
列表(list)的全部元素均使用 「 - 」 開頭,列如:
vim

-Apple
-Orange
-strawberry
-Mango

(2)dictionary
字典(dictionary)經過 key 與 value 進行標識,如:oracle

name: chenglong
Job: xuexi
Skill: Elite

也可使用 key:value 的形式放置於 { } 中進行標識,如:運維

{ name: Exanple Developer,Job: Developer,Skill: Elite }ssh

Ansilble 基礎元素介紹

(1)Inventory(主機清單)ide

Ansible 爲了更加便捷的管理主機,在主機清單中將被管理主機進行分組命名,默認的主機清單位置爲:/etc/ansible/hosts 文件。工具


1)主機變量:
能夠在定義主機時添加主機變量,以便在後續的 playbook 中使用,如:

[aaa_servers]
www1.baidu.com http_port=80 maxRequestsChild=800
www2.baidu.com http_port=8080 maxRequestsChild=900

2)組變量
組變量是指給指定主機設hi能夠在 palybook 中直接使用的變量,如:

[aaa-vars]
net_server=ntp.example.org
nfs_server=nfs.example.org

3)組嵌套
在 Inventory 中的組還能夠嵌套在其餘的組,也能夠向組中的主機指定變量,可是這些變量都只能在 ansible-playbook 工具中使用,直接使用 Ansible 工具並不會支持,如:

[aaa]
www1.baidu.com http_port=80 maxRequestsChild=800
www2.baidu.com http_port=8080 maxRequestsChild=900

[bbb]
192.168.100.100
192.168.100.101

[ccc:ddd]
aaa
bbb

自動化運維-Ansible (第三部:Playbook 介紹)

(2)變量

在 Ansible 中變量名僅能由字母、數字和下劃線組成,而且只能以字母開頭。可使用兩種方式來傳遞 Ansible 變量。

1)經過命令行來傳遞變量。
在運行 playbook 的時候,能夠經過命令行的方式傳遞變量,給 playbook 使用,如:

ansible-playbook test.yml -e "http_port=8080"

2)在寫 playbook 時定義,而且調用。

- hosts: aaa
  remote_user: root
  vars:          **  //定義變量**
  - package: apache      //變量定義 package
  - server: httpd             //變量定義 server

  tasks:
  - name: check latest
    yum: name={{ package }} state=latest           //調用變量  package
  - name: start apache
    service: name={{ server }} state=started        //調用變量  server

自動化運維-Ansible (第三部:Playbook 介紹)

(3)條件測試

1)when 就是條件判斷,你給與的條件成立,它就會執行 tasks 裏的任務,若是不知足就不執行。

- hosts: aaa
  remote_user: root

  tasks:
  - name: install apache
    yum: name=httpd
    when:
     - ansible_distribution == "CentOS"     //知足條件 1
     - ansible_distribution_major_version == "6"   //知足條件 2

自動化運維-Ansible (第三部:Playbook 介紹)
自動化運維-Ansible (第三部:Playbook 介紹)

2)迭代,當須要執行重複任務時,若是一個一個寫,就很麻煩,這時就須要用到 迭代,把須要重複執行的動做,定義爲 item 變量並進行引用,而後經過 with_items 語句來指明元素。

- hosts: aaa
  remote_user: root

  tasks:
  - name: install pachages
    yum: name={{ item }} state=latest
    with_items:
    - httpd
    - openssh
    - mysql

Hosts 和 Users 介紹

palybook 的設計目的就是爲了讓某些主機以某個用戶的身份去執行相應的任務。其中用於執行任務的主機用 hosts 定義,執行用戶用 remote_user 來定義。以下:

- hosts: aaa
  remote_user: root

自動化運維-Ansible (第三部:Playbook 介紹)

remote_user 能夠定義指定用戶經過 sudo 的方法在被管理主機上運行執行

- hosts: aaa
  remote_user: root
  become: yes
  become_user: oracle    切換用戶爲Oracle

任務列表和 action 介紹

  • > play 的主體是 任務列表(Tasks list)。任務列表中的任務按照次序逐個在hosts 中指定的全部主機上執行,在順序執行這些任務時,若是有錯誤發生將會回滾。
  • > task 的任務是按照指定的參數去執行模塊,每一個 task 都使用 name 輸出 palybook 的運行結果,通常輸出的內容爲描述該任務執行的步驟,若是沒有提供將輸出 action 的運行結果。
  • 列如:

- hosts: aaa
  remote_user: root

  tasks:
  - name: install pachages          // name: 自定義名稱
    yum: name=httpd state=latest    // yum:安裝 httpd 服務,檢測是不是最新版本
  - name: disable selinux
    command: /sbin/setenforce 0       //關閉selinux
  - name: disable firewall
    command: systemctl stop firewalld    //關閉防火牆
  - name: apache
    service: name=httpd enabled=true state=started    //啓動httpd服務,設置爲開啓自啓

        ansible-playbook -C aaa.yml    檢測語法與過程是否正確,不會正真的執行!

自動化運維-Ansible (第三部:Playbook 介紹)

Handlers 介紹

Handlers 用於當關注的資源變化的時候採起的操做。在 notify 中累出的操做便成爲 handler,也就是在 notify 中須要條用 handler 中定義的操做。而 notify 這個動做 在每一個 play 的最後被觸發,僅在全部的變化發生完成後一次性地執行指定操做。

自動化運維-Ansible (第三部:Playbook 介紹)

Templates 介紹

Templates 能夠看做是一個編譯過的模板文件,用來產生目標文本,傳遞變量給模板去替換裏面中的標記。

準備一個配置文件模板,必須以 .j2 格式。再對模板進行編輯,統一模板。
[root@master ~]# vim /etc/httpd/conf/httpd.conf.j2
自動化運維-Ansible (第三部:Playbook 介紹)

- hosts: aaa
  remote_user: root

  tasks:
  - name: install pachages
    yum: name=httpd state=latest
  - name: disable selinux
    command: /sbin/setenforce 0
  - name: file to httpd
    template: src=/etc/httpd/conf/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf

自動化運維-Ansible (第三部:Playbook 介紹)

Tages 介紹

若是屢次執行修改 playbook 會涉及到一些沒有變化的代碼,可使用tags 讓用戶選擇跳過沒有變化的代碼,只運行 tags 標記的代碼。它就是一個 「 標籤 」 。

自動化運維-Ansible (第三部:Playbook 介紹)

相關文章
相關標籤/搜索