Nslookup

使用 nslookup 從 ansible playbook 中檢測網路

  • December 18, 2014

我正在為我的團隊設置一個開發人員 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 執行的後面部分使用點符號訪問任何這些屬性。

乾杯!

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