openstack-ansible/playbooks/common-playbooks/unbound-clients.yml
Kevin Carter b3c670faeb Modify unbound to JIT install clients
This change modifies the unbound playbook so that it follows a JIT
pattern allowing the playbooks to install what they need when they need
it. Prior to this change the unbound playbook would iterate through all
target hosts, including containers, and attempt to install the client
resource or simply execute the resolveconf role which would end in
failure should the target resource not be available at the time of
execution. Converting this to a JIT pattern should save general time
when installing with and without unbound on initial deployments and will
guarantee that the target hosts, including containers, have the most
up-to-date client code unpo deployment, or upgrade, of a given service.

Change-Id: I829747094cabc8027bad904cb822a6d265f48d73
Signed-off-by: Kevin Carter <kevin.carter@rackspace.com>
2017-08-04 10:16:11 -05:00

78 lines
2.9 KiB
YAML

---
# Copyright 2016, Logan Vig <logan2211@gmail.com>
#
# 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 resolver client configurations
gather_facts: true
hosts: "{{ unbound_group }}"
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 }}
#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:
- 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:
- 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:
- resolver_list is not defined
roles:
- role: "resolvconf"
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 }}"
environment: "{{ deployment_environment_variables | default({}) }}"