blob: 08d7be24c24076ea052374c17e07078094e562b8 [file] [log] [blame]
package main
import (
"context"
"flag"
"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 configFile = flag.String("config", "", "Path to the homeserver.yaml config file.")
var configToMerge = flag.String("config-to-merge", "", "Name of the configmap to merge with generated one.")
var toMergeFilename = flag.String("to-merge-filename", "", "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 createConfig(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(*configFile): string(data),
},
}
}
func main() {
flag.Parse()
client := createClient().CoreV1().ConfigMaps(*namespace)
conf := conflate.New()
generated, err := ioutil.ReadFile(*configFile)
if err != nil {
panic(err)
}
if err := conf.AddData(generated); err != nil {
panic(err)
}
toMerge, err := client.Get(context.TODO(), *configToMerge, metav1.GetOptions{})
if err != nil {
panic(err)
}
if err := conf.AddData([]byte(toMerge.Data[*toMergeFilename])); err != nil {
panic(err)
}
merged, err := conf.MarshalYAML()
if err != nil {
panic(err)
}
config := createConfig(merged)
if _, err := client.Create(context.TODO(), config, metav1.CreateOptions{}); err != nil {
panic(err)
}
}