--- - name: Find all .conf ansible.builtin.find: paths: "{{nginx.directories.http.servers}}" patterns: '*.*.conf' register: conf_files # Filter all domains - name: Filter domain names and remove .conf extension and path set_fact: filtered_domains: "{{ conf_files.files | map(attribute='path') | map('regex_search', domain_regex) | select('string') | map('regex_replace', path_regex, '') | map('regex_replace', '.conf$', '') | list }}" vars: domain_regex: "^{{nginx.directories.http.servers}}(?!www\\.)[^/]+\\.conf$" path_regex: "^{{nginx.directories.http.servers}}" - name: The domains for which a www. redirect will be implemented debug: var: filtered_domains when: enable_debug | bool # Routine for domains with primary domain included - name: Set filtered_domains_with_primary_domain set_fact: filtered_domains_with_primary_domain: "{{ filtered_domains | select('search', primary_domain + '$') | list }}" - name: Debug with primary domain debug: var: filtered_domains_with_primary_domain when: enable_debug | bool - name: Include nginx-redirect-domain role with dynamic domain mappings for domains with {{primary_domain}} included include_role: name: nginx-redirect-domain vars: domain_mappings: "{{ filtered_domains_with_primary_domain | map('regex_replace', '^(.*)$', '{ source: \"www.\\1\", target: \"\\1\" }') | map('from_yaml') | list }}" when: not enable_wildcard_certificate | bool - name: Include wildcard www. redirect for domains with {{primary_domain}} included vars: domain: "{{primary_domain}}" template: src: www.wildcard.conf.j2 dest: "{{nginx_www_wildcard_configuration}}" notify: restart nginx when: enable_wildcard_certificate | bool # Routine for domains without the primary domain included - name: Set filtered_domains_without_primary_domain set_fact: filtered_domains_without_primary_domain: "{{ filtered_domains | reject('search', primary_domain + '$') | list }}" - name: Debug domains without primary domain debug: var: filtered_domains_without_primary_domain when: enable_debug | bool - name: Include nginx-redirect-domain role with dynamic domain mappings for domains without primary domain include_role: name: nginx-redirect-domain vars: domain_mappings: "{{ filtered_domains_without_primary_domain | map('regex_replace', '^(.*)$', '{ source: \"www.\\1\", target: \"\\1\" }') | map('from_yaml') | list }}" # Cleanup # Deactivated due to complexity #- name: Cleanup dedicated nginx configurations for www redirect configuration # file: # path: "{{ nginx.directories.http.servers }}{{ item.source }}.conf" # state: absent # # Filter: Only first-level subdomains of primary_domain # # Exclude the primary domain itself # # Transform for www redirection # loop: "{{ filtered_domains_with_primary_domain # | select('regex_search', '^[^.]+\\.' ~ primary_domain ~ '$') # | reject('equalto', primary_domain) # | map('regex_replace', '^(.*)$', '{ source: \"www.\\1\", target: \"\\1\" }') # | map('from_yaml') # | list }}" # notify: restart nginx # when: # - enable_wildcard_certificate | bool # Wildcard certificate must be enabled # - mode_cleanup | bool # Cleanup mode must be enabled - name: Cleanup {{nginx_www_wildcard_configuration}} file: path: "{{nginx_www_wildcard_configuration}}" state: absent notify: restart nginx when: - not enable_wildcard_certificate | bool - mode_cleanup | bool