Compare commits

...

19 Commits

Author SHA1 Message Date
c87ed1646a build: bump version 1.10.2 -> 1.10.3
!69
2024-06-27 07:39:53 +00:00
Jon
25496d1f55 Merge branch '31-fix-ipv6-check' into 'development'
fix: kubernetes install failes when host with ipv6 disabled

Closes #31

See merge request nofusscomputing/projects/ansible/collections/kubernetes!69
2024-06-27 07:26:27 +00:00
Jon
b0d9279535 fix(install): ensure ipv6 is installed before attempting to disable
!69 fixes #31
2024-06-27 16:43:33 +09:30
7905f881fe build: bump version 1.10.1 -> 1.10.2
!68 nofusscomputing/projects/ansible/execution_environment
2024-05-03 20:38:59 +00:00
Jon
5ee0782993 fix(nfc_kubernetes): set default for var so task 'Copy Template' when clause doesn't fail task with undefined var
!68 nofusscomputing/projects/ansible/execution_environment!256
2024-05-04 05:56:00 +09:30
aeb1bcc048 build: bump version 1.10.0 -> 1.10.1
!67
2024-05-03 19:27:15 +00:00
Jon
bcc870a87c fix(nfc_kubernetes): set default for var so when clause doesn't fail task with undefined var
!67
2024-05-04 04:43:24 +09:30
c2c0a9fe7d build: bump version 1.9.0 -> 1.10.0
!65
2024-05-03 18:33:42 +00:00
Jon
1f90af4eac Merge branch '28-29-logic-fixes' into 'development'
fix: logic

Closes #28 and #29

See merge request nofusscomputing/projects/ansible/collections/kubernetes!65
2024-05-03 18:20:28 +00:00
Jon
a01af004a7 ci(test): add two apt updates in an attempt to correct apt-key random errors
error is "Unknown error executing apt-key" and "GPG error: < repo> InRelease: Unknown error executing apt-key"

!65
2024-05-04 03:36:02 +09:30
Jon
e002ff3749 fix(nfc_kubernetes): correct 'Create Required directories' when logic
!65
2024-05-04 03:23:29 +09:30
Jon
ece10c7ee0 feat(nfc_kubernetes): new variable 'nfc_role_kubernetes_node_prime' to denote the hostname of the prime node
!65 fixes #28
2024-05-04 01:47:49 +09:30
Jon
cbd2ec7ef8 refactor(nfc_kubernetes): remove usage of prime node name over is_prime var
!65 #28
2024-05-04 01:47:49 +09:30
Jon
43ddb13bdd fix(nfc_kubernetes): only run tasks on master nodes
!65 #28
2024-05-04 01:47:49 +09:30
Jon
310d7a1c48 fix(nfc_kubernetes): only run tasks on prime node
!65 #28
2024-05-04 01:47:49 +09:30
Jon
2ebeb805e8 fix(nfc_kubernetes): ensure correct node type selection for installation
!65 fixes #29
2024-05-04 01:47:49 +09:30
0d0d1862cc build: bump version 1.8.1-a2 -> 1.9.0
!63
2024-05-03 13:10:33 +00:00
Jon
b4c06b9f91 feat(nfc_kubernetes): add debug out to k3s download on failure
!63
2024-05-03 22:27:39 +09:30
Jon
3d0dda7277 revert: "feat(nfc_kubernetes) build url and on use cast as string"
This reverts commit 9fa3b233a9.

The bug was within awx-core 2.16.1 as upgrading to 2.16.6 fixed the problem

!63 !61 nofusscomputing/projects/ansible/execution_environment!255 closes https://github.com/ansible/awx/issues/15161
2024-05-02 15:00:51 +09:30
8 changed files with 165 additions and 139 deletions

View File

@ -4,5 +4,5 @@ commitizen:
prerelease_offset: 1
tag_format: $version
update_changelog_on_bump: false
version: 1.8.1-a2
version: 1.10.3
version_scheme: semver

View File

