Skip to content

Commit e4ff694

Browse files
committed
refactored to separate agent and server runtimes + fixes + review comments
1 parent aeeca4c commit e4ff694

File tree

10 files changed

+96
-84
lines changed

10 files changed

+96
-84
lines changed

ansible/bootstrap.yml

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,30 @@
310310
become: yes
311311
tags: k3s
312312
tasks:
313-
- ansible.builtin.include_role:
313+
- name: Install k3s
314+
when: "'builder' in group_names"
315+
ansible.builtin.include_role:
316+
name: k3s
317+
tasks_from: install.yml
318+
319+
- hosts: k3s_server
320+
become: yes
321+
tags: k3s
322+
tasks:
323+
- name: Start k3s server
324+
when: "'builder' not in group_names"
325+
ansible.builtin.include_role:
326+
name: k3s
327+
tasks_from: server-runtime.yml
328+
329+
- hosts: k3s_agent
330+
become: yes
331+
tags: k3s
332+
tasks:
333+
- name: Start k3s agents
334+
when: "'builder' not in group_names"
335+
vars: # set outside of role to allow compute init to define own value
336+
k3s_bootstrap_token: "{{ hostvars[groups['k3s_server'] | first]._k3s_token_output.stdout | default('') }}"
337+
ansible.builtin.include_role:
314338
name: k3s
315-
tasks_from: "{{ 'install.yml' if 'builder' in group_names else 'runtime.yml' }}"
339+
tasks_from: agent-runtime.yml

ansible/roles/k3s/defaults/main.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ k3s_version: "v1.31.0+k3s1"
33
k3s_selinux_release: v1.6.latest.1
44
k3s_selinux_rpm_version: 1.6-1
55
k3s_helm_version: v3.11.0
6-
k3s_bootstrap_token_expiry: 20m
6+
k3s_bootstrap_token: "{{ None }}" # ansible managed
7+
k3s_bootstrap_token_expiry: 10m
8+
k3s_server_name: "{{ None }}" # ansible managed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
---
2+
3+
- name: Template k3s agent env file
4+
when: k3s_bootstrap_token != ""
5+
ansible.builtin.template:
6+
dest: /etc/systemd/system/k3s-agent.service.env
7+
src: k3s-agent.service.env.j2
8+
register: _k3s_agent_token_result
9+
10+
- name: Ensure password directory exists
11+
ansible.builtin.file:
12+
path: "/etc/rancher/node"
13+
state: directory
14+
owner: root
15+
group: root
16+
mode: 0640
17+
18+
- name: Write node password
19+
ansible.builtin.copy:
20+
dest: /etc/rancher/node/password
21+
content: "{{ vault_k3s_node_password }}"
22+
owner: root
23+
group: root
24+
mode: 0640 # normal k3s install is 644 but that doesn't feel right
25+
26+
- name: Start/restart k3s agent
27+
when: _k3s_agent_token_result.changed
28+
ansible.builtin.systemd:
29+
name: k3s-agent
30+
daemon_reload: true
31+
state: restarted
32+
enabled: true

ansible/roles/k3s/tasks/runtime.yml

Lines changed: 0 additions & 64 deletions
This file was deleted.
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
3+
- name: Template k3s env file
4+
ansible.builtin.template:
5+
dest: /etc/systemd/system/k3s.service.env
6+
src: k3s.service.env.j2
7+
register: _k3s_env_file_status
8+
9+
- name: Start k3s server
10+
ansible.builtin.systemd:
11+
name: k3s
12+
daemon_reload: "{{ _k3s_env_file_status.changed }}"
13+
state: started
14+
enabled: true
15+
16+
# Possible race here as there is a delay between agents disconnecting and being registered as down, probably won't be hit in general use though
17+
- name: Check if k3s agents are connected
18+
ignore_errors: true
19+
ansible.builtin.shell:
20+
cmd: kubectl get nodes --no-headers | grep -w Ready
21+
register: _k3s_connected_nodes
22+
retries: 5 # there may be a delay before the server reconnects to itself
23+
delay: 10
24+
until: not _k3s_connected_nodes.failed
25+
26+
- name: Generate new bootstrap token
27+
no_log: true
28+
when: _k3s_connected_nodes.stdout_lines | length != groups['k3s'] | length
29+
shell:
30+
cmd: "k3s token create --ttl {{ k3s_bootstrap_token_expiry }}"
31+
register: _k3s_token_output
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
K3S_NODE_IP={{ access_ip }}
2-
K3S_TOKEN={{ hostvars[groups['control'] | first]._token_output.stdout }}
1+
K3S_NODE_IP={{ ansible_host }}
2+
K3S_TOKEN={{ k3s_bootstrap_token }}
33
K3S_URL=https://{{ k3s_server_name }}:6443
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
K3S_NODE_IP={{ access_ip }}
1+
K3S_NODE_IP={{ ansible_host }}

environments/common/inventory/group_vars/all/defaults.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ opensearch_address: "127.0.0.1"
2121
prometheus_address: "{{ hostvars[groups['prometheus'].0].api_address }}"
2222
openondemand_address: "{{ hostvars[groups['openondemand'].0].api_address if groups['openondemand'] | count > 0 else '' }}"
2323
grafana_address: "{{ hostvars[groups['grafana'].0].api_address }}"
24+
k3s_server_name: "{{ hostvars[groups['k3s_server'] | first].ansible_host }}"
2425

2526
############################# bootstrap: local user configuration #########################
2627

environments/skeleton/{{cookiecutter.environment}}/tofu/data.tf

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,3 @@
1-
data "external" "inventory_secrets" {
2-
program = ["${path.module}/read-inventory-secrets.py"]
3-
4-
query = {
5-
path = var.inventory_secrets_path == "" ? "${path.module}/../inventory/group_vars/all/secrets.yml" : var.inventory_secrets_path
6-
}
7-
}
8-
91
data "external" "baremetal_nodes" {
102
# returns an empty map if cannot list baremetal nodes
113
program = ["${path.module}/baremetal-node-list.py"]

environments/skeleton/{{cookiecutter.environment}}/tofu/variables.tf

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,3 @@ variable "root_volume_size" {
183183
type = number
184184
default = 40
185185
}
186-
187-
variable "inventory_secrets_path" {
188-
description = "Path to inventory secrets.yml file. Default is standard cookiecutter location."
189-
type = string
190-
default = ""
191-
}

0 commit comments

Comments
 (0)