From e20abddd0b698221ebbd7173bf2febbea8aa3aa3 Mon Sep 17 00:00:00 2001
From: Samuel Galson <samgalson@gmail.com>
Date: Thu, 25 Jan 2018 16:06:00 +0000
Subject: [PATCH] add per-app couchdb

---
 .gitignore                                 |  2 +
 provisioning/couchdb-ingress.yaml          | 23 +++++++
 provisioning/couchdb-service-internal.yaml | 15 +++++
 provisioning/couchdb-service.yaml          | 16 +++++
 provisioning/couchdb-statefulset.yaml      | 71 ++++++++++++++++++++++
 5 files changed, 127 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 provisioning/couchdb-ingress.yaml
 create mode 100644 provisioning/couchdb-service-internal.yaml
 create mode 100644 provisioning/couchdb-service.yaml
 create mode 100644 provisioning/couchdb-statefulset.yaml

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..90bc627
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+deployment
+.DS_Store
diff --git a/provisioning/couchdb-ingress.yaml b/provisioning/couchdb-ingress.yaml
new file mode 100644
index 0000000..fe3df6e
--- /dev/null
+++ b/provisioning/couchdb-ingress.yaml
@@ -0,0 +1,23 @@
+apiVersion: extensions/v1beta1
+kind: Ingress
+metadata:
+  name: couchdb-${CI_ENVIRONMENT_SLUG}
+  namespace: ${KUBE_NAMESPACE}
+  labels:
+    app: couchdb-${CI_ENVIRONMENT_SLUG}
+  annotations:
+    kubernetes.io/tls-acme: "true"
+    kubernetes.io/ingress.class: "nginx"
+spec:
+  tls:
+  - hosts:
+    - ${CI_ENVIRONMENT_SLUG}.gateway.xpub.semioticsquares.com 
+    secretName: couchdb-tls-${CI_ENVIRONMENT_SLUG}
+  rules:
+  - host: ${CI_ENVIRONMENT_SLUG}.gateway.xpub.semioticsquares.com 
+    http:
+      paths:
+      - path: /
+        backend:
+          serviceName: couchdb-${CI_ENVIRONMENT_SLUG} 
+          servicePort: 5984
diff --git a/provisioning/couchdb-service-internal.yaml b/provisioning/couchdb-service-internal.yaml
new file mode 100644
index 0000000..dbcd518
--- /dev/null
+++ b/provisioning/couchdb-service-internal.yaml
@@ -0,0 +1,15 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: couchdb-internal-${CI_ENVIRONMENT_SLUG}
+  namespace: ${KUBE_NAMESPACE}
+  labels:
+    app: couchdb-${CI_ENVIRONMENT_SLUG}
+spec:
+  clusterIP: None
+  ports:
+  - protocol: TCP
+    name: couchdb
+    port: 5984
+  selector:
+    app: couchdb-${CI_ENVIRONMENT_SLUG}
diff --git a/provisioning/couchdb-service.yaml b/provisioning/couchdb-service.yaml
new file mode 100644
index 0000000..c37af06
--- /dev/null
+++ b/provisioning/couchdb-service.yaml
@@ -0,0 +1,16 @@
+apiVersion: v1
+kind: Service
+metadata:
+  name: couchdb-${CI_ENVIRONMENT_SLUG}
+  namespace: ${KUBE_NAMESPACE}
+  labels:
+    app: couchdb-${CI_ENVIRONMENT_SLUG}
+spec:
+  type: ClusterIP
+  ports:
+  - protocol: TCP
+    name: couchdb
+    port: 5984
+  selector:
+    app: couchdb-${CI_ENVIRONMENT_SLUG}
+
diff --git a/provisioning/couchdb-statefulset.yaml b/provisioning/couchdb-statefulset.yaml
new file mode 100644
index 0000000..b1b06f9
--- /dev/null
+++ b/provisioning/couchdb-statefulset.yaml
@@ -0,0 +1,71 @@
+apiVersion: apps/v1beta1
+kind: StatefulSet 
+metadata:
+  name: couchdb-${CI_ENVIRONMENT_SLUG}
+  namespace: ${KUBE_NAMESPACE}
+  labels:
+    app: couchdb-${CI_ENVIRONMENT_SLUG}
+    track: stable
+spec:
+  replicas: 1
+  serviceName: couchdb-internal-${CI_ENVIRONMENT_SLUG}
+  selector:
+    matchLabels:
+      app: couchdb-${CI_ENVIRONMENT_SLUG}
+  template:
+    metadata:
+      labels:
+        app: couchdb-${CI_ENVIRONMENT_SLUG}
+    spec:
+      containers:
+      - name: couchdb
+        image: couchdb:2.1.1
+        imagePullPolicy: Always
+        ports:
+        - name: couchdb
+          containerPort: 5984
+        - name: epmd
+          containerPort: 4369
+        - containerPort: 9100
+        env:
+        - name: ERL_FLAGS
+          value: "-name couchdb -setcookie monster"
+        - name: COUCHDB_USER
+          valueFrom:
+            secretKeyRef:
+              name: couchdb
+              key: adminUsername
+        - name: COUCHDB_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: couchdb
+              key: adminPassword
+        - name: COUCHDB_SECRET
+          valueFrom:
+            secretKeyRef:
+              name: couchdb
+              key: cookieAuthSecret
+        livenessProbe:
+          httpGet:
+            path: /
+            port: 5984
+        readinessProbe:
+          httpGet:
+            path: /_up
+            port: 5984
+        volumeMounts:
+        - name: couchdb-${CI_ENVIRONMENT_SLUG}
+          mountPath: /var/lib/couchdb
+      volumes:
+        - name: couchdb-${CI_ENVIRONMENT_SLUG}
+  volumeClaimTemplates:
+    - metadata:
+        name: couchdb-${CI_ENVIRONMENT_SLUG}
+        labels:
+          app: couchdb-${CI_ENVIRONMENT_SLUG}
+      spec:
+        accessModes:
+          - ReadWriteOnce
+        resources:
+          requests:
+            storage: 5Gi
-- 
GitLab