Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions api/v1alpha5/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions api/v1alpha6/openstackcluster_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,8 @@ func restorev1beta1ClusterSpec(previous *infrav1.OpenStackClusterSpec, dst *infr
optional.RestoreBool(&previous.DisableAPIServerFloatingIP, &dst.DisableAPIServerFloatingIP)
optional.RestoreBool(&previous.ControlPlaneOmitAvailabilityZone, &dst.ControlPlaneOmitAvailabilityZone)
optional.RestoreBool(&previous.DisablePortSecurity, &dst.DisablePortSecurity)

restorev1beta1APIServerLoadBalancer(previous.APIServerLoadBalancer, dst.APIServerLoadBalancer)
}

func Convert_v1alpha6_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in *OpenStackClusterSpec, out *infrav1.OpenStackClusterSpec, s apiconversion.Scope) error {
Expand Down
9 changes: 9 additions & 0 deletions api/v1alpha6/types_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -392,3 +392,12 @@ func Convert_v1beta1_OpenStackIdentityReference_To_v1alpha6_OpenStackIdentityRef
out.Name = in.Name
return nil
}

func restorev1beta1APIServerLoadBalancer(previous *infrav1.APIServerLoadBalancer, dst *infrav1.APIServerLoadBalancer) {
if dst == nil || previous == nil {
return
}

// AZ doesn't exist in v1alpha6, so always restore.
dst.AvailabilityZone = previous.AvailabilityZone
}
6 changes: 1 addition & 5 deletions api/v1alpha6/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions api/v1alpha7/openstackcluster_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,8 @@ func restorev1beta1ClusterSpec(previous *infrav1.OpenStackClusterSpec, dst *infr
optional.RestoreBool(&previous.DisableAPIServerFloatingIP, &dst.DisableAPIServerFloatingIP)
optional.RestoreBool(&previous.ControlPlaneOmitAvailabilityZone, &dst.ControlPlaneOmitAvailabilityZone)
optional.RestoreBool(&previous.DisablePortSecurity, &dst.DisablePortSecurity)

restorev1beta1APIServerLoadBalancer(previous.APIServerLoadBalancer, dst.APIServerLoadBalancer)
}

func Convert_v1alpha7_OpenStackClusterSpec_To_v1beta1_OpenStackClusterSpec(in *OpenStackClusterSpec, out *infrav1.OpenStackClusterSpec, s apiconversion.Scope) error {
Expand Down
11 changes: 11 additions & 0 deletions api/v1alpha7/types_conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -351,3 +351,14 @@ func Convert_v1beta1_OpenStackIdentityReference_To_v1alpha7_OpenStackIdentityRef
out.Name = in.Name
return nil
}

/* APIServerLoadBalancer */

func restorev1beta1APIServerLoadBalancer(previous *infrav1.APIServerLoadBalancer, dst *infrav1.APIServerLoadBalancer) {
if dst == nil || previous == nil {
return
}

// AZ doesn't exist in v1alpha6, so always restore.
dst.AvailabilityZone = previous.AvailabilityZone
}
6 changes: 1 addition & 5 deletions api/v1alpha7/zz_generated.conversion.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions api/v1beta1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -654,6 +654,10 @@ type APIServerLoadBalancer struct {
// specified.
// +optional
Provider optional.String `json:"provider,omitempty"`

// AvailabilityZone is the failure domain that will be used to create the APIServerLoadBalancer Spec.
//+optional
AvailabilityZone optional.String `json:"availabilityZone,omitempty"`
}

func (s *APIServerLoadBalancer) IsZero() bool {
Expand Down
5 changes: 5 additions & 0 deletions api/v1beta1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions docs/book/src/api/v1beta1/api.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 17 additions & 9 deletions pkg/cloud/services/loadbalancer/loadbalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -281,23 +281,28 @@ func (s *Service) getOrCreateAPILoadBalancer(openStackCluster *infrav1.OpenStack

// Choose the selected provider if it is set in cluster spec, if not, omit the field and Octavia will use the default provider.
lbProvider := ""
if openStackCluster.Spec.APIServerLoadBalancer != nil && openStackCluster.Spec.APIServerLoadBalancer.Provider != nil {
for _, v := range providers {
if v.Name == *openStackCluster.Spec.APIServerLoadBalancer.Provider {
lbProvider = v.Name
break
var availabilityZone *string
if openStackCluster.Spec.APIServerLoadBalancer != nil {
if openStackCluster.Spec.APIServerLoadBalancer.Provider != nil {
for _, v := range providers {
if v.Name == *openStackCluster.Spec.APIServerLoadBalancer.Provider {
lbProvider = v.Name
break
}
}
if lbProvider == "" {
record.Warnf(openStackCluster, "OctaviaProviderNotFound", "Provider specified for Octavia not found.")
record.Eventf(openStackCluster, "OctaviaProviderNotFound", "Provider %s specified for Octavia not found, using the default provider.", openStackCluster.Spec.APIServerLoadBalancer.Provider)
}
}
if lbProvider == "" {
record.Warnf(openStackCluster, "OctaviaProviderNotFound", "Provider specified for Octavia not found.")
record.Eventf(openStackCluster, "OctaviaProviderNotFound", "Provider %s specified for Octavia not found, using the default provider.", openStackCluster.Spec.APIServerLoadBalancer.Provider)
}
availabilityZone = openStackCluster.Spec.APIServerLoadBalancer.AvailabilityZone
}

vipAddress, err := getAPIServerVIPAddress(openStackCluster)
if err != nil {
return nil, err
}
availabilityZone := openStackCluster.Spec.APIServerLoadBalancer.AvailabilityZone

lbCreateOpts := loadbalancers.CreateOpts{
Name: loadBalancerName,
Expand All @@ -306,6 +311,9 @@ func (s *Service) getOrCreateAPILoadBalancer(openStackCluster *infrav1.OpenStack
Provider: lbProvider,
Tags: openStackCluster.Spec.Tags,
}
if availabilityZone != nil {
lbCreateOpts.AvailabilityZone = *availabilityZone
}
if vipAddress != nil {
lbCreateOpts.VipAddress = *vipAddress
}
Expand Down