diff --git a/Makefile b/Makefile index dc82bfb..2e8cda5 100644 --- a/Makefile +++ b/Makefile @@ -6,8 +6,13 @@ build: clean run: bee run -gendoc=true -downdoc=true -dev: - bee generate routers && HTTPPORT=8092 bee run -gendoc=true -downdoc=true -runmode=dev +purge: + lsof -t -i:8092 | xargs kill | true + +run-dev: + bee generate routers && bee run -gendoc=true -downdoc=true -runmode=prod + +dev: purge run-dev debug: bee run -downdebug -gendebug @@ -27,4 +32,4 @@ publish-registry: all: docker publish-kind publish-registry -.PHONY: build run clean docker publish-kind publish-registry \ No newline at end of file +.PHONY: build run clean docker publish-kind publish-registry diff --git a/conf/app.conf b/conf/app.conf index 10e6e5f..49ac9f4 100644 --- a/conf/app.conf +++ b/conf/app.conf @@ -1,5 +1,5 @@ appname = oc-datacenter -httpport = 8080 +httpport = 8092 runmode = dev autorender = false copyrequestbody = true diff --git a/controllers/admiralty.go b/controllers/admiralty.go index 7a9c65c..e9b3f5a 100644 --- a/controllers/admiralty.go +++ b/controllers/admiralty.go @@ -486,7 +486,7 @@ func (c *AdmiraltyController) GetAdmiraltyKubeconfig() { return } - b, err := yaml.Marshal(kubeconfig) + b, err := json.Marshal(kubeconfig) if err != nil { fmt.Println("Error while marshalling kubeconfig") c.Ctx.Output.SetStatus(500) @@ -519,7 +519,7 @@ func NewHostKubeWithToken(token string) (*models.KubeConfigValue, error){ { Name: "default", Cluster: models.KubeconfigCluster{ - Server: conf.GetConfig().KubeHost, + Server: "https://" + conf.GetConfig().KubeHost + ":6443", CertificateAuthorityData: encodedCA, }, }, diff --git a/controllers/version.go b/controllers/version.go index 1f7ae37..1574ac8 100644 --- a/controllers/version.go +++ b/controllers/version.go @@ -15,7 +15,10 @@ type VersionController struct { // @Success 200 // @router / [get] func (c *VersionController) GetAll() { - c.Data["json"] = map[string]string{"version": "1"} + c.Data["json"] = map[string]string{ + "service": "oc-datacenter", + "version": "1", + } c.ServeJSON() } diff --git a/docker-compose.yml b/docker-compose.yml index d90bd3b..f3effaa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,9 +18,9 @@ services: - "traefik.http.middlewares.datacenter.forwardauth.address=http://oc-auth:8080/oc/forward" container_name: oc-datacenter networks: - - catalog + - oc networks: - catalog: + oc: external: true \ No newline at end of file diff --git a/go.mod b/go.mod index 1c3927f..e4b5cf1 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,9 @@ toolchain go1.23.3 require ( cloud.o-forge.io/core/oc-lib v0.0.0-20250219142942-5111c9c8bec7 github.com/beego/beego/v2 v2.3.1 + github.com/golang-jwt/jwt/v5 v5.2.2 go.mongodb.org/mongo-driver v1.17.1 + gopkg.in/yaml.v2 v2.4.0 k8s.io/api v0.32.1 k8s.io/apimachinery v0.32.1 k8s.io/client-go v0.32.1 diff --git a/go.sum b/go.sum index f9fcddf..78e7470 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -cloud.o-forge.io/core/oc-lib v0.0.0-20250219104152-3ecb0e9d960b h1:DhRqJdw2VePaYVlsh8OUA3zl+76Q0FWwGu+a+3aOf6s= -cloud.o-forge.io/core/oc-lib v0.0.0-20250219104152-3ecb0e9d960b/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE= cloud.o-forge.io/core/oc-lib v0.0.0-20250219142942-5111c9c8bec7 h1:fh6SzBPenzIxufIIzExtx4jEE4OhFposqn3EbHFr92Q= cloud.o-forge.io/core/oc-lib v0.0.0-20250219142942-5111c9c8bec7/go.mod h1:2roQbUpv3a6mTIr5oU1ux31WbN8YucyyQvCQ0FqwbcE= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -52,6 +50,10 @@ github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= +github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= @@ -262,6 +264,8 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/models/kubeconfig.go b/models/kubeconfig.go index 5c1d652..3a14a83 100644 --- a/models/kubeconfig.go +++ b/models/kubeconfig.go @@ -2,55 +2,55 @@ package models // KubeConfigValue is a struct used to create a kubectl configuration YAML file. type KubeConfigValue struct { - APIVersion string `yaml:"apiVersion"` - Kind string `yaml:"kind"` - Clusters []KubeconfigNamedCluster `yaml:"clusters"` - Users []KubeconfigUser `yaml:"users"` - Contexts []KubeconfigNamedContext `yaml:"contexts"` - CurrentContext string `yaml:"current-context"` - Preferences struct{} `yaml:"preferences"` + APIVersion string `yaml:"apiVersion" json:"apiVersion"` + Kind string `yaml:"kind" json:"kind"` + Clusters []KubeconfigNamedCluster `yaml:"clusters" json:"clusters"` + Users []KubeconfigUser `yaml:"users" json:"users"` + Contexts []KubeconfigNamedContext `yaml:"contexts" json:"contexts"` + CurrentContext string `yaml:"current-context" json:"current-context"` + Preferences struct{} `yaml:"preferences" json:"preferences"` } // KubeconfigUser is a struct used to create a kubectl configuration YAML file type KubeconfigUser struct { - Name string `yaml:"name"` - User KubeconfigUserKeyPair `yaml:"user"` + Name string `yaml:"name" json:"name"` + User KubeconfigUserKeyPair `yaml:"user" json:"user"` } // KubeconfigUserKeyPair is a struct used to create a kubectl configuration YAML file type KubeconfigUserKeyPair struct { - Token string `yaml:"token"` + Token string `yaml:"token" json:"token"` } // KubeconfigAuthProvider is a struct used to create a kubectl authentication provider type KubeconfigAuthProvider struct { - Name string `yaml:"name"` - Config map[string]string `yaml:"config"` + Name string `yaml:"name" json:"name"` + Config map[string]string `yaml:"config" json:"config"` } // KubeconfigNamedCluster is a struct used to create a kubectl configuration YAML file type KubeconfigNamedCluster struct { - Name string `yaml:"name"` - Cluster KubeconfigCluster `yaml:"cluster"` + Name string `yaml:"name" json:"name"` + Cluster KubeconfigCluster `yaml:"cluster" json:"cluster"` } // KubeconfigCluster is a struct used to create a kubectl configuration YAML file type KubeconfigCluster struct { - Server string `yaml:"server"` - CertificateAuthorityData string `yaml:"certificate-authority-data"` - CertificateAuthority string `yaml:"certificate-authority"` + Server string `yaml:"server" json:"server"` + CertificateAuthorityData string `yaml:"certificate-authority-data" json:"certificate-authority-data"` + CertificateAuthority string `yaml:"certificate-authority" json:"certificate-authority"` } // KubeconfigNamedContext is a struct used to create a kubectl configuration YAML file type KubeconfigNamedContext struct { - Name string `yaml:"name"` - Context KubeconfigContext `yaml:"context"` + Name string `yaml:"name" json:"name"` + Context KubeconfigContext `yaml:"context" json:"context"` } // KubeconfigContext is a struct used to create a kubectl configuration YAML file type KubeconfigContext struct { - Cluster string `yaml:"cluster"` - Namespace string `yaml:"namespace,omitempty"` - User string `yaml:"user"` + Cluster string `yaml:"cluster" json:"cluster"` + Namespace string `yaml:"namespace,omitempty" json:"namespace,omitempty"` + User string `yaml:"user" json:"user"` } \ No newline at end of file diff --git a/oc-datacenter b/oc-datacenter new file mode 100755 index 0000000..b9d7c63 Binary files /dev/null and b/oc-datacenter differ diff --git a/routers/commentsRouter.go b/routers/commentsRouter.go new file mode 100644 index 0000000..d06faeb --- /dev/null +++ b/routers/commentsRouter.go @@ -0,0 +1,190 @@ +package routers + +import ( + beego "github.com/beego/beego/v2/server/web" + "github.com/beego/beego/v2/server/web/context/param" +) + +func init() { + + beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"], + beego.ControllerComments{ + Method: "GetAdmiraltyKubeconfig", + Router: `/kubeconfig/:execution`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"], + beego.ControllerComments{ + Method: "GetNodeReady", + Router: `/node/:execution`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"], + beego.ControllerComments{ + Method: "GetKubeSecret", + Router: `/secret/:execution`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"], + beego.ControllerComments{ + Method: "CreateKubeSecret", + Router: `/secret/:execution`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"], + beego.ControllerComments{ + Method: "CreateSource", + Router: `/source/:execution`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"], + beego.ControllerComments{ + Method: "CreateAdmiraltyTarget", + Router: `/target/:execution`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"], + beego.ControllerComments{ + Method: "GetAllTargets", + Router: `/targets`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:AdmiraltyController"], + beego.ControllerComments{ + Method: "GetOneTarget", + Router: `/targets/:execution`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"], + beego.ControllerComments{ + Method: "GetAll", + Router: `/`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"], + beego.ControllerComments{ + Method: "Post", + Router: `/`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"], + beego.ControllerComments{ + Method: "Get", + Router: `/:id`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"], + beego.ControllerComments{ + Method: "Put", + Router: `/:id`, + AllowHTTPMethods: []string{"put"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"], + beego.ControllerComments{ + Method: "Check", + Router: `/check/:id/:start_date/:end_date`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"], + beego.ControllerComments{ + Method: "Search", + Router: `/search/:start_date/:end_date`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:BookingController"], + beego.ControllerComments{ + Method: "ExecutionSearch", + Router: `/search/execution/:id`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:DatacenterController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:DatacenterController"], + beego.ControllerComments{ + Method: "GetAll", + Router: `/`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:DatacenterController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:DatacenterController"], + beego.ControllerComments{ + Method: "Get", + Router: `/:id`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:SessionController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:SessionController"], + beego.ControllerComments{ + Method: "GetToken", + Router: `/token/:id/:duration`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:VersionController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:VersionController"], + beego.ControllerComments{ + Method: "GetAll", + Router: `/`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-datacenter/controllers:VersionController"] = append(beego.GlobalControllerRouter["oc-datacenter/controllers:VersionController"], + beego.ControllerComments{ + Method: "Status", + Router: `/status`, + AllowHTTPMethods: []string{"get"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + +} diff --git a/routers/router.go b/routers/router.go index 48605bb..73441aa 100644 --- a/routers/router.go +++ b/routers/router.go @@ -15,9 +15,9 @@ import ( func init() { ns := beego.NewNamespace("/oc/", - beego.NSInclude( - &controllers.DatacenterController{}, - ), + beego.NSInclude( + &controllers.DatacenterController{}, + ), beego.NSNamespace("/session", beego.NSInclude( @@ -40,6 +40,6 @@ func init() { ), ), ) - + beego.AddNamespace(ns) }