mirror of
https://github.com/arangodb/kube-arangodb.git
synced 2024-12-14 11:57:37 +00:00
[Feature] Extract GRPC Server (#1590)
This commit is contained in:
parent
e67f5a0f58
commit
61cdd68e89
194 changed files with 1295 additions and 745 deletions
|
@ -1,6 +1,7 @@
|
||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
## [master](https://github.com/arangodb/kube-arangodb/tree/master) (N/A)
|
## [master](https://github.com/arangodb/kube-arangodb/tree/master) (N/A)
|
||||||
|
- (Feature) Extract GRPC Server
|
||||||
|
|
||||||
## [1.2.37](https://github.com/arangodb/kube-arangodb/tree/1.2.37) (2024-01-22)
|
## [1.2.37](https://github.com/arangodb/kube-arangodb/tree/1.2.37) (2024-01-22)
|
||||||
- (Documentation) Improve documentation rendering for GitHub Pages
|
- (Documentation) Improve documentation rendering for GitHub Pages
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -192,7 +192,7 @@ func getDeploymentAndCredentials(ctx context.Context,
|
||||||
|
|
||||||
client, ok := kclient.GetDefaultFactory().Client()
|
client, ok := kclient.GetDefaultFactory().Client()
|
||||||
if !ok {
|
if !ok {
|
||||||
err = errors.Newf("Client not initialised")
|
err = errors.Errorf("Client not initialised")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -337,7 +337,7 @@ func getCACertificate(ctx context.Context, secrets secretv1.ReadInterface, name
|
||||||
func getDeployment(ctx context.Context, namespace, deplName string) (api.ArangoDeployment, error) {
|
func getDeployment(ctx context.Context, namespace, deplName string) (api.ArangoDeployment, error) {
|
||||||
client, ok := kclient.GetDefaultFactory().Client()
|
client, ok := kclient.GetDefaultFactory().Client()
|
||||||
if !ok {
|
if !ok {
|
||||||
return api.ArangoDeployment{}, errors.Newf("Client not initialised")
|
return api.ArangoDeployment{}, errors.Errorf("Client not initialised")
|
||||||
}
|
}
|
||||||
|
|
||||||
extCli := client.Arango()
|
extCli := client.Arango()
|
||||||
|
|
|
@ -33,7 +33,6 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
flag "github.com/spf13/pflag"
|
flag "github.com/spf13/pflag"
|
||||||
|
@ -59,7 +58,7 @@ import (
|
||||||
"github.com/arangodb/kube-arangodb/pkg/server"
|
"github.com/arangodb/kube-arangodb/pkg/server"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util"
|
"github.com/arangodb/kube-arangodb/pkg/util"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/constants"
|
"github.com/arangodb/kube-arangodb/pkg/util/constants"
|
||||||
utilsError "github.com/arangodb/kube-arangodb/pkg/util/errors"
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/globals"
|
"github.com/arangodb/kube-arangodb/pkg/util/globals"
|
||||||
operatorHTTP "github.com/arangodb/kube-arangodb/pkg/util/http"
|
operatorHTTP "github.com/arangodb/kube-arangodb/pkg/util/http"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
|
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
|
||||||
|
@ -437,7 +436,7 @@ func executeMain(cmd *cobra.Command, args []string) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Err(err).Fatal("Failed to create API server")
|
logger.Err(err).Fatal("Failed to create API server")
|
||||||
}
|
}
|
||||||
go utilsError.LogError(logger, "while running API server", apiServer.Run)
|
go errors.LogError(logger, "while running API server", apiServer.Run)
|
||||||
}
|
}
|
||||||
|
|
||||||
listenAddr := net.JoinHostPort(serverOptions.host, strconv.Itoa(serverOptions.port))
|
listenAddr := net.JoinHostPort(serverOptions.host, strconv.Itoa(serverOptions.port))
|
||||||
|
@ -486,7 +485,7 @@ func executeMain(cmd *cobra.Command, args []string) {
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
logger.Err(err).Fatal("Failed to create HTTP server")
|
logger.Err(err).Fatal("Failed to create HTTP server")
|
||||||
} else {
|
} else {
|
||||||
go utilsError.LogError(logger, "error while starting server", svr.Run)
|
go errors.LogError(logger, "error while starting server", svr.Run)
|
||||||
}
|
}
|
||||||
|
|
||||||
// startChaos(context.Background(), cfg.KubeCli, cfg.Namespace, chaosLevel)
|
// startChaos(context.Background(), cfg.KubeCli, cfg.Namespace, chaosLevel)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -28,11 +28,11 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"github.com/arangodb/kube-arangodb/pkg/crd"
|
"github.com/arangodb/kube-arangodb/pkg/crd"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/crd/crds"
|
"github.com/arangodb/kube-arangodb/pkg/crd/crds"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/kclient"
|
"github.com/arangodb/kube-arangodb/pkg/util/kclient"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -24,9 +24,10 @@ import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
const cmdVersionCheckInitContainersInvalidVersionExitCode = 11
|
const cmdVersionCheckInitContainersInvalidVersionExitCode = 11
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -30,7 +30,6 @@ import (
|
||||||
"path"
|
"path"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
@ -45,6 +44,7 @@ import (
|
||||||
"github.com/arangodb/kube-arangodb/pkg/deployment/resources"
|
"github.com/arangodb/kube-arangodb/pkg/deployment/resources"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util"
|
"github.com/arangodb/kube-arangodb/pkg/util"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/constants"
|
"github.com/arangodb/kube-arangodb/pkg/util/constants"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -21,7 +21,6 @@
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
@ -29,6 +28,7 @@ import (
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
|
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cmdLifecycleStartup = &cobra.Command{
|
var cmdLifecycleStartup = &cobra.Command{
|
||||||
|
|
|
@ -25,11 +25,8 @@ import (
|
||||||
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"google.golang.org/grpc"
|
|
||||||
|
|
||||||
pbShutdown "github.com/arangodb/kube-arangodb/pkg/api/shutdown/v1"
|
|
||||||
"github.com/arangodb/kube-arangodb/pkg/ml/storage"
|
"github.com/arangodb/kube-arangodb/pkg/ml/storage"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/probe"
|
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/shutdown"
|
"github.com/arangodb/kube-arangodb/pkg/util/shutdown"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/svc"
|
"github.com/arangodb/kube-arangodb/pkg/util/svc"
|
||||||
)
|
)
|
||||||
|
@ -53,7 +50,7 @@ var (
|
||||||
}
|
}
|
||||||
|
|
||||||
cmdMLStorageControllerOptions struct {
|
cmdMLStorageControllerOptions struct {
|
||||||
svc.GRPCConfig
|
Configuration svc.Configuration
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -62,8 +59,8 @@ func init() {
|
||||||
cmdMLStorage.AddCommand(cmdMLStorageS3)
|
cmdMLStorage.AddCommand(cmdMLStorageS3)
|
||||||
|
|
||||||
f := cmdMLStorageS3.PersistentFlags()
|
f := cmdMLStorageS3.PersistentFlags()
|
||||||
f.StringVar(&cmdMLStorageControllerOptions.ListenAddress, "controller.address", "", "Address the GRPC controller service will listen on (IP:port)")
|
f.StringVar(&cmdMLStorageControllerOptions.Configuration.Address, "controller.address", "", "Address the GRPC controller service will listen on (IP:port)")
|
||||||
f.StringVar(&cmdMLStorageS3Options.ListenAddress, "server.address", "", "Address the GRPC service will listen on (IP:port)")
|
f.StringVar(&cmdMLStorageS3Options.Configuration.Address, "server.address", "", "Address the GRPC service will listen on (IP:port)")
|
||||||
|
|
||||||
f.StringVar(&cmdMLStorageS3Options.S3.Endpoint, "s3.endpoint", "", "Endpoint of S3 API implementation")
|
f.StringVar(&cmdMLStorageS3Options.S3.Endpoint, "s3.endpoint", "", "Endpoint of S3 API implementation")
|
||||||
f.StringVar(&cmdMLStorageS3Options.S3.CACrtFile, "s3.ca-crt", "", "Path to file containing CA certificate to validate endpoint connection")
|
f.StringVar(&cmdMLStorageS3Options.S3.CACrtFile, "s3.ca-crt", "", "Path to file containing CA certificate to validate endpoint connection")
|
||||||
|
@ -84,16 +81,18 @@ func cmdMLStorageS3Run(cmd *cobra.Command, _ []string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func cmdMLStorageS3RunE(_ *cobra.Command) error {
|
func cmdMLStorageS3RunE(_ *cobra.Command) error {
|
||||||
|
health := svc.NewHealthService(cmdMLStorageControllerOptions.Configuration, svc.Readiness, shutdown.NewGlobalShutdownServer())
|
||||||
|
|
||||||
|
health.Start(shutdown.Context())
|
||||||
|
|
||||||
storageService, err := storage.NewService(shutdown.Context(), storage.StorageTypeS3Proxy, cmdMLStorageS3Options.ServiceConfig)
|
storageService, err := storage.NewService(shutdown.Context(), storage.StorageTypeS3Proxy, cmdMLStorageS3Options.ServiceConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
healthService := probe.NewHealthService()
|
svc := svc.NewService(cmdMLStorageS3Options.Configuration, storageService)
|
||||||
|
|
||||||
controllerService := svc.NewGRPC(cmdMLStorageControllerOptions.GRPCConfig, func(server *grpc.Server) {
|
svcRun := svc.StartWithHealth(shutdown.Context(), health)
|
||||||
pbShutdown.RegisterShutdownServer(server, shutdown.NewShutdownableShutdownServer())
|
|
||||||
healthService.Register(server)
|
return svcRun.Wait()
|
||||||
})
|
|
||||||
return svc.RunServices(shutdown.Context(), healthService, storageService, controllerService)
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -25,9 +25,10 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type cmdUUIDInputStruct struct {
|
type cmdUUIDInputStruct struct {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -78,7 +78,7 @@ func ReplaceSection(in, replace, section string) (string, error) {
|
||||||
|
|
||||||
endID := strings.Index(in, end)
|
endID := strings.Index(in, end)
|
||||||
if endID == -1 {
|
if endID == -1 {
|
||||||
return "", errors.Newf("END_INJECT sections is missing for section %s. Note that newline is required at the end and before tag", section)
|
return "", errors.Errorf("END_INJECT sections is missing for section %s. Note that newline is required at the end and before tag", section)
|
||||||
}
|
}
|
||||||
|
|
||||||
if strings.HasSuffix(replace, "\n\n") {
|
if strings.HasSuffix(replace, "\n\n") {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -53,7 +53,7 @@ func (t *table) AddRow(in map[Column]string) error {
|
||||||
|
|
||||||
for k, v := range in {
|
for k, v := range in {
|
||||||
if _, ok := t.columns.Get(k.ID()); !ok {
|
if _, ok := t.columns.Get(k.ID()); !ok {
|
||||||
return errors.Newf("Column not found")
|
return errors.Errorf("Column not found")
|
||||||
}
|
}
|
||||||
|
|
||||||
r[k.ID()] = v
|
r[k.ID()] = v
|
||||||
|
|
6
pkg/api/tls.go
generated
6
pkg/api/tls.go
generated
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -56,11 +56,11 @@ func loadOrSelfSignCertificate(cli typedCore.CoreV1Interface, cfg ServerConfig)
|
||||||
}
|
}
|
||||||
certBytes, found := s.Data[core.TLSCertKey]
|
certBytes, found := s.Data[core.TLSCertKey]
|
||||||
if !found {
|
if !found {
|
||||||
return "", "", errors.Newf("No %s found in secret %s", core.TLSCertKey, cfg.TLSSecretName)
|
return "", "", errors.Errorf("No %s found in secret %s", core.TLSCertKey, cfg.TLSSecretName)
|
||||||
}
|
}
|
||||||
keyBytes, found := s.Data[core.TLSPrivateKeyKey]
|
keyBytes, found := s.Data[core.TLSPrivateKeyKey]
|
||||||
if !found {
|
if !found {
|
||||||
return "", "", errors.Newf("No %s found in secret %s", core.TLSPrivateKeyKey, cfg.TLSSecretName)
|
return "", "", errors.Errorf("No %s found in secret %s", core.TLSPrivateKeyKey, cfg.TLSSecretName)
|
||||||
}
|
}
|
||||||
return string(certBytes), string(keyBytes), nil
|
return string(certBytes), string(keyBytes), nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -32,11 +32,11 @@ func (a *ArangoJob) Validate() error {
|
||||||
|
|
||||||
func (a *ArangoJobSpec) Validate() error {
|
func (a *ArangoJobSpec) Validate() error {
|
||||||
if a.ArangoDeploymentName == "" {
|
if a.ArangoDeploymentName == "" {
|
||||||
return errors.Newf("deployment name can not be empty")
|
return errors.Errorf("deployment name can not be empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
if a.JobTemplate == nil {
|
if a.JobTemplate == nil {
|
||||||
return errors.Newf("jobTemplate name can not be empty")
|
return errors.Errorf("jobTemplate name can not be empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -38,9 +38,9 @@ func (a *ArangoBackupPolicy) Validate() error {
|
||||||
|
|
||||||
func (a *ArangoBackupPolicySpec) Validate() error {
|
func (a *ArangoBackupPolicySpec) Validate() error {
|
||||||
if expr, err := cron.ParseStandard(a.Schedule); err != nil {
|
if expr, err := cron.ParseStandard(a.Schedule); err != nil {
|
||||||
return errors.Newf("error while parsing expr: %s", err.Error())
|
return errors.Errorf("error while parsing expr: %s", err.Error())
|
||||||
} else if expr.Next(time.Now()).IsZero() {
|
} else if expr.Next(time.Now()).IsZero() {
|
||||||
return errors.Newf("invalid schedule format")
|
return errors.Errorf("invalid schedule format")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -38,7 +38,7 @@ func (a *ArangoBackup) Validate() error {
|
||||||
|
|
||||||
func (a *ArangoBackupSpec) Validate() error {
|
func (a *ArangoBackupSpec) Validate() error {
|
||||||
if a.Deployment.Name == "" {
|
if a.Deployment.Name == "" {
|
||||||
return errors.Newf("deployment name can not be empty")
|
return errors.Errorf("deployment name can not be empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
if a.Download != nil {
|
if a.Download != nil {
|
||||||
|
@ -58,7 +58,7 @@ func (a *ArangoBackupSpec) Validate() error {
|
||||||
|
|
||||||
func (a *ArangoBackupSpecOperation) Validate() error {
|
func (a *ArangoBackupSpecOperation) Validate() error {
|
||||||
if a.RepositoryURL == "" {
|
if a.RepositoryURL == "" {
|
||||||
return errors.Newf("RepositoryURL can not be empty")
|
return errors.Errorf("RepositoryURL can not be empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -66,7 +66,7 @@ func (a *ArangoBackupSpecOperation) Validate() error {
|
||||||
|
|
||||||
func (a *ArangoBackupSpecDownload) Validate() error {
|
func (a *ArangoBackupSpecDownload) Validate() error {
|
||||||
if a.ID == "" {
|
if a.ID == "" {
|
||||||
return errors.Newf("ID can not be empty")
|
return errors.Errorf("ID can not be empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
return a.ArangoBackupSpecOperation.Validate()
|
return a.ArangoBackupSpecOperation.Validate()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -23,10 +23,10 @@ package v1
|
||||||
import (
|
import (
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
core "k8s.io/api/core/v1"
|
core "k8s.io/api/core/v1"
|
||||||
|
|
||||||
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
|
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ArangoDeploymentArchitecture defines the list of supported architectures.
|
// ArangoDeploymentArchitecture defines the list of supported architectures.
|
||||||
|
|
|
@ -92,12 +92,12 @@ func (b *BootstrapSpec) Validate() error {
|
||||||
for username, secretname := range b.PasswordSecretNames {
|
for username, secretname := range b.PasswordSecretNames {
|
||||||
// Remove this restriction as soon as we can bootstrap databases
|
// Remove this restriction as soon as we can bootstrap databases
|
||||||
if username != UserNameRoot {
|
if username != UserNameRoot {
|
||||||
return errors.Newf("only username `root` allowed in passwordSecretNames")
|
return errors.Errorf("only username `root` allowed in passwordSecretNames")
|
||||||
}
|
}
|
||||||
|
|
||||||
if secretname.IsNone() {
|
if secretname.IsNone() {
|
||||||
if username != UserNameRoot {
|
if username != UserNameRoot {
|
||||||
return errors.Newf("magic value None not allowed for %s", username)
|
return errors.Errorf("magic value None not allowed for %s", username)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := shared.ValidateResourceName(string(secretname)); err != nil {
|
if err := shared.ValidateResourceName(string(secretname)); err != nil {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -21,9 +21,8 @@
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/pkg/errors"
|
|
||||||
|
|
||||||
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
|
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ArangoClusterSynchronizationSpec struct {
|
type ArangoClusterSynchronizationSpec struct {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -23,8 +23,9 @@ package v1
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_ACS_KubeConfigSpec(t *testing.T) {
|
func Test_ACS_KubeConfigSpec(t *testing.T) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -40,7 +40,7 @@ func (d DeploymentImageDiscoveryModeSpec) Validate() error {
|
||||||
case DeploymentImageDiscoveryDirectMode:
|
case DeploymentImageDiscoveryDirectMode:
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
return errors.Newf("mode %s is not supported", d)
|
return errors.Errorf("mode %s is not supported", d)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -100,12 +100,12 @@ func (s ExternalAccessSpec) Validate() error {
|
||||||
if s.AdvertisedEndpoint != nil {
|
if s.AdvertisedEndpoint != nil {
|
||||||
ep := s.GetAdvertisedEndpoint()
|
ep := s.GetAdvertisedEndpoint()
|
||||||
if _, err := url.Parse(ep); err != nil {
|
if _, err := url.Parse(ep); err != nil {
|
||||||
return errors.WithStack(errors.Newf("Failed to parse advertised endpoint '%s': %s", ep, err))
|
return errors.WithStack(errors.Errorf("Failed to parse advertised endpoint '%s': %s", ep, err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, x := range s.LoadBalancerSourceRanges {
|
for _, x := range s.LoadBalancerSourceRanges {
|
||||||
if _, _, err := net.ParseCIDR(x); err != nil {
|
if _, _, err := net.ParseCIDR(x); err != nil {
|
||||||
return errors.WithStack(errors.Newf("Failed to parse loadbalancer source range '%s': %s", x, err))
|
return errors.WithStack(errors.Errorf("Failed to parse loadbalancer source range '%s': %s", x, err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -183,7 +183,7 @@ func (l MemberStatusList) SelectMemberToRemove(selectors ...MemberToRemoveSelect
|
||||||
if member, ok := l.ElementByID(m); ok {
|
if member, ok := l.ElementByID(m); ok {
|
||||||
return member, nil
|
return member, nil
|
||||||
} else {
|
} else {
|
||||||
return MemberStatus{}, errors.Newf("Unable to find member with id %s", m)
|
return MemberStatus{}, errors.Errorf("Unable to find member with id %s", m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -47,7 +47,7 @@ func (s *ServerGroupIndexMethod) Validate() error {
|
||||||
case ServerGroupIndexMethodRandom, ServerGroupIndexMethodOrdered:
|
case ServerGroupIndexMethodRandom, ServerGroupIndexMethodOrdered:
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
return errors.Newf("Unknown IndexMethod %s", v)
|
return errors.Errorf("Unknown IndexMethod %s", v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ func IsReservedServerGroupInitContainerName(name string) bool {
|
||||||
|
|
||||||
func ValidateServerGroupInitContainerName(name string) error {
|
func ValidateServerGroupInitContainerName(name string) error {
|
||||||
if IsReservedServerGroupInitContainerName(name) {
|
if IsReservedServerGroupInitContainerName(name) {
|
||||||
return errors.Newf("InitContainer name %s is restricted", name)
|
return errors.Errorf("InitContainer name %s is restricted", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
return sharedApi.AsKubernetesResourceName(&name).Validate()
|
return sharedApi.AsKubernetesResourceName(&name).Validate()
|
||||||
|
@ -73,7 +73,7 @@ func (s *ServerGroupInitContainerMode) Validate() error {
|
||||||
case ServerGroupInitContainerIgnoreMode, ServerGroupInitContainerUpdateMode:
|
case ServerGroupInitContainerIgnoreMode, ServerGroupInitContainerUpdateMode:
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
return errors.Newf("Unknown serverGroupInitContainerMode %s", v)
|
return errors.Errorf("Unknown serverGroupInitContainerMode %s", v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -563,14 +563,14 @@ func (s *ServerGroupSpec) validateVolumes() error {
|
||||||
|
|
||||||
for _, mount := range s.VolumeMounts {
|
for _, mount := range s.VolumeMounts {
|
||||||
if _, ok := volumes[mount.Name]; !ok {
|
if _, ok := volumes[mount.Name]; !ok {
|
||||||
return errors.Newf("Volume %s is not defined, but required by mount", mount.Name)
|
return errors.Errorf("Volume %s is not defined, but required by mount", mount.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, container := range s.InitContainers.GetContainers() {
|
for _, container := range s.InitContainers.GetContainers() {
|
||||||
for _, mount := range container.VolumeMounts {
|
for _, mount := range container.VolumeMounts {
|
||||||
if _, ok := volumes[mount.Name]; !ok {
|
if _, ok := volumes[mount.Name]; !ok {
|
||||||
return errors.Newf("Volume %s is not defined, but required by mount in init container %s", mount.Name, container.Name)
|
return errors.Errorf("Volume %s is not defined, but required by mount in init container %s", mount.Name, container.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -578,7 +578,7 @@ func (s *ServerGroupSpec) validateVolumes() error {
|
||||||
for _, container := range s.Sidecars {
|
for _, container := range s.Sidecars {
|
||||||
for _, mount := range s.VolumeMounts {
|
for _, mount := range s.VolumeMounts {
|
||||||
if _, ok := volumes[mount.Name]; !ok {
|
if _, ok := volumes[mount.Name]; !ok {
|
||||||
return errors.Newf("Volume %s is not defined, but required by mount in sidecar %s", mount.Name, container.Name)
|
return errors.Errorf("Volume %s is not defined, but required by mount in sidecar %s", mount.Name, container.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
package v1
|
package v1
|
||||||
|
|
||||||
import "github.com/pkg/errors"
|
import "github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
|
|
||||||
// ServerGroupPortProtocol define supported protocols of listeners
|
// ServerGroupPortProtocol define supported protocols of listeners
|
||||||
type ServerGroupPortProtocol string
|
type ServerGroupPortProtocol string
|
||||||
|
|
|
@ -87,14 +87,14 @@ func (s ServerGroupSpecVolumes) Validate() error {
|
||||||
|
|
||||||
for volumeName, count := range mappedVolumes {
|
for volumeName, count := range mappedVolumes {
|
||||||
if IsRestrictedVolumeName(volumeName) {
|
if IsRestrictedVolumeName(volumeName) {
|
||||||
validationErrors = append(validationErrors, errors.Newf("volume with name %s is restricted", volumeName))
|
validationErrors = append(validationErrors, errors.Errorf("volume with name %s is restricted", volumeName))
|
||||||
}
|
}
|
||||||
|
|
||||||
if count == 1 {
|
if count == 1 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
validationErrors = append(validationErrors, errors.Newf("volume with name %s defined more than once: %d", volumeName, count))
|
validationErrors = append(validationErrors, errors.Errorf("volume with name %s defined more than once: %d", volumeName, count))
|
||||||
}
|
}
|
||||||
|
|
||||||
return shared.WithErrors(validationErrors...)
|
return shared.WithErrors(validationErrors...)
|
||||||
|
@ -202,11 +202,11 @@ func (s *ServerGroupSpecVolume) validate() error {
|
||||||
count := s.notNilFields()
|
count := s.notNilFields()
|
||||||
|
|
||||||
if count == 0 {
|
if count == 0 {
|
||||||
return errors.Newf("at least one option need to be defined: secret, configMap or emptyDir")
|
return errors.Errorf("at least one option need to be defined: secret, configMap or emptyDir")
|
||||||
}
|
}
|
||||||
|
|
||||||
if count > 1 {
|
if count > 1 {
|
||||||
return errors.Newf("only one option can be defined: secret, configMap or emptyDir")
|
return errors.Errorf("only one option can be defined: secret, configMap or emptyDir")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -77,19 +77,19 @@ func (s SyncExternalAccessSpec) Validate() error {
|
||||||
}
|
}
|
||||||
for _, ep := range s.MasterEndpoint {
|
for _, ep := range s.MasterEndpoint {
|
||||||
if u, err := url.Parse(ep); err != nil {
|
if u, err := url.Parse(ep); err != nil {
|
||||||
return errors.WithStack(errors.Newf("Failed to parse master endpoint '%s': %s", ep, err))
|
return errors.WithStack(errors.Errorf("Failed to parse master endpoint '%s': %s", ep, err))
|
||||||
} else {
|
} else {
|
||||||
if u.Scheme != "http" && u.Scheme != "https" {
|
if u.Scheme != "http" && u.Scheme != "https" {
|
||||||
return errors.WithStack(errors.Newf("Invalid scheme '%s' in master endpoint '%s'", u.Scheme, ep))
|
return errors.WithStack(errors.Errorf("Invalid scheme '%s' in master endpoint '%s'", u.Scheme, ep))
|
||||||
}
|
}
|
||||||
if u.Host == "" {
|
if u.Host == "" {
|
||||||
return errors.WithStack(errors.Newf("Missing host in master endpoint '%s'", ep))
|
return errors.WithStack(errors.Errorf("Missing host in master endpoint '%s'", ep))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, name := range s.AccessPackageSecretNames {
|
for _, name := range s.AccessPackageSecretNames {
|
||||||
if err := shared.ValidateResourceName(name); err != nil {
|
if err := shared.ValidateResourceName(name); err != nil {
|
||||||
return errors.WithStack(errors.Newf("Invalid name '%s' in accessPackageSecretNames: %s", name, err))
|
return errors.WithStack(errors.Errorf("Invalid name '%s' in accessPackageSecretNames: %s", name, err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -40,7 +40,7 @@ func (s TLSSNISpec) Validate() error {
|
||||||
|
|
||||||
for _, value := range values {
|
for _, value := range values {
|
||||||
if _, exists := mapped[value]; exists {
|
if _, exists := mapped[value]; exists {
|
||||||
return errors.Newf("sni for host %s is already defined", value)
|
return errors.Errorf("sni for host %s is already defined", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mark value as existing
|
// Mark value as existing
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -125,7 +125,7 @@ func (s TLSSpec) GetParsedAltNames() (dnsNames, ipAddresses, emailAddresses []st
|
||||||
} else if validation.IsValidEmailAddress(name) {
|
} else if validation.IsValidEmailAddress(name) {
|
||||||
emailAddresses = append(emailAddresses, name)
|
emailAddresses = append(emailAddresses, name)
|
||||||
} else {
|
} else {
|
||||||
return nil, nil, nil, errors.WithStack(errors.Newf("'%s' is not a valid alternate name", name))
|
return nil, nil, nil, errors.WithStack(errors.Errorf("'%s' is not a valid alternate name", name))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return dnsNames, ipAddresses, emailAddresses, nil
|
return dnsNames, ipAddresses, emailAddresses, nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -26,7 +26,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ json.Marshaler = Version{}
|
var _ json.Marshaler = Version{}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -23,10 +23,10 @@ package v2alpha1
|
||||||
import (
|
import (
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
core "k8s.io/api/core/v1"
|
core "k8s.io/api/core/v1"
|
||||||
|
|
||||||
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
|
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ArangoDeploymentArchitecture defines the list of supported architectures.
|
// ArangoDeploymentArchitecture defines the list of supported architectures.
|
||||||
|
|
|
@ -92,12 +92,12 @@ func (b *BootstrapSpec) Validate() error {
|
||||||
for username, secretname := range b.PasswordSecretNames {
|
for username, secretname := range b.PasswordSecretNames {
|
||||||
// Remove this restriction as soon as we can bootstrap databases
|
// Remove this restriction as soon as we can bootstrap databases
|
||||||
if username != UserNameRoot {
|
if username != UserNameRoot {
|
||||||
return errors.Newf("only username `root` allowed in passwordSecretNames")
|
return errors.Errorf("only username `root` allowed in passwordSecretNames")
|
||||||
}
|
}
|
||||||
|
|
||||||
if secretname.IsNone() {
|
if secretname.IsNone() {
|
||||||
if username != UserNameRoot {
|
if username != UserNameRoot {
|
||||||
return errors.Newf("magic value None not allowed for %s", username)
|
return errors.Errorf("magic value None not allowed for %s", username)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := shared.ValidateResourceName(string(secretname)); err != nil {
|
if err := shared.ValidateResourceName(string(secretname)); err != nil {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -21,9 +21,8 @@
|
||||||
package v2alpha1
|
package v2alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/pkg/errors"
|
|
||||||
|
|
||||||
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
|
shared "github.com/arangodb/kube-arangodb/pkg/apis/shared"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ArangoClusterSynchronizationSpec struct {
|
type ArangoClusterSynchronizationSpec struct {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -23,8 +23,9 @@ package v2alpha1
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_ACS_KubeConfigSpec(t *testing.T) {
|
func Test_ACS_KubeConfigSpec(t *testing.T) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -40,7 +40,7 @@ func (d DeploymentImageDiscoveryModeSpec) Validate() error {
|
||||||
case DeploymentImageDiscoveryDirectMode:
|
case DeploymentImageDiscoveryDirectMode:
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
return errors.Newf("mode %s is not supported", d)
|
return errors.Errorf("mode %s is not supported", d)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -100,12 +100,12 @@ func (s ExternalAccessSpec) Validate() error {
|
||||||
if s.AdvertisedEndpoint != nil {
|
if s.AdvertisedEndpoint != nil {
|
||||||
ep := s.GetAdvertisedEndpoint()
|
ep := s.GetAdvertisedEndpoint()
|
||||||
if _, err := url.Parse(ep); err != nil {
|
if _, err := url.Parse(ep); err != nil {
|
||||||
return errors.WithStack(errors.Newf("Failed to parse advertised endpoint '%s': %s", ep, err))
|
return errors.WithStack(errors.Errorf("Failed to parse advertised endpoint '%s': %s", ep, err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, x := range s.LoadBalancerSourceRanges {
|
for _, x := range s.LoadBalancerSourceRanges {
|
||||||
if _, _, err := net.ParseCIDR(x); err != nil {
|
if _, _, err := net.ParseCIDR(x); err != nil {
|
||||||
return errors.WithStack(errors.Newf("Failed to parse loadbalancer source range '%s': %s", x, err))
|
return errors.WithStack(errors.Errorf("Failed to parse loadbalancer source range '%s': %s", x, err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -183,7 +183,7 @@ func (l MemberStatusList) SelectMemberToRemove(selectors ...MemberToRemoveSelect
|
||||||
if member, ok := l.ElementByID(m); ok {
|
if member, ok := l.ElementByID(m); ok {
|
||||||
return member, nil
|
return member, nil
|
||||||
} else {
|
} else {
|
||||||
return MemberStatus{}, errors.Newf("Unable to find member with id %s", m)
|
return MemberStatus{}, errors.Errorf("Unable to find member with id %s", m)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -47,7 +47,7 @@ func (s *ServerGroupIndexMethod) Validate() error {
|
||||||
case ServerGroupIndexMethodRandom, ServerGroupIndexMethodOrdered:
|
case ServerGroupIndexMethodRandom, ServerGroupIndexMethodOrdered:
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
return errors.Newf("Unknown IndexMethod %s", v)
|
return errors.Errorf("Unknown IndexMethod %s", v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ func IsReservedServerGroupInitContainerName(name string) bool {
|
||||||
|
|
||||||
func ValidateServerGroupInitContainerName(name string) error {
|
func ValidateServerGroupInitContainerName(name string) error {
|
||||||
if IsReservedServerGroupInitContainerName(name) {
|
if IsReservedServerGroupInitContainerName(name) {
|
||||||
return errors.Newf("InitContainer name %s is restricted", name)
|
return errors.Errorf("InitContainer name %s is restricted", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
return sharedApi.AsKubernetesResourceName(&name).Validate()
|
return sharedApi.AsKubernetesResourceName(&name).Validate()
|
||||||
|
@ -73,7 +73,7 @@ func (s *ServerGroupInitContainerMode) Validate() error {
|
||||||
case ServerGroupInitContainerIgnoreMode, ServerGroupInitContainerUpdateMode:
|
case ServerGroupInitContainerIgnoreMode, ServerGroupInitContainerUpdateMode:
|
||||||
return nil
|
return nil
|
||||||
default:
|
default:
|
||||||
return errors.Newf("Unknown serverGroupInitContainerMode %s", v)
|
return errors.Errorf("Unknown serverGroupInitContainerMode %s", v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -563,14 +563,14 @@ func (s *ServerGroupSpec) validateVolumes() error {
|
||||||
|
|
||||||
for _, mount := range s.VolumeMounts {
|
for _, mount := range s.VolumeMounts {
|
||||||
if _, ok := volumes[mount.Name]; !ok {
|
if _, ok := volumes[mount.Name]; !ok {
|
||||||
return errors.Newf("Volume %s is not defined, but required by mount", mount.Name)
|
return errors.Errorf("Volume %s is not defined, but required by mount", mount.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, container := range s.InitContainers.GetContainers() {
|
for _, container := range s.InitContainers.GetContainers() {
|
||||||
for _, mount := range container.VolumeMounts {
|
for _, mount := range container.VolumeMounts {
|
||||||
if _, ok := volumes[mount.Name]; !ok {
|
if _, ok := volumes[mount.Name]; !ok {
|
||||||
return errors.Newf("Volume %s is not defined, but required by mount in init container %s", mount.Name, container.Name)
|
return errors.Errorf("Volume %s is not defined, but required by mount in init container %s", mount.Name, container.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -578,7 +578,7 @@ func (s *ServerGroupSpec) validateVolumes() error {
|
||||||
for _, container := range s.Sidecars {
|
for _, container := range s.Sidecars {
|
||||||
for _, mount := range s.VolumeMounts {
|
for _, mount := range s.VolumeMounts {
|
||||||
if _, ok := volumes[mount.Name]; !ok {
|
if _, ok := volumes[mount.Name]; !ok {
|
||||||
return errors.Newf("Volume %s is not defined, but required by mount in sidecar %s", mount.Name, container.Name)
|
return errors.Errorf("Volume %s is not defined, but required by mount in sidecar %s", mount.Name, container.Name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
package v2alpha1
|
package v2alpha1
|
||||||
|
|
||||||
import "github.com/pkg/errors"
|
import "github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
|
|
||||||
// ServerGroupPortProtocol define supported protocols of listeners
|
// ServerGroupPortProtocol define supported protocols of listeners
|
||||||
type ServerGroupPortProtocol string
|
type ServerGroupPortProtocol string
|
||||||
|
|
|
@ -87,14 +87,14 @@ func (s ServerGroupSpecVolumes) Validate() error {
|
||||||
|
|
||||||
for volumeName, count := range mappedVolumes {
|
for volumeName, count := range mappedVolumes {
|
||||||
if IsRestrictedVolumeName(volumeName) {
|
if IsRestrictedVolumeName(volumeName) {
|
||||||
validationErrors = append(validationErrors, errors.Newf("volume with name %s is restricted", volumeName))
|
validationErrors = append(validationErrors, errors.Errorf("volume with name %s is restricted", volumeName))
|
||||||
}
|
}
|
||||||
|
|
||||||
if count == 1 {
|
if count == 1 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
validationErrors = append(validationErrors, errors.Newf("volume with name %s defined more than once: %d", volumeName, count))
|
validationErrors = append(validationErrors, errors.Errorf("volume with name %s defined more than once: %d", volumeName, count))
|
||||||
}
|
}
|
||||||
|
|
||||||
return shared.WithErrors(validationErrors...)
|
return shared.WithErrors(validationErrors...)
|
||||||
|
@ -202,11 +202,11 @@ func (s *ServerGroupSpecVolume) validate() error {
|
||||||
count := s.notNilFields()
|
count := s.notNilFields()
|
||||||
|
|
||||||
if count == 0 {
|
if count == 0 {
|
||||||
return errors.Newf("at least one option need to be defined: secret, configMap or emptyDir")
|
return errors.Errorf("at least one option need to be defined: secret, configMap or emptyDir")
|
||||||
}
|
}
|
||||||
|
|
||||||
if count > 1 {
|
if count > 1 {
|
||||||
return errors.Newf("only one option can be defined: secret, configMap or emptyDir")
|
return errors.Errorf("only one option can be defined: secret, configMap or emptyDir")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -77,19 +77,19 @@ func (s SyncExternalAccessSpec) Validate() error {
|
||||||
}
|
}
|
||||||
for _, ep := range s.MasterEndpoint {
|
for _, ep := range s.MasterEndpoint {
|
||||||
if u, err := url.Parse(ep); err != nil {
|
if u, err := url.Parse(ep); err != nil {
|
||||||
return errors.WithStack(errors.Newf("Failed to parse master endpoint '%s': %s", ep, err))
|
return errors.WithStack(errors.Errorf("Failed to parse master endpoint '%s': %s", ep, err))
|
||||||
} else {
|
} else {
|
||||||
if u.Scheme != "http" && u.Scheme != "https" {
|
if u.Scheme != "http" && u.Scheme != "https" {
|
||||||
return errors.WithStack(errors.Newf("Invalid scheme '%s' in master endpoint '%s'", u.Scheme, ep))
|
return errors.WithStack(errors.Errorf("Invalid scheme '%s' in master endpoint '%s'", u.Scheme, ep))
|
||||||
}
|
}
|
||||||
if u.Host == "" {
|
if u.Host == "" {
|
||||||
return errors.WithStack(errors.Newf("Missing host in master endpoint '%s'", ep))
|
return errors.WithStack(errors.Errorf("Missing host in master endpoint '%s'", ep))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, name := range s.AccessPackageSecretNames {
|
for _, name := range s.AccessPackageSecretNames {
|
||||||
if err := shared.ValidateResourceName(name); err != nil {
|
if err := shared.ValidateResourceName(name); err != nil {
|
||||||
return errors.WithStack(errors.Newf("Invalid name '%s' in accessPackageSecretNames: %s", name, err))
|
return errors.WithStack(errors.Errorf("Invalid name '%s' in accessPackageSecretNames: %s", name, err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -40,7 +40,7 @@ func (s TLSSNISpec) Validate() error {
|
||||||
|
|
||||||
for _, value := range values {
|
for _, value := range values {
|
||||||
if _, exists := mapped[value]; exists {
|
if _, exists := mapped[value]; exists {
|
||||||
return errors.Newf("sni for host %s is already defined", value)
|
return errors.Errorf("sni for host %s is already defined", value)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mark value as existing
|
// Mark value as existing
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -125,7 +125,7 @@ func (s TLSSpec) GetParsedAltNames() (dnsNames, ipAddresses, emailAddresses []st
|
||||||
} else if validation.IsValidEmailAddress(name) {
|
} else if validation.IsValidEmailAddress(name) {
|
||||||
emailAddresses = append(emailAddresses, name)
|
emailAddresses = append(emailAddresses, name)
|
||||||
} else {
|
} else {
|
||||||
return nil, nil, nil, errors.WithStack(errors.Newf("'%s' is not a valid alternate name", name))
|
return nil, nil, nil, errors.WithStack(errors.Errorf("'%s' is not a valid alternate name", name))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return dnsNames, ipAddresses, emailAddresses, nil
|
return dnsNames, ipAddresses, emailAddresses, nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -26,7 +26,7 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ json.Marshaler = Version{}
|
var _ json.Marshaler = Version{}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -35,16 +35,16 @@ type ArangoMLBatchJobSpec struct {
|
||||||
|
|
||||||
func (a *ArangoMLBatchJobSpec) Validate() error {
|
func (a *ArangoMLBatchJobSpec) Validate() error {
|
||||||
if a == nil {
|
if a == nil {
|
||||||
return errors.Newf("Spec is not defined")
|
return errors.Errorf("Spec is not defined")
|
||||||
}
|
}
|
||||||
|
|
||||||
var err []error
|
var err []error
|
||||||
if a.JobSpec == nil {
|
if a.JobSpec == nil {
|
||||||
return shared.PrefixResourceErrors("spec", errors.Newf("JobSpec is not defined"))
|
return shared.PrefixResourceErrors("spec", errors.Errorf("JobSpec is not defined"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(a.JobSpec.Template.Spec.Containers) != 1 {
|
if len(a.JobSpec.Template.Spec.Containers) != 1 {
|
||||||
err = append(err, shared.PrefixResourceErrors("spec.template.spec.containers", errors.Newf("Exactly one container is required")))
|
err = append(err, shared.PrefixResourceErrors("spec.template.spec.containers", errors.Errorf("Exactly one container is required")))
|
||||||
}
|
}
|
||||||
|
|
||||||
return shared.WithErrors(err...)
|
return shared.WithErrors(err...)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -35,17 +35,17 @@ type ArangoMLCronJobSpec struct {
|
||||||
|
|
||||||
func (a *ArangoMLCronJobSpec) Validate() error {
|
func (a *ArangoMLCronJobSpec) Validate() error {
|
||||||
if a == nil {
|
if a == nil {
|
||||||
return errors.Newf("Spec is not defined")
|
return errors.Errorf("Spec is not defined")
|
||||||
}
|
}
|
||||||
|
|
||||||
var err []error
|
var err []error
|
||||||
if a.CronJobSpec == nil {
|
if a.CronJobSpec == nil {
|
||||||
return shared.PrefixResourceErrors("spec", errors.Newf("CronJobSpec is not defined"))
|
return shared.PrefixResourceErrors("spec", errors.Errorf("CronJobSpec is not defined"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(a.CronJobSpec.JobTemplate.Spec.Template.Spec.Containers) != 1 {
|
if len(a.CronJobSpec.JobTemplate.Spec.Template.Spec.Containers) != 1 {
|
||||||
err = append(err, shared.PrefixResourceErrors("spec.jobTemplate.spec.template.spec.containers",
|
err = append(err, shared.PrefixResourceErrors("spec.jobTemplate.spec.template.spec.containers",
|
||||||
errors.Newf("Exactly one container is required")))
|
errors.Errorf("Exactly one container is required")))
|
||||||
}
|
}
|
||||||
|
|
||||||
return shared.WithErrors(err...)
|
return shared.WithErrors(err...)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -147,7 +147,7 @@ func (s *ArangoMLExtensionSpecDeployment) Validate() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.GetReplicas() < 0 || s.GetReplicas() > 10 {
|
if s.GetReplicas() < 0 || s.GetReplicas() > 10 {
|
||||||
errs = append(errs, shared.PrefixResourceErrors("replicas", errors.Newf("out of range [0, 10]")))
|
errs = append(errs, shared.PrefixResourceErrors("replicas", errors.Errorf("out of range [0, 10]")))
|
||||||
}
|
}
|
||||||
|
|
||||||
var usedPorts util.List[int32]
|
var usedPorts util.List[int32]
|
||||||
|
@ -161,7 +161,7 @@ func (s *ArangoMLExtensionSpecDeployment) Validate() error {
|
||||||
port := component.GetPort(GetArangoMLExtensionSpecDeploymentComponentDefaultPort(prefix))
|
port := component.GetPort(GetArangoMLExtensionSpecDeploymentComponentDefaultPort(prefix))
|
||||||
|
|
||||||
if port == 0 {
|
if port == 0 {
|
||||||
errs = append(errs, shared.PrefixResourceErrors(prefix, errors.Newf("port not defined")))
|
errs = append(errs, shared.PrefixResourceErrors(prefix, errors.Errorf("port not defined")))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -169,7 +169,7 @@ func (s *ArangoMLExtensionSpecDeployment) Validate() error {
|
||||||
return i == port
|
return i == port
|
||||||
})
|
})
|
||||||
if duplicateCount > 0 {
|
if duplicateCount > 0 {
|
||||||
errs = append(errs, shared.PrefixResourceErrors(prefix, errors.Newf("port %d already specified for other component", port)))
|
errs = append(errs, shared.PrefixResourceErrors(prefix, errors.Errorf("port %d already specified for other component", port)))
|
||||||
} else {
|
} else {
|
||||||
usedPorts.Append(port)
|
usedPorts.Append(port)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -93,7 +93,7 @@ func (a *ArangoMLExtensionSpecMetadataServiceLocal) Validate() error {
|
||||||
// If Nil then we use default
|
// If Nil then we use default
|
||||||
|
|
||||||
return shared.WithErrors(
|
return shared.WithErrors(
|
||||||
shared.PrefixResourceErrors("arangoPipeDatabase", util.BoolSwitch(a.GetArangoPipeDatabase() != ArangoMLExtensionSpecMetadataServiceLocalDefaultArangoPipeDatabase, errors.Newf("Database name is hardcoded"), nil)),
|
shared.PrefixResourceErrors("arangoPipeDatabase", util.BoolSwitch(a.GetArangoPipeDatabase() != ArangoMLExtensionSpecMetadataServiceLocalDefaultArangoPipeDatabase, errors.Errorf("Database name is hardcoded"), nil)),
|
||||||
shared.PrefixResourceErrors("arangoMLFeatureStore", util.BoolSwitch(a.GetArangoMLFeatureStoreDatabase() != ArangoMLExtensionSpecMetadataServiceLocalDefaultArangoMLFeatureStoreDatabase, errors.Newf("Database name is hardcoded"), nil)),
|
shared.PrefixResourceErrors("arangoMLFeatureStore", util.BoolSwitch(a.GetArangoMLFeatureStoreDatabase() != ArangoMLExtensionSpecMetadataServiceLocalDefaultArangoMLFeatureStoreDatabase, errors.Errorf("Database name is hardcoded"), nil)),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -39,11 +39,11 @@ func (s *ArangoMLStorageSpecBackend) GetS3() *ArangoMLStorageSpecBackendS3 {
|
||||||
|
|
||||||
func (s *ArangoMLStorageSpecBackend) Validate() error {
|
func (s *ArangoMLStorageSpecBackend) Validate() error {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
return errors.Newf("Backend is not specified")
|
return errors.Errorf("Backend is not specified")
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.S3 == nil {
|
if s.S3 == nil {
|
||||||
return errors.Newf("At least one backend needs to be defined")
|
return errors.Errorf("At least one backend needs to be defined")
|
||||||
}
|
}
|
||||||
|
|
||||||
return shared.WithErrors(shared.PrefixResourceError("s3", s.S3.Validate()))
|
return shared.WithErrors(shared.PrefixResourceError("s3", s.S3.Validate()))
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -61,7 +61,7 @@ func (s *ArangoMLStorageSpecBackendS3) Validate() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := url.Parse(s.GetEndpoint()); err != nil {
|
if _, err := url.Parse(s.GetEndpoint()); err != nil {
|
||||||
errs = append(errs, shared.PrefixResourceErrors("endpoint", errors.Newf("invalid URL: %s", err.Error())))
|
errs = append(errs, shared.PrefixResourceErrors("endpoint", errors.Errorf("invalid URL: %s", err.Error())))
|
||||||
}
|
}
|
||||||
|
|
||||||
errs = append(errs, shared.PrefixResourceErrors("credentialsSecret", s.GetCredentialsSecret().Validate()))
|
errs = append(errs, shared.PrefixResourceErrors("credentialsSecret", s.GetCredentialsSecret().Validate()))
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -39,7 +39,7 @@ func (s *ArangoMLStorageSpecMode) GetSidecar() *ArangoMLStorageSpecModeSidecar {
|
||||||
|
|
||||||
func (s *ArangoMLStorageSpecMode) Validate() error {
|
func (s *ArangoMLStorageSpecMode) Validate() error {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
return errors.Newf("Mode is not defined")
|
return errors.Errorf("Mode is not defined")
|
||||||
}
|
}
|
||||||
return shared.WithErrors(shared.PrefixResourceError("sidecar", s.Sidecar.Validate()))
|
return shared.WithErrors(shared.PrefixResourceError("sidecar", s.Sidecar.Validate()))
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,11 +55,11 @@ func (s *ArangoMLStorageSpecModeSidecar) Validate() error {
|
||||||
var err []error
|
var err []error
|
||||||
|
|
||||||
if s.GetListenPort() < 1 {
|
if s.GetListenPort() < 1 {
|
||||||
err = append(err, shared.PrefixResourceErrors("listenPort", errors.Newf("must be positive")))
|
err = append(err, shared.PrefixResourceErrors("listenPort", errors.Errorf("must be positive")))
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.GetControllerListenPort() < 1 {
|
if s.GetControllerListenPort() < 1 {
|
||||||
err = append(err, shared.PrefixResourceErrors("controllerListenPort", errors.Newf("must be positive")))
|
err = append(err, shared.PrefixResourceErrors("controllerListenPort", errors.Errorf("must be positive")))
|
||||||
}
|
}
|
||||||
|
|
||||||
err = append(err, s.GetContainerTemplate().Validate())
|
err = append(err, s.GetContainerTemplate().Validate())
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -67,13 +67,13 @@ func (n *KubernetesResourceName) String() string {
|
||||||
// Validate validate if name is valid kubernetes DNS_LABEL
|
// Validate validate if name is valid kubernetes DNS_LABEL
|
||||||
func (n *KubernetesResourceName) Validate() error {
|
func (n *KubernetesResourceName) Validate() error {
|
||||||
if n == nil {
|
if n == nil {
|
||||||
return errors.Newf("cannot be undefined")
|
return errors.Errorf("cannot be undefined")
|
||||||
}
|
}
|
||||||
|
|
||||||
name := *n
|
name := *n
|
||||||
|
|
||||||
if name == "" {
|
if name == "" {
|
||||||
return errors.Newf("cannot be empty")
|
return errors.Errorf("cannot be empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := IsValidName(name.String()); err != nil {
|
if err := IsValidName(name.String()); err != nil {
|
||||||
|
@ -90,11 +90,11 @@ func (n *KubernetesResourceName) Immutable(o *KubernetesResourceName) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if o == nil || n == nil {
|
if o == nil || n == nil {
|
||||||
return errors.Newf("field is immutable")
|
return errors.Errorf("field is immutable")
|
||||||
}
|
}
|
||||||
|
|
||||||
if *o != *n {
|
if *o != *n {
|
||||||
return errors.Newf("field is immutable")
|
return errors.Errorf("field is immutable")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -104,7 +104,7 @@ func (n *KubernetesResourceName) Immutable(o *KubernetesResourceName) error {
|
||||||
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
|
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
|
||||||
func IsValidName(name string) error {
|
func IsValidName(name string) error {
|
||||||
if res := validation.IsDNS1123Label(name); len(res) > 0 {
|
if res := validation.IsDNS1123Label(name); len(res) > 0 {
|
||||||
return errors.Newf("Validation of label failed: %s", strings.Join(res, ", "))
|
return errors.Errorf("Validation of label failed: %s", strings.Join(res, ", "))
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -112,7 +112,7 @@ func IsValidName(name string) error {
|
||||||
|
|
||||||
func IsValidDomain(name string) error {
|
func IsValidDomain(name string) error {
|
||||||
if res := validation.IsDNS1123Subdomain(name); len(res) > 0 {
|
if res := validation.IsDNS1123Subdomain(name); len(res) > 0 {
|
||||||
return errors.Newf("validation of domain failed: %s", strings.Join(res, ", "))
|
return errors.Errorf("validation of domain failed: %s", strings.Join(res, ", "))
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -40,12 +40,12 @@ var (
|
||||||
// See https://kubernetes.io/docs/concepts/overview/working-with-objects/names/
|
// See https://kubernetes.io/docs/concepts/overview/working-with-objects/names/
|
||||||
func ValidateResourceName(name string) error {
|
func ValidateResourceName(name string) error {
|
||||||
if len(name) > 253 {
|
if len(name) > 253 {
|
||||||
return errors.WithStack(errors.Newf("Name '%s' is too long", name))
|
return errors.WithStack(errors.Errorf("Name '%s' is too long", name))
|
||||||
}
|
}
|
||||||
if resourceNameRE.MatchString(name) {
|
if resourceNameRE.MatchString(name) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return errors.WithStack(errors.Newf("Name '%s' is not a valid resource name", name))
|
return errors.WithStack(errors.Errorf("Name '%s' is not a valid resource name", name))
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidateOptionalResourceName validates a kubernetes resource name.
|
// ValidateOptionalResourceName validates a kubernetes resource name.
|
||||||
|
@ -73,7 +73,7 @@ func ValidatePullPolicy(in core.PullPolicy) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return errors.Newf("Unknown pull policy: '%s'", string(in))
|
return errors.Errorf("Unknown pull policy: '%s'", string(in))
|
||||||
}
|
}
|
||||||
|
|
||||||
type ValidateInterface interface {
|
type ValidateInterface interface {
|
||||||
|
@ -106,7 +106,7 @@ func ValidateRequired[T interface{}](in *T, validator func(T) error) error {
|
||||||
return validator(*in)
|
return validator(*in)
|
||||||
}
|
}
|
||||||
|
|
||||||
return errors.Newf("should be not nil")
|
return errors.Errorf("should be not nil")
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidateList validates all elements on the list
|
// ValidateList validates all elements on the list
|
||||||
|
@ -123,7 +123,7 @@ func ValidateList[T interface{}](in []T, validator func(T) error) error {
|
||||||
// ValidateImage Validates if provided image is valid
|
// ValidateImage Validates if provided image is valid
|
||||||
func ValidateImage(image string) error {
|
func ValidateImage(image string) error {
|
||||||
if image == "" {
|
if image == "" {
|
||||||
return errors.Newf("Image should be not empty")
|
return errors.Errorf("Image should be not empty")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -137,7 +137,7 @@ func ValidateAnyNotNil[T any](msg string, obj ...*T) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return errors.Newf(msg)
|
return errors.Errorf(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidateServiceType checks that service type is supported
|
// ValidateServiceType checks that service type is supported
|
||||||
|
@ -149,5 +149,5 @@ func ValidateServiceType(st core.ServiceType) error {
|
||||||
core.ServiceTypeExternalName:
|
core.ServiceTypeExternalName:
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return errors.Newf("Unsupported service type %s", st)
|
return errors.Errorf("Unsupported service type %s", st)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -56,7 +56,7 @@ func (s StorageClassSpec) Validate() error {
|
||||||
switch r := s.GetReclaimPolicy(); r {
|
switch r := s.GetReclaimPolicy(); r {
|
||||||
case core.PersistentVolumeReclaimRetain, core.PersistentVolumeReclaimDelete:
|
case core.PersistentVolumeReclaimRetain, core.PersistentVolumeReclaimDelete:
|
||||||
default:
|
default:
|
||||||
return errors.Newf("Unsupported ReclaimPolicy: %s", r)
|
return errors.Errorf("Unsupported ReclaimPolicy: %s", r)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -57,7 +57,7 @@ func registerCRD(getter crdDefinitionGetter, defaultOpts crds.CRDOptions) error
|
||||||
|
|
||||||
def := getter(nil)
|
def := getter(nil)
|
||||||
if _, ok := registeredCRDs[def.CRD.GetName()]; ok {
|
if _, ok := registeredCRDs[def.CRD.GetName()]; ok {
|
||||||
return errors.Newf("CRD %s already exists", def.CRD.GetName())
|
return errors.Errorf("CRD %s already exists", def.CRD.GetName())
|
||||||
}
|
}
|
||||||
registeredCRDs[def.CRD.GetName()] = crdRegistration{
|
registeredCRDs[def.CRD.GetName()] = crdRegistration{
|
||||||
getter: getter,
|
getter: getter,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -167,7 +167,7 @@ func Generate(cmd *cobra.Command, out io.Writer, factories ...shared.Factory) er
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(fileErrors) > 0 || len(factoryErrors) > 0 {
|
if len(fileErrors) > 0 || len(factoryErrors) > 0 {
|
||||||
return errors.Newf("Error while receiving data")
|
return errors.Errorf("Error while receiving data")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -49,7 +49,7 @@ func agencyDump(logger zerolog.Logger, files chan<- shared.File) error {
|
||||||
|
|
||||||
k, ok := kclient.GetDefaultFactory().Client()
|
k, ok := kclient.GetDefaultFactory().Client()
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.Newf("Client is not initialised")
|
return errors.Errorf("Client is not initialised")
|
||||||
}
|
}
|
||||||
|
|
||||||
deployments, err := listArangoDeployments(k.Arango())()
|
deployments, err := listArangoDeployments(k.Arango())()
|
||||||
|
@ -100,7 +100,7 @@ func discoverExecFunc() (ArangoOperatorExecFunc, error) {
|
||||||
|
|
||||||
k, ok := kclient.GetDefaultFactory().Client()
|
k, ok := kclient.GetDefaultFactory().Client()
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.Newf("Client is not initialised")
|
return nil, errors.Errorf("Client is not initialised")
|
||||||
}
|
}
|
||||||
|
|
||||||
pods, err := listPods(k.Kubernetes())()
|
pods, err := listPods(k.Kubernetes())()
|
||||||
|
@ -131,7 +131,7 @@ func discoverExecFunc() (ArangoOperatorExecFunc, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if id == "" {
|
if id == "" {
|
||||||
return nil, errors.Newf("Unable to find Operator pod")
|
return nil, errors.Errorf("Unable to find Operator pod")
|
||||||
}
|
}
|
||||||
|
|
||||||
return func(args ...string) ([]byte, []byte, error) {
|
return func(args ...string) ([]byte, []byte, error) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -56,7 +56,7 @@ func listArangoDeployments(client arangoClient.Interface) func() ([]*api.ArangoD
|
||||||
func deployments(logger zerolog.Logger, files chan<- shared.File) error {
|
func deployments(logger zerolog.Logger, files chan<- shared.File) error {
|
||||||
k, ok := kclient.GetDefaultFactory().Client()
|
k, ok := kclient.GetDefaultFactory().Client()
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.Newf("Client is not initialised")
|
return errors.Errorf("Client is not initialised")
|
||||||
}
|
}
|
||||||
|
|
||||||
deploymentList, err := listArangoDeployments(k.Arango())()
|
deploymentList, err := listArangoDeployments(k.Arango())()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -35,7 +35,7 @@ func ML() shared.Factory {
|
||||||
func ml(logger zerolog.Logger, files chan<- shared.File) error {
|
func ml(logger zerolog.Logger, files chan<- shared.File) error {
|
||||||
k, ok := kclient.GetDefaultFactory().Client()
|
k, ok := kclient.GetDefaultFactory().Client()
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.Newf("Client is not initialised")
|
return errors.Errorf("Client is not initialised")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := mlExtensions(logger, files, k); err != nil {
|
if err := mlExtensions(logger, files, k); err != nil {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -54,7 +54,7 @@ func listEvents(client kubernetes.Interface) func() ([]*core.Event, error) {
|
||||||
func events(logger zerolog.Logger, files chan<- shared.File) error {
|
func events(logger zerolog.Logger, files chan<- shared.File) error {
|
||||||
k, ok := kclient.GetDefaultFactory().Client()
|
k, ok := kclient.GetDefaultFactory().Client()
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.Newf("Client is not initialised")
|
return errors.Errorf("Client is not initialised")
|
||||||
}
|
}
|
||||||
|
|
||||||
files <- shared.NewYAMLFile("kubernetes/events.yaml", listEvents(k.Kubernetes()))
|
files <- shared.NewYAMLFile("kubernetes/events.yaml", listEvents(k.Kubernetes()))
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -56,7 +56,7 @@ func listPods(client kubernetes.Interface) func() ([]*core.Pod, error) {
|
||||||
func pods(logger zerolog.Logger, files chan<- shared.File) error {
|
func pods(logger zerolog.Logger, files chan<- shared.File) error {
|
||||||
k, ok := kclient.GetDefaultFactory().Client()
|
k, ok := kclient.GetDefaultFactory().Client()
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.Newf("Client is not initialised")
|
return errors.Errorf("Client is not initialised")
|
||||||
}
|
}
|
||||||
|
|
||||||
pods, err := listPods(k.Kubernetes())()
|
pods, err := listPods(k.Kubernetes())()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -54,7 +54,7 @@ func listSecrets(client kubernetes.Interface) func() ([]*core.Secret, error) {
|
||||||
func secrets(logger zerolog.Logger, files chan<- shared.File) error {
|
func secrets(logger zerolog.Logger, files chan<- shared.File) error {
|
||||||
k, ok := kclient.GetDefaultFactory().Client()
|
k, ok := kclient.GetDefaultFactory().Client()
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.Newf("Client is not initialised")
|
return errors.Errorf("Client is not initialised")
|
||||||
}
|
}
|
||||||
|
|
||||||
files <- shared.NewYAMLFile("kubernetes/secrets.yaml", listSecrets(k.Kubernetes()))
|
files <- shared.NewYAMLFile("kubernetes/secrets.yaml", listSecrets(k.Kubernetes()))
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -56,7 +56,7 @@ func listServices(client kubernetes.Interface) func() ([]*core.Service, error) {
|
||||||
func services(logger zerolog.Logger, files chan<- shared.File) error {
|
func services(logger zerolog.Logger, files chan<- shared.File) error {
|
||||||
k, ok := kclient.GetDefaultFactory().Client()
|
k, ok := kclient.GetDefaultFactory().Client()
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.Newf("Client is not initialised")
|
return errors.Errorf("Client is not initialised")
|
||||||
}
|
}
|
||||||
|
|
||||||
services, err := listServices(k.Kubernetes())()
|
services, err := listServices(k.Kubernetes())()
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -93,17 +93,17 @@ func (h health) Healthy() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
if h.election[h.leaderID] != h.agencySize {
|
if h.election[h.leaderID] != h.agencySize {
|
||||||
return errors.Newf("Not all agents are in quorum")
|
return errors.Errorf("Not all agents are in quorum")
|
||||||
}
|
}
|
||||||
|
|
||||||
index := h.commitIndexes[h.leaderID]
|
index := h.commitIndexes[h.leaderID]
|
||||||
if index == 0 {
|
if index == 0 {
|
||||||
return errors.Newf("Agency CommitIndex is zero")
|
return errors.Errorf("Agency CommitIndex is zero")
|
||||||
}
|
}
|
||||||
|
|
||||||
for k, v := range h.commitIndexes {
|
for k, v := range h.commitIndexes {
|
||||||
if v != index {
|
if v != index {
|
||||||
return errors.Newf("Agent %s is behind in CommitIndex", k)
|
return errors.Errorf("Agent %s is behind in CommitIndex", k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,17 +112,17 @@ func (h health) Healthy() error {
|
||||||
|
|
||||||
func (h health) Serving() error {
|
func (h health) Serving() error {
|
||||||
if h.agencySize == 0 {
|
if h.agencySize == 0 {
|
||||||
return errors.Newf("Empty agents list")
|
return errors.Errorf("Empty agents list")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(h.election) == 0 {
|
if len(h.election) == 0 {
|
||||||
return errors.Newf("No Leader")
|
return errors.Errorf("No Leader")
|
||||||
} else if len(h.election) > 1 {
|
} else if len(h.election) > 1 {
|
||||||
return errors.Newf("Multiple leaders")
|
return errors.Errorf("Multiple leaders")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(h.leaders) <= h.agencySize/2 {
|
if len(h.leaders) <= h.agencySize/2 {
|
||||||
return errors.Newf("Quorum is not present")
|
return errors.Errorf("Quorum is not present")
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -342,7 +342,7 @@ func (c *cache) reload(ctx context.Context, size int, clients Connections) (*sta
|
||||||
|
|
||||||
data, index, ok := c.loader.State()
|
data, index, ok := c.loader.State()
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, 0, errors.Newf("State is invalid after reload")
|
return nil, 0, errors.Errorf("State is invalid after reload")
|
||||||
}
|
}
|
||||||
|
|
||||||
return data, index, nil
|
return data, index, nil
|
||||||
|
@ -441,5 +441,5 @@ func (c *cache) getLeader(ctx context.Context, size int, clients Connections) (c
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, h, errors.Newf("Unable to find agent")
|
return nil, h, errors.Errorf("Unable to find agent")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -36,7 +36,7 @@ func GetAgencyConfig(ctx context.Context, connection conn.Connection) (*Config,
|
||||||
}
|
}
|
||||||
|
|
||||||
if code != http.StatusOK {
|
if code != http.StatusOK {
|
||||||
return nil, errors.Newf("Unknown response code %d", code)
|
return nil, errors.Errorf("Unknown response code %d", code)
|
||||||
}
|
}
|
||||||
|
|
||||||
return resp, nil
|
return resp, nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -38,15 +38,15 @@ func GetAgencyState[T interface{}](ctx context.Context, connection conn.Connecti
|
||||||
}
|
}
|
||||||
|
|
||||||
if code != http.StatusOK {
|
if code != http.StatusOK {
|
||||||
return def, errors.Newf("Unknown response code %d", code)
|
return def, errors.Errorf("Unknown response code %d", code)
|
||||||
}
|
}
|
||||||
|
|
||||||
if resp == nil {
|
if resp == nil {
|
||||||
return def, errors.Newf("Missing response body")
|
return def, errors.Errorf("Missing response body")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(*resp) != 1 {
|
if len(*resp) != 1 {
|
||||||
return def, errors.Newf("Invalid response size")
|
return def, errors.Errorf("Invalid response size")
|
||||||
}
|
}
|
||||||
|
|
||||||
return (*resp)[0], nil
|
return (*resp)[0], nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -23,8 +23,9 @@ package state
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
"k8s.io/apimachinery/pkg/util/intstr"
|
"k8s.io/apimachinery/pkg/util/intstr"
|
||||||
|
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -66,7 +66,7 @@ func (s *Timestamp) Time() (time.Time, bool) {
|
||||||
|
|
||||||
func (s *Timestamp) UnmarshalJSON(bytes []byte) error {
|
func (s *Timestamp) UnmarshalJSON(bytes []byte) error {
|
||||||
if s == nil {
|
if s == nil {
|
||||||
return errors.Newf("Object is nil")
|
return errors.Errorf("Object is nil")
|
||||||
}
|
}
|
||||||
|
|
||||||
var t string
|
var t string
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -184,7 +184,7 @@ func (cc *cache) GetAgency(_ context.Context, agencyIDs ...string) (agency.Agenc
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(dnsNames) == 0 {
|
if len(dnsNames) == 0 {
|
||||||
return nil, errors.Newf("There is no DNS Name")
|
return nil, errors.Errorf("There is no DNS Name")
|
||||||
}
|
}
|
||||||
|
|
||||||
c, err := cc.factory.Agency(dnsNames...)
|
c, err := cc.factory.Agency(dnsNames...)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -146,7 +146,7 @@ func (d *Deployment) UpdateMember(ctx context.Context, member api.MemberStatus)
|
||||||
status := d.GetStatus()
|
status := d.GetStatus()
|
||||||
_, group, found := status.Members.ElementByID(member.ID)
|
_, group, found := status.Members.ElementByID(member.ID)
|
||||||
if !found {
|
if !found {
|
||||||
return errors.WithStack(errors.Newf("Member %s not found", member.ID))
|
return errors.WithStack(errors.Errorf("Member %s not found", member.ID))
|
||||||
}
|
}
|
||||||
if err := status.Members.Update(member, group); err != nil {
|
if err := status.Members.Update(member, group); err != nil {
|
||||||
return errors.WithStack(err)
|
return errors.WithStack(err)
|
||||||
|
@ -252,7 +252,7 @@ func (d *Deployment) getAuth() (driver.Authentication, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if !d.GetCachedStatus().Initialised() {
|
if !d.GetCachedStatus().Initialised() {
|
||||||
return nil, errors.Newf("Cache is not yet started")
|
return nil, errors.Errorf("Cache is not yet started")
|
||||||
}
|
}
|
||||||
|
|
||||||
var secret string
|
var secret string
|
||||||
|
@ -269,7 +269,7 @@ func (d *Deployment) getAuth() (driver.Authentication, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if !found {
|
if !found {
|
||||||
return nil, errors.Newf("JWT Secret is invalid")
|
return nil, errors.Errorf("JWT Secret is invalid")
|
||||||
}
|
}
|
||||||
|
|
||||||
jwt, err := jwt.CreateArangodJwtAuthorizationHeader(secret, "kube-arangodb")
|
jwt, err := jwt.CreateArangodJwtAuthorizationHeader(secret, "kube-arangodb")
|
||||||
|
@ -676,11 +676,11 @@ func (d *Deployment) WithMemberStatusUpdateErr(ctx context.Context, id string, g
|
||||||
return d.WithStatusUpdateErr(ctx, func(s *api.DeploymentStatus) (bool, error) {
|
return d.WithStatusUpdateErr(ctx, func(s *api.DeploymentStatus) (bool, error) {
|
||||||
m, g, ok := s.Members.ElementByID(id)
|
m, g, ok := s.Members.ElementByID(id)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, errors.Newf("Member %s not found", id)
|
return false, errors.Errorf("Member %s not found", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
if g != group {
|
if g != group {
|
||||||
return false, errors.Newf("Invalid group for %s. Wanted %s, found %s", id, group.AsRole(), g.AsRole())
|
return false, errors.Errorf("Invalid group for %s. Wanted %s, found %s", id, group.AsRole(), g.AsRole())
|
||||||
}
|
}
|
||||||
|
|
||||||
changed, err := action(&m)
|
changed, err := action(&m)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -204,7 +204,7 @@ func (d *Deployment) RefreshAgencyCache(ctx context.Context) (uint64, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0, errors.Newf("Agency not yet established")
|
return 0, errors.Errorf("Agency not yet established")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *Deployment) SetAgencyMaintenanceMode(ctx context.Context, enabled bool) error {
|
func (d *Deployment) SetAgencyMaintenanceMode(ctx context.Context, enabled bool) error {
|
||||||
|
@ -484,7 +484,7 @@ func (d *Deployment) acceptNewSpec(ctx context.Context, depl *api.ArangoDeployme
|
||||||
}
|
}
|
||||||
|
|
||||||
// We have immutable fields, throw an error and proceed
|
// We have immutable fields, throw an error and proceed
|
||||||
return true, false, errors.Newf("Immutable fields cannot be changed: %s", strings.Join(fields, ", "))
|
return true, false, errors.Errorf("Immutable fields cannot be changed: %s", strings.Join(fields, ", "))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update accepted spec
|
// Update accepted spec
|
||||||
|
@ -632,7 +632,7 @@ func (d *Deployment) applyPatch(ctx context.Context, p ...patch.Item) error {
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.log.Err(err).Debug("failed to patch ArangoDeployment")
|
d.log.Err(err).Debug("failed to patch ArangoDeployment")
|
||||||
return errors.WithStack(errors.Newf("failed to patch ArangoDeployment: %v", err))
|
return errors.WithStack(errors.Errorf("failed to patch ArangoDeployment: %v", err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -279,7 +279,7 @@ func (d *Deployment) inspectDeploymentWithError(ctx context.Context, lastInterva
|
||||||
|
|
||||||
// Is the deployment in a good state?
|
// Is the deployment in a good state?
|
||||||
if status.Conditions.IsTrue(api.ConditionTypeSecretsChanged) {
|
if status.Conditions.IsTrue(api.ConditionTypeSecretsChanged) {
|
||||||
return minInspectionInterval, errors.Newf("Secrets changed")
|
return minInspectionInterval, errors.Errorf("Secrets changed")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure we have image info
|
// Ensure we have image info
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -258,7 +258,7 @@ func (s *stateInspector) GetMemberClient(id string) (driver.Client, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, errors.Newf("failed to get ArangoDB member client: %s", id)
|
return nil, errors.Errorf("failed to get ArangoDB member client: %s", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetMemberSyncClient returns member client to a server.
|
// GetMemberSyncClient returns member client to a server.
|
||||||
|
@ -274,7 +274,7 @@ func (s *stateInspector) GetMemberSyncClient(id string) (client.API, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, errors.Newf("failed to get ArangoSync member client: %s", id)
|
return nil, errors.Errorf("failed to get ArangoSync member client: %s", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *stateInspector) MemberState(id string) (State, bool) {
|
func (s *stateInspector) MemberState(id string) (State, bool) {
|
||||||
|
@ -325,7 +325,7 @@ func (s State) GetDatabaseClient() (driver.Client, error) {
|
||||||
return nil, s.NotReachableErr
|
return nil, s.NotReachableErr
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, errors.Newf("ArangoDB is not reachable")
|
return nil, errors.Errorf("ArangoDB is not reachable")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s State) IsReachable() bool {
|
func (s State) IsReachable() bool {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -54,7 +54,7 @@ func (d *Deployment) createAgencyMapping(ctx context.Context) error {
|
||||||
agents := status.Members.Agents
|
agents := status.Members.Agents
|
||||||
|
|
||||||
if len(agents) > *spec.Agents.Count {
|
if len(agents) > *spec.Agents.Count {
|
||||||
return errors.Newf("Agency size is bigger than requested size")
|
return errors.Errorf("Agency size is bigger than requested size")
|
||||||
}
|
}
|
||||||
|
|
||||||
c := api.DeploymentStatusAgencySize(*spec.Agents.Count)
|
c := api.DeploymentStatusAgencySize(*spec.Agents.Count)
|
||||||
|
@ -211,6 +211,6 @@ func (d *Deployment) renderMember(spec api.DeploymentSpec, status *api.Deploymen
|
||||||
Architecture: &arch,
|
Architecture: &arch,
|
||||||
}, nil
|
}, nil
|
||||||
default:
|
default:
|
||||||
return nil, errors.WithStack(errors.Newf("Unknown server group %d", group))
|
return nil, errors.WithStack(errors.Errorf("Unknown server group %d", group))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -85,16 +85,16 @@ func GetEncryptionKey(ctx context.Context, secrets secretv1.ReadInterface, name
|
||||||
|
|
||||||
func GetEncryptionKeyFromSecret(keyfile *core.Secret) (string, []byte, error) {
|
func GetEncryptionKeyFromSecret(keyfile *core.Secret) (string, []byte, error) {
|
||||||
if len(keyfile.Data) == 0 {
|
if len(keyfile.Data) == 0 {
|
||||||
return "", nil, errors.Newf("Current encryption key is not valid - missing data section")
|
return "", nil, errors.Errorf("Current encryption key is not valid - missing data section")
|
||||||
}
|
}
|
||||||
|
|
||||||
d, ok := keyfile.Data[constants.SecretEncryptionKey]
|
d, ok := keyfile.Data[constants.SecretEncryptionKey]
|
||||||
if !ok {
|
if !ok {
|
||||||
return "", nil, errors.Newf("Current encryption key is not valid - missing field")
|
return "", nil, errors.Errorf("Current encryption key is not valid - missing field")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(d) != 32 {
|
if len(d) != 32 {
|
||||||
return "", nil, errors.Newf("Current encryption key is not valid")
|
return "", nil, errors.Errorf("Current encryption key is not valid")
|
||||||
}
|
}
|
||||||
|
|
||||||
sha := fmt.Sprintf("%0x", sha256.Sum256(d))
|
sha := fmt.Sprintf("%0x", sha256.Sum256(d))
|
||||||
|
@ -170,7 +170,7 @@ func (e encryption) Verify(i Input, cachedStatus interfaces.Inspector) error {
|
||||||
|
|
||||||
secret, exists := cachedStatus.Secret().V1().GetSimple(i.Deployment.RocksDB.Encryption.GetKeySecretName())
|
secret, exists := cachedStatus.Secret().V1().GetSimple(i.Deployment.RocksDB.Encryption.GetKeySecretName())
|
||||||
if !exists {
|
if !exists {
|
||||||
return errors.Newf("Encryption key secret does not exist %s", i.Deployment.RocksDB.Encryption.GetKeySecretName())
|
return errors.Errorf("Encryption key secret does not exist %s", i.Deployment.RocksDB.Encryption.GetKeySecretName())
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := k8sutil.ValidateEncryptionKeyFromSecret(secret); err != nil {
|
if err := k8sutil.ValidateEncryptionKeyFromSecret(secret); err != nil {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -102,7 +102,7 @@ func (e jwt) Verify(i Input, cachedStatus interfaces.Inspector) error {
|
||||||
if !VersionHasJWTSecretKeyfolder(i.Version, i.Enterprise) {
|
if !VersionHasJWTSecretKeyfolder(i.Version, i.Enterprise) {
|
||||||
secret, exists := cachedStatus.Secret().V1().GetSimple(i.Deployment.Authentication.GetJWTSecretName())
|
secret, exists := cachedStatus.Secret().V1().GetSimple(i.Deployment.Authentication.GetJWTSecretName())
|
||||||
if !exists {
|
if !exists {
|
||||||
return errors.Newf("Secret for JWT token is missing %s", i.Deployment.Authentication.GetJWTSecretName())
|
return errors.Errorf("Secret for JWT token is missing %s", i.Deployment.Authentication.GetJWTSecretName())
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := k8sutil.ValidateTokenFromSecret(secret); err != nil {
|
if err := k8sutil.ValidateTokenFromSecret(secret); err != nil {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -81,12 +81,12 @@ func (s sni) Verify(i Input, cachedStatus interfaces.Inspector) error {
|
||||||
for _, secret := range util.SortKeys(i.Deployment.TLS.GetSNI().Mapping) {
|
for _, secret := range util.SortKeys(i.Deployment.TLS.GetSNI().Mapping) {
|
||||||
kubeSecret, exists := cachedStatus.Secret().V1().GetSimple(secret)
|
kubeSecret, exists := cachedStatus.Secret().V1().GetSimple(secret)
|
||||||
if !exists {
|
if !exists {
|
||||||
return errors.Newf("SNI Secret not found %s", secret)
|
return errors.Errorf("SNI Secret not found %s", secret)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, ok := kubeSecret.Data[constants.SecretTLSKeyfile]
|
_, ok := kubeSecret.Data[constants.SecretTLSKeyfile]
|
||||||
if !ok {
|
if !ok {
|
||||||
return errors.Newf("Unable to find secret key %s/%s for SNI", secret, constants.SecretTLSKeyfile)
|
return errors.Errorf("Unable to find secret key %s/%s for SNI", secret, constants.SecretTLSKeyfile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -34,7 +34,7 @@ func GenerateMemberEndpoint(services service.Inspector, apiObject meta.Object, s
|
||||||
memberName := member.ArangoMemberName(apiObject.GetName(), group)
|
memberName := member.ArangoMemberName(apiObject.GetName(), group)
|
||||||
svc, ok := services.Service().V1().GetSimple(memberName)
|
svc, ok := services.Service().V1().GetSimple(memberName)
|
||||||
if !ok {
|
if !ok {
|
||||||
return "", errors.Newf("Service %s not found", memberName)
|
return "", errors.Errorf("Service %s not found", memberName)
|
||||||
}
|
}
|
||||||
|
|
||||||
return GenerateMemberEndpointFromService(svc, apiObject, spec, group, member)
|
return GenerateMemberEndpointFromService(svc, apiObject, spec, group, member)
|
||||||
|
@ -47,7 +47,7 @@ func GenerateMemberEndpointFromService(svc *core.Service, apiObject meta.Object,
|
||||||
return k8sutil.CreateServiceDNSNameWithDomain(svc, spec.ClusterDomain), nil
|
return k8sutil.CreateServiceDNSNameWithDomain(svc, spec.ClusterDomain), nil
|
||||||
case api.DeploymentCommunicationMethodIP:
|
case api.DeploymentCommunicationMethodIP:
|
||||||
if svc.Spec.ClusterIP == "" {
|
if svc.Spec.ClusterIP == "" {
|
||||||
return "", errors.Newf("ClusterIP of service %s is empty", svc.GetName())
|
return "", errors.Errorf("ClusterIP of service %s is empty", svc.GetName())
|
||||||
}
|
}
|
||||||
|
|
||||||
if svc.Spec.ClusterIP == core.ClusterIPNone {
|
if svc.Spec.ClusterIP == core.ClusterIPNone {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -68,7 +68,7 @@ func (a *actionArangoMemberUpdatePodSpec) Start(ctx context.Context) (bool, erro
|
||||||
|
|
||||||
_, ok := cache.ArangoMember().V1().GetSimple(name)
|
_, ok := cache.ArangoMember().V1().GetSimple(name)
|
||||||
if !ok {
|
if !ok {
|
||||||
err := errors.Newf("ArangoMember not found")
|
err := errors.Errorf("ArangoMember not found")
|
||||||
a.log.Err(err).Error("ArangoMember not found")
|
a.log.Err(err).Error("ArangoMember not found")
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -65,7 +65,7 @@ func (a *actionArangoMemberUpdatePodStatus) Start(ctx context.Context) (bool, er
|
||||||
|
|
||||||
member, ok := cache.ArangoMember().V1().GetSimple(name)
|
member, ok := cache.ArangoMember().V1().GetSimple(name)
|
||||||
if !ok {
|
if !ok {
|
||||||
err := errors.Newf("ArangoMember not found")
|
err := errors.Errorf("ArangoMember not found")
|
||||||
a.log.Err(err).Error("ArangoMember not found")
|
a.log.Err(err).Error("ArangoMember not found")
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -96,7 +96,7 @@ func (a actionBackupRestore) Start(ctx context.Context) (bool, error) {
|
||||||
case api.DeploymentModeCluster:
|
case api.DeploymentModeCluster:
|
||||||
return a.restoreAsync(ctx, backupResource)
|
return a.restoreAsync(ctx, backupResource)
|
||||||
default:
|
default:
|
||||||
return false, errors.Newf("Unknown mode %s", mode)
|
return false, errors.Errorf("Unknown mode %s", mode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ func (a actionBackupRestore) restoreAsync(ctx context.Context, backup *backupApi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false, errors.Newf("Async response not received")
|
return false, errors.Errorf("Async response not received")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a actionBackupRestore) restoreSync(ctx context.Context, backup *backupApi.ArangoBackup) (bool, error) {
|
func (a actionBackupRestore) restoreSync(ctx context.Context, backup *backupApi.ArangoBackup) (bool, error) {
|
||||||
|
@ -166,12 +166,12 @@ func (a actionBackupRestore) restoreSync(ctx context.Context, backup *backupApi.
|
||||||
func (a actionBackupRestore) CheckProgress(ctx context.Context) (bool, bool, error) {
|
func (a actionBackupRestore) CheckProgress(ctx context.Context) (bool, bool, error) {
|
||||||
backup, ok := a.actionCtx.Get(a.action, actionBackupRestoreLocalBackupName)
|
backup, ok := a.actionCtx.Get(a.action, actionBackupRestoreLocalBackupName)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, false, errors.Newf("Local Key is missing in action: %s", actionBackupRestoreLocalBackupName)
|
return false, false, errors.Errorf("Local Key is missing in action: %s", actionBackupRestoreLocalBackupName)
|
||||||
}
|
}
|
||||||
|
|
||||||
job, ok := a.actionCtx.Get(a.action, actionBackupRestoreLocalJobID)
|
job, ok := a.actionCtx.Get(a.action, actionBackupRestoreLocalJobID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, false, errors.Newf("Local Key is missing in action: %s", actionBackupRestoreLocalJobID)
|
return false, false, errors.Errorf("Local Key is missing in action: %s", actionBackupRestoreLocalJobID)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctxChild, cancel := globals.GetGlobalTimeouts().ArangoD().WithTimeout(ctx)
|
ctxChild, cancel := globals.GetGlobalTimeouts().ArangoD().WithTimeout(ctx)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -149,6 +149,6 @@ func (a actionBootstrapSetPassword) ensureUserPasswordSecret(ctx context.Context
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return pass, nil
|
return pass, nil
|
||||||
}
|
}
|
||||||
return "", errors.Newf("invalid secret format in secret %s", secret)
|
return "", errors.Errorf("invalid secret format in secret %s", secret)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -365,7 +365,7 @@ func (ac *actionContext) UpdateMember(ctx context.Context, member api.MemberStat
|
||||||
status := ac.context.GetStatus()
|
status := ac.context.GetStatus()
|
||||||
_, group, found := status.Members.ElementByID(member.ID)
|
_, group, found := status.Members.ElementByID(member.ID)
|
||||||
if !found {
|
if !found {
|
||||||
return errors.WithStack(errors.Newf("Member %s not found", member.ID))
|
return errors.WithStack(errors.Errorf("Member %s not found", member.ID))
|
||||||
}
|
}
|
||||||
if err := status.Members.Update(member, group); err != nil {
|
if err := status.Members.Update(member, group); err != nil {
|
||||||
return errors.WithStack(err)
|
return errors.WithStack(err)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -37,14 +37,14 @@ import (
|
||||||
|
|
||||||
func ensureEncryptionSupport(actionCtx ActionContext) error {
|
func ensureEncryptionSupport(actionCtx ActionContext) error {
|
||||||
if !actionCtx.GetSpec().RocksDB.IsEncrypted() {
|
if !actionCtx.GetSpec().RocksDB.IsEncrypted() {
|
||||||
return errors.Newf("Encryption is disabled")
|
return errors.Errorf("Encryption is disabled")
|
||||||
}
|
}
|
||||||
|
|
||||||
if image, ok := actionCtx.GetCurrentImageInfo(); !ok {
|
if image, ok := actionCtx.GetCurrentImageInfo(); !ok {
|
||||||
return errors.Newf("Missing image info")
|
return errors.Errorf("Missing image info")
|
||||||
} else {
|
} else {
|
||||||
if !features.EncryptionRotation().Supported(image.ArangoDBVersion, image.Enterprise) {
|
if !features.EncryptionRotation().Supported(image.ArangoDBVersion, image.Enterprise) {
|
||||||
return errors.Newf("Supported only in Enterprise Edition 3.7.0+")
|
return errors.Errorf("Supported only in Enterprise Edition 3.7.0+")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -48,11 +48,11 @@ func ensureJWTFolderSupportFromAction(actionCtx ActionContext) (bool, error) {
|
||||||
|
|
||||||
func ensureJWTFolderSupport(spec api.DeploymentSpec, status api.DeploymentStatus) (bool, error) {
|
func ensureJWTFolderSupport(spec api.DeploymentSpec, status api.DeploymentStatus) (bool, error) {
|
||||||
if !spec.IsAuthenticated() {
|
if !spec.IsAuthenticated() {
|
||||||
return false, errors.Newf("Authentication is disabled")
|
return false, errors.Errorf("Authentication is disabled")
|
||||||
}
|
}
|
||||||
|
|
||||||
if image := status.CurrentImage; image == nil {
|
if image := status.CurrentImage; image == nil {
|
||||||
return false, errors.Newf("Missing image info")
|
return false, errors.Errorf("Missing image info")
|
||||||
} else {
|
} else {
|
||||||
if !features.JWTRotation().Supported(image.ArangoDBVersion, image.Enterprise) {
|
if !features.JWTRotation().Supported(image.ArangoDBVersion, image.Enterprise) {
|
||||||
return false, nil
|
return false, nil
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -64,7 +64,7 @@ func (a *actionKillMemberPod) Start(ctx context.Context) (bool, error) {
|
||||||
|
|
||||||
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return true, errors.Newf("Client is not ready")
|
return true, errors.Errorf("Client is not ready")
|
||||||
}
|
}
|
||||||
|
|
||||||
if ifPodUIDMismatch(m, a.action, cache) {
|
if ifPodUIDMismatch(m, a.action, cache) {
|
||||||
|
@ -94,7 +94,7 @@ func (a *actionKillMemberPod) CheckProgress(ctx context.Context) (bool, bool, er
|
||||||
|
|
||||||
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, false, errors.Newf("Client is not ready")
|
return false, false, errors.Errorf("Client is not ready")
|
||||||
}
|
}
|
||||||
|
|
||||||
p, ok := cache.Pod().V1().GetSimple(m.Pod.GetName())
|
p, ok := cache.Pod().V1().GetSimple(m.Pod.GetName())
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -76,7 +76,7 @@ func (a *actionPVCResize) Start(ctx context.Context) (bool, error) {
|
||||||
|
|
||||||
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return true, errors.Newf("Cluster is not ready")
|
return true, errors.Errorf("Cluster is not ready")
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.PersistentVolumeClaim.GetName() == "" {
|
if m.PersistentVolumeClaim.GetName() == "" {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -119,22 +119,22 @@ func (a *actionRebuildOutSyncedShards) CheckProgress(ctx context.Context) (bool,
|
||||||
|
|
||||||
jobID, ok := a.actionCtx.Get(a.action, actionRebuildOutSyncedShardsLocalJobID)
|
jobID, ok := a.actionCtx.Get(a.action, actionRebuildOutSyncedShardsLocalJobID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, true, errors.Newf("Local Key is missing in action: %s", actionRebuildOutSyncedShardsLocalJobID)
|
return false, true, errors.Errorf("Local Key is missing in action: %s", actionRebuildOutSyncedShardsLocalJobID)
|
||||||
}
|
}
|
||||||
|
|
||||||
batchID, ok := a.actionCtx.Get(a.action, actionRebuildOutSyncedShardsBatchID)
|
batchID, ok := a.actionCtx.Get(a.action, actionRebuildOutSyncedShardsBatchID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, true, errors.Newf("Local Key is missing in action: %s", actionRebuildOutSyncedShardsBatchID)
|
return false, true, errors.Errorf("Local Key is missing in action: %s", actionRebuildOutSyncedShardsBatchID)
|
||||||
}
|
}
|
||||||
|
|
||||||
database, ok := a.actionCtx.Get(a.action, actionRebuildOutSyncedShardsLocalDatabase)
|
database, ok := a.actionCtx.Get(a.action, actionRebuildOutSyncedShardsLocalDatabase)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, true, errors.Newf("Local Key is missing in action: %s", actionRebuildOutSyncedShardsLocalDatabase)
|
return false, true, errors.Errorf("Local Key is missing in action: %s", actionRebuildOutSyncedShardsLocalDatabase)
|
||||||
}
|
}
|
||||||
|
|
||||||
shardID, ok := a.actionCtx.Get(a.action, actionRebuildOutSyncedShardsLocalShard)
|
shardID, ok := a.actionCtx.Get(a.action, actionRebuildOutSyncedShardsLocalShard)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, true, errors.Newf("Local Key is missing in action: %s", actionRebuildOutSyncedShardsLocalShard)
|
return false, true, errors.Errorf("Local Key is missing in action: %s", actionRebuildOutSyncedShardsLocalShard)
|
||||||
}
|
}
|
||||||
|
|
||||||
// check first if there is rebuild job running
|
// check first if there is rebuild job running
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -52,19 +52,19 @@ type actionRecreateMember struct {
|
||||||
func (a *actionRecreateMember) Start(ctx context.Context) (bool, error) {
|
func (a *actionRecreateMember) Start(ctx context.Context) (bool, error) {
|
||||||
m, g, ok := a.actionCtx.GetMemberStatusAndGroupByID(a.action.MemberID)
|
m, g, ok := a.actionCtx.GetMemberStatusAndGroupByID(a.action.MemberID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, errors.Newf("expecting member to be present in list, but it is not")
|
return false, errors.Errorf("expecting member to be present in list, but it is not")
|
||||||
}
|
}
|
||||||
|
|
||||||
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return true, errors.Newf("Cluster is not ready")
|
return true, errors.Errorf("Cluster is not ready")
|
||||||
}
|
}
|
||||||
|
|
||||||
switch g {
|
switch g {
|
||||||
case api.ServerGroupDBServers, api.ServerGroupAgents: // Only DBServers and Agents use persistent data
|
case api.ServerGroupDBServers, api.ServerGroupAgents: // Only DBServers and Agents use persistent data
|
||||||
_, ok := cache.PersistentVolumeClaim().V1().GetSimple(m.PersistentVolumeClaim.GetName())
|
_, ok := cache.PersistentVolumeClaim().V1().GetSimple(m.PersistentVolumeClaim.GetName())
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, errors.Newf("PVC is missing %s. Members won't be recreated without old PV", m.PersistentVolumeClaim.GetName())
|
return false, errors.Errorf("PVC is missing %s. Members won't be recreated without old PV", m.PersistentVolumeClaim.GetName())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -65,7 +65,7 @@ func (a *actionRemoveMember) Start(ctx context.Context) (bool, error) {
|
||||||
|
|
||||||
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return true, errors.Newf("Cluster is not ready")
|
return true, errors.Errorf("Cluster is not ready")
|
||||||
}
|
}
|
||||||
|
|
||||||
// For safety, remove from cluster
|
// For safety, remove from cluster
|
||||||
|
@ -93,7 +93,7 @@ func (a *actionRemoveMember) Start(ctx context.Context) (bool, error) {
|
||||||
if m.Conditions.IsTrue(api.ConditionTypeTerminating) {
|
if m.Conditions.IsTrue(api.ConditionTypeTerminating) {
|
||||||
|
|
||||||
if record.Status != driver.ServerStatusFailed {
|
if record.Status != driver.ServerStatusFailed {
|
||||||
return false, errors.WithStack(errors.Newf("can not remove server from cluster. Not yet terminated. Retry later"))
|
return false, errors.WithStack(errors.Errorf("can not remove server from cluster. Not yet terminated. Retry later"))
|
||||||
}
|
}
|
||||||
|
|
||||||
a.log.Debug("dbserver has shut down")
|
a.log.Debug("dbserver has shut down")
|
||||||
|
@ -131,7 +131,7 @@ func (a *actionRemoveMember) Start(ctx context.Context) (bool, error) {
|
||||||
}
|
}
|
||||||
// Check that member has been removed
|
// Check that member has been removed
|
||||||
if _, found := a.actionCtx.GetMemberStatusByID(a.action.MemberID); found {
|
if _, found := a.actionCtx.GetMemberStatusByID(a.action.MemberID); found {
|
||||||
return false, errors.WithStack(errors.Newf("Member %s still exists", a.action.MemberID))
|
return false, errors.WithStack(errors.Errorf("Member %s still exists", a.action.MemberID))
|
||||||
}
|
}
|
||||||
return true, nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -62,21 +62,21 @@ func (a *actionRemoveMemberPVC) Start(ctx context.Context) (bool, error) {
|
||||||
|
|
||||||
pvcUID, ok := a.action.GetParam("pvc")
|
pvcUID, ok := a.action.GetParam("pvc")
|
||||||
if !ok {
|
if !ok {
|
||||||
return true, errors.Newf("PVC UID Parameter is missing")
|
return true, errors.Errorf("PVC UID Parameter is missing")
|
||||||
}
|
}
|
||||||
|
|
||||||
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return true, errors.Newf("Cluster is not ready")
|
return true, errors.Errorf("Cluster is not ready")
|
||||||
}
|
}
|
||||||
|
|
||||||
agencyCache, ok := a.actionCtx.GetAgencyCache()
|
agencyCache, ok := a.actionCtx.GetAgencyCache()
|
||||||
if !ok {
|
if !ok {
|
||||||
return true, errors.Newf("Agency is not ready")
|
return true, errors.Errorf("Agency is not ready")
|
||||||
}
|
}
|
||||||
|
|
||||||
if agencyCache.PlanLeaderServers().Contains(state.Server(m.ID)) {
|
if agencyCache.PlanLeaderServers().Contains(state.Server(m.ID)) {
|
||||||
return true, errors.Newf("Server is still used in cluster")
|
return true, errors.Errorf("Server is still used in cluster")
|
||||||
}
|
}
|
||||||
|
|
||||||
// We are safe to remove PVC
|
// We are safe to remove PVC
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -25,11 +25,11 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
core "k8s.io/api/core/v1"
|
core "k8s.io/api/core/v1"
|
||||||
|
|
||||||
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
|
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/deployment/rotation"
|
"github.com/arangodb/kube-arangodb/pkg/deployment/rotation"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/globals"
|
"github.com/arangodb/kube-arangodb/pkg/util/globals"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
|
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
|
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/inspector/definitions"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -115,7 +115,7 @@ func (a actionRuntimeContainerImageUpdate) Post(ctx context.Context) error {
|
||||||
|
|
||||||
_, ok = cache.ArangoMember().V1().GetSimple(name)
|
_, ok = cache.ArangoMember().V1().GetSimple(name)
|
||||||
if !ok {
|
if !ok {
|
||||||
err := errors.Newf("ArangoMember not found")
|
err := errors.Errorf("ArangoMember not found")
|
||||||
a.log.Err(err).Error("ArangoMember not found")
|
a.log.Err(err).Error("ArangoMember not found")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -179,7 +179,7 @@ func (a actionRuntimeContainerImageUpdate) Start(ctx context.Context) (bool, err
|
||||||
|
|
||||||
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
cache, ok := a.actionCtx.ACS().ClusterCache(m.ClusterID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return true, errors.Newf("Client is not ready")
|
return true, errors.Errorf("Client is not ready")
|
||||||
}
|
}
|
||||||
|
|
||||||
name, image, ok := a.getContainerDetails()
|
name, image, ok := a.getContainerDetails()
|
||||||
|
@ -195,7 +195,7 @@ func (a actionRuntimeContainerImageUpdate) Start(ctx context.Context) (bool, err
|
||||||
|
|
||||||
member, ok := a.actionCtx.ACS().CurrentClusterCache().ArangoMember().V1().GetSimple(m.ArangoMemberName(a.actionCtx.GetName(), a.action.Group))
|
member, ok := a.actionCtx.ACS().CurrentClusterCache().ArangoMember().V1().GetSimple(m.ArangoMemberName(a.actionCtx.GetName(), a.action.Group))
|
||||||
if !ok {
|
if !ok {
|
||||||
err := errors.Newf("ArangoMember not found")
|
err := errors.Errorf("ArangoMember not found")
|
||||||
a.log.Err(err).Error("ArangoMember not found")
|
a.log.Err(err).Error("ArangoMember not found")
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
|
@ -250,7 +250,7 @@ func (a actionRuntimeContainerImageUpdate) Start(ctx context.Context) (bool, err
|
||||||
|
|
||||||
a.log.Str("container", name).Str("pod", pod.GetName()).Warn("Container not found")
|
a.log.Str("container", name).Str("pod", pod.GetName()).Warn("Container not found")
|
||||||
|
|
||||||
return false, errors.Newf("Container %s not found in Pod %s", name, pod.GetName())
|
return false, errors.Errorf("Container %s not found in Pod %s", name, pod.GetName())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a actionRuntimeContainerImageUpdate) CheckProgress(ctx context.Context) (bool, bool, error) {
|
func (a actionRuntimeContainerImageUpdate) CheckProgress(ctx context.Context) (bool, bool, error) {
|
||||||
|
@ -311,14 +311,14 @@ func (a actionRuntimeContainerImageUpdate) CheckProgress(ctx context.Context) (b
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pod won't get up and running
|
// Pod won't get up and running
|
||||||
return true, false, errors.Newf("Container %s failed during image replacement: (%d) %s: %s", name, s.ExitCode, s.Reason, s.Message)
|
return true, false, errors.Errorf("Container %s failed during image replacement: (%d) %s: %s", name, s.ExitCode, s.Reason, s.Message)
|
||||||
} else if s := cstatus.State.Waiting; s != nil {
|
} else if s := cstatus.State.Waiting; s != nil {
|
||||||
if pod.Spec.RestartPolicy == core.RestartPolicyAlways {
|
if pod.Spec.RestartPolicy == core.RestartPolicyAlways {
|
||||||
lastTermination := cstatus.LastTerminationState.Terminated
|
lastTermination := cstatus.LastTerminationState.Terminated
|
||||||
if lastTermination != nil {
|
if lastTermination != nil {
|
||||||
allowedRestartPeriod := time.Now().Add(time.Second * -20)
|
allowedRestartPeriod := time.Now().Add(time.Second * -20)
|
||||||
if lastTermination.FinishedAt.Time.Before(allowedRestartPeriod) {
|
if lastTermination.FinishedAt.Time.Before(allowedRestartPeriod) {
|
||||||
return true, false, errors.Newf("Container %s continuously failing during image replacement: (%d) %s: %s", name, lastTermination.ExitCode, lastTermination.Reason, lastTermination.Message)
|
return true, false, errors.Errorf("Container %s continuously failing during image replacement: (%d) %s: %s", name, lastTermination.ExitCode, lastTermination.Reason, lastTermination.Message)
|
||||||
} else {
|
} else {
|
||||||
a.log.Str("pod-name", pod.GetName()).Debug("pod is restarting - we are not marking it as terminated yet..")
|
a.log.Str("pod-name", pod.GetName()).Debug("pod is restarting - we are not marking it as terminated yet..")
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -24,12 +24,12 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
|
meta "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
|
||||||
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
|
api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/deployment/patch"
|
"github.com/arangodb/kube-arangodb/pkg/deployment/patch"
|
||||||
|
"github.com/arangodb/kube-arangodb/pkg/util/errors"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/globals"
|
"github.com/arangodb/kube-arangodb/pkg/util/globals"
|
||||||
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/tolerations"
|
"github.com/arangodb/kube-arangodb/pkg/util/k8sutil/tolerations"
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2023 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -139,7 +139,7 @@ func (s shutdownHelperAPI) Start(ctx context.Context) (bool, error) {
|
||||||
|
|
||||||
cache, ok := s.actionCtx.ACS().ClusterCache(s.memberStatus.ClusterID)
|
cache, ok := s.actionCtx.ACS().ClusterCache(s.memberStatus.ClusterID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return true, errors.Newf("Cluster is not ready")
|
return true, errors.Errorf("Cluster is not ready")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove finalizers, so Kubernetes will quickly terminate the pod
|
// Remove finalizers, so Kubernetes will quickly terminate the pod
|
||||||
|
@ -228,7 +228,7 @@ func (s shutdownHelperDelete) Start(ctx context.Context) (bool, error) {
|
||||||
|
|
||||||
cache, ok := s.actionCtx.ACS().ClusterCache(s.memberStatus.ClusterID)
|
cache, ok := s.actionCtx.ACS().ClusterCache(s.memberStatus.ClusterID)
|
||||||
if !ok {
|
if !ok {
|
||||||
return true, errors.Newf("Cluster is not ready")
|
return true, errors.Errorf("Cluster is not ready")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Terminate pod
|
// Terminate pod
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//
|
//
|
||||||
// DISCLAIMER
|
// DISCLAIMER
|
||||||
//
|
//
|
||||||
// Copyright 2016-2022 ArangoDB GmbH, Cologne, Germany
|
// Copyright 2016-2024 ArangoDB GmbH, Cologne, Germany
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -46,19 +46,19 @@ func mapTLSSNIConfig(sni api.TLSSNISpec, cachedStatus inspectorInterface.Inspect
|
||||||
for name, servers := range mapping {
|
for name, servers := range mapping {
|
||||||
secret, exists := cachedStatus.Secret().V1().GetSimple(name)
|
secret, exists := cachedStatus.Secret().V1().GetSimple(name)
|
||||||
if !exists {
|
if !exists {
|
||||||
return nil, errors.Newf("Secret %s does not exist", name)
|
return nil, errors.Errorf("Secret %s does not exist", name)
|
||||||
}
|
}
|
||||||
|
|
||||||
tlsKey, ok := secret.Data[constants.SecretTLSKeyfile]
|
tlsKey, ok := secret.Data[constants.SecretTLSKeyfile]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, errors.Newf("Not found tls keyfile key in SNI secret")
|
return nil, errors.Errorf("Not found tls keyfile key in SNI secret")
|
||||||
}
|
}
|
||||||
|
|
||||||
tlsKeyChecksum := fmt.Sprintf("%0x", sha256.Sum256(tlsKey))
|
tlsKeyChecksum := fmt.Sprintf("%0x", sha256.Sum256(tlsKey))
|
||||||
|
|
||||||
for _, server := range servers {
|
for _, server := range servers {
|
||||||
if _, ok := fetchedSecrets[server]; ok {
|
if _, ok := fetchedSecrets[server]; ok {
|
||||||
return nil, errors.Newf("Not found tls key in SNI secret")
|
return nil, errors.Errorf("Not found tls key in SNI secret")
|
||||||
}
|
}
|
||||||
fetchedSecrets[server] = tlsKeyChecksum
|
fetchedSecrets[server] = tlsKeyChecksum
|
||||||
}
|
}
|
||||||
|
@ -81,13 +81,13 @@ func compareTLSSNIConfig(ctx context.Context, log logging.Logger, c driver.Conne
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(m) != len(tlsDetails.Result.SNI) {
|
if len(m) != len(tlsDetails.Result.SNI) {
|
||||||
return false, errors.Newf("Count of SNI mounted secrets does not match")
|
return false, errors.Errorf("Count of SNI mounted secrets does not match")
|
||||||
}
|
}
|
||||||
|
|
||||||
for key, value := range tlsDetails.Result.SNI {
|
for key, value := range tlsDetails.Result.SNI {
|
||||||
currentValue, ok := m[key]
|
currentValue, ok := m[key]
|
||||||
if !ok {
|
if !ok {
|
||||||
return false, errors.Newf("Unable to fetch TLS SNI state")
|
return false, errors.Errorf("Unable to fetch TLS SNI state")
|
||||||
}
|
}
|
||||||
|
|
||||||
if value.GetSHA().Checksum() != currentValue {
|
if value.GetSHA().Checksum() != currentValue {
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue