func()

in pkg/cloud/cluster.go [51:88]


func (c *client) GetOrCreateCluster(csCluster *infrav1.CloudStackCluster) (retErr error) {
	if retErr = c.ResolveZone(csCluster); retErr != nil {
		return errors.Wrapf(retErr, "Error resolving Zone details for Cluster %s.", csCluster.Name)
	}

	// If provided, translate Domain name to Domain ID.
	if csCluster.Spec.Domain != "" {
		domainID, count, retErr := c.cs.Domain.GetDomainID(csCluster.Spec.Domain)
		if retErr != nil {
			return retErr
		} else if count != 1 {
			return errors.Errorf("Expected 1 Domain with name %s, but got %d.", csCluster.Spec.Domain, count)
		} else {
			csCluster.Status.DomainID = domainID
		}
	}

	// Get or create network and needed network constructs.
	if retErr = c.GetOrCreateNetwork(csCluster); retErr != nil {
		return retErr
	}

	if csCluster.Status.NetworkType == NetworkTypeIsolated {
		if retErr = c.OpenFirewallRules(csCluster); retErr != nil {
			return retErr
		}
		if retErr = c.AssociatePublicIpAddress(csCluster); retErr != nil {
			return retErr
		}
		if retErr = c.GetOrCreateLoadBalancerRule(csCluster); retErr != nil {
			return retErr
		}
	}

	// Set cluster to ready to indicate readiness to CAPI.
	csCluster.Status.Ready = true
	return nil
}