You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

203 lines
6.6 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. ---
  2. - name: Force binaries directory for Flatcar Container Linux by Kinvolk
  3. set_fact:
  4. bin_dir: "/opt/bin"
  5. when: ansible_os_family in ["Flatcar Container Linux by Kinvolk"]
  6. tags:
  7. - facts
  8. - name: check if booted with ostree
  9. stat:
  10. path: /run/ostree-booted
  11. get_attributes: no
  12. get_checksum: no
  13. get_mime: no
  14. register: ostree
  15. - name: set is_fedora_coreos
  16. lineinfile:
  17. path: /etc/os-release
  18. line: "VARIANT_ID=coreos"
  19. state: present
  20. check_mode: yes
  21. register: os_variant_coreos
  22. changed_when: false
  23. - name: set is_fedora_coreos
  24. set_fact:
  25. is_fedora_coreos: "{{ ostree.stat.exists and os_variant_coreos is not changed }}"
  26. - name: check resolvconf
  27. command: which resolvconf
  28. register: resolvconf
  29. failed_when: false
  30. changed_when: false
  31. check_mode: no
  32. - name: check systemd-resolved
  33. # noqa 303 Should we use service_facts for this?
  34. command: systemctl is-active systemd-resolved
  35. register: systemd_resolved_enabled
  36. failed_when: false
  37. changed_when: false
  38. check_mode: no
  39. - name: set dns facts
  40. set_fact:
  41. resolvconf: >-
  42. {%- if resolvconf.rc == 0 -%}true{%- else -%}false{%- endif -%}
  43. bogus_domains: |-
  44. {% for d in [ 'default.svc.' + dns_domain, 'svc.' + dns_domain ] + searchdomains|default([]) -%}
  45. {{ dns_domain }}.{{ d }}./{{ d }}.{{ d }}./com.{{ d }}./
  46. {%- endfor %}
  47. cloud_resolver: "{{ ['169.254.169.254'] if cloud_provider is defined and cloud_provider == 'gce' else
  48. ['169.254.169.253'] if cloud_provider is defined and cloud_provider == 'aws' else
  49. [] }}"
  50. - name: check if kubelet is configured
  51. stat:
  52. path: "{{ kube_config_dir }}/kubelet.env"
  53. get_attributes: no
  54. get_checksum: no
  55. get_mime: no
  56. register: kubelet_configured
  57. changed_when: false
  58. - name: check if early DNS configuration stage
  59. set_fact:
  60. dns_early: >-
  61. {%- if kubelet_configured.stat.exists -%}false{%- else -%}true{%- endif -%}
  62. - name: target resolv.conf files
  63. set_fact:
  64. resolvconffile: /etc/resolv.conf
  65. base: >-
  66. {%- if resolvconf|bool -%}/etc/resolvconf/resolv.conf.d/base{%- endif -%}
  67. head: >-
  68. {%- if resolvconf|bool -%}/etc/resolvconf/resolv.conf.d/head{%- endif -%}
  69. when: not ansible_os_family in ["Flatcar Container Linux by Kinvolk"] and not is_fedora_coreos
  70. - name: target temporary resolvconf cloud init file (Flatcar Container Linux by Kinvolk / Fedora CoreOS)
  71. set_fact:
  72. resolvconffile: /tmp/resolveconf_cloud_init_conf
  73. when: ansible_os_family in ["Flatcar Container Linux by Kinvolk"] or is_fedora_coreos
  74. - name: check if /etc/dhclient.conf exists
  75. stat:
  76. path: /etc/dhclient.conf
  77. get_attributes: no
  78. get_checksum: no
  79. get_mime: no
  80. register: dhclient_stat
  81. - name: target dhclient conf file for /etc/dhclient.conf
  82. set_fact:
  83. dhclientconffile: /etc/dhclient.conf
  84. when: dhclient_stat.stat.exists
  85. - name: check if /etc/dhcp/dhclient.conf exists
  86. stat:
  87. path: /etc/dhcp/dhclient.conf
  88. get_attributes: no
  89. get_checksum: no
  90. get_mime: no
  91. register: dhcp_dhclient_stat
  92. - name: target dhclient conf file for /etc/dhcp/dhclient.conf
  93. set_fact:
  94. dhclientconffile: /etc/dhcp/dhclient.conf
  95. when: dhcp_dhclient_stat.stat.exists
  96. - name: target dhclient hook file for Red Hat family
  97. set_fact:
  98. dhclienthookfile: /etc/dhcp/dhclient.d/zdnsupdate.sh
  99. when: ansible_os_family == "RedHat"
  100. - name: target dhclient hook file for Debian family
  101. set_fact:
  102. dhclienthookfile: /etc/dhcp/dhclient-exit-hooks.d/zdnsupdate
  103. when: ansible_os_family == "Debian"
  104. - name: generate search domains to resolvconf
  105. set_fact:
  106. searchentries:
  107. search {{ ([ 'default.svc.' + dns_domain, 'svc.' + dns_domain ] + searchdomains|default([])) | join(' ') }}
  108. domainentry:
  109. domain {{ dns_domain }}
  110. supersede_search:
  111. supersede domain-search "{{ ([ 'default.svc.' + dns_domain, 'svc.' + dns_domain ] + searchdomains|default([])) | join('", "') }}";
  112. supersede_domain:
  113. supersede domain-name "{{ dns_domain }}";
  114. - name: pick coredns cluster IP or default resolver
  115. set_fact:
  116. coredns_server: |-
  117. {%- if dns_mode == 'coredns' and not dns_early|bool -%}
  118. {{ [ skydns_server ] }}
  119. {%- elif dns_mode == 'coredns_dual' and not dns_early|bool -%}
  120. {{ [ skydns_server ] + [ skydns_server_secondary ] }}
  121. {%- elif dns_mode == 'manual' and not dns_early|bool -%}
  122. {{ ( manual_dns_server.split(',') | list) }}
  123. {%- elif dns_mode == 'none' and not dns_early|bool -%}
  124. []
  125. {%- elif dns_early|bool -%}
  126. {{ upstream_dns_servers|default([]) }}
  127. {%- endif -%}
  128. - name: generate nameservers to resolvconf
  129. set_fact:
  130. nameserverentries:
  131. nameserver {{ ( coredns_server|d([]) + nameservers|d([]) + cloud_resolver|d([])) | unique | join(',nameserver ') }}
  132. supersede_nameserver:
  133. supersede domain-name-servers {{ ( coredns_server|d([]) + nameservers|d([]) + cloud_resolver|d([])) | unique | join(', ') }};
  134. - name: gather os specific variables
  135. include_vars: "{{ item }}"
  136. with_first_found:
  137. - files:
  138. - "{{ ansible_distribution|lower }}-{{ ansible_distribution_version|lower|replace('/', '_') }}.yml"
  139. - "{{ ansible_distribution|lower }}-{{ ansible_distribution_release }}.yml"
  140. - "{{ ansible_distribution|lower }}-{{ ansible_distribution_major_version|lower|replace('/', '_') }}.yml"
  141. - "{{ ansible_distribution|lower }}.yml"
  142. - "{{ ansible_os_family|lower }}.yml"
  143. - defaults.yml
  144. paths:
  145. - ../vars
  146. skip: true
  147. - name: set etcd vars if using kubeadm mode
  148. set_fact:
  149. etcd_cert_dir: "{{ kube_cert_dir }}"
  150. kube_etcd_cacert_file: "etcd/ca.crt"
  151. kube_etcd_cert_file: "apiserver-etcd-client.crt"
  152. kube_etcd_key_file: "apiserver-etcd-client.key"
  153. when:
  154. - etcd_kubeadm_enabled
  155. - name: check /usr readonly
  156. stat:
  157. path: "/usr"
  158. get_attributes: no
  159. get_checksum: no
  160. get_mime: no
  161. register: usr
  162. - name: set alternate flexvolume path
  163. set_fact:
  164. kubelet_flexvolumes_plugins_dir: /var/lib/kubelet/volumeplugins
  165. when: not usr.stat.writeable
  166. - block:
  167. - name: Ensure IPv6DualStack featureGate is set when enable_dual_stack_networks is true
  168. set_fact:
  169. kube_feature_gates: "{{ kube_feature_gates + [ 'IPv6DualStack=true' ] }}"
  170. when:
  171. - not 'IPv6DualStack=true' in kube_feature_gates
  172. - name: Ensure IPv6DualStack kubeadm featureGate is set when enable_dual_stack_networks is true
  173. set_fact:
  174. kubeadm_feature_gates: "{{ kubeadm_feature_gates + [ 'IPv6DualStack=true' ] }}"
  175. when:
  176. - not 'IPv6DualStack=true' in kubeadm_feature_gates
  177. when:
  178. - enable_dual_stack_networks