@@ -522,7 +522,8 @@ func openStackMachineSpecToOpenStackServerSpec(openStackMachineSpec *infrav1.Ope
522522 serverPorts = make ([]infrav1.PortOpts , 1 )
523523 }
524524 for i := range serverPorts {
525- if serverPorts [i ].Network == nil {
525+ // Only inject the default network when we actually have an ID.
526+ if serverPorts [i ].Network == nil && defaultNetworkID != "" {
526527 serverPorts [i ].Network = & infrav1.NetworkParam {
527528 ID : & defaultNetworkID ,
528529 }
@@ -589,7 +590,18 @@ func (r *OpenStackMachineReconciler) getOrCreateMachineServer(ctx context.Contex
589590 }
590591 return openStackCluster .Spec .IdentityRef
591592 }()
592- machineServerSpec := openStackMachineSpecToOpenStackServerSpec (& openStackMachine .Spec , identityRef , compute .InstanceTags (& openStackMachine .Spec , openStackCluster ), failureDomain , userDataRef , getManagedSecurityGroup (openStackCluster , machine ), openStackCluster .Status .Network .ID )
593+ // Determine default network ID if the cluster status exposes one.
594+ var defaultNetworkID string
595+ if openStackCluster .Status .Network != nil {
596+ defaultNetworkID = openStackCluster .Status .Network .ID
597+ }
598+
599+ // If no cluster network is available AND the machine spec did not define any ports with a network, we cannot choose a network.
600+ if defaultNetworkID == "" && len (openStackMachine .Spec .Ports ) == 0 {
601+ return nil , capoerrors .Terminal (infrav1 .InvalidMachineSpecReason , "no network configured: cluster network is missing and machine spec does not define ports with a network" )
602+ }
603+
604+ machineServerSpec := openStackMachineSpecToOpenStackServerSpec (& openStackMachine .Spec , identityRef , compute .InstanceTags (& openStackMachine .Spec , openStackCluster ), failureDomain , userDataRef , getManagedSecurityGroup (openStackCluster , machine ), defaultNetworkID )
593605 machineServer = & infrav1alpha1.OpenStackServer {
594606 ObjectMeta : metav1.ObjectMeta {
595607 Labels : map [string ]string {
0 commit comments