api,libcni: add network config list-based plugin chaining
authorDan Williams <dcbw@redhat.com>
Sat, 17 Dec 2016 00:56:39 +0000 (18:56 -0600)
committerDan Williams <dcbw@redhat.com>
Fri, 20 Jan 2017 04:28:21 +0000 (22:28 -0600)
Using a new ".configlist" file format that allows specifying
a list of CNI network configurations to run, add new libcni
helper functions to call each plugin in the list, injecting
the overall name, CNI version, and previous plugin's Result
structure into the configuration of the next plugin.

types/types.go

index 17caa49..c1fddcd 100644 (file)
@@ -59,14 +59,23 @@ func (n *IPNet) UnmarshalJSON(data []byte) error {
 type NetConf struct {
        CNIVersion string `json:"cniVersion,omitempty"`
 
-       Name string `json:"name,omitempty"`
-       Type string `json:"type,omitempty"`
-       IPAM struct {
+       Name       string  `json:"name,omitempty"`
+       Type       string  `json:"type,omitempty"`
+       PrevResult *Result `json:"prevResult,omitempty"`
+       IPAM       struct {
                Type string `json:"type,omitempty"`
        } `json:"ipam,omitempty"`
        DNS DNS `json:"dns"`
 }
 
+// NetConfList describes an ordered list of networks.
+type NetConfList struct {
+       CNIVersion string `json:"cniVersion,omitempty"`
+
+       Name    string     `json:"name,omitempty"`
+       Plugins []*NetConf `json:"plugins,omitempty"`
+}
+
 // Result is what gets returned from the plugin (via stdout) to the caller
 type Result struct {
        IP4 *IPConfig `json:"ip4,omitempty"`