diff --git a/docker/docker.go b/docker/docker.go index 452b166..fa9b452 100644 --- a/docker/docker.go +++ b/docker/docker.go @@ -31,6 +31,7 @@ type aService struct{ ServiceId string `json:"serviceId"`; VolumeNames []string `json:"volumeNames"`; Node string `json:"node"`; + Dependents []string `json:"dependents"`; } func Run(Config cfg.Config){ @@ -159,6 +160,12 @@ func listServices(w http.ResponseWriter, r *http.Request){ continue; } + if !contains(validNodeHostnames, settings["blazena.node"]) { + errMsg := "Node with hostname:'"+ settings["blazena.node"] +"' does not exist."; + slog.Warn("Invalid Service Config!", slog.String("serviceId", service.ID), slog.String("errMessage", errMsg)); + continue SERVICES; + } + targetVolumes := strings.Split(settings["blazena.volumes"], ","); var validVolumeNames []string; @@ -169,12 +176,6 @@ func listServices(w http.ResponseWriter, r *http.Request){ validVolumeNames = append(validVolumeNames, mnt.Source); } - if !contains(validNodeHostnames, settings["blazena.node"]) { - errMsg := "Node with hostname:'"+ settings["blazena.node"] +"' does not exist."; - slog.Warn("Invalid Service Config!", slog.String("serviceId", service.ID), slog.String("errMessage", errMsg)); - continue SERVICES; - } - for _, volume := range targetVolumes{ if contains(validVolumeNames, volume){ continue; @@ -185,10 +186,36 @@ func listServices(w http.ResponseWriter, r *http.Request){ continue SERVICES; } + + var dependents []string; + + if(settings["blazena.dependents"] != ""){ + dependents = strings.Split(settings["blazena.dependents"], ","); + } else { + dependents = make([]string, 0); + } + + var validDependents []string; + for _, x := range list{ + validDependents = append(validDependents, x.Spec.Name); + } + + slog.Debug("validDependents", slog.Any("value", validDependents)); + slog.Debug("dependents", slog.Any("value", dependents)); + + for _, dependent := range dependents { + if contains(validDependents, dependent){continue;} + + errMsg := "Dependent named '"+ dependent +"' was not found in this cluster!"; + slog.Warn("Invalid Service Config!", slog.String("serviceId", service.ID), slog.String("errMessage", errMsg)); + continue SERVICES; + } + services = append(services, aService{ ServiceId: service.ID, VolumeNames: targetVolumes, Node: settings["blazena.node"], + Dependents: dependents, }); } diff --git a/host/host.go b/host/host.go index 35a71e9..1a480eb 100644 --- a/host/host.go +++ b/host/host.go @@ -25,6 +25,7 @@ type aService struct{ ServiceId string `json:"serviceId"`; VolumeNames []string `json:"volumeNames"`; Node string `json:"node"`; + Dependents []string `json:"dependents"`; } func Run(Config cfg.Config) { @@ -46,6 +47,12 @@ func Run(Config cfg.Config) { for _, service := range services { + for _, dependent := range service.Dependents { + slog.Info("Scaling Down Dependent", slog.String("serviceId", service.ServiceId), slog.String("dependentId", dependent)); + scale(Config, dependent, false); + slog.Info("Done"); + } + slog.Info("Scaling Down", slog.String("serviceId", service.ServiceId)); scale(Config, service.ServiceId, false); slog.Info("Done"); @@ -89,9 +96,16 @@ func Run(Config cfg.Config) { cleanupService(Config, service); slog.Info("Done!"); } + slog.Info("Scaling Up", slog.String("serviceId", service.ServiceId)); scale(Config, service.ServiceId, true); slog.Info("Done!"); + + for _, dependent := range service.Dependents { + slog.Info("Scaling Up Dependent", slog.String("serviceId", service.ServiceId), slog.String("dependentId", dependent)); + scale(Config, dependent, true); + slog.Info("Done"); + } } DockerClient.ContainerRemove(context.Background(), Config.Constants.StorageContainerName, container.RemoveOptions{ @@ -127,6 +141,7 @@ func getServices(Config cfg.Config)[]aService{ if err != nil { panic("Failed to unmarshal response."); } + slog.Debug("Services", slog.Any("value", services)); return services; }