天天看點

自動化運維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之劇本

條件測試

疊代