1. 程式人生 > >Ansible Playbook 詳解

Ansible Playbook 詳解

一、playbook 的簡單使用

1、建立檔案例項

(1)編輯配置檔案

[[email protected] ~]# cd /etc/ansible/
[[email protected] ansible]# vim test.yml        //固定字尾為yml,一定要注意空格
    ---
    - hosts: testhost
      user: root
      tasks:
        - name: playbook_test
          shell: touch /tmp/playbook.txt

注意:

  • hosts引數指定了對哪些主機進行參作;

  • user引數指定了使用什麼使用者登入遠端主機操作;

  • tasks指定了一個任務,其下面的name引數同樣是對任務的描述,在執行過程中會打印出來。

(2)執行建立playbook檔案檔案

[[email protected] ansible]# ansible-playbook test.yml 
    PLAY [testhost] ****************************************************************

    TASK [setup] *******************************************************************
    ok: [192.168.2.71]
    ok: [192.168.2.73]
    ok: [192.168.2.72]

    TASK [playbook_test] ***********************************************************
    changed: [192.168.2.71]
    changed: [192.168.2.73]
    changed: [192.168.2.72]

    PLAY RECAP *********************************************************************
    192.168.2.71               : ok=2    changed=1    unreachable=0    failed=0   
    192.168.2.72               : ok=2    changed=1    unreachable=0    failed=0   
    192.168.2.73               : ok=2    changed=1    unreachable=0    failed=0

(3)現在來檢視是否批量建立成功playbook.txt檔案。

[[email protected] ~]# ansible testhost -m command -a 'ls -l /tmp/playbook.txt'
    192.168.2.73 | SUCCESS | rc=0 >>
    -rw-r--r-- 1 root root 33 4月  19 13:41 /tmp/playbook.txt

    192.168.2.71 | SUCCESS | rc=0 >>
    -rw-r--r--. 1 root root 33 4月  19 13:41 /tmp/playbook.txt

    192.168.2.72 | SUCCESS | rc=0 >>
    -rw-r--r--. 1 root root 33 4月  19 13:41 /tmp/playbook.txt

(4)給建立的playbook批量匯入內容,並檢視匯入的結果

[[email protected] ansible]# vim test.yml 
    ---
    - hosts: testhost
      user: root
      tasks:
        - name: 鐵匠運維網部落格
          shell: echo "www.tiejiang.org" >> /tmp/playbook.txt
[[email protected] ansible]# ansible-playbook test.yml 
    PLAY [testhost] ****************************************************************

    TASK [setup] *******************************************************************
    ok: [192.168.2.71]
    ok: [192.168.2.72]
    ok: [192.168.2.73]

    TASK [鐵匠運維網部落格] *************************************************************
    changed: [192.168.2.73]
    changed: [192.168.2.71]
    changed: [192.168.2.72]

    PLAY RECAP *********************************************************************
    192.168.2.71               : ok=2    changed=1    unreachable=0    failed=0   
    192.168.2.72               : ok=2    changed=1    unreachable=0    failed=0   
    192.168.2.73               : ok=2    changed=1    unreachable=0    failed=0   

[[email protected] ansible]# ansible testhost -m command -a 'cat /tmp/playbook.txt'
    192.168.2.73 | SUCCESS | rc=0 >>
    www.tiejiang.org

    192.168.2.71 | SUCCESS | rc=0 >>
    www.tiejiang.org

    192.168.2.72 | SUCCESS | rc=0 >>
    www.tiejiang.org

2、建立使用者例項

(1)編輯配置檔案

[[email protected] yml]# vim create_user.yml
    ---
    - name: create_user
      hosts: testhost
      user: root
      gather_facts: false
      vars:
        - user: "tiejiang"
      tasks:
        - name: create user
          user: name="{{ user }}"
  • name引數對該playbook實現的功能做一個概述,後面執行過程中,會列印 name變數的值 ,可以省略;

  • gather_facts引數指定了在以下任務部分執行前,是否先執行setup模組獲取主機相關資訊,這在後面的task會使用到setup獲取的資訊時用到;

  • vars引數指定了變數,這裡指字一個user變數,其值為test ,需要注意的是,變數值一定要用引號引住;

  • user提定了呼叫user模組,name是user模組裡的一個引數,而增加的使用者名稱字呼叫了上面user變數的值。

