diff --git a/api/v1alpha3/conversion_test.go b/api/v1alpha3/conversion_test.go index 3f68ae3ef3..9113a518b3 100644 --- a/api/v1alpha3/conversion_test.go +++ b/api/v1alpha3/conversion_test.go @@ -248,6 +248,7 @@ func TestFuzzyConversion(t *testing.T) { if v1alpha6Cluster.Status.Network != nil { if v1alpha6Cluster.Status.Network.APIServerLoadBalancer != nil { v1alpha6Cluster.Status.Network.APIServerLoadBalancer.AllowedCIDRs = nil + v1alpha6Cluster.Status.Network.APIServerLoadBalancer.Tags = []string{} } if v1alpha6Cluster.Status.Network.Router != nil { v1alpha6Cluster.Status.Network.Router.IPs = []string{} @@ -257,6 +258,7 @@ func TestFuzzyConversion(t *testing.T) { if v1alpha6Cluster.Status.ExternalNetwork != nil { if v1alpha6Cluster.Status.ExternalNetwork.APIServerLoadBalancer != nil { v1alpha6Cluster.Status.ExternalNetwork.APIServerLoadBalancer.AllowedCIDRs = nil + v1alpha6Cluster.Status.ExternalNetwork.APIServerLoadBalancer.Tags = []string{} } if v1alpha6Cluster.Status.ExternalNetwork.Router != nil { v1alpha6Cluster.Status.ExternalNetwork.Router.IPs = []string{} diff --git a/api/v1alpha3/zz_generated.conversion.go b/api/v1alpha3/zz_generated.conversion.go index a24e057fd0..d251e83331 100644 --- a/api/v1alpha3/zz_generated.conversion.go +++ b/api/v1alpha3/zz_generated.conversion.go @@ -495,6 +495,7 @@ func autoConvert_v1alpha6_LoadBalancer_To_v1alpha3_LoadBalancer(in *v1alpha6.Loa out.IP = in.IP out.InternalIP = in.InternalIP // WARNING: in.AllowedCIDRs requires manual conversion: does not exist in peer-type + // WARNING: in.Tags requires manual conversion: does not exist in peer-type return nil } diff --git a/api/v1alpha4/conversion_test.go b/api/v1alpha4/conversion_test.go index b068edde13..c3933a1cc6 100644 --- a/api/v1alpha4/conversion_test.go +++ b/api/v1alpha4/conversion_test.go @@ -346,6 +346,7 @@ func TestFuzzyConversion(t *testing.T) { if v1alpha6Cluster.Status.Network != nil { if v1alpha6Cluster.Status.Network.APIServerLoadBalancer != nil { v1alpha6Cluster.Status.Network.APIServerLoadBalancer.AllowedCIDRs = nil + v1alpha6Cluster.Status.Network.APIServerLoadBalancer.Tags = []string{} } if v1alpha6Cluster.Status.Network.Router != nil { v1alpha6Cluster.Status.Network.Router.IPs = []string{} @@ -355,6 +356,7 @@ func TestFuzzyConversion(t *testing.T) { if v1alpha6Cluster.Status.ExternalNetwork != nil { if v1alpha6Cluster.Status.ExternalNetwork.APIServerLoadBalancer != nil { v1alpha6Cluster.Status.ExternalNetwork.APIServerLoadBalancer.AllowedCIDRs = nil + v1alpha6Cluster.Status.ExternalNetwork.APIServerLoadBalancer.Tags = []string{} } if v1alpha6Cluster.Status.ExternalNetwork.Router != nil { v1alpha6Cluster.Status.ExternalNetwork.Router.IPs = []string{} diff --git a/api/v1alpha4/zz_generated.conversion.go b/api/v1alpha4/zz_generated.conversion.go index 43f09203a6..f79073f84b 100644 --- a/api/v1alpha4/zz_generated.conversion.go +++ b/api/v1alpha4/zz_generated.conversion.go @@ -609,6 +609,7 @@ func autoConvert_v1alpha6_LoadBalancer_To_v1alpha4_LoadBalancer(in *v1alpha6.Loa out.IP = in.IP out.InternalIP = in.InternalIP // WARNING: in.AllowedCIDRs requires manual conversion: does not exist in peer-type + // WARNING: in.Tags requires manual conversion: does not exist in peer-type return nil } diff --git a/api/v1alpha5/conversion.go b/api/v1alpha5/conversion.go index 3e3eb3bd73..5d46fa9d5c 100644 --- a/api/v1alpha5/conversion.go +++ b/api/v1alpha5/conversion.go @@ -202,3 +202,27 @@ func Convert_v1alpha6_OpenStackClusterSpec_To_v1alpha5_OpenStackClusterSpec(in * // Our new flag has no equivalent in v1alpha5 return autoConvert_v1alpha6_OpenStackClusterSpec_To_v1alpha5_OpenStackClusterSpec(in, out, s) } + +func Convert_v1alpha6_LoadBalancer_To_v1alpha5_LoadBalancer(in *infrav1.LoadBalancer, out *LoadBalancer, s conversion.Scope) error { + return autoConvert_v1alpha6_LoadBalancer_To_v1alpha5_LoadBalancer(in, out, s) +} + +func Convert_Slice_v1alpha5_Network_To_Slice_v1alpha6_Network(in *[]Network, out *[]infrav1.Network, s conversion.Scope) error { + *out = make([]infrav1.Network, len(*in)) + for i := range *in { + if err := Convert_v1alpha5_Network_To_v1alpha6_Network(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + return nil +} + +func Convert_Slice_v1alpha6_Network_To_Slice_v1alpha5_Network(in *[]infrav1.Network, out *[]Network, s conversion.Scope) error { + *out = make([]Network, len(*in)) + for i := range *in { + if err := Convert_v1alpha6_Network_To_v1alpha5_Network(&(*in)[i], &(*out)[i], s); err != nil { + return err + } + } + return nil +} diff --git a/api/v1alpha5/zz_generated.conversion.go b/api/v1alpha5/zz_generated.conversion.go index 13121335fd..9442fad3c8 100644 --- a/api/v1alpha5/zz_generated.conversion.go +++ b/api/v1alpha5/zz_generated.conversion.go @@ -104,11 +104,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*v1alpha6.LoadBalancer)(nil), (*LoadBalancer)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha6_LoadBalancer_To_v1alpha5_LoadBalancer(a.(*v1alpha6.LoadBalancer), b.(*LoadBalancer), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*Network)(nil), (*v1alpha6.Network)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha5_Network_To_v1alpha6_Network(a.(*Network), b.(*v1alpha6.Network), scope) }); err != nil { @@ -404,6 +399,21 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddConversionFunc((*[]Network)(nil), (*[]v1alpha6.Network)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_Slice_v1alpha5_Network_To_Slice_v1alpha6_Network(a.(*[]Network), b.(*[]v1alpha6.Network), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*[]v1alpha6.Network)(nil), (*[]Network)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_Slice_v1alpha6_Network_To_Slice_v1alpha5_Network(a.(*[]v1alpha6.Network), b.(*[]Network), scope) + }); err != nil { + return err + } + if err := s.AddConversionFunc((*v1alpha6.LoadBalancer)(nil), (*LoadBalancer)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha6_LoadBalancer_To_v1alpha5_LoadBalancer(a.(*v1alpha6.LoadBalancer), b.(*LoadBalancer), scope) + }); err != nil { + return err + } if err := s.AddConversionFunc((*v1alpha6.OpenStackClusterSpec)(nil), (*OpenStackClusterSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha6_OpenStackClusterSpec_To_v1alpha5_OpenStackClusterSpec(a.(*v1alpha6.OpenStackClusterSpec), b.(*OpenStackClusterSpec), scope) }); err != nil { @@ -540,7 +550,15 @@ func autoConvert_v1alpha5_Instance_To_v1alpha6_Instance(in *Instance, out *v1alp out.Trunk = in.Trunk out.FailureDomain = in.FailureDomain out.SecurityGroups = (*[]string)(unsafe.Pointer(in.SecurityGroups)) - out.Networks = (*[]v1alpha6.Network)(unsafe.Pointer(in.Networks)) + if in.Networks != nil { + in, out := &in.Networks, &out.Networks + *out = new([]v1alpha6.Network) + if err := Convert_Slice_v1alpha5_Network_To_Slice_v1alpha6_Network(*in, *out, s); err != nil { + return err + } + } else { + out.Networks = nil + } out.Subnet = in.Subnet out.Tags = *(*[]string)(unsafe.Pointer(&in.Tags)) out.Image = in.Image @@ -569,7 +587,15 @@ func autoConvert_v1alpha6_Instance_To_v1alpha5_Instance(in *v1alpha6.Instance, o out.Trunk = in.Trunk out.FailureDomain = in.FailureDomain out.SecurityGroups = (*[]string)(unsafe.Pointer(in.SecurityGroups)) - out.Networks = (*[]Network)(unsafe.Pointer(in.Networks)) + if in.Networks != nil { + in, out := &in.Networks, &out.Networks + *out = new([]Network) + if err := Convert_Slice_v1alpha6_Network_To_Slice_v1alpha5_Network(*in, *out, s); err != nil { + return err + } + } else { + out.Networks = nil + } out.Subnet = in.Subnet out.Tags = *(*[]string)(unsafe.Pointer(&in.Tags)) out.Image = in.Image @@ -612,14 +638,10 @@ func autoConvert_v1alpha6_LoadBalancer_To_v1alpha5_LoadBalancer(in *v1alpha6.Loa out.IP = in.IP out.InternalIP = in.InternalIP out.AllowedCIDRs = *(*[]string)(unsafe.Pointer(&in.AllowedCIDRs)) + // WARNING: in.Tags requires manual conversion: does not exist in peer-type return nil } -// Convert_v1alpha6_LoadBalancer_To_v1alpha5_LoadBalancer is an autogenerated conversion function. -func Convert_v1alpha6_LoadBalancer_To_v1alpha5_LoadBalancer(in *v1alpha6.LoadBalancer, out *LoadBalancer, s conversion.Scope) error { - return autoConvert_v1alpha6_LoadBalancer_To_v1alpha5_LoadBalancer(in, out, s) -} - func autoConvert_v1alpha5_Network_To_v1alpha6_Network(in *Network, out *v1alpha6.Network, s conversion.Scope) error { out.Name = in.Name out.ID = in.ID @@ -627,7 +649,15 @@ func autoConvert_v1alpha5_Network_To_v1alpha6_Network(in *Network, out *v1alpha6 out.Subnet = (*v1alpha6.Subnet)(unsafe.Pointer(in.Subnet)) out.PortOpts = (*v1alpha6.PortOpts)(unsafe.Pointer(in.PortOpts)) out.Router = (*v1alpha6.Router)(unsafe.Pointer(in.Router)) - out.APIServerLoadBalancer = (*v1alpha6.LoadBalancer)(unsafe.Pointer(in.APIServerLoadBalancer)) + if in.APIServerLoadBalancer != nil { + in, out := &in.APIServerLoadBalancer, &out.APIServerLoadBalancer + *out = new(v1alpha6.LoadBalancer) + if err := Convert_v1alpha5_LoadBalancer_To_v1alpha6_LoadBalancer(*in, *out, s); err != nil { + return err + } + } else { + out.APIServerLoadBalancer = nil + } return nil } @@ -643,7 +673,15 @@ func autoConvert_v1alpha6_Network_To_v1alpha5_Network(in *v1alpha6.Network, out out.Subnet = (*Subnet)(unsafe.Pointer(in.Subnet)) out.PortOpts = (*PortOpts)(unsafe.Pointer(in.PortOpts)) out.Router = (*Router)(unsafe.Pointer(in.Router)) - out.APIServerLoadBalancer = (*LoadBalancer)(unsafe.Pointer(in.APIServerLoadBalancer)) + if in.APIServerLoadBalancer != nil { + in, out := &in.APIServerLoadBalancer, &out.APIServerLoadBalancer + *out = new(LoadBalancer) + if err := Convert_v1alpha6_LoadBalancer_To_v1alpha5_LoadBalancer(*in, *out, s); err != nil { + return err + } + } else { + out.APIServerLoadBalancer = nil + } return nil } @@ -858,13 +896,37 @@ func autoConvert_v1alpha6_OpenStackClusterSpec_To_v1alpha5_OpenStackClusterSpec( func autoConvert_v1alpha5_OpenStackClusterStatus_To_v1alpha6_OpenStackClusterStatus(in *OpenStackClusterStatus, out *v1alpha6.OpenStackClusterStatus, s conversion.Scope) error { out.Ready = in.Ready - out.Network = (*v1alpha6.Network)(unsafe.Pointer(in.Network)) - out.ExternalNetwork = (*v1alpha6.Network)(unsafe.Pointer(in.ExternalNetwork)) + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(v1alpha6.Network) + if err := Convert_v1alpha5_Network_To_v1alpha6_Network(*in, *out, s); err != nil { + return err + } + } else { + out.Network = nil + } + if in.ExternalNetwork != nil { + in, out := &in.ExternalNetwork, &out.ExternalNetwork + *out = new(v1alpha6.Network) + if err := Convert_v1alpha5_Network_To_v1alpha6_Network(*in, *out, s); err != nil { + return err + } + } else { + out.ExternalNetwork = nil + } out.FailureDomains = *(*v1beta1.FailureDomains)(unsafe.Pointer(&in.FailureDomains)) out.ControlPlaneSecurityGroup = (*v1alpha6.SecurityGroup)(unsafe.Pointer(in.ControlPlaneSecurityGroup)) out.WorkerSecurityGroup = (*v1alpha6.SecurityGroup)(unsafe.Pointer(in.WorkerSecurityGroup)) out.BastionSecurityGroup = (*v1alpha6.SecurityGroup)(unsafe.Pointer(in.BastionSecurityGroup)) - out.Bastion = (*v1alpha6.Instance)(unsafe.Pointer(in.Bastion)) + if in.Bastion != nil { + in, out := &in.Bastion, &out.Bastion + *out = new(v1alpha6.Instance) + if err := Convert_v1alpha5_Instance_To_v1alpha6_Instance(*in, *out, s); err != nil { + return err + } + } else { + out.Bastion = nil + } out.FailureReason = (*errors.ClusterStatusError)(unsafe.Pointer(in.FailureReason)) out.FailureMessage = (*string)(unsafe.Pointer(in.FailureMessage)) return nil @@ -877,13 +939,37 @@ func Convert_v1alpha5_OpenStackClusterStatus_To_v1alpha6_OpenStackClusterStatus( func autoConvert_v1alpha6_OpenStackClusterStatus_To_v1alpha5_OpenStackClusterStatus(in *v1alpha6.OpenStackClusterStatus, out *OpenStackClusterStatus, s conversion.Scope) error { out.Ready = in.Ready - out.Network = (*Network)(unsafe.Pointer(in.Network)) - out.ExternalNetwork = (*Network)(unsafe.Pointer(in.ExternalNetwork)) + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(Network) + if err := Convert_v1alpha6_Network_To_v1alpha5_Network(*in, *out, s); err != nil { + return err + } + } else { + out.Network = nil + } + if in.ExternalNetwork != nil { + in, out := &in.ExternalNetwork, &out.ExternalNetwork + *out = new(Network) + if err := Convert_v1alpha6_Network_To_v1alpha5_Network(*in, *out, s); err != nil { + return err + } + } else { + out.ExternalNetwork = nil + } out.FailureDomains = *(*v1beta1.FailureDomains)(unsafe.Pointer(&in.FailureDomains)) out.ControlPlaneSecurityGroup = (*SecurityGroup)(unsafe.Pointer(in.ControlPlaneSecurityGroup)) out.WorkerSecurityGroup = (*SecurityGroup)(unsafe.Pointer(in.WorkerSecurityGroup)) out.BastionSecurityGroup = (*SecurityGroup)(unsafe.Pointer(in.BastionSecurityGroup)) - out.Bastion = (*Instance)(unsafe.Pointer(in.Bastion)) + if in.Bastion != nil { + in, out := &in.Bastion, &out.Bastion + *out = new(Instance) + if err := Convert_v1alpha6_Instance_To_v1alpha5_Instance(*in, *out, s); err != nil { + return err + } + } else { + out.Bastion = nil + } out.FailureReason = (*errors.ClusterStatusError)(unsafe.Pointer(in.FailureReason)) out.FailureMessage = (*string)(unsafe.Pointer(in.FailureMessage)) return nil diff --git a/api/v1alpha6/types.go b/api/v1alpha6/types.go index 6e99a915bd..ce1556be0d 100644 --- a/api/v1alpha6/types.go +++ b/api/v1alpha6/types.go @@ -234,6 +234,8 @@ type LoadBalancer struct { InternalIP string `json:"internalIP"` //+optional AllowedCIDRs []string `json:"allowedCIDRs,omitempty"` + //+optional + Tags []string `json:"tags,omitempty"` } // SecurityGroup represents the basic information of the associated diff --git a/api/v1alpha6/zz_generated.deepcopy.go b/api/v1alpha6/zz_generated.deepcopy.go index add4e9a3ea..964d847eb5 100644 --- a/api/v1alpha6/zz_generated.deepcopy.go +++ b/api/v1alpha6/zz_generated.deepcopy.go @@ -185,6 +185,11 @@ func (in *LoadBalancer) DeepCopyInto(out *LoadBalancer) { *out = make([]string, len(*in)) copy(*out, *in) } + if in.Tags != nil { + in, out := &in.Tags, &out.Tags + *out = make([]string, len(*in)) + copy(*out, *in) + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancer. diff --git a/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackclusters.yaml b/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackclusters.yaml index ab4be0bc89..f38456a7f2 100644 --- a/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackclusters.yaml +++ b/config/crd/bases/infrastructure.cluster.x-k8s.io_openstackclusters.yaml @@ -4959,6 +4959,10 @@ spec: type: string name: type: string + tags: + items: + type: string + type: array required: - id - internalIP @@ -5352,6 +5356,10 @@ spec: type: string name: type: string + tags: + items: + type: string + type: array required: - id - internalIP @@ -5656,6 +5664,10 @@ spec: type: string name: type: string + tags: + items: + type: string + type: array required: - id - internalIP diff --git a/pkg/cloud/services/loadbalancer/loadbalancer.go b/pkg/cloud/services/loadbalancer/loadbalancer.go index b05886c73e..fcf7ee709f 100644 --- a/pkg/cloud/services/loadbalancer/loadbalancer.go +++ b/pkg/cloud/services/loadbalancer/loadbalancer.go @@ -150,6 +150,7 @@ func (s *Service) ReconcileLoadBalancer(openStackCluster *infrav1.OpenStackClust InternalIP: lb.VipAddress, IP: lbFloatingIP, AllowedCIDRs: allowedCIDRs, + Tags: lb.Tags, } return nil } @@ -172,6 +173,7 @@ func (s *Service) getOrCreateLoadBalancer(openStackCluster *infrav1.OpenStackClu VipAddress: vipAddress, Description: names.GetDescription(clusterName), Provider: provider, + Tags: openStackCluster.Spec.Tags, } lb, err = s.loadbalancerClient.CreateLoadBalancer(lbCreateOpts) if err != nil { @@ -200,6 +202,7 @@ func (s *Service) getOrCreateListener(openStackCluster *infrav1.OpenStackCluster Protocol: "TCP", ProtocolPort: port, LoadbalancerID: lbID, + Tags: openStackCluster.Spec.Tags, } listener, err = s.loadbalancerClient.CreateListener(listenerCreateOpts) if err != nil { @@ -314,6 +317,7 @@ func (s *Service) getOrCreatePool(openStackCluster *infrav1.OpenStackCluster, po Protocol: "TCP", LBMethod: pools.LBMethodRoundRobin, ListenerID: listenerID, + Tags: openStackCluster.Spec.Tags, } pool, err = s.loadbalancerClient.CreatePool(poolCreateOpts) if err != nil { @@ -430,6 +434,7 @@ func (s *Service) ReconcileLoadBalancerMember(openStackCluster *infrav1.OpenStac Name: name, ProtocolPort: port, Address: ip, + Tags: openStackCluster.Spec.Tags, } if err := s.waitForLoadBalancerActive(lbID); err != nil {