bgpwtf/cccampix: add and deploy octorpki

Change-Id: I8d5de697925b65d8f0e762b2f2acad3a7e560fe6
diff --git a/bgpwtf/cccampix/kube/ix.libsonnet b/bgpwtf/cccampix/kube/ix.libsonnet
new file mode 100644
index 0000000..def1d79
--- /dev/null
+++ b/bgpwtf/cccampix/kube/ix.libsonnet
@@ -0,0 +1,84 @@
+local kube = import "../../../kube/kube.libsonnet";
+
+{
+    IX: {
+        local ix = self,
+        local cfg = ix.cfg,
+        cfg:: {
+            octorpki: {
+                image: "registry.k0.hswaw.net/q3k/octorpki:1564072856-3bfb2ef7fd180e774f74bbc9eebf6d97b9d80003",
+                storageClassName: "waw-hdd-redundant-1",
+                resources: {
+                    requests: { cpu: "100m", memory: "500Mi" },
+                    limits: { cpu: "500m", memory: "1Gi" },
+                },
+            },
+
+            appName: "ix",
+            namespace: error "namespace must be defined",
+            prefix: "",
+        },
+
+        namespace: kube.Namespace(cfg.namespace),
+        name(component):: cfg.prefix + component,
+        metadata(component):: {
+            namespace: cfg.namespace,
+            labels: {
+                "app.kubernetes.io/name": cfg.appName,
+                "app.kubernetes.io/managed-by": "kubecfg",
+                "app.kubernetes.io/component": component,
+            },
+        },
+
+        octorpki: {
+            cache: kube.PersistentVolumeClaim(ix.name("octorpki")) {
+                metadata+: ix.metadata("octorpki"),
+                spec+: {
+                    storageClassName: cfg.octorpki.storageClassName,
+                    accessModes: [ "ReadWriteOnce" ],
+                    resources: {
+                        requests: {
+                            storage: "2Gi",
+                        },
+                    },
+                },
+            },
+            deployment: kube.Deployment(ix.name("octorpki")) {
+                metadata+: ix.metadata("octorpki"),
+                spec+: {
+                    template+: {
+                        spec+: {
+                            volumes_: {
+                                cache: kube.PersistentVolumeClaimVolume(ix.octorpki.cache),
+                            },
+                            containers_: {
+                                octorpki: kube.Container(ix.name("octorpki")){
+                                    image: cfg.octorpki.image,
+                                    args: [
+                                        "/octorpki/entrypoint.sh",
+                                    ],
+                                    ports_: {
+                                        client: { containerPort: 8080 },
+                                    },
+                                    volumeMounts_: {
+                                        cache: { mountPath: "/cache" },
+                                    },
+                                    resources: cfg.octorpki.resources,
+                                },
+                            },
+                        },
+                    },
+                },
+            },
+            svc: kube.Service(ix.name("octorpki")) {
+                metadata+: ix.metadata("octorpki"),
+                target_pod:: ix.octorpki.deployment.spec.template,
+                spec+: {
+                    ports: [
+                        { name: "client", port: 8080, targetPort: 8080, protocol: "TCP" },
+                    ],
+                },
+            },
+        },
+    },
+}