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 2020/12/11 09:36:48 UTC
[apisix-ingress-controller] branch master updated: CI: add test ci
(#80)
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 83592c7 CI: add test ci (#80)
83592c7 is described below
commit 83592c7a1b04eb27bd06049b425cdafc3606d393
Author: kv <gx...@163.com>
AuthorDate: Fri Dec 11 17:36:40 2020 +0800
CI: add test ci (#80)
* chore: add ci
* fix: pass upstream_test
* fix: logger formatting directive error
* fix: logger formatting directive error
* fix: rm other ci
* fix: add EOL
* change: rename unit-test-ci
---
.github/workflows/unit-test-ci.yml | 23 ++++++
conf/init.go | 2 +-
main.go | 2 +
pkg/ingress/apisix/upstream_test.go | 46 ++++++------
pkg/ingress/controller/apisix_route.go | 112 +++++++++++++++---------------
pkg/ingress/controller/apisix_service.go | 68 +++++++++---------
pkg/ingress/controller/apisix_upstream.go | 36 +++++-----
pkg/ingress/controller/endpoint.go | 65 ++++++++---------
pkg/ingress/endpoint/ep.go | 42 +++++------
9 files changed, 214 insertions(+), 182 deletions(-)
diff --git a/.github/workflows/unit-test-ci.yml b/.github/workflows/unit-test-ci.yml
new file mode 100644
index 0000000..4da2ece
--- /dev/null
+++ b/.github/workflows/unit-test-ci.yml
@@ -0,0 +1,23 @@
+name: unit-test-ci
+
+on:
+ push:
+ branches:
+ - master
+ - kv/ci
+ pull_request:
+ branches:
+ - master
+jobs:
+ run-test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: setup go
+ uses: actions/setup-go@v1
+ with:
+ go-version: '1.13'
+ - name: run unit test
+ working-directory: ./
+ run: |
+ go test ./...
diff --git a/conf/init.go b/conf/init.go
index d3914b8..36d10b4 100644
--- a/conf/init.go
+++ b/conf/init.go
@@ -81,7 +81,7 @@ var Syslog syslog
var config *restclient.Config
-func init() {
+func Init() {
// 获取当前环境
setEnvironment()
// 获取配置文件路径
diff --git a/main.go b/main.go
index 06ef9a3..6c97417 100644
--- a/main.go
+++ b/main.go
@@ -19,9 +19,11 @@ import (
"github.com/api7/ingress-controller/cmd"
"github.com/api7/ingress-controller/log"
+ "github.com/api7/ingress-controller/conf"
)
func main() {
+ conf.Init()
root := cmd.NewAPISIXIngressControllerCommand()
if err := root.Execute(); err != nil {
log.GetLogger().Error(err.Error())
diff --git a/pkg/ingress/apisix/upstream_test.go b/pkg/ingress/apisix/upstream_test.go
index 6453b0b..7edf234 100644
--- a/pkg/ingress/apisix/upstream_test.go
+++ b/pkg/ingress/apisix/upstream_test.go
@@ -1,17 +1,17 @@
- // Licensed to the Apache Software Foundation (ASF) under one or more
- // contributor license agreements. See the NOTICE file distributed with
- // this work for additional information regarding copyright ownership.
- // The ASF licenses this file to You under the Apache License, Version 2.0
- // (the "License"); you may not use this file except in compliance with
- // the License. You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
package apisix
import (
@@ -73,18 +73,21 @@ func (epr *EndpointRequestTest) BuildEps(ns, name string, port int) []*v1.Node {
}
func buildExpectUpstream() *v1.Upstream {
- fullName := "default_httpserver_8080"
+ fullName := "cloud_httpserver_8080"
LBType := "chash"
HashOn := "header"
Key := "hello_key"
fromKind := "ApisixUpstream"
+ group := ""
upstreamExpect := &v1.Upstream{
- FullName: &fullName,
- Name: &fullName,
- Type: &LBType,
- HashOn: &HashOn,
- Key: &Key,
- FromKind: &fromKind,
+ Group: &group,
+ ResourceVersion: &group,
+ FullName: &fullName,
+ Name: &fullName,
+ Type: &LBType,
+ HashOn: &HashOn,
+ Key: &Key,
+ FromKind: &fromKind,
}
return upstreamExpect
}
@@ -94,6 +97,7 @@ kind: ApisixUpstream
apiVersion: apisix.apache.org/v1
metadata:
name: httpserver
+ namespace: cloud
spec:
ports:
- loadbalancer:
diff --git a/pkg/ingress/controller/apisix_route.go b/pkg/ingress/controller/apisix_route.go
index 310167e..65decd2 100644
--- a/pkg/ingress/controller/apisix_route.go
+++ b/pkg/ingress/controller/apisix_route.go
@@ -1,86 +1,86 @@
- // Licensed to the Apache Software Foundation (ASF) under one or more
- // contributor license agreements. See the NOTICE file distributed with
- // this work for additional information regarding copyright ownership.
- // The ASF licenses this file to You under the Apache License, Version 2.0
- // (the "License"); you may not use this file except in compliance with
- // the License. You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
package controller
import (
- "k8s.io/client-go/kubernetes"
- "k8s.io/client-go/tools/cache"
- "k8s.io/client-go/util/workqueue"
- "github.com/gxthrj/apisix-ingress-types/pkg/client/listers/config/v1"
+ "fmt"
+ "github.com/api7/ingress-controller/pkg/ingress/apisix"
+ api6V1 "github.com/gxthrj/apisix-ingress-types/pkg/apis/config/v1"
clientSet "github.com/gxthrj/apisix-ingress-types/pkg/client/clientset/versioned"
- api6Informers "github.com/gxthrj/apisix-ingress-types/pkg/client/informers/externalversions/config/v1"
api6Scheme "github.com/gxthrj/apisix-ingress-types/pkg/client/clientset/versioned/scheme"
- api6V1 "github.com/gxthrj/apisix-ingress-types/pkg/apis/config/v1"
+ api6Informers "github.com/gxthrj/apisix-ingress-types/pkg/client/informers/externalversions/config/v1"
+ "github.com/gxthrj/apisix-ingress-types/pkg/client/listers/config/v1"
+ "github.com/gxthrj/seven/state"
+ "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/util/runtime"
- "k8s.io/client-go/kubernetes/scheme"
- "fmt"
"k8s.io/apimachinery/pkg/util/wait"
+ "k8s.io/client-go/kubernetes"
+ "k8s.io/client-go/kubernetes/scheme"
+ "k8s.io/client-go/tools/cache"
+ "k8s.io/client-go/util/workqueue"
"time"
- "k8s.io/apimachinery/pkg/api/errors"
- "github.com/api7/ingress-controller/pkg/ingress/apisix"
- "github.com/gxthrj/seven/state"
)
-type ApisixRouteController struct{
- kubeclientset kubernetes.Interface
+type ApisixRouteController struct {
+ kubeclientset kubernetes.Interface
apisixRouteClientset clientSet.Interface
- apisixRouteList v1.ApisixRouteLister
- apisixRouteSynced cache.InformerSynced
- workqueue workqueue.RateLimitingInterface
+ apisixRouteList v1.ApisixRouteLister
+ apisixRouteSynced cache.InformerSynced
+ workqueue workqueue.RateLimitingInterface
}
type RouteQueueObj struct {
- Key string `json:"key"`
+ Key string `json:"key"`
OldObj *api6V1.ApisixRoute `json:"old_obj"`
- Ope string `json:"ope"` // add / update / delete
+ Ope string `json:"ope"` // add / update / delete
}
func BuildApisixRouteController(
kubeclientset kubernetes.Interface,
api6RouteClientset clientSet.Interface,
- api6RouteInformer api6Informers.ApisixRouteInformer) *ApisixRouteController{
+ api6RouteInformer api6Informers.ApisixRouteInformer) *ApisixRouteController {
runtime.Must(api6Scheme.AddToScheme(scheme.Scheme))
controller := &ApisixRouteController{
- kubeclientset: kubeclientset,
+ kubeclientset: kubeclientset,
apisixRouteClientset: api6RouteClientset,
- apisixRouteList: api6RouteInformer.Lister(),
- apisixRouteSynced: api6RouteInformer.Informer().HasSynced,
- workqueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "ApisixRoutes"),
+ apisixRouteList: api6RouteInformer.Lister(),
+ apisixRouteSynced: api6RouteInformer.Informer().HasSynced,
+ workqueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "ApisixRoutes"),
}
api6RouteInformer.Informer().AddEventHandler(
cache.ResourceEventHandlerFuncs{
- AddFunc: controller.addFunc,
+ AddFunc: controller.addFunc,
UpdateFunc: controller.updateFunc,
DeleteFunc: controller.deleteFunc,
})
return controller
}
-func (c *ApisixRouteController) addFunc(obj interface{}){
+func (c *ApisixRouteController) addFunc(obj interface{}) {
var key string
var err error
if key, err = cache.MetaNamespaceKeyFunc(obj); err != nil {
runtime.HandleError(err)
return
}
- rqo := &RouteQueueObj{Key: key, OldObj: nil, Ope:ADD}
+ rqo := &RouteQueueObj{Key: key, OldObj: nil, Ope: ADD}
c.workqueue.AddRateLimited(rqo)
}
-func (c *ApisixRouteController) updateFunc(oldObj, newObj interface{}){
+func (c *ApisixRouteController) updateFunc(oldObj, newObj interface{}) {
oldRoute := oldObj.(*api6V1.ApisixRoute)
newRoute := newObj.(*api6V1.ApisixRoute)
if oldRoute.ResourceVersion == newRoute.ResourceVersion {
@@ -97,7 +97,7 @@ func (c *ApisixRouteController) updateFunc(oldObj, newObj interface{}){
c.workqueue.AddRateLimited(rqo)
}
-func (c *ApisixRouteController) deleteFunc(obj interface{}){
+func (c *ApisixRouteController) deleteFunc(obj interface{}) {
var key string
var err error
key, err = cache.DeletionHandlingMetaNamespaceKeyFunc(obj)
@@ -120,8 +120,9 @@ func (c *ApisixRouteController) Run(stop <-chan struct{}) error {
return nil
}
-func (c *ApisixRouteController) runWorker(){
- for c.processNextWorkItem() {}
+func (c *ApisixRouteController) runWorker() {
+ for c.processNextWorkItem() {
+ }
}
func (c *ApisixRouteController) processNextWorkItem() bool {
@@ -175,17 +176,17 @@ func (c *ApisixRouteController) syncHandler(rqo *RouteQueueObj) error {
}
}
-func (c *ApisixRouteController) add(key string) error{
+func (c *ApisixRouteController) add(key string) error {
namespace, name, err := cache.SplitMetaNamespaceKey(key)
if err != nil {
- logger.Error("invalid resource key: %s", key)
+ logger.Errorf("invalid resource key: %s", key)
return fmt.Errorf("invalid resource key: %s", key)
}
apisixIngressRoute, err := c.apisixRouteList.ApisixRoutes(namespace).Get(name)
if err != nil {
- if errors.IsNotFound(err){
- logger.Info("apisixRoute %s is removed", key)
+ if errors.IsNotFound(err) {
+ logger.Infof("apisixRoute %s is removed", key)
return nil
}
runtime.HandleError(fmt.Errorf("failed to list apisixRoute %s/%s", key, err.Error()))
@@ -197,28 +198,29 @@ func (c *ApisixRouteController) add(key string) error{
_, err = comb.Solver()
return err
}
+
// sync
// 1.diff routes between old and new objects
// 2.delete routes not exist
-func (c *ApisixRouteController) sync(rqo *RouteQueueObj) error{
+func (c *ApisixRouteController) sync(rqo *RouteQueueObj) error {
key := rqo.Key
namespace, name, err := cache.SplitMetaNamespaceKey(key)
if err != nil {
- logger.Error("invalid resource key: %s", key)
+ logger.Errorf("invalid resource key: %s", key)
return fmt.Errorf("invalid resource key: %s", key)
}
apisixIngressRoute, err := c.apisixRouteList.ApisixRoutes(namespace).Get(name)
if err != nil {
- if errors.IsNotFound(err){
- logger.Info("apisixRoute %s is removed", key)
+ if errors.IsNotFound(err) {
+ logger.Infof("apisixRoute %s is removed", key)
return nil
}
runtime.HandleError(fmt.Errorf("failed to list apisixRoute %s/%s", key, err.Error()))
return err
}
switch {
- case rqo.Ope == UPDATE :
+ case rqo.Ope == UPDATE:
oldApisixRoute := apisix.ApisixRoute(*rqo.OldObj)
oldRoutes, _, _, _ := oldApisixRoute.Convert()
@@ -227,7 +229,7 @@ func (c *ApisixRouteController) sync(rqo *RouteQueueObj) error{
rc := &state.RouteCompare{OldRoutes: oldRoutes, NewRoutes: newRoutes}
return rc.Sync()
- case rqo.Ope == DELETE :
+ case rqo.Ope == DELETE:
apisixRoute := apisix.ApisixRoute(*apisixIngressRoute)
routes, _, _, _ := apisixRoute.Convert()
rc := &state.RouteCompare{OldRoutes: routes, NewRoutes: nil}
@@ -235,4 +237,4 @@ func (c *ApisixRouteController) sync(rqo *RouteQueueObj) error{
default:
return fmt.Errorf("not expected in (ApisixRouteController) sync")
}
-}
\ No newline at end of file
+}
diff --git a/pkg/ingress/controller/apisix_service.go b/pkg/ingress/controller/apisix_service.go
index d54146c..cdd1cc6 100644
--- a/pkg/ingress/controller/apisix_service.go
+++ b/pkg/ingress/controller/apisix_service.go
@@ -1,45 +1,45 @@
- // Licensed to the Apache Software Foundation (ASF) under one or more
- // contributor license agreements. See the NOTICE file distributed with
- // this work for additional information regarding copyright ownership.
- // The ASF licenses this file to You under the Apache License, Version 2.0
- // (the "License"); you may not use this file except in compliance with
- // the License. You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
package controller
import (
+ "fmt"
+ "github.com/api7/ingress-controller/pkg/ingress/apisix"
+ "github.com/golang/glog"
+ apisixV1 "github.com/gxthrj/apisix-ingress-types/pkg/apis/config/v1"
clientSet "github.com/gxthrj/apisix-ingress-types/pkg/client/clientset/versioned"
- informers "github.com/gxthrj/apisix-ingress-types/pkg/client/informers/externalversions/config/v1"
apisixScheme "github.com/gxthrj/apisix-ingress-types/pkg/client/clientset/versioned/scheme"
- apisixV1 "github.com/gxthrj/apisix-ingress-types/pkg/apis/config/v1"
+ informers "github.com/gxthrj/apisix-ingress-types/pkg/client/informers/externalversions/config/v1"
"github.com/gxthrj/apisix-ingress-types/pkg/client/listers/config/v1"
+ "github.com/gxthrj/seven/state"
+ "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/util/runtime"
+ "k8s.io/apimachinery/pkg/util/wait"
"k8s.io/client-go/kubernetes"
+ "k8s.io/client-go/kubernetes/scheme"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/util/workqueue"
- "k8s.io/apimachinery/pkg/util/runtime"
- "k8s.io/client-go/kubernetes/scheme"
- "fmt"
- "github.com/golang/glog"
- "k8s.io/apimachinery/pkg/util/wait"
"time"
- "k8s.io/apimachinery/pkg/api/errors"
- "github.com/api7/ingress-controller/pkg/ingress/apisix"
- "github.com/gxthrj/seven/state"
)
type ApisixServiceController struct {
- kubeclientset kubernetes.Interface
- apisixClientset clientSet.Interface
- apisixServiceList v1.ApisixServiceLister
- apisixServiceSynced cache.InformerSynced
- workqueue workqueue.RateLimitingInterface
+ kubeclientset kubernetes.Interface
+ apisixClientset clientSet.Interface
+ apisixServiceList v1.ApisixServiceLister
+ apisixServiceSynced cache.InformerSynced
+ workqueue workqueue.RateLimitingInterface
}
func BuildApisixServiceController(
@@ -49,11 +49,11 @@ func BuildApisixServiceController(
runtime.Must(apisixScheme.AddToScheme(scheme.Scheme))
controller := &ApisixServiceController{
- kubeclientset: kubeclientset,
- apisixClientset: apisixServiceClientset,
+ kubeclientset: kubeclientset,
+ apisixClientset: apisixServiceClientset,
apisixServiceList: apisixServiceInformer.Lister(),
apisixServiceSynced: apisixServiceInformer.Informer().HasSynced,
- workqueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "ApisixServices"),
+ workqueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "ApisixServices"),
}
apisixServiceInformer.Informer().AddEventHandler(
cache.ResourceEventHandlerFuncs{
@@ -111,14 +111,14 @@ func (c *ApisixServiceController) processNextWorkItem() bool {
func (c *ApisixServiceController) syncHandler(key string) error {
namespace, name, err := cache.SplitMetaNamespaceKey(key)
if err != nil {
- logger.Error("invalid resource key: %s", key)
+ logger.Errorf("invalid resource key: %s", key)
return fmt.Errorf("invalid resource key: %s", key)
}
apisixServiceYaml, err := c.apisixServiceList.ApisixServices(namespace).Get(name)
if err != nil {
if errors.IsNotFound(err) {
- logger.Info("apisixUpstream %s is removed", key)
+ logger.Infof("apisixUpstream %s is removed", key)
return nil
}
runtime.HandleError(fmt.Errorf("failed to list apisixUpstream %s/%s", key, err.Error()))
diff --git a/pkg/ingress/controller/apisix_upstream.go b/pkg/ingress/controller/apisix_upstream.go
index c5b680c..63deac0 100644
--- a/pkg/ingress/controller/apisix_upstream.go
+++ b/pkg/ingress/controller/apisix_upstream.go
@@ -1,21 +1,23 @@
- // Licensed to the Apache Software Foundation (ASF) under one or more
- // contributor license agreements. See the NOTICE file distributed with
- // this work for additional information regarding copyright ownership.
- // The ASF licenses this file to You under the Apache License, Version 2.0
- // (the "License"); you may not use this file except in compliance with
- // the License. You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
package controller
import (
"fmt"
+ "github.com/api7/ingress-controller/pkg/ingress/apisix"
+ "github.com/api7/ingress-controller/pkg/ingress/endpoint"
"github.com/golang/glog"
apisixV1 "github.com/gxthrj/apisix-ingress-types/pkg/apis/config/v1"
clientSet "github.com/gxthrj/apisix-ingress-types/pkg/client/clientset/versioned"
@@ -23,7 +25,6 @@ import (
informers "github.com/gxthrj/apisix-ingress-types/pkg/client/informers/externalversions/config/v1"
"github.com/gxthrj/apisix-ingress-types/pkg/client/listers/config/v1"
"github.com/gxthrj/seven/state"
- "github.com/api7/ingress-controller/pkg/ingress/apisix"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/util/wait"
@@ -32,7 +33,6 @@ import (
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/util/workqueue"
"time"
- "github.com/api7/ingress-controller/pkg/ingress/endpoint"
)
type ApisixUpstreamController struct {
@@ -112,14 +112,14 @@ func (c *ApisixUpstreamController) processNextWorkItem() bool {
func (c *ApisixUpstreamController) syncHandler(key string) error {
namespace, name, err := cache.SplitMetaNamespaceKey(key)
if err != nil {
- logger.Error("invalid resource key: %s", key)
+ logger.Errorf("invalid resource key: %s", key)
return fmt.Errorf("invalid resource key: %s", key)
}
apisixUpstreamYaml, err := c.apisixUpstreamList.ApisixUpstreams(namespace).Get(name)
if err != nil {
if errors.IsNotFound(err) {
- logger.Info("apisixUpstream %s is removed", key)
+ logger.Infof("apisixUpstream %s is removed", key)
return nil
}
runtime.HandleError(fmt.Errorf("failed to list apisixUpstream %s/%s", key, err.Error()))
diff --git a/pkg/ingress/controller/endpoint.go b/pkg/ingress/controller/endpoint.go
index c4345c2..ff96da2 100644
--- a/pkg/ingress/controller/endpoint.go
+++ b/pkg/ingress/controller/endpoint.go
@@ -1,22 +1,26 @@
- // Licensed to the Apache Software Foundation (ASF) under one or more
- // contributor license agreements. See the NOTICE file distributed with
- // this work for additional information regarding copyright ownership.
- // The ASF licenses this file to You under the Apache License, Version 2.0
- // (the "License"); you may not use this file except in compliance with
- // the License. You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
package controller
import (
"fmt"
+ "github.com/api7/ingress-controller/conf"
"github.com/golang/glog"
+ apisixType "github.com/gxthrj/apisix-types/pkg/apis/apisix/v1"
+ "github.com/gxthrj/seven/apisix"
+ sevenConf "github.com/gxthrj/seven/conf"
"github.com/gxthrj/seven/state"
CoreV1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/errors"
@@ -26,27 +30,23 @@ import (
CoreListerV1 "k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/util/workqueue"
- "time"
"strconv"
- "github.com/gxthrj/seven/apisix"
- sevenConf "github.com/gxthrj/seven/conf"
- apisixType "github.com/gxthrj/apisix-types/pkg/apis/apisix/v1"
- "github.com/api7/ingress-controller/conf"
+ "time"
)
type EndpointController struct {
- kubeclientset kubernetes.Interface
- endpointList CoreListerV1.EndpointsLister
+ kubeclientset kubernetes.Interface
+ endpointList CoreListerV1.EndpointsLister
endpointSynced cache.InformerSynced
- workqueue workqueue.RateLimitingInterface
+ workqueue workqueue.RateLimitingInterface
}
func BuildEndpointController(kubeclientset kubernetes.Interface) *EndpointController {
controller := &EndpointController{
- kubeclientset: kubeclientset,
- endpointList: conf.EndpointsInformer.Lister(),
+ kubeclientset: kubeclientset,
+ endpointList: conf.EndpointsInformer.Lister(),
endpointSynced: conf.EndpointsInformer.Informer().HasSynced,
- workqueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "endpoints"),
+ workqueue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "endpoints"),
}
conf.EndpointsInformer.Informer().AddEventHandler(
cache.ResourceEventHandlerFuncs{
@@ -68,7 +68,8 @@ func (c *EndpointController) Run(stop <-chan struct{}) error {
}
func (c *EndpointController) runWorker() {
- for c.processNextWorkItem() {}
+ for c.processNextWorkItem() {
+ }
}
func (c *EndpointController) processNextWorkItem() bool {
@@ -107,14 +108,14 @@ func (c *EndpointController) syncHandler(key string) error {
glog.V(2).Infof("find endpoint %s/%s", namespace, name)
}
if err != nil {
- logger.Error("invalid resource key: %s", key)
+ logger.Errorf("invalid resource key: %s", key)
return fmt.Errorf("invalid resource key: %s", key)
}
endpointYaml, err := c.endpointList.Endpoints(namespace).Get(name)
if err != nil {
if errors.IsNotFound(err) {
- logger.Info("endpoint %s is removed", key)
+ logger.Infof("endpoint %s is removed", key)
return nil
}
runtime.HandleError(fmt.Errorf("failed to list endpoint %s/%s", key, err.Error()))
@@ -126,16 +127,16 @@ func (c *EndpointController) syncHandler(key string) error {
}
func (c *EndpointController) process(ep *CoreV1.Endpoints) {
- if ep.Namespace != "kube-system"{ // todo here is some ignore namespaces
- for _, s := range ep.Subsets{
+ if ep.Namespace != "kube-system" { // todo here is some ignore namespaces
+ for _, s := range ep.Subsets {
// if upstream need to watch
// ips
ips := make([]string, 0)
- for _, address := range s.Addresses{
+ for _, address := range s.Addresses {
ips = append(ips, address.IP)
}
// ports
- for _, port := range s.Ports{
+ for _, port := range s.Ports {
upstreamName := ep.Namespace + "_" + ep.Name + "_" + strconv.Itoa(int(port.Port))
// find upstreamName is in apisix
// default
diff --git a/pkg/ingress/endpoint/ep.go b/pkg/ingress/endpoint/ep.go
index 6138885..e3dac75 100644
--- a/pkg/ingress/endpoint/ep.go
+++ b/pkg/ingress/endpoint/ep.go
@@ -1,17 +1,17 @@
- // Licensed to the Apache Software Foundation (ASF) under one or more
- // contributor license agreements. See the NOTICE file distributed with
- // this work for additional information regarding copyright ownership.
- // The ASF licenses this file to You under the Apache License, Version 2.0
- // (the "License"); you may not use this file except in compliance with
- // the License. You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
package endpoint
import (
@@ -20,20 +20,20 @@ import (
"github.com/gxthrj/apisix-types/pkg/apis/apisix/v1"
)
-type Endpoint interface{
+type Endpoint interface {
BuildEps(ns, name string, port int) []*v1.Node
}
-type EndpointRequest struct {}
+type EndpointRequest struct{}
func (epr *EndpointRequest) BuildEps(ns, name string, port int) []*v1.Node {
nodes := make([]*v1.Node, 0)
epInformers := conf.EndpointsInformer
if ep, err := epInformers.Lister().Endpoints(ns).Get(name); err != nil {
- glog.Errorf("find endpoint %s/%s err", ns, name, err.Error())
+ glog.Errorf("find endpoint %s/%s err: %s", ns, name, err.Error())
} else {
for _, s := range ep.Subsets {
- for _, ip := range s.Addresses{
+ for _, ip := range s.Addresses {
p := ip.IP
weight := 100
node := &v1.Node{IP: &p, Port: &port, Weight: &weight}
@@ -45,14 +45,14 @@ func (epr *EndpointRequest) BuildEps(ns, name string, port int) []*v1.Node {
}
// BuildEps build nodes from endpoints for upstream
-func BuildEps(ns, name string, port int) []*v1.Node{
+func BuildEps(ns, name string, port int) []*v1.Node {
nodes := make([]*v1.Node, 0)
epInformers := conf.EndpointsInformer
if ep, err := epInformers.Lister().Endpoints(ns).Get(name); err != nil {
- glog.Errorf("find endpoint %s/%s err", ns, name, err.Error())
+ glog.Errorf("find endpoint %s/%s err: %s", ns, name, err.Error())
} else {
for _, s := range ep.Subsets {
- for _, ip := range s.Addresses{
+ for _, ip := range s.Addresses {
p := ip.IP
weight := 100
node := &v1.Node{IP: &p, Port: &port, Weight: &weight}