带有lineinfile模块的ansible regex不会更新所有主机

时间:2018-04-03 14:41:39

标签: ansible-2.x

Esteemed Collegues,我创建了一个Playbook,使用lineinfile模块在​​一个文件中复制条目,而我尝试运行它在一个主机上运行和替换,而不是在另一个主机上,我不不明白为什么?因为即使在调试模式下它也不会报告任何错误。我是否需要另外一种regex模式。

---
- name: Playbook to replace the line in file
  hosts: all
  remote_user: root
  gather_facts: False
  serial: 4
  tasks:
    - name: replace line
      lineinfile:
        dest: /tmp/test_master
        state: present
        regexp: '^passwd: files ldap' #  line to be replaced
        line: 'passwd_compat: ldap'   #  new line which is replace existing , the one above
        backrefs: yes
        backup: yes
      register: nss

    - name: replace line
      debug: var=nss

我的Hostvar库存文件:

# test_regex_hosts
[hosts]
Dev-mauj
Dev-pranjala
[hosts:vars]
ansible_ssh_user=root
ansible_ssh_private_key_file=/Dev/ansibleSpotin

目标文件内容:

$ cat /tmp/test_master
#
# nsswitch.conf
#
passwd: files ldap
shadow:     files ldap
group:      files ldap
hosts:      files dns
bootparams: files
ethers:     files
netmasks:   files ldap
networks:   files ldap
protocols:  files ldap
rpc:        files ldap
services:   files ldap
netgroup:   files ldap
publickey:  files ldap
automount:  files ldap
printers:   user files ldap
sudoers:    ldap
aliases:    files ldap

注意:ansible 2.4

1 个答案:

答案 0 :(得分:0)

我在谷歌Ansible小组的提示的帮助下得到了Play工作。使用regexp时需要考虑空格。在这种情况下,字符串passwd后面有一个需要用.*覆盖的小空间,因此可以正确扩展正则表达式!以下是现在完美运作的捕获物!

regexp: '^passwd:.*files ldap'