測試環境 CentOS 9 Stream (虛擬機)
架構需求如下系統可以分為 Control node ( Ansible 控制端) 與 Managed nodes (被 Ansible 控制端)
- Control node ( Ansible 控制端) IP: 192.168.31.131
- Managed nodes (被 Ansible 控制端) IP: 192.168.31.133 與 192.168.31.178
以下是問 ChatGT 的, 如何在 Managed node1 執行 echo ‘1’ , 在 node2 執行 echo ‘2’ 的範例
使用 host_vars 目錄來為每個節點定義特定的變量,並在 Playbook 中使用這些變量。這個方法可以讓你的配置更加模組化和易於維護。
目錄結構
首先,確保你的 Ansible 專案目錄結構如下所示:
ansible_project/ ├── inventory │ ├── hosts │ └── host_vars/ │ ├── node1.yml │ ├── node2.yml ├── playbook.yml
[root@localhost ~]# mkdir -p ansible_project/inventory/host_vars/ [root@localhost ~]# cd ansible_project/ [root@localhost ansible_project]#
- 創建 Inventory 文件
在 inventory/hosts 文件中,定義你的節點:[root@localhost ansible_project]# vi inventory/hosts [nodes] node1 ansible_host=192.168.31.133 node2 ansible_host=192.168.31.178
- 創建 host_vars 目錄和變量文件
在 inventory/host_vars/ 目錄中,為每個節點創建一個 YAML 文件,並在文件中定義特定於該節點的變量。[root@localhost ansible_project]# vi inventory/host_vars/node1.yml node_command: "echo '1'"
[root@localhost ansible_project]# vi inventory/host_vars/node2.yml node_command: "echo '2'"
- 創建 Playbook
在 Ansible 專案目錄中,創建一個 Playbook 文件 playbook.yml (建議可以用 nano 的編輯器, copy Paste 以下資料就不會出問題)[root@localhost ansible_project]# vi playbook.yml - hosts: nodes tasks: - name: 執行特定節點的命令 command: "{{ node_command }}"
這個 Playbook 的作用是在所有定義在 nodes 組中的節點上執行每個節點特定的命令。命令是通過每個節點的 host_vars 文件中的 node_command 變量來定義的。
- 執行 Playbook
在終端中導航到你的 Ansible 專案目錄,然後運行以下命令來執行 Playbook:可以先用 ansible-lint 檢視 playbook.yml 是否有錯誤.
[root@localhost ansible_project]# ansible-lint playbook.yml WARNING Listing 3 violation(s) that are fatal name[play]: All plays should be named. playbook.yml:1 fqcn[action-core]: Use FQCN for builtin module actions (command). playbook.yml:3 Use `ansible.builtin.command` or `ansible.legacy.command` instead. no-changed-when: Commands should not change things if nothing needs doing. playbook.yml:3 Task/Handler: 執行特定節點的命令 Read documentation for instructions on how to ignore specific rule violations. Rule Violation Summary count tag profile rule associated tags 1 name[play] basic idiom 1 no-changed-when shared command-shell, idempotency 1 fqcn[action-core] production formatting Failed: 3 failure(s), 0 warning(s) on 1 files. Last profile that met the validation criteria was 'min'. A new release of ansible-lint is available: 6.22.2 → 24.6.1
執行
[root@localhost ansible_project]# ansible-playbook -i inventory/hosts playbook.yml PLAY [nodes] *********************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************* ok: [node1] ok: [node2] TASK [執行特定節點的命令] ********************************************************************************************** changed: [node1] changed: [node2] PLAY RECAP ************************************************************************************************************* node1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 node2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
解釋
- Inventory 文件:inventory/hosts 文件中定義了所有節點,並將它們分組在 nodes 組中。
- Host Variables:在 inventory/host_vars/ 目錄中,每個節點有一個單獨的 YAML 文件,定義了該節點的特定變量 node_command。
- Playbook:在 playbook.yml 中,任務 執行特定節點的命令 使用 command 模塊來執行 node_command 變量中定義的命令。Ansible 會自動根據當前節點從對應的 host_vars 文件中讀取 node_command 變量的值。
通過這種方法,你可以輕鬆地為每個節點定義特定的變量,並在 Playbook 中引用這些變量。這樣做的好處是配置更加模組化,便於管理和維護。
沒有解決問題,試試搜尋本站其他內容