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
答案 0 :(得分:0)
我在谷歌Ansible小组的提示的帮助下得到了Play工作。使用regexp
时需要考虑空格。在这种情况下,字符串passwd
后面有一个需要用.*
覆盖的小空间,因此可以正确扩展正则表达式!以下是现在完美运作的捕获物!
regexp: '^passwd:.*files ldap'