simplified parsing & getting annotations from kubernetes svc resource

This commit is contained in:
2025-01-18 12:11:06 +01:00
parent ad64b7728b
commit 489e7df9ea
3 changed files with 30 additions and 60 deletions

View File

@@ -1,17 +1,24 @@
package converter package converter
func DeploymentToKubernetes (filePath string) (*v1.Deployment, error) { import (
file, err := os.Open(filePath) "errors"
if err != nil { v1 "k8s.io/api/core/v1"
return nil, err "k8s.io/client-go/kubernetes/scheme"
} "os"
defer file.Close() )
var cfg v1.Deployment // NOTE this is really not used, just wanted to convert
decoder := yaml.NewDecoder(file) // to a kubernetes resource to our packets for practice.
if err := decoder.Decode(&cfg); err != nil { func ServiceToKubernetes(filePath string) (*v1.Service, error) {
return nil, err 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")
} }

View File

@@ -1,43 +1,15 @@
package generator package generator
import ( import (
"fmt"
"os"
"github.com/kevinmidboe/traefik-etcd-advertiser/client/etcd" "github.com/kevinmidboe/traefik-etcd-advertiser/client/etcd"
"gopkg.in/yaml.v3" "k8s.io/api/core/v1"
"k8s.io/api/apps/v1"
) )
func createPacket3(config *v1.Deployment) []etcd.EtcdPacket { func KubernetesToEtcd(config *v1.Service, packetList *[]etcd.EtcdPacket) {
blocks := []etcd.EtcdPacket{} for key, val := range config.ObjectMeta.Annotations {
*packetList = append(*packetList, etcd.EtcdPacket{
fmt.Println("DockerToEtcd") Key: key,
fmt.Println("kube") Value: val,
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
} }
defer file.Close()
var cfg v1.Deployment
decoder := yaml.NewDecoder(file)
if err := decoder.Decode(&cfg); err != nil {
return nil, err
}
return &cfg, nil
} }

19
main.go
View File

@@ -1,11 +1,8 @@
package main package main
import ( import (
"fmt"
"log" "log"
"os"
"strings" "strings"
"github.com/davecgh/go-spew/spew"
"github.com/kevinmidboe/traefik-etcd-advertiser/client/etcd" "github.com/kevinmidboe/traefik-etcd-advertiser/client/etcd"
"github.com/kevinmidboe/traefik-etcd-advertiser/config" "github.com/kevinmidboe/traefik-etcd-advertiser/config"
@@ -22,7 +19,7 @@ func main() {
filename, publish := config.ParseCli() filename, publish := config.ParseCli()
// setup etcd client // setup etcd client
// etcdManager, err := etcd.NewClient() etcdManager, err := etcd.NewClient()
if err != nil { if err != nil {
panic(err) panic(err)
} }
@@ -38,20 +35,14 @@ func main() {
generator.DockerToEtcd(dockerConfig, &packets) generator.DockerToEtcd(dockerConfig, &packets)
} else if strings.Contains(filename, "deployment") { } else if strings.Contains(filename, "kubernetes") {
kubeConfig, err := generator.KubernetesToEtcd(filename) // build etcd packets from kubernetes service resource
kubeConfig, err := converter.ServiceToKubernetes(filename)
if err != nil { if err != nil {
log.Fatalf("Error loading traefik YAML config file: %v\n", err) log.Fatalf("Error loading traefik YAML config file: %v\n", err)
} }
fmt.Println("kube") generator.KubernetesToEtcd(kubeConfig, &packets)
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())
} else { } else {
// build etcd packets from traefik config // build etcd packets from traefik config
traefikConfig, err := converter.TraefikFromYaml(filename) traefikConfig, err := converter.TraefikFromYaml(filename)