Ansible задава допълнителни котировки и прекъсва изпълнение

Създавам playbook (разбира се, това е само първата команда, която ме прекъсва)

---
- 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. Как да коригирате ТАЗИ грешка.


person Antispam Antispam    schedule 04.12.2018    source източник
comment
И така, опитвам друг cmd: за ФАЙЛ в /var/log/sa/sa[0-9]*; do sadf -d $FILE -- -r ›› ~/memlog_{{ inventory_hostname }}.txt; готово И вижте, задава кавички и ми дава същата грешка: [Errno 2] Няма такъв файл или директория   -  person Antispam Antispam    schedule 04.12.2018
comment
Възможен дубликат на Как да изтрия *.web файлове само ако съществуват   -  person nwinkler    schedule 04.12.2018
comment
не, не изглежда... Имам конкретен проблем и ми трябва конкретно решение за него.   -  person Antispam Antispam    schedule 04.12.2018


Отговори (2)


Не трябва да използвате командния модул за такава проста задача. 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

person flxPeters    schedule 04.12.2018
comment
Ако попитам как да го направя по-добре? Трябва да разреша текущия проблем и това е само пример. Имам други команди, които трябва да изпълня, и има същия проблем. - person Antispam Antispam; 04.12.2018
comment
Може би тогава трябва да зададете въпроса си по различен начин. Не знаем какво търсите, ако предоставите тази информация във въпроса. - person nwinkler; 04.12.2018
comment
Как мога да задам въпрос по различен начин? Ако има конкретен въпрос. Не можете да го разберете по два начина. - person Antispam Antispam; 05.12.2018

Имам решение. Това не решава същия проблем, но трябва да помогне за избягването му.

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

person Antispam Antispam    schedule 05.12.2018
comment
Това не дава отговор на въпроса. За да критикувате или да поискате разяснение от автор, оставете коментар под неговата публикация. - От преглед - person axblount; 05.12.2018
comment
Това го прави. Той изпълнява команда - това означава, че е решил проблем. Не се решава как да се коригира команден низ, а как да се изпълни команда bash с ansible - person Antispam Antispam; 05.12.2018