@ -37,6 +37,8 @@
- | # enter test container
docker exec -i test_image_${CI_JOB_ID} ps aux
- docker ps
- docker exec -i test_image_${CI_JOB_ID} bash -c 'apt update || true'
- docker exec -i test_image_${CI_JOB_ID} bash -c 'apt update || true'
- docker exec -i test_image_${CI_JOB_ID} apt update
- docker exec -i test_image_${CI_JOB_ID} apt install -y --no-install-recommends python3-pip net-tools dnsutils iptables
- |

View File

@ -1,13 +1,47 @@
## 1.8.1-a2 (2024-05-02)
## 1.10.3 (2024-06-27)
### Fix
- **install**: ensure ipv6 is installed before attempting to disable
## 1.10.2 (2024-05-03)
### Fix
- **nfc_kubernetes**: set default for var so task 'Copy Template' when clause doesn't fail task with undefined var
## 1.10.1 (2024-05-03)
### Fix
- **nfc_kubernetes**: set default for var so when clause doesn't fail task with undefined var
## 1.10.0 (2024-05-03)
### Feat
- **nfc_kubernetes**: new variable 'nfc_role_kubernetes_node_prime' to denote the hostname of the prime node
### Fix
- **nfc_kubernetes**: correct 'Create Required directories' when logic
- **nfc_kubernetes**: only run tasks on master nodes
- **nfc_kubernetes**: only run tasks on prime node
- **nfc_kubernetes**: ensure correct node type selection for installation
### Refactor
- **nfc_kubernetes**: remove usage of prime node name over is_prime var
## 1.9.0 (2024-05-03)
### Feat
- **nfc_kubernetes**: add debug out to k3s download on failure
### Fix
- **nfc_kubernetes**: cast url var as list
## 1.8.1-a1 (2024-05-02)
### Fix
- **nfc_kubernetes**: correct url build to loop through all cpu arch
## 1.8.0 (2024-05-02)
@ -33,59 +67,9 @@
### Feat
- **kubernetes_netbox**: custom field bug work around
- **services**: add netbox service fields
- **role**: New role kubernetes_netbox
### Fix
- **nfc_kubernetes**: ensure install tasks run when job_tags specified
- **facts**: gather required facts if not already available
- **install**: correct template installed var
- **install**: as part of install check, confirm service
## 1.6.0 (2024-03-29)
### Feat
- **test**: add integration test. playbook install
- add retry=3 delay=10 secs to all ansible url modules
- **upgrade**: If upgrade occurs, dont run remaining tasks
- support upgrading cluster
### Fix
- **docs**: use correct badge query url
### Refactor
- **galaxy**: for dependent collections prefix with `>=` so as to not cause version lock
## 1.5.0 (2024-03-21)
### Feat
- **collection**: nofusscomputing.firewall update 1.0.1 -> 1.1.0
## 1.4.0 (2024-03-20)
### Feat
- **install**: "ansible_check_mode=true" no hostname check
## 1.3.0 (2024-03-18)
### Fix
- **handler**: add missing 'reboot_host' handler
- **firewall**: ensure slave nodes can access ALL masters API point
- **firewall**: dont add rules for disabled features
## 1.2.0 (2024-03-16)
### Feat
- **firewall**: use collection nofusscomputing.firewall to configure kubernetes firewall
### Fix
- **config**: use correct var name when setting node name

View File

@ -8,7 +8,7 @@ namespace: nofusscomputing
name: kubernetes
# The version of the collection. Must be compatible with semantic versioning
version: 1.8.1-a2
version: 1.10.3
# The path to the Markdown (.md) readme file. This path is relative to the root of the collection
readme: README.md

View File

@ -46,6 +46,8 @@ nfc_role_kubernetes_install_kubevirt: false
nfc_role_kubernetes_kubevirt_operator_replicas: 1
# nfc_role_kubernetes_node_prime: '' # Mandatory*, string. the inventory_hostname of the prime node. ONLY required for multi-node deployments
nfc_role_kubernetes_oidc_enabled: false
nfc_role_kubernetes_resolv_conf_file: /etc/resolv.conf
@ -53,8 +55,8 @@ nfc_role_kubernetes_resolv_conf_file: /etc/resolv.conf
nfc_role_kubernetes_pod_subnet: 172.16.248.0/21
nfc_role_kubernetes_service_subnet: 172.16.244.0/22
nfc_role_kubernetes_prime: true # Mandatory for a node designated as the prime master node
nfc_role_kubernetes_master: true # Mandatory for a node designated as a master node and the prime master node
nfc_role_kubernetes_prime: false # Mandatory for a node designated as the prime master node
nfc_role_kubernetes_master: false # Mandatory for a node designated as a master node and the prime master node
nfc_role_kubernetes_worker: false # Mandatory for a node designated as a worker node
############################################################################################################
@ -136,7 +138,7 @@ k3s:
# usernames: []
# runtimeClasses: []
# namespaces: [kube-system]
when: "{{ kubernetes_config.cluster.prime.name | default(inventory_hostname) == inventory_hostname }}"
when: "{{ nfc_role_kubernetes_prime | bool }}"
#############################################################################################

