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