Installer: configure cert-manager(-webhook-gandi), kubed as part of infrastructure
diff --git a/helmfile/base/helmfile.yaml b/helmfile/base/helmfile.yaml
index d9da8e9..1a053d4 100644
--- a/helmfile/base/helmfile.yaml
+++ b/helmfile/base/helmfile.yaml
@@ -1,37 +1,109 @@
 repositories:
+- name: appscode
+  url: https://charts.appscode.com/stable/
 - name: ingress-nginx
   url: https://kubernetes.github.io/ingress-nginx
+- name: jetstack
+  url: https://charts.jetstack.io
+- name: bwolf
+  url: https://bwolf.github.io/cert-manager-webhook-gandi
 
 helmDefaults:
   tillerless: true
+  waitForJobs: false
+  createNamespace: true
 
 releases:
-- name: ingress-public
-  chart: ingress-nginx/ingress-nginx
-  version: 4.0.3
-  namespace: {{ .Values.id }}-ingress-public
-  createNamespace: true
+- name: kubed
+  chart: appscode/kubed
+  version: v0.12.0
+  namespace: {{ .Values.name }}-kubed
   values:
-  - fullnameOverride: {{ .Values.id }}-ingress-public
-  - controller:
-      service:
-        type: LoadBalancer
-      ingressClassByName: true
-      ingressClassResource:
-        name: {{ .Values.id }}-ingress-public
-        enabled: true
-        default: false
-        controllerValue: k8s.io/{{ .Values.id }}-ingress-public
-      config:
-        proxy-body-size: 100M
-      tcp:
-      - 25: {{ .Values.id }}-app-maddy/maddy:25
-      - 143: {{ .Values.id }}-app-maddy/maddy:143
-      - 993: {{ .Values.id }}-app-maddy/maddy:993
-      - 587: {{ .Values.id }}-app-maddy/maddy:587
-      - 465: {{ .Values.id }}-app-maddy/maddy:465
+  - enableAnalytics: false
+  - fullnameOverride: {{ .Values.name }}-kubed
+  - operator:
+      registry: appscode
+      repository: kubed
+      tag: v0.12.0
+  - criticalAddon: true
+  - config:
+      clusterName: {{ .Values.name }}
+- name: cert-manager
+  chart: jetstack/cert-manager
+  version: v1.6
+  namespace: {{ .Values.name }}-cert-manager
+  values:
+  - installCRDs: true
+  - fullnameOverride: {{ .Values.name}}-cert-manager
+  - image:
+      tag: v1.6.1
+      pullPolicy: IfNotPresent
+  - resources:
+      requests:
+        cpu: "100m"
+        memory: "50M"
+      limits:
+        cpu: "250m"
+        memory: "150M"
+  - tolerations:
+    - key: "pcloud"
+      operator: "Equal"
+      value: "role"
+      effect: "NoSchedule"
+  - cainjector:
+      resources:
+        requests:
+          cpu: "100m"
+          memory: "50M"
+        limits:
+          cpu: "250m"
+          memory: "150M"
+      tolerations:
+      - key: "pcloud"
+        operator: "Equal"
+        value: "role"
+        effect: "NoSchedule"
+  - webhook:
+      resources:
+        requests:
+          cpu: "100m"
+          memory: "50M"
+        limits:
+          cpu: "250m"
+          memory: "150M"
+      tolerations:
+      - key: "pcloud"
+        operator: "Equal"
+        value: "role"
+        effect: "NoSchedule"
+- name: cert-manager-gandi
+  chart: bwolf/cert-manager-webhook-gandi
+  version: v0.2.0
+  namespace: {{ .Values.name }}-cert-manager
+  values:
+  - certManager:
+      namespace: {{ .Values.name }}-cert-manager
+      serviceAccountName: {{ .Values.name }}-cert-manager
+  - fullnameOverride: {{ .Values.name }}-cert-manager-webhook-gandi
+  - image:
+      repository: giolekva/cert-manager-webhook-gandi
+      tag: v0.2.0
+      pullPolicy: IfNotPresent
+  - logLevel: 2
+  - resources:
+      requests:
+        cpu: "100m"
+        memory: "50M"
+      limits:
+        cpu: "250m"
+        memory: "150M"
+  - tolerations:
+    - key: "pcloud"
+      operator: "Equal"
+      value: "role"
+      effect: "NoSchedule"
 
 environments:
-  shveli:
+  prod:
     values:
-      - id: shveli
+      - name: pcloud
diff --git a/helmfile/users/helmfile.yaml b/helmfile/users/helmfile.yaml
index 4902095..aad46b7 100644
--- a/helmfile/users/helmfile.yaml
+++ b/helmfile/users/helmfile.yaml
@@ -7,12 +7,25 @@
 helmDefaults:
   tillerless: true
   waitForJobs: false
+  createNamespace: false
 
 releases:
