@@ -131,6 +131,31 @@ func GetEndpointID(args *cniSkel.CmdArgs) string {
131131 return infraEpId
132132}
133133
134+ // getPodInfo returns POD info by parsing the CNI args.
135+ func (plugin * netPlugin ) getPodInfo (args string ) (string , string , error ) {
136+ podCfg , err := cni .ParseCniArgs (args )
137+ if err != nil {
138+ log .Printf ("Error while parsing CNI Args %v" , err )
139+ return "" , "" , err
140+ }
141+
142+ k8sNamespace := string (podCfg .K8S_POD_NAMESPACE )
143+ if len (k8sNamespace ) == 0 {
144+ errMsg := "Pod Namespace not specified in CNI Args"
145+ log .Printf (errMsg )
146+ return "" , "" , plugin .Errorf (errMsg )
147+ }
148+
149+ k8sPodName := string (podCfg .K8S_POD_NAME )
150+ if len (k8sPodName ) == 0 {
151+ errMsg := "Pod Name not specified in CNI Args"
152+ log .Printf (errMsg )
153+ return "" , "" , plugin .Errorf (errMsg )
154+ }
155+
156+ return k8sPodName , k8sNamespace , nil
157+ }
158+
134159//
135160// CNI implementation
136161// https://github.com/containernetworking/cni/blob/master/SPEC.md
@@ -192,26 +217,11 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error {
192217 }()
193218
194219 // Parse Pod arguments.
195- podCfg , err := cni . ParseCniArgs (args .Args )
220+ k8sPodName , k8sNamespace , err := plugin . getPodInfo (args .Args )
196221 if err != nil {
197- log .Printf ("Error while parsing CNI Args %v" , err )
198222 return err
199223 }
200224
201- k8sNamespace := string (podCfg .K8S_POD_NAMESPACE )
202- if len (k8sNamespace ) == 0 {
203- errMsg := "Pod Namespace not specified in CNI Args"
204- log .Printf (errMsg )
205- return plugin .Errorf (errMsg )
206- }
207-
208- k8sPodName := string (podCfg .K8S_POD_NAME )
209- if len (k8sPodName ) == 0 {
210- errMsg := "Pod Name not specified in CNI Args"
211- log .Printf (errMsg )
212- return plugin .Errorf (errMsg )
213- }
214-
215225 k8sContainerID := args .ContainerID
216226 if len (k8sContainerID ) == 0 {
217227 errMsg := "Container ID not specified in CNI Args"
@@ -234,10 +244,6 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error {
234244 }
235245 }
236246
237- // Initialize values from network config.
238- networkId := nwCfg .Name
239- endpointId := GetEndpointID (args )
240-
241247 result , cnsNetworkConfig , subnetPrefix , azIpamResult , err = GetMultiTenancyCNIResult (enableInfraVnet , nwCfg , plugin , k8sPodName , k8sNamespace , args .IfName )
242248 if err != nil {
243249 log .Printf ("GetMultiTenancyCNIResult failed with error %v" , err )
@@ -252,6 +258,15 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error {
252258
253259 log .Printf ("Result from multitenancy %+v" , result )
254260
261+ // Initialize values from network config.
262+ networkId , err := getNetworkName (k8sPodName , k8sNamespace , args .IfName , nwCfg )
263+ if err != nil {
264+ log .Printf ("[cni-net] Failed to extract network name from network config. error: %v" , err )
265+ return err
266+ }
267+
268+ endpointId := GetEndpointID (args )
269+
255270 policies := cni .GetPoliciesFromNwCfg (nwCfg .AdditionalArgs )
256271
257272 // Check whether the network already exists.
@@ -265,13 +280,15 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error {
265280 */
266281 epInfo , _ := plugin .nm .GetEndpointInfo (networkId , endpointId )
267282 if epInfo != nil {
268- result , err = handleConsecutiveAdd (args .ContainerID , endpointId , nwInfo , nwCfg )
269- if err != nil {
270- log .Printf ("handleConsecutiveAdd failed with error %v" , err )
271- return err
283+ resultConsAdd , errConsAdd := handleConsecutiveAdd (args .ContainerID , endpointId , nwInfo , nwCfg )
284+ if errConsAdd != nil {
285+ log .Printf ("handleConsecutiveAdd failed with error %v" , errConsAdd )
286+ result = resultConsAdd
287+ return errConsAdd
272288 }
273289
274- if result != nil {
290+ if resultConsAdd != nil {
291+ result = resultConsAdd
275292 return nil
276293 }
277294 }
@@ -335,11 +352,14 @@ func (plugin *netPlugin) Add(args *cniSkel.CmdArgs) error {
335352 }
336353
337354 log .Printf ("[cni-net] nwDNSInfo: %v" , nwDNSInfo )
355+ // Update subnet prefix for multi-tenant scenario
356+ updateSubnetPrefix (cnsNetworkConfig , & subnetPrefix )
338357
339358 // Create the network.
340359 nwInfo := network.NetworkInfo {
341- Id : networkId ,
342- Mode : nwCfg .Mode ,
360+ Id : networkId ,
361+ Mode : nwCfg .Mode ,
362+ MasterIfName : masterIfName ,
343363 Subnets : []network.SubnetInfo {
344364 network.SubnetInfo {
345365 Family : platform .AfINET ,
@@ -492,8 +512,18 @@ func (plugin *netPlugin) Get(args *cniSkel.CmdArgs) error {
492512
493513 log .Printf ("[cni-net] Read network configuration %+v." , nwCfg )
494514
515+ // Parse Pod arguments.
516+ k8sPodName , k8sNamespace , err := plugin .getPodInfo (args .Args )
517+ if err != nil {
518+ return err
519+ }
520+
495521 // Initialize values from network config.
496- networkId := nwCfg .Name
522+ networkId , err := getNetworkName (k8sPodName , k8sNamespace , args .IfName , nwCfg )
523+ if err != nil {
524+ log .Printf ("[cni-net] Failed to extract network name from network config. error: %v" , err )
525+ }
526+
497527 endpointId := GetEndpointID (args )
498528
499529 // Query the network.
@@ -552,8 +582,18 @@ func (plugin *netPlugin) Delete(args *cniSkel.CmdArgs) error {
552582
553583 log .Printf ("[cni-net] Read network configuration %+v." , nwCfg )
554584
585+ // Parse Pod arguments.
586+ k8sPodName , k8sNamespace , err := plugin .getPodInfo (args .Args )
587+ if err != nil {
588+ return err
589+ }
590+
555591 // Initialize values from network config.
556- networkId := nwCfg .Name
592+ networkId , err := getNetworkName (k8sPodName , k8sNamespace , args .IfName , nwCfg )
593+ if err != nil {
594+ log .Printf ("[cni-net] Failed to extract network name from network config. error: %v" , err )
595+ }
596+
557597 endpointId := GetEndpointID (args )
558598
559599 // Query the network.
0 commit comments