pkg/workflows/management/create_install_eksa.go (104 lines of code) (raw):
package management
import (
"context"
"github.com/aws/eks-anywhere/pkg/cluster"
"github.com/aws/eks-anywhere/pkg/clustermarshaller"
"github.com/aws/eks-anywhere/pkg/logger"
"github.com/aws/eks-anywhere/pkg/task"
"github.com/aws/eks-anywhere/pkg/types"
"github.com/aws/eks-anywhere/pkg/workflows"
)
type installEksaComponentsOnBootstrapTask struct{}
func (s *installEksaComponentsOnBootstrapTask) Run(ctx context.Context, commandContext *task.CommandContext) task.Task {
logger.Info("Installing EKS-A custom components on bootstrap cluster")
err := installEKSAComponents(ctx, commandContext, commandContext.BootstrapCluster)
if err != nil {
commandContext.SetError(err)
return &workflows.CollectDiagnosticsTask{}
}
return &createWorkloadClusterTask{}
}
func (s *installEksaComponentsOnBootstrapTask) Name() string {
return "eksa-components-bootstrap-install"
}
func (s *installEksaComponentsOnBootstrapTask) Restore(ctx context.Context, commandContext *task.CommandContext, completedTask *task.CompletedTask) (task.Task, error) {
return nil, nil
}
func (s *installEksaComponentsOnBootstrapTask) Checkpoint() *task.CompletedTask {
return nil
}
type installEksaComponentsOnWorkloadTask struct{}
func (s *installEksaComponentsOnWorkloadTask) Run(ctx context.Context, commandContext *task.CommandContext) task.Task {
logger.Info("Installing EKS-A custom components on the management cluster")
err := installEKSAComponents(ctx, commandContext, commandContext.WorkloadCluster)
if err != nil {
commandContext.SetError(err)
return &workflows.CollectDiagnosticsTask{}
}
commandContext.ClusterSpec.Cluster.AddManagedByCLIAnnotation()
commandContext.ClusterSpec.Cluster.SetManagementComponentsVersion(commandContext.ClusterSpec.EKSARelease.Spec.Version)
srcClient, err := commandContext.ClientFactory.BuildClientFromKubeconfig(commandContext.BootstrapCluster.KubeconfigFile)
if err != nil {
commandContext.SetError(err)
return &workflows.CollectMgmtClusterDiagnosticsTask{}
}
dstClient, err := commandContext.ClientFactory.BuildClientFromKubeconfig(commandContext.WorkloadCluster.KubeconfigFile)
if err != nil {
commandContext.SetError(err)
return &workflows.CollectMgmtClusterDiagnosticsTask{}
}
if commandContext.ClusterSpec.Cluster.Namespace != "" {
if err := workflows.CreateNamespaceIfNotPresent(ctx, commandContext.ClusterSpec.Cluster.Namespace, dstClient); err != nil {
commandContext.SetError(err)
return &workflows.CollectMgmtClusterDiagnosticsTask{}
}
}
logger.Info("Moving cluster spec to workload cluster")
if err = commandContext.ClusterMover.Move(ctx, commandContext.ClusterSpec, srcClient, dstClient); err != nil {
commandContext.SetError(err)
return &workflows.CollectMgmtClusterDiagnosticsTask{}
}
if err = commandContext.ClusterManager.ResumeEKSAControllerReconcile(ctx, commandContext.WorkloadCluster, commandContext.ClusterSpec, commandContext.Provider); err != nil {
commandContext.SetError(err)
return &workflows.CollectMgmtClusterDiagnosticsTask{}
}
datacenterConfig := commandContext.Provider.DatacenterConfig(commandContext.ClusterSpec)
machineConfigs := commandContext.Provider.MachineConfigs(commandContext.ClusterSpec)
resourcesSpec, err := clustermarshaller.MarshalClusterSpec(commandContext.ClusterSpec, datacenterConfig, machineConfigs)
if err != nil {
commandContext.SetError(err)
}
logger.V(6).Info(string(resourcesSpec))
return &installGitOpsManagerTask{}
}
func (s *installEksaComponentsOnWorkloadTask) Name() string {
return "eksa-components-workload-install"
}
func (s *installEksaComponentsOnWorkloadTask) Restore(ctx context.Context, commandContext *task.CommandContext, completedTask *task.CompletedTask) (task.Task, error) {
return nil, nil
}
func (s *installEksaComponentsOnWorkloadTask) Checkpoint() *task.CompletedTask {
return nil
}
func installEKSAComponents(ctx context.Context, commandContext *task.CommandContext, targetCluster *types.Cluster) error {
logger.Info("Installing EKS-D components")
if err := commandContext.EksdInstaller.InstallEksdCRDs(ctx, commandContext.ClusterSpec, targetCluster); err != nil {
commandContext.SetError(err)
return err
}
logger.Info("Installing EKS-A custom components (CRD and controller)")
managementComponents := cluster.ManagementComponentsFromBundles(commandContext.ClusterSpec.Bundles)
if err := commandContext.EksaInstaller.Install(ctx, logger.Get(), targetCluster, managementComponents, commandContext.ClusterSpec); err != nil {
commandContext.SetError(err)
return err
}
if err := commandContext.Provider.InstallCustomProviderComponents(ctx, targetCluster.KubeconfigFile); err != nil {
commandContext.SetError(err)
return err
}
if err := commandContext.EksdInstaller.InstallEksdManifest(ctx, commandContext.ClusterSpec, targetCluster); err != nil {
commandContext.SetError(err)
return err
}
return nil
}