Я работаю над конфигурацией 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.
Ура!