@@ -158,7 +158,7 @@ func exposeService(client *kubernetes.Clientset, dynamicClient *dynamic.DynamicC
158
158
159
159
// CreateVMClient takes in the affinity rules and deploys the VMI
160
160
func CreateVMClient (kclient * kubevirtv1.KubevirtV1Client , client * kubernetes.Clientset ,
161
- dyn * dynamic.DynamicClient , name string , podAff * corev1.PodAntiAffinity , nodeAff * corev1.NodeAffinity ) (string , error ) {
161
+ dyn * dynamic.DynamicClient , name string , podAff * corev1.PodAntiAffinity , nodeAff * corev1.NodeAffinity , bridge bool ) (string , error ) {
162
162
label := map [string ]string {
163
163
"app" : name ,
164
164
"role" : name ,
@@ -171,6 +171,7 @@ func CreateVMClient(kclient *kubevirtv1.KubevirtV1Client, client *kubernetes.Cli
171
171
if err != nil {
172
172
return "" , err
173
173
}
174
+ netData := "{}"
174
175
data := fmt .Sprintf (`#cloud-config
175
176
users:
176
177
- name: fedora
@@ -184,7 +185,7 @@ chpasswd: { expire: False }
184
185
runcmd:
185
186
- export HOME=/home/fedora
186
187
- dnf install -y --nodocs uperf iperf3 git ethtool automake gcc bc lksctp-tools-devel texinfo --enablerepo=*
187
- - git clone https://github.com/HewlettPackard/netperf
188
+ - git clone https://github.com/HewlettPackard/netperf.git
188
189
- cd netperf
189
190
- git reset --hard 3bc455b23f901dae377ca0a558e1e32aa56b31c4
190
191
- curl -o netperf.diff https://raw.githubusercontent.com/cloud-bulldozer/k8s-netperf/main/containers/netperf.diff
@@ -196,7 +197,43 @@ runcmd:
196
197
- curl -o /usr/bin/super-netperf https://raw.githubusercontent.com/cloud-bulldozer/k8s-netperf/main/containers/super-netperf
197
198
- chmod 0777 /usr/bin/super-netperf
198
199
` , ssh )
199
- _ , err = CreateVMI (kclient , name , label , b64 .StdEncoding .EncodeToString ([]byte (data )), * podAff , * nodeAff )
200
+ interfaces := []v1.Interface {
201
+ {
202
+ Name : "default" ,
203
+ InterfaceBindingMethod : v1.InterfaceBindingMethod {
204
+ Bridge : & v1.InterfaceBridge {},
205
+ },
206
+ },
207
+ }
208
+ networks := []v1.Network {
209
+ {
210
+ Name : "default" ,
211
+ NetworkSource : v1.NetworkSource {
212
+ Pod : & v1.PodNetwork {},
213
+ },
214
+ },
215
+ }
216
+ if bridge {
217
+ interfaces = append (interfaces , v1.Interface {
218
+ Name : "br-netperf" ,
219
+ InterfaceBindingMethod : v1.InterfaceBindingMethod {
220
+ Bridge : & v1.InterfaceBridge {},
221
+ },
222
+ })
223
+ networks = append (networks , v1.Network {
224
+ Name : "br-netperf" ,
225
+ NetworkSource : v1.NetworkSource {
226
+ Multus : & v1.MultusNetwork {
227
+ NetworkName : "netperf/br-netperf" ,
228
+ },
229
+ },
230
+ })
231
+ netData = `version: 2
232
+ ethernets:
233
+ eth1:
234
+ addresses: [ 10.10.10.12/24 ]`
235
+ }
236
+ _ , err = CreateVMI (kclient , name , label , b64 .StdEncoding .EncodeToString ([]byte (data )), * podAff , * nodeAff , interfaces , networks , b64 .StdEncoding .EncodeToString ([]byte (netData )))
200
237
if err != nil {
201
238
return "" , err
202
239
}
@@ -213,11 +250,12 @@ runcmd:
213
250
214
251
// CreateVMServer will take the pod and node affinity and deploy the VMI
215
252
func CreateVMServer (client * kubevirtv1.KubevirtV1Client , name string , role string , podAff corev1.PodAntiAffinity ,
216
- nodeAff corev1.NodeAffinity ) (* v1.VirtualMachineInstance , error ) {
253
+ nodeAff corev1.NodeAffinity , bridge bool ) (* v1.VirtualMachineInstance , error ) {
217
254
label := map [string ]string {
218
255
"app" : name ,
219
256
"role" : role ,
220
257
}
258
+ netData := "{}"
221
259
dirname , err := os .UserHomeDir ()
222
260
if err != nil {
223
261
return nil , err
@@ -239,7 +277,7 @@ chpasswd: { expire: False }
239
277
runcmd:
240
278
- dnf install -y --nodocs uperf iperf3 git ethtool
241
279
- dnf install -y --nodocs automake gcc bc lksctp-tools-devel texinfo --enablerepo=*
242
- - git clone https://github.com/HewlettPackard/netperf
280
+ - git clone https://github.com/HewlettPackard/netperf.git
243
281
- cd netperf
244
282
- git reset --hard 3bc455b23f901dae377ca0a558e1e32aa56b31c4
245
283
- curl -o netperf.diff https://raw.githubusercontent.com/cloud-bulldozer/k8s-netperf/main/containers/netperf.diff
@@ -252,12 +290,48 @@ runcmd:
252
290
- iperf3 -s -p %d &
253
291
- netserver &
254
292
` , string (ssh ), UperfServerCtlPort , IperfServerCtlPort )
255
- return CreateVMI (client , name , label , b64 .StdEncoding .EncodeToString ([]byte (data )), podAff , nodeAff )
293
+ interfaces := []v1.Interface {
294
+ {
295
+ Name : "default" ,
296
+ InterfaceBindingMethod : v1.InterfaceBindingMethod {
297
+ Bridge : & v1.InterfaceBridge {},
298
+ },
299
+ },
300
+ }
301
+ networks := []v1.Network {
302
+ {
303
+ Name : "default" ,
304
+ NetworkSource : v1.NetworkSource {
305
+ Pod : & v1.PodNetwork {},
306
+ },
307
+ },
308
+ }
309
+ if bridge {
310
+ interfaces = append (interfaces , v1.Interface {
311
+ Name : "br-netperf" ,
312
+ InterfaceBindingMethod : v1.InterfaceBindingMethod {
313
+ Bridge : & v1.InterfaceBridge {},
314
+ },
315
+ })
316
+ networks = append (networks , v1.Network {
317
+ Name : "br-netperf" ,
318
+ NetworkSource : v1.NetworkSource {
319
+ Multus : & v1.MultusNetwork {
320
+ NetworkName : "netperf/br-netperf" ,
321
+ },
322
+ },
323
+ })
324
+ netData = `version: 2
325
+ ethernets:
326
+ eth1:
327
+ addresses: [ 10.10.10.14/24 ]`
328
+ }
329
+ return CreateVMI (client , name , label , b64 .StdEncoding .EncodeToString ([]byte (data )), podAff , nodeAff , interfaces , networks , b64 .StdEncoding .EncodeToString ([]byte (netData )))
256
330
}
257
331
258
332
// CreateVMI creates the desired Virtual Machine instance with the cloud-init config with affinity.
259
333
func CreateVMI (client * kubevirtv1.KubevirtV1Client , name string , label map [string ]string , b64data string , podAff corev1.PodAntiAffinity ,
260
- nodeAff corev1.NodeAffinity ) (* v1.VirtualMachineInstance , error ) {
334
+ nodeAff corev1.NodeAffinity , interfaces []v1. Interface , networks []v1. Network , netDatab64 string ) (* v1.VirtualMachineInstance , error ) {
261
335
delSeconds := int64 (0 )
262
336
mutliQ := true
263
337
vmi , err := client .VirtualMachineInstances (namespace ).Create (context .TODO (), & v1.VirtualMachineInstance {
@@ -300,8 +374,10 @@ func CreateVMI(client *kubevirtv1.KubevirtV1Client, name string, label map[strin
300
374
},
301
375
},
302
376
},
377
+ Interfaces : interfaces ,
303
378
},
304
379
},
380
+ Networks : networks ,
305
381
Volumes : []v1.Volume {
306
382
v1.Volume {
307
383
Name : "disk0" ,
@@ -315,7 +391,8 @@ func CreateVMI(client *kubevirtv1.KubevirtV1Client, name string, label map[strin
315
391
Name : "cloudinit" ,
316
392
VolumeSource : v1.VolumeSource {
317
393
CloudInitNoCloud : & v1.CloudInitNoCloudSource {
318
- UserDataBase64 : b64data ,
394
+ UserDataBase64 : b64data ,
395
+ NetworkDataBase64 : netDatab64 ,
319
396
},
320
397
},
321
398
},
0 commit comments