From 2fa68eb61f123786f7fc4a74b15307bd6f954f13 Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <janne@kuschku.de>
Date: Sat, 25 Mar 2023 14:30:22 +0100
Subject: [PATCH] feat: update powerdns chart

---
 powerdns/Chart.yaml                |   2 +-
 powerdns/templates/configmap.yaml  |   5 +-
 powerdns/templates/deployment.yaml |  19 ++++++
 powerdns/templates/secret.yaml     |   2 +
 powerdns/values.yaml               | 102 +++++++++++++++++++++++++++++
 5 files changed, 127 insertions(+), 3 deletions(-)

diff --git a/powerdns/Chart.yaml b/powerdns/Chart.yaml
index 646674c..7dd77ff 100644
--- a/powerdns/Chart.yaml
+++ b/powerdns/Chart.yaml
@@ -2,5 +2,5 @@ apiVersion: v2
 name: powerdns
 description: Helm Chart for powerdns-Core
 type: application
-version: 1.0.1
+version: 1.0.2
 appVersion: "4.7.3"
diff --git a/powerdns/templates/configmap.yaml b/powerdns/templates/configmap.yaml
index c675096..32b42ee 100644
--- a/powerdns/templates/configmap.yaml
+++ b/powerdns/templates/configmap.yaml
@@ -8,8 +8,9 @@ data:
   pdns.conf: |-
     include-dir=/etc/powerdns/pdns.d
   database.conf: |-
-    launch=lmdb
-    lmdb-filename=/data/pdns.lmdb
+    launch=gsqlite3
+    gsqlite3-dnssec
+    gsqlite3-database=/data/pdns.sqlite
   security.conf: |-
     setuid={{ .Values.securityContext.runAsUser }}
     setgid={{ .Values.securityContext.runAsGroup }}
diff --git a/powerdns/templates/deployment.yaml b/powerdns/templates/deployment.yaml
index a018895..340a612 100644
--- a/powerdns/templates/deployment.yaml
+++ b/powerdns/templates/deployment.yaml
@@ -36,6 +36,25 @@ spec:
         - name: tmp
           emptyDir:
             medium: Memory
+      initContainers:
+        - name: sqlite-init
+          securityContext:
+            {{- toYaml .Values.securityContext | nindent 12 }}
+          image: keinos/sqlite3
+          imagePullPolicy: {{ .Values.image.pullPolicy }}
+          command:
+            - "sqlite3"
+          args:
+            - "/data/pdns.sqlite"
+            - "-init"
+            - "/secret/init.sql"
+          resources:
+            {{- toYaml .Values.resources | nindent 12 }}
+          volumeMounts:
+            - mountPath: /data
+              name: data
+            - mountPath: /secret
+              name: secret
       containers:
         - name: {{ .Chart.Name }}
           securityContext:
diff --git a/powerdns/templates/secret.yaml b/powerdns/templates/secret.yaml
index 072c5fd..eb23e1f 100644
--- a/powerdns/templates/secret.yaml
+++ b/powerdns/templates/secret.yaml
@@ -10,3 +10,5 @@ stringData:
     {{ if .Values.api.enabled }}
     api-key={{ .Values.api.key }}
     {{ end }}
+  init.sql: |-
+    {{- .Values.init  | nindent 4 }}
diff --git a/powerdns/values.yaml b/powerdns/values.yaml
index 7f7d665..bcfc1e1 100644
--- a/powerdns/values.yaml
+++ b/powerdns/values.yaml
@@ -13,6 +13,108 @@ internalCidr:
   - "127.0.0.0/8"
   - "10.244.0.0/16"
 
