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)