blob: 86ac22c8c1b7b11c357f869a507f0caa4718107f [file] [log] [blame]
giolekva56c15692021-10-20 11:44:54 +04001package main
2
3import (
4 "context"
5 "flag"
Giorgi Lekveishvili6d7dcb82023-12-20 14:44:42 +04006 "fmt"
giolekva56c15692021-10-20 11:44:54 +04007 "io/ioutil"
8 "path"
9
10 v1 "k8s.io/api/core/v1"
gio1afc3cd2024-10-04 19:28:15 +040011 "k8s.io/apimachinery/pkg/api/errors"
giolekva56c15692021-10-20 11:44:54 +040012 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13 "k8s.io/client-go/kubernetes"
14 "k8s.io/client-go/rest"
giolekva95340e82021-11-08 21:36:55 +040015
16 "github.com/miracl/conflate"
giolekva56c15692021-10-20 11:44:54 +040017)
18
Giorgi Lekveishvili6d7dcb82023-12-20 14:44:42 +040019var baseFile = flag.String("base", "", "Path to the homeserver.yaml config file.")
20var mergeWith = flag.String("merge-with", "", "Name of the file from config to merge.")
giolekva56c15692021-10-20 11:44:54 +040021var namespace = flag.String("namespace", "", "Namespace name.")
22var configMapName = flag.String("config-map-name", "", "Name of the ConfigMap to create.")
23
24func createClient() *kubernetes.Clientset {
25 config, err := rest.InClusterConfig()
26 if err != nil {
27 panic(err.Error())
28 }
29 cs, err := kubernetes.NewForConfig(config)
30 if err != nil {
31 panic(err.Error())
32 }
33 return cs
34}
35
Giorgi Lekveishvili6d7dcb82023-12-20 14:44:42 +040036func newConig(data []byte) *v1.ConfigMap {
giolekva56c15692021-10-20 11:44:54 +040037 return &v1.ConfigMap{
38 TypeMeta: metav1.TypeMeta{
39 Kind: "ConfigMap",
40 APIVersion: "v1",
41 },
42 ObjectMeta: metav1.ObjectMeta{
43 Name: *configMapName,
44 },
45 Data: map[string]string{
Giorgi Lekveishvili6d7dcb82023-12-20 14:44:42 +040046 path.Base(*baseFile): string(data),
giolekva56c15692021-10-20 11:44:54 +040047 },
48 }
49}
50
51func main() {
52 flag.Parse()
giolekva56c15692021-10-20 11:44:54 +040053 client := createClient().CoreV1().ConfigMaps(*namespace)
giolekva95340e82021-11-08 21:36:55 +040054 conf := conflate.New()
Giorgi Lekveishvili6d7dcb82023-12-20 14:44:42 +040055 generated, err := ioutil.ReadFile(*baseFile)
giolekva56c15692021-10-20 11:44:54 +040056 if err != nil {
57 panic(err)
58 }
Giorgi Lekveishvili6d7dcb82023-12-20 14:44:42 +040059 fmt.Printf("--- BASE:\n%s\n", string(generated))
giolekva95340e82021-11-08 21:36:55 +040060 if err := conf.AddData(generated); err != nil {
61 panic(err)
62 }
Giorgi Lekveishvili6d7dcb82023-12-20 14:44:42 +040063 mergeWith, err := ioutil.ReadFile(*mergeWith)
giolekva95340e82021-11-08 21:36:55 +040064 if err != nil {
65 panic(err)
66 }
Giorgi Lekveishvili6d7dcb82023-12-20 14:44:42 +040067 fmt.Printf("--- MERGE WITH:\n%s\n", string(mergeWith))
68 if err := conf.AddData(mergeWith); err != nil {
giolekva95340e82021-11-08 21:36:55 +040069 panic(err)
70 }
71 merged, err := conf.MarshalYAML()
72 if err != nil {
73 panic(err)
74 }
Giorgi Lekveishvili6d7dcb82023-12-20 14:44:42 +040075 fmt.Printf("--- MERGED:\n%s\n", string(merged))
76 config := newConig(merged)
gio1afc3cd2024-10-04 19:28:15 +040077 _, err = client.Create(context.TODO(), config, metav1.CreateOptions{})
78 if err == nil {
79 return
80 }
81 if !errors.IsAlreadyExists(err) {
82 panic(err)
83 }
84 _, err = client.Update(context.TODO(), config, metav1.UpdateOptions{})
85 if err != nil {
giolekva95340e82021-11-08 21:36:55 +040086 panic(err)
87 }
giolekva56c15692021-10-20 11:44:54 +040088}