使用ansible从文件中删除一行?

时间:2015-02-25 11:24:43

标签: ansible

我有一个名为authorized_keys的文件。我需要使用Ansible脚本删除特定行。

问题是当我尝试删除包含' +'字符。 Ansible无法删除此行。

例如authorized_keys文件是:

 .....
 abhi foo+bar saken
 ......(EOF)

我想删除abhi foo+bar saken行,但由于+字符,Ansible未删除此行。

我可以删除不包含+字符的行。

任务:

- name: Delete keys in sysadmin/.ssh/authoriezd_keys
  lineinfile: dest=/home/{{name}}/.ssh/authorized_keys
              state=absent 
              regexp='^{{key}}$' 

PS:我正在使用Ansible的lineinfile模块

1 个答案:

答案 0 :(得分:4)

问题可能是+在正则表达式中有意义。

您应该可以通过转发+来修复它。如果您无法从定义{{ key }}的来源执行此操作,则可以使用replace Jinja过滤器将其转义:

- name: Delete keys in sysadmin/.ssh/authoriezd_keys
  lineinfile: dest=/home/{{name}}/.ssh/authorized_keys
              state=absent
              regexp='^{{ key | replace("+", "\+") }}$'

如果{{ key }}包含其他在正则表达式中有意义的字符,则可能会遇到更多问题。如果是这种情况,我认为安全的方法是创建自己的filter plugin,只需返回通过re.escape传递的输入。