diff --git a/powerdns/Chart.yaml b/powerdns/Chart.yaml index 646674c6253039797c35079300e21674c3bc4e84..7dd77ffa1be3a2914092ea6455caa2cb4e164e6b 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 c675096e0ba84761a2787e8742a753b0050268a4..32b42ee7bc284c255ef9ae15a5685915ad07e484 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 a018895a1a80e06aac472394b9d8e236aebcf362..340a6127015385d567e31d18c2f5677861463226 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 072c5fda2ea0158f631bdee35ee4e3c1e24b2a0b..eb23e1fe4f77dfe58ecbaad6ef57f1811e1f3ad4 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 7f7d665748d507188ae31ace7714abc062fdb978..bcfc1e11cff3ee97cab9057d9dce3948b227f462 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"