@@ -1135,11 +1135,21 @@ func (c *Controller) syncKubeOvnNet(pod *v1.Pod, podNets []*kubeovnNet) (*v1.Pod
1135
1135
targetPortNameList := strset .NewWithSize (len (podNets ))
1136
1136
portsNeedToDel := []string {}
1137
1137
annotationsNeedToDel := []string {}
1138
+ annotationsNeedToAdd := make (map [string ]string )
1138
1139
subnetUsedByPort := make (map [string ]string )
1139
1140
1140
1141
for _ , podNet := range podNets {
1141
1142
portName := ovs .PodNameToPortName (podName , pod .Namespace , podNet .ProviderName )
1142
1143
targetPortNameList .Add (portName )
1144
+ if podNet .IPRequest != "" {
1145
+ klog .Infof ("pod %s/%s use custom IP %s for provider %s" , pod .Namespace , pod .Name , podNet .IPRequest , podNet .ProviderName )
1146
+ annotationsNeedToAdd [fmt .Sprintf (util .IPAddressAnnotationTemplate , podNet .ProviderName )] = podNet .IPRequest
1147
+ }
1148
+
1149
+ if podNet .MacRequest != "" {
1150
+ klog .Infof ("pod %s/%s use custom MAC %s for provider %s" , pod .Namespace , pod .Name , podNet .MacRequest , podNet .ProviderName )
1151
+ annotationsNeedToAdd [fmt .Sprintf (util .MacAddressAnnotationTemplate , podNet .ProviderName )] = podNet .MacRequest
1152
+ }
1143
1153
}
1144
1154
1145
1155
ports , err := c .OVNNbClient .ListNormalLogicalSwitchPorts (true , map [string ]string {"pod" : key })
@@ -1161,7 +1171,7 @@ func (c *Controller) syncKubeOvnNet(pod *v1.Pod, podNets []*kubeovnNet) (*v1.Pod
1161
1171
}
1162
1172
}
1163
1173
1164
- if len (portsNeedToDel ) == 0 {
1174
+ if len (portsNeedToDel ) == 0 && len ( annotationsNeedToAdd ) == 0 {
1165
1175
return pod , nil
1166
1176
}
1167
1177
@@ -1190,6 +1200,15 @@ func (c *Controller) syncKubeOvnNet(pod *v1.Pod, podNets []*kubeovnNet) (*v1.Pod
1190
1200
}
1191
1201
}
1192
1202
}
1203
+
1204
+ for _ , providerName := range annotationsNeedToAdd {
1205
+ for key , value := range pod .Annotations {
1206
+ if strings .HasPrefix (key , providerName ) {
1207
+ patch [key ] = value
1208
+ }
1209
+ }
1210
+ }
1211
+
1193
1212
if len (patch ) == 0 {
1194
1213
return pod , nil
1195
1214
}
@@ -1445,6 +1464,8 @@ type kubeovnNet struct {
1445
1464
Subnet * kubeovnv1.Subnet
1446
1465
IsDefault bool
1447
1466
AllowLiveMigration bool
1467
+ IPRequest string
1468
+ MacRequest string
1448
1469
}
1449
1470
1450
1471
func (c * Controller ) getPodAttachmentNet (pod * v1.Pod ) ([]* kubeovnNet , error ) {
@@ -1522,13 +1543,21 @@ func (c *Controller) getPodAttachmentNet(pod *v1.Pod) ([]*kubeovnNet, error) {
1522
1543
return nil , err
1523
1544
}
1524
1545
}
1525
- result = append (result , & kubeovnNet {
1546
+
1547
+ ret := & kubeovnNet {
1526
1548
Type : providerTypeOriginal ,
1527
1549
ProviderName : providerName ,
1528
1550
Subnet : subnet ,
1529
1551
IsDefault : isDefault ,
1530
1552
AllowLiveMigration : allowLiveMigration ,
1531
- })
1553
+ }
1554
+
1555
+ if len (attach .IPRequest ) != 0 {
1556
+ ret .IPRequest = attach .IPRequest [0 ]
1557
+ }
1558
+
1559
+ ret .MacRequest = attach .MacRequest
1560
+ result = append (result , ret )
1532
1561
} else {
1533
1562
providerName = fmt .Sprintf ("%s.%s" , attach .Name , attach .Namespace )
1534
1563
for _ , subnet := range subnets {
0 commit comments