【发布时间】:2015-03-18 14:01:42
【问题描述】:
我试图告诉 ansible 在 /etc/hosts.deny 中添加一个“ALL : ALL”行,只要该行不存在。这是我的任务:
- name: Ensure hosts.deny has default ALL entry
lineinfile: dest="/etc/hosts.deny" regexp="^\s*ALL\s*:" line="{{ deny_all }}" insertbefore=EOF
这一切都在一个叫做合规性的角色中,所以在合规性/vars/main.yml 中,我有:
deny_all: 'ALL : ALL'
这是为了解决一个带有单独冒号的解析器问题。
我也尝试过这些正则表达式,但没有任何乐趣:
- “^\s*全部”
- “全部”
- “FOO”
我已将现有的 /etc/host.deny 替换为一个完全空的文件,但每次运行此任务时仍然返回“ok”。我在这里错过了什么?我敢肯定这是一件非常明显的事情,但我只是没有看到。
谢谢。
---添加了新的细节---
我已经修改了原来的任务,现在看起来像这样:
- name: Ensure hosts.deny has default ALL entry
lineinfile: dest='/etc/hosts.deny' line='ALL' insertbefore=EOF create=True state=present
然后我从远程系统中删除 /etc/hosts.deny。运行这个任务(通过标签)产生“ok”而不是创建文件:
# ansible-playbook compliance -i inventory.yml --tags deny -l us202
PLAY [Compliance] *******************************************
TASK: [Ensure /etc/hosts.deny has default ALL entry *********
ok: [us202]
PLAY RECAP **************************************************
us202 : ok=1 changed=0 unreachable=0 failed=0
#
这怎么可能?
【问题讨论】:
标签: regex ansible ansible-playbook