From e3820af43f799c4bfed010fafe7faddcea2a19e2 Mon Sep 17 00:00:00 2001 From: lwnmengjing Date: Fri, 23 Aug 2024 17:55:12 +0800 Subject: [PATCH 1/5] :construction: save --- .../migration/system/1724396388009_migrate.go | 28 ++++ config/clusters.go | 157 ++++++++++++++++++ config/config.go | 4 + go.mod | 4 +- go.sum | 83 +-------- models/task.go | 123 +++++++++++++- pkg/eks.go | 86 ++++++++++ 7 files changed, 400 insertions(+), 85 deletions(-) create mode 100644 cmd/migrate/migration/system/1724396388009_migrate.go create mode 100644 config/clusters.go create mode 100644 pkg/eks.go diff --git a/cmd/migrate/migration/system/1724396388009_migrate.go b/cmd/migrate/migration/system/1724396388009_migrate.go new file mode 100644 index 0000000..ceb9c0a --- /dev/null +++ b/cmd/migrate/migration/system/1724396388009_migrate.go @@ -0,0 +1,28 @@ +package system + +import ( + "github.com/mss-boot-io/mss-boot-admin/models" + "runtime" + + "github.com/mss-boot-io/mss-boot/pkg/migration" + "gorm.io/gorm" +) + +func init() { + _, fileName, _, _ := runtime.Caller(0) + migration.Migrate.SetVersion(migration.GetFilename(fileName), _1724396388009Migrate) +} + +func _1724396388009Migrate(db *gorm.DB, version string) error { + return db.Transaction(func(tx *gorm.DB) error { + + err := tx.Migrator().AutoMigrate( + new(models.Task), + ) + if err != nil { + return err + } + + return migration.Migrate.CreateVersion(tx, version) + }) +} diff --git a/config/clusters.go b/config/clusters.go new file mode 100644 index 0000000..fc6292d --- /dev/null +++ b/config/clusters.go @@ -0,0 +1,157 @@ +package config + +import ( + "context" + "log/slog" + "os" + "path/filepath" + "time" + + "github.com/aws/aws-sdk-go-v2/config" + "github.com/aws/aws-sdk-go-v2/service/eks" + "k8s.io/client-go/dynamic" + "k8s.io/client-go/kubernetes" + "k8s.io/client-go/rest" + "k8s.io/client-go/tools/clientcmd" + clientcmdapi "k8s.io/client-go/tools/clientcmd/api" + "k8s.io/client-go/util/homedir" + + "github.com/mss-boot-io/mss-boot-admin/pkg" +) + +/* + * @Author: lwnmengjing + * @Date: 2024/8/22 16:59:33 + * @Last Modified by: lwnmengjing + * @Last Modified time: 2024/8/22 16:59:33 + */ + +type Clusters []*Cluster + +func (e Clusters) Init() { + for i := range e { + e[i].Init() + } +} + +func (e Clusters) GetDynamicClient(name string) *dynamic.DynamicClient { + for i := range e { + if e[i].Name == name { + return e[i].GetDynamicClient() + } + } + return nil +} + +func (e Clusters) GetClientSet(name string) *kubernetes.Clientset { + for i := range e { + if e[i].Name == name { + return e[i].GetClientSet() + } + } + return nil +} + +func (e Clusters) GetConfig(name string) *rest.Config { + for i := range e { + if e[i].Name == name { + return e[i].GetConfig() + } + } + return nil +} + +type Cluster struct { + Name string `yaml:"name" json:"name"` + KubeConfig string `yaml:"kubeConfig" json:"kubeConfig"` + KubeConfigPath string `yaml:"kubeConfigPath" json:"kubeConfigPath"` + EKS *EKSCluster `yaml:"eks" json:"eks"` + clientSet *kubernetes.Clientset + config *rest.Config + dynamicClient *dynamic.DynamicClient +} + +func (e *Cluster) GetDynamicClient() *dynamic.DynamicClient { + return e.dynamicClient +} + +func (e *Cluster) GetClientSet() *kubernetes.Clientset { + return e.clientSet +} + +func (e *Cluster) GetConfig() *rest.Config { + return e.config +} + +func (e *Cluster) Init() { + var err error + if e.EKS != nil { + e.KubeConfig, err = e.EKS.GetKubeconfig() + if err != nil { + slog.Error("Failed to get kubeconfig", "err", err) + os.Exit(-1) + } + if e.Name == "" { + e.Name = e.EKS.Name + } + } + if e.KubeConfigPath == "" && e.KubeConfig == "" { + e.config, err = rest.InClusterConfig() + if err != nil { + slog.Error("Failed to get in cluster config", "err", err) + os.Exit(-1) + } + } else { + var apiConfig *clientcmdapi.Config + if e.KubeConfig != "" { + apiConfig, err = clientcmd.Load([]byte(e.KubeConfig)) + if err != nil { + slog.Error("Failed to load kube config", "err", err) + os.Exit(-1) + } + } else { + if e.KubeConfigPath == "" { + e.KubeConfigPath = filepath.Join(homedir.HomeDir(), ".kube", "config") + } + apiConfig, err = clientcmd.LoadFromFile(e.KubeConfigPath) + if err != nil { + slog.Error("Failed to load kube config", "err", err) + os.Exit(-1) + } + } + // 创建一个 rest.Config 对象 + e.config, err = clientcmd.NewDefaultClientConfig(*apiConfig, &clientcmd.ConfigOverrides{}).ClientConfig() + if err != nil { + slog.Error("Failed to create rest config", "err", err) + os.Exit(-1) + } + } + e.clientSet, err = kubernetes.NewForConfig(e.config) + if err != nil { + slog.Error("Failed to create clientset", "err", err) + os.Exit(-1) + } + e.dynamicClient, err = dynamic.NewForConfig(e.config) + if err != nil { + slog.Error("Failed to create dynamic client", "err", err) + os.Exit(-1) + } +} + +type EKSCluster struct { + Name string `yaml:"name" json:"name"` + Region string `yaml:"region" json:"region"` +} + +func (e *EKSCluster) GetKubeconfig() (string, error) { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion(e.Region)) + if err != nil { + return "", err + } + + svc := eks.NewFromConfig(cfg) + + return pkg.FetchEKSKubeconfig(ctx, svc, e.Name) +} diff --git a/config/config.go b/config/config.go index 7d7f3d1..b82edd4 100644 --- a/config/config.go +++ b/config/config.go @@ -37,6 +37,7 @@ type Config struct { Locker *Locker `yaml:"locker" json:"locker"` Secret *Secret `yaml:"secret" json:"secret"` Storage *config.Storage `yaml:"storage" json:"storage"` + Clusters Clusters `yaml:"clusters" json:"clusters"` } type SecretConfig struct { @@ -79,6 +80,9 @@ func (e *Config) Init(opts ...source.Option) { if e.Storage != nil { e.Storage.Init() } + if len(e.Clusters) > 0 { + e.Clusters.Init() + } } func (e *Config) OnChange() { diff --git a/go.mod b/go.mod index 2635cee..23b4e05 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,7 @@ require ( github.com/aws/aws-msk-iam-sasl-signer-go v1.0.0 github.com/aws/aws-sdk-go-v2 v1.30.4 github.com/aws/aws-sdk-go-v2/config v1.27.28 + github.com/aws/aws-sdk-go-v2/service/eks v1.48.2 github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0 github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.5 github.com/bsm/redislock v0.9.4 @@ -41,6 +42,7 @@ require ( gorm.io/gorm v1.25.11 k8s.io/apimachinery v0.31.0 k8s.io/client-go v0.31.0 + sigs.k8s.io/yaml v1.4.0 ) require ( @@ -181,6 +183,7 @@ require ( github.com/jcmturner/rpc/v2 v2.0.3 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -300,5 +303,4 @@ require ( modernc.org/sqlite v1.32.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect - sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index 694b509..68ce3ab 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,3 @@ -dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= -dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= @@ -86,84 +84,46 @@ github.com/aws/aws-msk-iam-sasl-signer-go v1.0.0 h1:UyjtGmO0Uwl/K+zpzPwLoXzMhcN9 github.com/aws/aws-msk-iam-sasl-signer-go v1.0.0/go.mod h1:TJAXuFs2HcMib3sN5L0gUC+Q01Qvy3DemvA55WuC+iA= github.com/aws/aws-sdk-go v1.54.20 h1:FZ2UcXya7bUkvkpf7TaPmiL7EubK0go1nlXGLRwEsoo= github.com/aws/aws-sdk-go v1.54.20/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= -github.com/aws/aws-sdk-go-v2 v1.30.3 h1:jUeBtG0Ih+ZIFH0F4UkmL9w3cSpaMv9tYYDbzILP8dY= -github.com/aws/aws-sdk-go-v2 v1.30.3/go.mod h1:nIQjQVp5sfpQcTc9mPSr1B0PaWK5ByX9MOoDadSN4lc= github.com/aws/aws-sdk-go-v2 v1.30.4 h1:frhcagrVNrzmT95RJImMHgabt99vkXGslubDaDagTk8= github.com/aws/aws-sdk-go-v2 v1.30.4/go.mod h1:CT+ZPWXbYrci8chcARI3OmI/qgd+f6WtuLOoaIA8PR0= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3 h1:tW1/Rkad38LA15X4UQtjXZXNKsCgkshC3EbmcUmghTg= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.3/go.mod h1:UbnqO+zjqk3uIt9yCACHJ9IVNhyhOCnYk8yA19SAWrM= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 h1:70PVAiL15/aBMh5LThwgXdSQorVr91L127ttckI9QQU= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4/go.mod h1:/MQxMqci8tlqDH+pjmoLu1i0tbWCUP1hhyMRuFxpQCw= -github.com/aws/aws-sdk-go-v2/config v1.27.27 h1:HdqgGt1OAP0HkEDDShEl0oSYa9ZZBSOmKpdpsDMdO90= -github.com/aws/aws-sdk-go-v2/config v1.27.27/go.mod h1:MVYamCg76dFNINkZFu4n4RjDixhVr51HLj4ErWzrVwg= github.com/aws/aws-sdk-go-v2/config v1.27.28 h1:OTxWGW/91C61QlneCtnD62NLb4W616/NM1jA8LhJqbg= github.com/aws/aws-sdk-go-v2/config v1.27.28/go.mod h1:uzVRVtJSU5EFv6Fu82AoVFKozJi2ZCY6WRCXj06rbvs= -github.com/aws/aws-sdk-go-v2/credentials v1.17.27 h1:2raNba6gr2IfA0eqqiP2XiQ0UVOpGPgDSi0I9iAP+UI= -github.com/aws/aws-sdk-go-v2/credentials v1.17.27/go.mod h1:gniiwbGahQByxan6YjQUMcW4Aov6bLC3m+evgcoN4r4= github.com/aws/aws-sdk-go-v2/credentials v1.17.28 h1:m8+AHY/ND8CMHJnPoH7PJIRakWGa4gbfbxuY9TGTUXM= github.com/aws/aws-sdk-go-v2/credentials v1.17.28/go.mod h1:6TF7dSc78ehD1SL6KpRIPKMA1GyyWflIkjqg+qmf4+c= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11 h1:KreluoV8FZDEtI6Co2xuNk/UqI9iwMrOx/87PBNIKqw= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.11/go.mod h1:SeSUYBLsMYFoRvHE0Tjvn7kbxaUhl75CJi1sbfhMxkU= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 h1:yjwoSyDZF8Jth+mUk5lSPJCkMC0lMy6FaCD51jm6ayE= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12/go.mod h1:fuR57fAgMk7ot3WcNQfb6rSEn+SUffl7ri+aa8uKysI= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15 h1:SoNJ4RlFEQEbtDcCEt+QG56MY4fm4W8rYirAmq+/DdU= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.15/go.mod h1:U9ke74k1n2bf+RIgoX1SXFed1HLs51OgUSs+Ph0KJP8= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 h1:TNyt/+X43KJ9IJJMjKfa3bNTiZbUP7DeCxfbTROESwY= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16/go.mod h1:2DwJF39FlNAUiX5pAc0UNeiz16lK2t7IaFcm0LFHEgc= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15 h1:C6WHdGnTDIYETAm5iErQUiVNsclNx9qbJVPIt03B6bI= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.15/go.mod h1:ZQLZqhcu+JhSrA9/NXRm8SkDvsycE+JkV3WGY41e+IM= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 h1:jYfy8UPmd+6kJW5YhY0L1/KftReOGxI/4NtVSTh9O/I= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16/go.mod h1:7ZfEPZxkW42Afq4uQB8H2E2e6ebh6mXTueEpYzjCzcs= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15 h1:Z5r7SycxmSllHYmaAZPpmN8GviDrSGhMS6bldqtXZPw= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.15/go.mod h1:CetW7bDE00QoGEmPUoZuRog07SGVAUVW6LFpNP0YfIg= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 h1:mimdLQkIX1zr8GIPY1ZtALdBQGxcASiBd2MOp8m/dMc= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16/go.mod h1:YHk6owoSwrIsok+cAH9PENCOGoH5PU2EllX4vLtSrsY= -github.com/aws/aws-sdk-go-v2/service/appconfigdata v1.16.3 h1:a8T5x683phwsf2Us9G63hqepjlTyKAO5KteNuMlNO2I= -github.com/aws/aws-sdk-go-v2/service/appconfigdata v1.16.3/go.mod h1:h22STrNFoH0uMiKwxw3VXy1Tu7kgXLHcdjhOewAvD1Y= github.com/aws/aws-sdk-go-v2/service/appconfigdata v1.16.4 h1:ggE2+kzdvXtLYp3lJBjQfRrCFTsrwt4HgyjrAmUTXB0= github.com/aws/aws-sdk-go-v2/service/appconfigdata v1.16.4/go.mod h1:5Gr7pLLSaOc79qkghPFURtmJ2/8vgmTQPU2tSm9LOgo= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3 h1:dT3MqvGhSoaIhRseqw2I0yH81l7wiR2vjs57O51EAm8= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.3/go.mod h1:GlAeCkHwugxdHaueRr4nhPuY+WW+gR8UjlcqzPr1SPI= +github.com/aws/aws-sdk-go-v2/service/eks v1.48.2 h1:EFjJfHrl7/2qh/ZawUXtl9juOPAUUOTFDLOmov5KSgM= +github.com/aws/aws-sdk-go-v2/service/eks v1.48.2/go.mod h1:fff5mmwLCVxyXCojYjPY34sUGvWtXCD325yRL5qHAVs= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4/go.mod h1:Vz1JQXliGcQktFTN/LN6uGppAIRoLBR2bMvIMP0gOjc= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17 h1:YPYe6ZmvUfDDDELqEKtAd6bo8zxhkm+XEFEzQisqUIE= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.17/go.mod h1:oBtcnYua/CgzCWYN7NZ5j7PotFDaFSUjCYVTtfyn7vw= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 h1:GckUnpm4EJOAio1c8o25a+b3lVfwVzC9gnSBqiiNmZM= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18/go.mod h1:Br6+bxfG33Dk3ynmkhsW2Z/t9D4+lRqdLDNCKi85w0U= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17 h1:HGErhhrxZlQ044RiM+WdoZxp0p+EGM62y3L6pwA4olE= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.17/go.mod h1:RkZEx4l0EHYDJpWppMJ3nD9wZJAa8/0lq9aVC+r2UII= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 h1:tJ5RnkHCiSH0jyd6gROjlJtNwov0eGYNz8s8nFcR0jQ= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18/go.mod h1:++NHzT+nAF7ZPrHPsA+ENvsXkOO8wEu+C6RXltAG4/c= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15 h1:246A4lSTXWJw/rmlQI+TT2OcqeDMKBdyjEQrafMaQdA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.15/go.mod h1:haVfg3761/WF7YPuJOER2MP0k4UAXyHaLclKXB6usDg= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 h1:jg16PhLPUiHIj8zYIW6bqzeQSuHVEiWnGA0Brz5Xv2I= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16/go.mod h1:Uyk1zE1VVdsHSU7096h/rwnXDzOzYQVl+FNPhPw7ShY= -github.com/aws/aws-sdk-go-v2/service/s3 v1.58.3 h1:hT8ZAZRIfqBqHbzKTII+CIiY8G2oC9OpLedkZ51DWl8= -github.com/aws/aws-sdk-go-v2/service/s3 v1.58.3/go.mod h1:Lcxzg5rojyVPU/0eFwLtcyTaek/6Mtic5B1gJo7e/zE= github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0 h1:2QXGJvG19QwqXUvgcdoCOZPyLuvZf8LiXPCN4P53TdI= github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.4 h1:NgRFYyFpiMD62y4VPXh4DosPFbZd4vdMVBWKk0VmWXc= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.4/go.mod h1:TKKN7IQoM7uTnyuFm9bm9cw5P//ZYTl4m3htBWQ1G/c= github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.5 h1:UDXu9dqpCZYonj7poM4kFISjzTdWI0v3WUusM+w+Gfc= github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.5/go.mod h1:5NPkI3RsTOhwz1CuG7VVSgJCm3CINKkoIaUbUZWQ67w= -github.com/aws/aws-sdk-go-v2/service/sso v1.22.4 h1:BXx0ZIxvrJdSgSvKTZ+yRBeSqqgPM89VPlulEcl37tM= -github.com/aws/aws-sdk-go-v2/service/sso v1.22.4/go.mod h1:ooyCOXjvJEsUw7x+ZDHeISPMhtwI3ZCB7ggFMcFfWLU= github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 h1:zCsFCKvbj25i7p1u94imVoO447I/sFv8qq+lGJhRN0c= github.com/aws/aws-sdk-go-v2/service/sso v1.22.5/go.mod h1:ZeDX1SnKsVlejeuz41GiajjZpRSWR7/42q/EyA/QEiM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4 h1:yiwVzJW2ZxZTurVbYWA7QOrAaCYQR72t0wrSBfoesUE= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.4/go.mod h1:0oxfLkpz3rQ/CHlx5hB7H69YUpFiI1tql6Q6Ne+1bCw= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 h1:SKvPgvdvmiTWoi0GAJ7AsJfOz3ngVkD/ERbs5pUnHNI= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5/go.mod h1:20sz31hv/WsPa3HhU3hfrIet2kxM4Pe0r20eBZ20Tac= -github.com/aws/aws-sdk-go-v2/service/sts v1.30.3 h1:ZsDKRLXGWHk8WdtyYMoGNO7bTudrvuKpDKgMVRlepGE= -github.com/aws/aws-sdk-go-v2/service/sts v1.30.3/go.mod h1:zwySh8fpFyXp9yOr/KVzxOl8SRqgf/IDw5aUt9UKFcQ= github.com/aws/aws-sdk-go-v2/service/sts v1.30.4 h1:iAckBT2OeEK/kBDyN/jDtpEExhjeeA/Im2q4X0rJZT8= github.com/aws/aws-sdk-go-v2/service/sts v1.30.4/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0= -github.com/aws/smithy-go v1.20.3 h1:ryHwveWzPV5BIof6fyDvor6V3iUL7nTfiTKXHiW05nE= -github.com/aws/smithy-go v1.20.3/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4= github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps= @@ -189,8 +149,6 @@ github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500 h1:6lhrsTEnloDPXye github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= github.com/casbin/casbin/v2 v2.98.0 h1:xjsnyQh1hhw5kYTZJTGh4K+pxXhPgYhcr+X7zEbEB4o= github.com/casbin/casbin/v2 v2.98.0/go.mod h1:G2UyxPbyyrClPvzHQ4Yog6rtTz0x+Y2lc8qOwfqWLuc= -github.com/casbin/gorm-adapter/v3 v3.26.0 h1:4FhoNh6VqTa4CKV/B/LnwVCU073qMAFBEeQ85tlU4cc= -github.com/casbin/gorm-adapter/v3 v3.26.0/go.mod h1:aftWi0cla0CC1bHQVrSFzBcX/98IFK28AvuPppCQgTs= github.com/casbin/gorm-adapter/v3 v3.28.0 h1:ORF8prF6SfaipdgT1fud+r1Tp5J0uul8QaKJHqCPY/o= github.com/casbin/gorm-adapter/v3 v3.28.0/go.mod h1:aftWi0cla0CC1bHQVrSFzBcX/98IFK28AvuPppCQgTs= github.com/casbin/govaluate v1.2.0 h1:wXCXFmqyY+1RwiKfYo3jMKyrtZmOL3kHwaqDyCPOYak= @@ -203,8 +161,6 @@ github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/cloudflare/circl v1.3.9 h1:QFrlgFYf2Qpi8bSpVPK1HBvWpx16v/1TZivyo7pGuBE= -github.com/cloudflare/circl v1.3.9/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU= github.com/cloudflare/circl v1.4.0 h1:BV7h5MgrktNzytKmWjpOtdYrf0lkkbF8YMlBGPhJQrY= github.com/cloudflare/circl v1.4.0/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU= github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= @@ -217,7 +173,6 @@ github.com/coreos/go-oidc/v3 v3.11.0 h1:Ia3MxdwpSw702YW0xgfmP1GVCMA9aEFWu12XUZ3/ github.com/coreos/go-oidc/v3 v3.11.0/go.mod h1:gE3LgjOgFoHi9a4ce4/tJczr0Ai2/BoDhf0r5lltWI0= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= -github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pqaw19uhpSCzhj44qo35pNgKFGqzDKkU= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= @@ -376,8 +331,6 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= @@ -412,26 +365,18 @@ github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/z github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grafana/dskit v0.0.0-20240809111454-a84ba7a3fc42 h1:nLR6ka8miqqCqvK+lxrzXkYcyqJeF94+2e2Ue/nfb+4= -github.com/grafana/dskit v0.0.0-20240809111454-a84ba7a3fc42/go.mod h1:lcjGB6SuaZ2o44A9nD6p/tR4QXSPbzViRY520Gy6pTQ= github.com/grafana/dskit v0.0.0-20240820081259-f96e399400b1 h1:D5AcH0HuwL2qQRoJZuUXarCGDQSUWTX0sanhmkJQPAs= github.com/grafana/dskit v0.0.0-20240820081259-f96e399400b1/go.mod h1:c4ASJAo1QFmXGydDzNed2o0+Fncx+x4YmQ1r9HfYU3c= github.com/grafana/gomemcache v0.0.0-20240805133030-fdaf6a95408e h1:UlEET0InuoFautfaFp8lDrNF7rPHYXuBMrzwWx9XqFY= github.com/grafana/gomemcache v0.0.0-20240805133030-fdaf6a95408e/go.mod h1:IGRj8oOoxwJbHBYl1+OhS9UjQR0dv6SQOep7HqmtyFU= github.com/grafana/jsonparser v0.0.0-20240425183733-ea80629e1a32 h1:NznuPwItog+rwdVg8hAuGKP29ndRSzJAwhxKldkP8oQ= github.com/grafana/jsonparser v0.0.0-20240425183733-ea80629e1a32/go.mod h1:796sq+UcONnSlzA3RtlBZ+b/hrerkZXiEmO8oMjyRwY= -github.com/grafana/loki/pkg/push v0.0.0-20240813175630-8041bd29b90a h1:keFgRjFcSZlO0wa09KxP9DTh2acVj6oqgXIFmi7oCxI= -github.com/grafana/loki/pkg/push v0.0.0-20240813175630-8041bd29b90a/go.mod h1:lJEF/Wh5MYlmBem6tOYAFObkLsuikfrEf8Iy9AdMPiQ= github.com/grafana/loki/pkg/push v0.0.0-20240821155943-d43b2de1b4e0 h1:5Rsy2pqoLtdRtBeWb5/jAWhfziHGmwpJT6YBfQXSX4g= github.com/grafana/loki/pkg/push v0.0.0-20240821155943-d43b2de1b4e0/go.mod h1:lJEF/Wh5MYlmBem6tOYAFObkLsuikfrEf8Iy9AdMPiQ= github.com/grafana/loki/v3 v3.1.1 h1:qTVih7srptLmQQnWGD+pp93sYDnONy5S9sSt3mnZBa4= github.com/grafana/loki/v3 v3.1.1/go.mod h1:K/xPywBSTmi4laPLMg7FTFOhljjKxoT2oB0y5j8MNCQ= -github.com/grafana/pyroscope-go v1.1.1 h1:PQoUU9oWtO3ve/fgIiklYuGilvsm8qaGhlY4Vw6MAcQ= -github.com/grafana/pyroscope-go v1.1.1/go.mod h1:Mw26jU7jsL/KStNSGGuuVYdUq7Qghem5P8aXYXSXG88= github.com/grafana/pyroscope-go v1.1.2 h1:7vCfdORYQMCxIzI3NlYAs3FcBP760+gWuYWOyiVyYx8= github.com/grafana/pyroscope-go v1.1.2/go.mod h1:HSSmHo2KRn6FasBA4vK7BMiQqyQq8KSuBKvrhkXxYPU= -github.com/grafana/pyroscope-go/godeltaprof v0.1.7 h1:C11j63y7gymiW8VugJ9ZW0pWfxTZugdSJyC48olk5KY= -github.com/grafana/pyroscope-go/godeltaprof v0.1.7/go.mod h1:Tk376Nbldo4Cha9RgiU7ik8WKFkNpfds98aUzS8omLE= github.com/grafana/pyroscope-go/godeltaprof v0.1.8 h1:iwOtYXeeVSAeYefJNaxDytgjKtUuKQbJqgAIjlnicKg= github.com/grafana/pyroscope-go/godeltaprof v0.1.8/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc h1:GN2Lv3MGO7AS6PrRoT6yV5+wkrOpcszoIsO4+4ds248= @@ -528,6 +473,8 @@ github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= @@ -548,7 +495,6 @@ github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.17.3/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= @@ -574,8 +520,6 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lufia/plan9stats v0.0.0-20240513124658-fba389f38bae h1:dIZY4ULFcto4tAFlj1FYZl8ztUZ13bdq+PLY+NOfbyI= -github.com/lufia/plan9stats v0.0.0-20240513124658-fba389f38bae/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k= github.com/lufia/plan9stats v0.0.0-20240819163618-b1d8f4d146e7 h1:5RK988zAqB3/AN3opGfRpoQgAVqr6/A5+qRTi67VUZY= github.com/lufia/plan9stats v0.0.0-20240819163618-b1d8f4d146e7/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= @@ -633,12 +577,6 @@ github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJ github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= -github.com/mss-boot-io/mss-boot v0.2.7-0.20240814083825-9c11318051a4 h1:uLHTKmLSX0pwkY7/MWylxa3giyJiBw8TAJFeYs/9ovc= -github.com/mss-boot-io/mss-boot v0.2.7-0.20240814083825-9c11318051a4/go.mod h1:3uK5dTvEUPuiXOY6idFYlQ82nD1ewl2tcfGulukTL2s= -github.com/mss-boot-io/mss-boot v0.2.7-0.20240819033934-ff0cee039cce h1:n1hb8+dViBunkCZz0b3sVkjd0V8vyUMK9gdXwvwtnBg= -github.com/mss-boot-io/mss-boot v0.2.7-0.20240819033934-ff0cee039cce/go.mod h1:3uK5dTvEUPuiXOY6idFYlQ82nD1ewl2tcfGulukTL2s= -github.com/mss-boot-io/mss-boot v0.2.7-0.20240819055506-8ee0e82149e5 h1:sAPJh7tu1fMw8YjpYWhOw+sYXtj2LIkjfhLc3rCPGjU= -github.com/mss-boot-io/mss-boot v0.2.7-0.20240819055506-8ee0e82149e5/go.mod h1:3uK5dTvEUPuiXOY6idFYlQ82nD1ewl2tcfGulukTL2s= github.com/mss-boot-io/mss-boot v0.2.7-0.20240822072236-e542a7a55c43 h1:9Nx29PzpXmdWrXSKvmNUzYLL6iasRWZWq9n17N6Z5Lk= github.com/mss-boot-io/mss-boot v0.2.7-0.20240822072236-e542a7a55c43/go.mod h1:iPaoDAZQSTesMHEkOHel4svRiB/axBB1+j+unoD+fHY= github.com/mss-boot-io/redisqueue/v2 v2.0.0-20240222064111-d36e396df7f9 h1:/YgpHiqgrxz/0+mKoETXu21c6/fyDt7/j9bdD3UkbdU= @@ -699,8 +637,6 @@ github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:Om github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= github.com/prometheus/client_golang v1.20.1 h1:IMJXHOD6eARkQpxo8KkhgEVFlBNm+nkrFUyGlIu7Na8= github.com/prometheus/client_golang v1.20.1/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -1037,12 +973,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988 h1:+/tmTy5zAieooKIXfzDm9KiA3Bv6JBwriRN9LY+yayk= -google.golang.org/genproto/googleapis/api v0.0.0-20240812133136-8ffd90a71988/go.mod h1:4+X6GvPs+25wZKbQq9qyAXrwIRExv7w0Ea6MgZLZiDM= google.golang.org/genproto/googleapis/api v0.0.0-20240820151423-278611b39280 h1:YDFM9oOjiFhaMAVgbDxfxW+66nRrsvzQzJ51wp3OxC0= google.golang.org/genproto/googleapis/api v0.0.0-20240820151423-278611b39280/go.mod h1:fO8wJzT2zbQbAjbIoos1285VfEIYKDDY+Dt+WpTkh6g= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240812133136-8ffd90a71988 h1:V71AcdLZr2p8dC9dbOIMCpqi4EmRl8wUwnJzXXLmbmc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240812133136-8ffd90a71988/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240820151423-278611b39280 h1:XQMA2e105XNlEZ8NRF0HqnUOZzP14sUSsgL09kpdNnU= google.golang.org/genproto/googleapis/rpc v0.0.0-20240820151423-278611b39280/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= @@ -1092,15 +1024,10 @@ k8s.io/apimachinery v0.31.0 h1:m9jOiSr3FoSSL5WO9bjm1n6B9KROYYgNZOb4tyZ1lBc= k8s.io/apimachinery v0.31.0/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/client-go v0.31.0 h1:QqEJzNjbN2Yv1H79SsS+SWnXkBgVu4Pj3CJQgbx0gI8= k8s.io/client-go v0.31.0/go.mod h1:Y9wvC76g4fLjmU0BA+rV+h2cncoadjvjjkkIGoTLcGU= -k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20240812233141-91dab695df6f h1:bnWtxXWdAl5bVOCEPoNdvMkyj6cTW3zxHuwKIakuV9w= -k8s.io/kube-openapi v0.0.0-20240812233141-91dab695df6f/go.mod h1:G0W3eI9gG219NHRq3h5uQaRBl4pj4ZpwzRP5ti8y770= k8s.io/kube-openapi v0.0.0-20240816214639-573285566f34 h1:/amS69DLm09mtbFtN3+LyygSFohnYGMseF8iv+2zulg= k8s.io/kube-openapi v0.0.0-20240816214639-573285566f34/go.mod h1:G0W3eI9gG219NHRq3h5uQaRBl4pj4ZpwzRP5ti8y770= -k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= -k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= k8s.io/utils v0.0.0-20240821151609-f90d01438635 h1:2wThSvJoW/Ncn9TmQEYXRnevZXi2duqHWf5OX9S3zjI= k8s.io/utils v0.0.0-20240821151609-f90d01438635/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ= @@ -1111,8 +1038,6 @@ modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE= modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ= modernc.org/gc/v2 v2.5.0 h1:bJ9ChznK1L1mUtAQtxi0wi5AtAs5jQuw4PrPHO5pb6M= modernc.org/gc/v2 v2.5.0/go.mod h1:wzN5dK1AzVGoH6XOzc3YZ+ey/jPgYHLuVckd62P0GYU= -modernc.org/libc v1.59.3 h1:A4QAp1lRSn2/b4aU+wBtq+yeKgq/2BUevrj0p1ZNy2M= -modernc.org/libc v1.59.3/go.mod h1:EY/egGEU7Ju66eU6SBqCNYaFUDuc4npICkMWnU5EE3A= modernc.org/libc v1.59.9 h1:k+nNDDakwipimgmJ1D9H466LhFeSkaPPycAs1OZiDmY= modernc.org/libc v1.59.9/go.mod h1:EY/egGEU7Ju66eU6SBqCNYaFUDuc4npICkMWnU5EE3A= modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4= diff --git a/models/task.go b/models/task.go index bec50e4..0272a67 100644 --- a/models/task.go +++ b/models/task.go @@ -6,6 +6,9 @@ import ( "encoding/json" "errors" "fmt" + "github.com/mss-boot-io/mss-boot-admin/config" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "log/slog" "time" @@ -15,6 +18,7 @@ import ( "github.com/mss-boot-io/mss-boot/pkg/enum" "github.com/robfig/cron/v3" "gorm.io/gorm" + batchv1 "k8s.io/api/batch/v1" ) /* @@ -24,14 +28,25 @@ import ( * @Last Modified time: 2023/12/5 16:11:48 */ +type TaskProvider string + +const ( + TaskProviderDefault TaskProvider = "default" + TaskProviderK8S TaskProvider = "k8s" +) + // Task support http/grpc/script type Task struct { ModelGormTenant ModelCreator - Name string `json:"name"` - EntryID int `json:"entryID"` - Spec string `json:"spec"` - Command string `json:"command"` + Name string `json:"name" gorm:"type:varchar(255);not null;comment:任务名称"` + Namespace string `json:"namespace" gorm:"type:varchar(255);not null;comment:命名空间"` + Cluster string `json:"cluster" gorm:"type:varchar(50);comment:集群"` + Provider TaskProvider `json:"provider" gorm:"type:varchar(255);not null;comment:提供者"` + Image string `json:"image" gorm:"type:varchar(255);not null;default:default;comment:镜像"` + EntryID int `json:"entryID" gorm:"size:10;comment:任务ID"` + Spec string `json:"spec" gorm:"type:varchar(255);not null;comment:任务规则"` + Command string `json:"command" gorm:"type:varchar(255);not null;comment:命令"` Args ArrayString `json:"args" swaggertype:"array,string" gorm:"type:text"` Once bool `json:"once" gorm:"-"` Protocol string `json:"protocol" gorm:"size:10"` @@ -51,7 +66,105 @@ func (*Task) TableName() string { return "mss_boot_tasks" } -func (t *Task) AfterFind(tx *gorm.DB) (err error) { +func (t *Task) AfterCreate(tx *gorm.DB) error { + switch t.Provider { + case TaskProviderDefault: + return nil + } + clientSet := config.Cfg.Clusters.GetClientSet(t.Cluster) + if clientSet == nil { + return fmt.Errorf("cluster %s not found", t.Cluster) + } + var limitCount int32 = 10 + command := make([]string, 0) + if t.Command != "" { + command = append(command, t.Command) + } + // 失败的pod只能重试3次 + _, err := clientSet.BatchV1().CronJobs(t.Namespace).Create(tx.Statement.Context, + &batchv1.CronJob{ + ObjectMeta: metav1.ObjectMeta{ + Name: t.ID, + Namespace: t.Namespace, + Labels: map[string]string{ + "id": t.ID, + "name": t.Name, + }, + }, + Spec: batchv1.CronJobSpec{ + SuccessfulJobsHistoryLimit: &limitCount, + FailedJobsHistoryLimit: &limitCount, + Schedule: t.Spec, + JobTemplate: batchv1.JobTemplateSpec{ + ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{ + "id": t.ID, + "name": t.Name, + }, + }, + Spec: batchv1.JobSpec{ + Template: corev1.PodTemplateSpec{ + Spec: corev1.PodSpec{ + Containers: []corev1.Container{ + { + Name: t.Name, + Image: t.Image, + Command: command, + Args: t.Args, + ImagePullPolicy: corev1.PullIfNotPresent, + }, + }, + }, + }, + }, + }, + }, + }, + metav1.CreateOptions{}) + return err +} + +func (t *Task) AfterUpdate(tx *gorm.DB) error { + switch t.Provider { + case TaskProviderDefault: + return nil + } + clientSet := config.Cfg.Clusters.GetClientSet(t.Cluster) + if clientSet == nil { + return fmt.Errorf("cluster %s not found", t.Cluster) + } + job, err := clientSet.BatchV1().CronJobs(t.Namespace). + Get(tx.Statement.Context, t.ID, metav1.GetOptions{}) + if err != nil { + return err + } + command := make([]string, 0) + if t.Command != "" { + command = append(command, t.Command) + } + job.Spec.Schedule = t.Spec + job.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Image = t.Image + job.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Command = command + job.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Args = t.Args + _, err = clientSet.BatchV1(). + CronJobs(t.Namespace). + Update(tx.Statement.Context, job, metav1.UpdateOptions{}) + return err +} + +func (t *Task) AfterDelete(tx *gorm.DB) error { + switch t.Provider { + case TaskProviderDefault: + return nil + } + clientSet := config.Cfg.Clusters.GetClientSet(t.Cluster) + if clientSet == nil { + return fmt.Errorf("cluster %s not found", t.Cluster) + } + return clientSet.BatchV1().CronJobs(t.Namespace).Delete(tx.Statement.Context, t.ID, metav1.DeleteOptions{}) +} + +func (t *Task) AfterFind(_ *gorm.DB) (err error) { if t.CheckedAt.Valid { t.CheckedAtR = &t.CheckedAt.Time } diff --git a/pkg/eks.go b/pkg/eks.go new file mode 100644 index 0000000..32bfd09 --- /dev/null +++ b/pkg/eks.go @@ -0,0 +1,86 @@ +package pkg + +/* + * @Author: lwnmengjing + * @Date: 2024/8/23 11:34:49 + * @Last Modified by: lwnmengjing + * @Last Modified time: 2024/8/23 11:34:49 + */ +import ( + "context" + "encoding/json" + "fmt" + + "github.com/aws/aws-sdk-go-v2/aws" + "github.com/aws/aws-sdk-go-v2/service/eks" + "sigs.k8s.io/yaml" +) + +// FetchEKSKubeconfig fetches the kubeconfig for the specified EKS cluster. +func FetchEKSKubeconfig(ctx context.Context, svc *eks.Client, clusterName string) (string, error) { + result, err := svc.DescribeCluster(ctx, &eks.DescribeClusterInput{ + Name: aws.String(clusterName), + }) + if err != nil { + return "", err + } + + cluster := result.Cluster + if cluster == nil { + return "", fmt.Errorf("cluster %s not found", clusterName) + } + + kubeconfig := map[string]interface{}{ + "apiVersion": "v1", + "clusters": []map[string]interface{}{ + { + "cluster": map[string]interface{}{ + "server": aws.ToString(cluster.Endpoint), + "certificate-authority-data": aws.ToString(cluster.CertificateAuthority.Data), + }, + "name": clusterName, + }, + }, + "contexts": []map[string]interface{}{ + { + "context": map[string]interface{}{ + "cluster": clusterName, + "user": clusterName, + }, + "name": "default", + }, + }, + "current-context": "default", + "users": []map[string]interface{}{ + { + "name": clusterName, + "user": map[string]interface{}{ + "exec": map[string]interface{}{ + "apiVersion": "client.authentication.k8s.io/v1beta1", + "command": "aws", + "args": []string{ + "--region", "ap-northeast-1", + "eks", "get-token", + "--cluster-name", clusterName, + }, + "interactiveMode": "IfAvailable", + "provideClusterInfo": false, + }, + }, + }, + }, + } + + kubeconfigBytes, err := json.MarshalIndent(kubeconfig, "", " ") + if err != nil { + return "", err + } + + // Convert JSON to YAML + kubeconfigYAML, err := yaml.JSONToYAML(kubeconfigBytes) + if err != nil { + return "", err + } + + return string(kubeconfigYAML), nil +} From bef6dd254779e744218ec68302e600014347df25 Mon Sep 17 00:00:00 2001 From: lwnmengjing Date: Fri, 23 Aug 2024 19:37:01 +0800 Subject: [PATCH 2/5] :construction: save --- config/clusters.go | 48 +++++++++++++++------------- models/task.go | 17 +++++----- pkg/eks.go | 78 +++++++++++++++++----------------------------- 3 files changed, 63 insertions(+), 80 deletions(-) diff --git a/config/clusters.go b/config/clusters.go index fc6292d..e66139b 100644 --- a/config/clusters.go +++ b/config/clusters.go @@ -28,34 +28,34 @@ import ( type Clusters []*Cluster -func (e Clusters) Init() { - for i := range e { - e[i].Init() +func (e *Clusters) Init() { + for _, cluster := range *e { + cluster.Init() } } -func (e Clusters) GetDynamicClient(name string) *dynamic.DynamicClient { - for i := range e { - if e[i].Name == name { - return e[i].GetDynamicClient() +func (e *Clusters) GetDynamicClient(name string) *dynamic.DynamicClient { + for _, cluster := range *e { + if cluster.Name == name { + return cluster.GetDynamicClient() } } return nil } -func (e Clusters) GetClientSet(name string) *kubernetes.Clientset { - for i := range e { - if e[i].Name == name { - return e[i].GetClientSet() +func (e *Clusters) GetClientSet(name string) *kubernetes.Clientset { + for _, cluster := range *e { + if cluster.Name == name { + return cluster.GetClientSet() } } return nil } -func (e Clusters) GetConfig(name string) *rest.Config { - for i := range e { - if e[i].Name == name { - return e[i].GetConfig() +func (e *Clusters) GetConfig(name string) *rest.Config { + for _, cluster := range *e { + if cluster.Name == name { + return cluster.GetConfig() } } return nil @@ -85,8 +85,9 @@ func (e *Cluster) GetConfig() *rest.Config { func (e *Cluster) Init() { var err error + var apiConfig *clientcmdapi.Config if e.EKS != nil { - e.KubeConfig, err = e.EKS.GetKubeconfig() + apiConfig, err = e.EKS.GetKubeconfig() if err != nil { slog.Error("Failed to get kubeconfig", "err", err) os.Exit(-1) @@ -95,14 +96,14 @@ func (e *Cluster) Init() { e.Name = e.EKS.Name } } - if e.KubeConfigPath == "" && e.KubeConfig == "" { + if apiConfig == nil && e.KubeConfigPath == "" && e.KubeConfig == "" { e.config, err = rest.InClusterConfig() if err != nil { slog.Error("Failed to get in cluster config", "err", err) os.Exit(-1) } - } else { - var apiConfig *clientcmdapi.Config + } + if apiConfig == nil || e.config == nil { if e.KubeConfig != "" { apiConfig, err = clientcmd.Load([]byte(e.KubeConfig)) if err != nil { @@ -119,6 +120,8 @@ func (e *Cluster) Init() { os.Exit(-1) } } + } + if e.config == nil { // 创建一个 rest.Config 对象 e.config, err = clientcmd.NewDefaultClientConfig(*apiConfig, &clientcmd.ConfigOverrides{}).ClientConfig() if err != nil { @@ -126,6 +129,7 @@ func (e *Cluster) Init() { os.Exit(-1) } } + e.clientSet, err = kubernetes.NewForConfig(e.config) if err != nil { slog.Error("Failed to create clientset", "err", err) @@ -143,15 +147,15 @@ type EKSCluster struct { Region string `yaml:"region" json:"region"` } -func (e *EKSCluster) GetKubeconfig() (string, error) { +func (e *EKSCluster) GetKubeconfig() (*clientcmdapi.Config, error) { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() cfg, err := config.LoadDefaultConfig(ctx, config.WithRegion(e.Region)) if err != nil { - return "", err + return nil, err } svc := eks.NewFromConfig(cfg) - return pkg.FetchEKSKubeconfig(ctx, svc, e.Name) + return pkg.FetchEKSKubeconfig(ctx, svc, e.Region, e.Name) } diff --git a/models/task.go b/models/task.go index 0272a67..966ca3e 100644 --- a/models/task.go +++ b/models/task.go @@ -6,19 +6,20 @@ import ( "encoding/json" "errors" "fmt" - "github.com/mss-boot-io/mss-boot-admin/config" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "log/slog" "time" - "github.com/mss-boot-io/mss-boot-admin/pkg" "github.com/mss-boot-io/mss-boot/core/server/task" "github.com/mss-boot-io/mss-boot/pkg/config/gormdb" "github.com/mss-boot-io/mss-boot/pkg/enum" "github.com/robfig/cron/v3" "gorm.io/gorm" batchv1 "k8s.io/api/batch/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/mss-boot-io/mss-boot-admin/config" + "github.com/mss-boot-io/mss-boot-admin/pkg" ) /* @@ -50,7 +51,7 @@ type Task struct { Args ArrayString `json:"args" swaggertype:"array,string" gorm:"type:text"` Once bool `json:"once" gorm:"-"` Protocol string `json:"protocol" gorm:"size:10"` - Endpoint string `json:"endpoint"` + Endpoint string `json:"endpoint" gorm:"type:varchar(255);not null;comment:地址"` Body string `json:"body" gorm:"type:bytes"` Status enum.Status `json:"status" gorm:"size:10"` Remark string `json:"remark" gorm:"type:text"` @@ -68,7 +69,7 @@ func (*Task) TableName() string { func (t *Task) AfterCreate(tx *gorm.DB) error { switch t.Provider { - case TaskProviderDefault: + case TaskProviderDefault, "": return nil } clientSet := config.Cfg.Clusters.GetClientSet(t.Cluster) @@ -126,7 +127,7 @@ func (t *Task) AfterCreate(tx *gorm.DB) error { func (t *Task) AfterUpdate(tx *gorm.DB) error { switch t.Provider { - case TaskProviderDefault: + case TaskProviderDefault, "": return nil } clientSet := config.Cfg.Clusters.GetClientSet(t.Cluster) @@ -154,7 +155,7 @@ func (t *Task) AfterUpdate(tx *gorm.DB) error { func (t *Task) AfterDelete(tx *gorm.DB) error { switch t.Provider { - case TaskProviderDefault: + case TaskProviderDefault, "": return nil } clientSet := config.Cfg.Clusters.GetClientSet(t.Cluster) diff --git a/pkg/eks.go b/pkg/eks.go index 32bfd09..61e8c8b 100644 --- a/pkg/eks.go +++ b/pkg/eks.go @@ -8,79 +8,57 @@ package pkg */ import ( "context" - "encoding/json" "fmt" "github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/service/eks" - "sigs.k8s.io/yaml" + clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) // FetchEKSKubeconfig fetches the kubeconfig for the specified EKS cluster. -func FetchEKSKubeconfig(ctx context.Context, svc *eks.Client, clusterName string) (string, error) { +func FetchEKSKubeconfig(ctx context.Context, svc *eks.Client, region, clusterName string) (*clientcmdapi.Config, error) { result, err := svc.DescribeCluster(ctx, &eks.DescribeClusterInput{ Name: aws.String(clusterName), }) if err != nil { - return "", err + return nil, err } cluster := result.Cluster if cluster == nil { - return "", fmt.Errorf("cluster %s not found", clusterName) + return nil, fmt.Errorf("cluster %s not found", clusterName) } - kubeconfig := map[string]interface{}{ - "apiVersion": "v1", - "clusters": []map[string]interface{}{ - { - "cluster": map[string]interface{}{ - "server": aws.ToString(cluster.Endpoint), - "certificate-authority-data": aws.ToString(cluster.CertificateAuthority.Data), - }, - "name": clusterName, + return &clientcmdapi.Config{ + APIVersion: "v1", + Clusters: map[string]*clientcmdapi.Cluster{ + clusterName: { + Server: aws.ToString(cluster.Endpoint), + CertificateAuthorityData: []byte(*cluster.CertificateAuthority.Data), }, }, - "contexts": []map[string]interface{}{ - { - "context": map[string]interface{}{ - "cluster": clusterName, - "user": clusterName, - }, - "name": "default", + Contexts: map[string]*clientcmdapi.Context{ + "default": { + Cluster: clusterName, + AuthInfo: clusterName, }, }, - "current-context": "default", - "users": []map[string]interface{}{ - { - "name": clusterName, - "user": map[string]interface{}{ - "exec": map[string]interface{}{ - "apiVersion": "client.authentication.k8s.io/v1beta1", - "command": "aws", - "args": []string{ - "--region", "ap-northeast-1", - "eks", "get-token", - "--cluster-name", clusterName, - }, - "interactiveMode": "IfAvailable", - "provideClusterInfo": false, + CurrentContext: "default", + AuthInfos: map[string]*clientcmdapi.AuthInfo{ + clusterName: { + Exec: &clientcmdapi.ExecConfig{ + APIVersion: "client.authentication.k8s.io/v1beta1", + Command: "aws", + Args: []string{ + "--region", + region, + "eks", + "get-token", + "--cluster-name", + clusterName, }, }, }, }, - } - - kubeconfigBytes, err := json.MarshalIndent(kubeconfig, "", " ") - if err != nil { - return "", err - } - - // Convert JSON to YAML - kubeconfigYAML, err := yaml.JSONToYAML(kubeconfigBytes) - if err != nil { - return "", err - } - - return string(kubeconfigYAML), nil + }, nil } From fda513fde249a6879922b1e82c2ea0495556c28c Mon Sep 17 00:00:00 2001 From: lwnmengjing Date: Mon, 26 Aug 2024 16:01:40 +0800 Subject: [PATCH 3/5] :sparkles: feat: support task k8s provider --- config/clusters.go | 20 ++++++++-------- go.mod | 6 ++--- go.sum | 4 ++-- models/task.go | 60 ++++++++++++++++++++++++++++++++++++---------- pkg/eks.go | 23 ++++++++++++------ 5 files changed, 79 insertions(+), 34 deletions(-) diff --git a/config/clusters.go b/config/clusters.go index e66139b..af3f53b 100644 --- a/config/clusters.go +++ b/config/clusters.go @@ -28,14 +28,14 @@ import ( type Clusters []*Cluster -func (e *Clusters) Init() { - for _, cluster := range *e { - cluster.Init() +func (e Clusters) Init() { + for i := range e { + (e)[i].Init() } } -func (e *Clusters) GetDynamicClient(name string) *dynamic.DynamicClient { - for _, cluster := range *e { +func (e Clusters) GetDynamicClient(name string) *dynamic.DynamicClient { + for _, cluster := range e { if cluster.Name == name { return cluster.GetDynamicClient() } @@ -43,8 +43,8 @@ func (e *Clusters) GetDynamicClient(name string) *dynamic.DynamicClient { return nil } -func (e *Clusters) GetClientSet(name string) *kubernetes.Clientset { - for _, cluster := range *e { +func (e Clusters) GetClientSet(name string) *kubernetes.Clientset { + for _, cluster := range e { if cluster.Name == name { return cluster.GetClientSet() } @@ -52,8 +52,8 @@ func (e *Clusters) GetClientSet(name string) *kubernetes.Clientset { return nil } -func (e *Clusters) GetConfig(name string) *rest.Config { - for _, cluster := range *e { +func (e Clusters) GetConfig(name string) *rest.Config { + for _, cluster := range e { if cluster.Name == name { return cluster.GetConfig() } @@ -103,7 +103,7 @@ func (e *Cluster) Init() { os.Exit(-1) } } - if apiConfig == nil || e.config == nil { + if apiConfig == nil && e.config == nil { if e.KubeConfig != "" { apiConfig, err = clientcmd.Load([]byte(e.KubeConfig)) if err != nil { diff --git a/go.mod b/go.mod index 23b4e05..08b83f9 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( github.com/gorilla/websocket v1.5.3 github.com/grafana/pyroscope-go v1.1.2 github.com/larksuite/oapi-sdk-go/v3 v3.3.1 - github.com/mss-boot-io/mss-boot v0.2.7-0.20240822072236-e542a7a55c43 + github.com/mss-boot-io/mss-boot v0.2.7 github.com/mss-boot-io/redisqueue/v2 v2.0.0-20240222064111-d36e396df7f9 github.com/nsqio/go-nsq v1.1.0 github.com/redis/go-redis/v9 v9.6.1 @@ -40,9 +40,9 @@ require ( golang.org/x/oauth2 v0.22.0 google.golang.org/grpc v1.65.0 gorm.io/gorm v1.25.11 + k8s.io/api v0.31.0 k8s.io/apimachinery v0.31.0 k8s.io/client-go v0.31.0 - sigs.k8s.io/yaml v1.4.0 ) require ( @@ -293,7 +293,6 @@ require ( gorm.io/driver/postgres v1.5.9 // indirect gorm.io/driver/sqlserver v1.5.3 // indirect gorm.io/plugin/dbresolver v1.5.2 // indirect - k8s.io/api v0.31.0 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20240816214639-573285566f34 // indirect k8s.io/utils v0.0.0-20240821151609-f90d01438635 // indirect @@ -303,4 +302,5 @@ require ( modernc.org/sqlite v1.32.0 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index 68ce3ab..f0a2188 100644 --- a/go.sum +++ b/go.sum @@ -577,8 +577,8 @@ github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJ github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/montanaflynn/stats v0.7.1 h1:etflOAAHORrCC44V+aR6Ftzort912ZU+YLiSTuV8eaE= github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= -github.com/mss-boot-io/mss-boot v0.2.7-0.20240822072236-e542a7a55c43 h1:9Nx29PzpXmdWrXSKvmNUzYLL6iasRWZWq9n17N6Z5Lk= -github.com/mss-boot-io/mss-boot v0.2.7-0.20240822072236-e542a7a55c43/go.mod h1:iPaoDAZQSTesMHEkOHel4svRiB/axBB1+j+unoD+fHY= +github.com/mss-boot-io/mss-boot v0.2.7 h1:RnV1G3lMLLu5HwXGIkqRb+p8aGUZyVF+p8tIhK2GnA0= +github.com/mss-boot-io/mss-boot v0.2.7/go.mod h1:iPaoDAZQSTesMHEkOHel4svRiB/axBB1+j+unoD+fHY= github.com/mss-boot-io/redisqueue/v2 v2.0.0-20240222064111-d36e396df7f9 h1:/YgpHiqgrxz/0+mKoETXu21c6/fyDt7/j9bdD3UkbdU= github.com/mss-boot-io/redisqueue/v2 v2.0.0-20240222064111-d36e396df7f9/go.mod h1:f/sISkwvecPq37zygQzWNj5ntJoP/jcoK0kPIjFTWFI= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= diff --git a/models/task.go b/models/task.go index 966ca3e..e3e1408 100644 --- a/models/task.go +++ b/models/task.go @@ -48,7 +48,7 @@ type Task struct { EntryID int `json:"entryID" gorm:"size:10;comment:任务ID"` Spec string `json:"spec" gorm:"type:varchar(255);not null;comment:任务规则"` Command string `json:"command" gorm:"type:varchar(255);not null;comment:命令"` - Args ArrayString `json:"args" swaggertype:"array,string" gorm:"type:text"` + Args string `json:"args" gorm:"type:text"` Once bool `json:"once" gorm:"-"` Protocol string `json:"protocol" gorm:"size:10"` Endpoint string `json:"endpoint" gorm:"type:varchar(255);not null;comment:地址"` @@ -63,6 +63,30 @@ type Task struct { Metadata string `json:"metadata" gorm:"type:bytes"` } +func (t *Task) GetArgs() []string { + if t.Args == "" { + return nil + } + args := make([]string, 0) + err := json.Unmarshal([]byte(t.Args), &args) + if err != nil { + slog.Error("task args unmarshal error", slog.Any("err", err)) + } + return args +} + +func (t *Task) GetCommand() []string { + if t.Command == "" { + return nil + } + commands := make([]string, 0) + err := json.Unmarshal([]byte(t.Command), &commands) + if err != nil { + slog.Error("task command unmarshal error", slog.Any("err", err)) + } + return commands +} + func (*Task) TableName() string { return "mss_boot_tasks" } @@ -81,6 +105,9 @@ func (t *Task) AfterCreate(tx *gorm.DB) error { if t.Command != "" { command = append(command, t.Command) } + if t.Namespace == "" { + t.Namespace = "default" + } // 失败的pod只能重试3次 _, err := clientSet.BatchV1().CronJobs(t.Namespace).Create(tx.Statement.Context, &batchv1.CronJob{ @@ -110,11 +137,12 @@ func (t *Task) AfterCreate(tx *gorm.DB) error { { Name: t.Name, Image: t.Image, - Command: command, - Args: t.Args, + Command: t.GetCommand(), + Args: t.GetArgs(), ImagePullPolicy: corev1.PullIfNotPresent, }, }, + RestartPolicy: corev1.RestartPolicyOnFailure, }, }, }, @@ -122,7 +150,11 @@ func (t *Task) AfterCreate(tx *gorm.DB) error { }, }, metav1.CreateOptions{}) - return err + if err != nil { + slog.Error("task create cron job error", slog.Any("err", err)) + return err + } + return nil } func (t *Task) AfterUpdate(tx *gorm.DB) error { @@ -134,23 +166,27 @@ func (t *Task) AfterUpdate(tx *gorm.DB) error { if clientSet == nil { return fmt.Errorf("cluster %s not found", t.Cluster) } + if t.Namespace == "" { + t.Namespace = "default" + } job, err := clientSet.BatchV1().CronJobs(t.Namespace). Get(tx.Statement.Context, t.ID, metav1.GetOptions{}) if err != nil { + slog.Error("task get cron job error", slog.Any("err", err)) return err } - command := make([]string, 0) - if t.Command != "" { - command = append(command, t.Command) - } job.Spec.Schedule = t.Spec job.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Image = t.Image - job.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Command = command - job.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Args = t.Args + job.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Command = t.GetCommand() + job.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Args = t.GetArgs() _, err = clientSet.BatchV1(). CronJobs(t.Namespace). Update(tx.Statement.Context, job, metav1.UpdateOptions{}) - return err + if err != nil { + slog.Error("task update cron job error", slog.Any("err", err)) + return err + } + return nil } func (t *Task) AfterDelete(tx *gorm.DB) error { @@ -206,7 +242,7 @@ func (t *Task) Run() { Method: t.Method, Command: t.Command, Body: bytes.NewBuffer([]byte(t.Body)), - Args: t.Args, + Args: t.GetArgs(), Python: t.Python, Writer: taskRun, Metadata: make(map[string]string), diff --git a/pkg/eks.go b/pkg/eks.go index 61e8c8b..cff30d7 100644 --- a/pkg/eks.go +++ b/pkg/eks.go @@ -1,13 +1,9 @@ package pkg -/* - * @Author: lwnmengjing - * @Date: 2024/8/23 11:34:49 - * @Last Modified by: lwnmengjing - * @Last Modified time: 2024/8/23 11:34:49 - */ import ( "context" + "encoding/base64" + "encoding/pem" "fmt" "github.com/aws/aws-sdk-go-v2/aws" @@ -29,12 +25,23 @@ func FetchEKSKubeconfig(ctx context.Context, svc *eks.Client, region, clusterNam return nil, fmt.Errorf("cluster %s not found", clusterName) } + // Decode and validate the Certificate Authority data + certData, err := base64.StdEncoding.DecodeString(aws.ToString(cluster.CertificateAuthority.Data)) + if err != nil { + return nil, fmt.Errorf("failed to decode certificate authority data: %w", err) + } + + pemBlock, _ := pem.Decode(certData) + if pemBlock == nil { + return nil, fmt.Errorf("failed to parse certificate authority data as PEM block") + } + return &clientcmdapi.Config{ APIVersion: "v1", Clusters: map[string]*clientcmdapi.Cluster{ clusterName: { Server: aws.ToString(cluster.Endpoint), - CertificateAuthorityData: []byte(*cluster.CertificateAuthority.Data), + CertificateAuthorityData: certData, }, }, Contexts: map[string]*clientcmdapi.Context{ @@ -57,6 +64,8 @@ func FetchEKSKubeconfig(ctx context.Context, svc *eks.Client, region, clusterNam "--cluster-name", clusterName, }, + InteractiveMode: clientcmdapi.IfAvailableExecInteractiveMode, + ProvideClusterInfo: false, }, }, }, From 7aed984f1598207e6fe521f1c2108b8c379f971c Mon Sep 17 00:00:00 2001 From: lwnmengjing Date: Mon, 26 Aug 2024 16:05:18 +0800 Subject: [PATCH 4/5] :sparkles: feat: support task k8s provider --- go.mod | 40 ++++++++++++++++++++-------------------- go.sum | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 20 deletions(-) diff --git a/go.mod b/go.mod index 08b83f9..bb64f98 100644 --- a/go.mod +++ b/go.mod @@ -9,10 +9,10 @@ require ( github.com/appleboy/gin-jwt/v2 v2.9.2 github.com/aws/aws-msk-iam-sasl-signer-go v1.0.0 github.com/aws/aws-sdk-go-v2 v1.30.4 - github.com/aws/aws-sdk-go-v2/config v1.27.28 + github.com/aws/aws-sdk-go-v2/config v1.27.30 github.com/aws/aws-sdk-go-v2/service/eks v1.48.2 - github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.5 + github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.6 github.com/bsm/redislock v0.9.4 github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be github.com/gin-contrib/cors v1.7.2 @@ -22,7 +22,7 @@ require ( github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.5.3 github.com/grafana/pyroscope-go v1.1.2 - github.com/larksuite/oapi-sdk-go/v3 v3.3.1 + github.com/larksuite/oapi-sdk-go/v3 v3.3.2 github.com/mss-boot-io/mss-boot v0.2.7 github.com/mss-boot-io/redisqueue/v2 v2.0.0-20240222064111-d36e396df7f9 github.com/nsqio/go-nsq v1.1.0 @@ -59,20 +59,20 @@ require ( github.com/andygrunwald/go-jira v1.16.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.17.28 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.17.29 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 // indirect github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 // indirect github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 // indirect - github.com/aws/aws-sdk-go-v2/service/appconfigdata v1.16.4 // indirect + github.com/aws/aws-sdk-go-v2/service/appconfigdata v1.16.5 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.30.4 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 // indirect github.com/aws/smithy-go v1.20.4 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bytedance/sonic v1.12.1 // indirect @@ -146,16 +146,16 @@ require ( github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/gorilla/mux v1.8.1 // indirect - github.com/grafana/dskit v0.0.0-20240820081259-f96e399400b1 // indirect + github.com/grafana/dskit v0.0.0-20240826073544-47b1b6311db3 // indirect github.com/grafana/gomemcache v0.0.0-20240805133030-fdaf6a95408e // indirect github.com/grafana/jsonparser v0.0.0-20240425183733-ea80629e1a32 // indirect - github.com/grafana/loki/pkg/push v0.0.0-20240821155943-d43b2de1b4e0 // indirect + github.com/grafana/loki/pkg/push v0.0.0-20240822152437-246a1dfbe24a // indirect github.com/grafana/loki/v3 v3.1.1 // indirect github.com/grafana/pyroscope-go/godeltaprof v0.1.8 // indirect github.com/grafana/regexp v0.0.0-20240518133315-a468a5bfb3bc // indirect github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect - github.com/hashicorp/consul/api v1.29.2 // indirect + github.com/hashicorp/consul/api v1.29.3 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect @@ -216,14 +216,14 @@ require ( github.com/opentracing-contrib/go-grpc v0.0.0-20240724223109-9dec25a38fa8 // indirect github.com/opentracing-contrib/go-stdlib v1.0.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect - github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/pires/go-proxyproto v0.7.0 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect - github.com/prometheus/client_golang v1.20.1 // indirect + github.com/prometheus/client_golang v1.20.2 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.55.0 // indirect github.com/prometheus/exporter-toolkit v0.11.0 // indirect @@ -264,17 +264,17 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.5.15 // indirect go.etcd.io/etcd/client/v3 v3.5.15 // indirect go.mongodb.org/mongo-driver v1.16.1 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect + go.opentelemetry.io/otel v1.29.0 // indirect + go.opentelemetry.io/otel/metric v1.29.0 // indirect + go.opentelemetry.io/otel/trace v1.29.0 // indirect go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect golang.org/x/arch v0.9.0 // indirect golang.org/x/crypto v0.26.0 // indirect - golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect + golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 // indirect golang.org/x/mod v0.20.0 // indirect golang.org/x/sync v0.8.0 // indirect golang.org/x/sys v0.24.0 // indirect @@ -282,8 +282,8 @@ require ( golang.org/x/text v0.17.0 // indirect golang.org/x/time v0.6.0 // indirect golang.org/x/tools v0.24.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240820151423-278611b39280 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240820151423-278611b39280 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240823204242-4ba0660f739c // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240823204242-4ba0660f739c // indirect google.golang.org/protobuf v1.34.2 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect @@ -294,7 +294,7 @@ require ( gorm.io/driver/sqlserver v1.5.3 // indirect gorm.io/plugin/dbresolver v1.5.2 // indirect k8s.io/klog/v2 v2.130.1 // indirect - k8s.io/kube-openapi v0.0.0-20240816214639-573285566f34 // indirect + k8s.io/kube-openapi v0.0.0-20240822171749-76de80e0abd9 // indirect k8s.io/utils v0.0.0-20240821151609-f90d01438635 // indirect modernc.org/libc v1.59.9 // indirect modernc.org/mathutil v1.6.0 // indirect diff --git a/go.sum b/go.sum index f0a2188..da8769e 100644 --- a/go.sum +++ b/go.sum @@ -90,8 +90,12 @@ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 h1:70PVAiL15/aBMh5L github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4/go.mod h1:/MQxMqci8tlqDH+pjmoLu1i0tbWCUP1hhyMRuFxpQCw= github.com/aws/aws-sdk-go-v2/config v1.27.28 h1:OTxWGW/91C61QlneCtnD62NLb4W616/NM1jA8LhJqbg= github.com/aws/aws-sdk-go-v2/config v1.27.28/go.mod h1:uzVRVtJSU5EFv6Fu82AoVFKozJi2ZCY6WRCXj06rbvs= +github.com/aws/aws-sdk-go-v2/config v1.27.30 h1:AQF3/+rOgeJBQP3iI4vojlPib5X6eeOYoa/af7OxAYg= +github.com/aws/aws-sdk-go-v2/config v1.27.30/go.mod h1:yxqvuubha9Vw8stEgNiStO+yZpP68Wm9hLmcm+R/Qk4= github.com/aws/aws-sdk-go-v2/credentials v1.17.28 h1:m8+AHY/ND8CMHJnPoH7PJIRakWGa4gbfbxuY9TGTUXM= github.com/aws/aws-sdk-go-v2/credentials v1.17.28/go.mod h1:6TF7dSc78ehD1SL6KpRIPKMA1GyyWflIkjqg+qmf4+c= +github.com/aws/aws-sdk-go-v2/credentials v1.17.29 h1:CwGsupsXIlAFYuDVHv1nnK0wnxO0wZ/g1L8DSK/xiIw= +github.com/aws/aws-sdk-go-v2/credentials v1.17.29/go.mod h1:BPJ/yXV92ZVq6G8uYvbU0gSl8q94UB63nMT5ctNO38g= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 h1:yjwoSyDZF8Jth+mUk5lSPJCkMC0lMy6FaCD51jm6ayE= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12/go.mod h1:fuR57fAgMk7ot3WcNQfb6rSEn+SUffl7ri+aa8uKysI= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 h1:TNyt/+X43KJ9IJJMjKfa3bNTiZbUP7DeCxfbTROESwY= @@ -104,6 +108,8 @@ github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 h1:mimdLQkIX1zr8GIPY1ZtALdBQGx github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16/go.mod h1:YHk6owoSwrIsok+cAH9PENCOGoH5PU2EllX4vLtSrsY= github.com/aws/aws-sdk-go-v2/service/appconfigdata v1.16.4 h1:ggE2+kzdvXtLYp3lJBjQfRrCFTsrwt4HgyjrAmUTXB0= github.com/aws/aws-sdk-go-v2/service/appconfigdata v1.16.4/go.mod h1:5Gr7pLLSaOc79qkghPFURtmJ2/8vgmTQPU2tSm9LOgo= +github.com/aws/aws-sdk-go-v2/service/appconfigdata v1.16.5 h1:0L76ucgyltS8r2D9Z/G57eAZUNceiI1lNzEZwoxvX60= +github.com/aws/aws-sdk-go-v2/service/appconfigdata v1.16.5/go.mod h1:5Gr7pLLSaOc79qkghPFURtmJ2/8vgmTQPU2tSm9LOgo= github.com/aws/aws-sdk-go-v2/service/eks v1.48.2 h1:EFjJfHrl7/2qh/ZawUXtl9juOPAUUOTFDLOmov5KSgM= github.com/aws/aws-sdk-go-v2/service/eks v1.48.2/go.mod h1:fff5mmwLCVxyXCojYjPY34sUGvWtXCD325yRL5qHAVs= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 h1:KypMCbLPPHEmf9DgMGw51jMj77VfGPAN2Kv4cfhlfgI= @@ -116,14 +122,20 @@ github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 h1:jg16PhLPUiHIj github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16/go.mod h1:Uyk1zE1VVdsHSU7096h/rwnXDzOzYQVl+FNPhPw7ShY= github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0 h1:2QXGJvG19QwqXUvgcdoCOZPyLuvZf8LiXPCN4P53TdI= github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI= +github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1 h1:mx2ucgtv+MWzJesJY9Ig/8AFHgoE5FwLXwUVgW/FGdI= +github.com/aws/aws-sdk-go-v2/service/s3 v1.60.1/go.mod h1:BSPI0EfnYUuNHPS0uqIo5VrRwzie+Fp+YhQOUs16sKI= github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.5 h1:UDXu9dqpCZYonj7poM4kFISjzTdWI0v3WUusM+w+Gfc= github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.5/go.mod h1:5NPkI3RsTOhwz1CuG7VVSgJCm3CINKkoIaUbUZWQ67w= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.6 h1:3TZlWvCC813uhS1Z4fVTmBhg41OYUrgSlvXqIDDkurw= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.32.6/go.mod h1:5NPkI3RsTOhwz1CuG7VVSgJCm3CINKkoIaUbUZWQ67w= github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 h1:zCsFCKvbj25i7p1u94imVoO447I/sFv8qq+lGJhRN0c= github.com/aws/aws-sdk-go-v2/service/sso v1.22.5/go.mod h1:ZeDX1SnKsVlejeuz41GiajjZpRSWR7/42q/EyA/QEiM= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 h1:SKvPgvdvmiTWoi0GAJ7AsJfOz3ngVkD/ERbs5pUnHNI= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5/go.mod h1:20sz31hv/WsPa3HhU3hfrIet2kxM4Pe0r20eBZ20Tac= github.com/aws/aws-sdk-go-v2/service/sts v1.30.4 h1:iAckBT2OeEK/kBDyN/jDtpEExhjeeA/Im2q4X0rJZT8= github.com/aws/aws-sdk-go-v2/service/sts v1.30.4/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.5 h1:OMsEmCyz2i89XwRwPouAJvhj81wINh+4UK+k/0Yo/q8= +github.com/aws/aws-sdk-go-v2/service/sts v1.30.5/go.mod h1:vmSqFK+BVIwVpDAGZB3CoCXHzurt4qBE8lf+I/kRTh0= github.com/aws/smithy-go v1.20.4 h1:2HK1zBdPgRbjFOHlfeQZfpC4r72MOb9bZkiFwggKO+4= github.com/aws/smithy-go v1.20.4/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps= @@ -173,6 +185,7 @@ github.com/coreos/go-oidc/v3 v3.11.0 h1:Ia3MxdwpSw702YW0xgfmP1GVCMA9aEFWu12XUZ3/ github.com/coreos/go-oidc/v3 v3.11.0/go.mod h1:gE3LgjOgFoHi9a4ce4/tJczr0Ai2/BoDhf0r5lltWI0= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= +github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pqaw19uhpSCzhj44qo35pNgKFGqzDKkU= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= @@ -367,12 +380,16 @@ github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aN github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grafana/dskit v0.0.0-20240820081259-f96e399400b1 h1:D5AcH0HuwL2qQRoJZuUXarCGDQSUWTX0sanhmkJQPAs= github.com/grafana/dskit v0.0.0-20240820081259-f96e399400b1/go.mod h1:c4ASJAo1QFmXGydDzNed2o0+Fncx+x4YmQ1r9HfYU3c= +github.com/grafana/dskit v0.0.0-20240826073544-47b1b6311db3 h1:fc4ORkqFiLzuCRD2wGmMXsyDTOLkcl3QUqQwjtAlKcE= +github.com/grafana/dskit v0.0.0-20240826073544-47b1b6311db3/go.mod h1:wJbJeQ2ygiGuBKsur7BPPNe+3pSyHEDPtKa7IU3I8ZA= github.com/grafana/gomemcache v0.0.0-20240805133030-fdaf6a95408e h1:UlEET0InuoFautfaFp8lDrNF7rPHYXuBMrzwWx9XqFY= github.com/grafana/gomemcache v0.0.0-20240805133030-fdaf6a95408e/go.mod h1:IGRj8oOoxwJbHBYl1+OhS9UjQR0dv6SQOep7HqmtyFU= github.com/grafana/jsonparser v0.0.0-20240425183733-ea80629e1a32 h1:NznuPwItog+rwdVg8hAuGKP29ndRSzJAwhxKldkP8oQ= github.com/grafana/jsonparser v0.0.0-20240425183733-ea80629e1a32/go.mod h1:796sq+UcONnSlzA3RtlBZ+b/hrerkZXiEmO8oMjyRwY= github.com/grafana/loki/pkg/push v0.0.0-20240821155943-d43b2de1b4e0 h1:5Rsy2pqoLtdRtBeWb5/jAWhfziHGmwpJT6YBfQXSX4g= github.com/grafana/loki/pkg/push v0.0.0-20240821155943-d43b2de1b4e0/go.mod h1:lJEF/Wh5MYlmBem6tOYAFObkLsuikfrEf8Iy9AdMPiQ= +github.com/grafana/loki/pkg/push v0.0.0-20240822152437-246a1dfbe24a h1:jZ527OP6YyoxbdGzKcsgr1/EKhMMuv70qdG/fTbsl58= +github.com/grafana/loki/pkg/push v0.0.0-20240822152437-246a1dfbe24a/go.mod h1:lJEF/Wh5MYlmBem6tOYAFObkLsuikfrEf8Iy9AdMPiQ= github.com/grafana/loki/v3 v3.1.1 h1:qTVih7srptLmQQnWGD+pp93sYDnONy5S9sSt3mnZBa4= github.com/grafana/loki/v3 v3.1.1/go.mod h1:K/xPywBSTmi4laPLMg7FTFOhljjKxoT2oB0y5j8MNCQ= github.com/grafana/pyroscope-go v1.1.2 h1:7vCfdORYQMCxIzI3NlYAs3FcBP760+gWuYWOyiVyYx8= @@ -387,6 +404,8 @@ github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwn github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= github.com/hashicorp/consul/api v1.29.2 h1:aYyRn8EdE2mSfG14S1+L9Qkjtz8RzmaWh6AcNGRNwPw= github.com/hashicorp/consul/api v1.29.2/go.mod h1:0YObcaLNDSbtlgzIRtmRXI1ZkeuK0trCBxwZQ4MYnIk= +github.com/hashicorp/consul/api v1.29.3 h1:G5y7X38cKYoVkWCDhjPq3x0KjGpuykk6Rus00DHPDo4= +github.com/hashicorp/consul/api v1.29.3/go.mod h1:0YObcaLNDSbtlgzIRtmRXI1ZkeuK0trCBxwZQ4MYnIk= github.com/hashicorp/consul/proto-public v0.6.2 h1:+DA/3g/IiKlJZb88NBn0ZgXrxJp2NlvCZdEyl+qxvL0= github.com/hashicorp/consul/proto-public v0.6.2/go.mod h1:cXXbOg74KBNGajC+o8RlA502Esf0R9prcoJgiOX/2Tg= github.com/hashicorp/consul/sdk v0.16.1 h1:V8TxTnImoPD5cj0U9Spl0TUxcytjcbbJeADFF07KdHg= @@ -516,6 +535,8 @@ github.com/kyokomi/emoji/v2 v2.2.13 h1:GhTfQa67venUUvmleTNFnb+bi7S3aocF7ZCXU9fSO github.com/kyokomi/emoji/v2 v2.2.13/go.mod h1:JUcn42DTdsXJo1SWanHh4HKDEyPaR5CqkmoirZZP9qE= github.com/larksuite/oapi-sdk-go/v3 v3.3.1 h1:DLQQEgHUAGZB6RVlceB1f6A94O206exxW2RIMH+gMUc= github.com/larksuite/oapi-sdk-go/v3 v3.3.1/go.mod h1:ZEplY+kwuIrj/nqw5uSCINNATcH3KdxSN7y+UxYY5fI= +github.com/larksuite/oapi-sdk-go/v3 v3.3.2 h1:JIPqdkGX09gINmR6iYMr61Ar1/Bgo1kREfBVhhodb8o= +github.com/larksuite/oapi-sdk-go/v3 v3.3.2/go.mod h1:ZEplY+kwuIrj/nqw5uSCINNATcH3KdxSN7y+UxYY5fI= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= @@ -614,6 +635,8 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= +github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pires/go-proxyproto v0.7.0 h1:IukmRewDQFWC7kfnb66CSomk2q/seBuilHBYFwyq0Hs= @@ -639,6 +662,8 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.20.1 h1:IMJXHOD6eARkQpxo8KkhgEVFlBNm+nkrFUyGlIu7Na8= github.com/prometheus/client_golang v1.20.1/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_golang v1.20.2 h1:5ctymQzZlyOON1666svgwn3s6IKWgfbjsejTMiXIyjg= +github.com/prometheus/client_golang v1.20.2/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -804,12 +829,20 @@ go.mongodb.org/mongo-driver v1.16.1 h1:rIVLL3q0IHM39dvE+z2ulZLp9ENZKThVfuvN/IiN4 go.mongodb.org/mongo-driver v1.16.1/go.mod h1:oB6AhJQvFQL4LEHyXi6aJzQJtBiTQHiAd83l0GdFaiw= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= +go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= +go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= +go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= +go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= +go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= +go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -841,6 +874,8 @@ golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/exp v0.0.0-20240823005443-9b4947da3948 h1:kx6Ds3MlpiUHKj7syVnbp57++8WpuKPcR5yjLBjvLEA= +golang.org/x/exp v0.0.0-20240823005443-9b4947da3948/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -975,8 +1010,12 @@ google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto/googleapis/api v0.0.0-20240820151423-278611b39280 h1:YDFM9oOjiFhaMAVgbDxfxW+66nRrsvzQzJ51wp3OxC0= google.golang.org/genproto/googleapis/api v0.0.0-20240820151423-278611b39280/go.mod h1:fO8wJzT2zbQbAjbIoos1285VfEIYKDDY+Dt+WpTkh6g= +google.golang.org/genproto/googleapis/api v0.0.0-20240823204242-4ba0660f739c h1:e0zB268kOca6FbuJkYUGxfwG4DKFZG/8DLyv9Zv66cE= +google.golang.org/genproto/googleapis/api v0.0.0-20240823204242-4ba0660f739c/go.mod h1:fO8wJzT2zbQbAjbIoos1285VfEIYKDDY+Dt+WpTkh6g= google.golang.org/genproto/googleapis/rpc v0.0.0-20240820151423-278611b39280 h1:XQMA2e105XNlEZ8NRF0HqnUOZzP14sUSsgL09kpdNnU= google.golang.org/genproto/googleapis/rpc v0.0.0-20240820151423-278611b39280/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240823204242-4ba0660f739c h1:Kqjm4WpoWvwhMPcrAczoTyMySQmYa9Wy2iL6Con4zn8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240823204242-4ba0660f739c/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= @@ -1024,10 +1063,13 @@ k8s.io/apimachinery v0.31.0 h1:m9jOiSr3FoSSL5WO9bjm1n6B9KROYYgNZOb4tyZ1lBc= k8s.io/apimachinery v0.31.0/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= k8s.io/client-go v0.31.0 h1:QqEJzNjbN2Yv1H79SsS+SWnXkBgVu4Pj3CJQgbx0gI8= k8s.io/client-go v0.31.0/go.mod h1:Y9wvC76g4fLjmU0BA+rV+h2cncoadjvjjkkIGoTLcGU= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20240816214639-573285566f34 h1:/amS69DLm09mtbFtN3+LyygSFohnYGMseF8iv+2zulg= k8s.io/kube-openapi v0.0.0-20240816214639-573285566f34/go.mod h1:G0W3eI9gG219NHRq3h5uQaRBl4pj4ZpwzRP5ti8y770= +k8s.io/kube-openapi v0.0.0-20240822171749-76de80e0abd9 h1:y+4z/s0h3R97P/o/098DSjlpyNpHzGirNPlTL+GHdqY= +k8s.io/kube-openapi v0.0.0-20240822171749-76de80e0abd9/go.mod h1:s4yb9FXajAVNRnxSB5Ckpr/oq2LP4mKSMWeZDVppd30= k8s.io/utils v0.0.0-20240821151609-f90d01438635 h1:2wThSvJoW/Ncn9TmQEYXRnevZXi2duqHWf5OX9S3zjI= k8s.io/utils v0.0.0-20240821151609-f90d01438635/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= modernc.org/cc/v4 v4.21.4 h1:3Be/Rdo1fpr8GrQ7IVw9OHtplU4gWbb+wNgeoBMmGLQ= From 3d6566c8743992bc020ed7250c45a80dd7ea010d Mon Sep 17 00:00:00 2001 From: lwnmengjing Date: Mon, 26 Aug 2024 16:06:51 +0800 Subject: [PATCH 5/5] :sparkles: feat: support task k8s provider --- cmd/migrate/migration/system/1724396388009_migrate.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmd/migrate/migration/system/1724396388009_migrate.go b/cmd/migrate/migration/system/1724396388009_migrate.go index ceb9c0a..4183dde 100644 --- a/cmd/migrate/migration/system/1724396388009_migrate.go +++ b/cmd/migrate/migration/system/1724396388009_migrate.go @@ -1,11 +1,12 @@ package system import ( - "github.com/mss-boot-io/mss-boot-admin/models" "runtime" "github.com/mss-boot-io/mss-boot/pkg/migration" "gorm.io/gorm" + + "github.com/mss-boot-io/mss-boot-admin/models" ) func init() {