Ansilbe PlayBook

Loading

下面來看一下如何透過 Ansible 來做自動化部署

測試環境 CentOS 9 Stream (虛擬機)

Ansible 架構分為 Control node ( Ansible 控制端) 與 Managed nodes (被 Ansible 控制端) , 下面的範例使用 locatehost 本身當作 Managed node (與 Control node 同一台來做).

安裝 Ansible
官網是用 pip 來安裝 Ansible.

[root@localhost ~]# yum install pip
[root@localhost ~]# pip install ansible
[root@localhost ~]# pip install ansible-lint

這邊來看一下 劇本 (Playbooks) 是要如何使用.

範例1

透過 Managed Nodes 進行指定的動作 (Plays) 和任務 (Tasks) 依序做大量工作時需使用 Playbooks 的方式,以下定義了兩個 Task.

[root@localhost ansible_quickstart]# vi local_playbook.yaml
- name: My first play
  hosts: localhost
  tasks:
   - name: Ping my hosts
     ansible.builtin.ping:

   - name: Print message
     ansible.builtin.debug:
      msg: Hello world

Note: 須注意 name 後面所接的名稱第一個字元須為大寫.

這邊列了2個 Task 皆是使用內建的 模組.

  • ansible.builtin.ping
    ping host , 這邊無 Inventroy 所以只針對 localhost.
  • ansible.builtin.debug
    debug 顯示訊息在 stdout

透過程式去檢測 yaml 內容是否無誤.

[root@localhost ansible_quickstart]# ansible-lint local_playbook.yaml

Passed: 0 failure(s), 0 warning(s) on 1 files. Last profile that met the validation criteria was 'production'.
A new release of ansible-lint is available: 6.22.2 → 24.5.0

執行.

[root@localhost ansible_quickstart]# ansible-playbook local_playbook.yaml
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match
'all'

PLAY [My first play] ***************************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [localhost]

TASK [Ping my hosts] ***************************************************************************************************
ok: [localhost]

TASK [Print message] ***************************************************************************************************
ok: [localhost] => {
    "msg": "Hello world"
}

PLAY RECAP *************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

執行結果.

  • TASK [Gathering Facts]
    預設 Ansible 會收集有關在 playbook 中有使用的清單的資訊(這邊為 localhost)
  • TASK [Ping my hosts] TASK [Print message]
    顯示為 ok 表示它運行成功.
  • PLAY RECAP
    這邊會總結了每個主機的 Play 中所有 Task 任務的結果.

範例2

參考範例 – https://hackmd.io/@blueskyson/learn-ansible#Lab-1-%E5%9C%A8-localhost-%E5%9F%B7%E8%A1%8C-Hello-World

[root@localhost ansible_quickstart]# vi local_playbook2.yaml
- name: Play with Ansible
  hosts: localhost
  tasks:
   - name: Just execute df -h
     ansible.builtin.command: df -h
     register: output
     changed_when: output.rc == 0

   - name: Show stdout
     ansible.builtin.debug:
      msg: "{{ output.stdout_lines }}"

範例說明:
有兩個 Task .

  • Task 1
    這邊使用 Ansible 內建的 module ( command ) ,主要功能是在被部屬的對象執行一個指定的指令 , 範例是 執行 df -h
    register 是用來接收前面 ansible.builtin.command 的回傳值,並儲存在指定變數 output.
    changed_when ?
  • Task 2
    這邊使用內建的 debug module 將 Task 1 的 output 變數到終端機.

檢查 yaml 內容.

[root@localhost ansible_quickstart]# ansible-lint local_playbook2.yaml

Passed: 0 failure(s), 0 warning(s) on 1 files. Last profile that met the validation criteria was 'production'.
A new release of ansible-lint is available: 6.22.2 → 24.5.0

執行結果

[root@localhost ansible_quickstart]# ansible-playbook local_playbook2.yaml
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match
'all'

PLAY [Play with Ansible] ***********************************************************************************************

TASK [Gathering Facts] *************************************************************************************************
ok: [localhost]

TASK [Just execute df -h] **********************************************************************************************
changed: [localhost]

TASK [Show stdout] *****************************************************************************************************
ok: [localhost] => {
    "msg": [
        "檔案系統             容量  已用  可用 已用% 掛載點",
        "devtmpfs             4.0M     0  4.0M    0% /dev",
        "tmpfs                1.8G  144K  1.8G    1% /dev/shm",
        "tmpfs                726M  9.6M  716M    2% /run",
        "/dev/mapper/cs-root   17G  7.3G  9.8G   43% /",
        "/dev/sda1           1014M  488M  527M   49% /boot",
        "tmpfs                363M   52K  363M    1% /run/user/42",
        "tmpfs                363M   36K  363M    1% /run/user/0"
    ]
}

PLAY RECAP *************************************************************************************************************
localhost                  : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料