为什么要跳过Ansible任务?

时间:2016-02-03 19:38:12

标签: ubuntu-14.04 ansible

我正在尝试在Ubuntu 14.04服务器上的CIS强化脚本中运行2个ansible任务。

第一项任务是

- name: 8.1.12 Collect Use of Privileged Commands (Scored)
    shell: /usr/bin/find {/usr/local/sbin,/usr/local/bin,/sbin,/bin,/usr/sbin,/usr/bin} -xdev \( -perm -4000 -o -perm -2000 \) -type f | awk '{print "-a always,exit -F path=" $1 " -F perm=x -F auid>=500 -F auid!=4294967295 -k privileged" }'
    register: privileged_programs
    tags:
      - scored
      - section8.1.12

这应该注册要在下一个任务中使用的特权程序列表。如果我将上面的命令复制到Ubuntu VM并运行它,我会得到一个很长的程序列表,就像我应该的那样。

第二项任务是:

- name: 8.1.12 Collect Use of Privileged Commands (Scored)
    lineinfile: dest=/etc/audit/audit.rules line="{{item}}" insertafter=EOF state=present
    with_items: privileged_programs.stdout_lines
    when: privileged_programs is defined and privileged_programs.stdout_lines|length > 0
    notify: restart auditd
    tags:
      - scored
      - section8.1.12

如果注册了任何结果,它应该触发,但到目前为止我还没能让它运行。每次我尝试运行2个任务时都会跳过它。我假设没有正确存储或传递privileged_programs变量。

注意:我尝试将第一个任务从shell更改为命令但是我得到了一个错误" stderr:/ usr / bin / find:paths必须在表达式之前"

注2:我还检查了etc / audit / audit.rules,并确认其中尚未包含特权程序。

编辑:我在两个任务之间添加了一个调试来输出var = privileged_programs。以下是我认为可能表明问题的一部分的部分内容:

"stderr": "/usr/bin/find:        `{/usr/local/sbin,/usr/local/bin,/sbin,/bin,/usr/sbin,/usr/bin}': No such file or directory",
        "stdout": "",
        "stdout_lines": [],
        "warnings": []

任何人都知道为什么会这样?

提前致谢!

3 个答案:

答案 0 :(得分:1)

Bourne shell在语法方面存在一些问题。在Bash中工作正常。

我让它发挥作用。请尝试以下语法。

shell: /usr/bin/find /usr/local/sbin /usr/local/bin /sbin /bin /usr/sbin /usr/bin

答案 1 :(得分:0)

我不确定是否是这种情况,但是ansible文档说明:如果两个处理程序任务具有相同的名称,则只运行一个。 * 尝试更改第二个任务名称。

答案 2 :(得分:0)

我的 ansible 跳过与“when:”状态不匹配主机名有关。

例如

- set_fact:
    efs_mount_target: "10.10.10.1"
  when: ansible_hostname == 'server-01'