Назад | Перейти на главную страницу

Обнаружение сети из доступного playbook с помощью nslookup

Я работаю над конфигурацией 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, ознакомьтесь с документы здесь

Кроме того, для справки в будущем, если вы хотите видеть 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.

Ура!