自動化運維Ansible之Playbook之劇本

Playbook 介紹

Playbook 是由一個或多個piay組成的列表,只要功能是講task 定義好角色歸併未一組進行統一管理,也就是通過task調用 Ansible 的模講多個play組成在一個playbook中運行

playbooks本身由以下各部分組成

  1. Tasks:任務,即調用模塊完成的某操作;就當執行的事物,若有一條語句沒有執行成功則回滾
  2. Variables:變量 可以劇本中定義變量,預定義變量 主機清單 定義在命令-e
  3. Templates:模板 修改配置文件
  4. Handlers:處理器,當某條件滿足時,觸發執行的操作;
  5. 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之劇本
自動化運維Ansible之Playbook之劇本

命令 說明
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 介紹
  1. Play的主體部分是task列表,task列表中的各任務按次序逐個在hosts中指定的主機上執行,即在所有主機上完成第一個任務後再開始第二個任務。
    在運行playbook時(從上到下執行),如果一個host執行task失敗,整個tasks都會回滾,請修正playbook 中的錯誤,然後重新執行即可。
    Task的目的是使用指定的參數執行模塊,而在模塊參數中可以使用變量,模塊執行時冪等的,這意味着多次執行是安全的,因爲其結果一致。
  2. 每一個task必須有一個名稱name,這樣在運行playbook時,從其輸出的任務執行信息中可以很好的辨別出是屬於哪一個task的。如果沒有定義name,‘action’的值將會用作輸出信息中標記特定的task。
  3. 定義一個task,常見的格式:”module: options” 例如:yum: name=httpd
  4. 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之劇本

自動化運維Ansible之Playbook之劇本
自動化運維Ansible之Playbook之劇本
自動化運維Ansible之Playbook之劇本

條件測試

如果需要根據變量、facts(setup)或此前任務的執行結果來作爲某task執行與否的前提時要用到條件測試,在Playbook中條件測試使用when子句。
在task後添加when子句即可使用條件測試:when子句支持jinjia2表達式或語法
自動化運維Ansible之Playbook之劇本
自動化運維Ansible之Playbook之劇本

迭代

當有需要重複性執行的任務時,可以使用迭代機制。其使用格式爲將需要迭代的內容定義爲item變量引用,並通過with_items語句指明迭代的元素列表即可。
自動化運維Ansible之Playbook之劇本
定義標籤
事實上,不光可以爲單個或多個task指定同一個tags。playbook還提供了一個特殊的tags爲always。作用就是當使用always當tags的task時,無論執行哪一個tags時,定義有always的tags都會執行
自動化運維Ansible之Playbook之劇本
自動化運維Ansible之Playbook之劇本

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章