簡體   English   中英

從 Ansible 輸出中過濾掉內容

[英]Filter out content from Ansible output

我想從 ansible 輸出中單獨過濾掉 ip 地址。 當我嘗試使用awk命令進行過濾時,它失敗了。 請查看我的代碼、輸出和所需的輸出。

    - name: Gather all VMs from a specific folder
      community.vmware.vmware_vm_info:
        hostname: hostname_local
        username: vmwarelogin
        password: passwordvmware
        folder: "/VMFS/"
        validate_certs: False
      delegate_to: localhost
      register: vm_info
    - debug:
        var: ip
      vars:
        ip: "{{ vm_info.virtual_machines|
                selectattr('guest_name', 'eq', 'My-Machine')|
                map(attribute='ip_address')|first }}"
      register: ip
    - name: add ip
      shell: echo "{{ip}}"| awk '{print $2}'

運行上述代碼后的輸出

{'ip': '192.168.1.32', 'failed': False, 'changed': False}

預期輸出為

192.168.1.32

將此IP地址用作同一劇本中其他地方的變量將不勝感激

如果我理解您想要使用YAML標簽傳達的內容,您是在暗示

{'ip': '192.168.1.32', 'failed': False, 'changed': False}

應被視為 YAML 文件。 如果是這種情況,您應該在允許的情況下使用 YAML 解析器,如果您想要可以用作流水線命令的一部分的解析器,那么我建議嘗試yq 如果您被迫為此使用AWK ,請注意它最適合處理屬於 Chomsky Type-3 的實體,而 YAML 不是 Chomsky Type-3 裝置。 無論如何,它可能足以滿足您的情況。 我建議以下啟發式:獲取看起來像十進制 IP 地址的第一件事,這可以在 GNU AWK中按照以下方式完成,假設您正在使用標准輸入來傳遞

{'ip': '192.168.1.32', 'failed': False, 'changed': False}

然后

awk 'BEGIN{FPAT="[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}"}{print $1}'

輸出

192.168.1.32

說明:我使用字段模式 ( FPAT ) 通知 GNU AWK該字段是 1 到 3 位數字,后跟文字點,后跟 1 到 3 位數字,后跟 1 到 3 位數字,后跟 1 到 3 位數字。 請注意,這確實只考慮十進制表示法的 IP 地址,並且還可能給出誤報(例如,它會找到999.999.999.999 )但希望您的輸入不是那么惡意。 print為每一行找到的第一個此類字段。

(在 gawk 4.2.1 中測試)

關於如何

... 將此 IP 地址用作同一劇本中其他地方的變量?

並查看提供的示例,您可以將案例簡化如下:

---
- hosts: localhost
  become: false
  gather_facts: false

  vars:
    IP: "192.168.2.1"

  tasks:

  - name: Show vars
    debug:
      var: IP
    register: result

  - name: Show result
    debug:
      var: result

  - name: Show IP
    debug:
      msg: "{{ result.IP }}"

只需在您的情況下使用 finally echo "{{ ip.ip }}"

我想從 Ansible 輸出中單獨過濾掉 IP 地址。

根本不需要awk ,因為內容已經存在並且可以直接訪問。

預期輸出是...

結果將符合要求

TASK [Show vars] ***
ok: [localhost] =>
  IP: 192.168.2.1

TASK [Show result] ***
ok: [localhost] =>
  result:
    IP: 192.168.2.1
    changed: false
    failed: false

TASK [Show IP] ***
ok: [localhost] =>
  msg: 192.168.2.1

更多文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM