Ansible набор дополнительных цитат и Break Exec - PullRequest
0 голосов
/ 04 декабря 2018

Я создаю playbook (конечно, это только первая команда, которая нарушает меня exec)

---
- hosts:
    test_hosts
  tasks:
    - name: exec bash
      command: "{{item}}"
      with_items:
        - "if [ -f ~/memlog_{{ inventory_hostname }}.txt ]; then rm ~/memlog_{{ inventory_hostname }}.txt; fi"

И появляется ошибка:

changed: [hdp86] => (item=touch ~/memlog_hdp86.txt)
failed: [hdp86] (item=if [ -f ~/memlog_hdp86.txt ]; then rm ~/memlog_hdp86.txt; fi) => {"changed": false, "cmd": "if '[' -f /home/karmatskiyrg/memlog_hdp86.txt '];' then rm '/home/karmatskiyrg/memlog_hdp86.txt;' fi", "item": "if [ -f ~/memlog_hdp86.txt ]; then rm ~/memlog_hdp86.txt; fi", "msg": "[Errno 2] No such file or directory", "rc": 2}

Я вижу: "item"правильно - это именно та команда, которая мне нужна.Но в атрибуте «cmd» есть лишние кавычки.Я думаю, это нарушает меня исполнение PB.

Почему это появляется?И как это исправить?

Смотри.Там структура вопроса: 1. У меня есть команда.2. Выполните его с помощью командного модуля.3. Он ломается с любой ошибкой.4. Как исправить ЭТУ ошибку.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

У меня есть решение.Это не решает ту же проблему, но должно помочь избежать этого.

Используйте bash-скрипт: поместите его в bash-файл и запустите.Строка, обернутая файлом, не разбивается по ansible / командной строке / bush (я не знаю, что именно нарушает команду).

0 голосов
/ 04 декабря 2018

Вы не должны использовать командный модуль для такой простой задачи.Ansible имеет лучшие модули для этого.Команда - просто запасной вариант, если нет лучшего модуля.

Ваша команда должна удалить файл, если он существует, верно?

Просто используйте файловый модуль :

name: delete file if exists
file:
  path: "~/memlog_{{ inventory_hostname }}.txt"
  state: absent

См .: https://docs.ansible.com/ansible/2.5/modules/file_module.html#file-module

...