From 03eff229c6045c2adce33a10b84274aabfc22f88 Mon Sep 17 00:00:00 2001 From: schulze Date: Wed, 12 Apr 2023 15:31:11 +0200 Subject: [PATCH] switch from list (slice) to dict (map) --- main.go | 7 ++++++- mtdaws/mtd.go | 18 ++++++++++++++---- state/config.go | 4 ++-- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/main.go b/main.go index 73e4e72..473b76e 100644 --- a/main.go +++ b/main.go @@ -17,9 +17,14 @@ func main() { ConfigPath = "config.yaml" - config := state.LoadConf(ConfigPath) + // Initialize the config.Services map + var config state.Config + config.MTD.Services = make(map[state.CustomUUID]state.Service) + + config = state.LoadConf(ConfigPath) state.SaveConf(ConfigPath, config) + config = indexAllInstances(config) //TODO: figure out migration (MTD) diff --git a/mtdaws/mtd.go b/mtdaws/mtd.go index c307f50..e45e4ca 100644 --- a/mtdaws/mtd.go +++ b/mtdaws/mtd.go @@ -11,7 +11,17 @@ import ( // AWSMoveInstance moves a specified instance to a new availability region func AWSMoveInstance(config state.Config) (state.Config) { - instance := config.MTD.Services[0] // for testing use first instance + // pseudorandom instance from all services for testing + var serviceUUID state.CustomUUID + var instance state.Service + for key, service := range config.MTD.Services { + serviceUUID = key + instance = service + break + } + + fmt.Println("MTD move service:\t", serviceUUID) + region, instanceID := DecodeCloudID(instance.CloudID) awsConfig := NewConfig(region, config.AWS.CredentialsPath) svc := ec2.NewFromConfig(awsConfig) @@ -27,14 +37,14 @@ func AWSMoveInstance(config state.Config) (state.Config) { fmt.Println("Error creating image:\t", err) return config } - fmt.Println("Created image:\t", imageName) + fmt.Println("Created image:\t\t", imageName) err = waitForImageReady(svc, imageName, 5*time.Minute) if err != nil { fmt.Println("Error waiting for image to be ready:\t", err) return config } - fmt.Println("Image is ready:\t", imageName) + fmt.Println("Image is ready:\t\t", imageName) newInstanceID, err := launchInstance(svc, realInstance, imageName) if err != nil { @@ -48,7 +58,7 @@ func AWSMoveInstance(config state.Config) (state.Config) { fmt.Println("Error terminating instance:\t", err) return config } - fmt.Println("Terminated old instance:\t", instanceID) + fmt.Println("Killed old instance:\t", instanceID) image, err := describeImage(svc, imageName) if err != nil { diff --git a/state/config.go b/state/config.go index a74c59e..395f9a0 100644 --- a/state/config.go +++ b/state/config.go @@ -17,12 +17,12 @@ type Config struct { } type mtdconf struct { - Services []Service `yaml:"services"` + Services map[CustomUUID]Service `yaml:"services"` + } // 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"`