09847567ae
"shell" step doesn't support check mode, which currently leads to failures, when Ansible is being run in check mode (because Ansible doesn't run command, assuming that command might have effect, and no "rc" or "output" is registered). Setting "check_mode: no" allows to run those "shell" commands in check mode (which is safe, because those shell commands doesn't have side effects).
100 lines
3.4 KiB
YAML
100 lines
3.4 KiB
YAML
---
|
|
- name: check resolvconf
|
|
shell: which resolvconf
|
|
register: resolvconf
|
|
failed_when: false
|
|
changed_when: false
|
|
check_mode: no
|
|
|
|
- set_fact:
|
|
resolvconf: >-
|
|
{%- if resolvconf.rc == 0 -%}true{%- else -%}false{%- endif -%}
|
|
|
|
- set_fact:
|
|
bogus_domains: |-
|
|
{% for d in [ 'default.svc.' + dns_domain, 'svc.' + dns_domain ] + searchdomains|default([]) -%}
|
|
{{dns_domain}}.{{d}}./{{d}}.{{d}}./com.{{d}}./
|
|
{%- endfor %}
|
|
default_resolver: >-
|
|
{%- if cloud_provider is defined and cloud_provider == 'gce' -%}169.254.169.254{%- else -%}8.8.8.8{%- endif -%}
|
|
|
|
- name: check if kubelet is configured
|
|
stat:
|
|
path: "{{ kube_config_dir }}/kubelet.env"
|
|
register: kubelet_configured
|
|
changed_when: false
|
|
|
|
- name: check if early DNS configuration stage
|
|
set_fact:
|
|
dns_early: >-
|
|
{%- if kubelet_configured.stat.exists -%}false{%- else -%}true{%- endif -%}
|
|
|
|
- name: target resolv.conf files
|
|
set_fact:
|
|
resolvconffile: /etc/resolv.conf
|
|
base: >-
|
|
{%- if resolvconf|bool -%}/etc/resolvconf/resolv.conf.d/base{%- endif -%}
|
|
head: >-
|
|
{%- if resolvconf|bool -%}/etc/resolvconf/resolv.conf.d/head{%- endif -%}
|
|
when: not ansible_os_family in ["CoreOS", "Container Linux by CoreOS"]
|
|
|
|
- name: target temporary resolvconf cloud init file (Container Linux by CoreOS)
|
|
set_fact: resolvconffile=/tmp/resolveconf_cloud_init_conf
|
|
when: ansible_os_family in ["CoreOS", "Container Linux by CoreOS"]
|
|
|
|
- name: check if /etc/dhclient.conf exists
|
|
stat: path=/etc/dhclient.conf
|
|
register: dhclient_stat
|
|
|
|
- name: target dhclient conf file for /etc/dhclient.conf
|
|
set_fact:
|
|
dhclientconffile: /etc/dhclient.conf
|
|
when: dhclient_stat.stat.exists
|
|
|
|
- name: check if /etc/dhcp/dhclient.conf exists
|
|
stat: path=/etc/dhcp/dhclient.conf
|
|
register: dhcp_dhclient_stat
|
|
|
|
- name: target dhclient conf file for /etc/dhcp/dhclient.conf
|
|
set_fact:
|
|
dhclientconffile: /etc/dhcp/dhclient.conf
|
|
when: dhcp_dhclient_stat.stat.exists
|
|
|
|
- name: target dhclient hook file for Red Hat family
|
|
set_fact:
|
|
dhclienthookfile: /etc/dhcp/dhclient.d/zdnsupdate.sh
|
|
when: ansible_os_family == "RedHat"
|
|
|
|
- name: target dhclient hook file for Debian family
|
|
set_fact:
|
|
dhclienthookfile: /etc/dhcp/dhclient-exit-hooks.d/zdnsupdate
|
|
when: ansible_os_family == "Debian"
|
|
|
|
- name: generate search domains to resolvconf
|
|
set_fact:
|
|
searchentries:
|
|
search {{ ([ 'default.svc.' + dns_domain, 'svc.' + dns_domain ] + searchdomains|default([])) | join(' ') }}
|
|
domainentry:
|
|
domain {{ dns_domain }}
|
|
supersede_search:
|
|
supersede domain-search "{{ ([ 'default.svc.' + dns_domain, 'svc.' + dns_domain ] + searchdomains|default([])) | join('", "') }}";
|
|
supersede_domain:
|
|
supersede domain-name "{{ dns_domain }}";
|
|
|
|
- name: pick dnsmasq cluster IP or default resolver
|
|
set_fact:
|
|
dnsmasq_server: |-
|
|
{%- if dns_mode == 'kubedns' and not dns_early|bool -%}
|
|
{{ [ skydns_server ] + upstream_dns_servers|default([]) }}
|
|
{%- elif dns_early|bool -%}
|
|
{{ upstream_dns_servers|default([]) }}
|
|
{%- else -%}
|
|
{{ [ dns_server ] }}
|
|
{%- endif -%}
|
|
|
|
- name: generate nameservers to resolvconf
|
|
set_fact:
|
|
nameserverentries:
|
|
nameserver {{( dnsmasq_server + nameservers|default([default_resolver])) | join(',nameserver ')}}
|
|
supersede_nameserver:
|
|
supersede domain-name-servers {{( dnsmasq_server + nameservers|default([default_resolver])) | join(', ') }};
|