You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apisix.apache.org by kv...@apache.org on 2020/08/13 10:54:10 UTC

[apisix-control-plane] branch master updated: feat: add plugin yaml transform (#10)

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

kvn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-control-plane.git


The following commit(s) were added to refs/heads/master by this push:
     new 8585d67  feat: add plugin yaml transform (#10)
8585d67 is described below

commit 8585d674b9bc1aa63f7301bfd09c3d7fc5113049
Author: kv <gx...@163.com>
AuthorDate: Thu Aug 13 18:54:03 2020 +0800

    feat: add plugin yaml transform (#10)
---
 doc/yaml_struct.md    | 24 +++++++++++++-----------
 pkg/yml/model.go      | 15 +++++++++++++++
 pkg/yml/trans.go      | 18 ++++++++++++++++++
 pkg/yml/trans_test.go | 31 +++++++++++++++++++++++++++++++
 4 files changed, 77 insertions(+), 11 deletions(-)

diff --git a/doc/yaml_struct.md b/doc/yaml_struct.md
index 2579a75..5e46d01 100644
--- a/doc/yaml_struct.md
+++ b/doc/yaml_struct.md
@@ -121,18 +121,20 @@ subsets:
 The logic of the plugin itself is not defined here, only known plugins will be referenced here
 
 ```yaml
-kind:Plugin
-selector:
-  labels:
-     app: foo
-sort:
-- name: limit-count
+kind: Plugin
+selector:
+  app: foo
+sets:
+- name: proxy-rewrite
   conf:
-      max:100
+    uri: "/test/home.html"
+    scheme: "http"
+    host: "foo.com"
+    headers:
+      X-Api-Version: "v1"
+      X-Api-Engine: "apisix"
+      X-Api-useless: ""
 - name: prometheus
-  conf:
-     ...schema..
-
 ```
 
 ### A complete demo
@@ -236,7 +238,7 @@ kind:Plugin
 selector:
   labels:
      app: foo
-sort:
+sets:
 - name: proxy-rewrite
   conf:
     uri: "/test/home.html"
diff --git a/pkg/yml/model.go b/pkg/yml/model.go
index 4d381da..1920b35 100644
--- a/pkg/yml/model.go
+++ b/pkg/yml/model.go
@@ -91,3 +91,18 @@ type Subset struct {
 func (g *Destination) ToMem() string {
 	return "destination"
 }
+
+type Plugin struct {
+	Kind     string            `yaml:"kind"`
+	Selector map[string]string `yaml:"selector"`
+	Sets     []Set             `yaml:"sets"`
+}
+
+type Set struct {
+	Name string                 `yaml:"name"`
+	Conf map[string]interface{} `yaml:"conf,omitempty"`
+}
+
+func (g *Plugin) ToMem() string {
+	return "plugin"
+}
diff --git a/pkg/yml/trans.go b/pkg/yml/trans.go
index 4e81fc7..b3a3390 100644
--- a/pkg/yml/trans.go
+++ b/pkg/yml/trans.go
@@ -56,6 +56,14 @@ func Trans(b []byte, y []byte) YmlModel {
 			} else {
 				return r
 			}
+		case "Plugin":
+			// trans to Plugin
+			if r, err := ToPlugin(y); err != nil {
+				fmt.Println("trans to Plugin error ", err)
+				return nil
+			} else {
+				return r
+			}
 		default:
 			fmt.Println("nil")
 			return nil
@@ -92,3 +100,13 @@ func ToDestination(y []byte) (*Destination, error) {
 		return g, nil
 	}
 }
+
+func ToPlugin(y []byte) (*Plugin, error) {
+	var g *Plugin
+	if err := yaml.Unmarshal(y, &g); err != nil {
+		fmt.Println(err)
+		return nil, err
+	} else {
+		return g, nil
+	}
+}
diff --git a/pkg/yml/trans_test.go b/pkg/yml/trans_test.go
index ee06609..3c5caa9 100644
--- a/pkg/yml/trans_test.go
+++ b/pkg/yml/trans_test.go
@@ -121,6 +121,37 @@ subsets:
 				Expect(g.Kind).To(Equal("Destination"))
 				Expect(g.Host).To(Equal("foo-server"))
 			})
+
+			It("trans to plugin no error", func() {
+				b := []byte(`
+kind: Plugin
+selector:
+  app: foo
+sets:
+- name: proxy-rewrite
+  conf:
+    uri: "/test/home.html"
+    scheme: "http"
+    host: "foo.com"
+    headers:
+      X-Api-Version: "v1"
+      X-Api-Engine: "apisix"
+      X-Api-useless: ""
+- name: prometheus
+`)
+				y, err := yaml.YAMLToJSON(b)
+				fmt.Println(string(y))
+				ym := yml.Trans(y, b)
+				Expect(err).NotTo(HaveOccurred())
+				v := typeof(ym)
+				Expect(v).To(Equal("*yml.Plugin"))
+				g, ok := ym.(*yml.Plugin)
+				Expect(ok).To(Equal(true))
+				Expect(g.Kind).To(Equal("Plugin"))
+				fmt.Println(g.Sets)
+				Expect(len(g.Sets)).To(Equal(2))
+				Expect(g.Selector["app"]).To(Equal("foo"))
+			})
 		})
 	})
 })