View File

@ -34,13 +34,13 @@
- src: kubernetes-manifest-rbac.yaml.j2
dest: /var/lib/rancher/k3s/server/manifests/rbac-authorization-common.yaml
when: "{{ kubernetes_config.cluster.prime.name | default(inventory_hostname) == inventory_hostname }}"
when: "{{ nfc_role_kubernetes_prime | bool }}"
- src: iptables-kubernetes.rules.j2
dest: "/etc/iptables-reloader/rules.d/iptables-kubernetes.rules"
notify: firewall_reloader
when: |-
{%- if firewall_installed -%}
{%- if firewall_installed | default(false) -%}
{{ firewall_rules_dir_metadata.stat.exists }}
@ -71,7 +71,7 @@
owner: root
group: root
mode: '700'
delegate_to: "{{ kubernetes_config.cluster.prime.name }}"
delegate_to: "{{ nfc_role_kubernetes_node_prime }}"
when:
kubernetes_config.hosts[inventory_hostname].labels | default([]) | list | length > 0
or

View File

@ -15,12 +15,16 @@
ansible.builtin.stat:
name: /var/lib/rancher/k3s/server/manifests/calico.yaml
register: file_calico_yaml_metadata
when: >
nfc_role_kubernetes_prime | bool
- name: Check for calico Operator deployment manifest
ansible.builtin.stat:
name: /var/lib/rancher/k3s/ansible/deployment-manifest-calico_operator.yaml
register: file_calico_operator_yaml_metadata
when: >
nfc_role_kubernetes_prime | bool
- name: Install dependent packages
@ -108,15 +112,30 @@
- name: /var/lib/rancher/k3s/server/logs
state: directory
mode: 700
when: >
{{ nfc_role_kubernetes_master | bool }}
- name: /var/lib/rancher/k3s/server/manifests
state: directory
mode: 700
when: >
{{ nfc_role_kubernetes_master | bool }}
- name: /var/lib/rancher/k3s/ansible
state: directory
mode: 700
when: >
{{ nfc_role_kubernetes_master | bool }}
when: >
item.when | default(true)
- name: Add sysctl net.ipv4.ip_forward
- name: Check if IPv6 Enabled
ansible.builtin.stat:
path: /proc/sys/net/ipv6/conf/all/disable_ipv6
register: ipv6_file
failed_when: false
- name: Add sysctl settings
ansible.posix.sysctl:
name: "{{ item.name }}"
value: "{{ item.value }}"
@ -135,8 +154,11 @@
value: '512'
- name: net.ipv6.conf.all.disable_ipv6
value: '1'
when:
- ansible_os_family == 'Debian'
when: "{{ ipv6_file.stat.exists }}"
when: >
ansible_os_family == 'Debian'
and
item.when | default(true) | bool
- name: Check for Network Manager Directory
@ -304,62 +326,62 @@
when: >
file_cached_k3s_binary.stat.checksum | default('0') != node_k3s.desired_hash
# Workaround. See: https://github.com/ansible/awx/issues/15161
- name: Build K3s Download URL
ansible.builtin.set_fact:
cacheable: false
url_download_k3s: |-
[
{%- for key, value in nfc_kubernetes_install_architectures | dict2items -%}
"https://github.com/k3s-io/k3s/releases/download/
{{- node_k3s.desired_version | urlencode -}}
/k3s
{%- if key == 'aarch64' -%}
-arm64
{%- endif %}",
{%- endfor -%}
]
changed_when: false
check_mode: false
delegate_to: localhost
loop: "{{ nfc_kubernetes_install_architectures | dict2items }}"
loop_control:
loop_var: cpu_arch
vars:
ansible_connection: local
- name: Try / Catch
block:
- name: Download K3s Binary
ansible.builtin.uri:
url: "{{ url | string }}"
method: GET
return_content: false
status_code:
- 200
- 304
dest: "/tmp/k3s.{{ ansible_architecture }}"
mode: "744"
changed_when: not ansible_check_mode
check_mode: false
delay: 10
retries: 3
register: k3s_download_files
delegate_to: localhost
failed_when: >
(lookup('ansible.builtin.file', '/tmp/k3s.' + ansible_architecture) | hash('sha256') | string) != node_k3s.desired_hash
and
(
k3s_download_files.status | int != 200
or
k3s_download_files.status | int != 304
)
run_once: true
when: ansible_os_family == 'Debian'
loop: "{{ url_download_k3s | from_yaml }}"
loop_control:
loop_var: url
vars:
ansible_connection: local
- name: Download K3s Binary
ansible.builtin.uri:
url: |-
https://github.com/k3s-io/k3s/releases/download/
{{- node_k3s.desired_version | urlencode -}}
/k3s
{%- if cpu_arch.key == 'aarch64' -%}
-arm64
{%- endif %}
method: GET
return_content: false
status_code:
- 200
- 304
dest: "/tmp/k3s.{{ ansible_architecture }}"
mode: "744"
changed_when: not ansible_check_mode
check_mode: false
delay: 10
retries: 3
register: k3s_download_files
delegate_to: localhost
failed_when: >
(lookup('ansible.builtin.file', '/tmp/k3s.' + ansible_architecture) | hash('sha256') | string) != node_k3s.desired_hash
and
(
k3s_download_files.status | int != 200
or
k3s_download_files.status | int != 304
)
run_once: true
when: ansible_os_family == 'Debian'
loop: "{{ nfc_kubernetes_install_architectures | dict2items }}"
loop_control:
loop_var: cpu_arch
vars:
ansible_connection: local
rescue:
- name: TRACE - Debug out
ansible.builtin.debug:
msg:
- "Download file hash: {{ (lookup('ansible.builtin.file', '/tmp/k3s.' + ansible_architecture) | hash('sha256') | string) }}"
- name: Fail task
ansible.builtin.assert:
that:
- false
msg: "Task failed, review previous task for error"
- name: Copy K3s binary to Host
@ -499,7 +521,7 @@
dest: /var/lib/rancher/k3s/server/manifests/calico.yaml
when: >
{{
kubernetes_config.cluster.prime.name | default(inventory_hostname) == inventory_hostname
nfc_role_kubernetes_prime | bool
and
(
(
@ -546,7 +568,7 @@
/tmp/install.sh {% if nfc_role_kubernetes_etcd_enabled %}--cluster-init{% endif %}
changed_when: false
when: >
kubernetes_config.cluster.prime.name | default(inventory_hostname) == inventory_hostname
nfc_role_kubernetes_prime | bool
and
not node_k3s.installed | bool
and
@ -567,12 +589,12 @@
'operator_calico' in ansible_run_tags
)
or
not file_calico_yaml_metadata.stat.exists
not file_calico_yaml_metadata.stat.exists | default(false)
)
and
'calico_manifest' not in ansible_run_tags
and
kubernetes_config.cluster.prime.name | default(inventory_hostname) == inventory_hostname
nfc_role_kubernetes_prime | bool
and
not nfc_role_kubernetes_cluster_upgraded | default(false) | bool
@ -593,7 +615,7 @@
when: >-
nfc_kubernetes_enable_metallb | default(false) | bool
and
kubernetes_config.cluster.prime.name | default(inventory_hostname) == inventory_hostname
nfc_role_kubernetes_prime | bool
and
not nfc_role_kubernetes_cluster_upgraded | default(false) | bool
@ -609,7 +631,7 @@
exit 127;
fi
executable: /bin/bash
delegate_to: "{{ kubernetes_config.cluster.prime.name | default(inventory_hostname) }}"
delegate_to: "{{ nfc_role_kubernetes_node_prime }}"
run_once: true
register: kubernetes_ready_check
retries: 30
@ -649,7 +671,7 @@
install_olm.rc == 1
register: install_olm
when: >
kubernetes_config.cluster.prime.name | default(inventory_hostname) == inventory_hostname
nfc_role_kubernetes_prime | bool
and
nfc_role_kubernetes_install_olm | default(false) | bool
and
@ -679,7 +701,7 @@
failed_when: false
register: install_olm
when: >
kubernetes_config.cluster.prime.name | default(inventory_hostname) == inventory_hostname
nfc_role_kubernetes_prime | bool
and
'olm_uninstall' in ansible_run_tags
and
@ -692,7 +714,7 @@
changed_when: false
failed_when: false # New cluster will fail
when: >
kubernetes_config.cluster.prime.name | default(inventory_hostname) == inventory_hostname
nfc_role_kubernetes_prime | bool
and
kubernetes_config.cluster.networking.encrypt | default(false) | bool
and
@ -712,7 +734,7 @@
- name: Fetch Join Token
ansible.builtin.slurp:
src: /var/lib/rancher/k3s/server/token
delegate_to: "{{ kubernetes_config.cluster.prime.name | default(inventory_hostname) }}"
delegate_to: "{{ nfc_role_kubernetes_node_prime }}"
run_once: true
register: k3s_join_token
no_log: true # Value is sensitive
@ -723,7 +745,7 @@
- name: Create Token fact
ansible.builtin.set_fact:
k3s_join_token: "{{ k3s_join_token.content | b64decode | replace('\n', '') }}"
delegate_to: "{{ kubernetes_config.cluster.prime.name | default(inventory_hostname) }}"
delegate_to: "{{ nfc_role_kubernetes_node_prime }}"
run_once: true
no_log: true # Value is sensitive
when: >
@ -743,7 +765,7 @@
when: >
nfc_role_kubernetes_master | default(false) | bool
and
not kubernetes_config.cluster.prime.name | default(inventory_hostname) == inventory_hostname
not nfc_role_kubernetes_prime | bool
and
not node_k3s.installed | bool
and
@ -758,14 +780,14 @@
INSTALL_K3S_SKIP_DOWNLOAD=true \
INSTALL_K3S_VERSION="v{{ node_k3s.desired_version }}" \
K3S_TOKEN="{{ k3s_join_token }}" \
K3S_URL="https://{{ hostvars[kubernetes_config.cluster.prime.name | default(inventory_hostname)].ansible_host }}:6443" \
K3S_URL="https://{{ hostvars[nfc_role_kubernetes_node_prime].ansible_host }}:6443" \
/tmp/install.sh -
executable: /bin/bash
changed_when: false
when: >
not nfc_role_kubernetes_master | default(false) | bool
and
not kubernetes_config.cluster.prime.name | default(inventory_hostname) == inventory_hostname
not nfc_role_kubernetes_prime | bool
and
not node_k3s.installed | bool
and

View File

@ -1,15 +1,29 @@
---
- name: Default Variable adjustment [Probable Single Node Install]
ansible.builtin.set_fact:
cacheable: false
nfc_role_kubernetes_prime: true
nfc_role_kubernetes_master: true
nfc_role_kubernetes_node_prime: "{{ inventory_hostname }}"
when: >
not nfc_role_kubernetes_worker | bool
and
not nfc_role_kubernetes_prime | bool
and
not nfc_role_kubernetes_master | bool
- name: Install/Configure Kubernetes Prime Master Node
ansible.builtin.include_tasks:
file: install.yaml
tags:
- always
when:
kubernetes_config.cluster.prime.name | default(inventory_hostname) == inventory_hostname
and
nfc_role_kubernetes_prime | bool
and
not nfc_role_kubernetes_worker | bool
and
not kubernetes_installed | default(false)
@ -19,10 +33,12 @@
tags:
- always
when:
kubernetes_config.cluster.prime.name | default(inventory_hostname) != inventory_hostname
and
nfc_role_kubernetes_master | bool
and
not nfc_role_kubernetes_prime | bool
and
not nfc_role_kubernetes_worker | bool
and
not kubernetes_installed | default(false)