diff --git a/configmaps_and_secrets.go b/configmaps_and_secrets.go deleted file mode 100644 index b266e3a2f..000000000 --- a/configmaps_and_secrets.go +++ /dev/null @@ -1,50 +0,0 @@ -package kubernetes - -import ( - "net/http" - - httperror "github.com/portainer/libhttp/error" - "github.com/portainer/libhttp/request" - "github.com/portainer/libhttp/response" -) - -// @id GetKubernetesConfigMaps -// @summary Fetches a list of config maps for a given namespace -// @description Fetches a list of config maps for a given namespace -// classes from the kubernetes api -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces/{namespace}/configmaps [get] -func (handler *Handler) getKubernetesConfigMaps(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - cli := handler.KubernetesClient - - namespace, err := request.RetrieveRouteVariableValue(r, "namespace") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid namespace identifier route variable", - Err: err, - } - } - - configmaps, err := cli.GetConfigMapsAndSecrets(namespace) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve nodes limits", - Err: err, - } - } - - return response.JSON(w, configmaps) -} diff --git a/ingresses.go b/ingresses.go deleted file mode 100644 index 156eea61f..000000000 --- a/ingresses.go +++ /dev/null @@ -1,550 +0,0 @@ -package kubernetes - -import ( - "fmt" - "net/http" - - httperror "github.com/portainer/libhttp/error" - "github.com/portainer/libhttp/request" - "github.com/portainer/libhttp/response" - portaineree "github.com/portainer/portainer-ee/api" - "github.com/portainer/portainer-ee/api/database/models" - portainerDsErrors "github.com/portainer/portainer/api/dataservices/errors" -) - -// @id GetKubernetesIngressControllers -// @summary Fetches a list of ingress controllers with classes -// @description Fetches a list of ingress controllers which have associated -// classes from the kubernetes api -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/ingresscontrollers [get] -func (handler *Handler) getKubernetesIngressControllers(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - endpointID, err := request.RetrieveNumericRouteVariableValue(r, "id") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid environment identifier route variable", - Err: err, - } - } - - endpoint, err := handler.DataStore.Endpoint().Endpoint(portaineree.EndpointID(endpointID)) - if err == portainerDsErrors.ErrObjectNotFound { - return &httperror.HandlerError{ - StatusCode: http.StatusNotFound, - Message: "Unable to find an environment with the specified identifier inside the database", - Err: err, - } - } else if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to find an environment with the specified identifier inside the database", - Err: err, - } - } - - cli, err := handler.KubernetesClientFactory.GetKubeClient(endpoint) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to create Kubernetes client", - Err: err, - } - } - - controllers := cli.GetIngressControllers() - existingClasses := endpoint.Kubernetes.Configuration.IngressClasses - for i := range controllers { - controllers[i].Availability = true - controllers[i].New = true - - // Check if the controller is blocked globally. - for _, a := range existingClasses { - controllers[i].New = false - if controllers[i].ClassName != a.Name { - continue - } - controllers[i].New = false - - // Skip over non-global blocks. - if len(a.BlockedNamespaces) > 0 { - continue - } - - if controllers[i].ClassName == a.Name { - controllers[i].Availability = !a.Blocked - } - } - // TODO: Update existingClasses to take care of New and remove no longer - // existing classes. - } - return response.JSON(w, controllers) -} - -// @id GetKubernetesIngressControllersByNamespace -// @summary Fetches a list of ingress controllers with classes allowed in a -// namespace -// @description Fetches a list of ingress controllers which have associated -// classes from the kubernetes api and have been allowed in a given namespace -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces/{namespace}/ingresscontrollers [get] -func (handler *Handler) getKubernetesIngressControllersByNamespace(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - endpointID, err := request.RetrieveNumericRouteVariableValue(r, "id") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid environment identifier route variable", - Err: err, - } - } - - endpoint, err := handler.DataStore.Endpoint().Endpoint(portaineree.EndpointID(endpointID)) - if err == portainerDsErrors.ErrObjectNotFound { - return &httperror.HandlerError{ - StatusCode: http.StatusNotFound, - Message: "Unable to find an environment with the specified identifier inside the database", - Err: err, - } - } else if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to find an environment with the specified identifier inside the database", - Err: err, - } - } - - namespace, err := request.RetrieveRouteVariableValue(r, "namespace") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid namespace identifier route variable", - Err: err, - } - } - - cli, err := handler.KubernetesClientFactory.GetKubeClient(endpoint) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to create Kubernetes client", - Err: err, - } - } - - controllers := cli.GetIngressControllers() - existingClasses := endpoint.Kubernetes.Configuration.IngressClasses - for i := range controllers { - controllers[i].Availability = true - controllers[i].New = true - - // Check if the controller is blocked globally or in the current - // namespace. - for _, a := range existingClasses { - if controllers[i].ClassName != a.Name { - continue - } - controllers[i].New = false - - // If it's not blocked we're all done! - if !a.Blocked { - continue - } - - // Global blocks. - if len(a.BlockedNamespaces) == 0 { - controllers[i].Availability = false - continue - } - - // Also check the current namespace. - for _, ns := range a.BlockedNamespaces { - if namespace == ns { - controllers[i].Availability = false - } - } - } - // TODO: Update existingClasses to take care of New and remove no longer - // existing classes. - } - return response.JSON(w, controllers) -} - -// @id UpdateKubernetesIngressControllers -// @summary Updates a list of ingress controller permissions globally in a -// cluster -// @description Updates a list of ingress controller permissions to deny or -// allow their usage in a given cluster -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @param body body models.K8sIngressControllers true "list of controllers to update" -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/ingresscontrollers [put] -func (handler *Handler) updateKubernetesIngressControllers(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - endpointID, err := request.RetrieveNumericRouteVariableValue(r, "id") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid environment identifier route variable", - Err: err, - } - } - - endpoint, err := handler.DataStore.Endpoint().Endpoint(portaineree.EndpointID(endpointID)) - if err == portainerDsErrors.ErrObjectNotFound { - return &httperror.HandlerError{ - StatusCode: http.StatusNotFound, - Message: "Unable to find an environment with the specified identifier inside the database", - Err: err, - } - } else if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to find an environment with the specified identifier inside the database", - Err: err, - } - } - - var payload models.K8sIngressControllers - err = request.DecodeAndValidateJSONPayload(r, &payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid request payload", - Err: err, - } - } - - classes := endpoint.Kubernetes.Configuration.IngressClasses - for _, p := range payload { - for i := range classes { - if p.ClassName == classes[i].Name { - classes[i].Blocked = !p.Availability - } - } - } - endpoint.Kubernetes.Configuration.IngressClasses = classes - fmt.Printf("%#v\n", endpoint.Kubernetes.Configuration.IngressClasses) - err = handler.DataStore.Endpoint().UpdateEndpoint( - portaineree.EndpointID(endpointID), - endpoint, - ) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to update the BlockedIngressClasses inside the database", - Err: err, - } - } - return nil -} - -// @id UpdateKubernetesIngressControllers -// @summary Updates a list of ingress controller permissions in a particular -// namespace in a particular cluster -// @description Updates a list of ingress controller permissions in a particular -// namespace in a particular cluster -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @param body body models.K8sIngressControllers true "list of controllers to update" -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces/{namespace}/ingresscontrollers [put] -func (handler *Handler) updateKubernetesIngressControllersByNamespace(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - endpointID, err := request.RetrieveNumericRouteVariableValue(r, "id") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid environment identifier route variable", - Err: err, - } - } - - endpoint, err := handler.DataStore.Endpoint().Endpoint(portaineree.EndpointID(endpointID)) - if err == portainerDsErrors.ErrObjectNotFound { - return &httperror.HandlerError{ - StatusCode: http.StatusNotFound, - Message: "Unable to find an environment with the specified identifier inside the database", - Err: err, - } - } else if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to find an environment with the specified identifier inside the database", - Err: err, - } - } - - namespace, err := request.RetrieveRouteVariableValue(r, "namespace") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid namespace identifier route variable", - Err: err, - } - } - - var payload models.K8sIngressControllers - err = request.DecodeAndValidateJSONPayload(r, &payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid request payload", - Err: err, - } - } - - classes := endpoint.Kubernetes.Configuration.IngressClasses -PayloadLoop: - for _, p := range payload { - for i := range classes { - if p.ClassName == classes[i].Name { - if p.Availability == true { - classes[i].Blocked = false - classes[i].BlockedNamespaces = []string{} - continue PayloadLoop - } - - // If it's meant to be blocked we need to add the current - // namespace. First, check if it's already in the - // BlockedNamespaces and if not we append it. - classes[i].Blocked = true - for _, ns := range classes[i].BlockedNamespaces { - if namespace == ns { - continue PayloadLoop - } - } - classes[i].BlockedNamespaces = append( - classes[i].BlockedNamespaces, - namespace, - ) - } - } - } - endpoint.Kubernetes.Configuration.IngressClasses = classes - fmt.Printf("%#v\n", endpoint.Kubernetes.Configuration.IngressClasses) - err = handler.DataStore.Endpoint().UpdateEndpoint( - portaineree.EndpointID(endpointID), - endpoint, - ) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to update the BlockedIngressClasses inside the database", - Err: err, - } - } - return nil -} - -// @id GetKubernetesIngresses -// @summary Fetches a list of ingresses in a namespace -// @description Fetches a list of ingresses in a namespace -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces/{namespace}/ingresses [get] -func (handler *Handler) getKubernetesIngresses(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - namespace, err := request.RetrieveRouteVariableValue(r, "namespace") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid namespace identifier route variable", - Err: err, - } - } - - cli := handler.KubernetesClient - ingresses, err := cli.GetIngresses(namespace) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve nodes limits", - Err: err, - } - } - - return response.JSON(w, ingresses) -} - -// @id CreateKubernetesIngresses -// @summary Creates an ingress in a namespace -// @description Creates an ingress in a namespace -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @param body body models.K8sIngressInfo true "ingress to create" -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces/{namespace}/ingresses [post] -func (handler *Handler) createKubernetesIngress(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - namespace, err := request.RetrieveRouteVariableValue(r, "namespace") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid namespace identifier route variable", - Err: err, - } - } - - var payload models.K8sIngressInfo - err = request.DecodeAndValidateJSONPayload(r, &payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid request payload", - Err: err, - } - } - - cli := handler.KubernetesClient - err = cli.CreateIngress(namespace, payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve nodes limits", - Err: err, - } - } - return nil -} - -// @id DeleteKubernetesIngresses -// @summary Deletes an ingress in a namespace -// @description Fetches a list of ingresses in a namespace -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @param body body models.K8sIngressDeleteRequests true "ingress to delete" -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces/{namespace}/ingresses/delete [post] -func (handler *Handler) deleteKubernetesIngresses(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - cli := handler.KubernetesClient - - var payload models.K8sIngressDeleteRequests - err := request.DecodeAndValidateJSONPayload(r, &payload) - if err != nil { - return httperror.BadRequest("Invalid request payload", err) - } - - err = cli.DeleteIngresses(payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve nodes limits", - Err: err, - } - } - return nil -} - -// @id UpdateKubernetesIngresses -// @summary Updates an ingress in a namespace -// @description Fetches a list of ingresses in a namespace -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @param body body models.K8sIngressInfo true "ingress to update" -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces/{namespace}/ingresses [put] -func (handler *Handler) updateKubernetesIngress(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - namespace, err := request.RetrieveRouteVariableValue(r, "namespace") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid namespace identifier route variable", - Err: err, - } - } - - var payload models.K8sIngressInfo - err = request.DecodeAndValidateJSONPayload(r, &payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid request payload", - Err: err, - } - } - - cli := handler.KubernetesClient - err = cli.UpdateIngress(namespace, payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve nodes limits", - Err: err, - } - } - return nil -} diff --git a/namespaces.go b/namespaces.go deleted file mode 100644 index bb96ee967..000000000 --- a/namespaces.go +++ /dev/null @@ -1,162 +0,0 @@ -package kubernetes - -import ( - "net/http" - - httperror "github.com/portainer/libhttp/error" - "github.com/portainer/libhttp/request" - "github.com/portainer/libhttp/response" - "github.com/portainer/portainer-ee/api/database/models" -) - -// @id GetKubernetesNamespaces -// @summary Fetches a list of namespaces for a given cluster -// @description Fetches a list of namespaces for a given cluster -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces [get] -func (handler *Handler) getKubernetesNamespaces(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - cli := handler.KubernetesClient - - namespaces, err := cli.GetNamespaces() - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve nodes limits", - Err: err, - } - } - - return response.JSON(w, namespaces) -} - -// @id CreateKubernetesNamespace -// @summary Creates a namespace in a given cluster -// @description Creates a namespace in a given cluster -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @param body body models.K8sNamespaceInfo true "namespace to create" -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces [post] -func (handler *Handler) createKubernetesNamespace(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - cli := handler.KubernetesClient - - var payload models.K8sNamespaceInfo - err := request.DecodeAndValidateJSONPayload(r, &payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid request payload", - Err: err, - } - } - - err = cli.CreateNamespace(payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve nodes limits", - Err: err, - } - } - return nil -} - -// @id DeleteKubernetesNamespaces -// @summary Delete a namespace from a given cluster -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespace/{namespace} [delete] -func (handler *Handler) deleteKubernetesNamespaces(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - cli := handler.KubernetesClient - - namespace, err := request.RetrieveRouteVariableValue(r, "namespace") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid namespace identifier route variable", - Err: err, - } - } - - err = cli.DeleteNamespace(namespace) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve nodes limits", - Err: err, - } - } - - return nil -} - -// @id UpdateKubernetesNamespace -// @summary Updates a namespace in a given cluster -// @description Updates a namespace in a given cluster -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @param body body models.K8sNamespaceInfo true "namespace to update" -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces [put] -func (handler *Handler) updateKubernetesNamespace(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - cli := handler.KubernetesClient - - var payload models.K8sNamespaceInfo - err := request.DecodeAndValidateJSONPayload(r, &payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid request payload", - Err: err, - } - } - - err = cli.UpdateNamespace(payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve nodes limits", - Err: err, - } - } - return nil -} diff --git a/services.go b/services.go deleted file mode 100644 index 53482ebf6..000000000 --- a/services.go +++ /dev/null @@ -1,188 +0,0 @@ -package kubernetes - -import ( - "net/http" - - httperror "github.com/portainer/libhttp/error" - "github.com/portainer/libhttp/request" - "github.com/portainer/libhttp/response" - "github.com/portainer/portainer-ee/api/database/models" -) - -// @id GetKubernetesServices -// @summary Fetches a list of services in a namespace -// @description Fetches a list of services in a namespace -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces/{namespace}/services [get] -func (handler *Handler) getKubernetesServices(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - namespace, err := request.RetrieveRouteVariableValue(r, "namespace") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid namespace identifier route variable", - Err: err, - } - } - - cli := handler.KubernetesClient - services, err := cli.GetServices(namespace) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve services", - Err: err, - } - } - - return response.JSON(w, services) -} - -// @id CreateKubernetesService -// @summary Creates an service in a namespace -// @description Creates an service in a namespace -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @param body body models.K8sServiceInfo true "service to create" -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces/{namespace}/services [post] -func (handler *Handler) createKubernetesService(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - namespace, err := request.RetrieveRouteVariableValue(r, "namespace") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid namespace identifier route variable", - Err: err, - } - } - - var payload models.K8sServiceInfo - err = request.DecodeAndValidateJSONPayload(r, &payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid request payload", - Err: err, - } - } - - cli := handler.KubernetesClient - err = cli.CreateService(namespace, payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve nodes limits", - Err: err, - } - } - return nil -} - -// @id DeleteKubernetesServices -// @summary Deletes a service in a namespace -// @description Deletes a service in a namespace -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @param body body models.K8sServiceDeleteRequests true "service to delete" -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces/{namespace}/services/delete [post] -func (handler *Handler) deleteKubernetesServices(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - cli := handler.KubernetesClient - - var payload models.K8sServiceDeleteRequests - err := request.DecodeAndValidateJSONPayload(r, &payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid request payload", - Err: err, - } - } - - err = cli.DeleteServices(payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve nodes limits", - Err: err, - } - } - return nil -} - -// @id UpdateKubernetesService -// @summary Updates an service in a namespace -// @description Updates an service in a namespace -// @description **Access policy**: authenticated -// @tags kubernetes -// @security ApiKeyAuth -// @security jwt -// @accept json -// @produce json -// @param body body models.K8sServiceInfo true "service to update" -// @success 200 "Success" -// @failure 400 "Invalid request" -// @failure 401 "Unauthorized" -// @failure 403 "Permission denied" -// @failure 404 "Environment(Endpoint) not found" -// @failure 500 "Server error" -// @router /kubernetes/{id}/namespaces/{namespace}/services [put] -func (handler *Handler) updateKubernetesService(w http.ResponseWriter, r *http.Request) *httperror.HandlerError { - namespace, err := request.RetrieveRouteVariableValue(r, "namespace") - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid namespace identifier route variable", - Err: err, - } - } - - var payload models.K8sServiceInfo - err = request.DecodeAndValidateJSONPayload(r, &payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusBadRequest, - Message: "Invalid request payload", - Err: err, - } - } - - cli := handler.KubernetesClient - err = cli.UpdateService(namespace, payload) - if err != nil { - return &httperror.HandlerError{ - StatusCode: http.StatusInternalServerError, - Message: "Unable to retrieve nodes limits", - Err: err, - } - } - return nil -}