mirror of
https://github.com/k8sgpt-ai/k8sgpt.git
synced 2025-09-04 16:53:25 +00:00
106 lines
3.4 KiB
Go
106 lines
3.4 KiB
Go
package config
|
|
|
|
import (
|
|
schemav1 "buf.build/gen/go/k8sgpt-ai/k8sgpt/protocolbuffers/go/schema/v1"
|
|
"context"
|
|
"github.com/k8sgpt-ai/k8sgpt/pkg/cache"
|
|
"github.com/k8sgpt-ai/k8sgpt/pkg/custom"
|
|
"github.com/spf13/viper"
|
|
"google.golang.org/grpc/codes"
|
|
"google.golang.org/grpc/status"
|
|
)
|
|
|
|
const (
|
|
notUsedBucket = ""
|
|
notUsedRegion = ""
|
|
notUsedEndpoint = ""
|
|
notUsedStorageAcc = ""
|
|
notUsedContainerName = ""
|
|
notUsedProjectId = ""
|
|
notUsedInsecure = false
|
|
)
|
|
|
|
func (h *Handler) AddConfig(ctx context.Context, i *schemav1.AddConfigRequest) (*schemav1.AddConfigResponse, error,
|
|
) {
|
|
|
|
resp, err := h.syncIntegration(ctx, i)
|
|
if err != nil {
|
|
return resp, err
|
|
}
|
|
|
|
if i.CustomAnalyzers != nil {
|
|
// We need to add the custom analyzers to the viper config and save them
|
|
var customAnalyzers = make([]custom.CustomAnalyzer, 0)
|
|
if err := viper.UnmarshalKey("custom_analyzers", &customAnalyzers); err != nil {
|
|
return resp, err
|
|
} else {
|
|
// If there are analyzers are already in the config we will append the ones with new names
|
|
for _, ca := range i.CustomAnalyzers {
|
|
exists := false
|
|
for _, c := range customAnalyzers {
|
|
if c.Name == ca.Name {
|
|
exists = true
|
|
break
|
|
}
|
|
}
|
|
if !exists {
|
|
customAnalyzers = append(customAnalyzers, custom.CustomAnalyzer{
|
|
Name: ca.Name,
|
|
Connection: custom.Connection{
|
|
Url: ca.Connection.Url,
|
|
Port: ca.Connection.Port,
|
|
},
|
|
})
|
|
}
|
|
}
|
|
// save the config
|
|
viper.Set("custom_analyzers", customAnalyzers)
|
|
if err := viper.WriteConfig(); err != nil {
|
|
return resp, err
|
|
}
|
|
}
|
|
}
|
|
if i.Cache != nil {
|
|
var err error
|
|
var remoteCache cache.CacheProvider
|
|
|
|
switch i.Cache.GetCacheType().(type) {
|
|
case *schemav1.Cache_AzureCache:
|
|
remoteCache, err = cache.NewCacheProvider("azure", notUsedBucket, notUsedRegion, notUsedEndpoint, i.Cache.GetAzureCache().StorageAccount, i.Cache.GetAzureCache().ContainerName, notUsedProjectId, notUsedInsecure)
|
|
case *schemav1.Cache_S3Cache:
|
|
remoteCache, err = cache.NewCacheProvider("s3", i.Cache.GetS3Cache().BucketName, i.Cache.GetS3Cache().Region, i.Cache.GetS3Cache().Endpoint, notUsedStorageAcc, notUsedContainerName, notUsedProjectId, i.Cache.GetS3Cache().Insecure)
|
|
case *schemav1.Cache_GcsCache:
|
|
remoteCache, err = cache.NewCacheProvider("gcs", i.Cache.GetGcsCache().BucketName, i.Cache.GetGcsCache().Region, notUsedEndpoint, notUsedStorageAcc, notUsedContainerName, i.Cache.GetGcsCache().GetProjectId(), notUsedInsecure)
|
|
case *schemav1.Cache_InterplexCache:
|
|
remoteCache, err = cache.NewCacheProvider("interplex", notUsedBucket, notUsedRegion, i.Cache.GetInterplexCache().Endpoint, notUsedStorageAcc, notUsedContainerName, notUsedProjectId, notUsedInsecure)
|
|
default:
|
|
return resp, status.Error(codes.InvalidArgument, "Invalid cache configuration")
|
|
}
|
|
|
|
if err != nil {
|
|
return resp, err
|
|
}
|
|
err = cache.AddRemoteCache(remoteCache)
|
|
if err != nil {
|
|
return resp, err
|
|
}
|
|
|
|
}
|
|
return resp, nil
|
|
}
|
|
|
|
func (h *Handler) RemoveConfig(ctx context.Context, i *schemav1.RemoveConfigRequest) (*schemav1.RemoveConfigResponse, error,
|
|
) {
|
|
err := cache.RemoveRemoteCache()
|
|
if err != nil {
|
|
return &schemav1.RemoveConfigResponse{}, err
|
|
}
|
|
|
|
// Remove any integrations is a TBD as it would be nice to make this more granular
|
|
// Currently integrations can be removed in the AddConfig sync
|
|
|
|
return &schemav1.RemoveConfigResponse{
|
|
Status: "Successfully removed the remote cache",
|
|
}, nil
|
|
}
|