matrix: use resource renderer
diff --git a/apps/capture-config/main.go b/apps/capture-config/main.go
new file mode 100644
index 0000000..73b94d6
--- /dev/null
+++ b/apps/capture-config/main.go
@@ -0,0 +1,79 @@
+package main
+
+import (
+ "context"
+ "flag"
+ "fmt"
+ "io/ioutil"
+ "path"
+
+ v1 "k8s.io/api/core/v1"
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+ "k8s.io/client-go/kubernetes"
+ "k8s.io/client-go/rest"
+
+ "github.com/miracl/conflate"
+)
+
+var baseFile = flag.String("base", "", "Path to the homeserver.yaml config file.")
+var mergeWith = flag.String("merge-with", "", "Name of the file from config to merge.")
+var namespace = flag.String("namespace", "", "Namespace name.")
+var configMapName = flag.String("config-map-name", "", "Name of the ConfigMap to create.")
+
+func createClient() *kubernetes.Clientset {
+ config, err := rest.InClusterConfig()
+ if err != nil {
+ panic(err.Error())
+ }
+ cs, err := kubernetes.NewForConfig(config)
+ if err != nil {
+ panic(err.Error())
+ }
+ return cs
+}
+
+func newConig(data []byte) *v1.ConfigMap {
+ return &v1.ConfigMap{
+ TypeMeta: metav1.TypeMeta{
+ Kind: "ConfigMap",
+ APIVersion: "v1",
+ },
+ ObjectMeta: metav1.ObjectMeta{
+ Name: *configMapName,
+ },
+ Data: map[string]string{
+ path.Base(*baseFile): string(data),
+ },
+ }
+}
+
+func main() {
+ flag.Parse()
+ client := createClient().CoreV1().ConfigMaps(*namespace)
+ conf := conflate.New()
+ generated, err := ioutil.ReadFile(*baseFile)
+ if err != nil {
+ panic(err)
+ }
+ fmt.Printf("--- BASE:\n%s\n", string(generated))
+ if err := conf.AddData(generated); err != nil {
+ panic(err)
+ }
+ mergeWith, err := ioutil.ReadFile(*mergeWith)
+ if err != nil {
+ panic(err)
+ }
+ fmt.Printf("--- MERGE WITH:\n%s\n", string(mergeWith))
+ if err := conf.AddData(mergeWith); err != nil {
+ panic(err)
+ }
+ merged, err := conf.MarshalYAML()
+ if err != nil {
+ panic(err)
+ }
+ fmt.Printf("--- MERGED:\n%s\n", string(merged))
+ config := newConig(merged)
+ if _, err := client.Create(context.TODO(), config, metav1.CreateOptions{}); err != nil {
+ panic(err)
+ }
+}