Contents

Ansible - 流程控制

透過 Playbook 可以很方便執行大量機器部署,掌握如何操控 Playbook 流程,例如 Playbook 迴圈或是條件式判斷等操作,能更有效率執行部署機器。

練習環境
可以使用 HowHow 的創建 Lab 練習環境,來操作多台機器練習 Ansible,使用方式請參閱 HowHow 網站

1. 迴圈 Loop

Loop 迴圈減少 PlayBook 重複內容。

1.1. 簡易的迴圈

使用 loop 關鍵字定義迴圈,並使用 item 當作變數, Playbook 範例:

1
2
3
4
5
6
7
8
- name: Start Service
  service:
    name: "{{ item }}"
    state: start
  loop:
    - httpd
    - mysql
    - firewalld

1.2. 字典陣列迴圈

當一個迴圈有多個變數可以透字典方式來協助, Playbook 範例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
- name: Create Users
  user:
    name: "{{ item.name }}"
    state: present
    groups: "{{ item.groups }}"
  loop:
    - name: bob
      groups: wheel
    - name: john
      groups: root

2. 條件判斷式

透過條件斷式可以執行更進階操作。

2.1. 簡易的條件判斷

使用 when 關鍵字來定義條件式的判斷開始。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
- name: Test The Var is Defined Example
  hosts: all
  vars:
    my_service: httpd
  
  tasks:
    - name: "{{ my_service }}" package is installed
      yum:
        name: "{{ my_service }}"
        state: present
      when: my_service is defined

2.2. 條件判斷列表

選項 範例
等於(字串) ansible_facts[‘machine’] == ‘x86_64’
等於(數值) ansible_facts[‘max_memory’] == 512
大於 ansible_facts[‘max_memory’] > 512
小於 ansible_facts[‘max_memory’] < 128
大於等於 ansible_facts[‘max_memory’] >= 512
小於等於 ansible_facts[‘max_memory’] <= 128
不等於 ansible_facts[‘max_memory’] != 512
變數存在 ansible_facts[‘machine’] is defined
變數不存在 ansible_facts[‘machine’] is not defined
布林值為1 ansible_facts[‘hostname’]
布林值為0 not ansible_facts[‘hostname’]
條件有在陣列中 ansible_facts[‘hostname’] in abc

3. 小結

程式控制流程與寫程式類似的邏輯,盡可能使用最簡短的方式達成想要的目的。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!