我有一个名为authorized_keys的文件.我需要使用Ansible脚本删除特定行.
问题是当我尝试删除包含”字符的行时. Ansible无法删除此行.
例如,authorized_keys文件是:
.....
abhi foo+bar saken
......(EOF)
我想删除abhi foo bar saken line但是Ansible没有删除这一行因为该字符.
我能够删除不包含字符的行.
任务:
- name: Delete keys in sysadmin/.ssh/authoriezd_keys
lineinfile: dest=/home/{{name}}/.ssh/authorized_keys
state=absent
regexp='^{{key}}$'
PS:我正在使用Ansible的lineinfile模块
最佳答案 问题可能是在正则表达式中有意义.
你应该能够通过逃避来解决它.如果您无法从定义{{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
传递的输入.