Nslookup
使用 nslookup 從 ansible playbook 中檢測網路
我正在為我的團隊設置一個開發人員 VM 的 Vagrant + Ansible 配置,所需的一些工件只能從我的公司網路中獲得,要麼是物理上的,要麼是通過 VPN 連接的。
如果我們在不在該公司網路上的機器上進行配置,我想自動連接到我們的 vpn(使用 openconnect 客戶端),複製文件然後斷開連接,所有這些都來自 Ansible。
過去,我使用以下方式在 bash 腳本中檢測到網路:
if nslookup hostname | grep 'can't find'; then ...
**我的問題:**是否有乾淨的方法可以在 Ansible“何時”聲明或類似的東西中進行這樣的檢查。
FWIW:我對 Ansible 相當陌生,所以如果這在他們的文件中並且我只是想念它,請隨時指出我並相應地鞭打我。
不用太花哨,您可能只想使用命令模組並註冊輸出,如下所示:
--- - name: Register nslookup hostname result command: nslookup hostname register: ns - name: Some other task with conditional copy: <params go here> when: "'server can\\'t find' in ns.stdout"
如果您想了解更多關於 Ansible 中的寄存器變數的資訊,請查看此處的文件
此外,為了將來參考,如果您想在註冊 var 時查看可用的 JSON,您可以執行以下操作:
--- - name: Register nslookup hostname result command: nslookup hostname register: ns - debug: var=ns
然後這應該輸出如下內容:
ok: [HOST] => { "var": { "ns": { "changed": true, "cmd": [ "nslookup", "hostname" ], "delta": "0:00:00.054897", "end": "2014-12-18 18:51:15.598652", "invocation": { "module_args": "nslookup hostname", "module_name": "command" }, "rc": 0, "start": "2014-12-18 18:51:15.543755", "stderr": "", "stdout": "Server:\t\t192.168.1.1\nAddress:\t192.168.1.1#53\n\n** server can't find hostname: HOSTNAME", "stdout_lines": [ "Server:\t\t192.168.1.1", "Address:\t192.168.1.1#53", "", "** server can't find hostname: HOSTNAME" ], "warnings": [] } } }
註冊後,您可以在 playbook 執行的後面部分使用點符號訪問任何這些屬性。
乾杯!