Skip to content

Commit 0e1127f

Browse files
committed
Moved set_facts on dedicated task file. Dynamically render kubeadm-init.yml based on k8s major version. Updated example playbook
1 parent 2612b88 commit 0e1127f

10 files changed

+90
-50
lines changed

examples/site.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,15 @@
11
---
2+
3+
- hosts: kubernetes
4+
become: yes
5+
remote_user: vagrant
6+
tasks:
7+
- ansible.builtin.import_role:
8+
name: ansible-role-linux-kubernetes
9+
tasks_from: set_custom_fact
10+
vars_files:
11+
- vars.yaml
12+
213
- hosts: kubemaster
314
become: yes
415
remote_user: vagrant

tasks/init_cluster.yml

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,6 @@
44
ansible.builtin.shell: kubectl get nodes
55
ignore_errors: true
66
register: cluster_exist
7-
8-
- ansible.builtin.set_fact:
9-
kubernetes_init: "{% if kubernetes_init_host is defined and kubernetes_init_host == inventory_hostname %}yes{% else %}no{% endif %}"
10-
11-
- ansible.builtin.set_fact:
12-
kubernetes_ip_address: "{{ item }}"
13-
when:
14-
- ansible_interfaces | length > 2
15-
- kubernetes_vip_ip is defined
16-
- "item | ansible.utils.ipaddr( kubernetes_subnet )"
17-
with_items: "{{ ansible_all_ipv4_addresses | difference([kubernetes_vip_ip]) }}"
18-
19-
- ansible.builtin.set_fact:
20-
kubernetes_ip_address: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"
21-
when:
22-
- ansible_interfaces | length <= 2
23-
24-
- ansible.builtin.set_fact:
25-
kubernetes_image_repository: "registry.k8s.io"
267

278
- block:
289

tasks/join_cluster.yml

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
---
22

3-
- name: Check if /var/lib/kubelet directory exist
3+
- name: Check if /var/lib/kubelet/config.yaml file exist
44
ansible.builtin.stat:
5-
path: /var/lib/kubelet
6-
register: kubelet_dir
7-
8-
- ansible.builtin.set_fact:
9-
kubernetes_ip_address: "{{ item }}"
10-
when: "item | ansible.utils.ipaddr( kubernetes_subnet )"
11-
with_items: "{{ ansible_all_ipv4_addresses | difference([kubernetes_vip_ip]) }}"
5+
path: /var/lib/kubelet/config.yaml
6+
register: kubelet_config_file
127

138
- ansible.builtin.set_fact:
149
api_server_endpoint: "{% if groups['kubemaster'] | length > 1 %}{{ kubernetes_vip_ip }}{% else %}{{ hostvars[groups['kubemaster'][0]]['kubernetes_ip_address'] }}{% endif %}"
@@ -94,8 +89,8 @@
9489
remote_src: yes
9590
when:
9691
- inventory_hostname in groups['kubemaster']
97-
- kubelet_dir.stat.exists is defined
98-
- kubelet_dir.stat.exists == False
92+
- kubelet_config_file.stat.exists is defined
93+
- kubelet_config_file.stat.exists == False
9994
ignore_errors: "{{ ansible_check_mode }}"
10095

10196
- block:
@@ -110,6 +105,6 @@
110105
changed_when: kubeadm_join is success
111106
when:
112107
- inventory_hostname in groups['kubeworker']
113-
- kubelet_dir.stat.exists is defined
114-
- kubelet_dir.stat.exists == False
108+
- kubelet_config_file.stat.exists is defined
109+
- kubelet_config_file.stat.exists == False
115110
ignore_errors: "{{ ansible_check_mode }}"

tasks/main.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
---
22

3+
- include_tasks:
4+
file: set_custom_fact.yml
5+
apply:
6+
tags: always
7+
tags: always
8+
39
- include_tasks:
410
file: "{{ item }}"
511
apply:

tasks/set_custom_fact.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
3+
- ansible.builtin.set_fact:
4+
kubernetes_init: "{% if kubernetes_init_host is defined and kubernetes_init_host == inventory_hostname %}yes{% else %}no{% endif %}"
5+
kubernetes_major: "{{ kubernetes_version | regex_replace('^([0-9]+\\.[0-9]+)\\..*', '\\1') }}"
6+
7+
- ansible.builtin.set_fact:
8+
kubernetes_api_version: kubeadm.k8s.io/v1beta4
9+
when: kubernetes_major is ansible.builtin.version('1.31','>=')
10+
11+
- ansible.builtin.set_fact:
12+
kubernetes_api_version: kubeadm.k8s.io/v1beta3
13+
when: kubernetes_major is ansible.builtin.version('1.31', '<')
14+
15+
- ansible.builtin.set_fact:
16+
kubernetes_ip_address: "{{ item }}"
17+
when:
18+
- ansible_interfaces | length > 2
19+
- kubernetes_vip_ip is defined
20+
- "item | ansible.utils.ipaddr( kubernetes_subnet )"
21+
with_items: "{{ ansible_all_ipv4_addresses | difference([kubernetes_vip_ip]) }}"
22+
23+
- ansible.builtin.set_fact:
24+
kubernetes_ip_address: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"
25+
when:
26+
- ansible_interfaces | length <= 2
27+
28+
- ansible.builtin.set_fact:
29+
kubernetes_iface: "{{ hostvars[inventory_hostname]['ansible_' + item ]['device'] }}"
30+
when:
31+
- ansible_interfaces | length > 2
32+
- kubernetes_vip_ip is defined
33+
- hostvars[inventory_hostname]['ansible_' + item ].ipv4 is defined
34+
- hostvars[inventory_hostname]['ansible_' + item ]['ipv4']['address'] | ansible.utils.ipaddr( kubernetes_subnet )
35+
with_items: "{{ ansible_interfaces }}"
36+
37+
- ansible.builtin.set_fact:
38+
kubernetes_iface: "{{ hostvars[inventory_hostname]['ansible_default_ipv4']['interface'] }}"
39+
when:
40+
- ansible_interfaces | length <= 2

