replace multiple lines in multiple files using lineinfile and register

Hello Ansible users,

I’m trying to replace multiple lines in multiple files using the lineinfile and register, and this is what I got so far.

  • name: list of the .conf files
    raw: ls /etc/httpd/conf.d/*.conf
    register: certs_dir
    tags: update-cert

  • name: update certs with the new name in *conf
    lineinfile: dest={{item}} backup=yes state=present regexp=“^ SSLCertificateFile” insertafter=“^ SSLCertificateFile” line=" SSLCertificateFile /etc/pki/tls/certs/new_cert.cer"
    with_items: certs_dir.stdout_lines
    tags: update-cert

the problem with this is It will only replace one line in multiple files, is there any better way of doing this other than making another copy of the second task to replace line?

please advise,

thank you

For one use case where template was not optimal and to replace N lines in one file (grub.conf),
it was convenient to have something like (IIRC):

task1: grep | wc -l
register: the_count

task2: lineifile regex= line=‘string’ …

with_sequence: the count

ok not the exact syntax , just to give the idea.

do not have the real example at hands, can forward later

will need adaptation to cope with multiple files and hence multiple different count for each different file

and a caveat with with_sequence if the_count is 0

HTH

So since we have a very simple way to list local files (with_fileglob) it makes sense that we probably just have a fileglob module for use of register that lists the files in a given directory

  • fileglob: path=/etc/foo/*.d
    register: files

  • shell: foo {{ item.0 }} and {{ item.1 }}
    with_nested:

  • files

  • other_things

etc