You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by to...@apache.org on 2021/02/03 07:08:01 UTC

[apisix-ingress-controller] branch master updated: chore: group meta info for APISIX resources to Metadata structure (#225)

This is an automated email from the ASF dual-hosted git repository.

tokers pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git


The following commit(s) were added to refs/heads/master by this push:
     new 2d19b20  chore: group meta info for APISIX resources to Metadata structure (#225)
2d19b20 is described below

commit 2d19b2071b3a0c72b7b8e70f3f840e4bf522a6d9
Author: Alex Zhang <zc...@gmail.com>
AuthorDate: Wed Feb 3 15:07:52 2021 +0800

    chore: group meta info for APISIX resources to Metadata structure (#225)
---
 pkg/apisix/cache/memdb_test.go               | 60 ++++++++++++++++++----------
 pkg/apisix/resource.go                       | 26 +++++++-----
 pkg/apisix/route_test.go                     | 24 ++++++-----
 pkg/apisix/upstream_test.go                  | 48 ++++++++++++----------
 pkg/ingress/apisix/route.go                  | 34 +++++++++-------
 pkg/ingress/apisix/service.go                | 16 ++++----
 pkg/ingress/apisix/upstream.go               | 14 ++++---
 pkg/ingress/apisix/upstream_test.go          | 18 +++++----
 pkg/types/apisix/v1/types.go                 | 55 +++++++++++++------------
 pkg/types/apisix/v1/zz_generated.deepcopy.go |  2 +
 10 files changed, 175 insertions(+), 122 deletions(-)

diff --git a/pkg/apisix/cache/memdb_test.go b/pkg/apisix/cache/memdb_test.go
index e132962..f36b3a5 100644
--- a/pkg/apisix/cache/memdb_test.go
+++ b/pkg/apisix/cache/memdb_test.go
@@ -28,8 +28,10 @@ func TestMemDBCacheRoute(t *testing.T) {
 	assert.Nil(t, err, "NewMemDBCache")
 
 	r1 := &v1.Route{
-		FullName:  "abc",
-		Name:      "abc",
+		Metadata: v1.Metadata{
+			FullName: "abc",
+			Name:     "abc",
+		},
 		ServiceId: "1",
 	}
 	assert.Nil(t, c.InsertRoute(r1), "inserting route 1")
@@ -38,13 +40,17 @@ func TestMemDBCacheRoute(t *testing.T) {
 	assert.Equal(t, r1, r)
 
 	r2 := &v1.Route{
-		FullName:  "def",
-		Name:      "def",
+		Metadata: v1.Metadata{
+			FullName: "def",
+			Name:     "def",
+		},
 		ServiceId: "2",
 	}
 	r3 := &v1.Route{
-		FullName:  "ghi",
-		Name:      "ghi",
+		Metadata: v1.Metadata{
+			FullName: "ghi",
+			Name:     "ghi",
+		},
 		ServiceId: "3",
 	}
 	assert.Nil(t, c.InsertRoute(r2), "inserting route r2")
@@ -65,8 +71,10 @@ func TestMemDBCacheRoute(t *testing.T) {
 	assert.Equal(t, routes[1], r2)
 
 	r4 := &v1.Route{
-		FullName:  "name4",
-		Name:      "name4",
+		Metadata: v1.Metadata{
+			FullName: "name4",
+			Name:     "name4",
+		},
 		ServiceId: "4",
 	}
 	assert.Error(t, ErrNotFound, c.DeleteRoute(r4))
@@ -167,8 +175,10 @@ func TestMemDBCacheUpstream(t *testing.T) {
 	assert.Nil(t, err, "NewMemDBCache")
 
 	u1 := &v1.Upstream{
-		FullName: "abc",
-		Name:     "abc",
+		Metadata: v1.Metadata{
+			FullName: "abc",
+			Name:     "abc",
+		},
 	}
 	assert.Nil(t, c.InsertUpstream(u1), "inserting upstream 1")
 
@@ -176,12 +186,16 @@ func TestMemDBCacheUpstream(t *testing.T) {
 	assert.Equal(t, u1, u)
 
 	u2 := &v1.Upstream{
-		FullName: "def",
-		Name:     "def",
+		Metadata: v1.Metadata{
+			FullName: "def",
+			Name:     "def",
+		},
 	}
 	u3 := &v1.Upstream{
-		FullName: "ghi",
-		Name:     "ghi",
+		Metadata: v1.Metadata{
+			FullName: "ghi",
+			Name:     "ghi",
+		},
 	}
 	assert.Nil(t, c.InsertUpstream(u2), "inserting upstream 2")
 	assert.Nil(t, c.InsertUpstream(u3), "inserting upstream 3")
@@ -201,16 +215,20 @@ func TestMemDBCacheUpstream(t *testing.T) {
 	assert.Equal(t, upstreams[1], u2)
 
 	u4 := &v1.Upstream{
-		FullName: "name4",
-		Name:     "name4",
+		Metadata: v1.Metadata{
+			FullName: "name4",
+			Name:     "name4",
+		},
 	}
 	assert.Error(t, ErrNotFound, c.DeleteUpstream(u4))
 }
 
 func TestMemDBCacheReference(t *testing.T) {
 	r := &v1.Route{
-		FullName:  "route",
-		Name:      "route",
+		Metadata: v1.Metadata{
+			FullName: "route",
+			Name:     "route",
+		},
 		ServiceId: "service",
 	}
 	s := &v1.Service{
@@ -219,8 +237,10 @@ func TestMemDBCacheReference(t *testing.T) {
 		UpstreamId: "upstream",
 	}
 	u := &v1.Upstream{
-		FullName: "upstream",
-		Name:     "upstream",
+		Metadata: v1.Metadata{
+			FullName: "upstream",
+			Name:     "upstream",
+		},
 	}
 
 	db, err := NewMemDBCache()
diff --git a/pkg/apisix/resource.go b/pkg/apisix/resource.go
index 100a59e..bb4db43 100644
--- a/pkg/apisix/resource.go
+++ b/pkg/apisix/resource.go
@@ -98,10 +98,12 @@ func (i *item) route(clusterName string) (*v1.Route, error) {
 	fullName := genFullName(route.Desc, clusterName)
 
 	return &v1.Route{
-		ID:         list[len(list)-1],
-		FullName:   fullName,
-		Group:      clusterName,
-		Name:       route.Desc,
+		Metadata: v1.Metadata{
+			ID:       list[len(list)-1],
+			FullName: fullName,
+			Group:    clusterName,
+			Name:     route.Desc,
+		},
 		Host:       route.Host,
 		Path:       route.URI,
 		Methods:    route.Methods,
@@ -141,13 +143,15 @@ func (i *item) upstream(clusterName string) (*v1.Upstream, error) {
 	fullName := genFullName(ups.Desc, clusterName)
 
 	return &v1.Upstream{
-		ID:       id,
-		FullName: fullName,
-		Group:    clusterName,
-		Name:     name,
-		Type:     LBType,
-		Key:      key,
-		Nodes:    nodes,
+		Metadata: v1.Metadata{
+			ID:       id,
+			FullName: fullName,
+			Group:    clusterName,
+			Name:     name,
+		},
+		Type:  LBType,
+		Key:   key,
+		Nodes: nodes,
 	}, nil
 }
 
diff --git a/pkg/apisix/route_test.go b/pkg/apisix/route_test.go
index 6205363..5613798 100644
--- a/pkg/apisix/route_test.go
+++ b/pkg/apisix/route_test.go
@@ -180,11 +180,13 @@ func TestRouteClient(t *testing.T) {
 
 	// Create
 	obj, err := cli.Create(context.Background(), &v1.Route{
-		ID:         "1",
+		Metadata: v1.Metadata{
+			ID:       "1",
+			Name:     "test",
+			FullName: "test",
+		},
 		Host:       "www.foo.com",
 		Path:       "/bar",
-		Name:       "test",
-		FullName:   "test",
 		ServiceId:  "1",
 		UpstreamId: "1",
 	})
@@ -192,11 +194,13 @@ func TestRouteClient(t *testing.T) {
 	assert.Equal(t, obj.ID, "1")
 
 	obj, err = cli.Create(context.Background(), &v1.Route{
-		ID:         "2",
+		Metadata: v1.Metadata{
+			ID:       "2",
+			Name:     "test",
+			FullName: "test",
+		},
 		Host:       "www.foo.com",
 		Path:       "/bar",
-		Name:       "test",
-		FullName:   "test",
 		ServiceId:  "1",
 		UpstreamId: "1",
 	})
@@ -219,11 +223,13 @@ func TestRouteClient(t *testing.T) {
 
 	// Patch then List
 	_, err = cli.Update(context.Background(), &v1.Route{
-		ID:         "2",
+		Metadata: v1.Metadata{
+			ID:       "2",
+			Name:     "test",
+			FullName: "test",
+		},
 		Host:       "www.foo.com",
 		Path:       "/bar",
-		Name:       "test",
-		FullName:   "test",
 		ServiceId:  "112",
 		UpstreamId: "112",
 	})
diff --git a/pkg/apisix/upstream_test.go b/pkg/apisix/upstream_test.go
index b929cbe..d287b59 100644
--- a/pkg/apisix/upstream_test.go
+++ b/pkg/apisix/upstream_test.go
@@ -174,26 +174,30 @@ func TestUpstreamClient(t *testing.T) {
 	}
 
 	obj, err := cli.Create(context.TODO(), &v1.Upstream{
-		ID:       "1",
-		FullName: fullName,
-		Group:    group,
-		Name:     name,
-		Type:     lbType,
-		Key:      key,
-		Nodes:    nodes,
+		Metadata: v1.Metadata{
+			ID:       "1",
+			FullName: fullName,
+			Group:    group,
+			Name:     name,
+		},
+		Type:  lbType,
+		Key:   key,
+		Nodes: nodes,
 	})
 	assert.Nil(t, err)
 	assert.Equal(t, obj.ID, "1")
 
 	id2 := "2"
 	obj, err = cli.Create(context.TODO(), &v1.Upstream{
-		ID:       id2,
-		FullName: fullName,
-		Group:    group,
-		Name:     name,
-		Type:     lbType,
-		Key:      key,
-		Nodes:    nodes,
+		Metadata: v1.Metadata{
+			ID:       id2,
+			FullName: fullName,
+			Group:    group,
+			Name:     name,
+		},
+		Type:  lbType,
+		Key:   key,
+		Nodes: nodes,
 	})
 	assert.Nil(t, err)
 	assert.Equal(t, obj.ID, "2")
@@ -214,13 +218,15 @@ func TestUpstreamClient(t *testing.T) {
 
 	// Patch then List
 	_, err = cli.Update(context.Background(), &v1.Upstream{
-		ID:       "2",
-		FullName: fullName,
-		Group:    group,
-		Name:     name,
-		Type:     "chash",
-		Key:      key,
-		Nodes:    nodes,
+		Metadata: v1.Metadata{
+			ID:       "2",
+			FullName: fullName,
+			Group:    group,
+			Name:     name,
+		},
+		Type:  "chash",
+		Key:   key,
+		Nodes: nodes,
 	})
 	assert.Nil(t, err)
 	objs, err = cli.List(context.Background())
diff --git a/pkg/ingress/apisix/route.go b/pkg/ingress/apisix/route.go
index e43d3a8..64d57d5 100644
--- a/pkg/ingress/apisix/route.go
+++ b/pkg/ingress/apisix/route.go
@@ -90,15 +90,17 @@ func (ar *ApisixRoute) Convert() ([]*apisix.Route, []*apisix.Service, []*apisix.
 
 			// routes
 			route := &apisix.Route{
-				Group:           group,
-				FullName:        fullRouteName,
-				ResourceVersion: rv,
-				Name:            apisixRouteName,
-				Host:            host,
-				Path:            uri,
-				ServiceName:     apisixSvcName,
-				UpstreamName:    apisixUpstreamName,
-				Plugins:         pluginRet,
+				Metadata: apisix.Metadata{
+					Group:           group,
+					FullName:        fullRouteName,
+					ResourceVersion: rv,
+					Name:            apisixRouteName,
+				},
+				Host:         host,
+				Path:         uri,
+				ServiceName:  apisixSvcName,
+				UpstreamName: apisixUpstreamName,
+				Plugins:      pluginRet,
 			}
 			routes = append(routes, route)
 			// services
@@ -127,12 +129,14 @@ func (ar *ApisixRoute) Convert() ([]*apisix.Route, []*apisix.Service, []*apisix.
 			port, _ := strconv.Atoi(svcPort)
 			nodes := endpoint.BuildEps(ns, svcName, port)
 			upstream := &apisix.Upstream{
-				FullName:        fullUpstreamName,
-				Group:           group,
-				ResourceVersion: rv,
-				Name:            apisixUpstreamName,
-				Type:            LBType,
-				Nodes:           nodes,
+				Metadata: apisix.Metadata{
+					FullName:        fullUpstreamName,
+					Group:           group,
+					ResourceVersion: rv,
+					Name:            apisixUpstreamName,
+				},
+				Type:  LBType,
+				Nodes: nodes,
 			}
 			upstreamMap[upstream.FullName] = upstream
 		}
diff --git a/pkg/ingress/apisix/service.go b/pkg/ingress/apisix/service.go
index 18d97d8..c09e8c7 100644
--- a/pkg/ingress/apisix/service.go
+++ b/pkg/ingress/apisix/service.go
@@ -89,13 +89,15 @@ func (as *ApisixServiceCRD) Convert() ([]*apisix.Service, []*apisix.Upstream, er
 	LBType := DefaultLBType
 	nodes := endpoint.BuildEps(ns, upstreamName, int(port))
 	upstream := &apisix.Upstream{
-		FullName:        fullUpstreamName,
-		Group:           group,
-		ResourceVersion: rv,
-		Name:            apisixUpstreamName,
-		Type:            LBType,
-		Nodes:           nodes,
-		FromKind:        fromKind,
+		Metadata: apisix.Metadata{
+			FullName:        fullUpstreamName,
+			Group:           group,
+			ResourceVersion: rv,
+			Name:            apisixUpstreamName,
+		},
+		Type:     LBType,
+		Nodes:    nodes,
+		FromKind: fromKind,
 	}
 	upstreams = append(upstreams, upstream)
 	return services, upstreams, nil
diff --git a/pkg/ingress/apisix/upstream.go b/pkg/ingress/apisix/upstream.go
index da6b5f2..31b6da3 100644
--- a/pkg/ingress/apisix/upstream.go
+++ b/pkg/ingress/apisix/upstream.go
@@ -64,12 +64,14 @@ func (aub *ApisixUpstreamBuilder) Convert() ([]*apisix.Upstream, error) {
 			fullName = group + "_" + apisixUpstreamName
 		}
 		upstream := &apisix.Upstream{
-			FullName:        fullName,
-			Group:           group,
-			ResourceVersion: rv,
-			Name:            apisixUpstreamName,
-			Nodes:           nodes,
-			FromKind:        fromKind,
+			Metadata: apisix.Metadata{
+				FullName:        fullName,
+				Group:           group,
+				ResourceVersion: rv,
+				Name:            apisixUpstreamName,
+			},
+			Nodes:    nodes,
+			FromKind: fromKind,
 		}
 		if lb == nil || lb.Type == "" {
 			upstream.Type = apisix.LbRoundRobin
diff --git a/pkg/ingress/apisix/upstream_test.go b/pkg/ingress/apisix/upstream_test.go
index c3cf8e9..548d18c 100644
--- a/pkg/ingress/apisix/upstream_test.go
+++ b/pkg/ingress/apisix/upstream_test.go
@@ -81,14 +81,16 @@ func buildExpectUpstream() *v1.Upstream {
 	fromKind := "ApisixUpstream"
 	group := ""
 	upstreamExpect := &v1.Upstream{
-		Group:           group,
-		ResourceVersion: group,
-		FullName:        fullName,
-		Name:            fullName,
-		Type:            LBType,
-		HashOn:          HashOn,
-		Key:             Key,
-		FromKind:        fromKind,
+		Metadata: v1.Metadata{
+			Group:           group,
+			ResourceVersion: group,
+			FullName:        fullName,
+			Name:            fullName,
+		},
+		Type:     LBType,
+		HashOn:   HashOn,
+		Key:      Key,
+		FromKind: fromKind,
 	}
 	return upstreamExpect
 }
diff --git a/pkg/types/apisix/v1/types.go b/pkg/types/apisix/v1/types.go
index 9f1094c..9b0b13a 100644
--- a/pkg/types/apisix/v1/types.go
+++ b/pkg/types/apisix/v1/types.go
@@ -14,7 +14,9 @@
 // limitations under the License.
 package v1
 
-import "encoding/json"
+import (
+	"encoding/json"
+)
 
 const (
 	// HashOnVars means the hash scope is variable.
@@ -40,22 +42,28 @@ const (
 	LbLeastConn = "least_conn"
 )
 
+// Metadata contains all meta information about resources.
+type Metadata struct {
+	ID              string `json:"id,omitempty" yaml:"id,omitempty"`
+	FullName        string `json:"full_name,omitempty" yaml:"full_name,omitempty"`
+	Name            string `json:"name,omitempty" yaml:"name,omitempty"`
+	ResourceVersion string `json:"resource_version,omitempty" yaml:"resource_version,omitempty"`
+	Group           string `json:"group,omitempty" yaml:"group,omitempty"`
+}
+
 // Route apisix route object
 // +k8s:deepcopy-gen=true
 type Route struct {
-	ID              string   `json:"id,omitempty" yaml:"id,omitempty"`
-	Group           string   `json:"group,omitempty" yaml:"group,omitempty"`
-	FullName        string   `json:"full_name,omitempty" yaml:"full_name,omitempty"`
-	ResourceVersion string   `json:"resource_version,omitempty" yaml:"resource_version,omitempty"`
-	Host            string   `json:"host,omitempty" yaml:"host,omitempty"`
-	Path            string   `json:"path,omitempty" yaml:"path,omitempty"`
-	Name            string   `json:"name,omitempty" yaml:"name,omitempty"`
-	Methods         []string `json:"methods,omitempty" yaml:"methods,omitempty"`
-	ServiceId       string   `json:"service_id,omitempty" yaml:"service_id,omitempty"`
-	ServiceName     string   `json:"service_name,omitempty" yaml:"service_name,omitempty"`
-	UpstreamId      string   `json:"upstream_id,omitempty" yaml:"upstream_id,omitempty"`
-	UpstreamName    string   `json:"upstream_name,omitempty" yaml:"upstream_name,omitempty"`
-	Plugins         Plugins  `json:"plugins,omitempty" yaml:"plugins,omitempty"`
+	Metadata `json:",inline" yaml:",inline"`
+
+	Host         string   `json:"host,omitempty" yaml:"host,omitempty"`
+	Path         string   `json:"path,omitempty" yaml:"path,omitempty"`
+	Methods      []string `json:"methods,omitempty" yaml:"methods,omitempty"`
+	ServiceId    string   `json:"service_id,omitempty" yaml:"service_id,omitempty"`
+	ServiceName  string   `json:"service_name,omitempty" yaml:"service_name,omitempty"`
+	UpstreamId   string   `json:"upstream_id,omitempty" yaml:"upstream_id,omitempty"`
+	UpstreamName string   `json:"upstream_name,omitempty" yaml:"upstream_name,omitempty"`
+	Plugins      Plugins  `json:"plugins,omitempty" yaml:"plugins,omitempty"`
 }
 
 type Plugins map[string]interface{}
@@ -88,19 +96,16 @@ type Service struct {
 	FromKind        string  `json:"from_kind,omitempty" yaml:"from_kind,omitempty"`
 }
 
-// Upstream apisix upstream
+// Upstream is the apisix upstream definition.
 // +k8s:deepcopy-gen=true
 type Upstream struct {
-	ID              string `json:"id,omitempty" yaml:"id,omitempty"`
-	FullName        string `json:"full_name,omitempty" yaml:"full_name,omitempty"`
-	Group           string `json:"group,omitempty" yaml:"group,omitempty"`
-	ResourceVersion string `json:"resource_version,omitempty" yaml:"resource_version,omitempty"`
-	Name            string `json:"name,omitempty" yaml:"name,omitempty"`
-	Type            string `json:"type,omitempty" yaml:"type,omitempty"`
-	HashOn          string `json:"hash_on,omitemtpy" yaml:"hash_on,omitempty"`
-	Key             string `json:"key,omitempty" yaml:"key,omitempty"`
-	Nodes           []Node `json:"nodes,omitempty" yaml:"nodes,omitempty"`
-	FromKind        string `json:"from_kind,omitempty" yaml:"from_kind,omitempty"`
+	Metadata `json:",inline" yaml:",inline"`
+
+	Type     string `json:"type,omitempty" yaml:"type,omitempty"`
+	HashOn   string `json:"hash_on,omitemtpy" yaml:"hash_on,omitempty"`
+	Key      string `json:"key,omitempty" yaml:"key,omitempty"`
+	Nodes    []Node `json:"nodes,omitempty" yaml:"nodes,omitempty"`
+	FromKind string `json:"from_kind,omitempty" yaml:"from_kind,omitempty"`
 }
 
 // Node the node in upstream
diff --git a/pkg/types/apisix/v1/zz_generated.deepcopy.go b/pkg/types/apisix/v1/zz_generated.deepcopy.go
index 4eedebe..d8d239b 100644
--- a/pkg/types/apisix/v1/zz_generated.deepcopy.go
+++ b/pkg/types/apisix/v1/zz_generated.deepcopy.go
@@ -39,6 +39,7 @@ func (in *Node) DeepCopy() *Node {
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Route) DeepCopyInto(out *Route) {
 	*out = *in
+	out.Metadata = in.Metadata
 	if in.Methods != nil {
 		in, out := &in.Methods, &out.Methods
 		*out = make([]string, len(*in))
@@ -99,6 +100,7 @@ func (in *Ssl) DeepCopy() *Ssl {
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *Upstream) DeepCopyInto(out *Upstream) {
 	*out = *in
+	out.Metadata = in.Metadata
 	if in.Nodes != nil {
 		in, out := &in.Nodes, &out.Nodes
 		*out = make([]Node, len(*in))