Scripting

如何在 Ansible 中將 array_name 動態分配給 with_items

  • July 28, 2020

我有一個 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) }}"

引用自:https://serverfault.com/questions/1027060