ansible выводить почту с разрывом строки - PullRequest
0 голосов
/ 25 мая 2020

У меня есть вывод awk

   - name: read files
   shell: awk -F "|" 'FNR==NR {lines[$1]=$2; next} $9 in lines {print lines[$9], "on", $2}' file1 file2
   register: resultawk

   - debug:
        msg: "{{ resultawk.stdout.split('\n') }}"

это хорошо печатает вывод с разрывами строк

TASK [debug] ****************************************************************************************
ok: [localhost] => {
    "msg": [
        "field2file1 on field2file2",
        "field2file1 on field2file2"
    ]
}

теперь, когда я пытаюсь отправить то же сообщение по почте

 - name: send mail
   mail:
      subject: Report for {{ ansible_hostname }}
      body:
         msg: "{{ resultawk.stdout.split('\n') }}"
      to:
      - John Doe <xyz@xyz.com>

я получаю следующее сообщение:

TASK [send mail] *********************************************************************
[WARNING]: The value {'msg': ['field2file1 on field2file2', 'field2file1 on field2file2']}" (type string).
If this does not look like what you expect, quote the entire value to ensure it does not change.
ok: [localhost]

есть ли способ отправить результат по почте с правильными переносами строк?

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

просмотрел документы jinja2 (спасибо, Владимир) и нашел это

body: "{{ resultawk.stdout.split('\n'',')| to_yaml }}"

, которое определяет почту в приемлемом формате yaml

['field2file1 on field2file2 
   field2file1 on field2file2']
0 голосов
/ 25 мая 2020

Предупреждение на самом деле говорит, что нужно сделать

"укажите все значение, чтобы оно не изменилось"

Попробуйте это


 - name: send mail
   mail:
     subject: "Report for {{ ansible_hostname }}"
     body: |
       '{% for line in resultawk.stdout_lines %}
        {{ line }}
        {% endfor %}'
     to: John Doe <xyz@xyz.com>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...