(2)執行配置檔案

[[email protected] ansible]# ansible-playbook create_user.yml 

PLAY [create_user] *************************************************************

TASK [create user] *************************************************************
changed: [192.168.2.73]
changed: [192.168.2.71]
changed: [192.168.2.72]

PLAY RECAP *********************************************************************
192.168.2.71               : ok=1    changed=1    unreachable=0    failed=0   
192.168.2.72               : ok=1    changed=1    unreachable=0    failed=0   
192.168.2.73               : ok=1    changed=1    unreachable=0    failed=0

(3)檢視遠端機器的passwd檔案,是否創建出來了使用者

[[email protected] ansible]# ansible testhost -m command -a 'grep tiejiang /etc/passwd'
    192.168.2.73 | SUCCESS | rc=0 >>
    tiejiang:x:502:502::/home/tiejiang:/bin/bash

    192.168.2.72 | SUCCESS | rc=0 >>
    tiejiang:x:501:501::/home/tiejiang:/bin/bash

    192.168.2.71 | SUCCESS | rc=0 >>
    tiejiang:x:502:502::/home/tiejiang:/bin/bash

二、playbook迴圈

例項:修改/tmp目錄下的1.txthe 2.txt檔案屬性

(1)去新建實驗檔案

[[email protected] yml]# cat touch1and2.yml 
---
- hosts: testhost
  user: root
  tasks:
    - name: 建立實驗檔案
      shell: touch /tmp/{1.txt,2.txt}

[[email protected] yml]# ansible-playbook touch1and2.yml 

    PLAY [testhost] ****************************************************************

    TASK [setup] *******************************************************************
    ok: [192.168.2.73]
    ok: [192.168.2.71]
    ok: [192.168.2.72]

    TASK [建立實驗檔案] ******************************************************************
    changed: [192.168.2.73]
     [WARNING]: Consider using file module with state=touch rather than running touch

    changed: [192.168.2.71]
    changed: [192.168.2.72]

    PLAY RECAP *********************************************************************
    192.168.2.71               : ok=2    changed=1    unreachable=0    failed=0   
    192.168.2.72               : ok=2    changed=1    unreachable=0    failed=0   
    192.168.2.73               : ok=2    changed=1    unreachable=0    failed=0

(2)編輯配置檔案

[[email protected] yml]# cat loop.yml 
    ---
    - hosts: testhost
      user: root
      tasks:
        - name: change mode for files
          file: path=/tmp/{{ item }} mode=600 owner=root group=root
          with_items:
            - 1.txt
            - 2.txt

(3)執行配置檔案

[[email protected] yml]# ansible-playbook loop.yml 
    PLAY [testhost] ****************************************************************

    TASK [setup] *******************************************************************
    ok: [192.168.2.71]
    ok: [192.168.2.72]
    ok: [192.168.2.73]

    TASK [change mode for files] ***************************************************
    changed: [192.168.2.73] => (item=1.txt)
    changed: [192.168.2.71] => (item=1.txt)
    changed: [192.168.2.72] => (item=1.txt)
    changed: [192.168.2.73] => (item=2.txt)
    changed: [192.168.2.71] => (item=2.txt)
    changed: [192.168.2.72] => (item=2.txt)

    PLAY RECAP *********************************************************************
    192.168.2.71               : ok=2    changed=1    unreachable=0    failed=0   
    192.168.2.72               : ok=2    changed=1    unreachable=0    failed=0   
    192.168.2.73               : ok=2    changed=1    unreachable=0    failed=0

三、playbook條件判斷

條件判斷一般用於針對不同版本的系統,比如對centos、ubuntu 等系統進行不同的操作命令。

(1)編輯配置檔案

[[email protected] yml]# vim when.yml
    ---
    - hosts: testhost
      user: root
      gather_facts: True
      tasks:
        - name: use when
          shell: touch /tmp/when.txt
          when: ansible_default_ipv4.address == "192.168.2.73"

(2)執行配置檔案

