func NewSpecFromClusterConfig()

in pkg/cluster/spec.go [172:254]


func NewSpecFromClusterConfig(clusterConfigPath string, cliVersion version.Info, opts ...SpecOpt) (*Spec, error) {
	s := newWithCliVersion(cliVersion, opts...)

	clusterConfig, err := eksav1alpha1.GetClusterConfig(clusterConfigPath)
	if err != nil {
		return nil, err
	}

	bundles, err := s.GetBundles(cliVersion)
	if err != nil {
		return nil, err
	}

	versionsBundle, err := s.getVersionsBundle(clusterConfig, bundles)
	if err != nil {
		return nil, err
	}

	eksd, err := s.reader.GetEksdRelease(versionsBundle)
	if err != nil {
		return nil, err
	}

	kubeDistro, err := buildKubeDistro(eksd)
	if err != nil {
		return nil, err
	}

	s.Bundles = bundles
	s.Cluster = clusterConfig
	s.VersionsBundle = &VersionsBundle{
		VersionsBundle: versionsBundle,
		KubeDistro:     kubeDistro,
	}
	s.eksdRelease = eksd
	for _, identityProvider := range s.Cluster.Spec.IdentityProviderRefs {
		switch identityProvider.Kind {
		case eksav1alpha1.OIDCConfigKind:
			oidcConfig, err := eksav1alpha1.GetAndValidateOIDCConfig(clusterConfigPath, identityProvider.Name, clusterConfig)
			if err != nil {
				return nil, err
			}
			s.OIDCConfig = oidcConfig
		case eksav1alpha1.AWSIamConfigKind:
			awsIamConfig, err := eksav1alpha1.GetAndValidateAWSIamConfig(clusterConfigPath, identityProvider.Name, clusterConfig)
			if err != nil {
				return nil, err
			}
			s.AWSIamConfig = awsIamConfig
		}
	}

	if s.Cluster.Spec.GitOpsRef != nil {
		gitOpsConfig, err := eksav1alpha1.GetAndValidateGitOpsConfig(clusterConfigPath, s.Cluster.Spec.GitOpsRef.Name, clusterConfig)
		if err != nil {
			return nil, err
		}
		s.GitOpsConfig = gitOpsConfig
	}

	switch s.Cluster.Spec.DatacenterRef.Kind {
	case eksav1alpha1.VSphereDatacenterKind:
		datacenterConfig, err := eksav1alpha1.GetVSphereDatacenterConfig(clusterConfigPath)
		if err != nil {
			return nil, err
		}
		s.DatacenterConfig = &datacenterConfig.ObjectMeta
	case eksav1alpha1.DockerDatacenterKind:
		datacenterConfig, err := eksav1alpha1.GetDockerDatacenterConfig(clusterConfigPath)
		if err != nil {
			return nil, err
		}
		s.DatacenterConfig = &datacenterConfig.ObjectMeta
	}

	if s.ManagementCluster != nil {
		s.SetManagedBy(s.ManagementCluster.Name)
	} else {
		s.SetSelfManaged()
	}

	return s, nil
}