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

Я работаю над конфигурацией Vagrant + Ansible для моей команды, которая настраивает виртуальную машину разработчика, некоторые из необходимых артефактов доступны только из моей корпоративной сети, либо физически подключены к ней, либо подключены через VPN.

Если мы выполняем инициализацию на компьютере, который не находится в этой корпоративной сети, я хотел бы автоматически подключиться к нашему vpn (с помощью клиента openconnect), скопировать файл и затем отключиться, все из Ansible.

В прошлом я обнаруживал сеть в скриптах bash, используя что-то вроде: if nslookup hostname | grep 'can't find'; then ...

Мой вопрос: есть ли чистый способ сделать такую ​​проверку в выражении Ansible "когда" или что-то в этом роде.

FWIW: Я довольно новичок в Ansible, так что, если это есть в их документации, и я просто упускаю это, пожалуйста, не стесняйтесь указывать мне на это и пороть меня соответственно.

1 ответ

Решение

Не слишком задумываясь, вы можете просто использовать командный модуль и зарегистрировать вывод, как показано ниже:

---
 - 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 был доступен при регистрации переменной var, вы можете сделать что-то вроде следующего:

---
 - 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.

Ура!

Другие вопросы по тегам