[[email protected] yml]# ansible-playbook when.yml
    PLAY [testhost] ****************************************************************

    TASK [setup] *******************************************************************
    ok: [192.168.2.71]
    ok: [192.168.2.73]
    ok: [192.168.2.72]

    TASK [use when] ****************************************************************
    skipping: [192.168.2.71]
    skipping: [192.168.2.72]
    changed: [192.168.2.73]
     [WARNING]: Consider using file module with state=touch rather than running touch


    PLAY RECAP *********************************************************************
    192.168.2.71               : ok=1    changed=0    unreachable=0    failed=0   
    192.168.2.72               : ok=1    changed=0    unreachable=0    failed=0   
    192.168.2.73               : ok=2    changed=1    unreachable=0    failed=0

四、playbook handlers

當我們執行 tasks 後,伺服器發生變化之後我們要執行一些操作。比如我們修改了某個服務的配置檔案,需要重啟下服務。例項如下:

(1)編輯配置檔案

[[email protected] yml]# vim handlers.yml
    ---
    - name: handlers test
      hosts: testhost
      user: root
      tasks:
        - name: test copy
          copy: src=/etc/passwd dest=/tmp/handlers.txt
          notify: test handlers
      handlers:
        - name: test handlers
          shell: echo "www.tiejiang.org" >> /tmp/handlers.txt

說明:只有 copy 模組真正執行後,才會去呼叫下面的 handlers 相關的操作,追加內容。也就是說如果 src 和 dest 內容是一樣的,並不會去執行 handlers 裡面的 shell 相關命令。所以這種比較適合配置檔案發生更改後,需要重啟服務的操作。

(2)執行配置檔案

[[email protected] yml]# ansible-playbook handlers.yml
    PLAY [handlers test] ***********************************************************

    TASK [setup] *******************************************************************
    ok: [192.168.2.73]
    ok: [192.168.2.71]
    ok: [192.168.2.72]

    TASK [test copy] ***************************************************************
    changed: [192.168.2.71]
    changed: [192.168.2.73]
    changed: [192.168.2.72]

    RUNNING HANDLER [test handlers] ************************************************
    changed: [192.168.2.71]
    changed: [192.168.2.73]
    changed: [192.168.2.72]

    PLAY RECAP *********************************************************************
    192.168.2.71               : ok=3    changed=2    unreachable=0    failed=0   
    192.168.2.72               : ok=3    changed=2    unreachable=0    failed=0   
    192.168.2.73               : ok=3    changed=2    unreachable=0    failed=0

(3)檢視執行結果

[[email protected] yml]# ansible testhost -m command -a 'tail -n 1 /tmp/handlers.txt '     //這裡我直接用-n 1顯示handlers.txt的最後一行內容
192.168.2.71 | SUCCESS | rc=0 >>
www.tiejiang.org

192.168.2.73 | SUCCESS | rc=0 >>
www.tiejiang.org

192.168.2.72 | SUCCESS | rc=0 >>
www.tiejiang.org

可檢視到 copy 檔案成功,同時也執行了 handlers 的相關命令,追加了新的資訊。

相關推薦

Ansible Playbook

一、playbook 的簡單使用 1、建立檔案例項 (1)編輯配置檔案 [[email protected] ~]# cd /etc/ansible/ [[email protected] ansible]# vim test.yml //固定字尾為yml,一定要注意

Ansible自動化運維之Playbook及體驗(二)

tasks ansible sha shadow yml ESS remote name 自動化運維 Handlers介紹: Handlers也是一些task的列表,和一般的task並沒有什麽區別。是由通知者進行的notify,如果沒有被notify,則Handlers

AnsiblePlaybook、案例

運行 vat tor 應用程序 div cat share erro sta 什麽是playbook playbooks是一個不同於使用Ansible命令行執行方式的模式,其功能更強大靈活。簡單來說,playbook是一個非常簡單的配置管理和多主機部署系統,不同於任何已經

ansible命令

哪些 for 匹配 登錄密碼 參數 默認 ansi markdown usr 查看ansible版本 import ansible print(ansible.__version__) 命令參數 -m:要執行的模塊,默認為command -a:模塊的參數 -u:ssh連接

Ansible變數

一、在Inventory中定義變數 詳見《Ansible2:主機清單》 二、在Playbook中定義變數 1、通過vars關鍵字定義: vars:    http_port: 80   server_name: localhost  

ansible配置檔案ansible.cfg

