尝试在Ansible中将IP地址添加到列表的末尾

时间:2019-07-11 05:55:41

标签: ansible

我写了一部剧本,它将在IP地址列表中添加新的IP地址。这是代码

- name: adding IP to faile2ban
  lineinfile:
        path: /home/ec2-user/test.conf
        line: "{{ new_server_ip }}"
        insertafter: "^#?ip_list"

https://github.com/shettypriy/ansible/blob/master/addingIPto%20the%20end。IP被添加到文件中,但是在最后添加的IP末尾没有被添加

我有一个文件test.conf,其中添加了IP地址。我要在最后更新的IP之后添加新IP 示例:以下是文件test.conf的示例内容

ip_list = xx.xx.xx.xx yy.yy.yy.zz aa.aa.aa.aa

我想要的输出应该是在aa.aa.aa.aa之后添加的'new_server_ip'

2 个答案:

答案 0 :(得分:1)

我想以下应该适合您:

- name: adding IP to faile2ban
  lineinfile:
    dest: /home/ec2-user/test.conf
    state: present
    regexp: "^(#?ip_list(.*)$)"
    backrefs: yes
    line: '\1 {{ new_server_ip }}'

因此,关键是要找到以'ip_list'开头的行,通过正则表达式选择整行,然后在new_server_ip前面的行中对选定的行进行反向引用。

答案 1 :(得分:1)

下面的任务完成了任务,它是idempotent

  

“模块应该是幂等的,也就是说,在一个序列中多次运行一个模块应该与只运行一次具有相同的效果。”

- lineinfile:
    dest: /home/ec2-user/test.conf
    regexp: '(?!.*{{ new_server_ip }}.*)^(ip_list.*)$'
    line: '\1 {{ new_server_ip }}'
    backrefs: yes

regexp 首先look ahead和  仅当不存在 new_server_ip 时,才匹配该行。