in pkg/cloud/network.go [164:187]
func (c *client) GetOrCreateLoadBalancerRule(csCluster *infrav1.CloudStackCluster) (retErr error) {
// Check if rule exists.
if err := c.ResolveLoadBalancerRuleDetails(csCluster); err == nil ||
!strings.Contains(err.Error(), "no load balancer rule found") {
return err
}
p := c.cs.LoadBalancer.NewCreateLoadBalancerRuleParams(
"roundrobin", "Kubernetes_API_Server", K8sDefaultAPIPort, K8sDefaultAPIPort)
p.SetNetworkid(csCluster.Status.NetworkID)
if csCluster.Spec.ControlPlaneEndpoint.Port != 0 { // Override default public port if endpoint port specified.
p.SetPublicport(int(csCluster.Spec.ControlPlaneEndpoint.Port))
}
p.SetPublicipid(csCluster.Status.PublicIPID)
p.SetProtocol("tcp")
setIfNotEmpty(csCluster.Spec.Account, p.SetAccount)
setIfNotEmpty(csCluster.Status.DomainID, p.SetDomainid)
resp, err := c.cs.LoadBalancer.CreateLoadBalancerRule(p)
if err != nil {
return err
}
csCluster.Status.LBRuleID = resp.Id
return nil
}