@@ -82,9 +82,6 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
8282 ID : ptr .To (openStackCluster .Status .Network .ID ),
8383 },
8484 SecurityGroups : []infrav1.SecurityGroupParam {
85- {
86- ID : ptr .To (openStackCluster .Status .WorkerSecurityGroup .ID ),
87- },
8885 {
8986 ID : ptr .To (extraSecurityGroupUUID ),
9087 },
@@ -95,9 +92,11 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
9592 tags := []string {"tag1" , "tag2" }
9693 userData := & corev1.LocalObjectReference {Name : "server-data-secret" }
9794 tests := []struct {
98- name string
99- spec * infrav1.OpenStackMachineSpec
100- want * infrav1alpha1.OpenStackServerSpec
95+ name string
96+ spec * infrav1.OpenStackMachineSpec
97+ clusterNetwork * infrav1.NetworkStatusWithSubnets
98+ want * infrav1alpha1.OpenStackServerSpec
99+ wantErr bool
101100 }{
102101 {
103102 name : "Test a minimum OpenStackMachineSpec to OpenStackServerSpec conversion" ,
@@ -106,6 +105,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
106105 Image : image ,
107106 SSHKeyName : sshKeyName ,
108107 },
108+ clusterNetwork : openStackCluster .Status .Network ,
109109 want : & infrav1alpha1.OpenStackServerSpec {
110110 Flavor : ptr .To (flavorName ),
111111 IdentityRef : identityRef ,
@@ -128,6 +128,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
128128 },
129129 },
130130 },
131+ clusterNetwork : openStackCluster .Status .Network ,
131132 want : & infrav1alpha1.OpenStackServerSpec {
132133 Flavor : ptr .To (flavorName ),
133134 IdentityRef : identityRef ,
@@ -146,6 +147,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
146147 Image : image ,
147148 SSHKeyName : sshKeyName ,
148149 },
150+ clusterNetwork : openStackCluster .Status .Network ,
149151 want : & infrav1alpha1.OpenStackServerSpec {
150152 Flavor : ptr .To (flavorName ),
151153 FlavorID : ptr .To (flavorUUID ),
@@ -164,6 +166,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
164166 Image : image ,
165167 SSHKeyName : sshKeyName ,
166168 },
169+ clusterNetwork : openStackCluster .Status .Network ,
167170 want : & infrav1alpha1.OpenStackServerSpec {
168171 FlavorID : ptr .To (flavorUUID ),
169172 IdentityRef : identityRef ,
@@ -174,12 +177,87 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
174177 UserDataRef : userData ,
175178 },
176179 },
180+ {
181+ name : "Cluster network nil, machine defines port network and overrides SG" ,
182+ spec : & infrav1.OpenStackMachineSpec {
183+ Ports : []infrav1.PortOpts {{
184+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
185+ }},
186+ SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (extraSecurityGroupUUID )}},
187+ },
188+ clusterNetwork : nil ,
189+ want : & infrav1alpha1.OpenStackServerSpec {
190+ IdentityRef : identityRef ,
191+ Ports : []infrav1.PortOpts {{
192+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
193+ SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (extraSecurityGroupUUID )}},
194+ }},
195+ Tags : tags ,
196+ UserDataRef : userData ,
197+ },
198+ },
199+ {
200+ name : "Cluster network nil, machine defines port network and falls back to cluster SG" ,
201+ spec : & infrav1.OpenStackMachineSpec {
202+ Ports : []infrav1.PortOpts {{
203+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
204+ }},
205+ },
206+ clusterNetwork : nil ,
207+ want : & infrav1alpha1.OpenStackServerSpec {
208+ IdentityRef : identityRef ,
209+ Ports : []infrav1.PortOpts {{
210+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
211+ SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (workerSecurityGroupUUID )}},
212+ }},
213+ Tags : tags ,
214+ UserDataRef : userData ,
215+ },
216+ },
217+ {
218+ name : "Error case: no cluster network and no machine ports" ,
219+ spec : & infrav1.OpenStackMachineSpec {
220+ Flavor : ptr .To (flavorName ),
221+ Image : image ,
222+ SSHKeyName : sshKeyName ,
223+ // No ports defined
224+ },
225+ clusterNetwork : nil ,
226+ want : nil ,
227+ wantErr : true ,
228+ },
229+ {
230+ name : "Empty cluster network ID, machine defines explicit ports" ,
231+ spec : & infrav1.OpenStackMachineSpec {
232+ Flavor : ptr .To (flavorName ),
233+ Image : image ,
234+ Ports : []infrav1.PortOpts {{
235+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
236+ }},
237+ },
238+ clusterNetwork : & infrav1.NetworkStatusWithSubnets {NetworkStatus : infrav1.NetworkStatus {ID : "" }},
239+ want : & infrav1alpha1.OpenStackServerSpec {
240+ Flavor : ptr .To (flavorName ),
241+ IdentityRef : identityRef ,
242+ Image : image ,
243+ Ports : []infrav1.PortOpts {{
244+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
245+ SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (workerSecurityGroupUUID )}},
246+ }},
247+ Tags : tags ,
248+ UserDataRef : userData ,
249+ },
250+ },
177251 }
178252 for i := range tests {
179253 tt := tests [i ]
180254 t .Run (tt .name , func (t * testing.T ) {
181- spec := openStackMachineSpecToOpenStackServerSpec (tt .spec , identityRef , tags , "" , userData , & openStackCluster .Status .WorkerSecurityGroup .ID , openStackCluster .Status .Network .ID )
182- if ! reflect .DeepEqual (spec , tt .want ) {
255+ spec , err := openStackMachineSpecToOpenStackServerSpec (tt .spec , identityRef , tags , "" , userData , & openStackCluster .Status .WorkerSecurityGroup .ID , tt .clusterNetwork )
256+ if (err != nil ) != tt .wantErr {
257+ t .Errorf ("openStackMachineSpecToOpenStackServerSpec() error = %v, wantErr %v" , err , tt .wantErr )
258+ return
259+ }
260+ if ! tt .wantErr && ! reflect .DeepEqual (spec , tt .want ) {
183261 t .Errorf ("openStackMachineSpecToOpenStackServerSpec() got = %+v, want %+v" , spec , tt .want )
184262 }
185263 })
0 commit comments