Обнаружение сети из игровой книжки с помощью 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.
Ура!