Ansible设置附加报价并中断执行

时间:2018-12-04 12:09:30

标签: ansible yaml

我创建剧本(当然,这只是第一个命令,比让我无法执行)

---
- 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}

我看到:“项目”是正确的-这正是我需要的命令。 但是在“ cmd”属性中有多余的引号。我认为,这使我无法执行PB。

为什么要平息?以及如何解决?

看。有结构问题: 1.我有一个命令。 2.通过命令模块执行。 3.任何错误都会中断。 4.如何解决此错误。

2 个答案:

答案 0 :(得分:2)

您不应将命令模块用于如此简单的任务。 Ansible有更好的模块可以做到这一点。如果没有更好的模块,则命令只是一个备用。

您的命令应该删除该文件(如果存在),对吗?

只需使用file module

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

答案 1 :(得分:-2)

我找到了解决方案。它不能解决相同的问题,但应该可以避免。

使用bash脚本:将其放入bash文件中,然后运行它。 由文件包装的字符串不会被ansible /命令行/ bush破坏(我不知道究竟是什么破坏了命令)。