From c6465ec429265e0d31ef68bfe457eefa4414e76d Mon Sep 17 00:00:00 2001 From: schulze Date: Wed, 12 Apr 2023 11:13:53 +0200 Subject: [PATCH] Revert UUID purge --- main.go | 3 +++ state/config.go | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/main.go b/main.go index f7a5ef4..73e4e72 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "fmt" "net/netip" + "github.com/google/uuid" "github.com/thefeli73/polemos/mtdaws" "github.com/thefeli73/polemos/state" ) @@ -72,7 +73,9 @@ func indexInstance(config state.Config, cloudID string, serviceIP netip.Addr) (s break; } } + u := uuid.New() newService := state.Service{ + ID: state.CustomUUID(u), CloudID: cloudID, ServiceIP: serviceIP} return newService, found diff --git a/state/config.go b/state/config.go index 628df3f..a74c59e 100644 --- a/state/config.go +++ b/state/config.go @@ -6,6 +6,7 @@ import ( "net/netip" "os" + "github.com/google/uuid" "gopkg.in/yaml.v3" ) @@ -21,6 +22,7 @@ type mtdconf struct { // Service contains all necessary information about a service to identify it in the cloud as well as configuring a proxy for it type Service struct { + ID CustomUUID `yaml:"id"` CloudID string `yaml:"cloud_id"` EntryIP netip.Addr `yaml:"entry_ip"` EntryPort uint16 `yaml:"entry_port"` @@ -28,11 +30,29 @@ type Service struct { ServicePort uint16 `yaml:"service_port"` } +// CustomUUID is an alias for uuid.UUID to enable custom unmarshal function +type CustomUUID uuid.UUID + type aws struct { Regions []string `yaml:"regions"` CredentialsPath string `yaml:"credentials_path"` } +// UnmarshalYAML parses uuid in yaml to CustomUUID type +func (u *CustomUUID) UnmarshalYAML(value *yaml.Node) error { + id, err := uuid.Parse(value.Value) + if err != nil { + return err + } + *u = CustomUUID(id) + return nil +} + +// MarshalYAML parses CustomUUID type to uuid string for yaml +func (u CustomUUID) MarshalYAML() (interface{}, error) { + return uuid.UUID(u).String(), nil +} + // LoadConf loads config from a yaml file func LoadConf(filename string) (Config) { var config Config