diff --git a/pkg/apicontracts/metrics.go b/pkg/apicontracts/metrics.go index 55e77bd2..d71963f1 100644 --- a/pkg/apicontracts/metrics.go +++ b/pkg/apicontracts/metrics.go @@ -6,6 +6,18 @@ import ( "github.com/NorskHelsenett/ror/pkg/apicontracts/apiresourcecontracts" ) +type MetricMetadata struct { + Type string `json:"type" bson:"type"` + ClusterId string `json:"clusterId" bson:"clusterId"` + Name string `json:"name" bson:"name"` +} + +type PersistentVolumeClaimMetric struct { + Metadata MetricMetadata `json:"metadata" bson:"metadata"` + Timestamp time.Time `json:"timestamp" bson:"timestamp"` + RequestedAllocation string `json:"requestedAllocation" bson:"requestedAllocation"` +} + type PodMetricsList struct { Kind string `json:"kind"` APIVersion string `json:"apiVersion"` diff --git a/pkg/clients/rorclient/client.go b/pkg/clients/rorclient/client.go new file mode 100644 index 00000000..3b570071 --- /dev/null +++ b/pkg/clients/rorclient/client.go @@ -0,0 +1,78 @@ +package rorclient + +import ( + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports" + v1clusters "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/clusters" + v1datacenter "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/datacenter" + v1info "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/info" + v1metrics "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/metrics" + v1projects "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/projects" + v1resources "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/resources" + v1workspaces "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/workspaces" + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v2/rorclientv2self" +) + +type RorConfig struct { + Host string +} + +type RorClient struct { + Transport transports.RorTransport + infoClientV1 v1info.InfoInterface + datacenterClientV1 v1datacenter.DatacenterInterface + clustersClientV1 v1clusters.ClustersInterface + workspacesClientV1 v1workspaces.WorkspacesInterface + selfClientV2 rorclientv2self.SelfInterface + projectsClientV1 v1projects.ProjectsInterface + resourceClientV1 v1resources.ResourceInterface + metricsClientV1 v1metrics.MetricsInterface +} + +func NewRorClient(transport transports.RorTransport) *RorClient { + return &RorClient{ + Transport: transport, + infoClientV1: transport.Info(), + datacenterClientV1: transport.Datacenters(), + clustersClientV1: transport.Clusters(), + workspacesClientV1: transport.Workspaces(), + projectsClientV1: transport.Projects(), + selfClientV2: transport.Self(), + resourceClientV1: transport.Resources(), + metricsClientV1: transport.Metrics(), + } +} + +func (c *RorClient) SetTransport(transport transports.RorTransport) { + c.Transport = transport +} +func (c *RorClient) Info() v1info.InfoInterface { + return c.infoClientV1 +} +func (c *RorClient) Self() rorclientv2self.SelfInterface { + return c.selfClientV2 +} + +func (c *RorClient) Datacenters() v1datacenter.DatacenterInterface { + return c.datacenterClientV1 +} +func (c *RorClient) Clusters() v1clusters.ClustersInterface { + return c.clustersClientV1 +} +func (c *RorClient) Workspaces() v1workspaces.WorkspacesInterface { + return c.workspacesClientV1 +} + +func (c *RorClient) Projects() v1projects.ProjectsInterface { + return c.projectsClientV1 +} +func (c *RorClient) Metrics() v1metrics.MetricsInterface { + return c.metricsClientV1 +} + +func (c *RorClient) Resources() v1resources.ResourceInterface { + return c.resourceClientV1 +} + +func (c *RorClient) Ping() error { + return c.Transport.Ping() +} diff --git a/pkg/clients/rorclient/replace b/pkg/clients/rorclient/replace new file mode 100755 index 00000000..a8b8b99a --- /dev/null +++ b/pkg/clients/rorclient/replace @@ -0,0 +1,4 @@ +#!/bin/sh + +find . -type f -exec sed -i \ +'s/ror\/internal\/clients/github.com\/NorskHelsenett\/ror\/pkg\/clients/g' {} + diff --git a/pkg/clients/rorclient/transports/interfaces.go b/pkg/clients/rorclient/transports/interfaces.go new file mode 100644 index 00000000..621bbe88 --- /dev/null +++ b/pkg/clients/rorclient/transports/interfaces.go @@ -0,0 +1,24 @@ +package transports + +import ( + v1clusters "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/clusters" + v1datacenter "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/datacenter" + v1info "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/info" + v1metrics "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/metrics" + v1projects "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/projects" + v1resources "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/resources" + v1workspaces "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/workspaces" + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v2/rorclientv2self" +) + +type RorTransport interface { + Info() v1info.InfoInterface + Datacenters() v1datacenter.DatacenterInterface + Clusters() v1clusters.ClustersInterface + Self() rorclientv2self.SelfInterface + Workspaces() v1workspaces.WorkspacesInterface + Projects() v1projects.ProjectsInterface + Resources() v1resources.ResourceInterface + Metrics() v1metrics.MetricsInterface + Ping() error +} diff --git a/pkg/clients/rorclient/transports/mocktransport/mocktransportinfo/info.go b/pkg/clients/rorclient/transports/mocktransport/mocktransportinfo/info.go new file mode 100644 index 00000000..9d29c646 --- /dev/null +++ b/pkg/clients/rorclient/transports/mocktransport/mocktransportinfo/info.go @@ -0,0 +1,12 @@ +package mocktransportinfo + +type V1Client struct { +} + +func NewV1Client() *V1Client { + return &V1Client{} +} + +func (c *V1Client) GetVersion() (string, error) { + return "1.1.1", nil +} diff --git a/pkg/clients/rorclient/transports/mocktransport/transport.go b/pkg/clients/rorclient/transports/mocktransport/transport.go new file mode 100644 index 00000000..1ced7c43 --- /dev/null +++ b/pkg/clients/rorclient/transports/mocktransport/transport.go @@ -0,0 +1,21 @@ +package mocktransport + +import ( + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/mocktransport/mocktransportinfo" + v1info "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/info" +) + +type RorMockTransport struct { + infoClientV1 v1info.InfoInterface +} + +func NewRorMockTransport() *RorMockTransport { + t := &RorMockTransport{ + infoClientV1: mocktransportinfo.NewV1Client(), + } + return t +} + +func (t *RorMockTransport) Info() v1info.InfoInterface { + return t.infoClientV1 +} diff --git a/pkg/clients/rorclient/transports/resttransport/httpauthprovider/authprovider.go b/pkg/clients/rorclient/transports/resttransport/httpauthprovider/authprovider.go new file mode 100644 index 00000000..b2115b03 --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/httpauthprovider/authprovider.go @@ -0,0 +1,35 @@ +package httpauthprovider + +import ( + "fmt" + "net/http" +) + +type AuthProviderType string + +const ( + AuthPoviderTypeAPIKey AuthProviderType = "APIKEY" + AuthProviderTypeBearer AuthProviderType = "BEARER" +) + +type AuthProvider struct { + Type AuthProviderType + Secret string +} + +func NewAuthProvider(providertype AuthProviderType, secret string) *AuthProvider { + return &AuthProvider{ + Type: providertype, + Secret: secret, + } +} + +func (a *AuthProvider) AddAuthHeaders(req *http.Request) { + switch a.Type { + case AuthPoviderTypeAPIKey: + req.Header.Add("X-API-KEY", a.Secret) + case AuthProviderTypeBearer: + req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", a.Secret)) + req.Header.Add("Flow", "device") + } +} diff --git a/pkg/clients/rorclient/transports/resttransport/httpauthprovider/noauthprovider.go b/pkg/clients/rorclient/transports/resttransport/httpauthprovider/noauthprovider.go new file mode 100644 index 00000000..a1d1c1ce --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/httpauthprovider/noauthprovider.go @@ -0,0 +1,14 @@ +package httpauthprovider + +import "net/http" + +type NoAuthprovider struct { +} + +func NewNoAuthprovider() *NoAuthprovider { + return &NoAuthprovider{} +} + +func (a NoAuthprovider) AddAuthHeaders(req *http.Request) { + +} diff --git a/pkg/clients/rorclient/transports/resttransport/httpclient/client.go b/pkg/clients/rorclient/transports/resttransport/httpclient/client.go new file mode 100644 index 00000000..5d11a2dc --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/httpclient/client.go @@ -0,0 +1,180 @@ +package httpclient + +import ( + "bytes" + "encoding/json" + "fmt" + "github.com/NorskHelsenett/ror/pkg/config/rorversion" + "io" + "net/http" +) + +type HttpTransportClientParams string + +const ( + HttpTransportClientParamsNoAuth HttpTransportClientParams = "NOAUTH" +) + +type HttpTransportClientConfig struct { + BaseURL string + AuthProvider HttpTransportAuthProvider + Role string + Version rorversion.RorVersion +} + +type HttpTransportAuthProvider interface { + AddAuthHeaders(req *http.Request) +} + +type HttpTransportClient struct { + Client *http.Client + Config *HttpTransportClientConfig +} + +func (t *HttpTransportClient) GetJSON(path string, out any, params ...HttpTransportClientParams) error { + var noAuth bool + req, err := http.NewRequest("GET", t.Config.BaseURL+path, nil) + if err != nil { + return err + } + + if len(params) != 0 { + for _, param := range params { + switch param { + case HttpTransportClientParamsNoAuth: + noAuth = true + } + } + } + + t.AddCommonHeaders(req) + if !noAuth { + t.AddAuthHeaders(req) + } + + req.Header.Add("Accept", `application/json`) + + res, err := t.Client.Do(req) + if err != nil { + return err + } + + if res.StatusCode > 399 || res.StatusCode < 200 { + return fmt.Errorf("http error: %s from %s", res.Status, res.Request.URL) + } + + defer res.Body.Close() + + body, err := io.ReadAll(res.Body) + if err != nil { + return err + } + + err = json.Unmarshal(body, out) + if err != nil { + return err + } + + return nil +} + +func (t *HttpTransportClient) PostJSON(path string, inn any, out any, params ...HttpTransportClientParams) error { + var noAuth bool + + jsonData, err := json.Marshal(inn) + req, err := http.NewRequest("POST", t.Config.BaseURL+path, bytes.NewBuffer(jsonData)) + if err != nil { + return err + } + + if len(params) != 0 { + for _, param := range params { + switch param { + case HttpTransportClientParamsNoAuth: + noAuth = true + } + } + } + + t.AddCommonHeaders(req) + if !noAuth { + t.AddAuthHeaders(req) + } + + res, err := t.Client.Do(req) + if err != nil { + return err + } + defer res.Body.Close() + + if res.StatusCode > 399 || res.StatusCode < 200 { + return fmt.Errorf("http error: %s from %s", res.Status, res.Request.URL) + } + + body, err := io.ReadAll(res.Body) + if err != nil { + return err + } + + err = json.Unmarshal(body, out) + if err != nil { + return err + } + + return nil +} + +func (t *HttpTransportClient) PutJSON(path string, inn any, out any, params ...HttpTransportClientParams) error { + var noAuth bool + + jsonData, err := json.Marshal(inn) + req, err := http.NewRequest("PUT", t.Config.BaseURL+path, bytes.NewBuffer(jsonData)) + if err != nil { + return err + } + + if len(params) != 0 { + for _, param := range params { + switch param { + case HttpTransportClientParamsNoAuth: + noAuth = true + } + } + } + + t.AddCommonHeaders(req) + if !noAuth { + t.AddAuthHeaders(req) + } + + res, err := t.Client.Do(req) + if err != nil { + return err + } + defer res.Body.Close() + + if res.StatusCode > 399 || res.StatusCode < 200 { + return fmt.Errorf("http error: %s from %s", res.Status, res.Request.URL) + } + + body, err := io.ReadAll(res.Body) + if err != nil { + return err + } + + err = json.Unmarshal(body, out) + if err != nil { + return err + } + + return nil +} + +func (t *HttpTransportClient) AddAuthHeaders(req *http.Request) { + t.Config.AuthProvider.AddAuthHeaders(req) +} +func (t *HttpTransportClient) AddCommonHeaders(req *http.Request) { + req.Header.Set("User-Agent", fmt.Sprintf("%s - v%s (%s)", t.Config.Role, t.Config.Version.GetVersion(), t.Config.Version.GetCommit())) + req.Header.Add("Accept", `application/json`) + req.Header.Add("Content-Type", `application/json`) +} diff --git a/pkg/clients/rorclient/transports/resttransport/transport.go b/pkg/clients/rorclient/transports/resttransport/transport.go new file mode 100644 index 00000000..c942d9fd --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/transport.go @@ -0,0 +1,88 @@ +package resttransport + +import ( + v1metrics "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/metrics" + "net/http" + + httpclient "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/httpclient" + + restv1clusters "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/v1/clusters" + restv1datacenter "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/v1/datacenter" + restv1info "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/v1/info" + restv1metrics "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/v1/metrics" + restv1projects "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/v1/projects" + restv1resources "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/v1/resources" + restv1workspaces "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/v1/workspaces" + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/v2/restclientv2self" + v1clusters "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/clusters" + v1datacenter "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/datacenter" + v1info "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/info" + v1projects "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/projects" + v1resources "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/resources" + v1workspaces "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v1/workspaces" + v2self "github.com/NorskHelsenett/ror/pkg/clients/rorclient/v2/rorclientv2self" +) + +type RorHttpTransport struct { + Client *httpclient.HttpTransportClient + infoClientV1 v1info.InfoInterface + datacenterClientV1 v1datacenter.DatacenterInterface + clustersClientV1 v1clusters.ClustersInterface + workspacesClientV1 v1workspaces.WorkspacesInterface + projectsClientV1 v1projects.ProjectsInterface + resourcesClientV1 v1resources.ResourceInterface + metricsClientV1 v1metrics.MetricsInterface + selfClientV2 v2self.SelfInterface +} + +func NewRorHttpTransport(config *httpclient.HttpTransportClientConfig) *RorHttpTransport { + client := &httpclient.HttpTransportClient{ + Client: &http.Client{}, + Config: config, + } + t := &RorHttpTransport{ + Client: client, + infoClientV1: restv1info.NewV1Client(client), + datacenterClientV1: restv1datacenter.NewV1Client(client), + clustersClientV1: restv1clusters.NewV1Client(client), + selfClientV2: restclientv2self.NewV2Client(client), + workspacesClientV1: restv1workspaces.NewV1Client(client), + projectsClientV1: restv1projects.NewV1Client(client), + resourcesClientV1: restv1resources.NewV1Client(client), + metricsClientV1: restv1metrics.NewV1Client(client), + } + return t +} + +func (t *RorHttpTransport) Info() v1info.InfoInterface { + return t.infoClientV1 +} + +func (t *RorHttpTransport) Datacenters() v1datacenter.DatacenterInterface { + return t.datacenterClientV1 +} + +func (t *RorHttpTransport) Clusters() v1clusters.ClustersInterface { + return t.clustersClientV1 +} +func (t *RorHttpTransport) Workspaces() v1workspaces.WorkspacesInterface { + return t.workspacesClientV1 +} +func (t *RorHttpTransport) Projects() v1projects.ProjectsInterface { + return t.projectsClientV1 +} +func (t *RorHttpTransport) Metrics() v1metrics.MetricsInterface { + return t.metricsClientV1 +} + +func (t *RorHttpTransport) Resources() v1resources.ResourceInterface { + return t.resourcesClientV1 +} +func (t *RorHttpTransport) Self() v2self.SelfInterface { + return t.selfClientV2 +} + +func (t *RorHttpTransport) Ping() error { + _, err := t.infoClientV1.GetVersion() + return err +} diff --git a/pkg/clients/rorclient/transports/resttransport/v1/clusters/clusters.go b/pkg/clients/rorclient/transports/resttransport/v1/clusters/clusters.go new file mode 100644 index 00000000..32b46a65 --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v1/clusters/clusters.go @@ -0,0 +1,110 @@ +package clusters + +import ( + "fmt" + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/httpclient" + + "github.com/NorskHelsenett/ror/pkg/apicontracts" +) + +type V1Client struct { + Client *httpclient.HttpTransportClient + basePath string +} + +func NewV1Client(client *httpclient.HttpTransportClient) *V1Client { + return &V1Client{ + Client: client, + basePath: "/v1/clusters", + } +} + +func (c *V1Client) GetSelf() (apicontracts.ClusterSelf, error) { + var selfdata apicontracts.ClusterSelf + err := c.Client.GetJSON(c.basePath+"/self", &selfdata) + if err != nil { + return selfdata, err + } + + return selfdata, nil +} + +func (c *V1Client) GetById(id string) (*apicontracts.Cluster, error) { + var cluster apicontracts.Cluster + err := c.Client.GetJSON(c.basePath+"/"+id, &cluster) + if err != nil { + return nil, err + } + + return &cluster, nil +} + +func (c *V1Client) UpdateById(id string, cluster *apicontracts.Cluster) error { + var dummy int + return c.Client.PutJSON(c.basePath+"/"+id, cluster, &dummy) +} + +func (c *V1Client) GetByFilter(filter apicontracts.Filter) (*[]apicontracts.Cluster, error) { + var clusters apicontracts.PaginatedResult[apicontracts.Cluster] + err := c.Client.PostJSON(c.basePath+"/filter", filter, &clusters) + if err != nil { + return nil, err + } + + return &clusters.Data, nil +} + +func (c *V1Client) Get(limit int, offset int) (*[]apicontracts.Cluster, error) { + filter := apicontracts.Filter{ + Skip: offset, + Limit: limit, + Sort: []apicontracts.SortMetadata{ + { + SortField: "clustername", + SortOrder: 1, + }, + }, + } + return c.GetByFilter(filter) +} + +func (c *V1Client) GetAll() (*[]apicontracts.Cluster, error) { + paginationLimit := 100 + nextBatch := 0 + var clusters []apicontracts.Cluster + + for { + batch, err := c.Get(paginationLimit, nextBatch) + if err != nil { + return nil, err + } + if batch == nil || len(*batch) == 0 { + return &clusters, nil + } + clusters = append(clusters, *batch...) + nextBatch = nextBatch + paginationLimit + } +} + +func (c *V1Client) GetKubeconfig(clusterid, username, password string) (*apicontracts.ClusterKubeconfig, error) { + var kubeconfig apicontracts.ClusterKubeconfig + + if len(clusterid) == 0 { + return nil, fmt.Errorf("clusterid is required") + } + if len(username) == 0 { + return nil, fmt.Errorf("username is required") + } + + query := apicontracts.KubeconfigCredentials{ + Username: username, + Password: password, + } + + err := c.Client.PostJSON(c.basePath+"/"+clusterid+"/login", query, &kubeconfig) + if err != nil { + return nil, err + } + + return &kubeconfig, nil +} diff --git a/pkg/clients/rorclient/transports/resttransport/v1/datacenter/datacenter.go b/pkg/clients/rorclient/transports/resttransport/v1/datacenter/datacenter.go new file mode 100644 index 00000000..d186431a --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v1/datacenter/datacenter.go @@ -0,0 +1,61 @@ +package datacenter + +import ( + "fmt" + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/httpclient" + + "github.com/NorskHelsenett/ror/pkg/apicontracts" +) + +type V1Client struct { + Client *httpclient.HttpTransportClient + basePath string +} + +func NewV1Client(client *httpclient.HttpTransportClient) *V1Client { + return &V1Client{ + Client: client, + basePath: "/v1/datacenters", + } +} + +func (c *V1Client) Get() (*[]apicontracts.Datacenter, error) { + var datacenters []apicontracts.Datacenter + + err := c.Client.GetJSON(c.basePath, &datacenters) + if err != nil { + return nil, err + } + + return &datacenters, nil +} + +func (c *V1Client) GetById(id string) (*apicontracts.Datacenter, error) { + var datacenter apicontracts.Datacenter + err := c.Client.GetJSON(c.basePath+"/id/"+id, &datacenter) + if err != nil { + return nil, err + } + + return &datacenter, nil +} + +func (c *V1Client) GetByName(name string) (*apicontracts.Datacenter, error) { + var datacenter apicontracts.Datacenter + err := c.Client.GetJSON(c.basePath+"/"+name, &datacenter) + if err != nil { + return nil, err + } + + return &datacenter, nil +} + +func (c *V1Client) Post(data apicontracts.DatacenterModel) (*apicontracts.Datacenter, error) { + // Implement the logic to update an existing datacenter + return nil, fmt.Errorf("UpdateDatacenter: not implemented") +} + +func (c *V1Client) Put(id string, data apicontracts.DatacenterModel) (*apicontracts.Datacenter, error) { + // Implement the logic to delete a datacenter by ID + return nil, fmt.Errorf("DeleteDatacenter: not implemented") +} diff --git a/pkg/clients/rorclient/transports/resttransport/v1/info/info.go b/pkg/clients/rorclient/transports/resttransport/v1/info/info.go new file mode 100644 index 00000000..fc39176b --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v1/info/info.go @@ -0,0 +1,30 @@ +package info + +import ( + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/httpclient" +) + +type V1Client struct { + Client *httpclient.HttpTransportClient + basePath string +} + +func NewV1Client(client *httpclient.HttpTransportClient) *V1Client { + return &V1Client{ + Client: client, + basePath: "/v1/info", + } +} + +func (c *V1Client) GetVersion() (string, error) { + var versiondata struct { + Version string `json:"version"` + } + + err := c.Client.GetJSON(c.basePath+"/version", &versiondata, httpclient.HttpTransportClientParamsNoAuth) + if err != nil { + return "", err + } + + return versiondata.Version, nil +} diff --git a/pkg/clients/rorclient/transports/resttransport/v1/metrics/metrics.go b/pkg/clients/rorclient/transports/resttransport/v1/metrics/metrics.go new file mode 100644 index 00000000..21774666 --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v1/metrics/metrics.go @@ -0,0 +1,23 @@ +package metrics + +import ( + "github.com/NorskHelsenett/ror/pkg/apicontracts" + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/httpclient" +) + +type V1Client struct { + Client *httpclient.HttpTransportClient + basePath string +} + +func NewV1Client(client *httpclient.HttpTransportClient) *V1Client { + return &V1Client{ + Client: client, + basePath: "/v1/metrics", + } +} + +func (c *V1Client) CreatePVC(input apicontracts.PersistentVolumeClaimMetric) error { + var dummy interface{} + return c.Client.PostJSON(c.basePath+"/pvc", input, &dummy) +} diff --git a/pkg/clients/rorclient/transports/resttransport/v1/projects/projects.go b/pkg/clients/rorclient/transports/resttransport/v1/projects/projects.go new file mode 100644 index 00000000..99b19996 --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v1/projects/projects.go @@ -0,0 +1,69 @@ +package projects + +import ( + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/httpclient" + + "github.com/NorskHelsenett/ror/pkg/apicontracts" +) + +type V1Client struct { + Client *httpclient.HttpTransportClient + basePath string +} + +func NewV1Client(client *httpclient.HttpTransportClient) *V1Client { + return &V1Client{ + Client: client, + basePath: "/v1/projects", + } +} + +func (c *V1Client) GetById(id string) (*apicontracts.Project, error) { + var project apicontracts.Project + err := c.Client.GetJSON(c.basePath+"/"+id, &project) + if err != nil { + return nil, err + } + + return &project, nil +} + +func (c *V1Client) Get(limit int, offset int) (*[]apicontracts.Project, error) { + var projects apicontracts.PaginatedResult[apicontracts.Project] + + filter := apicontracts.Filter{ + Skip: offset, + Limit: limit, + Sort: []apicontracts.SortMetadata{ + { + SortField: "projectname", + SortOrder: 1, + }, + }, + } + + err := c.Client.PostJSON(c.basePath+"/filter", filter, &projects) + if err != nil { + return nil, err + } + + return &projects.Data, nil +} + +func (c *V1Client) GetAll() (*[]apicontracts.Project, error) { + paginationLimit := 100 + nextBatch := 0 + var projects []apicontracts.Project + + for { + batch, err := c.Get(paginationLimit, nextBatch) + if err != nil { + return nil, err + } + if batch == nil || len(*batch) == 0 { + return &projects, nil + } + projects = append(projects, *batch...) + nextBatch = nextBatch + paginationLimit + } +} diff --git a/pkg/clients/rorclient/transports/resttransport/v1/resources/application.go b/pkg/clients/rorclient/transports/resttransport/v1/resources/application.go new file mode 100644 index 00000000..d5a77e00 --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v1/resources/application.go @@ -0,0 +1,18 @@ +package resources + +import ( + "github.com/NorskHelsenett/ror/pkg/apicontracts/apiresourcecontracts" + aclmodels "github.com/NorskHelsenett/ror/pkg/models/acl" +) + +func (c *V1Client) GetApplicationByUid(uid string, ownerSubject string, scope aclmodels.Acl2Scope) (*apiresourcecontracts.ResourceApplication, error) { + kind := "Application" + apiVersion := "argoproj.io/v1alpha1" + + var result *apiresourcecontracts.ResourceApplication + err := c.Client.GetJSON(c.basePath+"/uid/"+uid+"?ownerScope="+string(scope)+"&ownerSubject="+ownerSubject+"&apiversion="+apiVersion+"&kind="+kind, &result) + if err != nil { + return nil, err + } + return result, nil +} diff --git a/pkg/clients/rorclient/transports/resttransport/v1/resources/clusterorder.go b/pkg/clients/rorclient/transports/resttransport/v1/resources/clusterorder.go new file mode 100644 index 00000000..cb1e6644 --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v1/resources/clusterorder.go @@ -0,0 +1,33 @@ +package resources + +import ( + "github.com/NorskHelsenett/ror/pkg/apicontracts/apiresourcecontracts" + aclmodels "github.com/NorskHelsenett/ror/pkg/models/acl" +) + +func (c *V1Client) GetClusterOrderByUid(uid, ownerSubject, kind, apiversion string, ownerScope aclmodels.Acl2Scope) (*apiresourcecontracts.ResourceClusterOrder, error) { + var result *apiresourcecontracts.ResourceClusterOrder + err := c.Client.GetJSON(c.basePath+"/uid/"+uid+"?ownerScope="+string(ownerScope)+"&ownerSubject="+ownerSubject+"&apiversion="+apiversion+"&kind="+kind, &result) + if err != nil { + return nil, err + } + return result, nil +} + +func (c *V1Client) GetClusterOrders(ownerSubject, kind, apiversion string, ownerScope aclmodels.Acl2Scope) ([]*apiresourcecontracts.ResourceClusterOrder, error) { + var result []*apiresourcecontracts.ResourceClusterOrder + err := c.Client.GetJSON(c.basePath+"?ownerScope="+string(ownerScope)+"&ownerSubject="+ownerSubject+"&apiversion="+apiversion+"&kind="+kind, &result) + if err != nil { + return nil, err + } + return result, nil +} + +func (c *V1Client) UpdateClusterOrder(updateModel *apiresourcecontracts.ResourceUpdateModel) error { + var result bool + err := c.Client.PutJSON(c.basePath+"/uid/"+updateModel.Uid, updateModel, &result) + if err != nil { + return err + } + return nil +} diff --git a/pkg/clients/rorclient/transports/resttransport/v1/resources/pvc.go b/pkg/clients/rorclient/transports/resttransport/v1/resources/pvc.go new file mode 100644 index 00000000..a27b6b53 --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v1/resources/pvc.go @@ -0,0 +1,17 @@ +package resources + +import ( + "github.com/NorskHelsenett/ror/pkg/apicontracts/apiresourcecontracts" + aclmodels "github.com/NorskHelsenett/ror/pkg/models/acl" +) + +func (c *V1Client) GetPVCByUid(uid string, ownerSubject string, scope aclmodels.Acl2Scope) (*apiresourcecontracts.ResourcePersistentVolumeClaim, error) { + kind := "PersistentVolumeClaim" + apiVersion := "v1" + var result *apiresourcecontracts.ResourcePersistentVolumeClaim + err := c.Client.GetJSON(c.basePath+"/uid/"+uid+"?ownerScope="+string(scope)+"&ownerSubject="+ownerSubject+"&apiversion="+apiVersion+"&kind="+kind, &result) + if err != nil { + return nil, err + } + return result, nil +} diff --git a/pkg/clients/rorclient/transports/resttransport/v1/resources/resources.go b/pkg/clients/rorclient/transports/resttransport/v1/resources/resources.go new file mode 100644 index 00000000..9af76bff --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v1/resources/resources.go @@ -0,0 +1,17 @@ +package resources + +import ( + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/httpclient" +) + +type V1Client struct { + Client *httpclient.HttpTransportClient + basePath string +} + +func NewV1Client(client *httpclient.HttpTransportClient) *V1Client { + return &V1Client{ + Client: client, + basePath: "/v1/resources", + } +} diff --git a/pkg/clients/rorclient/transports/resttransport/v1/resources/tanzukubernetescluster.go b/pkg/clients/rorclient/transports/resttransport/v1/resources/tanzukubernetescluster.go new file mode 100644 index 00000000..0780f87b --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v1/resources/tanzukubernetescluster.go @@ -0,0 +1,17 @@ +package resources + +import ( + "github.com/NorskHelsenett/ror/pkg/apicontracts/apiresourcecontracts" + aclmodels "github.com/NorskHelsenett/ror/pkg/models/acl" +) + +func (c *V1Client) GetTanzuKubernetesClusterByUid(uid, ownerSubject string, scope aclmodels.Acl2Scope) (*apiresourcecontracts.ResourceTanzuKubernetesCluster, error) { + kind := "TanzuKubernetesCluster" + apiversion := "run.tanzu.vmware.com/v1alpha2" + var result *apiresourcecontracts.ResourceTanzuKubernetesCluster + err := c.Client.GetJSON(c.basePath+"/uid/"+uid+"?ownerScope="+string(scope)+"&ownerSubject="+ownerSubject+"&apiversion="+apiversion+"&kind="+kind, &result) + if err != nil { + return nil, err + } + return result, nil +} diff --git a/pkg/clients/rorclient/transports/resttransport/v1/workspaces/workspaces.go b/pkg/clients/rorclient/transports/resttransport/v1/workspaces/workspaces.go new file mode 100644 index 00000000..76367969 --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v1/workspaces/workspaces.go @@ -0,0 +1,78 @@ +package workspaces + +import ( + "fmt" + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/httpclient" + + "github.com/NorskHelsenett/ror/pkg/apicontracts" +) + +type V1Client struct { + Client *httpclient.HttpTransportClient + basePath string +} + +func NewV1Client(client *httpclient.HttpTransportClient) *V1Client { + return &V1Client{ + Client: client, + basePath: "/v1/workspaces", + } +} + +func (c *V1Client) GetByName(workspaceName string) (*apicontracts.Workspace, error) { + var workspace apicontracts.Workspace + err := c.Client.GetJSON(c.basePath+"/"+workspaceName, &workspace) + if err != nil { + return nil, err + } + + return &workspace, nil +} + +func (c *V1Client) GetById(workspaceId string) (*apicontracts.Workspace, error) { + var workspace apicontracts.Workspace + err := c.Client.GetJSON(c.basePath+"/id/"+workspaceId, &workspace) + if err != nil { + return nil, err + } + + return &workspace, nil +} + +func (c *V1Client) Get() (*[]apicontracts.Workspace, error) { + var workspaces []apicontracts.Workspace + + err := c.Client.GetJSON(c.basePath, &workspaces) + if err != nil { + return nil, err + } + + return &workspaces, nil +} + +func (c *V1Client) GetAll() (*[]apicontracts.Workspace, error) { + return c.Get() +} + +func (c *V1Client) GetKubeconfig(workspacename, username, password string) (*apicontracts.ClusterKubeconfig, error) { + var kubeconfig apicontracts.ClusterKubeconfig + + if len(workspacename) == 0 { + return nil, fmt.Errorf("clusterid is required") + } + if len(username) == 0 { + return nil, fmt.Errorf("username is required") + } + + query := apicontracts.KubeconfigCredentials{ + Username: username, + Password: password, + } + + err := c.Client.PostJSON(c.basePath+"/"+workspacename+"/login", query, &kubeconfig) + if err != nil { + return nil, err + } + + return &kubeconfig, nil +} diff --git a/pkg/clients/rorclient/transports/resttransport/v2/restclientv2self/apikey.go b/pkg/clients/rorclient/transports/resttransport/v2/restclientv2self/apikey.go new file mode 100644 index 00000000..8df89128 --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v2/restclientv2self/apikey.go @@ -0,0 +1,17 @@ +package restclientv2self + +import "github.com/NorskHelsenett/ror/pkg/apicontracts/v2/apicontractsv2self" + +func (c *V2Client) CreateOrUpdateApiKey(name string, ttl int64) (string, error) { + resoponse := apicontractsv2self.CreateOrRenewApikeyResponse{} + request := apicontractsv2self.CreateOrRenewApikeyRequest{ + Name: name, + Ttl: ttl, + } + err := c.Client.PostJSON(c.basePath+"/apikeys", request, &resoponse) + if err != nil { + return "", err + } + + return resoponse.Token, nil +} diff --git a/pkg/clients/rorclient/transports/resttransport/v2/restclientv2self/self.go b/pkg/clients/rorclient/transports/resttransport/v2/restclientv2self/self.go new file mode 100644 index 00000000..1ca0125b --- /dev/null +++ b/pkg/clients/rorclient/transports/resttransport/v2/restclientv2self/self.go @@ -0,0 +1,29 @@ +package restclientv2self + +import ( + "github.com/NorskHelsenett/ror/pkg/clients/rorclient/transports/resttransport/httpclient" + + "github.com/NorskHelsenett/ror/pkg/apicontracts/v2/apicontractsv2self" +) + +type V2Client struct { + Client *httpclient.HttpTransportClient + basePath string +} + +func NewV2Client(client *httpclient.HttpTransportClient) *V2Client { + return &V2Client{ + Client: client, + basePath: "/v2/self", + } +} + +func (c *V2Client) Get() (apicontractsv2self.SelfData, error) { + var selfdata apicontractsv2self.SelfData + err := c.Client.GetJSON(c.basePath, &selfdata) + if err != nil { + return apicontractsv2self.SelfData{}, err + } + + return selfdata, nil +} diff --git a/pkg/clients/rorclient/v1/clusters/clusters.go b/pkg/clients/rorclient/v1/clusters/clusters.go new file mode 100644 index 00000000..2405efea --- /dev/null +++ b/pkg/clients/rorclient/v1/clusters/clusters.go @@ -0,0 +1,12 @@ +package clusters + +import "github.com/NorskHelsenett/ror/pkg/apicontracts" + +type ClustersInterface interface { + GetById(id string) (*apicontracts.Cluster, error) + UpdateById(id string, cluster *apicontracts.Cluster) error + GetByFilter(filter apicontracts.Filter) (*[]apicontracts.Cluster, error) + Get(limit int, offset int) (*[]apicontracts.Cluster, error) + GetAll() (*[]apicontracts.Cluster, error) + GetKubeconfig(clusterid, username, password string) (*apicontracts.ClusterKubeconfig, error) +} diff --git a/pkg/clients/rorclient/v1/datacenter/datacenter.go b/pkg/clients/rorclient/v1/datacenter/datacenter.go new file mode 100644 index 00000000..c49f4c23 --- /dev/null +++ b/pkg/clients/rorclient/v1/datacenter/datacenter.go @@ -0,0 +1,11 @@ +package datacenter + +import "github.com/NorskHelsenett/ror/pkg/apicontracts" + +type DatacenterInterface interface { + Get() (*[]apicontracts.Datacenter, error) + GetById(id string) (*apicontracts.Datacenter, error) + GetByName(name string) (*apicontracts.Datacenter, error) + Post(data apicontracts.DatacenterModel) (*apicontracts.Datacenter, error) + Put(id string, data apicontracts.DatacenterModel) (*apicontracts.Datacenter, error) +} diff --git a/pkg/clients/rorclient/v1/info/info.go b/pkg/clients/rorclient/v1/info/info.go new file mode 100644 index 00000000..8c1f8ece --- /dev/null +++ b/pkg/clients/rorclient/v1/info/info.go @@ -0,0 +1,5 @@ +package info + +type InfoInterface interface { + GetVersion() (string, error) +} diff --git a/pkg/clients/rorclient/v1/metrics/metrics.go b/pkg/clients/rorclient/v1/metrics/metrics.go new file mode 100644 index 00000000..fc02becb --- /dev/null +++ b/pkg/clients/rorclient/v1/metrics/metrics.go @@ -0,0 +1,7 @@ +package metrics + +import "github.com/NorskHelsenett/ror/pkg/apicontracts" + +type MetricsInterface interface { + CreatePVC(input apicontracts.PersistentVolumeClaimMetric) error +} diff --git a/pkg/clients/rorclient/v1/projects/projects.go b/pkg/clients/rorclient/v1/projects/projects.go new file mode 100644 index 00000000..5f91ce99 --- /dev/null +++ b/pkg/clients/rorclient/v1/projects/projects.go @@ -0,0 +1,9 @@ +package projects + +import "github.com/NorskHelsenett/ror/pkg/apicontracts" + +type ProjectsInterface interface { + GetById(id string) (*apicontracts.Project, error) + Get(limit int, offset int) (*[]apicontracts.Project, error) + GetAll() (*[]apicontracts.Project, error) +} diff --git a/pkg/clients/rorclient/v1/resources/resources.go b/pkg/clients/rorclient/v1/resources/resources.go new file mode 100644 index 00000000..192a70fd --- /dev/null +++ b/pkg/clients/rorclient/v1/resources/resources.go @@ -0,0 +1,17 @@ +package resources + +import ( + "github.com/NorskHelsenett/ror/pkg/apicontracts/apiresourcecontracts" + aclmodels "github.com/NorskHelsenett/ror/pkg/models/acl" +) + +type ResourceInterface interface { + GetClusterOrderByUid(uid, ownerSubject, kind, apiversion string, scope aclmodels.Acl2Scope) (*apiresourcecontracts.ResourceClusterOrder, error) + GetClusterOrders(ownerSubject, kind, apiversion string, scope aclmodels.Acl2Scope) ([]*apiresourcecontracts.ResourceClusterOrder, error) + UpdateClusterOrder(clusterOrder *apiresourcecontracts.ResourceUpdateModel) error + + GetTanzuKubernetesClusterByUid(uid, ownerSubject string, scope aclmodels.Acl2Scope) (*apiresourcecontracts.ResourceTanzuKubernetesCluster, error) + + GetApplicationByUid(uid, ownerSubject string, scope aclmodels.Acl2Scope) (*apiresourcecontracts.ResourceApplication, error) + GetPVCByUid(uid, ownerSubject string, scope aclmodels.Acl2Scope) (*apiresourcecontracts.ResourcePersistentVolumeClaim, error) +} diff --git a/pkg/clients/rorclient/v1/workspaces/workspaces.go b/pkg/clients/rorclient/v1/workspaces/workspaces.go new file mode 100644 index 00000000..6151f050 --- /dev/null +++ b/pkg/clients/rorclient/v1/workspaces/workspaces.go @@ -0,0 +1,11 @@ +package workspaces + +import "github.com/NorskHelsenett/ror/pkg/apicontracts" + +type WorkspacesInterface interface { + GetByName(workspaceName string) (*apicontracts.Workspace, error) + GetById(workspaceId string) (*apicontracts.Workspace, error) + Get() (*[]apicontracts.Workspace, error) + GetAll() (*[]apicontracts.Workspace, error) + GetKubeconfig(workspacename, username, password string) (*apicontracts.ClusterKubeconfig, error) +} diff --git a/pkg/clients/rorclient/v2/rorclientv2self/self.go b/pkg/clients/rorclient/v2/rorclientv2self/self.go new file mode 100644 index 00000000..dd3872f7 --- /dev/null +++ b/pkg/clients/rorclient/v2/rorclientv2self/self.go @@ -0,0 +1,8 @@ +package rorclientv2self + +import "github.com/NorskHelsenett/ror/pkg/apicontracts/v2/apicontractsv2self" + +type SelfInterface interface { + Get() (apicontractsv2self.SelfData, error) + CreateOrUpdateApiKey(name string, ttl int64) (string, error) +} diff --git a/pkg/config/configconsts/consts.go b/pkg/config/configconsts/consts.go new file mode 100644 index 00000000..259eeac1 --- /dev/null +++ b/pkg/config/configconsts/consts.go @@ -0,0 +1,100 @@ +package configconsts + +const ( + ROLE = "ROLE" + HTTP_PORT = "HTTP_PORT" + API_KEY_SALT = "API_KEY_SALT" + API_KEY = "API_KEY" + API_KEY_SECRET = "API_KEY_SECRET" + API_ENDPOINT = "ROR_URL" + DEVELOPMENT = "DEVELOPMENT" + LOCALHOST = "LOCALHOST" + PORT = "PORT" + POD_NAMESPACE = "POD_NAMESPACE" + CLUSTER_ID = "CLUSTER_ID" + ERROR_COUNT = "ERROR_COUNT" + HELSEGITLAB_BASE_URL = "HELSEGITLAB_BASE_URL" + ENVIRONMENT = "ENVIRONMENT" + LDAP_CONFIGS = "LDAP_CONFIGS" + + ROR_OPERATOR_NAMESPACE = "ROR_OPERATOR_NAMESPACE" + + LDAP_CERTIFICATE_FOLDER = "LDAP_CERTIFICATE_FOLDER" + + OIDC_PROVIDER = "OIDC_PROVIDER" + OIDC_CLIENT_ID = "OIDC_CLIENT_ID" + OIDC_DEVICE_CLIENT_ID = "OIDC_DEVICE_CLIENT_ID" + + VAULT_URL = "VAULT_URL" + + MONGODB_HOST = "MONGODB_HOST" + MONGODB_PORT = "MONGODB_PORT" + MONGODB_DATABASE = "MONGODB_DATABASE" + MONGODB_URL = "MONGODB_URL" + MONGO_DATABASE = "MONGO_DATABASE" + + RABBITMQ_HOST = "RABBITMQ_HOST" + RABBITMQ_PORT = "RABBITMQ_PORT" + RABBITMQ_BROADCAST_NAME = "RABBITMQ_BROADCAST_NAME" + RABBITMQ_CONNECTIONSTRING = "RABBITMQ_CONNECTIONSTRING" + + REDIS_HOST = "REDIS_HOST" + REDIS_PORT = "REDIS_PORT" + + TRACER_ID = "TRACER_ID" + ENABLE_TRACING = "ENABLE_TRACING" + OPENTELEMETRY_COLLECTOR_ENDPOINT = "OPENTELEMETRY_COLLECTOR_ENDPOINT" + + PROFILER_ENABLED = "PROFILER_ENABLED" + STARTUP_SLEEP_TIME = "STARTUP_SLEEP_TIME" + + GIN_USE_CORS = "USE_CORS" + GIN_ALLOW_ORIGINS = "ALLOW_ORIGINS" + + VERSION = "VERSION" + COMMIT = "COMMIT" + DEX_HOST = "DEX_HOST" + DEX_PORT = "DEX_PORT" + DEX_GRPC_PORT = "DEX_GRPC_PORT" + DEX_CERT_FILEPATH = "DEX_CERT_FILEPATH" + DEX_VAULT_PATH = "DEX_VAULT_PATH" + DEX_TLS = "DEX_TLS" + + SLACK_BOT_TOKEN = "SLACK_BOT_TOKEN" + SLACK_APP_TOKEN = "SLACK_APP_TOKEN" + + CONTAINER_REG_PREFIX = "CONTAINER_REG_PREFIX" + CONTAINER_REG_IMAGE_PATH = "CONTAINER_REG_IMAGE_PATH" + CONTAINER_REG_HELM_PATH = "CONTAINER_REG_HELM_PATH" + + // Operator + OPERATOR_BACKOFF_LIMIT = "BACKOFF_LIMIT" + OPERATOR_DEADLINE_SECONDS = "DEADLINE_SECONDS" + OPERATOR_JOB_SERVICE_ACCOUNT = "JOB_SERVICE_ACCOUNT" + OPERATOR_APPLOG_SECRET_NAME = "APPLOG_SECRET_NAME" + + // Tanzu agent + TANZU_AGENT_KUBECONFIG = "KUBECONFIG" + TANZU_AGENT_DELETE_KUBECONFIG = "DELETE_KUBECONFIG" + TANZU_AGENT_KUBE_VSPHERE_PATH = "KUBE_VSPHERE_PATH" + TANZU_AGENT_KUBECTL_PATH = "KUBECTL_PATH" + TANZU_AGENT_DATACENTER_URL = "DATACENTER_URL" + TANZU_AGENT_USERNAME = "TANZU_USERNAME" + TANZU_AGENT_PASSWORD = "TANZU_PWD" + TANZU_AGENT_TOKEN_EXPIRY = "TOKEN_EXPIRY" + TANZU_AGENT_LOGIN_EVERY_MINUTE = "LOGIN_EVERY_MINUTE" + TANZU_AGENT_HEALTH_PORT = "HTTP_PORT" + TANZU_AGENT_TANZU_ACCESS = "TANZU_ACCESS" + TANZU_AGENT_DATACENTER = "DATACENTER" + + // Tanzu Auth + TANZU_AUTH_HEALTH_PORT = "HTTP_PORT" + TANZU_AUTH_KUBE_VSPHERE_PATH = "KUBE_VSPHERE_PATH" + TANZU_AUTH_KUBECTL_PATH = "KUBECTL_PATH" + TANZU_AUTH_BASE_URL = "TANZU_AUTH_BASE_URL" + TANZU_AUTH_CONFIG_FOLDER_PATH = "TANZU_AUTH_CONFIG_FOLDER_PATH" + + // ms + MS_HTTP_PORT = "HTTP_PORT" + MS_HTTP_BIND_PORT = "HTTP_BIND_PORT" +) diff --git a/pkg/config/globalconfig/variables.go b/pkg/config/globalconfig/variables.go new file mode 100644 index 00000000..c8346544 --- /dev/null +++ b/pkg/config/globalconfig/variables.go @@ -0,0 +1,29 @@ +package globalconfig + +// Lists the argo Projects that will be marked as internal for use in filtering functions +var InternalAppProjects map[string]bool = map[string]bool{ + "nhn-tooling": true, +} + +// Lists the namspaces that will be marked as internal for use in filtering functions +var InternalNamespaces map[string]bool = map[string]bool{ + "argocd": true, + "avi-system": true, + "cert-manager": true, + "jaeger": true, + "kube-node-lease": true, + "kube-public": true, + "kube-system": true, + "kyverno": true, + "monitoring": true, + "prometheus-operator": true, + "vmware-system-auth": true, + "vmware-system-cloud-provider": true, + "vmware-system-csi": true, + "tooling-falco": true, + "trident-operator": true, + "fluent": true, + "nhn-ror": true, + "ror": true, + "trivy-system": true, +} diff --git a/pkg/config/rorversion/rorversion.go b/pkg/config/rorversion/rorversion.go new file mode 100644 index 00000000..f8af9fbb --- /dev/null +++ b/pkg/config/rorversion/rorversion.go @@ -0,0 +1,42 @@ +package rorversion + +import ( + "fmt" + "strings" +) + +type RorVersion struct { + Version string + Commit string +} + +func NewRorVersion(version string, commit string) RorVersion { + return RorVersion{ + Version: version, + Commit: commit, + } +} + +func (v RorVersion) GetVersion() string { + return v.Version +} + +func (v RorVersion) GetCommit() string { + return v.Commit +} + +func (v RorVersion) GetMajorVersion() string { + split := strings.Split(v.Version, ".") + return split[0] +} +func (v RorVersion) GetMinorVersion() string { + split := strings.Split(v.Version, ".") + return split[1] +} +func (v RorVersion) GetPatchVersion() string { + split := strings.Split(v.Version, ".") + return split[2] +} +func (v RorVersion) GetVersionWithCommit() string { + return fmt.Sprintf("%s-%s", v.Version, v.Commit) +}