Sendmailconfig conmand с ansible, отвечать на вопросы - PullRequest
0 голосов
/ 04 октября 2019

Мне нужна команда exec "sendmailconfig" в задаче Ansible и ответьте да.

Я пытаюсь сделать это с помощью этого кода:

- name: Exec sendmailconfig
  expect:
    command: sendmailconfig
    responses:
      Question:
        - Configure sendmail with the existing /etc/mail/sendmail.conf? [Y]: y
        - Configure sendmail with the existing /etc/mail/sendmail.mc? [Y]: y
        - Reload the running sendmail now with the new configuration? [Y]: y
    timeout: 30

, но задача завершается с ошибкой:

ЗАДАЧА [Exec sendmailconfig] ********************************************************************************************************************************************* роковым: [demoHostAnsible]: не удалось! => {"change": true, "cmd": "sendmailconfig", "delta": "0: 00: 30.133671", "end": "2019-10-04 14: 55: 34.398377", "msg":"команда превысила время ожидания", "rc": null, "start": "2019-10-04 14: 55: 04.264706", "stdout": "Сконфигурировать sendmail с существующим /etc/mail/sendmail.conf? [Y] "," stdout_lines ": [" Сконфигурировать sendmail с существующим /etc/mail/sendmail.conf? [Y] "]}

В чем проблема? Есть ли другой способ выполнить команду sendmailconfig из Ansible?

1 Ответ

0 голосов
/ 04 октября 2019

У вас, вероятно, есть две, если не три проблемы:

Смешивание синтаксисов

Модуль expect имеет два синтаксиса, которые вы смешали.

Либо вы должны использовать его, просто предоставив последующие ответы:

responses:
  Questions:
    - response 1
    - response 2
    - response 3

Либо вы должны использовать его с (вопрос / ответ) в качестве (ключ / значение) пары

responses:
  question 1: response 1
  question 2: response 2
  question 3: response 3

Когда вы сделали следующее:

# Author disclaimer, this is a bad syntax!
responses:
  Questions:
    - question 1: response 1
    - question 2: response 2
    - question 3: response 3

Вопросы, заданные для expect, анализируются как регулярное выражение

Если вы используете пару вопрос / ответ, тогда вопросанализируется как регулярное выражениеИ в вашем вопросе у вас есть 5 символов, которые нужно экранировать, чтобы рассматривать их как буквальный, а не как синтаксис регулярных выражений: /, ., ?, [ и ].

ИтакВаши ответы должны выглядеть следующим образом:

responses:
  Configure sendmail with the existing \/etc\/mail\/sendmail\.conf\? \[Y\] : y
  Configure sendmail with the existing \/etc\/mail\/sendmail\.mc\? \[Y\] : y
  Reload the running sendmail now with the new configuration\? \[Y\] : y

Вы можете легко определить такие проблемы, бросая свои вопросы в объяснитель регулярных выражений, например regex101

  • Это позволяет легко увидеть, что анализатор будет считать токеном: https://regex101.com/r/vucKjy/1/
  • Тогда вам просто нужно экранировать их и проверить, что ваш вопрос соответствует регулярному выражению https://regex101.com/r/uEjrio/1/

Ваш тайм-аут, вероятно, слишком мал

Ваш timeout, возможно, слишком мал, даже установлен на 60, он все еще превышал тайм-аут в моей среде тестирования докеров, мне пришлось увеличить его до 120чтобы оно работало.


Два возможных подхода к решению

  1. Вопросы / ответы в качестве ключа / значения:
---
- hosts: localhost
  connection: local

  tasks:
    - name: Exec sendmailconfig
      expect:
        command: sendmailconfig
        responses:
          Configure sendmail with the existing \/etc\/mail\/sendmail\.conf\? \[Y\] : y
          Configure sendmail with the existing \/etc\/mail\/sendmail\.mc\? \[Y\] : y
          Reload the running sendmail now with the new configuration\? \[Y\] : y
        timeout: 120
Список ответов
---
- hosts: localhost
  connection: local

  tasks:
    - name: Exec sendmailconfig
      expect:
        command: sendmailconfig
        responses:
          Questions:
            - y
            - y
            - y
        timeout: 120

Эти два синтаксиса оба дают мне следующее резюме:

PLAY [localhost] ****************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [localhost]

TASK [Exec sendmailconfig] ******************************************************************************************************************************************
changed: [localhost]

PLAY RECAP **********************************************************************************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0   
...