Merge "games/factorio: set default storage to waw-hdd-redundant-3"
diff --git a/games/factorio/kube/prod.jsonnet b/games/factorio/kube/prod.jsonnet
index eb200c9..181c206 100644
--- a/games/factorio/kube/prod.jsonnet
+++ b/games/factorio/kube/prod.jsonnet
@@ -1,4 +1,5 @@
 local factorio = import "factorio.libsonnet";
+local proxy = import "proxy.libsonnet";
 local kube = import "../../../kube/kube.libsonnet";
 
 // This deploys factorio instances and the modproxy in the `factorio`
@@ -12,74 +13,21 @@
 {
     local prod = self,
 
-    proxyImage:: "registry.k0.hswaw.net/games/factorio/modproxy:1589157915-eafe7be328477e8a6590c4210466ef12901f1b9a",
-
     namespace: kube.Namespace("factorio"),
+
+    // instance makes a factorio server with a given name and at a
+    // given tag/version.
     instance(name, tag):: factorio {
         cfg+: {
             namespace: "factorio",
             prefix: name + "-",
             tag: tag,
-            proxyImage: prod.proxyImage,
         }
     },
 
-    proxy: {
-        pvc: kube.PersistentVolumeClaim("proxy-cas") {
-            metadata+: {
-                namespace: "factorio",
-            },
-            spec+: {
-                storageClassName: "waw-hdd-redundant-3",
-                accessModes: [ "ReadWriteOnce" ],
-                resources: {
-                    requests: {
-                        storage: "32Gi",
-                    },
-                },
-            },
-        },
-        deploy: kube.Deployment("proxy") {
-            metadata+: {
-                namespace: "factorio",
-            },
-            spec+: {
-                template+: {
-                    spec+: {
-                        volumes_: {
-                            cas: kube.PersistentVolumeClaimVolume(prod.proxy.pvc),
-                        },
-                        containers_: {
-                            proxy: kube.Container("proxy") {
-                                image:prod.proxyImage,
-                                command: [
-                                    "/games/factorio/modproxy/modproxy",
-                                    "-hspki_disable",
-                                    "-cas_directory", "/mnt/cas",
-                                    "-listen_address", "0.0.0.0:4200",
-                                ],
-                                volumeMounts_: {
-                                    cas: { mountPath: "/mnt/cas" },
-                                },
-                                ports_: {
-                                    client: { containerPort: 4200 },
-                                },
-                            },
-                        },
-                    },
-                },
-            },
-        },
-        svc: kube.Service("proxy") {
-            metadata+: {
-                namespace: "factorio",
-            },
-            target_pod:: prod.proxy.deploy.spec.template,
-            spec+: {
-                ports: [
-                    { name: "client", port: 4200, targetPort: 4200, protocol: "TCP" },
-                ],
-            },
+    proxy: proxy {
+        cfg+: {
+            namespace: "factorio",
         },
     },
 
diff --git a/games/factorio/kube/proxy.libsonnet b/games/factorio/kube/proxy.libsonnet
new file mode 100644
index 0000000..514281a
--- /dev/null
+++ b/games/factorio/kube/proxy.libsonnet
@@ -0,0 +1,68 @@
+local kube = import "../../../kube/kube.libsonnet";
+
+{
+    local proxy = self,
+    local cfg = proxy.cfg,
+
+    cfg:: {
+        image:: "registry.k0.hswaw.net/games/factorio/modproxy:1589157915-eafe7be328477e8a6590c4210466ef12901f1b9a",
+        namespace: error "namespace must be set",
+    },
+
+    pvc: kube.PersistentVolumeClaim("proxy-cas") {
+        metadata+: {
+            namespace: cfg.namespace,
+        },
+        spec+: {
+            storageClassName: "waw-hdd-redundant-3",
+            accessModes: [ "ReadWriteOnce" ],
+            resources: {
+                requests: {
+                    storage: "32Gi",
+                },
+            },
+        },
+    },
+    deploy: kube.Deployment("proxy") {
+        metadata+: {
+            namespace: "factorio",
+        },
+        spec+: {
+            template+: {
+                spec+: {
+                    volumes_: {
+                        cas: kube.PersistentVolumeClaimVolume(proxy.pvc),
+                    },
+                    containers_: {
+                        proxy: kube.Container("proxy") {
+                            image: cfg.image,
+                            command: [
+                                "/games/factorio/modproxy/modproxy",
+                                "-hspki_disable",
+                                "-cas_directory", "/mnt/cas",
+                                "-listen_address", "0.0.0.0:4200",
+                            ],
+                            volumeMounts_: {
+                                cas: { mountPath: "/mnt/cas" },
+                            },
+                            ports_: {
+                                client: { containerPort: 4200 },
+                            },
+                        },
+                    },
+                },
+            },
+        },
+    },
+    svc: kube.Service("proxy") {
+        metadata+: {
+            namespace: "factorio",
+        },
+        target_pod:: proxy.deploy.spec.template,
+        spec+: {
+            ports: [
+                { name: "client", port: 4200, targetPort: 4200, protocol: "TCP" },
+            ],
+        },
+    },
+}