fix router bugs

This commit is contained in:
jeff
2018-06-06 14:36:41 +08:00
parent 6b43e18056
commit e9e2ab1e11
3 changed files with 23 additions and 41 deletions

View File

@@ -19,7 +19,6 @@ package routes
import (
"github.com/emicklei/go-restful"
"errors"
"net/http"
"strings"
@@ -64,6 +63,11 @@ func Register(ws *restful.WebService) {
Produces(restful.MIME_JSON))
}
type Router struct {
RouterType string `json:"type"`
Annotations map[string]string `json:"annotations"`
}
// Get all namespace ingress controller services
func GetAllRouters(request *restful.Request, response *restful.Response) {
@@ -99,7 +103,7 @@ func CreateRouter(request *restful.Request, response *restful.Response) {
namespace := request.PathParameter("namespace")
newRouter := models.Router{}
newRouter := Router{}
err := request.ReadEntity(&newRouter)
if err != nil {
@@ -145,7 +149,7 @@ func UpdateRouter(request *restful.Request, response *restful.Response) {
namespace := request.PathParameter("namespace")
newRouter := models.Router{}
newRouter := Router{}
err := request.ReadEntity(&newRouter)
if err != nil {
@@ -166,30 +170,14 @@ func UpdateRouter(request *restful.Request, response *restful.Response) {
}
}
func ParseParameter(router models.Router) (routerType v1.ServiceType, annotationMap map[string]string, err error) {
func ParseParameter(router Router) (routerType v1.ServiceType, annotationMap map[string]string, err error) {
routerType = v1.ServiceTypeNodePort
annotationMap = make(map[string]string)
if strings.Compare(strings.ToLower(router.RouterType), "loadbalancer") == 0 {
annotations := router.Annotations
annotation := strings.FieldsFunc(annotations, func(r rune) bool {
return r == ',' || r == '='
})
if len(annotation)%2 != 0 {
glog.Error("Wrong annotations, missing key or value")
return routerType, annotationMap, errors.New("wrong annotations, missing key or value")
}
for i := 0; i < len(annotation); i += 2 {
annotationMap[annotation[i]] = annotation[i+1]
}
return v1.ServiceTypeLoadBalancer, annotationMap, nil
return v1.ServiceTypeLoadBalancer, router.Annotations, nil
} else {
return v1.ServiceTypeNodePort, nil, nil
return v1.ServiceTypeNodePort, make(map[string]string, 0), nil
}
}

View File

@@ -26,5 +26,7 @@ type PageableResponse struct {
}
const APIVERSION = "v1alpha1"
const KIND = "kubesphere"
const DATA_HOME = "/etc/kubesphere"
const INGRESS_CONTROLLER_FOLDER = DATA_HOME + "/ingress-controller"

View File

@@ -28,20 +28,14 @@ import (
"k8s.io/client-go/kubernetes/scheme"
"kubesphere.io/kubesphere/pkg/client"
"kubesphere.io/kubesphere/pkg/constants"
)
const RouterYamlDirectory = "/etc/kubesphere/ingress-controller/"
type Router struct {
RouterType string `json:"type"`
Annotations string `json:"annotations"`
}
func GetAllRouters() ([]*coreV1.Service, error) {
k8sClient := client.NewK8sClient()
routers := []*coreV1.Service{}
routers := make([]*coreV1.Service, 0)
opts := metaV1.ListOptions{}
@@ -103,14 +97,14 @@ func LoadYamls() ([]string, error) {
var yamls []string
files, err := ioutil.ReadDir(RouterYamlDirectory)
files, err := ioutil.ReadDir(constants.INGRESS_CONTROLLER_FOLDER)
if err != nil {
glog.Error(err)
return nil, err
}
for _, file := range files {
content, err := ioutil.ReadFile(RouterYamlDirectory + "/" + file.Name())
content, err := ioutil.ReadFile(constants.INGRESS_CONTROLLER_FOLDER + "/" + file.Name())
if err != nil {
glog.Error(err)
@@ -308,16 +302,14 @@ func UpdateRouter(namespace string, routerType coreV1.ServiceType, annotations m
return router, nil
}
if router.Spec.Type != routerType {
router.Spec.Type = routerType
router.SetAnnotations(annotations)
router.Spec.Type = routerType
router.SetAnnotations(annotations)
router, err = k8sClient.CoreV1().Services(namespace).Update(router)
router, err = k8sClient.CoreV1().Services(namespace).Update(router)
if err != nil {
glog.Error(err)
return router, err
}
if err != nil {
glog.Error(err)
return router, err
}
return router, nil