+- name: namespaces
+  chart: ../../charts/namespaces
+  namespace: {{ .Values.id }}
+  createNamespace: true
+  values:
+  - pcloudInstanceId: {{ .Values.id }}
+  - namespaces:
+      - app-maddy
+      - app-matrix
+      - app-pihole
+      - app-vaultwarden
+      - core-auth
+      - ingress-private
 - name: vpn-mesh-config
   chart: ../../charts/vpn-mesh-config
   namespace: {{ .Values.id }}-ingress-private
-  createNamespace: true
   values:
   - certificateAuthority:
       name: {{ .Values.id }}
@@ -25,7 +38,6 @@
   chart: ingress-nginx/ingress-nginx
   version: 4.0.3
   namespace: {{ .Values.id }}-ingress-private
-  createNamespace: true
   values:
   - fullnameOverride: {{ .Values.id }}-nginx-private
   - controller:
@@ -81,11 +93,11 @@
 - name: certificate-issuer
   chart: ../../charts/certificate-issuer
   namespace: {{ .Values.id }}-ingress-private
-  createNamespace: true
   values:
+  - pcloudInstanceId: {{ .Values.id }}
   - certManager:
-      namespace: cert-manager
-      gandiWebhookSecretReader: cert-manager-webhook-gandi
+      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
@@ -104,7 +116,6 @@
   chart: bitnami/postgresql
   version: 10.13.5
   namespace: {{ .Values.id }}-core-auth
-  createNamespace: true
   values:
   - fullnameOverride: postgres
   - image:
@@ -129,7 +140,6 @@
 - name: core-auth
   chart: ../../charts/auth
   namespace: {{ .Values.id }}-core-auth
-  createNamespace: true
   values:
   - kratos:
       fullnameOverride: kratos
@@ -168,14 +178,14 @@
             paths:
             - path: /
               pathType: Prefix
-          # annotations:
-          #   cert-manager.io/cluster-issuer: "{{ .Values.id }}-public"
-          #   acme.cert-manager.io/http01-edit-in-place: "true"
+          annotations:
+            cert-manager.io/cluster-issuer: "{{ .Values.id }}-public"
+            acme.cert-manager.io/http01-edit-in-place: "true"
           tls:
           - hosts:
             - accounts.{{ .Values.domain }}
-            # secretName: cert-accounts.{{ .Values.domain }}
-            secretName: cert-wildcard.{{ .Values.domain }}
+            secretName: cert-accounts.{{ .Values.domain }}
+            # secretName: cert-wildcard.{{ .Values.domain }}
       secret:
         enabled: true
       kratos:
@@ -324,14 +334,14 @@
             paths:
             - path: /
               pathType: Prefix
-          # annotations:
-          #   cert-manager.io/cluster-issuer: "{{ .Values.id }}-public"
-          #   acme.cert-manager.io/http01-edit-in-place: "true"
+          annotations:
+            cert-manager.io/cluster-issuer: "{{ .Values.id }}-public"
+            acme.cert-manager.io/http01-edit-in-place: "true"
           tls:
           - hosts:
             - hydra.{{ .Values.domain }}
-            # secretName: cert-hydra.{{ .Values.domain }}
-            secretName: cert-wildcard.{{ .Values.domain }}
+            secretName: cert-hydra.{{ .Values.domain }}
+            # secretName: cert-wildcard.{{ .Values.domain }}
       secret:
         enabled: true
       maester:
@@ -419,7 +429,6 @@
 - name: vaultwarden
   chart: ../../charts/vaultwarden
   namespace: {{ .Values.id }}-app-vaultwarden
-  createNamespace: true
   values:
   - image:
       repository: vaultwarden/server
@@ -434,7 +443,6 @@
   chart: bitnami/postgresql
   version: 10.13.5
   namespace: {{ .Values.id }}-app-matrix
-  createNamespace: true
   values:
   - fullnameOverride: postgres
   - image:
@@ -462,7 +470,6 @@
 - name: matrix
   chart: ../../charts/matrix
   namespace: {{ .Values.id }}-app-matrix
-  createNamespace: true
   values:
   - domain: {{ .Values.domain }}
   - oauth2:
@@ -485,7 +492,6 @@
 - name: pihole
   chart: ../../charts/pihole
   namespace: {{ .Values.id }}-app-pihole
-  createNamespace: true
   values:
   - domain: {{ .Values.domain }}
   - pihole:
@@ -530,7 +536,6 @@
 - name: maddy
   chart: ../../charts/maddy
   namespace: {{ .Values.id }}-app-maddy
-  createNamespace: true
   values:
   - ingress:
       private:
@@ -551,6 +556,7 @@
     secrets:
     - secrets.shveli.yaml
     values:
+    - pcloudEnvName: pcloud
     - id: shveli
     - domain: shve.li
     - contactEmail: giolekva@gmail.com