package k8s import ( "encoding/json" "fmt" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/common/conf" "gitlab.wodcloud.com/smart-operation/so-operation-api/src/util" "github.com/pkg/errors" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) type K8sSvc struct { Header map[string]string } type SendFile struct { Name string `json:"name"` Namespace string `json:"namespace"` Content interface{} `json:"content"` } type K8sCsrfToken struct { Token string `json:"token"` } type UploadFileObj struct { Name string `json:"name"` Namespace string `json:"namespace"` Content Content `json:"content"` } type Content struct { Kind string `json:"kind"` ApiVersion string `json:"apiVersion"` Metadata v1.ObjectMeta `json:"metadata"` Spec interface{} `json:"spec"` } type AddBgObjectFile struct { ApiVersion string `json:"apiVersion"` Kind string `json:"kind"` Metadata struct { Name string `json:"name"` Namespace string `json:"namespace"` Annotations map[string]string `json:"annotations,omitempty"` Labels map[string]string `json:"labels"` } `json:"metadata"` Spec interface{} `json:"spec"` Data interface{} `json:"data"` } var KindBlackList = []string{"PersistentVolumeClaim", "PersistentVolume", "namespace"} func (k *K8sSvc) SendFile(content *Content) (res string, err error) { if err = k.checkK8sKind(content.Kind); err != nil { return } csrfUrl := fmt.Sprintf("%s/kubernetes/api/v1/csrftoken/appdeploymentfromfile", conf.Options.AweRestURL) sendUrl := fmt.Sprintf("%s/kubernetes/api/v1/appdeploymentfromfile", conf.Options.AweRestURL) csrf, err := util.ProxySendRes("GET", csrfUrl, "", k.Header) if err != nil { return "", err } csrfToken := K8sCsrfToken{} json.Unmarshal(csrf, &csrfToken) if csrfToken.Token == "" { err := errors.New("get csrfToken failed") return "", err } k.Header["x-csrf-token"] = csrfToken.Token k.Header["Content-Type"] = "application/json" // sendFile sendFile := SendFile{Name: content.Metadata.Name, Namespace: content.Metadata.Namespace} c, _ := json.Marshal(content) sendFile.Content = string(c) sStr, _ := json.Marshal(sendFile) k8sUserJwtRes, err := util.ProxySendRes("POST", sendUrl, string(sStr), k.Header) if err != nil { return "", err } res = string(k8sUserJwtRes) //json.Unmarshal(k8sUserJwtRes, &res) return } func (k *K8sSvc) checkK8sKind(kind string) (err error) { for _, v := range KindBlackList { if kind == v { return errors.New("当前用户没有上传此类型资源的权限!") } } return nil }