tasks/setup_repo_Debian.yml

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
---
22

3-
- ansible.builtin.set_fact:
4-
kubernetes_major: "{{ kubernetes_version | regex_replace('^([0-9]+\\.[0-9]+)\\..*', '\\1') }}"
5-
63
- name: Install required system packages
74
ansible.builtin.apt:
85
name:
@@ -32,16 +29,20 @@
3229
line: deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.key] https://pkgs.k8s.io/core:/stable:/v{{ kubernetes_major }}/deb/ /
3330
create: yes
3431

35-
- name: Add Docker GPG apt Key
36-
ansible.builtin.apt_key:
37-
url: https://download.docker.com/linux/ubuntu/gpg
38-
state: present
32+
- name: Add Docker Repository key
33+
ansible.builtin.get_url:
34+
url: https://download.docker.com/linux/ubuntu/gpg
35+
dest: /etc/apt/keyrings/docker.asc
3936

40-
- shell: lsb_release -cs
37+
- shell: . /etc/os-release && echo "$VERSION_CODENAME"
4138
register: lsb_release
4239

40+
- shell: dpkg --print-architecture
41+
register: deb_architecture
42+
4343
- name: Add Docker Repository
44-
ansible.builtin.apt_repository:
45-
repo: deb https://download.docker.com/linux/ubuntu {{ lsb_release.stdout }} stable
46-
state: present
47-
ignore_errors: "{{ ansible_check_mode }}"
44+
ansible.builtin.lineinfile:
45+
path: /etc/apt/sources.list.d/docker.list
46+
regexp: '^deb'
47+
line: deb [arch={{ deb_architecture.stdout }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu {{ lsb_release.stdout }} stable
48+
create: yes

tasks/setup_repo_RedHat.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
---
22

3-
- ansible.builtin.set_fact:
4-
kubernetes_major: "{{ kubernetes_version | regex_replace('^([0-9]+\\.[0-9]+)\\..*', '\\1') }}"
5-
63
- name: Install required system packages
74
ansible.builtin.dnf:
85
name:

templates/kubeadm-init.yml.j2

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
apiVersion: kubeadm.k8s.io/v1beta4
2+
apiVersion: {{ kubernetes_api_version }}
33
bootstrapTokens:
44
- groups:
55
- system:bootstrappers:kubeadm:default-node-token
@@ -20,6 +20,7 @@ nodeRegistration:
2020
taints:
2121
- effect: NoSchedule
2222
key: node-role.kubernetes.io/control-plane
23+
{% if kubernetes_api_version == 'kubeadm.k8s.io/v1beta4' %}
2324
timeouts:
2425
controlPlaneComponentHealthCheck: 4m0s
2526
discovery: 5m0s
@@ -28,13 +29,17 @@ timeouts:
2829
kubernetesAPICall: 1m0s
2930
tlsBootstrap: 5m0s
3031
upgradeManifests: 5m0s
32+
{% endif %}
3133
---
3234
apiServer:
35+
{% if kubernetes_api_version == 'kubeadm.k8s.io/v1beta3' %}
36+
timeoutForControlPlane: 4m0s
37+
{% endif %}
3338
certSANs:
3439
{% for san in apiserver_sans %}
3540
- "{{ san }}"
3641
{% endfor %}
37-
apiVersion: kubeadm.k8s.io/v1beta4
42+
apiVersion: {{ kubernetes_api_version }}
3843
certificatesDir: /etc/kubernetes/pki
3944
clusterName: kubernetes
4045
controllerManager: {}
@@ -45,13 +50,17 @@ kubernetesVersion: {{ kubernetes_version }}
4550
{% if groups['kubemaster'] | length > 1 %}
4651
controlPlaneEndpoint: {{ kubernetes_vip_ip }}:{{ kubernetes_api_port }}
4752
{% endif %}
53+
{% if kubernetes_api_version == 'kubeadm.k8s.io/v1beta4' %}
4854
caCertificateValidityPeriod: 87600h0m0s
4955
certificateValidityPeriod: 8760h0m0s
56+
{% endif %}
5057
networking:
5158
dnsDomain: {{ kubernetes_dns_domain }}
5259
podSubnet: {{ kubernetes_pod_subnet }}
5360
serviceSubnet: {{ kubernetes_service_subnet }}
61+
{% if kubernetes_api_version == 'kubeadm.k8s.io/v1beta4' %}
5462
proxy: {}
63+
{% endif %}
5564
scheduler: {}
5665
etcd:
5766
local:

templates/kubeadm-join-master.yml.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
apiVersion: kubeadm.k8s.io/v1beta4
2+
apiVersion: {{ kubernetes_api_version }}
33
kind: JoinConfiguration
44
discovery:
55
bootstrapToken:

templates/kubeadm-join-worker.yml.j2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
apiVersion: kubeadm.k8s.io/v1beta4
2+
apiVersion: {{ kubernetes_api_version }}
33
kind: JoinConfiguration
44
discovery:
55
bootstrapToken:

0 commit comments

Comments
 (0)