Ansible – Replace Module Not Working as Expected

ansibleansible-galaxyansible-playbookansible-tower

my ansible play book is working for me to uncomment certain lines in a .conf file, but its failing for one particular line its not making any change.

below is my .conf file part.

   #<VirtualHost *:443>
      #SSLEnable
   #Header always set Strict-Transport-Security "max-age=31536000 includeSubDomains; preload"
   #</VirtualHost>

Expected output


       <VirtualHost *:443>
          SSLEnable
       #Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        </VirtualHost>

below is my play

   - name: uncomment virtualhost starting line
     replace:
       path: /opt/conf/httpd.conf
       regexp: '^#(.*<VirtualHost *:443>.*)'
       replace: '\1'
   - name: uncomment virtualhost end line
       replace:
         path: /opt/conf/httpd.conf
         regexp: '^#(.*</VirtualHost>.*)'
         replace: '\1'

Here my virtualhost end line is getting uncommented but the startline is not.. can you please guide me here…..

Best Answer

* is a special character in a regular expression, it's a wildcard.

Replace the first task with the following(I have modified only the regexp parameter):

   - name: uncomment virtualhost starting line
     replace:
       path: /opt/conf/httpd.conf
       regexp: '^#(.*<VirtualHost \*:443>.*)'
       replace: '\1'