下面來看一下如何透過 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
沒有解決問題,試試搜尋本站其他內容