internal/flows/init.go (86 lines of code) (raw):

package flows import ( "context" "go.uber.org/zap" "k8s.io/utils/strings/slices" "github.com/aws/eks-hybrid/internal/nodeprovider" ) const ( preprocessPhase = "preprocess" configPhase = "config" runPhase = "run" ) type Initer struct { NodeProvider nodeprovider.NodeProvider SkipPhases []string Logger *zap.Logger } func (i *Initer) Run(ctx context.Context) error { i.NodeProvider.PopulateNodeConfigDefaults() if err := i.NodeProvider.ValidateConfig(); err != nil { return err } i.Logger.Info("Configuring Aws...") if err := i.NodeProvider.ConfigureAws(ctx); err != nil { return err } if err := i.NodeProvider.Enrich(ctx); err != nil { return err } if err := i.NodeProvider.Validate(); err != nil { return err } aspects := i.NodeProvider.GetAspects() i.Logger.Info("Setting up system aspects...") for _, aspect := range aspects { nameField := zap.String("name", aspect.Name()) i.Logger.Info("Setting up system aspect..", nameField) if err := aspect.Setup(); err != nil { return err } i.Logger.Info("Finished setting up system aspect", nameField) } if err := initDaemons(ctx, i.NodeProvider, i.SkipPhases, i.Logger); err != nil { return err } return i.NodeProvider.Cleanup() } func initDaemons(ctx context.Context, nodeProvider nodeprovider.NodeProvider, skipPhases []string, logger *zap.Logger) error { if !slices.Contains(skipPhases, preprocessPhase) { logger.Info("Configuring Pre-process daemons...") if err := nodeProvider.PreProcessDaemon(ctx); err != nil { return err } } daemons, err := nodeProvider.GetDaemons() if err != nil { return err } if !slices.Contains(skipPhases, configPhase) { logger.Info("Configuring daemons...") for _, daemon := range daemons { nameField := zap.String("name", daemon.Name()) logger.Info("Configuring daemon...", nameField) if err := daemon.Configure(); err != nil { return err } logger.Info("Configured daemon", nameField) } } if !slices.Contains(skipPhases, runPhase) { for _, daemon := range daemons { nameField := zap.String("name", daemon.Name()) logger.Info("Ensuring daemon is running..", nameField) if err := daemon.EnsureRunning(ctx); err != nil { return err } logger.Info("Daemon is running", nameField) logger.Info("Running post-launch tasks..", nameField) if err := daemon.PostLaunch(); err != nil { return err } logger.Info("Finished post-launch tasks", nameField) } } return nil }