1. 程式人生 > >ansible--playbook用法與自己的yml範例總結

ansible--playbook用法與自己的yml範例總結

內置變量 簡單 常見 方式 kconfig shel package fff log

介紹

技術分享圖片

命令用法

  • 運行playbook的方式
    ansible-playbook <filename.yml> ... [options]
  • 常見選項
    --check -C 只檢測可能會發生的改變,但不真正執行操作
    --list-hosts 列出運行任務的主機
    --list-tags 列出tag
    --list-tasks 列出task
    --limit 主機列表 只針對主機列表中的主機執行
    -v -vv -vvv 顯示過程
  • 示例
    ansible-playbook file.yml --check 只檢測
    ansible-playbook file.yml
    ansible-playbook file.yml --limit websrvs

    Playbook核心元素

  • Hosts 執行的遠程主機列表
  • Tasks 任務集
  • Varniables 內置變量或自定義變量在playbook中調用
  • Templates 模板,可替換模板文件中的變量並實現一些簡單邏輯的文件
  • Handlers 和 notity 結合使用,由特定條件觸發的操作,滿足條件方才執行,
    否則不執行
  • tags 標簽 指定某條任務執行,用於選擇運行playbook中的部分代碼。ansible
    具有冪等性,因此會自動跳過沒有變化的部分,即便如此,有些代碼為測試其
    確實沒有發生變化的時間依然會非常地長。此時,如果確信其沒有變化,就可
    以通過tags跳過此些代碼片斷

playbook執行的文件為yml格式

  • 此為範例
---
- hosts: all    # 代表在所有主機執行
  remote_user: root #以root身份執行
  tasks:
    - name: hello world #標簽名
      command: /usr/bin/wall hello world #執行的命令

與shell腳本對比

SHELL腳本

#!/bin/bash
# 安裝Apache
yum install --quiet -y httpd
# 復制配置文件
cp /tmp/httpd.conf /etc/httpd/conf/httpd.conf
cp/tmp/vhosts.conf /etc/httpd/conf.d/
# 啟動Apache,並設置開機啟動
service httpd start
chkconfig httpd on

Playbook定義


---
- hosts: all
 tasks:
 - name: "安裝Apache"
 yum: name=httpd
 - name: "復制配置文件"
 copy: src=/tmp/httpd.conf dest=/etc/httpd/conf/
 - name: "復制配置文件"
 copy: src=/tmp/vhosts.conf dest=/etc/httpd/conf.cd/
 - name: "啟動Apache,並設置開機啟動"
 service: name=httpd state=started enabled=yes

handlers和notify結合使用觸發條件

  • Handlers
    是task列表,這些task與前述的task並沒有本質上的不同,用於當關註的資源發生
    變化時,才會采取一定的操作
  • Notify此action可用於在每個play的最後被觸發,這樣可避免多次有改變發生
    時每次都執行指定的操作,僅在所有的變化發生完成後一次性地執行指定操作。
    在notify中列出的操作稱為handler,也即notify中調用handler中定義的操作

技術分享圖片

自己的yml範例

#install httpd
- hosts: appsrvs
  remote_user: root

  tasks:
    - name: install package
      yum: name=httpd
    - name: config file
      copy: src=files/httpd.conf dest=/etc/httpd/conf/ backup=yes
      notify: restart service
      tags: config
    - name: service
      service: name=httpd state=started enabled=yes
      tags: service
    - name: restart service
      service: name=httpd state=restarted 
      tags: service
  handlers:
    - name: restart service
      service: name=httpd state=restarted 

技術分享圖片

item和變量使用

---
# file var
- hosts: app
  remote_user: root

  tasks:
    - name: file
      file: name=/data/{{item}}{{mark}}{{ansible_hostname}}.log state=touch 
      with_items:
        - abc
        - xyz
        - 123

技術分享圖片

  • item 組
- hosts: appsrvs
  remote_user: root

  tasks:
    - name: create group
      group: name={{item}}
      with_items:
        - agroup
        - bgroup
        - cgroup

    - name: create user
      user: name={{item.name}}  group={{item.group}}
      with_items:
        - {name: "aaa",group: "agroup"}
        - {name: "bbb",group: "bgroup"}
        - {name: "ccc",group: "cgroup"}

技術分享圖片

templates使用

---
  - hosts: all
  - vars:
    test_ports: 
      - 81
      - 82
      - 83
    tasks:
      - name: test
        template: src=test.conf.j2 dest=/data/test.conf

技術分享圖片

{%for i in test_ports %}
server {
    listen  {{i}}
    server_name www.a.com
    root   /app/websitea/
}
{%endfor%}
---
# file var
- hosts: appsrvs
  remote_user: root
  vars_files:
    - vars.yml
  vars:
    - port: 1234

  tasks:
    - name: file
      file: name=/data/{{ansible_hostname}}{{mark}}{{port}}.log state=touch 

ansible--playbook用法與自己的yml範例總結