Я новичок в ansible и пробую его, написав доступный playbook для установки графита, в качестве его части у меня есть graphite-manage syncdb
команда, которую я хотел бы автоматизировать.
Я написал эту задачу, чтобы автоматически отвечать на подсказки, но по какой-то причине она зависает и ломается по таймауту. "msg": "command exceeded timeout"
и похоже, что он не отправляет мой ответ на предложенный ответ. Хотя, возможно, это формат, который я использовал, и я проверил образцы в доступных документах, но это действительно просто без дополнительной информации.
Вот мой образец, посмотрите, пожалуйста:
---
- hosts: localhost
tasks:
- name: graphite-web syncdb
expect:
command: sudo graphite-manage syncdb
responses:
'Would you like to create one now? (yes/no):': 'yes'
'Username (leave blank to use "root"):': '\n'
'Email address:': 'test@test.com'
'Password:': '123123'
'Password (again):': '123123'
Это результат журнала, который я получил:
fatal: [127.0.0.1]: FAILED! => {"changed": true, "cmd": "sudo graphite-manage syncdb", "delta": "0:00:30.107393", "end": "2018-11-12 15:39:01.897639", "msg": "command exceeded timeout", "rc": null, "start": "2018-11-12 15:38:31.790246", "stdout": "\u001b[36;1mOperations to perform:\u001b[0m\r\n\u001b[1m Synchronize unmigrated apps: \u001b[0maccount, cli, render, whitelist, metrics, url_shortener, dashboard, composer, events, browser\r\n\u001b[1m Apply all migrations: \u001b[0madmin, contenttypes, tagging, auth, sessions\r\n\u001b[36;1mSynchronizing apps without migrations:\u001b[0m\r\n Creating tables...\r\n Running deferred SQL...\r\n Installing custom SQL...\r\n\u001b[36;1mRunning migrations:\u001b[0m\r\n No migrations to apply.\r\n\r\nYou have installed Django's auth system, and don't have any superusers defined.\r\nWould you like to create one now? (yes/no): ", "stdout_lines": ["\u001b[36;1mOperations to perform:\u001b[0m", "\u001b[1m Synchronize unmigrated apps: \u001b[0maccount, cli, render, whitelist, metrics, url_shortener, dashboard, composer, events, browser", "\u001b[1m Apply all migrations: \u001b[0madmin, contenttypes, tagging, auth, sessions", "\u001b[36;1mSynchronizing apps without migrations:\u001b[0m", " Creating tables...", " Running deferred SQL...", " Installing custom SQL...", "\u001b[36;1mRunning migrations:\u001b[0m", " No migrations to apply.", "", "You have installed Django's auth system, and don't have any superusers defined.", "Would you like to create one now? (yes/no): "]}
Большое спасибо за помощь.
Ключи в response
map - это регулярные выражения, поэтому ?
и (...)
обрабатываются как управляющие символы регулярного выражения, что не приводит к совпадению.
Если вы действительно хотите передать всю строку, вы должны использовать:
responses:
'Would you like to create one now\? \(yes/no\):': 'yes'
Но учитывая, что больше нет create on now
текст в любом другом приглашении, вы можете использовать:
responses:
'create one now': 'yes'