in cmd/eksctl-anywhere/cmd/upgradecluster.go [79:242]
func (uc *upgradeClusterOptions) upgradeCluster(cmd *cobra.Command, args []string) error {
ctx := cmd.Context()
clusterConfigFileExist := validations.FileExists(uc.fileName)
if !clusterConfigFileExist {
return fmt.Errorf("the cluster config file %s does not exist", uc.fileName)
}
clusterConfig, err := v1alpha1.GetAndValidateClusterConfig(uc.fileName)
if err != nil {
return fmt.Errorf("the cluster config file provided is invalid: %v", err)
}
if clusterConfig.Spec.DatacenterRef.Kind == v1alpha1.TinkerbellDatacenterKind {
if err := checkTinkerbellFlags(cmd.Flags(), uc.hardwareCSVPath, Upgrade); err != nil {
return err
}
}
if clusterConfig.Spec.EtcdEncryption != nil &&
clusterConfig.Spec.DatacenterRef.Kind != v1alpha1.CloudStackDatacenterKind &&
clusterConfig.Spec.DatacenterRef.Kind != v1alpha1.VSphereDatacenterKind &&
clusterConfig.Spec.DatacenterRef.Kind != v1alpha1.NutanixDatacenterKind {
return fmt.Errorf("etcdEncryption is currently not supported for the current provider: %s", clusterConfig.Spec.DatacenterRef.Kind)
}
if err := v1alpha1.ValidateEtcdEncryptionConfig(clusterConfig.Spec.EtcdEncryption); err != nil {
return err
}
if _, err := uc.commonValidations(ctx); err != nil {
return fmt.Errorf("common validations failed due to: %v", err)
}
if err := validations.ValidateClusterNameFromCommandAndConfig(args, clusterConfig.Name); err != nil {
return err
}
clusterSpec, err := newClusterSpec(uc.clusterOptions)
if err != nil {
return err
}
if err := validations.ValidateAuthenticationForRegistryMirror(clusterSpec); err != nil {
return err
}
cliConfig := buildCliConfig(clusterSpec)
dirs, err := uc.directoriesToMount(clusterSpec, cliConfig)
if err != nil {
return err
}
upgradeCLIConfig, err := buildUpgradeCliConfig(uc)
if err != nil {
return err
}
clusterManagerTimeoutOpts, err := buildClusterManagerOpts(uc.timeoutOptions, clusterSpec.Cluster.Spec.DatacenterRef.Kind)
if err != nil {
return fmt.Errorf("failed to build cluster manager opts: %v", err)
}
var skippedValidations map[string]bool
if len(uc.skipValidations) != 0 {
skippedValidations, err = validations.ValidateSkippableValidation(uc.skipValidations, upgradevalidations.SkippableValidations)
if err != nil {
return err
}
}
factory := dependencies.ForSpec(clusterSpec).WithExecutableMountDirs(dirs...).
WithBootstrapper().
WithCliConfig(cliConfig).
WithClusterManager(clusterSpec.Cluster, clusterManagerTimeoutOpts).
WithClusterApplier().
WithProvider(uc.fileName, clusterSpec.Cluster, cc.skipIpCheck, uc.hardwareCSVPath, uc.forceClean, uc.tinkerbellBootstrapIP, skippedValidations, uc.providerOptions).
WithGitOpsFlux(clusterSpec.Cluster, clusterSpec.FluxConfig, cliConfig).
WithWriter().
WithCAPIManager().
WithEksdUpgrader().
WithEksdInstaller().
WithKubectl().
WithValidatorClients().
WithPackageManagerWithoutWait(clusterSpec, "", uc.managementKubeconfig).
WithUpgradeClusterDefaulter(upgradeCLIConfig).
WithAwsIamAuth(clusterSpec.Cluster)
if uc.timeoutOptions.noTimeouts {
factory.WithNoTimeouts()
}
deps, err := factory.Build(ctx)
if err != nil {
return err
}
defer close(ctx, deps)
clusterSpec, err = deps.UpgradeClusterDefaulter.Run(ctx, clusterSpec)
if err != nil {
return err
}
workloadCluster := &types.Cluster{
Name: clusterSpec.Cluster.Name,
KubeconfigFile: getKubeconfigPath(clusterSpec.Cluster.Name, uc.wConfig),
}
var managementCluster *types.Cluster
if clusterSpec.ManagementCluster == nil {
managementCluster = workloadCluster
} else {
managementCluster = clusterSpec.ManagementCluster
}
validationOpts := &validations.Opts{
Kubectl: deps.UnAuthKubectlClient,
Spec: clusterSpec,
WorkloadCluster: workloadCluster,
ManagementCluster: managementCluster,
Provider: deps.Provider,
CliConfig: cliConfig,
SkippedValidations: skippedValidations,
KubeClient: deps.UnAuthKubeClient.KubeconfigClient(managementCluster.KubeconfigFile),
ManifestReader: deps.ManifestReader,
BundlesOverride: uc.bundlesOverride,
}
upgradeValidations := upgradevalidations.New(validationOpts)
if clusterConfig.IsSelfManaged() {
upgrade := management.NewUpgrade(
deps.UnAuthKubeClient,
deps.Provider,
deps.CAPIManager,
deps.ClusterManager,
deps.GitOpsFlux,
deps.Writer,
deps.EksdUpgrader,
deps.EksdInstaller,
deps.ClusterApplier,
deps.PackageManager,
deps.AwsIamAuth,
)
err = upgrade.Run(ctx, clusterSpec, managementCluster, upgradeValidations)
} else {
upgradeWorkloadCluster := workload.NewUpgrade(
deps.UnAuthKubeClient,
deps.Provider,
deps.ClusterManager,
deps.GitOpsFlux,
deps.Writer,
deps.ClusterApplier,
deps.EksdInstaller,
deps.PackageManager,
deps.AwsIamAuth,
)
err = upgradeWorkloadCluster.Run(ctx, workloadCluster, clusterSpec, upgradeValidations)
}
cleanup(deps, &err)
return err
}