Files
paralus/server/kubectl_cluster_settings.go
2022-03-24 12:42:59 +05:30

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}
}