diff --git a/converter/deployment.go b/converter/deployment.go index 392b3fb..ba90d86 100644 --- a/converter/deployment.go +++ b/converter/deployment.go @@ -1,17 +1,24 @@ package converter -func DeploymentToKubernetes (filePath string) (*v1.Deployment, error) { - file, err := os.Open(filePath) - if err != nil { - return nil, err - } - defer file.Close() +import ( + "errors" + v1 "k8s.io/api/core/v1" + "k8s.io/client-go/kubernetes/scheme" + "os" +) - var cfg v1.Deployment - decoder := yaml.NewDecoder(file) - if err := decoder.Decode(&cfg); err != nil { - return nil, err +// NOTE this is really not used, just wanted to convert +// to a kubernetes resource to our packets for practice. +func ServiceToKubernetes(filePath string) (*v1.Service, error) { + decode := scheme.Codecs.UniversalDeserializer().Decode + stream, _ := os.ReadFile(filePath) + // second param (gKV) is top level (GroupVersionKind) w/ group, version & kind + obj, gKV, _ := decode(stream, nil, nil) + + // handle multiple resources split by --- + if gKV.Kind == "Service" { + return obj.(*v1.Service), nil } - return &cfg, nil + return nil, errors.New("Unable to find service resource") } diff --git a/generator/kubernetes.go b/generator/kubernetes.go index fe546cd..a7c6a0d 100644 --- a/generator/kubernetes.go +++ b/generator/kubernetes.go @@ -1,43 +1,15 @@ package generator import ( - "fmt" - "os" - "github.com/kevinmidboe/traefik-etcd-advertiser/client/etcd" - "gopkg.in/yaml.v3" - "k8s.io/api/apps/v1" + "k8s.io/api/core/v1" ) -func createPacket3(config *v1.Deployment) []etcd.EtcdPacket { - blocks := []etcd.EtcdPacket{} - - fmt.Println("DockerToEtcd") - fmt.Println("kube") - fmt.Println(config.APIVersion) - fmt.Println(*kubeConfig) - - return blocks -} - -func KubernetesToEtcd(config *v1.Deployment, packetList *[]etcd.EtcdPacket) { - items := createPacket3(config) - - *packetList = append(*packetList, items...) -} - -func (filePath string) (*v1.Deployment, error) { - file, err := os.Open(filePath) - if err != nil { - return nil, err +func KubernetesToEtcd(config *v1.Service, packetList *[]etcd.EtcdPacket) { + for key, val := range config.ObjectMeta.Annotations { + *packetList = append(*packetList, etcd.EtcdPacket{ + Key: key, + Value: val, + }) } - defer file.Close() - - var cfg v1.Deployment - decoder := yaml.NewDecoder(file) - if err := decoder.Decode(&cfg); err != nil { - return nil, err - } - - return &cfg, nil } diff --git a/main.go b/main.go index caa4a36..88dce8a 100644 --- a/main.go +++ b/main.go @@ -1,11 +1,8 @@ package main import ( - "fmt" "log" - "os" "strings" - "github.com/davecgh/go-spew/spew" "github.com/kevinmidboe/traefik-etcd-advertiser/client/etcd" "github.com/kevinmidboe/traefik-etcd-advertiser/config" @@ -22,7 +19,7 @@ func main() { filename, publish := config.ParseCli() // setup etcd client - // etcdManager, err := etcd.NewClient() + etcdManager, err := etcd.NewClient() if err != nil { panic(err) } @@ -38,20 +35,14 @@ func main() { generator.DockerToEtcd(dockerConfig, &packets) - } else if strings.Contains(filename, "deployment") { - kubeConfig, err := generator.KubernetesToEtcd(filename) + } else if strings.Contains(filename, "kubernetes") { + // build etcd packets from kubernetes service resource + kubeConfig, err := converter.ServiceToKubernetes(filename) if err != nil { log.Fatalf("Error loading traefik YAML config file: %v\n", err) } - fmt.Println("kube") - fmt.Println(*kubeConfig) - fmt.Println(*kubeConfig.Spec.Replicas) - fmt.Printf("as: %+v\n", kubeConfig.Spec.Selector.MatchLabels["app"]) - spew.Dump(*kubeConfig.Sepc.Selector) - - fmt.Println(kubeConfig.ObjectMeta.Name) - fmt.Println(kubeConfig.GetObjectMeta()) + generator.KubernetesToEtcd(kubeConfig, &packets) } else { // build etcd packets from traefik config traefikConfig, err := converter.TraefikFromYaml(filename)