ansible playbook相關

playbook(劇本)

格式

playbook的編寫應遵循yaml格式的語法web

列表 -
字典 k:v
後綴名爲 .yaml 或 .yml

# 簡單示例
- hosts: web  # 主機ip/分組名
  remote_user: root  # 用戶身份
  tasks:
  - name: installlxml   # 任務名
    pip: name=lxml  # 使用的模塊: 參數

# 注: 執行時使用ansible-playbook  xx.yml

傳參

# 1. 直接給playbook傳參
- hosts: web
  remote_user: root
  tasks:
  - name: installl{{ module_name }}
    pip: name={{ module_name }}

# 2. 在playbook中以vars方式傳參
- hosts: web
  remote_user: root
  vars:
  - module_name: requests
  tasks:
  - name: installl{{ module_name }}
    pip: name={{ module_name }}

# 注: 執行時使用ansible-playbook -e module_name xx.yml


# 3. 在/etc/ansible/hosts 文件中傳參
[web]
192.168.80.128 module_name=requests
192.168.80.129 module_name=flask

# 注: 執行時使用ansible-playbook  xx.yml


# 4. 在/etc/ansible/hosts 文件中以[分組名:vars]方式傳參
[web]
192.168.80.128
192.168.80.129
[web:vars]
module_name=requests

# 5. 利用上次任務的結果傳值
- hosts: web
  remote_user: root
  tasks:
  - name: sum
    shell: echo 2+2|bc
    register: user

  - name: create{{ user }}
    user: name=nihao{{ user.stdout }}

# 注: 執行時使用ansible-playbook  xx.yml
# 須要先進行 yum -y install bc 操做


# 五種傳參方式的優先級
-e > vars > hosts

標籤

# 只執行playbook中部份內容

- hosts: web  # 主機ip/分組名 
  remote_user: root  # 用戶身份 tasks:
  tasks:
  - name: installlxml   # 任務名
    pip: name=lxml  # 使用的模塊: 參數
    tags: 標籤名

# 注: 執行時使用ansible-playbook -t   標籤名 xx.yml

模板

- hosts: web
  remote_user: root
  tasks:
  - name: install
    yum: name=reids
    tags: install
  - name: copyfile
    template: src=redis.conf.j2 dest=/etc/redis.conf
    tags: copyfile
  - name: startredis
    service: name=redis state=started
    tags: start

# 注:redis.conf.j2文件是一個包含jinja2語法的redis.conf文件,經過配合template完成根據主機ip, 動態設置redis.conf中bind ip
# redis.conf.j2
bind {{ ansible_default_ipv4.address }}

條件判斷

- hosts: web  # 主機ip/分組名 
  remote_user: root  # 用戶身份 tasks:
  tasks:
  - name: installlxml   # 任務名
    pip: name=lxml  # 使用的模塊: 參數
    when: num==1  # 條件判斷,由於when語法緣由不須要寫成{{ num }} == 1

# 注: 執行時使用ansible-playbook  xx.yml

循環

# 循環建立nihao, hello, hah三個用戶
- hosts: web  # 主機ip/分組名 
  remote_user: root # 用戶身份 tasks:
  tasks:
  - name: createUser # 任務名
    user: name={{ item }}
    with_items:
    - nihao
    - hello
    - hah

# 注: 執行時使用ansible-playbook  xx.yml


# 建立用戶並指定組
- hosts: web  # 主機ip/分組名 
  remote_user: root # 用戶身份 tasks:
  tasks:
  - name: creategroup
    group: name={{ item.group }}
  - name: createUser # 任務名
    user: name={{ item.name }} group={{ item.group }}
    with_items:
    - { name: nihao, group: niao}
    - { name: hello, group: hello}
    - { name: hah, group: hah}

handler

- hosts: cache
  remote_user: root
  tasks:
  - name: install
    yum: name=redis
    tags: install
  - name: copyfile
    template: dest=/etc/redis.conf src=redis.conf.j2
    tags: copyfile
    notify: restart redis  # 此任務執行完後,執行handler
  - name: startredis
    service: name=redis state=started
    tags: start
  handlers:
  - name: restart redis
    service: name=redis state=restarted
相關文章
相關標籤/搜索