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
}