fix cluster import validation bug (#2223)
This commit is contained in:
@@ -61,7 +61,10 @@ func NewHandler(serviceLister v1.ServiceLister, clusterLister clusterlister.Clus
|
||||
}
|
||||
}
|
||||
|
||||
func (h *handler) GenerateAgentDeployment(request *restful.Request, response *restful.Response) {
|
||||
// generateAgentDeployment will return a deployment yaml for proxy connection type cluster
|
||||
// ProxyPublishAddress takes high precedence over proxyPublishService, use proxyPublishService ingress
|
||||
// address only when proxyPublishAddress is not provided.
|
||||
func (h *handler) generateAgentDeployment(request *restful.Request, response *restful.Response) {
|
||||
clusterName := request.PathParameter("cluster")
|
||||
|
||||
cluster, err := h.clusterLister.Get(clusterName)
|
||||
@@ -113,7 +116,7 @@ func (h *handler) populateProxyAddress() error {
|
||||
|
||||
service, err := h.serviceLister.Services(namespace).Get(parts[0])
|
||||
if err != nil {
|
||||
return err
|
||||
return fmt.Errorf("service %s not found in namespace %s", parts[0], namespace)
|
||||
}
|
||||
|
||||
if len(service.Spec.Ports) == 0 {
|
||||
@@ -184,9 +187,10 @@ func (h *handler) generateDefaultDeployment(cluster *v1alpha1.Cluster, w io.Writ
|
||||
fmt.Sprintf("--name=%s", cluster.Name),
|
||||
fmt.Sprintf("--token=%s", cluster.Spec.Connection.Token),
|
||||
fmt.Sprintf("--proxy-server=%s", h.proxyAddress),
|
||||
fmt.Sprintf("--keepalive=30s"),
|
||||
fmt.Sprintf("--keepalive=10s"),
|
||||
fmt.Sprintf("--kubesphere-service=ks-apiserver.kubesphere-system.svc:80"),
|
||||
fmt.Sprintf("--kubernetes-service=kubernetes.default.svc:443"),
|
||||
fmt.Sprintf("--v=0"),
|
||||
},
|
||||
Image: h.agentImage,
|
||||
Resources: corev1.ResourceRequirements{
|
||||
@@ -221,12 +225,12 @@ func (h *handler) ValidateCluster(request *restful.Request, response *restful.Re
|
||||
}
|
||||
|
||||
if cluster.Spec.Connection.Type != v1alpha1.ConnectionTypeDirect {
|
||||
api.HandleBadRequest(response, request, fmt.Errorf("cluster connection type is not direct"))
|
||||
api.HandleBadRequest(response, request, fmt.Errorf("cluster connection type MUST be direct"))
|
||||
return
|
||||
}
|
||||
|
||||
if len(cluster.Spec.Connection.KubeConfig) == 0 || len(cluster.Spec.Connection.KubeSphereAPIEndpoint) == 0 {
|
||||
api.HandleBadRequest(response, request, fmt.Errorf("cluster kubeconfig and kubesphere endpoint should not be empty"))
|
||||
if len(cluster.Spec.Connection.KubeConfig) == 0 {
|
||||
api.HandleBadRequest(response, request, fmt.Errorf("cluster kubeconfig MUST NOT be empty"))
|
||||
return
|
||||
}
|
||||
|
||||
@@ -236,13 +240,6 @@ func (h *handler) ValidateCluster(request *restful.Request, response *restful.Re
|
||||
return
|
||||
}
|
||||
|
||||
// kubesphere apiserver endpoint not provided, that's allowed
|
||||
// Cluster dispatcher will use kube-apiserver proxy instead
|
||||
if len(cluster.Spec.Connection.KubeSphereAPIEndpoint) == 0 {
|
||||
response.WriteHeader(http.StatusOK)
|
||||
return
|
||||
}
|
||||
|
||||
_, err = validateKubeSphereAPIServer(cluster.Spec.Connection.KubeSphereAPIEndpoint, cluster.Spec.Connection.KubeConfig)
|
||||
if err != nil {
|
||||
api.HandleBadRequest(response, request, fmt.Errorf("unable validate kubesphere endpoint, %v", err))
|
||||
@@ -286,7 +283,7 @@ func loadKubeConfigFromBytes(kubeconfig []byte) (*rest.Config, error) {
|
||||
}
|
||||
|
||||
// validateKubeSphereAPIServer uses version api to check the accessibility
|
||||
// If ksEndpoint is empty, use
|
||||
// If kubesphere apiserver endpoint is not provided, use kube-apiserver proxy instead
|
||||
func validateKubeSphereAPIServer(ksEndpoint string, kubeconfig []byte) (*version.Info, error) {
|
||||
if len(ksEndpoint) == 0 && len(kubeconfig) == 0 {
|
||||
return nil, fmt.Errorf("neither kubesphere api endpoint nor kubeconfig was provided")
|
||||
|
||||
@@ -89,9 +89,10 @@ spec:
|
||||
- --name=gondor
|
||||
- --token=randomtoken
|
||||
- --proxy-server=http://139.198.121.121:8080
|
||||
- --keepalive=30s
|
||||
- --keepalive=10s
|
||||
- --kubesphere-service=ks-apiserver.kubesphere-system.svc:80
|
||||
- --kubernetes-service=kubernetes.default.svc:443
|
||||
- --v=0
|
||||
image: kubesphere/tower:v1.0
|
||||
name: agent
|
||||
resources:
|
||||
|
||||
@@ -30,7 +30,7 @@ func AddToContainer(container *restful.Container,
|
||||
webservice.Route(webservice.GET("/clusters/{cluster}/agent/deployment").
|
||||
Doc("Return deployment yaml for cluster agent.").
|
||||
Param(webservice.PathParameter("cluster", "Name of the cluster.").Required(true)).
|
||||
To(h.GenerateAgentDeployment).
|
||||
To(h.generateAgentDeployment).
|
||||
Returns(http.StatusOK, api.StatusOK, nil))
|
||||
|
||||
webservice.Route(webservice.POST("/clusters/validation").
|
||||
|
||||
Reference in New Issue
Block a user