blob: 08d7be24c24076ea052374c17e07078094e562b8 [file] [log] [blame]
giolekva56c15692021-10-20 11:44:54 +04001package main
2
3import (
4 "context"
5 "flag"
6 "io/ioutil"
7 "path"
8
9 v1 "k8s.io/api/core/v1"
10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11 "k8s.io/client-go/kubernetes"
12 "k8s.io/client-go/rest"
giolekva95340e82021-11-08 21:36:55 +040013
14 "github.com/miracl/conflate"
giolekva56c15692021-10-20 11:44:54 +040015)
16
17var configFile = flag.String("config", "", "Path to the homeserver.yaml config file.")
giolekva95340e82021-11-08 21:36:55 +040018var configToMerge = flag.String("config-to-merge", "", "Name of the configmap to merge with generated one.")
19var toMergeFilename = flag.String("to-merge-filename", "", "Name of the file from config to merge.")
giolekva56c15692021-10-20 11:44:54 +040020var namespace = flag.String("namespace", "", "Namespace name.")
21var configMapName = flag.String("config-map-name", "", "Name of the ConfigMap to create.")
22
23func createClient() *kubernetes.Clientset {
24 config, err := rest.InClusterConfig()
25 if err != nil {
26 panic(err.Error())
27 }
28 cs, err := kubernetes.NewForConfig(config)
29 if err != nil {
30 panic(err.Error())
31 }
32 return cs
33}
34
giolekva95340e82021-11-08 21:36:55 +040035func createConfig(data []byte) *v1.ConfigMap {
giolekva56c15692021-10-20 11:44:54 +040036 return &v1.ConfigMap{
37 TypeMeta: metav1.TypeMeta{
38 Kind: "ConfigMap",
39 APIVersion: "v1",
40 },
41 ObjectMeta: metav1.ObjectMeta{
42 Name: *configMapName,
43 },
44 Data: map[string]string{
giolekva95340e82021-11-08 21:36:55 +040045 path.Base(*configFile): string(data),
giolekva56c15692021-10-20 11:44:54 +040046 },
47 }
48}
49
50func main() {
51 flag.Parse()
giolekva56c15692021-10-20 11:44:54 +040052 client := createClient().CoreV1().ConfigMaps(*namespace)
giolekva95340e82021-11-08 21:36:55 +040053 conf := conflate.New()
54 generated, err := ioutil.ReadFile(*configFile)
giolekva56c15692021-10-20 11:44:54 +040055 if err != nil {
56 panic(err)
57 }
giolekva95340e82021-11-08 21:36:55 +040058 if err := conf.AddData(generated); err != nil {
59 panic(err)
60 }
61 toMerge, err := client.Get(context.TODO(), *configToMerge, metav1.GetOptions{})
62 if err != nil {
63 panic(err)
64 }
65 if err := conf.AddData([]byte(toMerge.Data[*toMergeFilename])); err != nil {
66 panic(err)
67 }
68 merged, err := conf.MarshalYAML()
69 if err != nil {
70 panic(err)
71 }
72 config := createConfig(merged)
73 if _, err := client.Create(context.TODO(), config, metav1.CreateOptions{}); err != nil {
74 panic(err)
75 }
giolekva56c15692021-10-20 11:44:54 +040076}