internal/flows/install.go (125 lines of code) (raw):

package flows import ( "context" "fmt" "go.uber.org/zap" "github.com/aws/eks-hybrid/internal/aws" "github.com/aws/eks-hybrid/internal/cni" "github.com/aws/eks-hybrid/internal/containerd" "github.com/aws/eks-hybrid/internal/creds" "github.com/aws/eks-hybrid/internal/iamauthenticator" "github.com/aws/eks-hybrid/internal/iamrolesanywhere" "github.com/aws/eks-hybrid/internal/imagecredentialprovider" "github.com/aws/eks-hybrid/internal/iptables" "github.com/aws/eks-hybrid/internal/kubectl" "github.com/aws/eks-hybrid/internal/kubelet" "github.com/aws/eks-hybrid/internal/packagemanager" "github.com/aws/eks-hybrid/internal/ssm" "github.com/aws/eks-hybrid/internal/tracker" ) type Installer struct { AwsSource aws.Source ContainerdSource containerd.SourceName PackageManager *packagemanager.DistroPackageManager CredentialProvider creds.CredentialProvider SsmRegion string Tracker *tracker.Tracker Logger *zap.Logger } func (i *Installer) Run(ctx context.Context) error { var err error i.Tracker, err = tracker.GetCurrentState() if err != nil { return err } // temporary fix to re-configure package manager during upgrade which currently does full uninstall and re-install // TODO: move Configure() back to install command when upgrade flow is changed i.Logger.Info("Configuring package manager. This might take a while...") if err := i.PackageManager.Configure(ctx); err != nil { return err } if err := i.installDistroPackages(ctx); err != nil { return err } if err := i.installCredentialProcess(ctx); err != nil { return err } if err := i.installEksArtifacts(ctx); err != nil { return err } i.Logger.Info("Finishing up install...") return i.Tracker.Save() } func (i *Installer) installDistroPackages(ctx context.Context) error { i.Logger.Info("Installing containerd...") if err := containerd.Install(ctx, i.Tracker, i.PackageManager, i.ContainerdSource); err != nil { return err } i.Logger.Info("Installing iptables...") return iptables.Install(ctx, i.Tracker, i.PackageManager) } func (i *Installer) installCredentialProcess(ctx context.Context) error { switch i.CredentialProvider { case creds.IamRolesAnywhereCredentialProvider: i.Logger.Info("Installing AWS signing helper...") if err := iamrolesanywhere.Install(ctx, iamrolesanywhere.InstallOptions{ Tracker: i.Tracker, Source: i.AwsSource, Logger: i.Logger, }); err != nil { return err } case creds.SsmCredentialProvider: ssmInstaller := ssm.NewSSMInstaller(i.Logger, i.SsmRegion) i.Logger.Info("Installing SSM agent installer...") if err := ssm.Install(ctx, ssm.InstallOptions{ Tracker: i.Tracker, Source: ssmInstaller, Logger: i.Logger, Region: i.SsmRegion, }); err != nil { return err } default: return fmt.Errorf("unable to detect hybrid auth method") } return nil } func (i *Installer) installEksArtifacts(ctx context.Context) error { i.Logger.Info("Installing kubelet...") if err := kubelet.Install(ctx, kubelet.InstallOptions{ Tracker: i.Tracker, Source: i.AwsSource, Logger: i.Logger, }); err != nil { return err } i.Logger.Info("Installing kubectl...") if err := kubectl.Install(ctx, kubectl.InstallOptions{ Tracker: i.Tracker, Source: i.AwsSource, Logger: i.Logger, }); err != nil { return err } i.Logger.Info("Installing cni-plugins...") if err := cni.Install(ctx, cni.InstallOptions{ Tracker: i.Tracker, Source: i.AwsSource, Logger: i.Logger, }); err != nil { return err } i.Logger.Info("Installing image credential provider...") if err := imagecredentialprovider.Install(ctx, imagecredentialprovider.InstallOptions{ Tracker: i.Tracker, Source: i.AwsSource, Logger: i.Logger, }); err != nil { return err } i.Logger.Info("Installing IAM authenticator...") return iamauthenticator.Install(ctx, iamauthenticator.InstallOptions{ Tracker: i.Tracker, Source: i.AwsSource, Logger: i.Logger, }) }