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

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

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

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

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

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

2
задан 19 December 2014 в 01:20
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 при регистрации переменной, вы можете сделать что-то вроде следующего:

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

Ура!

3
ответ дан 3 December 2019 в 10:44

Теги

Похожие вопросы