+init: |-
+  PRAGMA foreign_keys = 1;
+  
+  CREATE TABLE IF NOT EXISTS domains
+  (
+      id              INTEGER PRIMARY KEY,
+      name            VARCHAR(255) NOT NULL COLLATE NOCASE,
+      master          VARCHAR(128)   DEFAULT NULL,
+      last_check      INTEGER        DEFAULT NULL,
+      type            VARCHAR(8)   NOT NULL,
+      notified_serial INTEGER        DEFAULT NULL,
+      account         VARCHAR(40)    DEFAULT NULL,
+      options         VARCHAR(65535) DEFAULT NULL,
+      catalog         VARCHAR(255)   DEFAULT NULL
+  );
+  
+  CREATE UNIQUE INDEX IF NOT EXISTS name_index ON domains (name);
+  CREATE INDEX IF NOT EXISTS catalog_idx ON domains (catalog);
+  
+  
+  CREATE TABLE IF NOT EXISTS records
+  (
+      id        INTEGER PRIMARY KEY,
+      domain_id INTEGER        DEFAULT NULL,
+      name      VARCHAR(255)   DEFAULT NULL,
+      type      VARCHAR(10)    DEFAULT NULL,
+      content   VARCHAR(65535) DEFAULT NULL,
+      ttl       INTEGER        DEFAULT NULL,
+      prio      INTEGER        DEFAULT NULL,
+      disabled  BOOLEAN        DEFAULT 0,
+      ordername VARCHAR(255),
+      auth      BOOL           DEFAULT 1,
+      FOREIGN KEY (domain_id) REFERENCES domains (id) ON DELETE CASCADE ON UPDATE CASCADE
+  );
+  
+  CREATE INDEX IF NOT EXISTS records_lookup_idx ON records (name, type);
+  CREATE INDEX IF NOT EXISTS records_lookup_id_idx ON records (domain_id, name, type);
+  CREATE INDEX IF NOT EXISTS records_order_idx ON records (domain_id, ordername);
+  
+  
+  CREATE TABLE IF NOT EXISTS supermasters
+  (
+      ip         VARCHAR(64)  NOT NULL,
+      nameserver VARCHAR(255) NOT NULL COLLATE NOCASE,
+      account    VARCHAR(40)  NOT NULL
+  );
+  
+  CREATE UNIQUE INDEX IF NOT EXISTS ip_nameserver_pk ON supermasters (ip, nameserver);
+  
+  
+  CREATE TABLE IF NOT EXISTS comments
+  (
+      id          INTEGER PRIMARY KEY,
+      domain_id   INTEGER        NOT NULL,
+      name        VARCHAR(255)   NOT NULL,
+      type        VARCHAR(10)    NOT NULL,
+      modified_at INT            NOT NULL,
+      account     VARCHAR(40) DEFAULT NULL,
+      comment     VARCHAR(65535) NOT NULL,
+      FOREIGN KEY (domain_id) REFERENCES domains (id) ON DELETE CASCADE ON UPDATE CASCADE
+  );
+  
+  CREATE INDEX IF NOT EXISTS comments_idx ON comments (domain_id, name, type);
+  CREATE INDEX IF NOT EXISTS comments_order_idx ON comments (domain_id, modified_at);
+  
+  
+  CREATE TABLE IF NOT EXISTS domainmetadata
+  (
+      id        INTEGER PRIMARY KEY,
+      domain_id INT NOT NULL,
+      kind      VARCHAR(32) COLLATE NOCASE,
+      content   TEXT,
+      FOREIGN KEY (domain_id) REFERENCES domains (id) ON DELETE CASCADE ON UPDATE CASCADE
+  );
+  
+  CREATE INDEX IF NOT EXISTS domainmetaidindex ON domainmetadata (domain_id);
+  
+  
+  CREATE TABLE IF NOT EXISTS cryptokeys
+  (
+      id        INTEGER PRIMARY KEY,
+      domain_id INT NOT NULL,
+      flags     INT NOT NULL,
+      active    BOOL,
+      published BOOL DEFAULT 1,
+      content   TEXT,
+      FOREIGN KEY (domain_id) REFERENCES domains (id) ON DELETE CASCADE ON UPDATE CASCADE
+  );
+  
+  CREATE INDEX IF NOT EXISTS domainidindex ON cryptokeys (domain_id);
+  
+  
+  CREATE TABLE IF NOT EXISTS tsigkeys
+  (
+      id        INTEGER PRIMARY KEY,
+      name      VARCHAR(255) COLLATE NOCASE,
+      algorithm VARCHAR(50) COLLATE NOCASE,
+      secret    VARCHAR(255)
+  );
+  
+  CREATE UNIQUE INDEX IF NOT EXISTS namealgoindex ON tsigkeys (name, algorithm);
+
 api:
   enabled: false
   key: "hunter2"
-- 
GitLab