Scripting
如何在 Ansible 中將 array_name 動態分配給 with_items
我有一個 json 文件(server.json),其內容如下:
servers_groupA: [{server_name: server1abc.net, start_file: w.bat, stop_file: d.bat}, {server_name: server2.abc.net, start_file: w.bat, stop_file: d.bat} ] servers_groupB: [{server_name: server3.abc.net, start_file: e.bat, stop_file: f.bat}, {server_name: server4.abc.net, start_file: e.bat, stop_file: f.bat } ]
我必須使用以下程式碼將此伺服器動態分配給一個組:
hosts: localhost gather_facts: false ignore_errors: yes vars: server_vaar: "servers_groupA" #server_vaar: {{ server_group }} tasks: - name: Importing json file include_vars: file: server.json - name: Adding host dynamically to inventory add_host: hostname: "{{ item.server_name }}" groups: testing_servers_group ansible_connection: winrm ansible_port: 5985 ansible_winrm_transport: ntlm ansible_winrm_scheme: http ansible_winrm_server_cert_validation: ignore ansible_winrm_operation_timeout_sec: 60 ansible_winrm_read_timeout_sec: 70 with_items: "{{ server_vaar }}"
因此,vars 中提到的 server_vaar 的值將作為額外變數從 Splunk 傳遞給腳本,或者在 ansible 腳本執行時手動傳遞。
此 server_vaar 值可以是 servers_groupA、servers_groupB、servers_groupC、servers_groupD。我們需要將此名稱傳遞給“動態添加主機到庫存”任務中的 with_items。這樣它就會進入 json 文件中的那個數組,並將 server_name 從該列表傳遞到庫存,並創建一個組“testing_servers_group”作為庫存組。
所以我傳入了 with_items: “{{ server_vaar}}” 這應該被視為 with_items: “{{ servers_groupA }}”
但它為該 server_vaar 拋出了錯誤作為“未定義的變數”。我找不到將此組名傳遞給 with 項目的解決方案。誰能給我一些關於我面臨的這個問題的想法。
使用查找外掛vars。例如
loop: "{{ lookup('vars', server_vaar) }}"