Add cniVersion to Result
authorPengfei Ni <feiskyer@gmail.com>
Wed, 3 May 2017 13:38:28 +0000 (21:38 +0800)
committerPengfei Ni <feiskyer@gmail.com>
Wed, 3 May 2017 13:38:42 +0000 (21:38 +0800)
Signed-off-by: Pengfei Ni <feiskyer@gmail.com>
pkg/types/020/types.go
pkg/types/020/types_test.go
pkg/types/current/types.go
pkg/types/current/types_test.go

index 666cfe9..2833aba 100644 (file)
@@ -23,9 +23,9 @@ import (
        "github.com/containernetworking/cni/pkg/types"
 )
 
-const implementedSpecVersion string = "0.2.0"
+const ImplementedSpecVersion string = "0.2.0"
 
-var SupportedVersions = []string{"", "0.1.0", implementedSpecVersion}
+var SupportedVersions = []string{"", "0.1.0", ImplementedSpecVersion}
 
 // Compatibility types for CNI version 0.1.0 and 0.2.0
 
@@ -39,7 +39,7 @@ func NewResult(data []byte) (types.Result, error) {
 
 func GetResult(r types.Result) (*Result, error) {
        // We expect version 0.1.0/0.2.0 results
-       result020, err := r.GetAsVersion(implementedSpecVersion)
+       result020, err := r.GetAsVersion(ImplementedSpecVersion)
        if err != nil {
                return nil, err
        }
@@ -52,18 +52,20 @@ func GetResult(r types.Result) (*Result, error) {
 
 // Result is what gets returned from the plugin (via stdout) to the caller
 type Result struct {
-       IP4 *IPConfig `json:"ip4,omitempty"`
-       IP6 *IPConfig `json:"ip6,omitempty"`
-       DNS types.DNS `json:"dns,omitempty"`
+       CNIVersion string    `json:"cniVersion,omitempty"`
+       IP4        *IPConfig `json:"ip4,omitempty"`
+       IP6        *IPConfig `json:"ip6,omitempty"`
+       DNS        types.DNS `json:"dns,omitempty"`
 }
 
 func (r *Result) Version() string {
-       return implementedSpecVersion
+       return ImplementedSpecVersion
 }
 
 func (r *Result) GetAsVersion(version string) (types.Result, error) {
        for _, supportedVersion := range SupportedVersions {
                if version == supportedVersion {
+                       r.CNIVersion = version
                        return r, nil
                }
        }
index 1bcdda7..4f08ca4 100644 (file)
@@ -48,6 +48,7 @@ var _ = Describe("Ensures compatibility with the 0.1.0/0.2.0 spec", func() {
 
                // Set every field of the struct to ensure source compatibility
                res := types020.Result{
+                       CNIVersion: types020.ImplementedSpecVersion,
                        IP4: &types020.IPConfig{
                                IP:      *ipv4,
                                Gateway: net.ParseIP("1.2.3.1"),
@@ -88,6 +89,7 @@ var _ = Describe("Ensures compatibility with the 0.1.0/0.2.0 spec", func() {
                Expect(err).NotTo(HaveOccurred())
 
                Expect(string(out)).To(Equal(`{
+    "cniVersion": "0.2.0",
     "ip4": {
         "ip": "1.2.3.30/24",
         "gateway": "1.2.3.1",
index b89a5d3..26e1dd9 100644 (file)
@@ -63,8 +63,9 @@ func convertFrom020(result types.Result) (*Result, error) {
        }
 
        newResult := &Result{
-               DNS:    oldResult.DNS,
-               Routes: []*types.Route{},
+               CNIVersion: implementedSpecVersion,
+               DNS:        oldResult.DNS,
+               Routes:     []*types.Route{},
        }
 
        if oldResult.IP4 != nil {
@@ -117,6 +118,7 @@ func convertFrom030(result types.Result) (*Result, error) {
        if !ok {
                return nil, fmt.Errorf("failed to convert result")
        }
+       newResult.CNIVersion = implementedSpecVersion
        return newResult, nil
 }
 
@@ -134,6 +136,7 @@ func NewResultFromResult(result types.Result) (*Result, error) {
 
 // Result is what gets returned from the plugin (via stdout) to the caller
 type Result struct {
+       CNIVersion string         `json:"cniVersion,omitempty"`
        Interfaces []*Interface   `json:"interfaces,omitempty"`
        IPs        []*IPConfig    `json:"ips,omitempty"`
        Routes     []*types.Route `json:"routes,omitempty"`
@@ -143,7 +146,8 @@ type Result struct {
 // Convert to the older 0.2.0 CNI spec Result type
 func (r *Result) convertTo020() (*types020.Result, error) {
        oldResult := &types020.Result{
-               DNS: r.DNS,
+               CNIVersion: types020.ImplementedSpecVersion,
+               DNS:        r.DNS,
        }
 
        for _, ip := range r.IPs {
@@ -195,6 +199,7 @@ func (r *Result) Version() string {
 func (r *Result) GetAsVersion(version string) (types.Result, error) {
        switch version {
        case "0.3.0", implementedSpecVersion:
+               r.CNIVersion = version
                return r, nil
        case types020.SupportedVersions[0], types020.SupportedVersions[1], types020.SupportedVersions[2]:
                return r.convertTo020()
index 9d29cf2..eb7e7c6 100644 (file)
@@ -47,6 +47,7 @@ func testResult() *current.Result {
 
        // Set every field of the struct to ensure source compatibility
        return &current.Result{
+               CNIVersion: "0.3.1",
                Interfaces: []*current.Interface{
                        {
                                Name:    "eth0",
@@ -103,6 +104,7 @@ var _ = Describe("Current types operations", func() {
                Expect(err).NotTo(HaveOccurred())
 
                Expect(string(out)).To(Equal(`{
+    "cniVersion": "0.3.1",
     "interfaces": [
         {
             "name": "eth0",
@@ -172,6 +174,7 @@ var _ = Describe("Current types operations", func() {
                Expect(err).NotTo(HaveOccurred())
 
                Expect(string(out)).To(Equal(`{
+    "cniVersion": "0.1.0",
     "ip4": {
         "ip": "1.2.3.30/24",
         "gateway": "1.2.3.1",