@@ -354,33 +354,36 @@ func convertCAPOPortOptsToMAPONetwork(fldPath *field.Path, capoPort openstackv1.
354354
355355 mapoNetwork := mapiv1alpha1.NetworkParam {}
356356
357- // We have already asserted that .Network is non-nil in the caller
358-
359- switch {
360- case capoPort .Network .ID != nil :
361- mapoNetwork .UUID = * capoPort .Network .ID
362- case capoPort .Network .Filter != nil :
363- mapoNetwork .Filter = mapiv1alpha1.Filter {
364- // DeprecatedAdminStateUp is deprecated and ignored by MAPO so we don't set it
365- // DeprecatedLimit is deprecated and ignored by MAPO so we don't set it
366- // DeprecatedMarker is deprecated and ignored by MAPO so we don't set it
367- // DeprecatedShared is deprecated and ignored by MAPO so we don't set it
368- // DeprecatedSortKey is deprecated and ignored by MAPO so we don't set it
369- // DeprecatedSortDir is deprecated and ignored by MAPO so we don't set it
370- // DeprecatedStatus is deprecated and ignored by MAPO so we don't set it
371- Description : capoPort .Network .Filter .Description ,
372- // ID is deprecated and covered by UUID on the parent NetworkParam so we don't set it
373- Name : capoPort .Network .Filter .Name ,
374- NotTags : joinTags (capoPort .Network .Filter .NotTags ),
375- NotTagsAny : joinTags (capoPort .Network .Filter .NotTagsAny ),
376- ProjectID : capoPort .Network .Filter .ProjectID ,
377- Tags : joinTags (capoPort .Network .Filter .Tags ),
378- TagsAny : joinTags (capoPort .Network .Filter .TagsAny ),
379- // TenantID is deprecated and covered by ProjectID so we don't set it
357+ if capoPort .Network != nil {
358+ switch {
359+ case capoPort .Network != nil && capoPort .Network .ID != nil :
360+ mapoNetwork .UUID = * capoPort .Network .ID
361+ case capoPort .Network != nil && capoPort .Network .Filter != nil :
362+ mapoNetwork .Filter = mapiv1alpha1.Filter {
363+ // DeprecatedAdminStateUp is deprecated and ignored by MAPO so we don't set it
364+ // DeprecatedLimit is deprecated and ignored by MAPO so we don't set it
365+ // DeprecatedMarker is deprecated and ignored by MAPO so we don't set it
366+ // DeprecatedShared is deprecated and ignored by MAPO so we don't set it
367+ // DeprecatedSortKey is deprecated and ignored by MAPO so we don't set it
368+ // DeprecatedSortDir is deprecated and ignored by MAPO so we don't set it
369+ // DeprecatedStatus is deprecated and ignored by MAPO so we don't set it
370+ Description : capoPort .Network .Filter .Description ,
371+ // ID is deprecated and covered by UUID on the parent NetworkParam so we don't set it
372+ Name : capoPort .Network .Filter .Name ,
373+ NotTags : joinTags (capoPort .Network .Filter .NotTags ),
374+ NotTagsAny : joinTags (capoPort .Network .Filter .NotTagsAny ),
375+ ProjectID : capoPort .Network .Filter .ProjectID ,
376+ Tags : joinTags (capoPort .Network .Filter .Tags ),
377+ TagsAny : joinTags (capoPort .Network .Filter .TagsAny ),
378+ // TenantID is deprecated and covered by ProjectID so we don't set it
379+ }
380+ default :
381+ // TODO(OSASINFRA-3779): Add VAP to prevent usage of the below field.
382+ errors = append (errors , field .Invalid (fldPath .Child ("network" ), capoPort .Network , "A network must be referenced by a UUID or filter" ))
380383 }
381- default :
384+ } else if len ( capoPort . FixedIPs ) == 0 {
382385 // TODO(OSASINFRA-3779): Add VAP to prevent usage of the below field.
383- errors = append (errors , field .Invalid (fldPath .Child ("network" ), capoPort .Network , "A network must be referenced by a UUID or filter" ))
386+ errors = append (errors , field .Invalid (fldPath .Child ("network" ), capoPort .Network , "A network must be referenced by a UUID or filter, else a subnet must be referenced " ))
384387 }
385388
386389 if capoPort .DisablePortSecurity != nil {
@@ -397,8 +400,13 @@ func convertCAPOPortOptsToMAPONetwork(fldPath *field.Path, capoPort openstackv1.
397400 }
398401
399402 mapoSubnet := mapiv1alpha1.SubnetParam {
400- UUID : * capoFixedIP .Subnet .ID ,
401- Filter : mapiv1alpha1.SubnetFilter {
403+ UUID : * capoFixedIP .Subnet .ID ,
404+ PortTags : capoPort .Tags ,
405+ // PortSecurity is deprecated and ignored by MAPO so we don't set it here
406+ }
407+
408+ if capoFixedIP .Subnet .Filter != nil {
409+ mapoSubnet .Filter = mapiv1alpha1.SubnetFilter {
402410 CIDR : capoFixedIP .Subnet .Filter .CIDR ,
403411 Description : capoFixedIP .Subnet .Filter .Description ,
404412 GatewayIP : capoFixedIP .Subnet .Filter .GatewayIP ,
@@ -412,10 +420,9 @@ func convertCAPOPortOptsToMAPONetwork(fldPath *field.Path, capoPort openstackv1.
412420 ProjectID : capoFixedIP .Subnet .Filter .ProjectID ,
413421 Tags : joinTags (capoFixedIP .Subnet .Filter .Tags ),
414422 TagsAny : joinTags (capoFixedIP .Subnet .Filter .TagsAny ),
415- },
416- PortTags : capoPort .Tags ,
417- // PortSecurity is deprecated and ignored by MAPO so we don't set it here
423+ }
418424 }
425+
419426 mapoSubnets [i ] = mapoSubnet
420427 }
421428
@@ -593,7 +600,7 @@ func convertCAPOPortOptsToMAPO(fldPath *field.Path, capoPorts []openstackv1.Port
593600 warnings := []string {}
594601
595602 for i , capoPort := range capoPorts {
596- if capoPort .Network != nil && capoPort .Network .Filter != nil {
603+ if ( capoPort .Network != nil && capoPort .Network .Filter != nil ) || ( capoPort . Network == nil && len ( capoPort . FixedIPs ) > 0 && capoPort . FixedIPs [ 0 ]. Subnet != nil ) {
597604 mapoNetwork , warns , errs := convertCAPOPortOptsToMAPONetwork (fldPath .Index (i ), capoPort )
598605 mapoNetworks = append (mapoNetworks , mapoNetwork )
599606 errors = append (errors , errs ... )
0 commit comments