installer cmd line tool
diff --git a/core/installer/values-tmpl/certificate-issuer.yaml b/core/installer/values-tmpl/certificate-issuer.yaml
new file mode 100644
index 0000000..46a5345
--- /dev/null
+++ b/core/installer/values-tmpl/certificate-issuer.yaml
@@ -0,0 +1,36 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: certificate-issuer
+  namespace: {{ .Values.NamespacePrefix }}ingress-private
+spec:
+  chart:
+    spec:
+      chart: charts/certificate-issuer
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Values.Id }}
+  dependsOn:
+  - name: ingress-private
+    namespace: {{ .Values.NamespacePrefix }}ingress-private
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Values.Id }}
+    certManager:
+      namespace: {{ .Values.PCloudEnvName }}-cert-manager
+      gandiWebhookSecretReader: {{ .Values.PCloudEnvName }}-cert-manager-webhook-gandi
+    public:
+      name: {{ .Values.Id }}-public
+      server: https://acme-v02.api.letsencrypt.org/directory
+      domain: {{ .Values.Domain }}
+      stagingServer: https://acme-staging-v02.api.letsencrypt.org/directory
+      contactEmail: {{ .Values.ContactEmail }}
+      ingressClass: {{ .Values.PCloudEnvName }}-ingress-public
+    private:
+      name: {{ .Values.Id }}-private
+      server: https://acme-v02.api.letsencrypt.org/directory
+      domain: p.{{ .Values.Domain }}
+      contactEmail: {{ .Values.ContactEmail }}
+      ingressClassName: {{ .Values.Id }}-ingress-private
+      gandiAPIToken: {{ .Values.GandiAPIToken }}
diff --git a/core/installer/values-tmpl/core-auth-storage.yaml b/core/installer/values-tmpl/core-auth-storage.yaml
new file mode 100644
index 0000000..f24ad4b
--- /dev/null
+++ b/core/installer/values-tmpl/core-auth-storage.yaml
@@ -0,0 +1,39 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: core-auth-storage
+  namespace: {{ .Values.NamespacePrefix }}core-auth
+spec:
+  chart:
+    spec:
+      chart: postgresql
+      version: 10.13.5
+      sourceRef:
+        kind: HelmRepository
+        name: bitnami
+        namespace: {{ .Values.Id }}
+  dependsOn:
+  - name: namespaces
+    namespace: {{ .Values.Id }}
+  interval: 1m0s
+  values:
+    fullnameOverride: postgres
+    image:
+      repository: arm64v8/postgres
+      tag: 13.4
+    service:
+      type: ClusterIP
+      port: 5432
+    postgresqlPassword: psswd
+    postgresqlDatabase: kratos
+    persistence:
+      size: 1Gi
+    securityContext:
+      enabled: true
+      fsGroup: 0
+    containerSecurityContext:
+      enabled: true
+      runAsUser: 0
+    volumePermissions:
+      securityContext:
+        runAsUser: 0
diff --git a/core/installer/values-tmpl/core-auth.yaml b/core/installer/values-tmpl/core-auth.yaml
new file mode 100644
index 0000000..eb80745
--- /dev/null
+++ b/core/installer/values-tmpl/core-auth.yaml
@@ -0,0 +1,296 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: core-auth
+  namespace: {{ .Values.NamespacePrefix }}core-auth
+spec:
+  chart:
+    spec:
+      chart: charts/auth
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Values.Id }}
+  dependsOn:
+  - name: core-auth-storage
+    namespace: {{ .Values.NamespacePrefix }}core-auth
+  interval: 1m0s
+  values:
+    kratos:
+      fullnameOverride: kratos
+      image:
+        repository: giolekva/ory-kratos
+        tag: latest
+        pullPolicy: Always
+      service:
+        admin:
+          enabled: true
+          type: ClusterIP
+          port: 80
+          name: http
+        public:
+          enabled: true
+          type: ClusterIP
+          port: 80
+          name: http
+      ingress:
+        admin:
+          enabled: true
+          className: {{ .Values.Id }}-ingress-private
+          hosts:
+          - host: kratos.p.{{ .Values.Domain }}
+            paths:
+            - path: /
+              pathType: Prefix
+          tls:
+          - hosts:
+            - kratos.p.{{ .Values.Domain }}
+        public:
+          enabled: true
+          className: {{ .Values.PCloudEnvName }}-ingress-public
+          hosts:
+          - host: accounts.{{ .Values.Domain }}
+            paths:
+            - path: /
+              pathType: Prefix
+          tls:
+          - hosts:
+            - accounts.{{ .Values.Domain }}
+            secretName: cert-accounts.{{ .Values.Domain }}
+      secret:
+        enabled: true
+      kratos:
+        autoMigrate: true
+        development: false
+        config:
+          version: v0.7.1-alpha.1
+          dsn: postgres://postgres:psswd@postgres:5432/kratos?sslmode=disable&max_conns=20&max_idle_conns=4
+          serve:
+            public:
+              base_url: https://accounts.{{ .Values.Domain }}
+              cors:
+                enabled: true
+                debug: false
+                allow_credentials: true
+                allowed_origins:
+                - https://{{ .Values.Domain }}
+                - https://*.{{ .Values.Domain }}
+            admin:
+              base_url: https://kratos.p.{{ .Values.Domain }}/
+          selfservice:
+            default_browser_return_url: https://accounts-ui.{{ .Values.Domain }}
+            whitelisted_return_urls:
+              - https://accounts-ui.{{ .Values.Domain }}
+            methods:
+              password:
+                enabled: true
+            flows:
+              error:
+                ui_url: https://accounts-ui.{{ .Values.Domain }}/error
+              settings:
+                ui_url: https://accounts-ui.{{ .Values.Domain }}/settings
+                privileged_session_max_age: 15m
+              recovery:
+                enabled: false
+              verification:
+                enabled: false
+              logout:
+                after:
+                  default_browser_return_url: https://accounts-ui.{{ .Values.Domain }}/login
+              login:
+                ui_url: https://accounts-ui.{{ .Values.Domain }}/login
+                lifespan: 10m
+                after:
+                  password:
+                    default_browser_return_url: https://accounts-ui.{{ .Values.Domain }}/
+              registration:
+                lifespan: 10m
+                ui_url: https://accounts-ui.{{ .Values.Domain }}/registration
+                after:
+                  password:
+                    hooks:
+                      -
+                        hook: session
+                    default_browser_return_url: https://accounts-ui.{{ .Values.Domain }}/
+          log:
+            level: debug
+            format: text
+            leak_sensitive_values: true
+          cookies:
+            path: /
+            same_site: None
+            domain: {{ .Values.Domain }}
+          secrets:
+            cookie:
+              - PLEASE-CHANGE-ME-I-AM-VERY-INSECURE
+            # cipher:
+            #   - 32-LONG-SECRET-NOT-SECURE-AT-ALL
+          # ciphers:
+          #   algorithm: xchacha20-poly1305
+          hashers:
+            argon2:
+              parallelism: 1
+              memory: 128MB
+              iterations: 2
+              salt_length: 16
+              key_length: 16
+          identity:
+            default_schema_url: file:///etc/config/identity.schema.json
+          courier:
+            smtp:
+              connection_uri: smtps://test-z1VmkYfYPjgdPRgPFgmeZ31esT9rUgS%40{{ .Values.Domain }}:iW%213Kk%5EPPLFrZa%24%21bbpTPN9Wv3b8mvwS6ZJvMLtce%23A2%2A4MotD@mx1.{{ .Values.Domain }}
+        identitySchemas:
+          "identity.schema.json": |
+            {
+              "$id": "https://schemas.ory.sh/presets/kratos/quickstart/email-password/identity.schema.json",
+              "$schema": "http://json-schema.org/draft-07/schema#",
+              "title": "User",
+              "type": "object",
+              "properties": {
+                "traits": {
+                  "type": "object",
+                  "properties": {
+                    "username": {
+                      "type": "string",
+                      "format": "username",
+                      "title": "Username",
+                      "minLength": 3,
+                      "ory.sh/kratos": {
+                        "credentials": {
+                          "password": {
+                            "identifier": true
+                          }
+                        }
+                      }
+                    }
+                  },
+                  "additionalProperties": false
+                }
+              }
+            }
+    hydra:
+      fullnameOverride: hydra
+      image:
+        repository: giolekva/ory-hydra
+        tag: latest
+        pullPolicy: Always
+      service:
+        admin:
+          enabled: true
+          type: ClusterIP
+          port: 80
+          name: http
+        public:
+          enabled: true
+          type: ClusterIP
+          port: 80
+          name: http
+      ingress:
+        admin:
+          enabled: true
+          className: {{ .Values.Id }}-ingress-private
+          hosts:
+          - host: hydra.p.{{ .Values.Domain }}
+            paths:
+            - path: /
+              pathType: Prefix
+          tls:
+          - hosts:
+            - hydra.p.{{ .Values.Domain }}
+        public:
+          enabled: true
+          className: {{ .Values.PCloudEnvName }}-ingress-public
+          hosts:
+          - host: hydra.{{ .Values.Domain }}
+            paths:
+            - path: /
+              pathType: Prefix
+          tls:
+          - hosts:
+            - hydra.{{ .Values.Domain }}
+            secretName: cert-hydra.{{ .Values.Domain }}
+      secret:
+        enabled: true
+      maester:
+        enabled: false
+        hydraFullnameOverride: hydra
+      hydra-maester:
+        fullnameOverride: {{ .Values.Id }}-hydra-maester
+        image:
+          repository: giolekva/ory-hydra-maester
+          tag: latest
+          pullPolicy: IfNotPresent
+        adminService:
+          name: hydra
+          port: 80
+      hydra:
+        autoMigrate: true
+        config:
+          version: v1.10.6
+          dsn: postgres://postgres:psswd@postgres:5432/kratos?sslmode=disable&max_conns=20&max_idle_conns=4
+          serve:
+            cookies:
+              same_site_mode: None
+            public:
+              cors:
+                enabled: true
+                debug: false
+                allow_credentials: true
+                allowed_origins:
+                  - https://{{ .Values.Domain }}
+                  - https://*.{{ .Values.Domain }}
+            admin:
+              # host: localhost
+              cors:
+                allowed_origins:
+                  - https://hydra.p.{{ .Values.Domain }}
+              tls:
+                allow_termination_from:
+                  - 0.0.0.0/0
+                  - 10.42.0.0/16
+                  - 10.43.0.0/16
+                  - {{ .Values.LighthouseMainIP }}/32
+            tls:
+              allow_termination_from:
+                - 0.0.0.0/0
+                - 10.42.0.0/16
+                - 10.43.0.0/16
+                - {{ .Values.LighthouseMainIP }}/32
+          urls:
+            self:
+              public: https://hydra.{{ .Values.Domain }}
+              issuer: https://hydra.{{ .Values.Domain }}
+            consent: https://accounts-ui.{{ .Values.Domain }}/consent
+            login: https://accounts-ui.{{ .Values.Domain }}/login
+            logout: https://accounts-ui.{{ .Values.Domain }}/logout
+          secrets:
+            system:
+              - youReallyNeedToChangeThis
+          oidc:
+            subject_identifiers:
+              supported_types:
+                - pairwise
+                - public
+              pairwise:
+                salt: youReallyNeedToChangeThis
+          log:
+            level: trace
+            leak_sensitive_values: false
+    ui:
+      certificateIssuer: {{ .Values.Id }}-public
+      ingressClassName: {{ .Values.PCloudEnvName }}-ingress-public
+      domain: {{ .Values.Domain }}
+      internalDomain: p.{{ .Values.Domain }}
+      nebula:
+        lighthouse:
+          name: ui-lighthouse
+          internalIP: {{ .Values.LighthouseMainIP }}
+          externalIP: {{ .Values.PublicIP }}
+          port: "{{ .Values.LighthouseMainPort }}"
+        node:
+          name: ui
+          ipCidr: {{ .Values.LighthouseAuthUIIP }}/24
+          secretName: node-ui-cert
+        certificateAuthority:
+          name: {{ .Values.Id }}
+          namespace: {{ .Values.NamespacePrefix }}ingress-private
diff --git a/core/installer/values-tmpl/ingress-private.yaml b/core/installer/values-tmpl/ingress-private.yaml
new file mode 100644
index 0000000..29f0d98
--- /dev/null
+++ b/core/installer/values-tmpl/ingress-private.yaml
@@ -0,0 +1,71 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: ingress-private
+  namespace: {{ .Values.NamespacePrefix }}ingress-private
+spec:
+  chart:
+    spec:
+      chart: ingress-nginx
+      version: 4.0.3
+      sourceRef:
+        kind: HelmRepository
+        name: ingress-nginx
+        namespace: {{ .Values.Id }}
+  dependsOn:
+  - name: vpn-mesh-config
+    namespace: {{ .Values.NamespacePrefix }}ingress-private
+  interval: 1m0s
+  values:
+    fullnameOverride: {{ .Values.Id }}-nginx-private
+    controller:
+      service:
+        enabled: true
+        type: ClusterIP
+      ingressClassByName: true
+      ingressClassResource:
+        name: {{ .Values.Id }}-ingress-private
+        enabled: true
+        default: false
+        controllerValue: k8s.io/{{ .Values.Id }}-ingress-private
+      extraArgs:
+        default-ssl-certificate: "{{ .Values.Id }}-ingress-private/cert-wildcard.p.{{ .Values.Domain }}"
+      extraVolumes:
+      - name: lighthouse-cert
+        secret:
+          secretName: node-lighthouse-cert
+      - name: config
+        configMap:
+          name: lighthouse-config
+      extraContainers:
+      - name: lighthouse
+        image: giolekva/nebula:latest
+        imagePullPolicy: IfNotPresent
+        securityContext:
+          privileged: true
+          capabilities:
+            add:
+            - NET_ADMIN
+        ports:
+        - name: nebula
+          containerPort: {{ .Values.LighthouseMainPort }}
+          protocol: UDP
+        command:
+        - nebula
+        - --config=/etc/nebula/config/lighthouse.yaml
+        volumeMounts:
+        - name: lighthouse-cert
+          mountPath: /etc/nebula/lighthouse
+        - name: config
+          mountPath: /etc/nebula/config
+      config:
+        bind-address: {{ .Values.LighthouseMainIP }}
+        proxy-body-size: 0
+    udp:
+      "53": "{{ .Values.NamespacePrefix }}app-pihole/pihole-dns-udp:53"
+    tcp:
+      "53": "{{ .Values.NamespacePrefix }}app-pihole/pihole-dns-tcp:53"
+      "143": "{{ .Values.NamespacePrefix }}app-maddy/maddy:143"
+      "465": "{{ .Values.NamespacePrefix }}app-maddy/maddy:465"
+      "587": "{{ .Values.NamespacePrefix }}app-maddy/maddy:587"
+      "993": "{{ .Values.NamespacePrefix }}app-maddy/maddy:993"
diff --git a/core/installer/values-tmpl/maddy.yaml b/core/installer/values-tmpl/maddy.yaml
new file mode 100644
index 0000000..3476438
--- /dev/null
+++ b/core/installer/values-tmpl/maddy.yaml
@@ -0,0 +1,31 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: maddy
+  namespace: {{ .Values.NamespacePrefix }}app-maddy
+spec:
+  chart:
+    spec:
+      chart: charts/maddy
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Values.Id }}
+  dependsOn:
+    - name: namespaces
+      namespace: {{ .Values.Id }}
+  interval: 1m0s
+  values:
+    ingress:
+      private:
+        className: {{ .Values.Id }}-ingress-private
+        domain: p.{{ .Values.Domain }}
+      public:
+        className: {{ .Values.PCloudEnvName }}-ingress-public
+        domain: {{ .Values.Domain }}
+        certificateIssuer: {{ .Values.Id }}-public
+    storage:
+      size: 100Gi
+    mailGateway:
+      mxHostname: {{ .Values.MXHostname}}
+      address: {{ .Values.MailGatewayAddress }}
diff --git a/core/installer/values-tmpl/matrix-storage.yaml b/core/installer/values-tmpl/matrix-storage.yaml
new file mode 100644
index 0000000..7c00497
--- /dev/null
+++ b/core/installer/values-tmpl/matrix-storage.yaml
@@ -0,0 +1,42 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: matrix-storage
+  namespace: {{ .Values.NamespacePrefix }}app-matrix
+spec:
+  chart:
+    spec:
+      chart: postgresql
+      version: 10.13.5
+      sourceRef:
+        kind: HelmRepository
+        name: bitnami
+        namespace: {{ .Values.Id }}
+  dependsOn:
+  - name: namespaces
+    namespace: {{ .Values.Id }}
+  interval: 1m0s
+  values:
+    fullnameOverride: postgres
+    image:
+      repository: arm64v8/postgres
+      tag: 13.4
+    service:
+      type: ClusterIP
+      port: 5432
+    postgresqlPassword: psswd
+    initdbScripts:
+      createdb.sh: |
+        #!/bin/sh
+        createdb -U postgres --encoding=UTF8 --locale=C --template=template0 --owner=postgres matrix
+    persistence:
+      size: {{ .Values.MatrixStorageSize }}
+    securityContext:
+      enabled: true
+      fsGroup: 0
+    containerSecurityContext:
+      enabled: true
+      runAsUser: 0
+    volumePermissions:
+      securityContext:
+        runAsUser: 0
diff --git a/core/installer/values-tmpl/matrix.yaml b/core/installer/values-tmpl/matrix.yaml
new file mode 100644
index 0000000..8cdefad
--- /dev/null
+++ b/core/installer/values-tmpl/matrix.yaml
@@ -0,0 +1,37 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: matrix
+  namespace: {{ .Values.NamespacePrefix }}app-matrix
+spec:
+  chart:
+    spec:
+      chart: charts/matrix
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Values.Id }}
+  dependsOn:
+  - name: matrix-storage
+    namespace: {{ .Values.NamespacePrefix }}app-matrix
+  interval: 1m0s
+  values:
+    domain: {{ .Values.Domain }}
+    oauth2:
+      hydraAdmin: http://hydra-admin.{{ .Values.NamespacePrefix}}core-auth.svc.cluster.local
+      hydraPublic: https://hydra.{{ .Values.Domain }}
+      clientId: matrix
+      clientSecret: {{ .Values.MatrixOAuth2ClientSecret }}
+      secretName: oauth2-client
+    postgresql:
+      host: postgres
+      port: 5432
+      database: matrix
+      user: postgres
+      password: psswd
+    certificateIssuer: {{ .Values.Id }}-public
+    ingressClassName: {{ .Values.PCloudEnvName }}-ingress-public
+    configMerge:
+      configName: config-to-merge
+      fileName: to-merge.yaml
+
diff --git a/core/installer/values-tmpl/namespaces.yaml b/core/installer/values-tmpl/namespaces.yaml
new file mode 100644
index 0000000..6b35e9c
--- /dev/null
+++ b/core/installer/values-tmpl/namespaces.yaml
@@ -0,0 +1,24 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: namespaces
+  namespace: {{ .Values.Id }}
+spec:
+  chart:
+    spec:
+      chart: charts/namespaces
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Values.Id }}
+  interval: 1m0s
+  values:
+    pcloudInstanceId: {{ .Values.Id }}
+    namespacePrefix: {{ .Values.NamespacePrefix }}
+    namespaces:
+    - app-maddy
+    - app-matrix
+    - app-pihole
+    - app-vaultwarden
+    - core-auth
+    - ingress-private
diff --git a/core/installer/values-tmpl/pihole.yaml b/core/installer/values-tmpl/pihole.yaml
new file mode 100644
index 0000000..6ac7d39
--- /dev/null
+++ b/core/installer/values-tmpl/pihole.yaml
@@ -0,0 +1,57 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: pihole
+  namespace: {{ .Values.NamespacePrefix }}app-pihole
+spec:
+  chart:
+    spec:
+      chart: charts/pihole
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Values.Id }}
+  dependsOn:
+    - name: namespaces
+      namespace: {{ .Values.Id }}
+  interval: 1m0s
+  values:
+    domain: pihole.p.{{ .Values.Domain }}
+    pihole:
+      image:
+        repository: "pihole/pihole"
+        tag: v5.8.1
+      persistentVolumeClaim:
+        enabled: true
+        size: 5Gi
+      adminPassword: admin
+      ingress:
+        enabled: false
+      serviceDhcp:
+        enabled: false
+      serviceDns:
+        type: ClusterIP
+      serviceWeb:
+        type: ClusterIP
+        http:
+          enabled: true
+        https:
+          enabled: false
+      virtualHost: pihole.p.{{ .Values.Domain }}
+      resources:
+        requests:
+          cpu: "250m"
+          memory: "100M"
+        limits:
+          cpu: "500m"
+          memory: "250M"
+    oauth2:
+      clientId: pihole
+      clientSecret: {{ .Values.PiholeOAuth2ClientSecret }}
+      cookieSecret: {{ .Values.PiholeOAuth2CookieSecret }}
+      secretName: oauth2-secret
+      configName: oauth2-proxy
+      hydraAdmin: http://hydra-admin.{{ .Values.NamespacePrefix}}core-auth.svc.cluster.local
+    hydraPublic: https://hydra.{{ .Values.Domain }}/
+    profileUrl: https://accounts-ui.{{ .Values.Domain }}
+    ingressClassName: {{ .Values.Id }}-ingress-private
diff --git a/core/installer/values-tmpl/vaultwarden.yaml b/core/installer/values-tmpl/vaultwarden.yaml
new file mode 100644
index 0000000..32d66e7
--- /dev/null
+++ b/core/installer/values-tmpl/vaultwarden.yaml
@@ -0,0 +1,27 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: vaultwarden
+  namespace: {{ .Values.NamespacePrefix }}app-vaultwarden
+spec:
+  chart:
+    spec:
+      chart: charts/vaultwarden
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Values.Id }}
+  dependsOn:
+    - name: namespaces
+      namespace: {{ .Values.Id }}
+  interval: 1m0s
+  values:
+    image:
+      repository: vaultwarden/server
+      tag: 1.22.2
+      pullPolicy: IfNotPresent
+    storage:
+      size: 1Gi
+    domain: bitwarden.p.{{ .Values.Domain }}
+    certificateIssuer: {{ .Values.Id }}-private
+    ingressClassName: {{ .Values.Id }}-ingress-private
diff --git a/core/installer/values-tmpl/vpn-mesh-config.yaml b/core/installer/values-tmpl/vpn-mesh-config.yaml
new file mode 100644
index 0000000..20279a4
--- /dev/null
+++ b/core/installer/values-tmpl/vpn-mesh-config.yaml
@@ -0,0 +1,28 @@
+apiVersion: helm.toolkit.fluxcd.io/v2beta1
+kind: HelmRelease
+metadata:
+  name: vpn-mesh-config
+  namespace: {{ .Values.NamespacePrefix }}ingress-private
+spec:
+  chart:
+    spec:
+      chart: charts/vpn-mesh-config
+      sourceRef:
+        kind: GitRepository
+        name: pcloud
+        namespace: {{ .Values.Id }}
+  dependsOn:
+  - name: namespaces
+    namespace: {{ .Values.Id }}
+  interval: 1m0s
+  values:
+    domain: {{ .Values.Domain }}
+    ingressClassName: {{ .Values.PCloudEnvName }}-ingress-public
+    certificateIssuer: {{ .Values.Id }}-public
+    certificateAuthority:
+      name: {{ .Values.Id }}
+      secretName: ca-{{ .Values.Id }}-cert
+    lighthouse:
+      internalIP: {{ .Values.LighthouseMainIP }}
+      externalIP: {{ .Values.PublicIP }}
+      port: "{{ .Values.LighthouseMainPort }}"