带有 lineinfile 模块的 ansible 正则表达式不更新所有主机

ansible regex with lineinfile module not updating all host

尊敬的同事们,我创建了一个 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

我在 google Ansible 组的提示的帮助下让 Play 工作。使用 regexp 时需要考虑白色 space。在这种情况下,在字符串 passwd 之后有一个文字 space 需要用 .* 覆盖,以便可以正确扩展正则表达式!下面是现在可以完美运行的 catch!

regexp: '^passwd:.*files ldap'