From 600b32211716aec2c61257c6aaf7a97ce020c741 Mon Sep 17 00:00:00 2001 From: Emilio Garcia Date: Wed, 21 Apr 2021 12:53:23 -0400 Subject: [PATCH] Port Allowed Address Pairs UI The allowed Address pairs were using the gohpercloud ports.allowed address pairs struct. This prevents us from being in control of the api, and may lead to unexpected updates. This also causes the names in the api to be underscored instead of camel case, which is inconsistent. --- .../openstackproviderconfig/v1alpha1/types.go | 28 +++++++++++-------- pkg/cloud/openstack/clients/machineservice.go | 15 +++++++--- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/pkg/apis/openstackproviderconfig/v1alpha1/types.go b/pkg/apis/openstackproviderconfig/v1alpha1/types.go index 8ee8a66063..d4aebb9de9 100644 --- a/pkg/apis/openstackproviderconfig/v1alpha1/types.go +++ b/pkg/apis/openstackproviderconfig/v1alpha1/types.go @@ -17,7 +17,6 @@ limitations under the License. package v1alpha1 import ( - "github.com/gophercloud/gophercloud/openstack/networking/v2/ports" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -200,17 +199,17 @@ type SubnetFilter struct { } type PortOpts struct { - NetworkID string `json:"networkID" required:"true"` - NameSuffix string `json:"nameSuffix" required:"true"` - Description string `json:"description,omitempty"` - AdminStateUp *bool `json:"adminStateUp,omitempty"` - MACAddress string `json:"macAddress,omitempty"` - FixedIPs []FixedIPs `json:"fixedIPs,omitempty"` - TenantID string `json:"tenantID,omitempty"` - ProjectID string `json:"projectID,omitempty"` - SecurityGroups *[]string `json:"securityGroups,omitempty"` - AllowedAddressPairs []ports.AddressPair `json:"allowedAddressPairs,omitempty"` - Tags []string `json:"tags,omitempty"` + NetworkID string `json:"networkID" required:"true"` + NameSuffix string `json:"nameSuffix" required:"true"` + Description string `json:"description,omitempty"` + AdminStateUp *bool `json:"adminStateUp,omitempty"` + MACAddress string `json:"macAddress,omitempty"` + FixedIPs []FixedIPs `json:"fixedIPs,omitempty"` + TenantID string `json:"tenantID,omitempty"` + ProjectID string `json:"projectID,omitempty"` + SecurityGroups *[]string `json:"securityGroups,omitempty"` + AllowedAddressPairs []AddressPair `json:"allowedAddressPairs,omitempty"` + Tags []string `json:"tags,omitempty"` // The ID of the host where the port is allocated HostID string `json:"hostID,omitempty"` @@ -224,6 +223,11 @@ type PortOpts struct { PortSecurity *bool `json:"portSecurity,omitempty"` } +type AddressPair struct { + IPAddress string `json:"ipAddress,omitempty"` + MACAddress string `json:"macAddress,omitempty"` +} + type FixedIPs struct { SubnetID string `json:"subnetID"` IPAddress string `json:"ipAddress,omitempty"` diff --git a/pkg/cloud/openstack/clients/machineservice.go b/pkg/cloud/openstack/clients/machineservice.go index 2f7820b118..1fbc6101f8 100644 --- a/pkg/cloud/openstack/clients/machineservice.go +++ b/pkg/cloud/openstack/clients/machineservice.go @@ -342,7 +342,14 @@ func getOrCreatePort(is *InstanceService, name string, portOpts openstackconfigv TenantID: portOpts.TenantID, ProjectID: portOpts.ProjectID, SecurityGroups: portOpts.SecurityGroups, - AllowedAddressPairs: portOpts.AllowedAddressPairs, + AllowedAddressPairs: []ports.AddressPair{}, + } + + for _, ap := range portOpts.AllowedAddressPairs { + createOpts.AllowedAddressPairs = append(createOpts.AllowedAddressPairs, ports.AddressPair{ + IPAddress: ap.IPAddress, + MACAddress: ap.MACAddress, + }) } if len(portOpts.FixedIPs) != 0 { fixedIPs := make([]ports.IP, len(portOpts.FixedIPs)) @@ -533,7 +540,7 @@ func (is *InstanceService) InstanceCreate(clusterName string, name string, clust return nil, fmt.Errorf("Failed to retrieve cluster Infrastructure object: %v", err) } - allowedAddressPairs := []ports.AddressPair{} + allowedAddressPairs := []openstackconfigv1.AddressPair{} if clusterInfra != nil && clusterInfra.Status.PlatformStatus != nil && clusterInfra.Status.PlatformStatus.OpenStack != nil { clusterVips := []string{ clusterInfra.Status.PlatformStatus.OpenStack.APIServerInternalIP, @@ -543,7 +550,7 @@ func (is *InstanceService) InstanceCreate(clusterName string, name string, clust for _, vip := range clusterVips { if vip != "" { - allowedAddressPairs = append(allowedAddressPairs, ports.AddressPair{IPAddress: vip}) + allowedAddressPairs = append(allowedAddressPairs, openstackconfigv1.AddressPair{IPAddress: vip}) } } } @@ -557,7 +564,7 @@ func (is *InstanceService) InstanceCreate(clusterName string, name string, clust portOpt.SecurityGroups = &securityGroups portOpt.AllowedAddressPairs = allowedAddressPairs if _, ok := netsWithoutAllowedAddressPairs[portOpt.NetworkID]; ok { - portOpt.AllowedAddressPairs = []ports.AddressPair{} + portOpt.AllowedAddressPairs = []openstackconfigv1.AddressPair{} } port, err := getOrCreatePort(is, name, portOpt)