games/factorio: make more configurable

This makes the server fully configurable, and adds the contents of
example JSON configs as the defaults for all servers.

Change-Id: I8ff3e66a586a9db3acb9721810c8c5aa13072b4b
diff --git a/games/factorio/kube/factorio.libsonnet b/games/factorio/kube/factorio.libsonnet
index 57d5bf4..7d08ad7 100644
--- a/games/factorio/kube/factorio.libsonnet
+++ b/games/factorio/kube/factorio.libsonnet
@@ -17,6 +17,42 @@
         rconPort: 2137,
         rconPassword: "farts",
 
+        // Configuration options that will get serialized into
+        // --config config.ini
+        factorioConfig: {
+            // There is no documentation for this file, but you can check
+            // config.ini in any installed Factorio data directory for a
+            // sample.
+            //
+            // This uses std.manifestIni, so to create a file containing:
+            //   version=9
+            //   [other]
+            //   verbose-logging=true
+            // You would set the following:
+            // main: {
+            //   version: "9",
+            // },
+            // other: {
+            //   "verbose-logging": "true",
+            // },
+        },
+        // Configuration options that will get serialized into
+        // --server-settings server-settings.json.
+        serverSettings: (import "config/server-settings.libsonnet") {
+            visibility+: {
+              public: false,
+              lan: false,
+            },
+        },
+        // Configuration options that will get serialized into
+        // --map-settings map-settings.json.
+        mapSettings: (import "config/map-settings.libsonnet") {
+        },
+        // Configuration options that will get serialized into
+        // --map-gen-settings map-gen-settings.json.
+        mapGenSettings: (import "config/map-gen-settings.libsonnet") {
+        },
+
         tag: "latest",
         image: "registry.k0.hswaw.net/q3k/factorio:" + cfg.tag,
         resources: {
@@ -78,6 +114,9 @@
                 "mod { name: \"%s\" version: \"%s\" }" % [m.name, m.version],
                 for m in cfg.mods
             ]),
+            "server-settings.json": std.manifestJson(cfg.serverSettings),
+            "map-settings.json": std.manifestJson(cfg.mapSettings),
+            "map-gen-settings.json": std.manifestJson(cfg.mapGenSettings),
         },
     },
 
@@ -115,6 +154,9 @@
                                 "/entrypoint.sh",
                                 "--rcon-port", std.toString(cfg.rconPort),
                                 "--rcon-password", cfg.rconPassword,
+                                "--server-settings", "/factorio/config/server-settings.json",
+                                "--map-settings", "/factorio/config/map-settings.json",
+                                "--map-gen-settings", "/factorio/config/map-gen-settings.json",
                             ],
                             ports_: {
                                 client: { containerPort: 34197 },
@@ -123,6 +165,7 @@
                             volumeMounts_: {
                                 data: { mountPath: "/data" },
                                 mods: { mountPath: "/factorio/mods" },
+                                config: { mountPath: "/factorio/config" },
                             },
                             resources: cfg.resources,
                         },