--- # Copyright 2016, Logan Vig # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - name: Install unbound DNS resolvers hosts: - unbound gather_facts: "{{ gather_facts | default(True) }}" user: root pre_tasks: - include: common-tasks/package-cache-proxy.yml roles: - role: "unbound" tags: - unbound_server - role: "system_crontab_coordination" tags: - "system-crontab-coordination" vars_files: - defaults/repo_packages/openstack_services.yml vars: is_metal: "{{ properties.is_metal|default(false) }}" - name: Install unbound DNS resolver client configurations hosts: - "!unbound" - "{{ openstack_host_group|default('hosts') }}" - "{{ container_group|default('all_containers') }}" user: root pre_tasks: #gather a list of physical_hosts containing unbound containers - name: Set unbound physical hosts fact set_fact: unbound_physical_hosts: > {% set _var = [] -%} {% for i in groups[resolvconf_resolver_group] -%} {% if hostvars[i]['physical_host'] is defined -%} {% if _var.append(hostvars[i]['physical_host']) -%}{% endif -%} {% endif -%} {% endfor -%} {{ _var }} when: resolvconf_enabled | bool #create a sorted resolver list with affinity toward unbound container(s) #on the same physical_host - name: Apply resolver sorting set_fact: resolver_list: > {% set _var = [] -%} {% for i in groups[resolvconf_resolver_group] -%} {% if physical_host is defined and hostvars[i]['physical_host'] is defined and physical_host == hostvars[i]['physical_host'] -%} {% if _var.append(dict(host=hostvars[i]['ansible_host'], priority=100)) -%}{% endif -%} {% else -%} {% if _var.append(dict(host=hostvars[i]['ansible_host'], priority=50)) -%}{% endif -%} {% endif -%} {% endfor -%} {{ _var }} when: - resolvconf_enabled | bool - physical_host is defined - physical_host in unbound_physical_hosts - name: Set resolver IP list fact set_fact: resolvconf_resolver_ips: "{{ resolver_list | sort(reverse=true, attribute='priority') | map(attribute='host') | list }}" resolvconf_options: - 'timeout:1' when: - resolvconf_enabled | bool - resolver_list is defined - resolver_list | length > 0 #rotate is only used when no physical_host affinity is defined - name: Set resolver rotate when physical_host is not an unbound host set_fact: resolvconf_options: - 'timeout:1' - 'rotate' when: - resolvconf_enabled | bool - resolver_list is not defined roles: - role: "resolvconf" when: resolvconf_enabled | bool tags: - unbound_client vars: #Only run the resolvconf role when DNS containers are deployed to the env. resolvconf_enabled: "{{ groups['unbound'] is defined and groups['unbound'] | length > 0 }}"