pkg/providers/vsphere/failure_domains.go (55 lines of code) (raw):

package vsphere import ( "fmt" "time" "github.com/go-logr/logr" "github.com/pkg/errors" vspherev1 "sigs.k8s.io/cluster-api-provider-vsphere/apis/v1beta1" "sigs.k8s.io/controller-runtime/pkg/client" "github.com/aws/eks-anywhere/pkg/cluster" ) // FailureDomains represents the list of failure domain groups. type FailureDomains struct { Groups []FailureDomainGroup } // FailureDomainGroup represents the Vsphere failure domains objects group. type FailureDomainGroup struct { VsphereDeploymentZone *vspherev1.VSphereDeploymentZone VsphereFailureDomain *vspherev1.VSphereFailureDomain } const ( // VsphereDataCenterConfigNameLabel is label for VsphereDataCenter name in Cluster.Spec.VsphereDataCenter.Name. VsphereDataCenterConfigNameLabel = "infrastructure.cluster.x-k8s.io/vsphere-datacenter-config-name" // ClusterNameLabel is label for cluster name. ClusterNameLabel = "infrastructure.cluster.x-k8s.io/cluster-name" ) // Objects returns a list of API objects for a collection of failure domain groups. func (f *FailureDomains) Objects() []client.Object { objs := make([]client.Object, 0, len(f.Groups)*2) for _, g := range f.Groups { failureDomainGroupObjects := []client.Object{g.VsphereFailureDomain, g.VsphereDeploymentZone} objs = append(objs, failureDomainGroupObjects...) } return objs } func templateNamesForFailureDomains(spec *cluster.Spec) map[string]string { failureDomainsLen := len(spec.VSphereDatacenter.Spec.FailureDomains) templateNames := make(map[string]string, failureDomainsLen) for _, failureDomain := range spec.VSphereDatacenter.Spec.FailureDomains { failureDomainTemplateName := FailureDomainTemplateName(spec, failureDomain.Name) templateNames[failureDomain.Name] = failureDomainTemplateName } return templateNames } // FailureDomainTemplateName generates the template name for failure domain. func FailureDomainTemplateName(spec *cluster.Spec, failureDomainName string) string { return fmt.Sprintf("%s-%s-%s", spec.Cluster.Name, spec.VSphereDatacenter.Name, failureDomainName) } // FailureDomainsSpec generates a vSphere Failure domains spec for the cluster. func FailureDomainsSpec(logger logr.Logger, spec *cluster.Spec) (*FailureDomains, error) { templateBuilder := NewVsphereTemplateBuilder(time.Now) templateNames := templateNamesForFailureDomains(spec) failureDomainYaml, err := templateBuilder.GenerateVsphereFailureDomainsSpec(spec, templateNames) if err != nil { return nil, err } yamlProcessor := NewFailureDomainsYamlProcessor(logger) failureDomains, err := yamlProcessor.ProcessYAML(failureDomainYaml) if err != nil { return nil, errors.Wrap(err, "processing vsphere failure domains yaml") } return failureDomains, nil }