1)inventory 該引數表示資源清單inventory檔案的位置,資源清單就是一些Ansible需要連線管理的主機列表 inventory = /root/ansible/hosts 2)library Ansible的操作動作,無論是本地或遠端,都使用一小段程式碼來執行,這小段程式碼稱為模

ansible配置文件ansible.cfg

需要 user true var private 控制 cfg 用戶 ssh連接 1)inventory 該參數表示資源清單inventory文件的位置,資源清單就是一些Ansible需要連接管理的主機列表 inventory = /root/ansible/hosts

Ansible配置

目錄 Ansible配置詳解 參考 配置優先順序 配置引數說明 Ansible配置詳解

ansible-playbook使用

playbook 字典 簡單 amp 標題 一個 developer 所有 主機 一、YAML簡介二、Ansible組件三、主機清單Invetory四、PlayBook介紹 一、YAML簡介http://www.yaml.orgYAML:可以使用簡單清單,散列表,標題

自動化運維工具 Ansible ——playbook 劇本及簡易案例

Playbook-劇本介紹  Playbook是 一個不同於使用Ansible命令列執行方式的模式,其功能更強大靈活。簡單來說,playbook是一個非常簡單的配置管理和多主機部署系統,不同於任何已經存在的模式,可作為一個適合部署複雜應用程式的基礎。Playbook可以定製配置,可以按照指定的操作步驟有序執

Ansibleplaybook(劇本)介紹和配置

前言 在上篇博文中講解了ansible的多個常用的模組,這些模組讓ansible具有了管理,部署後端主機的能力,但是一個一個命令的執行明顯很浪費時間,那麼能不能有一個檔案類似於shell指令碼那樣可以把複雜的、重複的命令,簡單化、程式流程化起來呢?答案是肯定的,playbook劇本就

第一百一十天 : ansible-playbook 使用

PlayBook: 核心元素: Tasks:任務,由模組定義的操作的列表; Variables:變數 Templates:模板,即使用了模板語法的文字檔案; Handlers:由特定條件觸發的Tasks; Roles:角色; playbook的基礎

Ansibleplaybook的使用

完成 小結 jinja2 jinja play 特定 不能 組成 語言 之前詳細介紹了Ansible的安裝, 配置, 以及Ansible常用模塊的使用. 下面對Ansible的playbook用法做一小結. 為什麽引入playbook?一般運維人員完成一個任務, 比如安裝

ansible hosts文件

ansible hosts# This is the default ansible ‘hosts‘ file.## It should live in /etc/ansible/hosts## - Comments begin with the ‘#‘ character# - Blank line

Ansible(二)

latest load 遠程 即使 centos fine oct syn srv Ansible系列命令 Ansible系列命令有如下: ansible:這個命令是日常工作中使用率非常高的命令之一,主要用於臨時一次性操作; ansible-doc:是Ansible模塊文

自動化運維工具——ansible(一)

數據 修改時間 們的 ransac 例如 ces 備份文件 其中 其他 ansible 簡介 ansible 是什麽?   ansible是新出現的自動化運維工具,基於Python開發,集合了眾多運維工具(puppet、chef、func、fabric)的優點,實現了批量系

Ansible安裝部署及常用模塊

就會 新用戶 特殊 packages add chdir epel change ima Ansible命令使用 Ansible語法使用ansible <pattern_goes_here> -m <module_name> -a <argum

ansible-playbook組件解析及操作全

list use 準備 task 服務 遠程 少包 依賴 cts 轉載於http://www.178linux.com/7001 一、ansible-playbook介紹: playbook是由一個或多個”play”組成的列表。play的主要功能在於將事先歸為一組的主機裝

Ansible(一)

bash share cau 類型 isp 界面 echo unless try_files 一、運維相關概念介紹二、ansible介紹三、ansible命令四、ansible常用模塊五、ansible配置文件詳解一、運維相關概念介紹運維:Opreations1.系統安裝:

Ansible 學習記錄 (四)配置文件

主機列表 配置 transport 最值 nec conf sts 主機名 ngs 在這整個ansible配置中,最值得我們關註的是配置文件、主機列表文件, Ansible 配置 /etc/ansible/ansible.cfg  ##ansible 配置文件,保留默認即可