@@ -82,9 +82,6 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
82
82
ID : ptr .To (openStackCluster .Status .Network .ID ),
83
83
},
84
84
SecurityGroups : []infrav1.SecurityGroupParam {
85
- {
86
- ID : ptr .To (openStackCluster .Status .WorkerSecurityGroup .ID ),
87
- },
88
85
{
89
86
ID : ptr .To (extraSecurityGroupUUID ),
90
87
},
@@ -95,9 +92,11 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
95
92
tags := []string {"tag1" , "tag2" }
96
93
userData := & corev1.LocalObjectReference {Name : "server-data-secret" }
97
94
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
101
100
}{
102
101
{
103
102
name : "Test a minimum OpenStackMachineSpec to OpenStackServerSpec conversion" ,
@@ -106,6 +105,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
106
105
Image : image ,
107
106
SSHKeyName : sshKeyName ,
108
107
},
108
+ clusterNetwork : openStackCluster .Status .Network ,
109
109
want : & infrav1alpha1.OpenStackServerSpec {
110
110
Flavor : ptr .To (flavorName ),
111
111
IdentityRef : identityRef ,
@@ -128,6 +128,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
128
128
},
129
129
},
130
130
},
131
+ clusterNetwork : openStackCluster .Status .Network ,
131
132
want : & infrav1alpha1.OpenStackServerSpec {
132
133
Flavor : ptr .To (flavorName ),
133
134
IdentityRef : identityRef ,
@@ -146,6 +147,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
146
147
Image : image ,
147
148
SSHKeyName : sshKeyName ,
148
149
},
150
+ clusterNetwork : openStackCluster .Status .Network ,
149
151
want : & infrav1alpha1.OpenStackServerSpec {
150
152
Flavor : ptr .To (flavorName ),
151
153
FlavorID : ptr .To (flavorUUID ),
@@ -164,6 +166,7 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
164
166
Image : image ,
165
167
SSHKeyName : sshKeyName ,
166
168
},
169
+ clusterNetwork : openStackCluster .Status .Network ,
167
170
want : & infrav1alpha1.OpenStackServerSpec {
168
171
FlavorID : ptr .To (flavorUUID ),
169
172
IdentityRef : identityRef ,
@@ -174,12 +177,87 @@ func TestOpenStackMachineSpecToOpenStackServerSpec(t *testing.T) {
174
177
UserDataRef : userData ,
175
178
},
176
179
},
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
+ },
177
251
}
178
252
for i := range tests {
179
253
tt := tests [i ]
180
254
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 ) {
183
261
t .Errorf ("openStackMachineSpecToOpenStackServerSpec() got = %+v, want %+v" , spec , tt .want )
184
262
}
185
263
})
0 commit comments