Назад | Перейти на главную страницу

Ansible expect не отправляет ответ

Я новичок в 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'