in pkg/providers/vsphere/vsphere.go [364:424]
func (p *vsphereProvider) SetupAndValidateCreateCluster(ctx context.Context, clusterSpec *cluster.Spec) error {
if err := SetupEnvVars(p.datacenterConfig); err != nil {
return fmt.Errorf("failed setup and validations: %v", err)
}
vSphereClusterSpec := NewSpec(clusterSpec, p.machineConfigs, p.datacenterConfig)
if err := p.defaulter.SetDefaultsForDatacenterConfig(ctx, vSphereClusterSpec.datacenterConfig); err != nil {
return fmt.Errorf("failed setting default values for vsphere datacenter config: %v", err)
}
if err := vSphereClusterSpec.datacenterConfig.ValidateFields(); err != nil {
return err
}
if err := p.validator.ValidateVCenterConfig(ctx, vSphereClusterSpec.datacenterConfig); err != nil {
return err
}
if err := p.defaulter.setDefaultsForMachineConfig(ctx, vSphereClusterSpec); err != nil {
return fmt.Errorf("failed setting default values for vsphere machine configs: %v", err)
}
if err := p.validator.ValidateClusterMachineConfigs(ctx, vSphereClusterSpec); err != nil {
return err
}
if err := p.setupSSHAuthKeysForCreate(); err != nil {
return fmt.Errorf("failed setup and validations: %v", err)
}
// TODO: move this to validator
if clusterSpec.IsManaged() {
for _, mc := range p.MachineConfigs() {
em, err := p.providerKubectlClient.SearchVsphereMachineConfig(ctx, mc.GetName(), clusterSpec.ManagementCluster.KubeconfigFile, mc.GetNamespace())
if err != nil {
return err
}
if len(em) > 0 {
return fmt.Errorf("VSphereMachineConfig %s already exists", mc.GetName())
}
}
existingDatacenter, err := p.providerKubectlClient.SearchVsphereDatacenterConfig(ctx, p.datacenterConfig.Name, clusterSpec.ManagementCluster.KubeconfigFile, clusterSpec.Namespace)
if err != nil {
return err
}
if len(existingDatacenter) > 0 {
return fmt.Errorf("VSphereDatacenter %s already exists", p.datacenterConfig.Name)
}
}
if p.skipIpCheck {
logger.Info("Skipping check for whether control plane ip is in use")
return nil
}
if err := p.validator.validateControlPlaneIpUniqueness(vSphereClusterSpec); err != nil {
return err
}
return nil
}