chart: metallb-ipaddresspool
diff --git a/charts/metallb-ipaddresspool/.helmignore b/charts/metallb-ipaddresspool/.helmignore
new file mode 100644
index 0000000..0e8a0eb
--- /dev/null
+++ b/charts/metallb-ipaddresspool/.helmignore
@@ -0,0 +1,23 @@
+# Patterns to ignore when building packages.
+# This supports shell glob matching, relative path matching, and
+# negation (prefixed with !). Only one pattern per line.
+.DS_Store
+# Common VCS dirs
+.git/
+.gitignore
+.bzr/
+.bzrignore
+.hg/
+.hgignore
+.svn/
+# Common backup files
+*.swp
+*.bak
+*.tmp
+*.orig
+*~
+# Various IDEs
+.project
+.idea/
+*.tmproj
+.vscode/
diff --git a/charts/metallb-ipaddresspool/Chart.yaml b/charts/metallb-ipaddresspool/Chart.yaml
new file mode 100644
index 0000000..6c585c0
--- /dev/null
+++ b/charts/metallb-ipaddresspool/Chart.yaml
@@ -0,0 +1,6 @@
+apiVersion: v2
+name: metallb-ipaddresspool
+description: A Helm chart to configure Metallb IPAddressPool
+type: application
+version: 0.0.1
+appVersion: "0.0.1"
diff --git a/charts/metallb-ipaddresspool/templates/ip-address-pool.yaml b/charts/metallb-ipaddresspool/templates/ip-address-pool.yaml
new file mode 100644
index 0000000..6195194
--- /dev/null
+++ b/charts/metallb-ipaddresspool/templates/ip-address-pool.yaml
@@ -0,0 +1,18 @@
+apiVersion: metallb.io/v1beta1
+kind: IPAddressPool
+metadata:
+ name: {{ .Values.name }}
+ namespace: {{ .Release.Namespace }}
+spec:
+ autoAssign: {{ .Values.autoAssign }}
+ addresses:
+ - {{ .Values.from }}-{{ .Values.to }}
+---
+apiVersion: metallb.io/v1beta1
+kind: L2Advertisement
+metadata:
+ name: {{ .Values.name }}
+ namespace: {{ .Release.Namespace }}
+spec:
+ ipAddressPools:
+ - {{ .Values.name }}
diff --git a/charts/metallb-ipaddresspool/values.yaml b/charts/metallb-ipaddresspool/values.yaml
new file mode 100644
index 0000000..6e46b46
--- /dev/null
+++ b/charts/metallb-ipaddresspool/values.yaml
@@ -0,0 +1,4 @@
+name: foo
+autoAssign: false
+from: 10.1.0.10
+to: 10.1.0.255
diff --git a/core/installer/app.go b/core/installer/app.go
index c139071..774bea8 100644
--- a/core/installer/app.go
+++ b/core/installer/app.go
@@ -90,6 +90,7 @@
CreateAppHeadscale(valuesTmpls, tmpls),
CreateAppTailscaleProxy(valuesTmpls, tmpls),
CreateMetallbConfigEnv(valuesTmpls, tmpls),
+ CreateMetallbIPAddressPool(valuesTmpls, tmpls),
CreateEnvManager(valuesTmpls, tmpls),
CreateWelcome(valuesTmpls, tmpls),
CreateAppManager(valuesTmpls, tmpls),
@@ -400,6 +401,22 @@
}
}
+func CreateMetallbIPAddressPool(fs embed.FS, tmpls *template.Template) App {
+ schema, err := fs.ReadFile("values-tmpl/metallb-ipaddresspool.jsonschema")
+ if err != nil {
+ panic(err)
+ }
+ return App{
+ "metallb-ipaddresspool",
+ []string{"metallb-ipaddresspool"},
+ []*template.Template{
+ tmpls.Lookup("metallb-ipaddresspool.yaml"),
+ },
+ string(schema),
+ tmpls.Lookup("metallb-ipaddresspool.md"),
+ }
+}
+
func CreateEnvManager(fs embed.FS, tmpls *template.Template) App {
schema, err := fs.ReadFile("values-tmpl/env-manager.jsonschema")
if err != nil {
diff --git a/core/installer/values-tmpl/metallb-ipaddresspool.jsonschema b/core/installer/values-tmpl/metallb-ipaddresspool.jsonschema
new file mode 100644
index 0000000..479ef98
--- /dev/null
+++ b/core/installer/values-tmpl/metallb-ipaddresspool.jsonschema
@@ -0,0 +1,10 @@
+{
+ "type": "object",
+ "properties": {
+ "Name": { "type": "string" },
+ "From": { "type": "string" },
+ "To": { "type": "string" },
+ "AutoAssign": { "type": "boolean" }
+ },
+ "additionalProperties": false
+}
diff --git a/core/installer/values-tmpl/metallb-ipaddresspool.md b/core/installer/values-tmpl/metallb-ipaddresspool.md
new file mode 100644
index 0000000..e0ba8e6
--- /dev/null
+++ b/core/installer/values-tmpl/metallb-ipaddresspool.md
@@ -0,0 +1 @@
+Metallb IPAddressPool
diff --git a/core/installer/values-tmpl/metallb-ipaddresspool.yaml b/core/installer/values-tmpl/metallb-ipaddresspool.yaml
new file mode 100644
index 0000000..4eeacc9
--- /dev/null
+++ b/core/installer/values-tmpl/metallb-ipaddresspool.yaml
@@ -0,0 +1,19 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+ name: metallb-ipaddresspool-{{ .Values.Name }}
+ namespace: {{ .Release.Namespace }}
+spec:
+ chart:
+ spec:
+ chart: charts/metallb-ipaddresspool
+ sourceRef:
+ kind: GitRepository
+ name: pcloud
+ namespace: {{ .Global.Id }}
+ interval: 10m0s
+ values:
+ name: {{ .Values.Name }}
+ from: {{ .Values.From }}
+ to: {{ .Values.To }}
+ autoAssign: {{ .Values.AutoAssign }}