@@ -95,9 +95,11 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
95
95
tags := []string {"tag1" , "tag2" }
96
96
userData := & corev1.LocalObjectReference {Name : "server-data-secret" }
97
97
tests := []struct {
98
- name string
99
- spec * infrav1.OpenStackMachineSpec
100
- want * infrav1alpha1.OpenStackServerSpec
98
+ name string
99
+ spec * infrav1.OpenStackMachineSpec
100
+ clusterNetwork * infrav1.NetworkStatusWithSubnets
101
+ want * infrav1alpha1.OpenStackServerSpec
102
+ wantErr bool
101
103
}{
102
104
{
103
105
name : "Test a minimum OpenStackMachineSpec to OpenStackServerSpec conversion" ,
@@ -106,6 +108,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
106
108
Image : image ,
107
109
SSHKeyName : sshKeyName ,
108
110
},
111
+ clusterNetwork : openStackCluster .Status .Network ,
109
112
want : & infrav1alpha1.OpenStackServerSpec {
110
113
Flavor : ptr .To (flavorName ),
111
114
IdentityRef : identityRef ,
@@ -128,6 +131,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
128
131
},
129
132
},
130
133
},
134
+ clusterNetwork : openStackCluster .Status .Network ,
131
135
want : & infrav1alpha1.OpenStackServerSpec {
132
136
Flavor : ptr .To (flavorName ),
133
137
IdentityRef : identityRef ,
@@ -146,6 +150,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
146
150
Image : image ,
147
151
SSHKeyName : sshKeyName ,
148
152
},
153
+ clusterNetwork : openStackCluster .Status .Network ,
149
154
want : & infrav1alpha1.OpenStackServerSpec {
150
155
Flavor : ptr .To (flavorName ),
151
156
FlavorID : ptr .To (flavorUUID ),
@@ -164,6 +169,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
164
169
Image : image ,
165
170
SSHKeyName : sshKeyName ,
166
171
},
172
+ clusterNetwork : openStackCluster .Status .Network ,
167
173
want : & infrav1alpha1.OpenStackServerSpec {
168
174
FlavorID : ptr .To (flavorUUID ),
169
175
IdentityRef : identityRef ,
@@ -174,12 +180,90 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
174
180
UserDataRef : userData ,
175
181
},
176
182
},
183
+ {
184
+ name : "Cluster network nil, machine defines port network and overrides SG" ,
185
+ spec : & infrav1.OpenStackMachineSpec {
186
+ Ports : []infrav1.PortOpts {{
187
+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
188
+ }},
189
+ SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (extraSecurityGroupUUID )}},
190
+ },
191
+ clusterNetwork : nil ,
192
+ want : & infrav1alpha1.OpenStackServerSpec {
193
+ IdentityRef : identityRef ,
194
+ Ports : []infrav1.PortOpts {{
195
+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
196
+ SecurityGroups : []infrav1.SecurityGroupParam {
197
+ {ID : ptr .To (workerSecurityGroupUUID )},
198
+ {ID : ptr .To (extraSecurityGroupUUID )},
199
+ },
200
+ }},
201
+ Tags : tags ,
202
+ UserDataRef : userData ,
203
+ },
204
+ },
205
+ {
206
+ name : "Cluster network nil, machine defines port network and falls back to cluster SG" ,
207
+ spec : & infrav1.OpenStackMachineSpec {
208
+ Ports : []infrav1.PortOpts {{
209
+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
210
+ }},
211
+ },
212
+ clusterNetwork : nil ,
213
+ want : & infrav1alpha1.OpenStackServerSpec {
214
+ IdentityRef : identityRef ,
215
+ Ports : []infrav1.PortOpts {{
216
+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
217
+ SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (workerSecurityGroupUUID )}},
218
+ }},
219
+ Tags : tags ,
220
+ UserDataRef : userData ,
221
+ },
222
+ },
223
+ {
224
+ name : "Error case: no cluster network and no machine ports" ,
225
+ spec : & infrav1.OpenStackMachineSpec {
226
+ Flavor : ptr .To (flavorName ),
227
+ Image : image ,
228
+ SSHKeyName : sshKeyName ,
229
+ // No ports defined
230
+ },
231
+ clusterNetwork : nil ,
232
+ want : nil ,
233
+ wantErr : true ,
234
+ },
235
+ {
236
+ name : "Empty cluster network ID, machine defines explicit ports" ,
237
+ spec : & infrav1.OpenStackMachineSpec {
238
+ Flavor : ptr .To (flavorName ),
239
+ Image : image ,
240
+ Ports : []infrav1.PortOpts {{
241
+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
242
+ }},
243
+ },
244
+ clusterNetwork : & infrav1.NetworkStatusWithSubnets {NetworkStatus : infrav1.NetworkStatus {ID : "" }},
245
+ want : & infrav1alpha1.OpenStackServerSpec {
246
+ Flavor : ptr .To (flavorName ),
247
+ IdentityRef : identityRef ,
248
+ Image : image ,
249
+ Ports : []infrav1.PortOpts {{
250
+ Network : & infrav1.NetworkParam {ID : ptr .To (networkUUID )},
251
+ SecurityGroups : []infrav1.SecurityGroupParam {{ID : ptr .To (workerSecurityGroupUUID )}},
252
+ }},
253
+ Tags : tags ,
254
+ UserDataRef : userData ,
255
+ },
256
+ },
177
257
}
178
258
for i := range tests {
179
259
tt := tests [i ]
180
260
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 ) {
261
+ spec , err := openStackMachineSpecToOpenStackServerSpec (tt .spec , identityRef , tags , "" , userData , & openStackCluster .Status .WorkerSecurityGroup .ID , tt .clusterNetwork )
262
+ if (err != nil ) != tt .wantErr {
263
+ t .Errorf ("openStackMachineSpecToOpenStackServerSpec() error = %v, wantErr %v" , err , tt .wantErr )
264
+ return
265
+ }
266
+ if ! tt .wantErr && ! reflect .DeepEqual (spec , tt .want ) {
183
267
t .Errorf ("openStackMachineSpecToOpenStackServerSpec() got = %+v, want %+v" , spec , tt .want )
184
268
}
185
269
})
0 commit comments