mirror of
https://github.com/paralus/paralus.git
synced 2026-05-06 16:36:46 +00:00
119 lines
4.0 KiB
Go
119 lines
4.0 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/RafayLabs/rcloud-base/internal/constants"
|
|
"github.com/RafayLabs/rcloud-base/pkg/sentry/util"
|
|
"github.com/RafayLabs/rcloud-base/pkg/service"
|
|
sentryrpc "github.com/RafayLabs/rcloud-base/proto/rpc/sentry"
|
|
"github.com/RafayLabs/rcloud-base/proto/types/sentry"
|
|
"google.golang.org/grpc/metadata"
|
|
)
|
|
|
|
type kubectlClusterSettingsServer struct {
|
|
bs service.BootstrapService
|
|
kcs service.KubectlClusterSettingsService
|
|
}
|
|
|
|
var _ sentryrpc.KubectlClusterSettingsServer = (*kubectlClusterSettingsServer)(nil)
|
|
|
|
func (s *kubectlClusterSettingsServer) GetKubectlClusterSettings(ctx context.Context, in *sentryrpc.GetKubectlClusterSettingsRequest) (*sentryrpc.GetKubectlClusterSettingsResponse, error) {
|
|
opts := in.Opts
|
|
|
|
clusterID, err := util.GetClusterScope(opts.UrlScope)
|
|
if err != nil {
|
|
_log.Infow("get kubectl cluster settings failed to get clusterID", "opts", opts)
|
|
return nil, err
|
|
}
|
|
|
|
cnt, err := s.bs.GetBootstrapAgentCountForClusterID(ctx, clusterID, opts.Organization)
|
|
if err != nil {
|
|
_log.Infow("get kubectl cluster settings invalid request", "opts", opts, "cluster", clusterID)
|
|
return nil, err
|
|
}
|
|
|
|
_log.Infow("get kubectl cluster settings ", "cnt", cnt, "opts", opts, "clusterID", clusterID)
|
|
|
|
kc, err := s.kcs.Get(ctx, opts.Organization, clusterID)
|
|
if err == constants.ErrNotFound {
|
|
return &sentryrpc.GetKubectlClusterSettingsResponse{DisableWebKubectl: false, DisableCLIKubectl: false}, nil
|
|
} else if err != nil {
|
|
return nil, err
|
|
}
|
|
return &sentryrpc.GetKubectlClusterSettingsResponse{DisableWebKubectl: kc.DisableWebKubectl, DisableCLIKubectl: kc.DisableCLIKubectl}, nil
|
|
}
|
|
|
|
func (s *kubectlClusterSettingsServer) UpdateKubectlClusterSettings(ctx context.Context, in *sentryrpc.UpdateKubectlClusterSettingsRequest) (*sentryrpc.UpdateKubectlClusterSettingsResponse, error) {
|
|
var clusterName, userAgent, host, remoteAddr string
|
|
opts := in.Opts
|
|
|
|
if md, ok := metadata.FromIncomingContext(ctx); ok {
|
|
ua := md.Get("rafay-gateway-user-agent")
|
|
if len(ua) > 0 {
|
|
userAgent = ua[0]
|
|
}
|
|
}
|
|
|
|
if md, ok := metadata.FromIncomingContext(ctx); ok {
|
|
h := md.Get("rafay-gateway-host")
|
|
if len(h) > 0 {
|
|
host = h[0]
|
|
}
|
|
}
|
|
|
|
remoteAddr = "127.0.0.1" //default
|
|
if md, ok := metadata.FromIncomingContext(ctx); ok {
|
|
ra := md.Get("rafay-gateway-remote-addr")
|
|
if len(ra) > 0 {
|
|
remoteAddr = ra[0]
|
|
}
|
|
}
|
|
|
|
clusterID, err := util.GetClusterScope(opts.UrlScope)
|
|
if err != nil {
|
|
_log.Infow("update kubectl cluster settings failed to get clusterID", "opts", opts)
|
|
return nil, err
|
|
}
|
|
|
|
_log.Infow("update kubectl cluster settings ", "opts", opts, "clusterID", clusterID)
|
|
|
|
_, err = s.bs.GetBootstrapAgentCountForClusterID(ctx, clusterID, opts.Organization)
|
|
if err != nil {
|
|
_log.Infow("update kubectl cluster settings invalid request", "opts", opts, "cluster", clusterID)
|
|
return nil, err
|
|
}
|
|
|
|
clusterName = ""
|
|
ba, _ := s.bs.GetBootstrapAgentForClusterID(ctx, clusterID, opts.Organization)
|
|
if ba != nil {
|
|
clusterName = ba.Metadata.Labels["rafay.dev/clusterName"]
|
|
}
|
|
|
|
err = s.kcs.Patch(ctx, &sentry.KubectlClusterSettings{
|
|
Name: clusterID,
|
|
OrganizationID: opts.Organization,
|
|
PartnerID: opts.Partner,
|
|
DisableWebKubectl: in.DisableWebKubectl,
|
|
DisableCLIKubectl: in.DisableCLIKubectl,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
_log.Infow("updated kubectl cluster setting with values ", clusterName, userAgent, host, remoteAddr)
|
|
|
|
/*TODO: to be done with events
|
|
partnerID := opts.Partner
|
|
orgIDString := opts.Organization
|
|
kubectlSettingEvent("cluster.kubectl.setting", clusterID, orgIDString, partnerID, opts.Username, opts.AccountID.String(), clusterName, userAgent, host, remoteAddr, opts.Groups, in.DisableWebKubectl, in.DisableCLIKubectl)
|
|
*/
|
|
|
|
return &sentryrpc.UpdateKubectlClusterSettingsResponse{}, nil
|
|
}
|
|
|
|
// NewKubectlClusterSettingsServer returns new kubectl cluster setting server
|
|
func NewKubectlClusterSettingsServer(bs service.BootstrapService, kcs service.KubectlClusterSettingsService) sentryrpc.KubectlClusterSettingsServer {
|
|
return &kubectlClusterSettingsServer{bs, kcs}
|
|
}
|