From 8ab9ac0817070790bca0265b5467bbc306a83d86 Mon Sep 17 00:00:00 2001 From: Khue Doan Date: Mon, 27 Dec 2021 12:24:23 +0700 Subject: [PATCH] feat(metallb): generate address pool automatically --- metal/cluster.yml | 7 +++++++ metal/roles/metallb_config/defaults/main.yml | 9 +++++++++ metal/roles/metallb_config/tasks/main.yml | 10 ++++++++++ .../roles/metallb_config/templates/configmap.yaml.j2 | 12 ++++++++++++ system/metallb-system/values.yaml | 8 +------- 5 files changed, 39 insertions(+), 7 deletions(-) create mode 100644 metal/roles/metallb_config/defaults/main.yml create mode 100644 metal/roles/metallb_config/tasks/main.yml create mode 100644 metal/roles/metallb_config/templates/configmap.yaml.j2 diff --git a/metal/cluster.yml b/metal/cluster.yml index ad42d2d5..1aaacbe2 100644 --- a/metal/cluster.yml +++ b/metal/cluster.yml @@ -2,3 +2,10 @@ hosts: metal roles: - k3s + +- name: Create some basic config + hosts: localhost + environment: + KUBECONFIG: ./kubeconfig.yaml + roles: + - metallb_config diff --git a/metal/roles/metallb_config/defaults/main.yml b/metal/roles/metallb_config/defaults/main.yml new file mode 100644 index 00000000..204b346b --- /dev/null +++ b/metal/roles/metallb_config/defaults/main.yml @@ -0,0 +1,9 @@ +metallb_namespace: metallb-system +metallb_subnet_cidr_prefix: 27 # /27 +metallb_subnet_index: -1 # last subnet +metallb_addresses: | # Use the last subnet with the specified size from the network + {{ + (ansible_default_ipv4.network + '/' + ansible_default_ipv4.netmask) + | ansible.netcommon.ipaddr('net') + | ansible.netcommon.ipsubnet(metallb_subnet_cidr_prefix, metallb_subnet_index) + }} diff --git a/metal/roles/metallb_config/tasks/main.yml b/metal/roles/metallb_config/tasks/main.yml new file mode 100644 index 00000000..8b3f3727 --- /dev/null +++ b/metal/roles/metallb_config/tasks/main.yml @@ -0,0 +1,10 @@ +- name: Ensure MetalLB namespace exist + kubernetes.core.k8s: + api_version: v1 + kind: Namespace + name: "{{ metallb_namespace }}" + state: present + +- name: Create MetalLB config base on network info + kubernetes.core.k8s: + definition: "{{ lookup('template', 'configmap.yaml.j2') | from_yaml }}" diff --git a/metal/roles/metallb_config/templates/configmap.yaml.j2 b/metal/roles/metallb_config/templates/configmap.yaml.j2 new file mode 100644 index 00000000..7aa186c5 --- /dev/null +++ b/metal/roles/metallb_config/templates/configmap.yaml.j2 @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: metallb-config + namespace: {{ metallb_namespace }} +data: + config: | + address-pools: + - name: default + protocol: layer2 + addresses: + - {{ metallb_addresses }} diff --git a/system/metallb-system/values.yaml b/system/metallb-system/values.yaml index d51501c5..468a8567 100644 --- a/system/metallb-system/values.yaml +++ b/system/metallb-system/values.yaml @@ -1,8 +1,2 @@ metallb: - configInline: - address-pools: - - name: default - protocol: layer2 - addresses: - # TODO (optimize) Use metal values for MetalLB values - - 192.168.1.150-192.168.1.180 + existingConfigMap: metallb-config