func()

in controllers/controllers/resource/reconciler.go [51:121]


func (cor *clusterReconciler) Reconcile(ctx context.Context, objectKey types.NamespacedName, dryRun bool) error {
	var resources []*unstructured.Unstructured
	cs, err := cor.FetchCluster(ctx, objectKey)
	if err != nil {
		return err
	}
	spec, err := cor.FetchAppliedSpec(ctx, cs)
	if err != nil {
		return err
	}
	err = cor.fetchIdentityProviderRefs(ctx, spec, objectKey.Namespace)
	if err != nil {
		return err
	}

	switch cs.Spec.DatacenterRef.Kind {
	case anywherev1.VSphereDatacenterKind:
		vdc := &anywherev1.VSphereDatacenterConfig{}
		cpVmc := &anywherev1.VSphereMachineConfig{}
		etcdVmc := &anywherev1.VSphereMachineConfig{}
		workerVmc := &anywherev1.VSphereMachineConfig{}
		workerVmcs := make(map[string]anywherev1.VSphereMachineConfig, len(cs.Spec.WorkerNodeGroupConfigurations))
		err := cor.FetchObject(ctx, types.NamespacedName{Namespace: objectKey.Namespace, Name: cs.Spec.DatacenterRef.Name}, vdc)
		if err != nil {
			return err
		}
		err = cor.FetchObject(ctx, types.NamespacedName{Namespace: objectKey.Namespace, Name: cs.Spec.ControlPlaneConfiguration.MachineGroupRef.Name}, cpVmc)
		if err != nil {
			return err
		}
		for _, workerNodeGroupConfiguration := range cs.Spec.WorkerNodeGroupConfigurations {
			err = cor.FetchObject(ctx, types.NamespacedName{Namespace: objectKey.Namespace, Name: workerNodeGroupConfiguration.MachineGroupRef.Name}, workerVmc)
			if err != nil {
				return err
			}
			workerVmcs[workerNodeGroupConfiguration.MachineGroupRef.Name] = *workerVmc
		}
		if cs.Spec.ExternalEtcdConfiguration != nil {
			err = cor.FetchObject(ctx, types.NamespacedName{Namespace: objectKey.Namespace, Name: cs.Spec.ExternalEtcdConfiguration.MachineGroupRef.Name}, etcdVmc)
			if err != nil {
				return err
			}
		}
		r, err := cor.vsphereTemplate.TemplateResources(ctx, cs, spec, *vdc, *cpVmc, *etcdVmc, workerVmcs)
		if err != nil {
			return err
		}
		resources = append(resources, r...)
	case anywherev1.DockerDatacenterKind:
		r, err := cor.dockerTemplate.TemplateResources(ctx, cs, spec)
		if err != nil {
			return err
		}
		resources = append(resources, r...)
	default:
		return fmt.Errorf("unsupport Provider %s", cs.Spec.DatacenterRef.Kind)
	}

	// Reconcling IdentityProviders
	for _, identityProvider := range cs.Spec.IdentityProviderRefs {
		switch identityProvider.Kind {
		case anywherev1.AWSIamConfigKind:
			r, err := cor.awsIamConfigTemplate.TemplateResources(ctx, spec)
			if err != nil {
				return err
			}
			resources = append(resources, r...)
		}
	}
	return cor.applyTemplates(ctx, resources, dryRun)
}