@@ -1151,11 +1151,21 @@ func (c *Controller) syncKubeOvnNet(pod *v1.Pod, podNets []*kubeovnNet) (*v1.Pod
1151
1151
targetPortNameList := strset .NewWithSize (len (podNets ))
1152
1152
portsNeedToDel := []string {}
1153
1153
annotationsNeedToDel := []string {}
1154
+ annotationsNeedToAdd := make (map [string ]string )
1154
1155
subnetUsedByPort := make (map [string ]string )
1155
1156
1156
1157
for _ , podNet := range podNets {
1157
1158
portName := ovs .PodNameToPortName (podName , pod .Namespace , podNet .ProviderName )
1158
1159
targetPortNameList .Add (portName )
1160
+ if podNet .IPRequest != "" {
1161
+ klog .Infof ("pod %s/%s use custom IP %s for provider %s" , pod .Namespace , pod .Name , podNet .IPRequest , podNet .ProviderName )
1162
+ annotationsNeedToAdd [fmt .Sprintf (util .IPAddressAnnotationTemplate , podNet .ProviderName )] = podNet .IPRequest
1163
+ }
1164
+
1165
+ if podNet .MacRequest != "" {
1166
+ klog .Infof ("pod %s/%s use custom MAC %s for provider %s" , pod .Namespace , pod .Name , podNet .MacRequest , podNet .ProviderName )
1167
+ annotationsNeedToAdd [fmt .Sprintf (util .MacAddressAnnotationTemplate , podNet .ProviderName )] = podNet .MacRequest
1168
+ }
1159
1169
}
1160
1170
1161
1171
ports , err := c .OVNNbClient .ListNormalLogicalSwitchPorts (true , map [string ]string {"pod" : key })
@@ -1177,7 +1187,7 @@ func (c *Controller) syncKubeOvnNet(pod *v1.Pod, podNets []*kubeovnNet) (*v1.Pod
1177
1187
}
1178
1188
}
1179
1189
1180
- if len (portsNeedToDel ) == 0 {
1190
+ if len (portsNeedToDel ) == 0 && len ( annotationsNeedToAdd ) == 0 {
1181
1191
return pod , nil
1182
1192
}
1183
1193
@@ -1206,6 +1216,11 @@ func (c *Controller) syncKubeOvnNet(pod *v1.Pod, podNets []*kubeovnNet) (*v1.Pod
1206
1216
}
1207
1217
}
1208
1218
}
1219
+
1220
+ for key , value := range annotationsNeedToAdd {
1221
+ patch [key ] = value
1222
+ }
1223
+
1209
1224
if len (patch ) == 0 {
1210
1225
return pod , nil
1211
1226
}
@@ -1461,6 +1476,8 @@ type kubeovnNet struct {
1461
1476
Subnet * kubeovnv1.Subnet
1462
1477
IsDefault bool
1463
1478
AllowLiveMigration bool
1479
+ IPRequest string
1480
+ MacRequest string
1464
1481
}
1465
1482
1466
1483
func (c * Controller ) getPodAttachmentNet (pod * v1.Pod ) ([]* kubeovnNet , error ) {
@@ -1538,13 +1555,21 @@ func (c *Controller) getPodAttachmentNet(pod *v1.Pod) ([]*kubeovnNet, error) {
1538
1555
return nil , err
1539
1556
}
1540
1557
}
1541
- result = append (result , & kubeovnNet {
1558
+
1559
+ ret := & kubeovnNet {
1542
1560
Type : providerTypeOriginal ,
1543
1561
ProviderName : providerName ,
1544
1562
Subnet : subnet ,
1545
1563
IsDefault : isDefault ,
1546
1564
AllowLiveMigration : allowLiveMigration ,
1547
- })
1565
+ }
1566
+
1567
+ if len (attach .IPRequest ) != 0 {
1568
+ ret .IPRequest = strings .Join (attach .IPRequest , "," )
1569
+ }
1570
+
1571
+ ret .MacRequest = attach .MacRequest
1572
+ result = append (result , ret )
1548
1573
} else {
1549
1574
providerName = fmt .Sprintf ("%s.%s" , attach .Name , attach .Namespace )
1550
1575
for _ , subnet := range subnets {
0 commit comments