diff --git a/.github/workflows/codeql.yaml b/.github/workflows/codeql.yaml index dc4564a6..8cf60c1c 100644 --- a/.github/workflows/codeql.yaml +++ b/.github/workflows/codeql.yaml @@ -14,6 +14,10 @@ on: permissions: contents: read +concurrency: + group: fission-codeql-${{ github.ref }} + cancel-in-progress: true + jobs: CodeQL-Build: permissions: diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index d87b695f..9048b0d5 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -12,6 +12,10 @@ on: [pull_request] permissions: contents: read +concurrency: + group: fission-dependency-review-${{ github.ref }} + cancel-in-progress: true + jobs: dependency-review: runs-on: ubuntu-24.04 diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 1524f2b5..ec10a245 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -23,6 +23,10 @@ env: permissions: contents: read +concurrency: + group: fission-lint-${{ github.ref }} + cancel-in-progress: true + jobs: lint: permissions: diff --git a/.github/workflows/push_pr.yaml b/.github/workflows/push_pr.yaml index 66952426..3ac0360e 100644 --- a/.github/workflows/push_pr.yaml +++ b/.github/workflows/push_pr.yaml @@ -29,6 +29,10 @@ env: permissions: contents: read +concurrency: + group: fission-ci-${{ github.ref }} + cancel-in-progress: true + jobs: # Job to run change detection integration-test: diff --git a/.github/workflows/upgrade_test.yaml b/.github/workflows/upgrade_test.yaml index e41b7b01..9028a073 100644 --- a/.github/workflows/upgrade_test.yaml +++ b/.github/workflows/upgrade_test.yaml @@ -29,6 +29,10 @@ env: permissions: contents: read +concurrency: + group: fission-upgrade-test-${{ github.ref }} + cancel-in-progress: true + jobs: upgrade-test: runs-on: ${{ matrix.os }} diff --git a/.golangci.yaml b/.golangci.yaml index 59d3f032..b5479505 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -28,8 +28,9 @@ linters: # - gocritic linters-settings: errcheck: - ignore: go.uber.org/zap:Sync + exclude-functions: + - (*go.uber.org/zap.Logger).Sync goimports: # put imports beginning with prefix after 3rd-party packages; # it's a comma-separated list of prefixes - local: github.com/fission/fission + local-prefixes: github.com/fission/fission diff --git a/cmd/fission-bundle/mqtrigger/mqtrigger.go b/cmd/fission-bundle/mqtrigger/mqtrigger.go index e45cbf32..02de99cf 100644 --- a/cmd/fission-bundle/mqtrigger/mqtrigger.go +++ b/cmd/fission-bundle/mqtrigger/mqtrigger.go @@ -24,7 +24,6 @@ import ( "strings" "time" - "github.com/pkg/errors" "go.uber.org/zap" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -41,12 +40,12 @@ import ( func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, routerUrl string) error { fissionClient, err := clientGen.GetFissionClient() if err != nil { - return errors.Wrap(err, "failed to get fission client") + return fmt.Errorf("failed to get fission client: %w", err) } err = crd.WaitForFunctionCRDs(ctx, logger, fissionClient) if err != nil { - return errors.Wrap(err, "error waiting for CRDs") + return fmt.Errorf("error waiting for CRDs: %w", err) } mqType := (fv1.MessageQueueType)(os.Getenv("MESSAGE_QUEUE_TYPE")) diff --git a/cmd/fission-cli/app/app.go b/cmd/fission-cli/app/app.go index 9435ec4c..f1d27b67 100644 --- a/cmd/fission-cli/app/app.go +++ b/cmd/fission-cli/app/app.go @@ -14,7 +14,8 @@ limitations under the License. package app import ( - "github.com/pkg/errors" + "fmt" + "github.com/spf13/cobra" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -65,7 +66,7 @@ func App(clientOptions cmd.ClientOptions) *cobra.Command { // } client, err := cmd.NewClient(clientOptions) if err != nil { - return errors.Wrap(err, "failed to get fission client") + return fmt.Errorf("failed to get fission client: %w", err) } cmd.SetClientset(*client) return nil diff --git a/go.mod b/go.mod index f300fb7a..5c34523b 100644 --- a/go.mod +++ b/go.mod @@ -25,7 +25,6 @@ require ( github.com/mholt/archives v0.1.0 github.com/minio/minio-go v6.0.14+incompatible github.com/ory/dockertest v3.3.5+incompatible - github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.20.5 github.com/prometheus/common v0.62.0 github.com/robfig/cron/v3 v3.0.1 @@ -217,6 +216,7 @@ require ( github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pires/go-proxyproto v0.8.0 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_model v0.6.1 // indirect diff --git a/pkg/apis/core/v1/zz_generated.deepcopy.go b/pkg/apis/core/v1/zz_generated.deepcopy.go index f7bd200c..9c422a2c 100644 --- a/pkg/apis/core/v1/zz_generated.deepcopy.go +++ b/pkg/apis/core/v1/zz_generated.deepcopy.go @@ -21,7 +21,7 @@ limitations under the License. package v1 import ( - "k8s.io/api/autoscaling/v2" + v2 "k8s.io/api/autoscaling/v2" corev1 "k8s.io/api/core/v1" runtime "k8s.io/apimachinery/pkg/runtime" ) diff --git a/pkg/builder/builder.go b/pkg/builder/builder.go index 1280f0de..76d9abdf 100644 --- a/pkg/builder/builder.go +++ b/pkg/builder/builder.go @@ -31,7 +31,6 @@ import ( "time" "github.com/dchest/uniuri" - "github.com/pkg/errors" "go.uber.org/zap" "github.com/fission/fission/pkg/info" @@ -206,7 +205,7 @@ func (builder *Builder) reply(ctx context.Context, w http.ResponseWriter, pkgFil rBody, err := json.Marshal(resp) if err != nil { - e := errors.Wrap(err, "error encoding response body") + e := fmt.Errorf("error encoding response body: %w", err) rBody = []byte(fmt.Sprintf(`{"buildLogs": "%s"}`, e.Error())) statusCode = http.StatusInternalServerError } @@ -247,12 +246,12 @@ func (builder *Builder) build(ctx context.Context, command string, args []string stdout, err := cmd.StdoutPipe() if err != nil { - return "", errors.Wrap(err, "error creating stdout pipe for cmd") + return "", fmt.Errorf("error creating stdout pipe for cmd: %w", err) } stderr, err := cmd.StderrPipe() if err != nil { - return "", errors.Wrap(err, "error creating stderr pipe for cmd") + return "", fmt.Errorf("error creating stderr pipe for cmd: %w", err) } // Init logs @@ -263,7 +262,7 @@ func (builder *Builder) build(ctx context.Context, command string, args []string err = cmd.Start() if err != nil { - return "", errors.Wrap(err, "error starting cmd") + return "", fmt.Errorf("error starting cmd: %w", err) } fmt.Printf("========= START =========\n") defer fmt.Printf("========= END ===========\n") @@ -276,14 +275,14 @@ func (builder *Builder) build(ctx context.Context, command string, args []string } if err := scanner.Err(); err != nil { - scanErr := errors.Wrap(err, "error reading cmd output") + scanErr := fmt.Errorf("error reading cmd output: %w", err) fmt.Println(scanErr) return buildLogs, scanErr } err = cmd.Wait() if err != nil { - cmdErr := errors.Wrapf(err, "error waiting for cmd %q", command) + cmdErr := fmt.Errorf("error waiting for cmd %q: %w", command, err) fmt.Println(cmdErr) return buildLogs, cmdErr } diff --git a/pkg/builder/client/client.go b/pkg/builder/client/client.go index 2b6764e9..26941360 100644 --- a/pkg/builder/client/client.go +++ b/pkg/builder/client/client.go @@ -20,12 +20,12 @@ import ( "bytes" "context" "encoding/json" + "fmt" "io" "net/http" "strings" "github.com/hashicorp/go-retryablehttp" - "github.com/pkg/errors" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.uber.org/zap" "golang.org/x/net/context/ctxhttp" @@ -68,26 +68,26 @@ func (c *client) Build(ctx context.Context, req *builder.PackageBuildRequest) (* body, err := json.Marshal(req) if err != nil { - return nil, errors.Wrap(err, "error marshaling json") + return nil, fmt.Errorf("error marshaling json: %w", err) } resp, err := ctxhttp.Post(ctx, c.httpClient.StandardClient(), c.url, "application/json", bytes.NewReader(body)) if err != nil { - return nil, err + return nil, fmt.Errorf("error sending request: %w", err) } defer resp.Body.Close() rBody, err := io.ReadAll(resp.Body) if err != nil { logger.Error("error reading resp body", zap.Error(err)) - return nil, err + return nil, fmt.Errorf("error reading response body: %w", err) } pkgBuildResp := builder.PackageBuildResponse{} err = json.Unmarshal(rBody, &pkgBuildResp) if err != nil { logger.Error("error parsing resp body", zap.Error(err)) - return nil, err + return nil, fmt.Errorf("error parsing response body: %w", err) } return &pkgBuildResp, ferror.MakeErrorFromHTTP(resp) @@ -98,7 +98,7 @@ func (c *client) Clean(ctx context.Context, srcPkgFilename string) error { req, err := http.NewRequest(http.MethodDelete, c.getCleanUrl(srcPkgFilename), http.NoBody) if err != nil { - return errors.Wrap(err, "failed to create http request for clean api") + return fmt.Errorf("error creating http request: %w", err) } resp, err := ctxhttp.Do(ctx, c.httpClient.StandardClient(), req) diff --git a/pkg/buildermgr/buildermgr.go b/pkg/buildermgr/buildermgr.go index f016c75a..5928d8b2 100644 --- a/pkg/buildermgr/buildermgr.go +++ b/pkg/buildermgr/buildermgr.go @@ -18,10 +18,10 @@ package buildermgr import ( "context" + "fmt" "os" "time" - "github.com/pkg/errors" "go.uber.org/zap" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -38,21 +38,21 @@ func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger * fissionClient, err := clientGen.GetFissionClient() if err != nil { - return errors.Wrap(err, "failed to get fission client") + return fmt.Errorf("failed to get fission client: %w", err) } kubernetesClient, err := clientGen.GetKubernetesClient() if err != nil { - return errors.Wrap(err, "failed to get kubernetes client") + return fmt.Errorf("failed to get kubernetes client: %w", err) } err = crd.WaitForFunctionCRDs(ctx, logger, fissionClient) if err != nil { - return errors.Wrap(err, "error waiting for CRDs") + return fmt.Errorf("error waiting for CRDs: %w", err) } fetcherConfig, err := fetcherConfig.MakeFetcherConfig("/packages") if err != nil { - return errors.Wrap(err, "error making fetcher config") + return fmt.Errorf("error making fetcher config: %w", err) } podSpecPatch, err := util.GetSpecFromConfigMap(fv1.BuilderPodSpecPath) diff --git a/pkg/buildermgr/common.go b/pkg/buildermgr/common.go index 1260a1b3..6d524f55 100644 --- a/pkg/buildermgr/common.go +++ b/pkg/buildermgr/common.go @@ -24,7 +24,6 @@ import ( "time" "github.com/dchest/uniuri" - "github.com/pkg/errors" "go.uber.org/zap" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -162,7 +161,7 @@ func updatePackage(ctx context.Context, logger *zap.Logger, fissionClient versio if err != nil { e := "error updating package" logger.Error(e, zap.Error(err)) - return nil, errors.Wrap(err, e) + return nil, fmt.Errorf("%s: %w", e, err) } // return resource version for function to update function package ref diff --git a/pkg/canaryconfigmgr/config.go b/pkg/canaryconfigmgr/config.go index 670f7cee..7d6c4427 100644 --- a/pkg/canaryconfigmgr/config.go +++ b/pkg/canaryconfigmgr/config.go @@ -18,8 +18,8 @@ package canaryconfigmgr import ( "context" + "fmt" - "github.com/pkg/errors" "go.uber.org/zap" "k8s.io/client-go/kubernetes" @@ -47,7 +47,7 @@ func ConfigureFeatures(ctx context.Context, logger *zap.Logger, unitTestMode boo // in the future when new optional features are added, we need to add corresponding feature handlers and invoke them here canaryCfgMgr, err := MakeCanaryConfigMgr(ctx, logger, fissionClient, kubeClient, featureConfig.CanaryConfig.PrometheusSvc) if err != nil { - return errors.Wrap(err, "failed to start canary config manager") + return fmt.Errorf("failed to start canary config manager: %w", err) } canaryCfgMgr.Run(ctx, mgr) diff --git a/pkg/canaryconfigmgr/prometheusClient.go b/pkg/canaryconfigmgr/prometheusClient.go index 153ba695..63507d14 100644 --- a/pkg/canaryconfigmgr/prometheusClient.go +++ b/pkg/canaryconfigmgr/prometheusClient.go @@ -21,7 +21,6 @@ import ( "fmt" "time" - "github.com/pkg/errors" prometheus "github.com/prometheus/client_golang/api" prometheusv1 "github.com/prometheus/client_golang/api/prometheus/v1" "github.com/prometheus/common/model" @@ -40,7 +39,7 @@ func MakePrometheusClient(logger *zap.Logger, prometheusSvc string) (*Prometheus promApiClient, err := prometheus.NewClient(promApiConfig) if err != nil { - return nil, errors.Wrapf(err, "error creating prometheus api client for svc: %s", prometheusSvc) + return nil, fmt.Errorf("error creating prometheus api client for svc: %s: %w", prometheusSvc, err) } apiQueryClient := prometheusv1.NewAPI(promApiClient) @@ -91,14 +90,14 @@ func (promApiClient *PrometheusApiClient) GetRequestsToFuncInWindow(ctx context. reqs, err := promApiClient.executeQuery(ctx, queryString) if err != nil { - return 0, errors.Wrapf(err, "error executing query: %s", queryString) + return 0, fmt.Errorf("error executing query %s: %w", queryString, err) } queryString = fmt.Sprintf("fission_function_calls_total{%s} offset %v", queryLabels, window) reqsInPrevWindow, err := promApiClient.executeQuery(ctx, queryString) if err != nil { - return 0, errors.Wrapf(err, "error executing query: %s", queryString) + return 0, fmt.Errorf("error executing query %s: %w", queryString, err) } reqsInCurrentWindow := reqs - reqsInPrevWindow @@ -117,14 +116,14 @@ func (promApiClient *PrometheusApiClient) GetTotalFailedRequestsToFuncInWindow(c failedRequests, err := promApiClient.executeQuery(ctx, queryString) if err != nil { - return 0, errors.Wrapf(err, "error executing query: %s", queryString) + return 0, fmt.Errorf("error executing query %s: %w", queryString, err) } queryString = fmt.Sprintf("fission_function_errors_total{%s} offset %v", queryLabels, window) failedReqsInPrevWindow, err := promApiClient.executeQuery(ctx, queryString) if err != nil { - return 0, errors.Wrapf(err, "error executing query: %s", queryString) + return 0, fmt.Errorf("error executing query %s: %w", queryString, err) } failedReqsInCurrentWindow := failedRequests - failedReqsInPrevWindow @@ -142,7 +141,7 @@ func (promApiClient *PrometheusApiClient) executeQuery(ctx context.Context, quer val, warn, err := promApiClient.client.Query(ctx, queryString, time.Now()) if err != nil { - return 0, errors.Wrapf(err, "error querying prometheus") + return 0, fmt.Errorf("error querying prometheus: %w", err) } if warn != nil { diff --git a/pkg/crd/client.go b/pkg/crd/client.go index a7f564e6..0e62b565 100644 --- a/pkg/crd/client.go +++ b/pkg/crd/client.go @@ -21,6 +21,7 @@ import ( "fmt" "time" + kedaClient "github.com/kedacore/keda/v2/pkg/generated/clientset/versioned" "go.uber.org/zap" apiextensionsclient "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -32,7 +33,6 @@ import ( "github.com/fission/fission/pkg/generated/clientset/versioned" "github.com/fission/fission/pkg/utils" - kedaClient "github.com/kedacore/keda/v2/pkg/generated/clientset/versioned" ) const ( diff --git a/pkg/error/httperror_test.go b/pkg/error/httperror_test.go index db457048..598ae617 100644 --- a/pkg/error/httperror_test.go +++ b/pkg/error/httperror_test.go @@ -1,20 +1,20 @@ package error import ( + "fmt" "net/http" "testing" - "github.com/pkg/errors" "github.com/stretchr/testify/assert" ) func TestIsNotFound(t *testing.T) { errs := map[error]bool{ nil: false, - MakeError(ErrorNotFound, "someone not found"): true, - MakeError(ErrorTooManyRequests, "too many requests"): false, - errors.Wrap(MakeError(ErrorNotFound, "someone not found"), "other information"): true, - errors.Wrap(MakeError(ErrorTooManyRequests, "too many requests"), "other information"): false, + MakeError(ErrorNotFound, "someone not found"): true, + MakeError(ErrorTooManyRequests, "too many requests"): false, + fmt.Errorf("other information: %w", MakeError(ErrorNotFound, "someone not found")): true, + fmt.Errorf("other information: %w", MakeError(ErrorTooManyRequests, "too many requests")): false, } for err, want := range errs { @@ -25,9 +25,9 @@ func TestIsNotFound(t *testing.T) { func TestGetHTTPError(t *testing.T) { errs := map[int]error{ http.StatusBadRequest: MakeError(ErrorInvalidArgument, ""), - http.StatusConflict: errors.Wrap(MakeError(ErrorNameExists, ""), ""), - http.StatusNotFound: errors.Wrap(MakeError(ErrorNotFound, ""), ""), - http.StatusTooManyRequests: errors.Wrap(MakeError(ErrorTooManyRequests, "too many requests"), "other information"), + http.StatusConflict: fmt.Errorf("%w", MakeError(ErrorNameExists, "")), + http.StatusNotFound: fmt.Errorf("%w", MakeError(ErrorNotFound, "")), + http.StatusTooManyRequests: fmt.Errorf("other information: %w", MakeError(ErrorTooManyRequests, "too many requests")), } for want, err := range errs { code, _ := GetHTTPError(err) diff --git a/pkg/executor/client/client.go b/pkg/executor/client/client.go index c32fcc48..1d52fdc3 100644 --- a/pkg/executor/client/client.go +++ b/pkg/executor/client/client.go @@ -20,13 +20,13 @@ import ( "bytes" "context" "encoding/json" + "fmt" "io" "net/url" "strings" "time" "github.com/hashicorp/go-retryablehttp" - "github.com/pkg/errors" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.uber.org/zap" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -80,18 +80,18 @@ func (c *client) GetServiceForFunction(ctx context.Context, fn *fv1.Function) (s body, err := json.Marshal(fn) if err != nil { - return "", errors.Wrap(err, "could not marshal request body for getting service for function") + return "", fmt.Errorf("could not marshal request body for getting service for function: %w", err) } req, err := retryablehttp.NewRequestWithContext(ctx, "POST", executorURL, bytes.NewReader(body)) if err != nil { - return "", errors.Wrap(err, "could not create request for getting service for function") + return "", fmt.Errorf("could not create request for getting service for function: %w", err) } req.Header.Set("Content-Type", "application/json") resp, err := c.httpClient.Do(req) if err != nil { - return "", errors.Wrap(err, "error posting to getting service for function") + return "", fmt.Errorf("error posting to getting service for function: %w", err) } defer resp.Body.Close() @@ -101,7 +101,7 @@ func (c *client) GetServiceForFunction(ctx context.Context, fn *fv1.Function) (s svcName, err := io.ReadAll(resp.Body) if err != nil { - return "", errors.Wrap(err, "error reading response body from getting service for function") + return "", fmt.Errorf("error reading response body from getting service for function: %w", err) } return string(svcName), nil @@ -118,17 +118,17 @@ func (c *client) UnTapService(ctx context.Context, fnMeta metav1.ObjectMeta, exe body, err := json.Marshal(tapSvc) if err != nil { - return errors.Wrap(err, "could not marshal request body for getting service for function") + return fmt.Errorf("could not marshal request body for getting service for function: %w", err) } req, err := retryablehttp.NewRequestWithContext(ctx, "POST", url, bytes.NewReader(body)) if err != nil { - return errors.Wrap(err, "could not create request for untap service for function") + return fmt.Errorf("could not create request for untap service for function: %w", err) } req.Header.Set("Content-Type", "application/json") resp, err := c.httpClient.Do(req) if err != nil { - return errors.Wrap(err, "error posting to getting service for function") + return fmt.Errorf("error posting to getting service for function: %w", err) } defer resp.Body.Close() @@ -194,7 +194,7 @@ func (c *client) _tapService(ctx context.Context, tapSvcReqs []TapServiceRequest req, err := retryablehttp.NewRequestWithContext(ctx, "POST", executorURL, bytes.NewReader(body)) if err != nil { - return errors.Wrap(err, "could not create request for tap service request") + return fmt.Errorf("could not create request for tap service request: %w", err) } req.Header.Set("Content-Type", "application/json") diff --git a/pkg/executor/cms/cmscontroller.go b/pkg/executor/cms/cmscontroller.go index 8fa82a8d..1a41982e 100644 --- a/pkg/executor/cms/cmscontroller.go +++ b/pkg/executor/cms/cmscontroller.go @@ -18,8 +18,8 @@ package cms import ( "context" + "fmt" - "github.com/pkg/errors" "go.uber.org/zap" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/cache" @@ -72,7 +72,7 @@ func refreshPods(ctx context.Context, logger *zap.Logger, funcs []fv1.Function, if exists { err = et.RefreshFuncPods(ctx, logger, f) } else { - err = errors.Errorf("Unknown executor type '%s'", f.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType) + err = fmt.Errorf("Unknown executor type '%s'", f.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType) } if err != nil { diff --git a/pkg/executor/executor.go b/pkg/executor/executor.go index df1d6e46..e9c00f0a 100644 --- a/pkg/executor/executor.go +++ b/pkg/executor/executor.go @@ -26,7 +26,6 @@ import ( "time" "github.com/dchest/uniuri" - "github.com/pkg/errors" "go.uber.org/zap" k8sCache "k8s.io/client-go/tools/cache" @@ -213,7 +212,7 @@ func (executor *Executor) serveCreateFuncServices(ctx context.Context) { // It normally happened if there are multiple requests are // waiting for the same function and executor failed to cre- // ate service for function. - err = errors.Wrapf(err, "error getting service for function %s", fnName) + err = fmt.Errorf("error getting service for function %s: %w", fnName, err) req.respChan <- &createFuncServiceResponse{ funcSvc: fsvc, err: err, @@ -233,7 +232,7 @@ func (executor *Executor) createServiceForFunction(ctx context.Context, fn *fv1. t := fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType e, ok := executor.executorTypes[t] if !ok { - return nil, errors.Errorf("Unknown executor type '%s'", t) + return nil, fmt.Errorf("Unknown executor type '%s'", t) } fsvc, fsvcErr := e.GetFuncSvc(ctx, fn) @@ -243,7 +242,7 @@ func (executor *Executor) createServiceForFunction(ctx context.Context, fn *fv1. zap.Error(fsvcErr), zap.String("function_name", fn.ObjectMeta.Name), zap.String("function_namespace", fn.ObjectMeta.Namespace)) - fsvcErr = errors.Wrap(fsvcErr, fmt.Sprintf("[%s] %s", fn.ObjectMeta.Name, e)) + fsvcErr = fmt.Errorf("[%s] %s: %w", fn.ObjectMeta.Name, e, fsvcErr) } return fsvc, fsvcErr @@ -254,7 +253,7 @@ func (executor *Executor) getFunctionServiceFromCache(ctx context.Context, fn *f t := fn.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType e, ok := executor.executorTypes[t] if !ok { - return nil, errors.Errorf("Unknown executor type '%s'", t) + return nil, fmt.Errorf("Unknown executor type '%s'", t) } return e.GetFuncSvcFromCache(ctx, fn) } @@ -265,11 +264,11 @@ func StartExecutor(ctx context.Context, clientGen crd.ClientGeneratorInterface, fissionClient, err := clientGen.GetFissionClient() if err != nil { - return errors.Wrap(err, "error making the fission client") + return fmt.Errorf("error making the fission client: %w", err) } kubernetesClient, err := clientGen.GetKubernetesClient() if err != nil { - return errors.Wrap(err, "error making the kube client") + return fmt.Errorf("error making the kube client: %w", err) } metricsClient, err := clientGen.GetMetricsClient() if err != nil { @@ -278,12 +277,12 @@ func StartExecutor(ctx context.Context, clientGen crd.ClientGeneratorInterface, err = crd.WaitForFunctionCRDs(ctx, logger, fissionClient) if err != nil { - return errors.Wrap(err, "error waiting for CRDs") + return fmt.Errorf("error waiting for CRDs: %w", err) } fetcherConfig, err := fetcherConfig.MakeFetcherConfig("/userfunc") if err != nil { - return errors.Wrap(err, "Error making fetcher config") + return fmt.Errorf("Error making fetcher config: %w", err) } executorInstanceID := strings.ToLower(uniuri.NewLen(8)) @@ -312,7 +311,7 @@ func StartExecutor(ctx context.Context, clientGen crd.ClientGeneratorInterface, finformerFactory, gpmInformerFactory, podSpecPatch) if err != nil { - return errors.Wrap(err, "pool manager creation failed") + return fmt.Errorf("pool manager creation failed: %w", err) } executorLabel, err = utils.GetInformerLabelByExecutor(fv1.ExecutorTypeNewdeploy) @@ -327,7 +326,7 @@ func StartExecutor(ctx context.Context, clientGen crd.ClientGeneratorInterface, finformerFactory, ndmInformerFactory, podSpecPatch) if err != nil { - return errors.Wrap(err, "new deploy manager creation failed") + return fmt.Errorf("new deploy manager creation failed: %w", err) } executorLabel, err = utils.GetInformerLabelByExecutor(fv1.ExecutorTypeContainer) @@ -341,7 +340,7 @@ func StartExecutor(ctx context.Context, clientGen crd.ClientGeneratorInterface, executorInstanceID, finformerFactory, cnmInformerFactory) if err != nil { - return errors.Wrap(err, "container manager creation failed") + return fmt.Errorf("container manager creation failed: %w", err) } executorTypes := make(map[fv1.ExecutorType]executortype.ExecutorType) diff --git a/pkg/executor/executortype/poolmgr/gp.go b/pkg/executor/executortype/poolmgr/gp.go index 4bed549b..7e695823 100644 --- a/pkg/executor/executortype/poolmgr/gp.go +++ b/pkg/executor/executortype/poolmgr/gp.go @@ -19,6 +19,7 @@ package poolmgr import ( "context" "encoding/json" + "errors" "fmt" "math" "net" @@ -28,7 +29,6 @@ import ( "time" "github.com/dchest/uniuri" - "github.com/pkg/errors" "go.uber.org/zap" appsv1 "k8s.io/api/apps/v1" apiv1 "k8s.io/api/core/v1" @@ -320,7 +320,7 @@ func (gp *GenericPool) choosePod(ctx context.Context, newLabels map[string]strin // ending retry loop when the request canceled gp.readyPodQueue.Done(key) gp.readyPodQueue.AddAfter(key, expoDelay) - return "", nil, errors.Errorf("failed to relabel pod: %s", err) + return "", nil, fmt.Errorf("failed to relabel pod: %s", err) } else if err != nil { logger.Error("failed to relabel pod", zap.Error(err), zap.String("pod", chosenPod.Name), zap.Duration("delay", expoDelay)) gp.readyPodQueue.Done(key) @@ -335,13 +335,13 @@ func (gp *GenericPool) choosePod(ctx context.Context, newLabels map[string]strin // So we have to check both of them to ensure the patch success. for k, v := range newLabels { if newPod.Labels[k] != v { - return "", nil, errors.Errorf("value of necessary labels '%s' mismatch: want '%s', get '%v'", + return "", nil, fmt.Errorf("value of necessary labels '%s' mismatch: want '%s', get '%v'", k, v, newPod.Labels[k]) } } for k, v := range annotations { if newPod.Annotations[k] != v { - return "", nil, errors.Errorf("value of necessary annotations '%s' mismatch: want '%s', get '%v'", + return "", nil, fmt.Errorf("value of necessary annotations '%s' mismatch: want '%s', get '%v'", k, v, newPod.Annotations[k]) } } @@ -415,7 +415,7 @@ func (gp *GenericPool) specializePod(ctx context.Context, pod *apiv1.Pod, fn *fv // for fetcher we don't need to create a service, just talk to the pod directly podIP := pod.Status.PodIP if len(podIP) == 0 { - return errors.Errorf("Pod %s in namespace %s has no IP", pod.ObjectMeta.Name, pod.ObjectMeta.Namespace) + return fmt.Errorf("Pod %s in namespace %s has no IP", pod.ObjectMeta.Name, pod.ObjectMeta.Namespace) } for _, cm := range fn.Spec.ConfigMaps { _, err := gp.kubernetesClient.CoreV1().ConfigMaps(gp.fnNamespace).Get(ctx, cm.Name, metav1.GetOptions{}) @@ -571,7 +571,7 @@ func (gp *GenericPool) getFuncSvc(ctx context.Context, fn *fv1.Function) (*fscac } if svc.ObjectMeta.Name != svcName { go gp.scheduleDeletePod(context.Background(), pod.ObjectMeta.Name) - return nil, errors.Errorf("sanity check failed for svc %s", svc.ObjectMeta.Name) + return nil, fmt.Errorf("sanity check failed for svc %s", svc.ObjectMeta.Name) } // the fission router isn't in the same namespace, so return a diff --git a/pkg/executor/executortype/poolmgr/gpm.go b/pkg/executor/executortype/poolmgr/gpm.go index 29289a91..df1b2c68 100644 --- a/pkg/executor/executortype/poolmgr/gpm.go +++ b/pkg/executor/executortype/poolmgr/gpm.go @@ -27,7 +27,6 @@ import ( "sync" "time" - "github.com/fission/fission/pkg/executor/metrics" "go.opentelemetry.io/otel/attribute" "go.uber.org/zap" apiv1 "k8s.io/api/core/v1" @@ -47,6 +46,7 @@ import ( "github.com/fission/fission/pkg/crd" "github.com/fission/fission/pkg/executor/executortype" "github.com/fission/fission/pkg/executor/fscache" + "github.com/fission/fission/pkg/executor/metrics" "github.com/fission/fission/pkg/executor/reaper" executorUtils "github.com/fission/fission/pkg/executor/util" fetcherConfig "github.com/fission/fission/pkg/fetcher/config" diff --git a/pkg/executor/fscache/functionServiceCache.go b/pkg/executor/fscache/functionServiceCache.go index 9873a036..0bb5a341 100644 --- a/pkg/executor/fscache/functionServiceCache.go +++ b/pkg/executor/fscache/functionServiceCache.go @@ -22,7 +22,6 @@ import ( "sync" "time" - "github.com/pkg/errors" "go.opentelemetry.io/otel/attribute" "go.uber.org/zap" apiv1 "k8s.io/api/core/v1" @@ -292,7 +291,7 @@ func (fsc *FunctionServiceCache) Add(fsvc FuncSvc) (*FuncSvc, error) { if IsNameExistError(err) { err = nil } else { - err = errors.Wrap(err, "error caching fsvc") + err = fmt.Errorf("error caching fsvc: %w", err) } return nil, err } @@ -304,7 +303,7 @@ func (fsc *FunctionServiceCache) Add(fsvc FuncSvc) (*FuncSvc, error) { if IsNameExistError(err) { err = nil } else { - err = errors.Wrap(err, "error caching fsvc by function uid") + err = fmt.Errorf("error caching fsvc by function uid: %w", err) } return nil, err } @@ -383,10 +382,6 @@ func (fsc *FunctionServiceCache) DeleteFunctionSvc(ctx context.Context, fsvc *Fu } } -func (fsc *FunctionServiceCache) SetCPUUtilization(key crd.CacheKeyURG, svcHost string, cpuUsage resource.Quantity) { - fsc.connFunctionCache.SetCPUUtilization(key, svcHost, cpuUsage) -} - // DeleteOld deletes aged function service entries from cache. func (fsc *FunctionServiceCache) DeleteOld(fsvc *FuncSvc, minAge time.Duration) (bool, error) { if time.Since(fsvc.Atime) < minAge { diff --git a/pkg/executor/metrics/metrics.go b/pkg/executor/metrics/metrics.go index 6bca3aad..b97ff924 100644 --- a/pkg/executor/metrics/metrics.go +++ b/pkg/executor/metrics/metrics.go @@ -17,8 +17,9 @@ limitations under the License. package metrics import ( - "github.com/fission/fission/pkg/utils/metrics" "github.com/prometheus/client_golang/prometheus" + + "github.com/fission/fission/pkg/utils/metrics" ) var ( diff --git a/pkg/executor/util/util_test.go b/pkg/executor/util/util_test.go index 7e148dcc..825d027a 100644 --- a/pkg/executor/util/util_test.go +++ b/pkg/executor/util/util_test.go @@ -23,10 +23,10 @@ import ( "testing" "github.com/google/go-cmp/cmp" + apiv1 "k8s.io/api/core/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" "github.com/fission/fission/pkg/utils/loggerfactory" - apiv1 "k8s.io/api/core/v1" ) func TestGetSpecFromConfigMap(t *testing.T) { diff --git a/pkg/fetcher/client/client.go b/pkg/fetcher/client/client.go index 7a9849fd..36463231 100644 --- a/pkg/fetcher/client/client.go +++ b/pkg/fetcher/client/client.go @@ -4,12 +4,12 @@ import ( "bytes" "context" "encoding/json" + "fmt" "io" "net/http" "strings" "time" - "github.com/pkg/errors" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.uber.org/zap" "golang.org/x/net/context/ctxhttp" @@ -104,7 +104,7 @@ func sendRequest(logger *zap.Logger, ctx context.Context, httpClient *http.Clien // skip retry and return directly due to context deadline exceeded if err == context.DeadlineExceeded { msg := "error specializing function pod, either increase the specialization timeout for function or check function pod log would help." - err = errors.Wrap(err, msg) + err = fmt.Errorf("%s: %w", msg, err) logger.Error(msg, zap.Error(err), zap.String("url", url)) return nil, err } diff --git a/pkg/fetcher/config/config.go b/pkg/fetcher/config/config.go index b0775a4a..f25c99d6 100644 --- a/pkg/fetcher/config/config.go +++ b/pkg/fetcher/config/config.go @@ -7,7 +7,6 @@ import ( "path/filepath" "github.com/hashicorp/go-multierror" - "github.com/pkg/errors" apiv1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -305,7 +304,7 @@ func (cfg *Config) addFetcherToPodSpecWithCommand(podSpec *apiv1.PodSpec, mainCo for _, existingContainer := range podSpec.Containers { existingContainerNames = append(existingContainerNames, existingContainer.Name) } - return errors.Errorf("could not find main container '%s' in given PodSpec. Found: %v", + return fmt.Errorf("could not find main container '%s' in given PodSpec. Found: %v", mainContainerName, existingContainerNames) } diff --git a/pkg/fetcher/fetcher.go b/pkg/fetcher/fetcher.go index 8658641e..8e6c3188 100644 --- a/pkg/fetcher/fetcher.go +++ b/pkg/fetcher/fetcher.go @@ -20,6 +20,7 @@ import ( "bytes" "context" "encoding/json" + "errors" "fmt" "io" "net/http" @@ -29,7 +30,6 @@ import ( "time" "github.com/google/uuid" - "github.com/pkg/errors" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.uber.org/zap" "golang.org/x/net/context/ctxhttp" @@ -92,21 +92,21 @@ func MakeFetcher(logger *zap.Logger, clientGen crd.ClientGeneratorInterface, sha fissionClient, err := clientGen.GetFissionClient() if err != nil { - return nil, errors.Wrap(err, "error making the fission client") + return nil, fmt.Errorf("error making the fission client: %w", err) } kubeClient, err := clientGen.GetKubernetesClient() if err != nil { - return nil, errors.Wrap(err, "error making the kube client") + return nil, fmt.Errorf("error making the kube client: %w", err) } name, err := os.ReadFile(podInfoMountDir + "/name") if err != nil { - return nil, errors.Wrap(err, "error reading pod name from downward volume") + return nil, fmt.Errorf("error reading pod name from downward volume: %w", err) } namespace, err := os.ReadFile(podInfoMountDir + "/namespace") if err != nil { - return nil, errors.Wrap(err, "error reading pod namespace from downward volume") + return nil, fmt.Errorf("error reading pod namespace from downward volume: %w", err) } hc := &http.Client{Transport: otelhttp.NewTransport(http.DefaultTransport)} @@ -140,7 +140,7 @@ func writeSecretOrConfigMap(dataMap map[string][]byte, dirPath string) error { writeFilePath := filepath.Join(dirPath, key) err := os.WriteFile(writeFilePath, val, 0750) if err != nil { - return errors.Wrapf(err, "Failed to write file %s", writeFilePath) + return fmt.Errorf("failed to write file %s: %w", writeFilePath, err) } } return nil @@ -255,7 +255,7 @@ func (fetcher *Fetcher) Fetch(ctx context.Context, pkg *fv1.Package, req Functio storePath, err := utils.SanitizeFilePath(filepath.Join(fetcher.sharedVolumePath, req.Filename), fetcher.sharedVolumePath) if err != nil { logger.Error(err.Error(), zap.String("filename", req.Filename)) - return http.StatusBadRequest, errors.New(fmt.Sprintf("%s, request: %v", err, req)) + return http.StatusBadRequest, fmt.Errorf("%s, request: %v", err, req) } // verify first if the file already exists. @@ -270,7 +270,7 @@ func (fetcher *Fetcher) Fetch(ctx context.Context, pkg *fv1.Package, req Functio tmpPath, err := utils.SanitizeFilePath(storePath+".tmp", fetcher.sharedVolumePath) if err != nil { logger.Error(err.Error(), zap.String("filename", req.Filename)) - return http.StatusBadRequest, errors.New(fmt.Sprintf("%s, request: %v", err, req)) + return http.StatusBadRequest, fmt.Errorf("%s, request: %v", err, req) } if req.FetchType == fv1.FETCH_URL { @@ -284,7 +284,7 @@ func (fetcher *Fetcher) Fetch(ctx context.Context, pkg *fv1.Package, req Functio if err != nil { e := "failed to download url" logger.Error(e, zap.Error(err), zap.String("url", req.Url)) - return http.StatusBadRequest, errors.Wrapf(err, "%s: %s", e, req.Url) + return http.StatusBadRequest, fmt.Errorf("%s: %s: %w", e, req.Url, err) } } else { var archive *fv1.Archive @@ -301,7 +301,7 @@ func (fetcher *Fetcher) Fetch(ctx context.Context, pkg *fv1.Package, req Functio zap.String("package_name", pkg.ObjectMeta.Name), zap.String("package_namespace", pkg.ObjectMeta.Namespace), zap.Any("package_build_status", pkg.Status.BuildStatus)) - return http.StatusInternalServerError, errors.New(fmt.Sprintf("%s: pkg %s.%s has a status of %s", e, pkg.ObjectMeta.Name, pkg.ObjectMeta.Namespace, pkg.Status.BuildStatus)) + return http.StatusInternalServerError, fmt.Errorf("%s: pkg %s.%s has a status of %s", e, pkg.ObjectMeta.Name, pkg.ObjectMeta.Namespace, pkg.Status.BuildStatus) } archive = &pkg.Spec.Deployment } else { @@ -315,7 +315,7 @@ func (fetcher *Fetcher) Fetch(ctx context.Context, pkg *fv1.Package, req Functio if err != nil { e := "failed to write file" logger.Error(e, zap.Error(err), zap.String("location", tmpPath)) - return http.StatusInternalServerError, errors.Wrapf(err, "%s %s", e, tmpPath) + return http.StatusInternalServerError, fmt.Errorf("%s %s: %w", e, tmpPath, err) } otelUtils.SpanTrackEvent(ctx, "archiveLiteral", otelUtils.GetAttributesForPackage(pkg)...) } else { @@ -329,7 +329,7 @@ func (fetcher *Fetcher) Fetch(ctx context.Context, pkg *fv1.Package, req Functio if err != nil { e := "failed to download url" logger.Error(e, zap.Error(err), zap.String("url", req.Url)) - return http.StatusBadRequest, errors.Wrapf(err, "%s %s", e, req.Url) + return http.StatusBadRequest, fmt.Errorf("%s %s: %w", e, req.Url, err) } // check file integrity only if checksum is not empty. @@ -338,13 +338,13 @@ func (fetcher *Fetcher) Fetch(ctx context.Context, pkg *fv1.Package, req Functio if err != nil { e := "failed to get checksum" logger.Error(e, zap.Error(err)) - return http.StatusBadRequest, errors.Wrap(err, e) + return http.StatusBadRequest, fmt.Errorf("%s: %w", e, err) } err = verifyChecksum(checksum, &archive.Checksum) if err != nil { e := "failed to verify checksum" logger.Error(e, zap.Error(err)) - return http.StatusBadRequest, errors.Wrap(err, e) + return http.StatusBadRequest, fmt.Errorf("%s: %w", e, err) } } } @@ -373,7 +373,7 @@ func (fetcher *Fetcher) Fetch(ctx context.Context, pkg *fv1.Package, req Functio zap.Error(err), zap.String("original_path", tmpPath), zap.String("rename_path", storePath)) - return http.StatusInternalServerError, err + return http.StatusInternalServerError, fmt.Errorf("error renaming file: %w", err) } otelUtils.SpanTrackEvent(ctx, "packageFetched", otelUtils.GetAttributesForPackage(pkg)...) @@ -409,7 +409,7 @@ func (fetcher *Fetcher) FetchSecretsAndCfgMaps(ctx context.Context, secrets []fv secretDir, err := utils.SanitizeFilePath(filepath.Join(fetcher.sharedSecretPath, secret.Namespace, secret.Name), fetcher.sharedSecretPath) if err != nil { logger.Error(err.Error(), zap.String("directory", secretDir), zap.String("secret_name", secret.Name), zap.String("secret_namespace", secret.Namespace)) - return http.StatusBadRequest, errors.New(fmt.Sprintf("%s, request: %v", err, secret)) + return http.StatusBadRequest, fmt.Errorf("%s, request: %v", err, secret) } err = os.MkdirAll(secretDir, os.ModeDir|0750) @@ -420,7 +420,7 @@ func (fetcher *Fetcher) FetchSecretsAndCfgMaps(ctx context.Context, secrets []fv zap.String("directory", secretDir), zap.String("secret_name", secret.Name), zap.String("secret_namespace", secret.Namespace)) - return http.StatusInternalServerError, errors.Wrapf(err, "%s: %s", e, secretDir) + return http.StatusInternalServerError, fmt.Errorf("%s: %s: %w", e, secretDir, err) } err = writeSecretOrConfigMap(data.Data, secretDir) if err != nil { @@ -461,8 +461,8 @@ func (fetcher *Fetcher) FetchSecretsAndCfgMaps(ctx context.Context, secrets []fv configDir, err := utils.SanitizeFilePath(filepath.Join(fetcher.sharedConfigPath, config.Namespace, config.Name), fetcher.sharedConfigPath) if err != nil { logger.Error(err.Error(), zap.String("directory", configDir), zap.String("config_map_name", config.Name), zap.String("config_map_namespace", config.Namespace)) - return http.StatusBadRequest, errors.New(fmt.Sprintf("%s, request: %v", err, - config)) + return http.StatusBadRequest, fmt.Errorf("%s, request: %v", err, + config) } err = os.MkdirAll(configDir, os.ModeDir|0750) @@ -473,7 +473,7 @@ func (fetcher *Fetcher) FetchSecretsAndCfgMaps(ctx context.Context, secrets []fv zap.String("directory", configDir), zap.String("config_map_name", config.Name), zap.String("config_map_namespace", config.Namespace)) - return http.StatusInternalServerError, errors.Wrapf(err, "%s: %s", e, configDir) + return http.StatusInternalServerError, fmt.Errorf("%s: %s: %w", e, configDir, err) } configMap := make(map[string][]byte) for key, val := range data.Data { @@ -617,7 +617,7 @@ func (fetcher *Fetcher) UploadHandler(w http.ResponseWriter, r *http.Request) { func (fetcher *Fetcher) rename(src string, dst string) error { err := os.Rename(src, dst) if err != nil { - return errors.Wrap(err, "failed to move file") + return fmt.Errorf("failed to move file: %w", err) } return nil } @@ -673,17 +673,17 @@ func (fetcher *Fetcher) SpecializePod(ctx context.Context, fetchReq FunctionFetc pkg, err := fetcher.getPkgInformation(ctx, fetchReq) if err != nil { - return errors.Wrap(err, "error getting package information") + return fmt.Errorf("error getting package information: %w", err) } _, err = fetcher.Fetch(ctx, pkg, fetchReq) if err != nil { - return errors.Wrap(err, "error fetching deploy package") + return fmt.Errorf("error fetching deploy package: %w", err) } _, err = fetcher.FetchSecretsAndCfgMaps(ctx, fetchReq.Secrets, fetchReq.ConfigMaps) if err != nil { - return errors.Wrap(err, "error fetching secrets/configs") + return fmt.Errorf("error fetching secrets/configs: %w", err) } // Specialize the pod @@ -695,7 +695,7 @@ func (fetcher *Fetcher) SpecializePod(ctx context.Context, fetchReq FunctionFetc loadPayload, err := json.Marshal(loadReq) if err != nil { - return errors.Wrap(err, "error encoding load request") + return fmt.Errorf("error encoding load request: %w", err) } // Instead of using "localhost", here we use "127.0.0.1" for @@ -739,10 +739,10 @@ func (fetcher *Fetcher) SpecializePod(ctx context.Context, fetchReq FunctionFetc err = ferror.MakeErrorFromHTTP(resp) } - return errors.Wrap(err, "error specializing function pod") + return fmt.Errorf("error specializing function pod: %w", err) } - return errors.Wrapf(err, "error specializing function pod after %v times", maxRetries) + return fmt.Errorf("error specializing function pod after %v times: %w", maxRetries, err) } // WsStartHandler is used to generate websocket events in Kubernetes diff --git a/pkg/fission-cli/cmd/canaryconfig/create.go b/pkg/fission-cli/cmd/canaryconfig/create.go index 40f488d3..46d9cded 100644 --- a/pkg/fission-cli/cmd/canaryconfig/create.go +++ b/pkg/fission-cli/cmd/canaryconfig/create.go @@ -17,10 +17,10 @@ limitations under the License. package canaryconfig import ( + "errors" "fmt" "time" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -57,7 +57,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) (err error) { _, fnNs, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in creating canaryconfig") + return fmt.Errorf("error in creating canaryconfig: %w", err) } incrementStep := input.Int(flagkey.CanaryWeightIncrement) failureThreshold := input.Int(flagkey.CanaryFailureThreshold) @@ -66,13 +66,13 @@ func (opts *CreateSubCommand) complete(input cli.Input) (err error) { // check for time parsing _, err = time.ParseDuration(incrementInterval) if err != nil { - return errors.Wrap(err, "error parsing time duration") + return fmt.Errorf("error parsing time duration: %w", err) } // check that the trigger exists in the same namespace. htTrigger, err := opts.Client().FissionClientSet.CoreV1().HTTPTriggers(fnNs).Get(input.Context(), ht, metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error finding http trigger referenced in the canary config") + return fmt.Errorf("error finding http trigger referenced in the canary config: %w", err) } // check that the trigger has function reference type function weights @@ -95,7 +95,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) (err error) { fnList := []string{newFunc, oldFunc} err = util.CheckFunctionExistence(input.Context(), opts.Client(), fnList, fnNs) if err != nil { - return errors.Wrap(err, "error checking functions existence") + return fmt.Errorf("error checking functions existence: %w", err) } // finally create canaryCfg in the same namespace as the functions referenced @@ -124,7 +124,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) (err error) { func (opts *CreateSubCommand) run(input cli.Input) error { _, err := opts.Client().FissionClientSet.CoreV1().CanaryConfigs(opts.canary.ObjectMeta.Namespace).Create(input.Context(), opts.canary, metav1.CreateOptions{}) if err != nil { - return errors.Wrap(err, "error creating canary config") + return fmt.Errorf("error creating canary config: %w", err) } fmt.Printf("canary config '%s' created\n", opts.canary.ObjectMeta.Name) diff --git a/pkg/fission-cli/cmd/canaryconfig/delete.go b/pkg/fission-cli/cmd/canaryconfig/delete.go index c9cd088a..820e452f 100644 --- a/pkg/fission-cli/cmd/canaryconfig/delete.go +++ b/pkg/fission-cli/cmd/canaryconfig/delete.go @@ -19,7 +19,6 @@ package canaryconfig import ( "fmt" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -39,7 +38,7 @@ func Delete(input cli.Input) error { func (opts *DeleteSubCommand) run(input cli.Input) (err error) { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceCanary) if err != nil { - return errors.Wrap(err, "error in deleting canaryConfig ") + return fmt.Errorf("error in deleting canaryConfig: %w", err) } err = opts.Client().FissionClientSet.CoreV1().CanaryConfigs(namespace).Delete(input.Context(), input.String(flagkey.CanaryName), metav1.DeleteOptions{}) @@ -47,7 +46,7 @@ func (opts *DeleteSubCommand) run(input cli.Input) (err error) { if input.Bool(flagkey.IgnoreNotFound) && util.IsNotFound(err) { return nil } - return errors.Wrap(err, "error deleting canary config") + return fmt.Errorf("error deleting canary config: %w", err) } fmt.Printf("canaryconfig '%v.%v' deleted\n", input.String(flagkey.CanaryName), namespace) diff --git a/pkg/fission-cli/cmd/canaryconfig/get.go b/pkg/fission-cli/cmd/canaryconfig/get.go index 3a34ec84..76df9a0f 100644 --- a/pkg/fission-cli/cmd/canaryconfig/get.go +++ b/pkg/fission-cli/cmd/canaryconfig/get.go @@ -21,7 +21,6 @@ import ( "os" "text/tabwriter" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -41,12 +40,12 @@ func (opts *GetSubCommand) run(input cli.Input) (err error) { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceCanary) if err != nil { - return errors.Wrap(err, "error getting canary config") + return fmt.Errorf("error getting canary config: %w", err) } canaryCfg, err := opts.Client().FissionClientSet.CoreV1().CanaryConfigs(namespace).Get(input.Context(), input.String(flagkey.CanaryName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting canary config") + return fmt.Errorf("error getting canary config: %w", err) } w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) diff --git a/pkg/fission-cli/cmd/canaryconfig/list.go b/pkg/fission-cli/cmd/canaryconfig/list.go index c4cb6d60..6c0b4540 100644 --- a/pkg/fission-cli/cmd/canaryconfig/list.go +++ b/pkg/fission-cli/cmd/canaryconfig/list.go @@ -21,7 +21,6 @@ import ( "os" "text/tabwriter" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -49,7 +48,7 @@ func (opts *ListSubCommand) do(input cli.Input) error { func (opts *ListSubCommand) complete(input cli.Input) (err error) { _, opts.namespace, err = opts.GetResourceNamespace(input, flagkey.NamespaceCanary) if err != nil { - return errors.Wrap(err, "error in listing canary config ") + return fmt.Errorf("error in listing canary config: %w", err) } return nil } @@ -62,7 +61,7 @@ func (opts *ListSubCommand) run(input cli.Input) (err error) { canaryCfgs, err := opts.Client().FissionClientSet.CoreV1().CanaryConfigs(opts.namespace).List(input.Context(), metav1.ListOptions{}) if err != nil { - return errors.Wrap(err, "error listing canary config") + return fmt.Errorf("error listing canary config: %w", err) } w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) diff --git a/pkg/fission-cli/cmd/canaryconfig/update.go b/pkg/fission-cli/cmd/canaryconfig/update.go index 808fe0a0..6d890fb0 100644 --- a/pkg/fission-cli/cmd/canaryconfig/update.go +++ b/pkg/fission-cli/cmd/canaryconfig/update.go @@ -20,7 +20,6 @@ import ( "fmt" "time" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -50,7 +49,7 @@ func (opts *UpdateSubCommand) complete(input cli.Input) (err error) { // get the current config _, ns, err := opts.GetResourceNamespace(input, flagkey.NamespaceCanary) if err != nil { - return errors.Wrap(err, "error updating canary config") + return fmt.Errorf("error updating canary config: %w", err) } incrementStep := input.Int(flagkey.CanaryWeightIncrement) failureThreshold := input.Int(flagkey.CanaryFailureThreshold) @@ -59,12 +58,12 @@ func (opts *UpdateSubCommand) complete(input cli.Input) (err error) { // check for time parsing _, err = time.ParseDuration(incrementInterval) if err != nil { - return errors.Wrap(err, "error parsing time duration") + return fmt.Errorf("error parsing time duration: %w", err) } canaryCfg, err := opts.Client().FissionClientSet.CoreV1().CanaryConfigs(ns).Get(input.Context(), input.String(flagkey.CanaryName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting canary config") + return fmt.Errorf("error getting canary config: %w", err) } var updateNeeded bool @@ -93,7 +92,7 @@ func (opts *UpdateSubCommand) complete(input cli.Input) (err error) { func (opts *UpdateSubCommand) run(input cli.Input) error { _, err := opts.Client().FissionClientSet.CoreV1().CanaryConfigs(opts.canary.ObjectMeta.Namespace).Update(input.Context(), opts.canary, metav1.UpdateOptions{}) if err != nil { - return errors.Wrap(err, "error updating canary config") + return fmt.Errorf("error updating canary config: %w", err) } fmt.Printf("canary config '%v' updated\n", opts.canary.ObjectMeta.Name) return nil diff --git a/pkg/fission-cli/cmd/environment/create.go b/pkg/fission-cli/cmd/environment/create.go index f465e451..82ef4812 100644 --- a/pkg/fission-cli/cmd/environment/create.go +++ b/pkg/fission-cli/cmd/environment/create.go @@ -20,7 +20,6 @@ import ( "fmt" "github.com/hashicorp/go-multierror" - "github.com/pkg/errors" apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -101,7 +100,7 @@ func (opts *CreateSubCommand) run(input cli.Input) (err error) { specFile := fmt.Sprintf("env-%v.yaml", opts.env.ObjectMeta.Name) err = spec.SpecSave(*opts.env, specFile, false) if err != nil { - return errors.Wrap(err, "error saving environment spec") + return fmt.Errorf("error saving environment spec: %w", err) } return nil } @@ -110,7 +109,7 @@ func (opts *CreateSubCommand) run(input cli.Input) (err error) { _, err = opts.Client().FissionClientSet.CoreV1().Environments(opts.env.Namespace).Create(input.Context(), opts.env, metav1.CreateOptions{}) if err != nil { - return errors.Wrap(err, "error creating resource") + return fmt.Errorf("error creating resource: %w", err) } fmt.Printf("environment '%v' created\n", opts.env.ObjectMeta.Name) diff --git a/pkg/fission-cli/cmd/environment/delete.go b/pkg/fission-cli/cmd/environment/delete.go index 374ea5b9..c9aa445b 100644 --- a/pkg/fission-cli/cmd/environment/delete.go +++ b/pkg/fission-cli/cmd/environment/delete.go @@ -17,9 +17,9 @@ limitations under the License. package environment import ( + "errors" "fmt" - "github.com/pkg/errors" kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -41,7 +41,7 @@ func (opts *DeleteSubCommand) do(input cli.Input) (err error) { _, currentContextNS, err := opts.GetResourceNamespace(input, flagkey.NamespaceEnvironment) if err != nil { - return errors.Wrap(err, "error creating environment") + return fmt.Errorf("error creating environment: %w", err) } console.Verbose(2, "Searching for resource in %s Namespace", currentContextNS) envName := input.String(flagkey.EnvName) @@ -49,7 +49,7 @@ func (opts *DeleteSubCommand) do(input cli.Input) (err error) { if !input.Bool(flagkey.EnvForce) { fns, err := opts.Client().FissionClientSet.CoreV1().Functions(metav1.NamespaceAll).List(input.Context(), metav1.ListOptions{}) if err != nil { - return errors.Wrap(err, "Error getting functions wrt environment.") + return fmt.Errorf("Error getting functions wrt environment.: %w", err) } for _, fn := range fns.Items { @@ -65,7 +65,7 @@ func (opts *DeleteSubCommand) do(input cli.Input) (err error) { if input.Bool(flagkey.IgnoreNotFound) && kerrors.IsNotFound(err) { return nil } - return errors.Wrap(err, "error deleting environment") + return fmt.Errorf("error deleting environment: %w", err) } fmt.Printf("environment '%s' deleted\n", envName) diff --git a/pkg/fission-cli/cmd/environment/get.go b/pkg/fission-cli/cmd/environment/get.go index 8b969d08..1bc4983b 100644 --- a/pkg/fission-cli/cmd/environment/get.go +++ b/pkg/fission-cli/cmd/environment/get.go @@ -21,7 +21,6 @@ import ( "os" "text/tabwriter" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -41,12 +40,12 @@ func (opts *GetSubCommand) do(input cli.Input) (err error) { _, currentNS, err := opts.GetResourceNamespace(input, flagkey.NamespaceEnvironment) if err != nil { - return errors.Wrap(err, "error creating environment") + return fmt.Errorf("error creating environment: %w", err) } env, err := opts.Client().FissionClientSet.CoreV1().Environments(currentNS).Get(input.Context(), input.String(flagkey.EnvName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting environment") + return fmt.Errorf("error getting environment: %w", err) } w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) diff --git a/pkg/fission-cli/cmd/environment/list.go b/pkg/fission-cli/cmd/environment/list.go index 8300db23..d72e9e22 100644 --- a/pkg/fission-cli/cmd/environment/list.go +++ b/pkg/fission-cli/cmd/environment/list.go @@ -21,7 +21,6 @@ import ( "os" "text/tabwriter" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -41,7 +40,7 @@ func (opts *ListSubCommand) do(input cli.Input) (err error) { _, currentNS, err := opts.GetResourceNamespace(input, flagkey.NamespaceEnvironment) if err != nil { - return errors.Wrap(err, "error creating environment") + return fmt.Errorf("error creating environment: %w", err) } if input.Bool(flagkey.AllNamespaces) { @@ -50,7 +49,7 @@ func (opts *ListSubCommand) do(input cli.Input) (err error) { response, err := opts.Client().FissionClientSet.CoreV1().Environments(currentNS).List(input.Context(), metav1.ListOptions{}) if err != nil { - return errors.Wrap(err, "error listing environments") + return fmt.Errorf("error listing environments: %w", err) } envs := response.Items diff --git a/pkg/fission-cli/cmd/environment/pods.go b/pkg/fission-cli/cmd/environment/pods.go index 2eca539c..39210ece 100644 --- a/pkg/fission-cli/cmd/environment/pods.go +++ b/pkg/fission-cli/cmd/environment/pods.go @@ -21,7 +21,6 @@ import ( "os" "text/tabwriter" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -44,12 +43,12 @@ func (opts *ListPodsSubCommand) do(input cli.Input) (err error) { _, currentNS, err := opts.GetResourceNamespace(input, flagkey.NamespaceEnvironment) if err != nil { - return errors.Wrap(err, "error creating environment") + return fmt.Errorf("error creating environment: %w", err) } _, err = opts.Client().FissionClientSet.CoreV1().Environments(currentNS).Get(input.Context(), input.String(flagkey.EnvName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting environment") + return fmt.Errorf("error getting environment: %w", err) } // label selector @@ -65,7 +64,7 @@ func (opts *ListPodsSubCommand) do(input cli.Input) (err error) { LabelSelector: labels.Set(selector).AsSelector().String(), }) if err != nil { - return errors.Wrap(err, "error listing environments") + return fmt.Errorf("error listing environments: %w", err) } w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0) diff --git a/pkg/fission-cli/cmd/environment/update.go b/pkg/fission-cli/cmd/environment/update.go index c95a60af..e4827035 100644 --- a/pkg/fission-cli/cmd/environment/update.go +++ b/pkg/fission-cli/cmd/environment/update.go @@ -17,11 +17,12 @@ limitations under the License. package environment import ( + "errors" "fmt" "strconv" "github.com/hashicorp/go-multierror" - "github.com/pkg/errors" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -57,11 +58,11 @@ func (opts *UpdateSubCommand) complete(input cli.Input) (err error) { _, currentContextNS, err := opts.GetResourceNamespace(input, flagkey.NamespaceEnvironment) if err != nil { - return errors.Wrap(err, "error creating environment") + return fmt.Errorf("error creating environment: %w", err) } env, err := opts.Client().FissionClientSet.CoreV1().Environments(currentContextNS).Get(input.Context(), input.String(flagkey.EnvName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error finding environment") + return fmt.Errorf("error finding environment: %w", err) } env, err = updateExistingEnvironmentWithCmd(env, input) @@ -89,13 +90,13 @@ func (opts *UpdateSubCommand) run(input cli.Input) error { specFile := fmt.Sprintf("env-%s.yaml", m.Name) err = spec.SpecSave(*opts.env, specFile, true) if err != nil { - return errors.Wrap(err, "error saving environment spec") + return fmt.Errorf("error saving environment spec: %w", err) } return nil } enew, err := opts.Client().FissionClientSet.CoreV1().Environments(opts.env.ObjectMeta.Namespace).Update(input.Context(), opts.env, metav1.UpdateOptions{}) if err != nil { - return errors.Wrap(err, "error updating environment") + return fmt.Errorf("error updating environment: %w", err) } fmt.Printf("environment '%v' updated\n", enew.ObjectMeta.Name) @@ -151,7 +152,7 @@ func updateExistingEnvironmentWithCmd(env *fv1.Environment, input cli.Input) (*f mincpu := input.Int(flagkey.RuntimeMincpu) cpuRequest, err := resource.ParseQuantity(strconv.Itoa(mincpu) + "m") if err != nil { - e = multierror.Append(e, errors.Wrap(err, "Failed to parse mincpu")) + e = multierror.Append(e, fmt.Errorf("failed to parse mincpu: %w", err)) } env.Spec.Resources.Requests[v1.ResourceCPU] = cpuRequest } @@ -160,7 +161,7 @@ func updateExistingEnvironmentWithCmd(env *fv1.Environment, input cli.Input) (*f maxcpu := input.Int(flagkey.RuntimeMaxcpu) cpuLimit, err := resource.ParseQuantity(strconv.Itoa(maxcpu) + "m") if err != nil { - e = multierror.Append(e, errors.Wrap(err, "Failed to parse maxcpu")) + e = multierror.Append(e, fmt.Errorf("Failed to parse maxcpu: %w", err)) } env.Spec.Resources.Limits[v1.ResourceCPU] = cpuLimit } @@ -169,7 +170,7 @@ func updateExistingEnvironmentWithCmd(env *fv1.Environment, input cli.Input) (*f minmem := input.Int(flagkey.RuntimeMinmemory) memRequest, err := resource.ParseQuantity(strconv.Itoa(minmem) + "Mi") if err != nil { - e = multierror.Append(e, errors.Wrap(err, "Failed to parse minmemory")) + e = multierror.Append(e, fmt.Errorf("Failed to parse minmemory: %w", err)) } env.Spec.Resources.Requests[v1.ResourceMemory] = memRequest } @@ -178,7 +179,7 @@ func updateExistingEnvironmentWithCmd(env *fv1.Environment, input cli.Input) (*f maxmem := input.Int(flagkey.RuntimeMaxmemory) memLimit, err := resource.ParseQuantity(strconv.Itoa(maxmem) + "Mi") if err != nil { - e = multierror.Append(e, errors.Wrap(err, "Failed to parse maxmemory")) + e = multierror.Append(e, fmt.Errorf("Failed to parse maxmemory: %w", err)) } env.Spec.Resources.Limits[v1.ResourceMemory] = memLimit } diff --git a/pkg/fission-cli/cmd/function/create.go b/pkg/fission-cli/cmd/function/create.go index c9aca0d3..beaa44f1 100644 --- a/pkg/fission-cli/cmd/function/create.go +++ b/pkg/fission-cli/cmd/function/create.go @@ -17,9 +17,9 @@ limitations under the License. package function import ( + "errors" "fmt" - "github.com/pkg/errors" asv2 "k8s.io/api/autoscaling/v2" apiv1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -67,7 +67,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { userProvidedNS, fnNamespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error retrieving namespace information") + return fmt.Errorf("error retrieving namespace information: %w", err) } // user wants a spec, create a yaml file with package and function @@ -93,7 +93,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { fnTimeout := input.Int(flagkey.FnExecutionTimeout) if fnTimeout <= 0 { - return errors.Errorf("--%v must be greater than 0", flagkey.FnExecutionTimeout) + return fmt.Errorf("--%v must be greater than 0", flagkey.FnExecutionTimeout) } fnIdleTimeout := input.Int(flagkey.FnIdleTimeout) @@ -119,7 +119,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { cfgMapNames := input.StringSlice(flagkey.FnCfgMap) if input.String(flagkey.FnExecutorType) == string(fv1.ExecutorTypeContainer) { - return errors.Errorf("this command does not support creating function of executor type container. Check `fission function run-container --help`") + return fmt.Errorf("this command does not support creating function of executor type container. Check `fission function run-container --help`") } invokeStrategy, err := getInvokeStrategy(input, nil) @@ -141,7 +141,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { fr, err := spec.ReadSpecs(specDir, specIgnore, false) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error reading spec in '%s'", specDir)) + return fmt.Errorf("error reading spec in '%s': %w", specDir, err) } obj := fr.SpecExists(&fv1.Package{ // In case of spec I might or might not have the `fnNamespace`, how will I get pkg objectMeta here. @@ -151,7 +151,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { }, }, true, false) if obj == nil { - return errors.Errorf("please create package %s spec file with namespace %s before referencing it", pkgName, userProvidedNS) + return fmt.Errorf("please create package %s spec file with namespace %s before referencing it", pkgName, userProvidedNS) } pkg = obj.(*fv1.Package) @@ -160,7 +160,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { // use existing package pkg, err = opts.Client().FissionClientSet.CoreV1().Packages(fnNamespace).Get(input.Context(), pkgName, metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, fmt.Sprintf("read package in '%s' in Namespace: %s. Package needs to be present in the same namespace as function", pkgName, fnNamespace)) + return fmt.Errorf("read package in '%s' in Namespace: %s. Package needs to be present in the same namespace as function: %w", pkgName, fnNamespace, err) } pkgMetadata = &pkg.ObjectMeta } @@ -180,7 +180,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { fr, err := spec.ReadSpecs(specDir, specIgnore, false) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error reading spec in '%s'", specDir)) + return fmt.Errorf("error reading spec in '%s': %w", specDir, err) } exists, err := fr.ExistsInSpecs(fv1.Environment{ ObjectMeta: metav1.ObjectMeta{ @@ -201,7 +201,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { if e, ok := err.(ferror.Error); ok && e.Code == ferror.ErrorNotFound { console.Warn(fmt.Sprintf("Environment \"%s\" does not exist. Please create the environment before executing the function. \nFor example: `fission env create --name %s --envns %s --image `\n", envName, envName, fnNamespace)) } else { - return errors.Wrap(err, "error retrieving environment information") + return fmt.Errorf("error retrieving environment information: %w", err) } } } @@ -228,7 +228,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { pkgMetadata, err = _package.CreatePackage(input, opts.Client(), pkgName, fnNamespace, envName, srcArchiveFiles, deployArchiveFiles, buildcmd, specDir, opts.specFile, noZip, userProvidedNS) if err != nil { - return errors.Wrap(err, "error creating package") + return fmt.Errorf("error creating package: %w", err) } } @@ -244,7 +244,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { if k8serrors.IsNotFound(err) { console.Warn(fmt.Sprintf("Secret %s not found in Namespace: %s. Secret needs to be present in the same namespace as function", secretName, fnNamespace)) } else { - return errors.Wrapf(err, "error checking secret %s", secretName) + return fmt.Errorf("error checking secret %s: %w", secretName, err) } } newSecret := fv1.SecretReference{ @@ -274,7 +274,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { if k8serrors.IsNotFound(err) { console.Warn(fmt.Sprintf("ConfigMap %s not found in Namespace: %s. ConfigMap needs to be present in the same namespace as function", cfgMapName, fnNamespace)) } else { - return errors.Wrapf(err, "error checking configmap %s", cfgMapName) + return fmt.Errorf("error checking configmap %s: %w", cfgMapName, err) } } newCfgMap := fv1.ConfigMapReference{ @@ -368,14 +368,14 @@ func (opts *CreateSubCommand) run(input cli.Input) error { if input.Bool(flagkey.SpecSave) { err := spec.SpecSave(*opts.function, opts.specFile, false) if err != nil { - return errors.Wrap(err, "error saving function spec") + return fmt.Errorf("error saving function spec: %w", err) } return nil } _, err := opts.Client().FissionClientSet.CoreV1().Functions(opts.function.ObjectMeta.Namespace).Create(input.Context(), opts.function, metav1.CreateOptions{}) if err != nil { - return errors.Wrap(err, "error creating function") + return fmt.Errorf("error creating function: %w", err) } fmt.Printf("function '%s' created\n", opts.function.ObjectMeta.Name) @@ -420,7 +420,7 @@ func (opts *CreateSubCommand) run(input cli.Input) error { } _, err = opts.Client().FissionClientSet.CoreV1().HTTPTriggers(opts.function.ObjectMeta.Namespace).Create(input.Context(), ht, metav1.CreateOptions{}) if err != nil { - return errors.Wrap(err, "error creating HTTP trigger") + return fmt.Errorf("error creating HTTP trigger: %w", err) } fmt.Printf("route created: %s %s -> %s\n", methods, triggerUrl, opts.function.ObjectMeta.Name) @@ -490,7 +490,7 @@ func getExecutorType(input cli.Input) (executorType fv1.ExecutorType, err error) case string(fv1.ExecutorTypeContainer): executorType = fv1.ExecutorTypeContainer default: - err = errors.Errorf("executor type must be one of '%v', '%v' or '%v'", fv1.ExecutorTypePoolmgr, fv1.ExecutorTypeNewdeploy, fv1.ExecutorTypeContainer) + err = fmt.Errorf("executor type must be one of '%v', '%v' or '%v'", fv1.ExecutorTypePoolmgr, fv1.ExecutorTypeNewdeploy, fv1.ExecutorTypeContainer) } return executorType, err } @@ -501,7 +501,7 @@ func getExecutionStrategy(fnExecutor fv1.ExecutorType, input cli.Input) (strateg if input.IsSet(flagkey.FnSpecializationTimeout) { specializationTimeout = input.Int(flagkey.FnSpecializationTimeout) if specializationTimeout < fv1.DefaultSpecializationTimeOut { - return nil, errors.Errorf("%v must be greater than or equal to 120 seconds", flagkey.FnSpecializationTimeout) + return nil, fmt.Errorf("%v must be greater than or equal to 120 seconds", flagkey.FnSpecializationTimeout) } } @@ -529,7 +529,7 @@ func getExecutionStrategy(fnExecutor fv1.ExecutorType, input cli.Input) (strateg if input.IsSet(flagkey.ReplicasMaxscale) { maxScale = input.Int(flagkey.ReplicasMaxscale) if maxScale <= 0 { - return nil, errors.Errorf("%v must be greater than 0", flagkey.ReplicasMaxscale) + return nil, fmt.Errorf("%v must be greater than 0", flagkey.ReplicasMaxscale) } } @@ -573,7 +573,7 @@ func updateExecutionStrategy(input cli.Input, existingExecutionStrategy *fv1.Exe case string(fv1.ExecutorTypeContainer): fnExecutor = fv1.ExecutorTypeContainer default: - return nil, errors.Errorf("executor type must be one of '%v', %v or '%v'", fv1.ExecutorTypePoolmgr, fv1.ExecutorTypeNewdeploy, fv1.ExecutorTypeContainer) + return nil, fmt.Errorf("executor type must be one of '%v', %v or '%v'", fv1.ExecutorTypePoolmgr, fv1.ExecutorTypeNewdeploy, fv1.ExecutorTypeContainer) } } @@ -582,7 +582,7 @@ func updateExecutionStrategy(input cli.Input, existingExecutionStrategy *fv1.Exe if input.IsSet(flagkey.FnSpecializationTimeout) { specializationTimeout = input.Int(flagkey.FnSpecializationTimeout) if specializationTimeout < fv1.DefaultSpecializationTimeOut { - return nil, errors.Errorf("%v must be greater than or equal to 120 seconds", flagkey.FnSpecializationTimeout) + return nil, fmt.Errorf("%v must be greater than or equal to 120 seconds", flagkey.FnSpecializationTimeout) } } else { if specializationTimeout < fv1.DefaultSpecializationTimeOut { @@ -618,7 +618,7 @@ func updateExecutionStrategy(input cli.Input, existingExecutionStrategy *fv1.Exe if input.IsSet(flagkey.ReplicasMaxscale) { maxScale = input.Int(flagkey.ReplicasMaxscale) if maxScale <= 0 { - return nil, errors.Errorf("%v must be greater than 0", flagkey.ReplicasMaxscale) + return nil, fmt.Errorf("%v must be greater than 0", flagkey.ReplicasMaxscale) } } else { if maxScale <= 0 { @@ -655,7 +655,7 @@ func updateExecutionStrategy(input cli.Input, existingExecutionStrategy *fv1.Exe func getTargetCPU(input cli.Input) (int, error) { targetCPU := input.Int(flagkey.RuntimeTargetcpu) if targetCPU <= 0 || targetCPU > 100 { - return 0, errors.Errorf("%v must be a value between 1 - 100", flagkey.RuntimeTargetcpu) + return 0, fmt.Errorf("%v must be a value between 1 - 100", flagkey.RuntimeTargetcpu) } return targetCPU, nil } diff --git a/pkg/fission-cli/cmd/function/delete.go b/pkg/fission-cli/cmd/function/delete.go index 2f2d1fb2..f4e52a9e 100644 --- a/pkg/fission-cli/cmd/function/delete.go +++ b/pkg/fission-cli/cmd/function/delete.go @@ -19,7 +19,6 @@ package function import ( "fmt" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -40,7 +39,7 @@ func (opts *DeleteSubCommand) do(input cli.Input) error { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } m := &metav1.ObjectMeta{ Name: input.String(flagkey.FnName), @@ -52,7 +51,7 @@ func (opts *DeleteSubCommand) do(input cli.Input) error { if input.Bool(flagkey.IgnoreNotFound) && util.IsNotFound(err) { return nil } - return errors.Wrap(err, fmt.Sprintf("delete function '%s'", m.Name)) + return fmt.Errorf("delete function '%s': %w", m.Name, err) } fmt.Printf("function '%s' deleted\n", m.Name) diff --git a/pkg/fission-cli/cmd/function/get.go b/pkg/fission-cli/cmd/function/get.go index 25135b93..8af4d4db 100644 --- a/pkg/fission-cli/cmd/function/get.go +++ b/pkg/fission-cli/cmd/function/get.go @@ -17,9 +17,9 @@ limitations under the License. package function import ( + "fmt" "os" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -38,16 +38,16 @@ func Get(input cli.Input) error { func (opts *GetSubCommand) do(input cli.Input) error { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in get function ") + return fmt.Errorf("error in get function : %w", err) } fn, err := opts.Client().FissionClientSet.CoreV1().Functions(namespace).Get(input.Context(), input.String(flagkey.FnName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting function") + return fmt.Errorf("error getting function: %w", err) } pkg, err := opts.Client().FissionClientSet.CoreV1().Packages(fn.Spec.Package.PackageRef.Namespace).Get(input.Context(), fn.Spec.Package.PackageRef.Name, metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting package") + return fmt.Errorf("error getting package: %w", err) } os.Stdout.Write(pkg.Spec.Deployment.Literal) diff --git a/pkg/fission-cli/cmd/function/getmeta.go b/pkg/fission-cli/cmd/function/getmeta.go index 936fa5ef..62133e0c 100644 --- a/pkg/fission-cli/cmd/function/getmeta.go +++ b/pkg/fission-cli/cmd/function/getmeta.go @@ -19,7 +19,6 @@ package function import ( "fmt" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -38,12 +37,12 @@ func GetMeta(input cli.Input) error { func (opts *GetMetaSubCommand) do(input cli.Input) error { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in getting meta function ") + return fmt.Errorf("error in getting meta function : %w", err) } fn, err := opts.Client().FissionClientSet.CoreV1().Functions(namespace).Get(input.Context(), input.String(flagkey.FnName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting function") + return fmt.Errorf("error getting function: %w", err) } fmt.Printf("Name: %v\n", fn.ObjectMeta.Name) diff --git a/pkg/fission-cli/cmd/function/list.go b/pkg/fission-cli/cmd/function/list.go index 5ef7a7ce..4d15b642 100644 --- a/pkg/fission-cli/cmd/function/list.go +++ b/pkg/fission-cli/cmd/function/list.go @@ -22,7 +22,6 @@ import ( "strings" "text/tabwriter" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -41,7 +40,7 @@ func List(input cli.Input) error { func (opts *ListSubCommand) do(input cli.Input) error { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in listing function ") + return fmt.Errorf("error in listing function : %w", err) } if input.Bool(flagkey.AllNamespaces) { @@ -50,7 +49,7 @@ func (opts *ListSubCommand) do(input cli.Input) error { fns, err := opts.Client().FissionClientSet.CoreV1().Functions(namespace).List(input.Context(), metav1.ListOptions{}) if err != nil { - return errors.Wrap(err, "error listing functions") + return fmt.Errorf("error listing functions: %w", err) } w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) diff --git a/pkg/fission-cli/cmd/function/log.go b/pkg/fission-cli/cmd/function/log.go index e6cd726a..70c8fa91 100644 --- a/pkg/fission-cli/cmd/function/log.go +++ b/pkg/fission-cli/cmd/function/log.go @@ -19,11 +19,11 @@ package function import ( "bytes" "context" + "fmt" "io" "os" "time" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -44,7 +44,7 @@ func Log(input cli.Input) error { func (opts *LogSubCommand) do(input cli.Input) error { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in logs for function ") + return fmt.Errorf("error in logs for function : %w", err) } dbType := input.String(flagkey.FnLogDBType) @@ -60,7 +60,7 @@ func (opts *LogSubCommand) do(input cli.Input) error { f, err := opts.Client().FissionClientSet.CoreV1().Functions(namespace).Get(input.Context(), input.String(flagkey.FnName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting function") + return fmt.Errorf("error getting function: %w", err) } logDBOptions := logdb.LogDBOptions{ @@ -70,7 +70,7 @@ func (opts *LogSubCommand) do(input cli.Input) error { // request the controller to establish a proxy server to the database. logDB, err := logdb.GetLogDB(dbType, input.Context(), logDBOptions) if err != nil { - return errors.Wrapf(err, "failed to get log from %s", dbType) + return fmt.Errorf("failed to get log from %s: %w", dbType, err) } requestChan := make(chan struct{}) diff --git a/pkg/fission-cli/cmd/function/pods.go b/pkg/fission-cli/cmd/function/pods.go index 5bfe8138..9d91ee19 100644 --- a/pkg/fission-cli/cmd/function/pods.go +++ b/pkg/fission-cli/cmd/function/pods.go @@ -21,7 +21,6 @@ import ( "os" "text/tabwriter" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -45,12 +44,12 @@ func (opts *ListPodsSubCommand) do(input cli.Input) error { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in finding pod for function ") + return fmt.Errorf("error in finding pod for function : %w", err) } // validate function _, err = opts.Client().FissionClientSet.CoreV1().Functions(namespace).Get(input.Context(), input.String(flagkey.FnName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting function") + return fmt.Errorf("error getting function: %w", err) } selector := map[string]string{ @@ -64,7 +63,7 @@ func (opts *ListPodsSubCommand) do(input cli.Input) error { LabelSelector: labels.Set(selector).AsSelector().String(), }) if err != nil { - return errors.Wrap(err, "error listing environments") + return fmt.Errorf("error listing environments: %w", err) } w := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0) diff --git a/pkg/fission-cli/cmd/function/run_container.go b/pkg/fission-cli/cmd/function/run_container.go index 60b02d5c..2f1bbe1e 100644 --- a/pkg/fission-cli/cmd/function/run_container.go +++ b/pkg/fission-cli/cmd/function/run_container.go @@ -20,7 +20,8 @@ import ( "fmt" "strings" - "github.com/pkg/errors" + "errors" + apiv1 "k8s.io/api/core/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -57,7 +58,7 @@ func (opts *RunContainerSubCommand) complete(input cli.Input) error { _, fnNamespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in running container for function ") + return fmt.Errorf("error in running container for function : %w", err) } // user wants a spec, create a yaml file with package and function @@ -80,7 +81,7 @@ func (opts *RunContainerSubCommand) complete(input cli.Input) error { fnTimeout := input.Int(flagkey.FnExecutionTimeout) if fnTimeout <= 0 { - return errors.Errorf("--%v must be greater than 0", flagkey.FnExecutionTimeout) + return fmt.Errorf("--%v must be greater than 0", flagkey.FnExecutionTimeout) } fnIdleTimeout := input.Int(flagkey.FnIdleTimeout) @@ -132,7 +133,7 @@ func (opts *RunContainerSubCommand) complete(input cli.Input) error { if kerrors.IsNotFound(err) { console.Warn(fmt.Sprintf("Secret %s not found in Namespace: %s. Secret needs to be present in the same namespace as function", secretName, fnNamespace)) } else { - return errors.Wrapf(err, "error checking secret %s", secretName) + return fmt.Errorf("error checking secret %s: %w", secretName, err) } } } @@ -156,7 +157,7 @@ func (opts *RunContainerSubCommand) complete(input cli.Input) error { if kerrors.IsNotFound(err) { console.Warn(fmt.Sprintf("ConfigMap %s not found in Namespace: %s. ConfigMap needs to be present in the same namespace as function", cfgMapName, fnNamespace)) } else { - return errors.Wrapf(err, "error checking configmap %s", cfgMapName) + return fmt.Errorf("error checking configmap %s: %w", cfgMapName, err) } } } @@ -228,14 +229,14 @@ func (opts *RunContainerSubCommand) run(input cli.Input) error { if input.Bool(flagkey.SpecSave) { err := spec.SpecSave(*opts.function, opts.specFile, false) if err != nil { - return errors.Wrap(err, "error saving function spec") + return fmt.Errorf("error saving function spec: %w", err) } return nil } _, err := opts.Client().FissionClientSet.CoreV1().Functions(opts.function.ObjectMeta.Namespace).Create(input.Context(), opts.function, metav1.CreateOptions{}) if err != nil { - return errors.Wrap(err, "error creating function") + return fmt.Errorf("error creating function: %w", err) } fmt.Printf("function '%v' created\n", opts.function.ObjectMeta.Name) diff --git a/pkg/fission-cli/cmd/function/test.go b/pkg/fission-cli/cmd/function/test.go index ce224750..45dc5dc0 100644 --- a/pkg/fission-cli/cmd/function/test.go +++ b/pkg/fission-cli/cmd/function/test.go @@ -27,7 +27,8 @@ import ( "strings" "time" - "github.com/pkg/errors" + "errors" + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.opentelemetry.io/otel" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -53,12 +54,12 @@ func (opts *TestSubCommand) do(input cli.Input) error { fnName := input.String(flagkey.FnName) _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in testing function ") + return fmt.Errorf("error in testing function : %w", err) } function, err := opts.Client().FissionClientSet.CoreV1().Functions(namespace).Get(input.Context(), fnName, metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, fmt.Sprintf("read function '%s'", fnName)) + return fmt.Errorf("read function '%s': %w", fnName, err) } m := &metav1.ObjectMeta{ @@ -68,7 +69,7 @@ func (opts *TestSubCommand) do(input cli.Input) error { routerURL, err := util.GetRouterURL(input.Context(), opts.Client()) if err != nil { - return errors.Wrap(err, "error getting router URL") + return fmt.Errorf("error getting router URL: %w", err) } fnURI := util.UrlForFunction(m.Name, m.Namespace) if input.IsSet(flagkey.FnSubPath) { @@ -146,7 +147,7 @@ func (opts *TestSubCommand) do(input cli.Input) error { body, err := io.ReadAll(resp.Body) if err != nil { - return errors.Wrap(err, "error reading response from function") + return fmt.Errorf("error reading response from function: %w", err) } if resp.StatusCode < 400 { @@ -186,7 +187,7 @@ func doHTTPRequest(ctx context.Context, url string, headers []string, method, bo req, err := http.NewRequest(method, url, strings.NewReader(body)) if err != nil { - return nil, errors.Wrap(err, "error creating HTTP request") + return nil, fmt.Errorf("error creating HTTP request: %w", err) } accesstoken, ok := os.LookupEnv(util.FISSION_AUTH_TOKEN) @@ -213,7 +214,7 @@ func doHTTPRequest(ctx context.Context, url string, headers []string, method, bo hc := &http.Client{Transport: otelhttp.NewTransport(http.DefaultTransport)} resp, err := hc.Do(req.WithContext(ctx)) if err != nil { - return nil, errors.Wrap(err, "error executing HTTP request") + return nil, fmt.Errorf("error executing HTTP request: %w", err) } if console.Verbosity >= 2 { diff --git a/pkg/fission-cli/cmd/function/update.go b/pkg/fission-cli/cmd/function/update.go index 594f8cb6..5e8d193f 100644 --- a/pkg/fission-cli/cmd/function/update.go +++ b/pkg/fission-cli/cmd/function/update.go @@ -19,7 +19,6 @@ package function import ( "fmt" - "github.com/pkg/errors" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -55,7 +54,7 @@ func (opts *UpdateSubCommand) complete(input cli.Input) error { fnName := input.String(flagkey.FnName) _, fnNamespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in updating function ") + return fmt.Errorf("error in updating function : %w", err) } if input.Bool(flagkey.SpecSave) { opts.specFile = fmt.Sprintf("function-%s.yaml", fnName) @@ -63,7 +62,7 @@ func (opts *UpdateSubCommand) complete(input cli.Input) error { function, err := opts.Client().FissionClientSet.CoreV1().Functions(fnNamespace).Get(input.Context(), input.String(flagkey.FnName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, fmt.Sprintf("read function '%v'", fnName)) + return fmt.Errorf("read function '%v': %w", fnName, err) } envName := input.String(flagkey.FnEnvironmentName) @@ -135,7 +134,7 @@ func (opts *UpdateSubCommand) complete(input cli.Input) error { if input.IsSet(flagkey.FnExecutionTimeout) { fnTimeout := input.Int(flagkey.FnExecutionTimeout) if fnTimeout <= 0 { - return errors.Errorf("--%v must be greater than 0", flagkey.FnExecutionTimeout) + return fmt.Errorf("--%v must be greater than 0", flagkey.FnExecutionTimeout) } function.Spec.FunctionTimeout = fnTimeout } @@ -184,23 +183,23 @@ func (opts *UpdateSubCommand) complete(input cli.Input) error { pkg, err := opts.Client().FissionClientSet.CoreV1().Packages(fnNamespace).Get(input.Context(), pkgName, metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, fmt.Sprintf("read package '%v.%v'. Pkg should be present in the same ns as the function", pkgName, fnNamespace)) + return fmt.Errorf("read package '%v.%v'. Pkg should be present in the same ns as the function: %w", pkgName, fnNamespace, err) } forceUpdate := input.Bool(flagkey.PkgForce) fnList, err := _package.GetFunctionsByPackage(input.Context(), opts.Client(), pkg.ObjectMeta.Name, pkg.ObjectMeta.Namespace) if err != nil { - return errors.Wrap(err, "error getting function list") + return fmt.Errorf("error getting function list: %w", err) } if !forceUpdate && len(fnList) > 1 { - return errors.Errorf("Package is used by multiple functions, use --%v to force update", flagkey.PkgForce) + return fmt.Errorf("package is used by multiple functions, use --%v to force update", flagkey.PkgForce) } newPkgMeta, err := _package.UpdatePackage(input, opts.Client(), opts.specFile, pkg) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error updating package '%v'", pkgName)) + return fmt.Errorf("error updating package '%v': %w", pkgName, err) } // the package resource version of function has been changed, @@ -217,7 +216,7 @@ func (opts *UpdateSubCommand) complete(input cli.Input) error { } err = _package.UpdateFunctionPackageResourceVersion(input.Context(), opts.Client(), newPkgMeta, fns...) if err != nil { - return errors.Wrap(err, "error updating function package reference resource version") + return fmt.Errorf("error updating function package reference resource version: %w", err) } } @@ -255,13 +254,13 @@ func (opts *UpdateSubCommand) run(input cli.Input) error { } err = spec.SpecSave(*opts.function, opts.specFile, false) if err != nil { - return errors.Wrap(err, "error saving function spec") + return fmt.Errorf("error saving function spec: %w", err) } return nil } _, err := opts.Client().FissionClientSet.CoreV1().Functions(opts.function.Namespace).Update(input.Context(), opts.function, metav1.UpdateOptions{}) if err != nil { - return errors.Wrap(err, "error updating function") + return fmt.Errorf("error updating function: %w", err) } fmt.Printf("Function '%v' updated\n", opts.function.ObjectMeta.Name) diff --git a/pkg/fission-cli/cmd/function/update_container.go b/pkg/fission-cli/cmd/function/update_container.go index 9b34db1e..477b507f 100644 --- a/pkg/fission-cli/cmd/function/update_container.go +++ b/pkg/fission-cli/cmd/function/update_container.go @@ -20,7 +20,6 @@ import ( "fmt" "strings" - "github.com/pkg/errors" apiv1 "k8s.io/api/core/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -55,13 +54,13 @@ func (opts *UpdateContainerSubCommand) complete(input cli.Input) error { _, fnNamespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in updating container for function ") + return fmt.Errorf("error in updating container for function : %w", err) } function, err := opts.Client().FissionClientSet.CoreV1().Functions(fnNamespace).Get(input.Context(), input.String(flagkey.FnName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, fmt.Sprintf("read function '%v'", fnName)) + return fmt.Errorf("read function '%v': %w", fnName, err) } if fv1.ExecutorTypeContainer != function.Spec.InvokeStrategy.ExecutionStrategy.ExecutorType { return fmt.Errorf("executor type for function is not %s", fv1.ExecutorTypeContainer) @@ -122,7 +121,7 @@ func (opts *UpdateContainerSubCommand) complete(input cli.Input) error { if input.IsSet(flagkey.FnExecutionTimeout) { fnTimeout := input.Int(flagkey.FnExecutionTimeout) if fnTimeout <= 0 { - return errors.Errorf("--%v must be greater than 0", flagkey.FnExecutionTimeout) + return fmt.Errorf("--%v must be greater than 0", flagkey.FnExecutionTimeout) } function.Spec.FunctionTimeout = fnTimeout } @@ -146,7 +145,7 @@ func (opts *UpdateContainerSubCommand) complete(input cli.Input) error { function.Spec.Resources = *resReqs if len(function.Spec.PodSpec.Containers) > 1 { - return errors.Errorf("function %s has more than one container, only one container is supported", fnName) + return fmt.Errorf("function %s has more than one container, only one container is supported", fnName) } container := &function.Spec.PodSpec.Containers[0] if imageName != "" { @@ -154,7 +153,7 @@ func (opts *UpdateContainerSubCommand) complete(input cli.Input) error { } if port != 0 { if len(container.Ports) > 1 { - return errors.Errorf("function %s has more than one port, only one port is supported", fnName) + return fmt.Errorf("function %s has more than one port, only one port is supported", fnName) } container.Ports = []apiv1.ContainerPort{ { @@ -186,7 +185,7 @@ func (opts *UpdateContainerSubCommand) complete(input cli.Input) error { func (opts *UpdateContainerSubCommand) run(input cli.Input) error { _, err := opts.Client().FissionClientSet.CoreV1().Functions(opts.function.Namespace).Update(input.Context(), opts.function, metav1.UpdateOptions{}) if err != nil { - return errors.Wrap(err, "error updating function") + return fmt.Errorf("error updating function: %w", err) } return nil diff --git a/pkg/fission-cli/cmd/httptrigger/create.go b/pkg/fission-cli/cmd/httptrigger/create.go index d61c8f9e..96b0b89b 100644 --- a/pkg/fission-cli/cmd/httptrigger/create.go +++ b/pkg/fission-cli/cmd/httptrigger/create.go @@ -22,7 +22,8 @@ import ( "os" "strings" - "github.com/pkg/errors" + "errors" + kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -75,7 +76,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { userProvidedNS, fnNamespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } triggerUrl := input.String(flagkey.HtUrl) @@ -125,7 +126,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { specIgnore := util.GetSpecIgnore(input) fr, err := spec.ReadSpecs(specDir, specIgnore, false) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error reading spec in '%v'", specDir)) + return fmt.Errorf("error reading spec in '%v': %w", specDir, err) } for _, fn := range functionList { exists, err := fr.ExistsInSpecs(fv1.Function{ @@ -167,7 +168,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { input.StringSlice(flagkey.HtIngressAnnotation), input.String(flagkey.HtIngressRule), input.String(flagkey.HtIngressTLS), fallbackURL, nil) if err != nil { - return errors.Wrap(err, "error parsing ingress configuration") + return fmt.Errorf("error parsing ingress configuration: %w", err) } opts.trigger = &fv1.HTTPTrigger{ @@ -198,7 +199,7 @@ func (opts *CreateSubCommand) run(input cli.Input) error { specFile := fmt.Sprintf("route-%v.yaml", opts.trigger.ObjectMeta.Name) err := spec.SpecSave(*opts.trigger, specFile, false) if err != nil { - return errors.Wrap(err, "error saving HTTP trigger spec") + return fmt.Errorf("error saving HTTP trigger spec: %w", err) } return nil } @@ -206,12 +207,12 @@ func (opts *CreateSubCommand) run(input cli.Input) error { // Ensure we don't have a duplicate HTTP route defined (same URL and method) err := util.CheckHTTPTriggerDuplicates(input.Context(), opts.Client(), opts.trigger) if err != nil { - return errors.Wrap(err, "Error while creating HTTP Trigger") + return fmt.Errorf("Error while creating HTTP Trigger: %w", err) } _, err = opts.Client().FissionClientSet.CoreV1().HTTPTriggers(opts.trigger.Namespace).Create(input.Context(), opts.trigger, metav1.CreateOptions{}) if err != nil { - return errors.Wrap(err, "create HTTP trigger") + return fmt.Errorf("create HTTP trigger: %w", err) } fmt.Printf("trigger '%v' created\n", opts.trigger.ObjectMeta.Name) diff --git a/pkg/fission-cli/cmd/httptrigger/delete.go b/pkg/fission-cli/cmd/httptrigger/delete.go index 5f578923..99174deb 100644 --- a/pkg/fission-cli/cmd/httptrigger/delete.go +++ b/pkg/fission-cli/cmd/httptrigger/delete.go @@ -20,7 +20,6 @@ import ( "fmt" "github.com/hashicorp/go-multierror" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -53,14 +52,14 @@ func (opts *DeleteSubCommand) complete(input cli.Input) (err error) { opts.triggerName = input.String(flagkey.HtName) opts.functionName = input.String(flagkey.HtFnName) if len(opts.triggerName) == 0 && len(opts.functionName) == 0 { - return errors.Errorf("need --%v or --%v", flagkey.HtName, flagkey.HtFnName) + return fmt.Errorf("need --%v or --%v", flagkey.HtName, flagkey.HtFnName) } else if len(opts.triggerName) > 0 && len(opts.functionName) > 0 { - return errors.Errorf("need either of --%v or --%v and not both arguments", flagkey.HtName, flagkey.HtFnName) + return fmt.Errorf("need either of --%v or --%v and not both arguments", flagkey.HtName, flagkey.HtFnName) } _, opts.namespace, err = opts.GetResourceNamespace(input, flagkey.NamespaceTrigger) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } return nil } @@ -68,7 +67,7 @@ func (opts *DeleteSubCommand) complete(input cli.Input) (err error) { func (opts *DeleteSubCommand) run(input cli.Input) error { triggers, err := opts.Client().FissionClientSet.CoreV1().HTTPTriggers(opts.namespace).List(input.Context(), metav1.ListOptions{}) if err != nil { - return errors.Wrap(err, "error getting HTTP trigger list") + return fmt.Errorf("error getting HTTP trigger list: %w", err) } var triggersToDelete []string @@ -99,7 +98,7 @@ func (opts *DeleteSubCommand) run(input cli.Input) error { if input.Bool(flagkey.IgnoreNotFound) && util.IsNotFound(err) { return nil } - return errors.Wrap(errs.ErrorOrNil(), "error deleting trigger(s)") + return fmt.Errorf("error deleting trigger(s): %w", errs.ErrorOrNil()) } return nil diff --git a/pkg/fission-cli/cmd/httptrigger/get.go b/pkg/fission-cli/cmd/httptrigger/get.go index c7f56e97..5d91fcad 100644 --- a/pkg/fission-cli/cmd/httptrigger/get.go +++ b/pkg/fission-cli/cmd/httptrigger/get.go @@ -22,7 +22,6 @@ import ( "strings" "text/tabwriter" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -46,12 +45,12 @@ func (opts *GetSubCommand) do(input cli.Input) error { func (opts *GetSubCommand) run(input cli.Input) (err error) { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } ht, err := opts.Client().FissionClientSet.CoreV1().HTTPTriggers(namespace).Get(input.Context(), input.String(flagkey.HtName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting http trigger") + return fmt.Errorf("error getting http trigger: %w", err) } printHtSummary([]fv1.HTTPTrigger{*ht}) diff --git a/pkg/fission-cli/cmd/httptrigger/list.go b/pkg/fission-cli/cmd/httptrigger/list.go index de9b965a..80ae31ca 100644 --- a/pkg/fission-cli/cmd/httptrigger/list.go +++ b/pkg/fission-cli/cmd/httptrigger/list.go @@ -17,7 +17,8 @@ limitations under the License. package httptrigger import ( - "github.com/pkg/errors" + "fmt" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -42,7 +43,7 @@ func (opts *ListSubCommand) run(input cli.Input) (err error) { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceTrigger) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } if input.Bool(flagkey.AllNamespaces) { @@ -51,7 +52,7 @@ func (opts *ListSubCommand) run(input cli.Input) (err error) { hts, err := opts.Client().FissionClientSet.CoreV1().HTTPTriggers(namespace).List(input.Context(), v1.ListOptions{}) if err != nil { - return errors.Wrap(err, "error listing HTTP triggers") + return fmt.Errorf("error listing HTTP triggers: %w", err) } filterFunctionName := input.String(flagkey.HtFnName) diff --git a/pkg/fission-cli/cmd/httptrigger/update.go b/pkg/fission-cli/cmd/httptrigger/update.go index 275de994..643ea7c8 100644 --- a/pkg/fission-cli/cmd/httptrigger/update.go +++ b/pkg/fission-cli/cmd/httptrigger/update.go @@ -20,7 +20,8 @@ import ( "fmt" "strings" - "github.com/pkg/errors" + "errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -54,12 +55,12 @@ func (opts *UpdateSubCommand) complete(input cli.Input) (err error) { _, triggerNamespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceTrigger) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } ht, err := opts.Client().FissionClientSet.CoreV1().HTTPTriggers(triggerNamespace).Get(input.Context(), htName, metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting HTTP trigger") + return fmt.Errorf("error getting HTTP trigger: %w", err) } triggerUrl := input.String(flagkey.HtUrl) @@ -113,7 +114,7 @@ func (opts *UpdateSubCommand) complete(input cli.Input) (err error) { // set function reference functionRef, err := setHtFunctionRef(functionList, functionWeightsList) if err != nil { - return errors.Wrap(err, "error setting function weight") + return fmt.Errorf("error setting function weight: %w", err) } ht.Spec.FunctionReference = *functionRef @@ -138,7 +139,7 @@ func (opts *UpdateSubCommand) complete(input cli.Input) (err error) { input.StringSlice(flagkey.HtIngressAnnotation), input.String(flagkey.HtIngressRule), input.String(flagkey.HtIngressTLS), fallbackURL, &ht.Spec.IngressConfig) if err != nil { - return errors.Wrap(err, "error parsing ingress configuration") + return fmt.Errorf("error parsing ingress configuration: %w", err) } ht.Spec.IngressConfig = *ingress } @@ -157,18 +158,18 @@ func (opts *UpdateSubCommand) run(input cli.Input) error { specFile := fmt.Sprintf("route-%s.yaml", opts.trigger.ObjectMeta.Name) err = spec.SpecSave(*opts.trigger, specFile, true) if err != nil { - return errors.Wrap(err, "error saving HTTP trigger spec") + return fmt.Errorf("error saving HTTP trigger spec: %w", err) } return nil } err := util.CheckHTTPTriggerDuplicates(input.Context(), opts.Client(), opts.trigger) if err != nil { - return errors.Wrap(err, "Error while creating HTTP Trigger") + return fmt.Errorf("Error while creating HTTP Trigger: %w", err) } _, err = opts.Client().FissionClientSet.CoreV1().HTTPTriggers(opts.trigger.ObjectMeta.Namespace).Update(input.Context(), opts.trigger, metav1.UpdateOptions{}) if err != nil { - return errors.Wrap(err, "error updating the HTTP trigger") + return fmt.Errorf("error updating the HTTP trigger: %w", err) } fmt.Printf("trigger '%v' updated\n", opts.trigger.ObjectMeta.Name) return nil diff --git a/pkg/fission-cli/cmd/kubewatch/create.go b/pkg/fission-cli/cmd/kubewatch/create.go index 81a4e883..1c9333dc 100644 --- a/pkg/fission-cli/cmd/kubewatch/create.go +++ b/pkg/fission-cli/cmd/kubewatch/create.go @@ -19,7 +19,6 @@ package kubewatch import ( "fmt" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -59,7 +58,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { _, namespace, err := opts.GetResourceNamespace(input, flagkey.KwNamespace) if err != nil { - return errors.Wrap(err, "error in listing function ") + return fmt.Errorf("error in listing function : %w", err) } objType := input.String(flagkey.KwObjType) @@ -69,7 +68,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { specIgnore := util.GetSpecIgnore(input) fr, err := spec.ReadSpecs(specDir, specIgnore, false) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error reading spec in '%v'", specDir)) + return fmt.Errorf("error reading spec in '%v': %w", specDir, err) } exists, err := fr.ExistsInSpecs(fv1.Function{ @@ -117,14 +116,14 @@ func (opts *CreateSubCommand) run(input cli.Input) error { specFile := fmt.Sprintf("kubewatch-%v.yaml", opts.watcher.ObjectMeta.Name) err := spec.SpecSave(*opts.watcher, specFile, false) if err != nil { - return errors.Wrap(err, "error saving kubewatch spec") + return fmt.Errorf("error saving kubewatch spec: %w", err) } return nil } _, err := opts.Client().FissionClientSet.CoreV1().KubernetesWatchTriggers(opts.watcher.ObjectMeta.Namespace).Create(input.Context(), opts.watcher, metav1.CreateOptions{}) if err != nil { - return errors.Wrap(err, "error creating kubewatch") + return fmt.Errorf("error creating kubewatch: %w", err) } fmt.Printf("trigger '%v' created\n", opts.watcher.ObjectMeta.Name) diff --git a/pkg/fission-cli/cmd/kubewatch/delete.go b/pkg/fission-cli/cmd/kubewatch/delete.go index 912b4a66..07f6266e 100644 --- a/pkg/fission-cli/cmd/kubewatch/delete.go +++ b/pkg/fission-cli/cmd/kubewatch/delete.go @@ -19,7 +19,6 @@ package kubewatch import ( "fmt" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -50,7 +49,7 @@ func (opts *DeleteSubCommand) complete(input cli.Input) (err error) { opts.name = input.String(flagkey.KwName) _, opts.namespace, err = opts.GetResourceNamespace(input, flagkey.NamespaceTrigger) if err != nil { - return errors.Wrap(err, "error in deleting kubewatch") + return fmt.Errorf("error in deleting kubewatch: %w", err) } return nil } @@ -61,7 +60,7 @@ func (opts *DeleteSubCommand) run(input cli.Input) error { if input.Bool(flagkey.IgnoreNotFound) && util.IsNotFound(err) { return nil } - return errors.Wrap(err, "error deleting kubewatch") + return fmt.Errorf("error deleting kubewatch: %w", err) } fmt.Printf("trigger '%v' deleted\n", opts.name) diff --git a/pkg/fission-cli/cmd/kubewatch/list.go b/pkg/fission-cli/cmd/kubewatch/list.go index a0e9d19d..517b69f2 100644 --- a/pkg/fission-cli/cmd/kubewatch/list.go +++ b/pkg/fission-cli/cmd/kubewatch/list.go @@ -21,7 +21,6 @@ import ( "os" "text/tabwriter" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "github.com/fission/fission/pkg/apis/core/v1" @@ -50,7 +49,7 @@ func (opts *ListSubCommand) do(input cli.Input) error { func (opts *ListSubCommand) complete(input cli.Input) (err error) { _, opts.namespace, err = opts.GetResourceNamespace(input, flagkey.NamespaceTrigger) if err != nil { - return errors.Wrap(err, "error listing kubewatchers") + return fmt.Errorf("error listing kubewatchers: %w", err) } return nil } @@ -63,7 +62,7 @@ func (opts *ListSubCommand) run(input cli.Input) (err error) { ws, err = opts.Client().FissionClientSet.CoreV1().KubernetesWatchTriggers(opts.namespace).List(input.Context(), metav1.ListOptions{}) if err != nil { - return errors.Wrap(err, "error listing kubewatchers") + return fmt.Errorf("error listing kubewatchers: %w", err) } w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) diff --git a/pkg/fission-cli/cmd/mqtrigger/create.go b/pkg/fission-cli/cmd/mqtrigger/create.go index 28cbbe92..bde3d974 100644 --- a/pkg/fission-cli/cmd/mqtrigger/create.go +++ b/pkg/fission-cli/cmd/mqtrigger/create.go @@ -19,7 +19,8 @@ package mqtrigger import ( "fmt" - "github.com/pkg/errors" + "errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -60,7 +61,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { userProvidedNS, fnNamespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } mqtKind := input.String(flagkey.MqtKind) @@ -130,7 +131,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) error { specIgnore := util.GetSpecIgnore(input) fr, err := spec.ReadSpecs(specDir, specIgnore, false) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error reading spec in '%v'", specDir)) + return fmt.Errorf("error reading spec in '%v': %w", specDir, err) } exists, err := fr.ExistsInSpecs(fv1.Function{ @@ -201,14 +202,14 @@ func (opts *CreateSubCommand) run(input cli.Input) error { specFile := fmt.Sprintf("mqtrigger-%v.yaml", opts.trigger.ObjectMeta.Name) err := spec.SpecSave(*opts.trigger, specFile, false) if err != nil { - return errors.Wrap(err, "error saving message queue trigger spec") + return fmt.Errorf("error saving message queue trigger spec: %w", err) } return nil } _, err := opts.Client().FissionClientSet.CoreV1().MessageQueueTriggers(opts.trigger.ObjectMeta.Namespace).Create(input.Context(), opts.trigger, metav1.CreateOptions{}) if err != nil { - return errors.Wrap(err, "create message queue trigger") + return fmt.Errorf("create message queue trigger: %w", err) } fmt.Printf("trigger '%s' created\n", opts.trigger.ObjectMeta.Name) @@ -218,7 +219,7 @@ func (opts *CreateSubCommand) run(input cli.Input) error { func checkMQTopicAvailability(mqType fv1.MessageQueueType, mqtKind string, topics ...string) error { for _, t := range topics { if len(t) > 0 && !validator.IsValidTopic((string)(mqType), t, mqtKind) { - return errors.Errorf("invalid topic for %s: %s", mqType, t) + return fmt.Errorf("invalid topic for %s: %s", mqType, t) } } return nil diff --git a/pkg/fission-cli/cmd/mqtrigger/delete.go b/pkg/fission-cli/cmd/mqtrigger/delete.go index 3302357c..8f071b36 100644 --- a/pkg/fission-cli/cmd/mqtrigger/delete.go +++ b/pkg/fission-cli/cmd/mqtrigger/delete.go @@ -19,7 +19,6 @@ package mqtrigger import ( "fmt" - "github.com/pkg/errors" kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -49,7 +48,7 @@ func (opts *DeleteSubCommand) complete(input cli.Input) (err error) { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceTrigger) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } opts.metadata = &metav1.ObjectMeta{ @@ -65,7 +64,7 @@ func (opts *DeleteSubCommand) run(input cli.Input) error { if input.Bool(flagkey.IgnoreNotFound) && kerrors.IsNotFound(err) { return nil } - return errors.Wrap(err, "error deleting message queue trigger") + return fmt.Errorf("error deleting message queue trigger: %w", err) } fmt.Printf("trigger '%v' deleted\n", opts.metadata.Name) diff --git a/pkg/fission-cli/cmd/mqtrigger/list.go b/pkg/fission-cli/cmd/mqtrigger/list.go index 0e30339e..a42109b6 100644 --- a/pkg/fission-cli/cmd/mqtrigger/list.go +++ b/pkg/fission-cli/cmd/mqtrigger/list.go @@ -21,7 +21,6 @@ import ( "os" "text/tabwriter" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -49,7 +48,7 @@ func (opts *ListSubCommand) do(input cli.Input) error { func (opts *ListSubCommand) complete(input cli.Input) (err error) { _, opts.namespace, err = opts.GetResourceNamespace(input, flagkey.NamespaceTrigger) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } return nil } @@ -62,7 +61,7 @@ func (opts *ListSubCommand) run(input cli.Input) (err error) { mqts, err := opts.Client().FissionClientSet.CoreV1().MessageQueueTriggers(opts.namespace).List(input.Context(), metav1.ListOptions{}) if err != nil { - return errors.Wrap(err, "error listing message queue triggers") + return fmt.Errorf("error listing message queue triggers: %w", err) } w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) diff --git a/pkg/fission-cli/cmd/mqtrigger/update.go b/pkg/fission-cli/cmd/mqtrigger/update.go index e40f8af1..0fef4e65 100644 --- a/pkg/fission-cli/cmd/mqtrigger/update.go +++ b/pkg/fission-cli/cmd/mqtrigger/update.go @@ -19,7 +19,8 @@ package mqtrigger import ( "fmt" - "github.com/pkg/errors" + "errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -51,12 +52,12 @@ func (opts *UpdateSubCommand) do(input cli.Input) error { func (opts *UpdateSubCommand) complete(input cli.Input) (err error) { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceTrigger) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } mqt, err := opts.Client().FissionClientSet.CoreV1().MessageQueueTriggers(namespace).Get(input.Context(), input.String(flagkey.MqtName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting message queue trigger") + return fmt.Errorf("error getting message queue trigger: %w", err) } topic := input.String(flagkey.MqtTopic) @@ -158,13 +159,13 @@ func (opts *UpdateSubCommand) run(input cli.Input) error { specFile := fmt.Sprintf("mqtrigger-%s.yaml", opts.trigger.ObjectMeta.Name) err = spec.SpecSave(*opts.trigger, specFile, true) if err != nil { - return errors.Wrap(err, "error saving message queue trigger spec") + return fmt.Errorf("error saving message queue trigger spec: %w", err) } return nil } _, err := opts.Client().FissionClientSet.CoreV1().MessageQueueTriggers(opts.trigger.ObjectMeta.Namespace).Update(input.Context(), opts.trigger, metav1.UpdateOptions{}) if err != nil { - return errors.Wrap(err, "error updating message queue trigger") + return fmt.Errorf("error updating message queue trigger: %w", err) } fmt.Printf("message queue trigger '%v' updated\n", opts.trigger.ObjectMeta.Name) diff --git a/pkg/fission-cli/cmd/package/create.go b/pkg/fission-cli/cmd/package/create.go index aa59936c..2a789875 100644 --- a/pkg/fission-cli/cmd/package/create.go +++ b/pkg/fission-cli/cmd/package/create.go @@ -23,7 +23,6 @@ import ( "time" "github.com/dchest/uniuri" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -56,7 +55,7 @@ func (opts *CreateSubCommand) run(input cli.Input) error { pkgName := input.String(flagkey.PkgName) if len(pkgName) == 0 { if input.Bool(flagkey.SpecSave) && len(input.String(flagkey.PkgName)) == 0 { - return errors.Errorf("--%v is necessary when creating spec file", flagkey.PkgName) + return fmt.Errorf("--%v is necessary when creating spec file", flagkey.PkgName) } else { console.Warn(fmt.Sprintf("--%v will be soon marked as required flag, see 'help' for details", flagkey.HtName)) } @@ -83,7 +82,7 @@ func (opts *CreateSubCommand) run(input cli.Input) error { } if len(srcArchiveFiles) == 0 && len(deployArchiveFiles) == 0 { - return errors.Errorf("need --%v or --%v or --%v argument", flagkey.PkgCode, flagkey.PkgSrcArchive, flagkey.PkgDeployArchive) + return fmt.Errorf("need --%v or --%v or --%v argument", flagkey.PkgCode, flagkey.PkgSrcArchive, flagkey.PkgDeployArchive) } var specDir, specFile string @@ -91,14 +90,14 @@ func (opts *CreateSubCommand) run(input cli.Input) error { if input.Bool(flagkey.SpecSave) { // since package CRD created using --spec, not validate by k8s. So we need to validate it and make sure package name is not more than 63 characters. if len(pkgName) > 63 { - return errors.Errorf("error creating package: package name %v, must be no more than 63 characters", pkgName) + return fmt.Errorf("error creating package: package name %v, must be no more than 63 characters", pkgName) } specDir = util.GetSpecDir(input) specIgnore := util.GetSpecIgnore(input) fr, err := spec.ReadSpecs(specDir, specIgnore, false) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error reading spec in '%v'", specDir)) + return fmt.Errorf("error reading spec in '%v': %w", specDir, err) } exists, err := fr.ExistsInSpecs(fv1.Environment{ ObjectMeta: metav1.ObjectMeta{ @@ -155,7 +154,7 @@ func CreatePackage(input cli.Input, client cmd.Client, pkgName string, pkgNamesp } deployment, err := CreateArchive(client, input, deployArchiveFiles, noZip, insecure, deployChecksum, specDir, specFile) if err != nil { - return nil, errors.Wrap(err, "error creating deploy archive") + return nil, fmt.Errorf("error creating deploy archive: %w", err) } pkgSpec.Deployment = *deployment if len(pkgName) == 0 { @@ -165,7 +164,7 @@ func CreatePackage(input cli.Input, client cmd.Client, pkgName string, pkgNamesp if len(srcArchiveFiles) > 0 { source, err := CreateArchive(client, input, srcArchiveFiles, false, insecure, srcChecksum, specDir, specFile) if err != nil { - return nil, errors.Wrap(err, "error creating source archive") + return nil, fmt.Errorf("error creating source archive: %w", err) } pkgSpec.Source = *source pkgStatus = fv1.BuildStatusPending // set package build status to pending @@ -202,7 +201,7 @@ func CreatePackage(input cli.Input, client cmd.Client, pkgName string, pkgNamesp // if a package with the same spec exists, don't create a new spec file fr, err := spec.ReadSpecs(util.GetSpecDir(input), util.GetSpecIgnore(input), false) if err != nil { - return nil, errors.Wrap(err, "error reading specs") + return nil, fmt.Errorf("error reading specs: %w", err) } obj := fr.SpecExists(pkg, true, true) @@ -214,7 +213,7 @@ func CreatePackage(input cli.Input, client cmd.Client, pkgName string, pkgNamesp err = spec.SpecSave(*pkg, specFile, false) if err != nil { - return nil, errors.Wrap(err, "error saving package spec") + return nil, fmt.Errorf("error saving package spec: %w", err) } return &pkg.ObjectMeta, nil } else { @@ -222,7 +221,7 @@ func CreatePackage(input cli.Input, client cmd.Client, pkgName string, pkgNamesp pkgMetadata, err := client.FissionClientSet.CoreV1().Packages(pkgNamespace).Create(input.Context(), pkg, metav1.CreateOptions{}) if err != nil { - return nil, errors.Wrap(err, "error creating package") + return nil, fmt.Errorf("error creating package: %w", err) } fmt.Printf("Package '%v' created\n", pkgMetadata.GetName()) return &pkgMetadata.ObjectMeta, nil diff --git a/pkg/fission-cli/cmd/package/delete.go b/pkg/fission-cli/cmd/package/delete.go index a6e1d5da..2c6b4408 100644 --- a/pkg/fission-cli/cmd/package/delete.go +++ b/pkg/fission-cli/cmd/package/delete.go @@ -20,7 +20,8 @@ import ( "context" "fmt" - "github.com/pkg/errors" + "errors" + kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -61,7 +62,7 @@ func (opts *DeleteSubCommand) complete(input cli.Input) (err error) { opts.force = input.Bool(flagkey.PkgForce) if len(opts.name) == 0 && !opts.deleteOrphans { - return errors.Errorf("need --%v or --%v flag", flagkey.PkgName, flagkey.PkgOrphan) + return fmt.Errorf("need --%v or --%v flag", flagkey.PkgName, flagkey.PkgOrphan) } return nil @@ -74,7 +75,7 @@ func (opts *DeleteSubCommand) run(input cli.Input) error { if input.Bool(flagkey.IgnoreNotFound) && kerrors.IsNotFound(err) { return nil } - return errors.Wrap(err, "find package") + return fmt.Errorf("find package: %w", err) } fnList, err := GetFunctionsByPackage(input.Context(), opts.Client(), opts.name, opts.namespace) @@ -96,7 +97,7 @@ func (opts *DeleteSubCommand) run(input cli.Input) error { if opts.deleteOrphans { err := deleteOrphanPkgs(input.Context(), opts.Client(), opts.namespace) if err != nil { - return errors.Wrap(err, "deleting orphan packages") + return fmt.Errorf("deleting orphan packages: %w", err) } fmt.Println("Orphan packages deleted") } @@ -114,7 +115,7 @@ func deleteOrphanPkgs(ctx context.Context, client cmd.Client, pkgNamespace strin for _, pkg := range pkgList.Items { fnList, err := GetFunctionsByPackage(ctx, client, pkg.ObjectMeta.Name, pkgNamespace) if err != nil { - return errors.Wrap(err, fmt.Sprintf("get functions sharing package %s", pkg.ObjectMeta.Name)) + return fmt.Errorf("get functions sharing package %v: %w", pkg.ObjectMeta.Name, err) } if len(fnList) == 0 { err = deletePackage(ctx, client, pkg.ObjectMeta.Name, pkgNamespace) diff --git a/pkg/fission-cli/cmd/package/get.go b/pkg/fission-cli/cmd/package/get.go index 1f42bfb9..073b575a 100644 --- a/pkg/fission-cli/cmd/package/get.go +++ b/pkg/fission-cli/cmd/package/get.go @@ -18,10 +18,10 @@ package _package import ( "bytes" + "fmt" "io" "os" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -88,7 +88,7 @@ func (opts *GetSubCommand) run(input cli.Input) error { readCloser, err := pkgutil.DownloadStrorageURL(input.Context(), opts.Client(), archive.URL) if err != nil { - return errors.Wrapf(err, "error downloading from storage service url: %s", archive.URL) + return fmt.Errorf("error downloading from storage service url: %s: %w", archive.URL, err) } defer readCloser.Close() diff --git a/pkg/fission-cli/cmd/package/info.go b/pkg/fission-cli/cmd/package/info.go index fe75a3e7..b04b8d78 100644 --- a/pkg/fission-cli/cmd/package/info.go +++ b/pkg/fission-cli/cmd/package/info.go @@ -17,9 +17,9 @@ limitations under the License. package _package import ( + "fmt" "os" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -60,7 +60,7 @@ func (opts *InfoSubCommand) complete(input cli.Input) (err error) { func (opts *InfoSubCommand) run(input cli.Input) error { pkg, err := opts.Client().FissionClientSet.CoreV1().Packages(opts.namespace).Get(input.Context(), opts.name, metav1.GetOptions{}) if err != nil { - return errors.Wrapf(err, "error finding package %s", opts.name) + return fmt.Errorf("error finding package %s: %w", opts.name, err) } pkgutil.PrintPackageSummary(os.Stdout, pkg) diff --git a/pkg/fission-cli/cmd/package/list.go b/pkg/fission-cli/cmd/package/list.go index ac872c28..3a95e110 100644 --- a/pkg/fission-cli/cmd/package/list.go +++ b/pkg/fission-cli/cmd/package/list.go @@ -23,7 +23,6 @@ import ( "text/tabwriter" "time" - "github.com/pkg/errors" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -87,7 +86,7 @@ func (opts *ListSubCommand) run(input cli.Input) (err error) { if opts.listOrphans { fnList, err := GetFunctionsByPackage(input.Context(), opts.Client(), pkg.ObjectMeta.Name, pkg.ObjectMeta.Namespace) if err != nil { - return errors.Wrap(err, fmt.Sprintf("get functions sharing package %s", pkg.ObjectMeta.Name)) + return fmt.Errorf("get functions sharing package %v: %w", pkg.ObjectMeta.Name, err) } if len(fnList) > 0 { show = false diff --git a/pkg/fission-cli/cmd/package/package.go b/pkg/fission-cli/cmd/package/package.go index 7067653a..e524ea63 100644 --- a/pkg/fission-cli/cmd/package/package.go +++ b/pkg/fission-cli/cmd/package/package.go @@ -24,9 +24,10 @@ import ( "path/filepath" "strings" + "errors" + "github.com/dchest/uniuri" "github.com/hashicorp/go-multierror" - "github.com/pkg/errors" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -54,7 +55,7 @@ func CreateArchive(client cmd.Client, input cli.Input, includeFiles []string, no if len(specFile) > 0 { rootDir, err = filepath.Abs(specDir + "/..") if err != nil { - return nil, errors.Wrapf(err, "error getting root directory of spec directory") + return nil, fmt.Errorf("error getting root directory of spec directory: %w", err) } } errs := utils.MultiErrorWithFormat() @@ -75,24 +76,24 @@ func CreateArchive(client cmd.Client, input cli.Input, includeFiles []string, no // Get files from inputs as number of files decide next steps absPath, err := filepath.Abs(path) if err != nil { - errs = multierror.Append(errs, errors.Wrapf(err, "error converting path to the absolute path \"%v\"", path)) + errs = multierror.Append(errs, fmt.Errorf("error converting path to the absolute path \"%v\": %w", path, err)) continue } if !strings.HasPrefix(absPath, rootDir) { - errs = multierror.Append(errs, errors.Errorf("The files (%v) should be put under the same parent directory (%v) of spec directory; otherwise, the archive will be empty when applying spec files", path, rootDir)) + errs = multierror.Append(errs, fmt.Errorf("The files (%v) should be put under the same parent directory (%v) of spec directory; otherwise, the archive will be empty when applying spec files", path, rootDir)) continue } path := filepath.Join(rootDir, path) files, err := utils.FindAllGlobs(path) if err != nil { - errs = multierror.Append(errs, errors.Wrap(err, "error finding all globs")) + errs = multierror.Append(errs, fmt.Errorf("error finding all globs: %w", err)) continue } if len(files) == 0 { - errs = multierror.Append(errs, errors.Errorf("Error finding any files with path \"%v\"", path)) + errs = multierror.Append(errs, fmt.Errorf("Error finding any files with path \"%v\"", path)) } } @@ -127,12 +128,12 @@ func CreateArchive(client cmd.Client, input cli.Input, includeFiles []string, no file := filepath.Join(tmpDir, uuid.NewString()) err = utils.DownloadUrl(input.Context(), http.DefaultClient, fileURL, file) if err != nil { - return nil, errors.Wrap(err, "error downloading file from the given URL") + return nil, fmt.Errorf("error downloading file from the given URL: %w", err) } csum, err = utils.GetFileChecksum(file) if err != nil { - return nil, errors.Wrap(err, "error generating file SHA256 checksum") + return nil, fmt.Errorf("error generating file SHA256 checksum: %w", err) } } @@ -160,7 +161,7 @@ func CreateArchive(client cmd.Client, input cli.Input, includeFiles []string, no specIgnore := util.GetSpecIgnore(input) fr, err := spec.ReadSpecs(specDir, specIgnore, false) if err != nil { - return nil, errors.Wrap(err, "error reading specs") + return nil, fmt.Errorf("error reading specs: %w", err) } obj := fr.SpecExists(aus, true, true) @@ -172,7 +173,7 @@ func CreateArchive(client cmd.Client, input cli.Input, includeFiles []string, no // save the uploadspec err := spec.SpecSave(*aus, specFile, false) if err != nil { - return nil, errors.Wrap(err, "error saving archive spec") + return nil, fmt.Errorf("error saving archive spec: %w", err) } } } @@ -208,14 +209,14 @@ func makeArchiveFile(ctx context.Context, archiveNameHint string, archiveInput [ // Get files from inputs as number of files decide next steps files, err := utils.FindAllGlobs(archiveInput...) if err != nil { - return "", errors.Wrap(err, "error finding all globs") + return "", fmt.Errorf("error finding all globs: %w", err) } // We have one file; if it's a zip file, no need to archive it if len(files) == 1 { // make sure it exists if _, err := os.Stat(files[0]); err != nil { - return "", errors.Wrapf(err, "open input file %v", files[0]) + return "", fmt.Errorf("open input file %v: %w", files[0], err) } // if it's an existing zip file OR we're not supposed to zip it, don't do anything @@ -227,12 +228,12 @@ func makeArchiveFile(ctx context.Context, archiveNameHint string, archiveInput [ // For anything else, create a new archive tmpDir, err := utils.GetTempDir() if err != nil { - return "", errors.Wrap(err, "error create temporary archive directory") + return "", fmt.Errorf("error create temporary archive directory: %w", err) } archivePath, err := utils.MakeZipArchiveWithGlobs(ctx, filepath.Join(tmpDir, archiveFileName), archiveInput...) if err != nil { - return "", errors.Wrap(err, "create archive file") + return "", fmt.Errorf("create archive file: %w", err) } return archivePath, nil diff --git a/pkg/fission-cli/cmd/package/rebuild.go b/pkg/fission-cli/cmd/package/rebuild.go index b40400e1..56415f40 100644 --- a/pkg/fission-cli/cmd/package/rebuild.go +++ b/pkg/fission-cli/cmd/package/rebuild.go @@ -19,7 +19,6 @@ package _package import ( "fmt" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -58,17 +57,17 @@ func (opts *RebuildSubCommand) complete(input cli.Input) (err error) { func (opts *RebuildSubCommand) run(input cli.Input) error { pkg, err := opts.Client().FissionClientSet.CoreV1().Packages(opts.namespace).Get(input.Context(), opts.name, metav1.GetOptions{}) if err != nil { - return errors.Wrapf(err, "package %s not found", opts.name) + return fmt.Errorf("package %s not found: %w", opts.name, err) } if pkg.Status.BuildStatus != fv1.BuildStatusFailed { - return errors.New(fmt.Sprintf("Package %v is not in %v state.", - pkg.ObjectMeta.Name, fv1.BuildStatusFailed)) + return fmt.Errorf("Package %v is not in %v state.", + pkg.ObjectMeta.Name, fv1.BuildStatusFailed) } _, err = updatePackageStatus(input.Context(), opts.Client(), pkg, fv1.BuildStatusPending) if err != nil { - return errors.Wrap(err, "update package status") + return fmt.Errorf("update package status: %w", err) } fmt.Printf("Retrying build for pkg %v. Use \"fission pkg info --name %v\" to view status.\n", pkg.ObjectMeta.Name, pkg.ObjectMeta.Name) diff --git a/pkg/fission-cli/cmd/package/update.go b/pkg/fission-cli/cmd/package/update.go index 366ed3e4..6ce87007 100644 --- a/pkg/fission-cli/cmd/package/update.go +++ b/pkg/fission-cli/cmd/package/update.go @@ -21,8 +21,9 @@ import ( "fmt" "time" + "errors" + "github.com/hashicorp/go-multierror" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -66,29 +67,29 @@ func (opts *UpdateSubCommand) run(input cli.Input) error { pkgName := input.String(flagkey.PkgName) pkg, err := opts.Client().FissionClientSet.CoreV1().Packages(opts.pkgNamespace).Get(input.Context(), opts.pkgName, metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting package") + return fmt.Errorf("error getting package: %w", err) } forceUpdate := input.Bool(flagkey.PkgForce) fnList, err := GetFunctionsByPackage(input.Context(), opts.Client(), pkg.ObjectMeta.Name, pkg.ObjectMeta.Namespace) if err != nil { - return errors.Wrap(err, "error getting function list") + return fmt.Errorf("error getting function list: %w", err) } if !forceUpdate && len(fnList) > 1 { - return errors.Errorf("package is used by multiple functions, use --%v to force update", flagkey.PkgForce) + return fmt.Errorf("package is used by multiple functions, use --%v to force update", flagkey.PkgForce) } specFile := fmt.Sprintf("package-%s.yaml", pkgName) newPkgMeta, err := UpdatePackage(input, opts.Client(), specFile, pkg) if err != nil { - return errors.Wrap(err, "error updating package") + return fmt.Errorf("error updating package: %w", err) } if pkg.ObjectMeta.ResourceVersion != newPkgMeta.ResourceVersion { err = UpdateFunctionPackageResourceVersion(input.Context(), opts.Client(), newPkgMeta, fnList...) if err != nil { - return errors.Wrap(err, "error updating function package reference resource version") + return fmt.Errorf("error updating function package reference resource version: %w", err) } } @@ -130,7 +131,7 @@ func UpdatePackage(input cli.Input, client cmd.Client, specFile string, pkg *fv1 if input.IsSet(flagkey.PkgSrcArchive) { srcArchive, err := CreateArchive(client, input, srcArchiveFiles, noZip, insecure, srcChecksum, "", "") if err != nil { - return nil, errors.Wrap(err, "error creating source archive") + return nil, fmt.Errorf("error creating source archive: %w", err) } pkg.Spec.Source = *srcArchive needToRebuild = true @@ -146,7 +147,7 @@ func UpdatePackage(input cli.Input, client cmd.Client, specFile string, pkg *fv1 if input.IsSet(flagkey.PkgDeployArchive) || input.IsSet(flagkey.PkgCode) { deployArchive, err := CreateArchive(client, input, deployArchiveFiles, noZip, insecure, deployChecksum, "", "") if err != nil { - return nil, errors.Wrap(err, "error creating deploy archive") + return nil, fmt.Errorf("error creating deploy archive: %w", err) } pkg.Spec.Deployment = *deployArchive // Users may update the env, envNS and deploy archive at the same time, @@ -178,7 +179,7 @@ func UpdatePackage(input cli.Input, client cmd.Client, specFile string, pkg *fv1 // if a package with the same spec exists, don't create a new spec file fr, err := spec.ReadSpecs(util.GetSpecDir(input), util.GetSpecIgnore(input), false) if err != nil { - return nil, errors.Wrap(err, "error reading specs") + return nil, fmt.Errorf("error reading specs: %w", err) } obj := fr.SpecExists(pkg, true, true) @@ -190,14 +191,14 @@ func UpdatePackage(input cli.Input, client cmd.Client, specFile string, pkg *fv1 err = spec.SpecSave(*pkg, specFile, true) if err != nil { - return nil, errors.Wrap(err, "error saving package spec") + return nil, fmt.Errorf("error saving package spec: %w", err) } return &pkg.ObjectMeta, nil } newPkgMeta, err := client.FissionClientSet.CoreV1().Packages(pkg.ObjectMeta.Namespace).Update(input.Context(), pkg, metav1.UpdateOptions{}) if err != nil { - return nil, errors.Wrap(err, "update package") + return nil, fmt.Errorf("update package: %w", err) } fmt.Printf("Package '%v' updated\n", newPkgMeta.GetName()) @@ -213,7 +214,7 @@ func UpdateFunctionPackageResourceVersion(ctx context.Context, client cmd.Client fn.Spec.Package.PackageRef.ResourceVersion = pkgMeta.ResourceVersion _, err := client.FissionClientSet.CoreV1().Functions(fn.ObjectMeta.Namespace).Update(ctx, &fn, metav1.UpdateOptions{}) if err != nil { - errs = multierror.Append(errs, errors.Wrapf(err, "error updating package resource version of function '%v'", fn.ObjectMeta.Name)) + errs = multierror.Append(errs, fmt.Errorf("error updating package resource version of function '%v': %w", fn.ObjectMeta.Name, err)) } } diff --git a/pkg/fission-cli/cmd/package/util/util.go b/pkg/fission-cli/cmd/package/util/util.go index 28d08489..f6e5fb3a 100644 --- a/pkg/fission-cli/cmd/package/util/util.go +++ b/pkg/fission-cli/cmd/package/util/util.go @@ -26,8 +26,6 @@ import ( "strings" "text/tabwriter" - "github.com/pkg/errors" - fv1 "github.com/fission/fission/pkg/apis/core/v1" "github.com/fission/fission/pkg/fission-cli/cmd" "github.com/fission/fission/pkg/fission-cli/util" @@ -53,19 +51,19 @@ func UploadArchiveFile(ctx context.Context, client cmd.Client, fileName string) } else { storagesvcURL, err := util.GetStorageURL(ctx, client) if err != nil { - return nil, errors.Wrapf(err, "error getting fission storage service URL") + return nil, fmt.Errorf("error getting fission storage service URL: %w", err) } storageClient := storageSvcClient.MakeClient(storagesvcURL.String()) // TODO add a progress bar id, err := storageClient.Upload(ctx, fileName, nil) if err != nil { - return nil, errors.Wrapf(err, "error uploading to fission storage service") + return nil, fmt.Errorf("error uploading to fission storage service: %w", err) } archiveURL, err := getArchiveURL(ctx, client, id, storagesvcURL) if err != nil { - return nil, errors.Wrapf(err, "could not get URL of archive") + return nil, fmt.Errorf("could not get URL of archive: %w", err) } archive.Type = fv1.ArchiveTypeUrl @@ -73,7 +71,7 @@ func UploadArchiveFile(ctx context.Context, client cmd.Client, fileName string) csum, err := utils.GetFileChecksum(fileName) if err != nil { - return nil, errors.Wrapf(err, "calculate checksum for file %v", fileName) + return nil, fmt.Errorf("calculate checksum for file %v: %w", fileName, err) } archive.Checksum = *csum @@ -121,7 +119,7 @@ func getArchiveURL(ctx context.Context, client cmd.Client, archiveID string, ser func GetContents(filePath string) ([]byte, error) { code, err := os.ReadFile(filePath) if err != nil { - return nil, errors.Wrapf(err, "error reading %v", filePath) + return nil, fmt.Errorf("error reading %v: %w", filePath, err) } return code, nil } @@ -131,13 +129,13 @@ func GetContents(filePath string) ([]byte, error) { func DownloadToTempFile(fileUrl string) (string, error) { reader, err := DownloadURL(fileUrl) if err != nil { - return "", errors.Wrapf(err, "error downloading from url: %v", fileUrl) + return "", fmt.Errorf("error downloading from url: %v: %w", fileUrl, err) } defer reader.Close() tmpDir, err := utils.GetTempDir() if err != nil { - return "", errors.Wrapf(err, "error creating temp directory %v", tmpDir) + return "", fmt.Errorf("error creating temp directory %v: %w", tmpDir, err) } tmpFilename := uuid.NewString() @@ -145,7 +143,7 @@ func DownloadToTempFile(fileUrl string) (string, error) { err = WriteArchiveToFile(destination, reader) if err != nil { - return "", errors.Wrapf(err, "error writing archive to file %v", destination) + return "", fmt.Errorf("error writing archive to file %v: %w", destination, err) } return destination, nil diff --git a/pkg/fission-cli/cmd/spec/apply.go b/pkg/fission-cli/cmd/spec/apply.go index 164735ed..661b5798 100644 --- a/pkg/fission-cli/cmd/spec/apply.go +++ b/pkg/fission-cli/cmd/spec/apply.go @@ -27,7 +27,6 @@ import ( "github.com/fsnotify/fsnotify" "github.com/go-git/go-git/v5" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" k8sCache "k8s.io/client-go/tools/cache" @@ -145,14 +144,14 @@ func (opts *ApplySubCommand) run(input cli.Input) error { var err error watcher, err = fsnotify.NewWatcher() if err != nil { - return errors.Wrap(err, "error creating file watcher") + return fmt.Errorf("error creating file watcher: %w", err) } // add watches rootDir := filepath.Clean(specDir + "/..") err = filepath.Walk(rootDir, func(path string, info os.FileInfo, err error) error { if err != nil { - return errors.Wrap(err, "error scanning project files") + return fmt.Errorf("error scanning project files: %w", err) } if ignoreFile(path) { @@ -161,12 +160,12 @@ func (opts *ApplySubCommand) run(input cli.Input) error { err = watcher.Add(path) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error watching path %v", path)) + return fmt.Errorf("error watching path %v: %w", path, err) } return nil }) if err != nil { - return errors.Wrap(err, "error scanning files to watch") + return fmt.Errorf("error scanning files to watch: %w", err) } } @@ -174,19 +173,19 @@ func (opts *ApplySubCommand) run(input cli.Input) error { // read all specs fr, err := ReadSpecs(specDir, specIgnore, applyCommitLabel) if err != nil { - return errors.Wrap(err, "error reading specs") + return fmt.Errorf("error reading specs: %w", err) } if validateSpecs { err = validateForApply(input, fr) if err != nil { - return errors.Wrap(err, "abort applying resources") + return fmt.Errorf("abort applying resources: %w", err) } } err = opts.insertNamespace(input, fr) if err != nil { - return errors.Wrap(err, "error inserting namespace") + return fmt.Errorf("error inserting namespace: %w", err) } err = warnIfDirtyWorkTree(filepath.Clean(specDir + "/..")) @@ -197,7 +196,7 @@ func (opts *ApplySubCommand) run(input cli.Input) error { // make changes to the cluster based on the specs pkgMetas, as, err := applyResources(input, opts.Client(), specDir, fr, deleteResources, input.Bool(flagkey.SpecAllowConflicts)) if err != nil { - return errors.Wrap(err, "error applying specs") + return fmt.Errorf("error applying specs: %w", err) } printApplyStatus(as) @@ -239,7 +238,7 @@ func (opts *ApplySubCommand) run(input cli.Input) error { err = waitForFileWatcherToSettleDown(watcher) if err != nil { - return errors.Wrap(err, "error watching files") + return fmt.Errorf("error watching files: %w", err) } break waitloop @@ -247,7 +246,7 @@ func (opts *ApplySubCommand) run(input cli.Input) error { pkgWatchCancel() if err != nil { - return errors.Wrap(err, "error watching files") + return fmt.Errorf("error watching files: %w", err) } } } @@ -408,7 +407,7 @@ func applyArchives(input cli.Input, fclient cmd.Client, specDir string, fr *Fiss if strings.HasPrefix(ar.URL, ARCHIVE_URL_PREFIX) { availableAr, ok := archiveFiles[ar.URL] if !ok { - return errors.Errorf("unknown archive name %v", strings.TrimPrefix(ar.URL, ARCHIVE_URL_PREFIX)) + return fmt.Errorf("unknown archive name %v", strings.TrimPrefix(ar.URL, ARCHIVE_URL_PREFIX)) } ar.Type = availableAr.Type ar.Literal = availableAr.Literal @@ -433,13 +432,13 @@ func applyResources(input cli.Input, fclient cmd.Client, specDir string, fr *Fis _, ras, err := applyEnvironments(input.Context(), fclient, fr, delete, specAllowConflicts) if err != nil { - return nil, nil, errors.Wrap(err, "environment apply failed") + return nil, nil, fmt.Errorf("environment apply failed: %w", err) } applyStatus["environment"] = *ras pkgMeta, ras, err := applyPackages(input.Context(), fclient, fr, delete, specAllowConflicts) if err != nil { - return nil, nil, errors.Wrap(err, "package apply failed") + return nil, nil, fmt.Errorf("package apply failed: %w", err) } applyStatus["package"] = *ras @@ -460,7 +459,7 @@ func applyResources(input cli.Input, fclient cmd.Client, specDir string, fr *Fis // spec. It may exist outside the spec, but we're going to treat // that as an error, so that we encourage self-contained specs. // Is there a good use case for non-self contained specs? - return nil, nil, errors.Errorf("function %v/%v references package %v/%v, which doesn't exist in the specs", + return nil, nil, fmt.Errorf("function %v/%v references package %v/%v, which doesn't exist in the specs", f.ObjectMeta.Namespace, f.ObjectMeta.Name, f.Spec.Package.PackageRef.Namespace, f.Spec.Package.PackageRef.Name) } fr.Functions[i].Spec.Package.PackageRef.ResourceVersion = m.ResourceVersion @@ -468,31 +467,31 @@ func applyResources(input cli.Input, fclient cmd.Client, specDir string, fr *Fis _, ras, err = applyFunctions(input.Context(), fclient, fr, delete, specAllowConflicts) if err != nil { - return nil, nil, errors.Wrap(err, "function apply failed") + return nil, nil, fmt.Errorf("function apply failed: %w", err) } applyStatus["function"] = *ras _, ras, err = applyHTTPTriggers(input.Context(), fclient, fr, delete, specAllowConflicts) if err != nil { - return nil, nil, errors.Wrap(err, "HTTPTrigger apply failed") + return nil, nil, fmt.Errorf("HTTPTrigger apply failed: %w", err) } applyStatus["HTTPTrigger"] = *ras _, ras, err = applyKubernetesWatchTriggers(input.Context(), fclient, fr, delete, specAllowConflicts) if err != nil { - return nil, nil, errors.Wrap(err, "KubernetesWatchTrigger apply failed") + return nil, nil, fmt.Errorf("KubernetesWatchTrigger apply failed: %w", err) } applyStatus["KubernetesWatchTrigger"] = *ras _, ras, err = applyTimeTriggers(input.Context(), fclient, fr, delete, specAllowConflicts) if err != nil { - return nil, nil, errors.Wrap(err, "TimeTrigger apply failed") + return nil, nil, fmt.Errorf("TimeTrigger apply failed: %w", err) } applyStatus["TimeTrigger"] = *ras _, ras, err = applyMessageQueueTriggers(input.Context(), fclient, fr, delete, specAllowConflicts) if err != nil { - return nil, nil, errors.Wrap(err, "MessageQueueTrigger apply failed") + return nil, nil, fmt.Errorf("MessageQueueTrigger apply failed: %w", err) } applyStatus["MessageQueueTrigger"] = *ras @@ -526,14 +525,14 @@ func localArchiveFromSpec(ctx context.Context, specDir string, aus *spectypes.Ar console.Verbose(2, "try to find globs in path '%v'", absGlob) fs, err := utils.FindAllGlobs(absGlob) if err != nil { - return nil, errors.Wrapf(err, "Invalid glob in archive %v: %v", aus.Name, relativeGlob) + return nil, fmt.Errorf("Invalid glob in archive %v: %v: %w", aus.Name, relativeGlob, err) } files = append(files, fs...) } } if len(files) == 0 { - return nil, errors.Errorf("archive '%v' is empty", aus.Name) + return nil, fmt.Errorf("archive '%v' is empty", aus.Name) } // if it's just one file, use its path directly @@ -585,7 +584,7 @@ func localArchiveFromSpec(ctx context.Context, specDir string, aus *spectypes.Ar // checksum csum, err := utils.GetFileChecksum(archiveFileName) if err != nil { - return nil, errors.Errorf("failed to calculate archive checksum for %v (%v): %v", aus.Name, archiveFileName, err) + return nil, fmt.Errorf("failed to calculate archive checksum for %v (%v): %v", aus.Name, archiveFileName, err) } // archive object @@ -626,7 +625,7 @@ func waitForPackageBuild(ctx context.Context, fclient cmd.Client, pkg *fv1.Packa return pkg, nil } if time.Since(start) > 5*time.Minute { - return nil, errors.Errorf("package %v has been building for a while, giving up on waiting for it", pkg.ObjectMeta.Name) + return nil, fmt.Errorf("package %v has been building for a while, giving up on waiting for it", pkg.ObjectMeta.Name) } // TODO watch instead diff --git a/pkg/fission-cli/cmd/spec/destroy.go b/pkg/fission-cli/cmd/spec/destroy.go index ee94e2e7..d3df1809 100644 --- a/pkg/fission-cli/cmd/spec/destroy.go +++ b/pkg/fission-cli/cmd/spec/destroy.go @@ -21,7 +21,6 @@ import ( "fmt" "strings" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" k8sCache "k8s.io/client-go/tools/cache" @@ -55,13 +54,13 @@ func (opts *DestroySubCommand) run(input cli.Input) error { // read everything fr, err := ReadSpecs(specDir, specIgnore, false) if err != nil { - return errors.Wrap(err, "error reading specs") + return fmt.Errorf("error reading specs: %w", err) } if !input.Bool(flagkey.ForceDelete) { err = opts.insertNSToResource(input, fr) if err != nil { - return errors.Wrap(err, "error adding namespace") + return fmt.Errorf("error adding namespace: %w", err) } } else { // if force delete set to true we fetch all resources with our deployment ID and delete them @@ -72,14 +71,14 @@ func (opts *DestroySubCommand) run(input cli.Input) error { // "apply" the empty state err = forceDeleteResources(input.Context(), opts.Client(), &emptyFr) if err != nil { - return errors.Wrap(err, "error deleting resources") + return fmt.Errorf("error deleting resources: %w", err) } return nil } forceDelete := input.Bool(flagkey.ForceDelete) err = deleteResources(input.Context(), opts.Client(), fr, forceDelete) if err != nil { - return errors.Wrap(err, "error deleting resources") + return fmt.Errorf("error deleting resources: %w", err) } return nil @@ -91,37 +90,37 @@ func forceDeleteResources(ctx context.Context, fclient cmd.Client, fr *FissionRe _, _, err = applyHTTPTriggers(ctx, fclient, fr, true, false) if err != nil { - return errors.Wrap(err, "HTTPTrigger delete failed") + return fmt.Errorf("HTTPTrigger delete failed: %w", err) } _, _, err = applyKubernetesWatchTriggers(ctx, fclient, fr, true, false) if err != nil { - return errors.Wrap(err, "KubernetesWatchTrigger delete failed") + return fmt.Errorf("KubernetesWatchTrigger delete failed: %w", err) } _, _, err = applyTimeTriggers(ctx, fclient, fr, true, false) if err != nil { - return errors.Wrap(err, "TimeTrigger delete failed") + return fmt.Errorf("TimeTrigger delete failed: %w", err) } _, _, err = applyMessageQueueTriggers(ctx, fclient, fr, true, false) if err != nil { - return errors.Wrap(err, "MessageQueueTrigger delete failed") + return fmt.Errorf("MessageQueueTrigger delete failed: %w", err) } _, _, err = applyFunctions(ctx, fclient, fr, true, false) if err != nil { - return errors.Wrap(err, "function delete failed") + return fmt.Errorf("function delete failed: %w", err) } _, _, err = applyPackages(ctx, fclient, fr, true, false) if err != nil { - return errors.Wrap(err, "package delete failed") + return fmt.Errorf("package delete failed: %w", err) } _, _, err = applyEnvironments(ctx, fclient, fr, true, false) if err != nil { - return errors.Wrap(err, "environment delete failed") + return fmt.Errorf("environment delete failed: %w", err) } return nil @@ -183,37 +182,37 @@ func deleteResources(ctx context.Context, fclient cmd.Client, fr *FissionResourc err = destroyHTTPTriggers(ctx, fclient, fr) if err != nil { - return errors.Wrap(err, "HTTPTrigger delete failed") + return fmt.Errorf("HTTPTrigger delete failed: %w", err) } err = destroyKubernetesWatchTriggers(ctx, fclient, fr) if err != nil { - return errors.Wrap(err, "KubernetesWatchTrigger delete failed") + return fmt.Errorf("KubernetesWatchTrigger delete failed: %w", err) } err = destroyTimeTriggers(ctx, fclient, fr) if err != nil { - return errors.Wrap(err, "TimeTrigger delete failed") + return fmt.Errorf("TimeTrigger delete failed: %w", err) } err = destroyMessageQueueTriggers(ctx, fclient, fr) if err != nil { - return errors.Wrap(err, "MessageQueueTrigger delete failed") + return fmt.Errorf("MessageQueueTrigger delete failed: %w", err) } err = destroyFunctions(ctx, fclient, fr) if err != nil { - return errors.Wrap(err, "function delete failed") + return fmt.Errorf("function delete failed: %w", err) } err = destroyPackages(ctx, fclient, fr) if err != nil { - return errors.Wrap(err, "package delete failed") + return fmt.Errorf("package delete failed: %w", err) } err = destroyEnvironments(ctx, fclient, fr) if err != nil { - return errors.Wrap(err, "environment delete failed") + return fmt.Errorf("environment delete failed: %w", err) } return nil diff --git a/pkg/fission-cli/cmd/spec/init.go b/pkg/fission-cli/cmd/spec/init.go index 29bbd630..7d41dddd 100644 --- a/pkg/fission-cli/cmd/spec/init.go +++ b/pkg/fission-cli/cmd/spec/init.go @@ -21,7 +21,6 @@ import ( "os" "path/filepath" - "github.com/pkg/errors" "sigs.k8s.io/yaml" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -58,7 +57,7 @@ func (opts *InitSubCommand) complete(input cli.Input) error { // come up with a name using the current dir dir, err := filepath.Abs(".") if err != nil { - return errors.Wrap(err, "error getting current working directory") + return fmt.Errorf("error getting current working directory: %w", err) } basename := filepath.Base(dir) name = util.KubifyName(basename) @@ -73,7 +72,7 @@ func (opts *InitSubCommand) complete(input cli.Input) error { fmt.Printf("Creating fission spec directory '%v'\n", specDir) err := os.MkdirAll(specDir, 0755) if err != nil { - return errors.Wrapf(err, "create spec directory '%v'", specDir) + return fmt.Errorf("create spec directory '%v': %w", specDir, err) } // Write the deployment config @@ -101,7 +100,7 @@ func (opts *InitSubCommand) run(input cli.Input) error { config := filepath.Join(specDir, "fission-deployment-config.yaml") if _, err := os.Stat(config); err == nil { - return errors.Errorf("Spec DeploymentConfig already exists in directory '%v'", specDir) + return fmt.Errorf("Spec DeploymentConfig already exists in directory '%v'", specDir) } // Add a bit of documentation to the spec dir here @@ -112,7 +111,7 @@ func (opts *InitSubCommand) run(input cli.Input) error { err = writeDeploymentConfig(config, opts.deployConfig) if err != nil { - return errors.Wrap(err, "error writing deployment config") + return fmt.Errorf("error writing deployment config: %w", err) } // Other possible things to do here: diff --git a/pkg/fission-cli/cmd/spec/list.go b/pkg/fission-cli/cmd/spec/list.go index 129f4c1f..8c7ef2ce 100644 --- a/pkg/fission-cli/cmd/spec/list.go +++ b/pkg/fission-cli/cmd/spec/list.go @@ -24,7 +24,6 @@ import ( "text/tabwriter" "time" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -56,7 +55,7 @@ func (opts *ListSubCommand) run(input cli.Input) error { specIgnore := util.GetSpecIgnore(input) fr, err := ReadSpecs(specDir, specIgnore, false) if err != nil { - return errors.Wrap(err, "error reading specs") + return fmt.Errorf("error reading specs: %w", err) } deployID = fr.DeploymentConfig.UID } @@ -83,7 +82,7 @@ func (opts *ListSubCommand) getResource(input cli.Input, namespace string, deplo allfn, err = getAllFunctions(input.Context(), opts.Client(), namespace) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error getting Functions from %s namespaces", printNS)) + return fmt.Errorf("error getting Functions from %s namespaces: %w", printNS, err) } specfns := getAppliedFunctions(allfn, deployID) ShowFunctions(specfns) @@ -91,7 +90,7 @@ func (opts *ListSubCommand) getResource(input cli.Input, namespace string, deplo var allenvs []fv1.Environment allenvs, err = getAllEnvironments(input.Context(), opts.Client(), namespace) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error getting Environments from %s namespaces", printNS)) + return fmt.Errorf("error getting Environments from %s namespaces: %w", printNS, err) } specenvs := getAppliedEnvironments(allenvs, deployID) ShowEnvironments(specenvs) @@ -99,7 +98,7 @@ func (opts *ListSubCommand) getResource(input cli.Input, namespace string, deplo var pkglists []fv1.Package pkglists, err = getAllPackages(input.Context(), opts.Client(), namespace) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error getting Packages from %s namespaces", printNS)) + return fmt.Errorf("error getting Packages from %s namespaces: %w", printNS, err) } specPkgs := getAppliedPackages(pkglists, deployID) ShowPackages(specPkgs) @@ -107,7 +106,7 @@ func (opts *ListSubCommand) getResource(input cli.Input, namespace string, deplo var canaryCfgs []fv1.CanaryConfig canaryCfgs, err = getAllCanaryConfigs(input.Context(), opts.Client(), namespace) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error getting Canary Config from %s namespaces", printNS)) + return fmt.Errorf("error getting Canary Config from %s namespaces: %w", printNS, err) } specCanaryCfgs := getAppliedCanaryConfigs(canaryCfgs, deployID) ShowCanaryConfigs(specCanaryCfgs) @@ -115,7 +114,7 @@ func (opts *ListSubCommand) getResource(input cli.Input, namespace string, deplo var hts []fv1.HTTPTrigger hts, err = getAllHTTPTriggers(input.Context(), opts.Client(), namespace) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error getting HTTP Triggers from %s namespaces", printNS)) + return fmt.Errorf("error getting HTTP Triggers from %s namespaces: %w", printNS, err) } specHTTPTriggers := getAppliedHTTPTriggers(hts, deployID) ShowHTTPTriggers(specHTTPTriggers) @@ -123,7 +122,7 @@ func (opts *ListSubCommand) getResource(input cli.Input, namespace string, deplo var mqts []fv1.MessageQueueTrigger mqts, err = getAllMessageQueueTriggers(input.Context(), opts.Client(), input.String(flagkey.MqtMQType), namespace) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error getting MessageQueue Triggers from %s namespaces", printNS)) + return fmt.Errorf("error getting MessageQueue Triggers from %s namespaces: %w", printNS, err) } specMessageQueueTriggers := getAppliedMessageQueueTriggers(mqts, deployID) ShowMQTriggers(specMessageQueueTriggers) @@ -131,7 +130,7 @@ func (opts *ListSubCommand) getResource(input cli.Input, namespace string, deplo var tts []fv1.TimeTrigger tts, err = getAllTimeTriggers(input.Context(), opts.Client(), namespace) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error getting Time Triggers from %s namespaces", printNS)) + return fmt.Errorf("error getting Time Triggers from %s namespaces: %w", printNS, err) } specTimeTriggers := getAppliedTimeTriggers(tts, deployID) ShowTimeTriggers(specTimeTriggers) @@ -139,7 +138,7 @@ func (opts *ListSubCommand) getResource(input cli.Input, namespace string, deplo var kws []fv1.KubernetesWatchTrigger kws, err = getAllKubeWatchTriggers(input.Context(), opts.Client(), namespace) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error getting Kube Watchers from %s namespaces", printNS)) + return fmt.Errorf("error getting Kube Watchers from %s namespaces: %w", printNS, err) } specKubeWatchers := getSpecKubeWatchers(kws, deployID) ShowAppliedKubeWatchers(specKubeWatchers) @@ -424,7 +423,7 @@ func ShowAppliedKubeWatchers(ws []fv1.KubernetesWatchTrigger) { func getAllFunctions(ctx context.Context, client cmd.Client, namespace string) ([]fv1.Function, error) { fns, err := client.FissionClientSet.CoreV1().Functions(namespace).List(ctx, metav1.ListOptions{}) if err != nil { - return nil, errors.Errorf("Unable to get Functions %v", err.Error()) + return nil, fmt.Errorf("Unable to get Functions %v", err.Error()) } return fns.Items, nil } @@ -433,7 +432,7 @@ func getAllFunctions(ctx context.Context, client cmd.Client, namespace string) ( func getAllEnvironments(ctx context.Context, client cmd.Client, namespace string) ([]fv1.Environment, error) { envs, err := client.FissionClientSet.CoreV1().Environments(namespace).List(ctx, metav1.ListOptions{}) if err != nil { - return nil, errors.Errorf("Unable to get Environments %v", err.Error()) + return nil, fmt.Errorf("Unable to get Environments %v", err.Error()) } return envs.Items, nil } @@ -442,7 +441,7 @@ func getAllEnvironments(ctx context.Context, client cmd.Client, namespace string func getAllPackages(ctx context.Context, client cmd.Client, namespace string) ([]fv1.Package, error) { pkgList, err := client.FissionClientSet.CoreV1().Packages(namespace).List(ctx, metav1.ListOptions{}) if err != nil { - return nil, errors.Errorf("Unable to get Packages %v", err.Error()) + return nil, fmt.Errorf("Unable to get Packages %v", err.Error()) } return pkgList.Items, nil } @@ -451,7 +450,7 @@ func getAllPackages(ctx context.Context, client cmd.Client, namespace string) ([ func getAllCanaryConfigs(ctx context.Context, client cmd.Client, namespace string) ([]fv1.CanaryConfig, error) { canaryCfgs, err := client.FissionClientSet.CoreV1().CanaryConfigs(namespace).List(ctx, metav1.ListOptions{}) if err != nil { - return nil, errors.Errorf("Unable to get Canary Configs %v", err.Error()) + return nil, fmt.Errorf("Unable to get Canary Configs %v", err.Error()) } return canaryCfgs.Items, nil } @@ -460,7 +459,7 @@ func getAllCanaryConfigs(ctx context.Context, client cmd.Client, namespace strin func getAllHTTPTriggers(ctx context.Context, client cmd.Client, namespace string) ([]fv1.HTTPTrigger, error) { hts, err := client.FissionClientSet.CoreV1().HTTPTriggers(namespace).List(ctx, metav1.ListOptions{}) if err != nil { - return nil, errors.Errorf("Unable to get HTTP Triggers %v", err.Error()) + return nil, fmt.Errorf("Unable to get HTTP Triggers %v", err.Error()) } return hts.Items, nil } @@ -469,7 +468,7 @@ func getAllHTTPTriggers(ctx context.Context, client cmd.Client, namespace string func getAllMessageQueueTriggers(ctx context.Context, client cmd.Client, mqttype string, namespace string) ([]fv1.MessageQueueTrigger, error) { mqts, err := client.FissionClientSet.CoreV1().MessageQueueTriggers(namespace).List(ctx, metav1.ListOptions{}) if err != nil { - return nil, errors.Errorf("Unable to get MessageQueue Triggers %v", err.Error()) + return nil, fmt.Errorf("Unable to get MessageQueue Triggers %v", err.Error()) } return mqts.Items, nil } @@ -478,7 +477,7 @@ func getAllMessageQueueTriggers(ctx context.Context, client cmd.Client, mqttype func getAllTimeTriggers(ctx context.Context, client cmd.Client, namespace string) ([]fv1.TimeTrigger, error) { tts, err := client.FissionClientSet.CoreV1().TimeTriggers(namespace).List(ctx, metav1.ListOptions{}) if err != nil { - return nil, errors.Errorf("Unable to get Time Triggers %v", err.Error()) + return nil, fmt.Errorf("Unable to get Time Triggers %v", err.Error()) } return tts.Items, nil } @@ -487,7 +486,7 @@ func getAllTimeTriggers(ctx context.Context, client cmd.Client, namespace string func getAllKubeWatchTriggers(ctx context.Context, client cmd.Client, namespace string) ([]fv1.KubernetesWatchTrigger, error) { ws, err := client.FissionClientSet.CoreV1().KubernetesWatchTriggers(namespace).List(ctx, metav1.ListOptions{}) if err != nil { - return nil, errors.Errorf("Unable to get Kube Watchers %v", err.Error()) + return nil, fmt.Errorf("Unable to get Kube Watchers %v", err.Error()) } return ws.Items, nil } diff --git a/pkg/fission-cli/cmd/spec/spec.go b/pkg/fission-cli/cmd/spec/spec.go index 9120e42c..65059bc4 100644 --- a/pkg/fission-cli/cmd/spec/spec.go +++ b/pkg/fission-cli/cmd/spec/spec.go @@ -24,7 +24,6 @@ import ( "strings" multierror "github.com/hashicorp/go-multierror" - "github.com/pkg/errors" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" k8sCache "k8s.io/client-go/tools/cache" @@ -128,7 +127,7 @@ type ( func save(data []byte, specDir string, specFile string, truncate bool) error { // verify if _, err := os.Stat(filepath.Join(specDir, "fission-deployment-config.yaml")); os.IsNotExist(err) { - return errors.Wrap(err, "Couldn't find specs, run `fission spec init` first") + return fmt.Errorf("Couldn't find specs, run `fission spec init` first: %w", err) } filename := filepath.Join(specDir, specFile) @@ -136,7 +135,7 @@ func save(data []byte, specDir string, specFile string, truncate bool) error { newFile := false if _, err := os.Stat(filename); os.IsNotExist(err) { if truncate { - return errors.Errorf("spec file does not exists") + return fmt.Errorf("spec file does not exists") } newFile = true } @@ -144,14 +143,14 @@ func save(data []byte, specDir string, specFile string, truncate bool) error { // open spec file to append or write f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600) if err != nil { - return errors.Wrap(err, "couldn't create spec file") + return fmt.Errorf("couldn't create spec file: %w", err) } defer f.Close() if truncate { err = f.Truncate(0) if err != nil { - return errors.Wrap(err, "couldn't truncate the spec file") + return fmt.Errorf("couldn't truncate the spec file: %w", err) } } else { @@ -159,7 +158,7 @@ func save(data []byte, specDir string, specFile string, truncate bool) error { if !newFile { _, err = f.Write([]byte("\n---\n")) if err != nil { - return errors.Wrap(err, "couldn't write to spec file") + return fmt.Errorf("couldn't write to spec file: %w", err) } } } @@ -167,7 +166,7 @@ func save(data []byte, specDir string, specFile string, truncate bool) error { // write our resource _, err = f.Write(data) if err != nil { - return errors.Wrap(err, "couldn't write to spec file") + return fmt.Errorf("couldn't write to spec file: %w", err) } return nil } @@ -183,7 +182,7 @@ func SpecSave(resource interface{}, specFile string, update bool) error { fr, err := ReadSpecs(specDir, util.SPEC_IGNORE_FILE, false) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error reading spec in '%v'", specDir)) + return fmt.Errorf("error reading spec in '%v': %w", specDir, err) } exists, err := fr.ExistsInSpecs(resource) @@ -192,7 +191,7 @@ func SpecSave(resource interface{}, specFile string, update bool) error { } if exists { - return errors.Errorf("same name resource (%v) already exists in namespace (%v)", meta.Name, meta.Namespace) + return fmt.Errorf("same name resource (%v) already exists in namespace (%v)", meta.Name, meta.Namespace) } truncate := false @@ -277,11 +276,11 @@ func crdToYaml(resource interface{}) (metav1.ObjectMeta, string, []byte, error) kind = typedres.TypeMeta.Kind data, err = yaml.Marshal(typedres) default: - err = errors.Errorf("unknown object type '%v'", typedres) + err = fmt.Errorf("unknown object type '%v'", typedres) } if err != nil { - return metav1.ObjectMeta{}, "", nil, errors.Wrap(err, "couldn't marshal YAML") + return metav1.ObjectMeta{}, "", nil, fmt.Errorf("couldn't marshal YAML: %w", err) } return meta, kind, data, nil @@ -559,7 +558,7 @@ func (fr *FissionResources) ParseYaml(b []byte, loc *Location, commitLabelVal st var tm types.TypeMeta err := yaml.Unmarshal(b, &tm) if err != nil { - return errors.Wrap(err, fmt.Sprintf("Failed to decode yaml %v", string(b))) + return fmt.Errorf("Failed to decode yaml %s: %w", string(b), err) } switch tm.Kind { @@ -567,7 +566,7 @@ func (fr *FissionResources) ParseYaml(b []byte, loc *Location, commitLabelVal st var v fv1.Package err = yaml.Unmarshal(b, &v) if err != nil { - return errors.Wrap(err, fmt.Sprintf("Failed to parse %v in %v", tm.Kind, loc)) + return fmt.Errorf("Failed to parse %v in %v: %w", tm.Kind, loc, err) } m = &v.ObjectMeta applyCommitLabel(commitLabelVal, m) @@ -576,7 +575,7 @@ func (fr *FissionResources) ParseYaml(b []byte, loc *Location, commitLabelVal st var v fv1.Function err = yaml.Unmarshal(b, &v) if err != nil { - return errors.Wrap(err, fmt.Sprintf("Failed to parse %v in %v", tm.Kind, loc)) + return fmt.Errorf("Failed to parse %v in %v: %w", tm.Kind, loc, err) } m = &v.ObjectMeta applyCommitLabel(commitLabelVal, m) @@ -585,7 +584,7 @@ func (fr *FissionResources) ParseYaml(b []byte, loc *Location, commitLabelVal st var v fv1.Environment err = yaml.Unmarshal(b, &v) if err != nil { - return errors.Wrap(err, fmt.Sprintf("Failed to parse %v in %v", tm.Kind, loc)) + return fmt.Errorf("Failed to parse %v in %v: %w", tm.Kind, loc, err) } m = &v.ObjectMeta applyCommitLabel(commitLabelVal, m) @@ -594,7 +593,7 @@ func (fr *FissionResources) ParseYaml(b []byte, loc *Location, commitLabelVal st var v fv1.HTTPTrigger err = yaml.Unmarshal(b, &v) if err != nil { - return errors.Wrap(err, fmt.Sprintf("Failed to parse %v in %v", tm.Kind, loc)) + return fmt.Errorf("Failed to parse %v in %v: %w", tm.Kind, loc, err) } m = &v.ObjectMeta applyCommitLabel(commitLabelVal, m) @@ -603,7 +602,7 @@ func (fr *FissionResources) ParseYaml(b []byte, loc *Location, commitLabelVal st var v fv1.KubernetesWatchTrigger err = yaml.Unmarshal(b, &v) if err != nil { - return errors.Wrap(err, fmt.Sprintf("Failed to parse %v in %v", tm.Kind, loc)) + return fmt.Errorf("Failed to parse %v in %v: %w", tm.Kind, loc, err) } m = &v.ObjectMeta applyCommitLabel(commitLabelVal, m) @@ -612,7 +611,7 @@ func (fr *FissionResources) ParseYaml(b []byte, loc *Location, commitLabelVal st var v fv1.TimeTrigger err = yaml.Unmarshal(b, &v) if err != nil { - return errors.Wrap(err, fmt.Sprintf("Failed to parse %v in %v", tm.Kind, loc)) + return fmt.Errorf("Failed to parse %v in %v: %w", tm.Kind, loc, err) } m = &v.ObjectMeta applyCommitLabel(commitLabelVal, m) @@ -621,7 +620,7 @@ func (fr *FissionResources) ParseYaml(b []byte, loc *Location, commitLabelVal st var v fv1.MessageQueueTrigger err = yaml.Unmarshal(b, &v) if err != nil { - return errors.Wrap(err, fmt.Sprintf("Failed to parse %v in %v", tm.Kind, loc)) + return fmt.Errorf("Failed to parse %v in %v: %w", tm.Kind, loc, err) } m = &v.ObjectMeta applyCommitLabel(commitLabelVal, m) @@ -633,7 +632,7 @@ func (fr *FissionResources) ParseYaml(b []byte, loc *Location, commitLabelVal st var v types.DeploymentConfig err = yaml.Unmarshal(b, &v) if err != nil { - return errors.Wrap(err, fmt.Sprintf("Failed to parse %v in %v", tm.Kind, loc)) + return fmt.Errorf("Failed to parse %v in %v: %w", tm.Kind, loc, err) } fr.DeploymentConfig = v @@ -641,7 +640,7 @@ func (fr *FissionResources) ParseYaml(b []byte, loc *Location, commitLabelVal st var v types.ArchiveUploadSpec err = yaml.Unmarshal(b, &v) if err != nil { - return errors.Wrap(err, fmt.Sprintf("Failed to parse %v in %v", tm.Kind, loc)) + return fmt.Errorf("Failed to parse %v in %v: %w", tm.Kind, loc, err) } m = &metav1.ObjectMeta{ diff --git a/pkg/fission-cli/cmd/spec/validate.go b/pkg/fission-cli/cmd/spec/validate.go index 049e3910..eaf95b13 100644 --- a/pkg/fission-cli/cmd/spec/validate.go +++ b/pkg/fission-cli/cmd/spec/validate.go @@ -25,7 +25,6 @@ import ( "strings" "github.com/hashicorp/go-multierror" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" @@ -71,7 +70,7 @@ func (opts *ValidateSubCommand) run(input cli.Input, fr *FissionResources) (err if fr == nil { fr, err = ReadSpecs(specDir, specIgnore, false) if err != nil { - return errors.Wrap(err, "error reading specs") + return fmt.Errorf("error reading specs: %w", err) } } @@ -83,12 +82,12 @@ func (opts *ValidateSubCommand) run(input cli.Input, fr *FissionResources) (err // this does the rest of the checks, like dangling refs warnings, err = fr.Validate(input, opts.Client()) if err != nil { - return errors.Wrap(err, "error validating specs") + return fmt.Errorf("error validating specs: %w", err) } err = resourceConflictCheck(input.Context(), opts.Client(), fr, input.Bool(flagkey.SpecAllowConflicts), "") if err != nil { - return errors.Wrap(err, "name conflict error") + return fmt.Errorf("name conflict error: %w", err) } for _, warning := range warnings { @@ -110,7 +109,7 @@ func resourceConflictCheck(ctx context.Context, c cmd.Client, fr *FissionResourc fnList, err := getAllFunctions(ctx, c, namespace) if err != nil { - return errors.Errorf("Unable to get Functions %v", err.Error()) + return fmt.Errorf("Unable to get Functions %v", err.Error()) } for _, sObj := range fr.Functions { for _, cObj := range fnList { @@ -123,7 +122,7 @@ func resourceConflictCheck(ctx context.Context, c cmd.Client, fr *FissionResourc envList, err := getAllEnvironments(ctx, c, namespace) if err != nil { - return errors.Errorf("Unable to get Environments %v", err.Error()) + return fmt.Errorf("Unable to get Environments %v", err.Error()) } for _, sObj := range fr.Environments { for _, cObj := range envList { @@ -136,7 +135,7 @@ func resourceConflictCheck(ctx context.Context, c cmd.Client, fr *FissionResourc pkgList, err := getAllPackages(ctx, c, namespace) if err != nil { - return errors.Errorf("Unable to get Packages %v", err.Error()) + return fmt.Errorf("Unable to get Packages %v", err.Error()) } for _, sObj := range fr.Packages { for _, cObj := range pkgList { @@ -149,7 +148,7 @@ func resourceConflictCheck(ctx context.Context, c cmd.Client, fr *FissionResourc httptriggerList, err := getAllHTTPTriggers(ctx, c, namespace) if err != nil { - return errors.Errorf("Unable to get HTTPTrigger %v", err.Error()) + return fmt.Errorf("Unable to get HTTPTrigger %v", err.Error()) } for _, sObj := range fr.HttpTriggers { for _, cObj := range httptriggerList { @@ -162,7 +161,7 @@ func resourceConflictCheck(ctx context.Context, c cmd.Client, fr *FissionResourc mqtriggerList, err := getAllMessageQueueTriggers(ctx, c, "", namespace) if err != nil { - return errors.Errorf("Unable to get Message Queue Trigger %v", err.Error()) + return fmt.Errorf("Unable to get Message Queue Trigger %v", err.Error()) } for _, sObj := range fr.MessageQueueTriggers { for _, cObj := range mqtriggerList { @@ -175,7 +174,7 @@ func resourceConflictCheck(ctx context.Context, c cmd.Client, fr *FissionResourc timetriggerList, err := getAllTimeTriggers(ctx, c, namespace) if err != nil { - return errors.Errorf("Unable to get Time Trigger %v", err.Error()) + return fmt.Errorf("Unable to get Time Trigger %v", err.Error()) } for _, sObj := range fr.TimeTriggers { for _, cObj := range timetriggerList { @@ -188,7 +187,7 @@ func resourceConflictCheck(ctx context.Context, c cmd.Client, fr *FissionResourc kubewatchtriggerList, err := getAllKubeWatchTriggers(ctx, c, namespace) if err != nil { - return errors.Errorf("Unable to get Kubernetes Watch Trigger %v", err.Error()) + return fmt.Errorf("Unable to get Kubernetes Watch Trigger %v", err.Error()) } for _, sObj := range fr.KubernetesWatchTriggers { for _, cObj := range kubewatchtriggerList { @@ -226,7 +225,7 @@ func ReadSpecs(specDir, specIgnore string, applyCommitLabel bool) (*FissionResou // make sure spec directory exists before continue if _, err := os.Stat(specDir); os.IsNotExist(err) { - return nil, errors.Errorf("Spec directory %v doesn't exist. "+ + return nil, fmt.Errorf("Spec directory %v doesn't exist. "+ "Please check directory path or run \"fission spec init\" to create it.", specDir) } diff --git a/pkg/fission-cli/cmd/support/dump.go b/pkg/fission-cli/cmd/support/dump.go index bfa3a89a..90555884 100644 --- a/pkg/fission-cli/cmd/support/dump.go +++ b/pkg/fission-cli/cmd/support/dump.go @@ -23,8 +23,6 @@ import ( "sync" "time" - "github.com/pkg/errors" - "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" "github.com/fission/fission/pkg/fission-cli/cmd" "github.com/fission/fission/pkg/fission-cli/cmd/support/resources" @@ -58,12 +56,12 @@ func (opts *DumpSubCommand) do(input cli.Input) error { panic(err) } } else if err != nil { - panic(errors.Wrap(err, "Error checking dump directory status")) + panic(fmt.Errorf("Error checking dump directory status: %w", err)) } outputDir, err = filepath.Abs(outputDir) if err != nil { - panic(errors.Wrap(err, "Error creating dump directory for dumping files")) + panic(fmt.Errorf("Error creating dump directory for dumping files: %w", err)) } k8sClient := opts.Client().KubernetesClient diff --git a/pkg/fission-cli/cmd/timetrigger/create.go b/pkg/fission-cli/cmd/timetrigger/create.go index 85645430..8eddbe41 100644 --- a/pkg/fission-cli/cmd/timetrigger/create.go +++ b/pkg/fission-cli/cmd/timetrigger/create.go @@ -23,7 +23,8 @@ import ( "github.com/fission/fission/pkg/fission-cli/cmd" "github.com/fission/fission/pkg/utils/uuid" - "github.com/pkg/errors" + "errors" + "github.com/robfig/cron/v3" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -65,7 +66,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) (err error) { userProvidedNS, fnNamespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceFunction) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } cronSpec := input.String(flagkey.TtCron) @@ -78,7 +79,7 @@ func (opts *CreateSubCommand) complete(input cli.Input) (err error) { specIgnore := util.GetSpecIgnore(input) fr, err := spec.ReadSpecs(specDir, specIgnore, false) if err != nil { - return errors.Wrap(err, fmt.Sprintf("error reading spec in '%v'", specDir)) + return fmt.Errorf("error reading spec in '%v': %w", specDir, err) } exists, err := fr.ExistsInSpecs(fv1.Function{ @@ -135,14 +136,14 @@ func (opts *CreateSubCommand) run(input cli.Input) error { specFile := fmt.Sprintf("timetrigger-%v.yaml", opts.trigger.ObjectMeta.Name) err := spec.SpecSave(*opts.trigger, specFile, false) if err != nil { - return errors.Wrap(err, "error saving time trigger spec") + return fmt.Errorf("error saving time trigger spec: %w", err) } return nil } _, err := opts.Client().FissionClientSet.CoreV1().TimeTriggers(opts.trigger.Namespace).Create(input.Context(), opts.trigger, metav1.CreateOptions{}) if err != nil { - return errors.Wrap(err, "error creating Time trigger") + return fmt.Errorf("error creating Time trigger: %w", err) } fmt.Printf("trigger '%v' created\n", opts.trigger.ObjectMeta.Name) @@ -151,7 +152,7 @@ func (opts *CreateSubCommand) run(input cli.Input) error { err = getCronNextNActivationTime(opts.trigger.Spec.Cron, t, 1) if err != nil { - return errors.Wrap(err, "error passing cron spec examination") + return fmt.Errorf("error passing cron spec examination: %w", err) } return nil diff --git a/pkg/fission-cli/cmd/timetrigger/delete.go b/pkg/fission-cli/cmd/timetrigger/delete.go index 742ed438..402f371d 100644 --- a/pkg/fission-cli/cmd/timetrigger/delete.go +++ b/pkg/fission-cli/cmd/timetrigger/delete.go @@ -19,7 +19,6 @@ package timetrigger import ( "fmt" - "github.com/pkg/errors" kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -40,7 +39,7 @@ func (opts *DeleteSubCommand) do(input cli.Input) (err error) { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceTrigger) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } err = opts.Client().FissionClientSet.CoreV1().TimeTriggers(namespace).Delete(input.Context(), input.String(flagkey.TtName), metav1.DeleteOptions{}) @@ -48,7 +47,7 @@ func (opts *DeleteSubCommand) do(input cli.Input) (err error) { if input.Bool(flagkey.IgnoreNotFound) && kerrors.IsNotFound(err) { return nil } - return errors.Wrap(err, "error deleting trigger") + return fmt.Errorf("error deleting trigger: %w", err) } fmt.Printf("trigger '%v' deleted\n", input.String(flagkey.TtName)) diff --git a/pkg/fission-cli/cmd/timetrigger/list.go b/pkg/fission-cli/cmd/timetrigger/list.go index 3edc65b6..d9d4fd07 100644 --- a/pkg/fission-cli/cmd/timetrigger/list.go +++ b/pkg/fission-cli/cmd/timetrigger/list.go @@ -21,7 +21,6 @@ import ( "os" "text/tabwriter" - "github.com/pkg/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -40,7 +39,7 @@ func List(input cli.Input) error { func (opts *ListSubCommand) do(input cli.Input) (err error) { _, ttNs, err := opts.GetResourceNamespace(input, flagkey.NamespaceTrigger) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } if input.Bool(flagkey.AllNamespaces) { @@ -49,7 +48,7 @@ func (opts *ListSubCommand) do(input cli.Input) (err error) { tts, err := opts.Client().FissionClientSet.CoreV1().TimeTriggers(ttNs).List(input.Context(), metav1.ListOptions{}) if err != nil { - return errors.Wrap(err, "list Time triggers") + return fmt.Errorf("list Time triggers: %w", err) } w := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0) diff --git a/pkg/fission-cli/cmd/timetrigger/test.go b/pkg/fission-cli/cmd/timetrigger/test.go index 4bfb4200..d9dd852d 100644 --- a/pkg/fission-cli/cmd/timetrigger/test.go +++ b/pkg/fission-cli/cmd/timetrigger/test.go @@ -17,7 +17,9 @@ limitations under the License. package timetrigger import ( - "github.com/pkg/errors" + "fmt" + + "errors" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" "github.com/fission/fission/pkg/fission-cli/cmd" @@ -49,7 +51,7 @@ func (opts *ShowSubCommand) run(flaginput cli.Input) error { err := getCronNextNActivationTime(cronSpec, t, round) if err != nil { - return errors.Wrap(err, "error passing cron spec examination") + return fmt.Errorf("error passing cron spec examination: %w", err) } return nil diff --git a/pkg/fission-cli/cmd/timetrigger/update.go b/pkg/fission-cli/cmd/timetrigger/update.go index 38785c7a..ec8ce76c 100644 --- a/pkg/fission-cli/cmd/timetrigger/update.go +++ b/pkg/fission-cli/cmd/timetrigger/update.go @@ -19,7 +19,8 @@ package timetrigger import ( "fmt" - "github.com/pkg/errors" + "errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -51,12 +52,12 @@ func (opts *UpdateSubCommand) do(input cli.Input) error { func (opts *UpdateSubCommand) complete(input cli.Input) error { _, namespace, err := opts.GetResourceNamespace(input, flagkey.NamespaceTrigger) if err != nil { - return errors.Wrap(err, "error in deleting function ") + return fmt.Errorf("error in deleting function : %w", err) } tt, err := opts.Client().FissionClientSet.CoreV1().TimeTriggers(namespace).Get(input.Context(), input.String(flagkey.TtName), metav1.GetOptions{}) if err != nil { - return errors.Wrap(err, "error getting time trigger") + return fmt.Errorf("error getting time trigger: %w", err) } updated := false @@ -105,13 +106,13 @@ func (opts *UpdateSubCommand) run(input cli.Input) error { specFile := fmt.Sprintf("timetrigger-%s.yaml", opts.trigger.ObjectMeta.Name) err = spec.SpecSave(*opts.trigger, specFile, true) if err != nil { - return errors.Wrap(err, "error saving time trigger spec") + return fmt.Errorf("error saving time trigger spec: %w", err) } return nil } _, err := opts.Client().FissionClientSet.CoreV1().TimeTriggers(opts.trigger.ObjectMeta.Namespace).Update(input.Context(), opts.trigger, metav1.UpdateOptions{}) if err != nil { - return errors.Wrap(err, "error updating Time trigger") + return fmt.Errorf("error updating Time trigger: %w", err) } fmt.Printf("trigger '%v' updated\n", opts.trigger.ObjectMeta.Name) @@ -123,7 +124,7 @@ func (opts *UpdateSubCommand) run(input cli.Input) error { err = getCronNextNActivationTime(opts.trigger.Spec.Cron, t, 1) if err != nil { - return errors.Wrap(err, "error passing cron spec examination") + return fmt.Errorf("error passing cron spec examination: %w", err) } return nil diff --git a/pkg/fission-cli/cmd/token/create.go b/pkg/fission-cli/cmd/token/create.go index 48bee54e..3c880f94 100644 --- a/pkg/fission-cli/cmd/token/create.go +++ b/pkg/fission-cli/cmd/token/create.go @@ -24,8 +24,6 @@ import ( "net/http" "os" - "github.com/pkg/errors" - fv1 "github.com/fission/fission/pkg/apis/core/v1" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" "github.com/fission/fission/pkg/fission-cli/cmd" @@ -73,7 +71,7 @@ func (opts *CreateSubCommand) run(input cli.Input) error { } routerURL, err := util.GetRouterURL(input.Context(), opts.Client()) if err != nil { - return errors.Wrap(err, "error getting router URL") + return fmt.Errorf("error getting router URL: %w", err) } authAuthenticatorUrl := routerURL.JoinPath(authURI) console.Verbose(2, "Auth URI: %s", authAuthenticatorUrl.String()) @@ -86,7 +84,7 @@ func (opts *CreateSubCommand) run(input cli.Input) error { body, err := io.ReadAll(resp.Body) if err != nil { - return errors.Wrap(err, "error creating token") + return fmt.Errorf("error creating token: %w", err) } if resp.StatusCode == http.StatusCreated { diff --git a/pkg/fission-cli/cmd/version/version.go b/pkg/fission-cli/cmd/version/version.go index 14b781dc..1484cdae 100644 --- a/pkg/fission-cli/cmd/version/version.go +++ b/pkg/fission-cli/cmd/version/version.go @@ -19,7 +19,6 @@ package version import ( "fmt" - "github.com/pkg/errors" "sigs.k8s.io/yaml" "github.com/fission/fission/pkg/fission-cli/cliwrapper/cli" @@ -39,7 +38,7 @@ func (opts *VersionSubCommand) do(input cli.Input) error { ver := util.GetVersion(input.Context(), input, opts.Client()) bs, err := yaml.Marshal(ver) if err != nil { - return errors.Wrap(err, "error formatting versions") + return fmt.Errorf("error formatting versions: %w", err) } fmt.Print(string(bs)) return nil diff --git a/pkg/fission-cli/logdb/influxdb.go b/pkg/fission-cli/logdb/influxdb.go index 362cb1a2..972c51ea 100644 --- a/pkg/fission-cli/logdb/influxdb.go +++ b/pkg/fission-cli/logdb/influxdb.go @@ -29,7 +29,6 @@ import ( "time" influxdbClient "github.com/influxdata/influxdb/client/v2" - "github.com/pkg/errors" ferror "github.com/fission/fission/pkg/error" "github.com/fission/fission/pkg/fission-cli/util" @@ -153,12 +152,12 @@ func (influx InfluxDB) GetLogs(ctx context.Context, filter LogFilter, output *by msg := fmt.Sprintf("Timestamp: %s\nNamespace: %s\nFunction Name: %s\nFunction ID: %s\nPod: %s\nContainer: %s\nStream: %s\nLog: %s\n---\n", logEntry.Timestamp, logEntry.Namespace, logEntry.FuncName, logEntry.FuncUid, logEntry.Pod, logEntry.Container, logEntry.Stream, logEntry.Message) if _, err := output.WriteString(msg); err != nil { - return errors.Wrapf(err, "error copying pod log") + return fmt.Errorf("error copying pod log: %w", err) } } else { msg := fmt.Sprintf("[%s] %s\n", logEntry.Timestamp, logEntry.Message) if _, err := output.WriteString(msg); err != nil { - return errors.Wrapf(err, "error copying pod log") + return fmt.Errorf("error copying pod log: %w", err) } } } @@ -173,7 +172,7 @@ func (influx InfluxDB) query(ctx context.Context, query influxdbClient.Query) (* req, err := http.NewRequest(http.MethodPost, influx.endpoint, nil) if err != nil { - return nil, errors.Wrap(err, "error creating request for log proxy") + return nil, fmt.Errorf("error creating request for log proxy: %w", err) } req.SetBasicAuth(username, password) diff --git a/pkg/fission-cli/logdb/kubernetes_log.go b/pkg/fission-cli/logdb/kubernetes_log.go index 5cf2960a..81d3b37c 100644 --- a/pkg/fission-cli/logdb/kubernetes_log.go +++ b/pkg/fission-cli/logdb/kubernetes_log.go @@ -24,7 +24,6 @@ import ( "sort" "strconv" - "github.com/pkg/errors" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -85,7 +84,7 @@ func GetFunctionPodLogs(ctx context.Context, client cmd.Client, logFilter LogFil } if len(podList.Items) <= 0 { - return errors.Errorf("no active pods found for function in namespace %s", podNs) + return fmt.Errorf("no active pods found for function in namespace %s", podNs) } pods := podList.Items @@ -94,7 +93,7 @@ func GetFunctionPodLogs(ctx context.Context, client cmd.Client, logFilter LogFil // get the pod with highest resource version err = streamContainerLog(ctx, client.KubernetesClient, &pod, logFilter, podLogs) if err != nil { - return errors.Wrapf(err, "error getting container logs") + return fmt.Errorf("error getting container logs: %w", err) } } } else { @@ -108,7 +107,7 @@ func GetFunctionPodLogs(ctx context.Context, client cmd.Client, logFilter LogFil // get the pod with highest resource version err = streamContainerLog(ctx, client.KubernetesClient, &pods[0], logFilter, podLogs) if err != nil { - return errors.Wrapf(err, "error getting container logs") + return fmt.Errorf("error getting container logs: %w", err) } } @@ -132,7 +131,7 @@ func streamContainerLog(ctx context.Context, kubernetesClient kubernetes.Interfa podLogs, err := podLogsReq.Stream(ctx) if err != nil { - return errors.Wrapf(err, "error streaming pod log") + return fmt.Errorf("error streaming pod log: %w", err) } if logFilter.Details { @@ -140,13 +139,13 @@ func streamContainerLog(ctx context.Context, kubernetesClient kubernetes.Interfa msg := fmt.Sprintf("\n=== Function=%s Environment=%s Namespace=%s Pod=%s Container=%s Node=%s\n", fn.ObjectMeta.Name, fn.Spec.Environment.Name, pod.Namespace, pod.Name, container.Name, pod.Spec.NodeName) if _, err := output.WriteString(msg); err != nil { - return errors.Wrapf(err, "error copying pod log") + return fmt.Errorf("error copying pod log: %w", err) } } _, err = io.Copy(output, podLogs) if err != nil { - return errors.Wrapf(err, "error copying pod log") + return fmt.Errorf("error copying pod log: %w", err) } podLogs.Close() diff --git a/pkg/fission-cli/util/portforward.go b/pkg/fission-cli/util/portforward.go index c73fe1a6..67ca8134 100644 --- a/pkg/fission-cli/util/portforward.go +++ b/pkg/fission-cli/util/portforward.go @@ -26,7 +26,6 @@ import ( "strings" "time" - "github.com/pkg/errors" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/tools/portforward" @@ -50,7 +49,7 @@ func SetupPortForward(ctx context.Context, client cmd.Client, namespace, labelSe lcPort, err := utils.FindFreePort() if err != nil { - return "", errors.Wrap(err, "error finding unused port") + return "", fmt.Errorf("error finding unused port: %w", err) } localPort := strconv.Itoa(lcPort) @@ -118,9 +117,9 @@ func runPortForward(ctx context.Context, client cmd.Client, labelSelector string podList, err := client.KubernetesClient.CoreV1().Pods(ns). List(ctx, metav1.ListOptions{LabelSelector: labelSelector}) if err != nil { - return nil, nil, errors.Wrapf(err, "error getting pod for port-forwarding with label selector %v", labelSelector) + return nil, nil, fmt.Errorf("error getting pod for port-forwarding with label selector %v: %w", labelSelector, err) } else if len(podList.Items) == 0 { - return nil, nil, errors.Errorf("no available pod for port-forwarding with label selector %v", labelSelector) + return nil, nil, fmt.Errorf("no available pod for port-forwarding with label selector %v", labelSelector) } nsList := make([]string, 0) @@ -136,7 +135,7 @@ func runPortForward(ctx context.Context, client cmd.Client, labelSelector string namespaces[p.Namespace] = append(namespaces[p.Namespace], &p) } if len(nsList) > 1 { - return nil, nil, errors.Errorf("Found %v fission installs, set FISSION_NAMESPACE to one of: %v", + return nil, nil, fmt.Errorf("Found %v fission installs, set FISSION_NAMESPACE to one of: %v", len(namespaces), strings.Join(nsList, " ")) } } @@ -146,7 +145,7 @@ func runPortForward(ctx context.Context, client cmd.Client, labelSelector string ns = nsList[0] pods, ok := namespaces[ns] if !ok { - return nil, nil, errors.Errorf("Error finding fission install within the given namespace %v, please check FISSION_NAMESPACE is set properly", ns) + return nil, nil, fmt.Errorf("Error finding fission install within the given namespace %v, please check FISSION_NAMESPACE is set properly", ns) } var podName, podNameSpace string @@ -164,10 +163,10 @@ func runPortForward(ctx context.Context, client cmd.Client, labelSelector string svcs, err := client.KubernetesClient.CoreV1().Services(podNameSpace). List(ctx, metav1.ListOptions{LabelSelector: labelSelector}) if err != nil { - return nil, nil, errors.Wrapf(err, "Error getting %v service", labelSelector) + return nil, nil, fmt.Errorf("Error getting %v service: %w", labelSelector, err) } if len(svcs.Items) == 0 { - return nil, nil, errors.Errorf("Service %v not found", labelSelector) + return nil, nil, fmt.Errorf("Service %v not found", labelSelector) } service := &svcs.Items[0] @@ -192,7 +191,7 @@ func runPortForward(ctx context.Context, client cmd.Client, labelSelector string // actually start the port-forwarding process here transport, upgrader, err := spdy.RoundTripperFor(client.RestConfig) if err != nil { - return nil, nil, errors.Errorf("Failed to connect to Fission service on Kubernetes") + return nil, nil, fmt.Errorf("Failed to connect to Fission service on Kubernetes") } dialer := spdy.NewDialer(upgrader, &http.Client{Transport: transport}, "POST", url) @@ -202,7 +201,7 @@ func runPortForward(ctx context.Context, client cmd.Client, labelSelector string } fw, err := portforward.New(dialer, ports, stopChannel, readyChannel, outStream, os.Stderr) if err != nil { - return nil, nil, errors.Wrap(err, "error creating port forwarder") + return nil, nil, fmt.Errorf("error creating port forwarder: %w", err) } go func() { diff --git a/pkg/fission-cli/util/util.go b/pkg/fission-cli/util/util.go index 0c76ce75..4b485ab0 100644 --- a/pkg/fission-cli/util/util.go +++ b/pkg/fission-cli/util/util.go @@ -32,8 +32,9 @@ import ( ignore "github.com/sabhiram/go-gitignore" + "errors" + "github.com/hashicorp/go-multierror" - "github.com/pkg/errors" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -254,7 +255,7 @@ func GetResourceReqs(input cli.Input, resReqs *v1.ResourceRequirements) (*v1.Res mincpu := input.Int(flagkey.RuntimeMincpu) cpuRequest, err := resource.ParseQuantity(strconv.Itoa(mincpu) + "m") if err != nil { - e = multierror.Append(e, errors.Wrap(err, "Failed to parse mincpu")) + e = multierror.Append(e, fmt.Errorf("Failed to parse mincpu: %w", err)) } r.Requests[v1.ResourceCPU] = cpuRequest } @@ -263,7 +264,7 @@ func GetResourceReqs(input cli.Input, resReqs *v1.ResourceRequirements) (*v1.Res minmem := input.Int(flagkey.RuntimeMinmemory) memRequest, err := resource.ParseQuantity(strconv.Itoa(minmem) + "Mi") if err != nil { - e = multierror.Append(e, errors.Wrap(err, "Failed to parse minmemory")) + e = multierror.Append(e, fmt.Errorf("Failed to parse minmemory: %w", err)) } r.Requests[v1.ResourceMemory] = memRequest } @@ -272,7 +273,7 @@ func GetResourceReqs(input cli.Input, resReqs *v1.ResourceRequirements) (*v1.Res maxcpu := input.Int(flagkey.RuntimeMaxcpu) cpuLimit, err := resource.ParseQuantity(strconv.Itoa(maxcpu) + "m") if err != nil { - e = multierror.Append(e, errors.Wrap(err, "Failed to parse maxcpu")) + e = multierror.Append(e, fmt.Errorf("Failed to parse maxcpu: %w", err)) } r.Limits[v1.ResourceCPU] = cpuLimit } @@ -281,7 +282,7 @@ func GetResourceReqs(input cli.Input, resReqs *v1.ResourceRequirements) (*v1.Res maxmem := input.Int(flagkey.RuntimeMaxmemory) memLimit, err := resource.ParseQuantity(strconv.Itoa(maxmem) + "Mi") if err != nil { - e = multierror.Append(e, errors.Wrap(err, "Failed to parse maxmemory")) + e = multierror.Append(e, fmt.Errorf("Failed to parse maxmemory: %w", err)) } r.Limits[v1.ResourceMemory] = memLimit } @@ -340,7 +341,7 @@ func GetSpecIgnoreParser(specDir, specIgnore string) (ignore.IgnoreParser, error if _, err := os.Stat(specIgnorePath); errors.Is(err, os.ErrNotExist) { // return error if it's custom spec ignore file if specIgnore != SPEC_IGNORE_FILE { - return nil, errors.Errorf("Spec ignore file '%s' doesn't exist. "+ + return nil, fmt.Errorf("Spec ignore file '%s' doesn't exist. "+ "Please check the file path: '%s'", specIgnore, specIgnorePath) } return ignore.CompileIgnoreLines(), nil @@ -423,7 +424,7 @@ func ParseAnnotations(annotations []string) (map[string]string, error) { } } if invalidAnnotations != "" { - return nil, errors.Errorf("invalid annotations: %s", invalidAnnotations) + return nil, fmt.Errorf("invalid annotations: %s", invalidAnnotations) } return annotationMap, nil } @@ -523,7 +524,7 @@ func GetSvcName(ctx context.Context, kClient kubernetes.Interface, application s } if len(services.Items) > 1 || len(services.Items) == 0 { - return "", errors.Errorf("more than one service found for application=%s", application) + return "", fmt.Errorf("more than one service found for application=%s", application) } service := services.Items[0] return service.Name + "." + service.Namespace, nil @@ -576,7 +577,7 @@ func FunctionPodLogs(ctx context.Context, fnName, ns string, client cmd.Client) // get the pod with highest resource version err = getContainerLog(ctx, client.KubernetesClient, f, &pods[0]) if err != nil { - return errors.Wrapf(err, "error getting container logs") + return fmt.Errorf("error getting container logs: %w", err) } return err @@ -591,19 +592,19 @@ func getContainerLog(ctx context.Context, kubernetesClient kubernetes.Interface, podLogs, err := podLogsReq.Stream(ctx) if err != nil { - return errors.Wrapf(err, "error streaming pod log") + return fmt.Errorf("error streaming pod log: %w", err) } msg := fmt.Sprintf("\n%v\nFunction: %v\nEnvironment: %v\nNamespace: %v\nPod: %v\nContainer: %v\nNode: %v\n%v\n", seq, fn.ObjectMeta.Name, fn.Spec.Environment.Name, pod.Namespace, pod.Name, container.Name, pod.Spec.NodeName, seq) if _, err := io.WriteString(os.Stdout, msg); err != nil { - return errors.Wrapf(err, "error copying pod log") + return fmt.Errorf("error copying pod log: %w", err) } _, err = io.Copy(os.Stdout, podLogs) if err != nil { - return errors.Wrapf(err, "error copying pod log") + return fmt.Errorf("error copying pod log: %w", err) } podLogs.Close() diff --git a/pkg/kubewatcher/main.go b/pkg/kubewatcher/main.go index 7ef00451..f0a36e12 100644 --- a/pkg/kubewatcher/main.go +++ b/pkg/kubewatcher/main.go @@ -18,8 +18,8 @@ package kubewatcher import ( "context" + "fmt" - "github.com/pkg/errors" "go.uber.org/zap" "github.com/fission/fission/pkg/crd" @@ -30,23 +30,23 @@ import ( func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, routerUrl string) error { fissionClient, err := clientGen.GetFissionClient() if err != nil { - return errors.Wrap(err, "failed to get fission client") + return fmt.Errorf("failed to get fission client: %w", err) } kubeClient, err := clientGen.GetKubernetesClient() if err != nil { - return errors.Wrap(err, "failed to get kubernetes client") + return fmt.Errorf("failed to get kubernetes client: %w", err) } err = crd.WaitForFunctionCRDs(ctx, logger, fissionClient) if err != nil { - return errors.Wrap(err, "error waiting for CRDs") + return fmt.Errorf("error waiting for CRDs: %w", err) } poster := publisher.MakeWebhookPublisher(logger, routerUrl) kubeWatch := MakeKubeWatcher(ctx, logger, kubeClient, poster) ws, err := MakeWatchSync(ctx, logger, fissionClient, kubeWatch) if err != nil { - return errors.Wrap(err, "error making watch sync") + return fmt.Errorf("error making watch sync: %w", err) } ws.Run(ctx, mgr) diff --git a/pkg/mqtrigger/factory/factory.go b/pkg/mqtrigger/factory/factory.go index 1bc79b1d..33239c09 100644 --- a/pkg/mqtrigger/factory/factory.go +++ b/pkg/mqtrigger/factory/factory.go @@ -17,9 +17,9 @@ limitations under the License. package factory import ( + "fmt" "sync" - "github.com/pkg/errors" "go.uber.org/zap" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -56,7 +56,7 @@ func Register(mqType fv1.MessageQueueType, factory MessageQueueFactory) { func Create(logger *zap.Logger, mqType fv1.MessageQueueType, mqConfig messageQueue.Config, routerUrl string) (messageQueue.MessageQueue, error) { factory, registered := messageQueueFactories[mqType] if !registered { - return nil, errors.Errorf("no supported message queue type found for %q", mqType) + return nil, fmt.Errorf("no supported message queue type found for %q", mqType) } return factory.Create(logger, mqConfig, routerUrl) } diff --git a/pkg/mqtrigger/messageQueue/kafka/consumer.go b/pkg/mqtrigger/messageQueue/kafka/consumer.go index 920c5db5..7ebc2fc0 100644 --- a/pkg/mqtrigger/messageQueue/kafka/consumer.go +++ b/pkg/mqtrigger/messageQueue/kafka/consumer.go @@ -23,8 +23,9 @@ import ( "strconv" "strings" + "errors" + "github.com/IBM/sarama" - "github.com/pkg/errors" "go.uber.org/zap" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -215,7 +216,7 @@ func (ch *MqtConsumerGroupHandler) kafkaMsgHandler(msg *sarama.ConsumerMessage) errorString := "request body error: " + string(body) errorHeaders := generateErrorHeaders(errorString) errorHandler(ch.logger, ch.trigger, ch.producer, ch.fnUrl, - errors.Wrap(err, errorString), errorHeaders) + fmt.Errorf("%s: %w", errorString, err), errorHeaders) return } if resp.StatusCode != 200 { diff --git a/pkg/mqtrigger/messageQueue/kafka/kafka.go b/pkg/mqtrigger/messageQueue/kafka/kafka.go index 257aa914..781d48a1 100644 --- a/pkg/mqtrigger/messageQueue/kafka/kafka.go +++ b/pkg/mqtrigger/messageQueue/kafka/kafka.go @@ -25,8 +25,9 @@ import ( "strconv" "strings" + "errors" + "github.com/IBM/sarama" - "github.com/pkg/errors" "go.uber.org/zap" fv1 "github.com/fission/fission/pkg/apis/core/v1" diff --git a/pkg/mqtrigger/scalermanager.go b/pkg/mqtrigger/scalermanager.go index b9846246..4d98ec06 100644 --- a/pkg/mqtrigger/scalermanager.go +++ b/pkg/mqtrigger/scalermanager.go @@ -10,7 +10,6 @@ import ( "strings" "time" - "github.com/pkg/errors" "go.uber.org/zap" appsv1 "k8s.io/api/apps/v1" apiv1 "k8s.io/api/core/v1" @@ -18,13 +17,14 @@ import ( "k8s.io/client-go/kubernetes" k8sCache "k8s.io/client-go/tools/cache" + kedav1alpha1 "github.com/kedacore/keda/v2/apis/keda/v1alpha1" + kedaClient "github.com/kedacore/keda/v2/pkg/generated/clientset/versioned" + fv1 "github.com/fission/fission/pkg/apis/core/v1" "github.com/fission/fission/pkg/crd" "github.com/fission/fission/pkg/executor/util" "github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils/manager" - kedav1alpha1 "github.com/kedacore/keda/v2/apis/keda/v1alpha1" - kedaClient "github.com/kedacore/keda/v2/pkg/generated/clientset/versioned" ) var ( @@ -103,20 +103,20 @@ func mqTriggerEventHandlers(ctx context.Context, logger *zap.Logger, kubeClient func StartScalerManager(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, routerURL string) error { fissionClient, err := clientGen.GetFissionClient() if err != nil { - return errors.Wrap(err, "failed to get fission client") + return fmt.Errorf("failed to get fission client: %w", err) } kubeClient, err := clientGen.GetKubernetesClient() if err != nil { - return errors.Wrap(err, "failed to get kubernetes client") + return fmt.Errorf("failed to get kubernetes client: %w", err) } kedaClient, err := clientGen.GetKedaClient() if err != nil { - return errors.Wrap(err, "failed to get keda client") + return fmt.Errorf("failed to get keda client: %w", err) } err = crd.WaitForFunctionCRDs(ctx, logger, fissionClient) if err != nil { - return errors.Wrap(err, "error waiting for CRDs") + return fmt.Errorf("error waiting for CRDs: %w", err) } for _, informer := range utils.GetInformersForNamespaces(fissionClient, time.Minute*30, fv1.MessageQueueResource) { diff --git a/pkg/mqtrigger/scalermanager_test.go b/pkg/mqtrigger/scalermanager_test.go index 1dfe13ec..f9cd8f99 100644 --- a/pkg/mqtrigger/scalermanager_test.go +++ b/pkg/mqtrigger/scalermanager_test.go @@ -12,8 +12,9 @@ import ( "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/fake" - fv1 "github.com/fission/fission/pkg/apis/core/v1" kedav1alpha1 "github.com/kedacore/keda/v2/apis/keda/v1alpha1" + + fv1 "github.com/fission/fission/pkg/apis/core/v1" ) func Test_toEnvVar(t *testing.T) { diff --git a/pkg/publisher/publisher_test.go b/pkg/publisher/publisher_test.go index a97eef5c..9d430f5b 100644 --- a/pkg/publisher/publisher_test.go +++ b/pkg/publisher/publisher_test.go @@ -7,9 +7,10 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" + "github.com/fission/fission/pkg/utils/loggerfactory" otelUtils "github.com/fission/fission/pkg/utils/otel" - "github.com/stretchr/testify/assert" ) func TestPublisher(t *testing.T) { diff --git a/pkg/publisher/webhookPublisher.go b/pkg/publisher/webhookPublisher.go index ff6c61ea..d1b0ee0b 100644 --- a/pkg/publisher/webhookPublisher.go +++ b/pkg/publisher/webhookPublisher.go @@ -25,11 +25,12 @@ import ( "strings" "time" - otelUtils "github.com/fission/fission/pkg/utils/otel" "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.opentelemetry.io/otel" "go.uber.org/zap" "golang.org/x/net/context/ctxhttp" + + otelUtils "github.com/fission/fission/pkg/utils/otel" ) type ( diff --git a/pkg/router/functionHandler.go b/pkg/router/functionHandler.go index e732c925..3c2b30d6 100644 --- a/pkg/router/functionHandler.go +++ b/pkg/router/functionHandler.go @@ -29,7 +29,8 @@ import ( "strings" "time" - "github.com/pkg/errors" + "errors" + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.uber.org/zap" k8stypes "k8s.io/apimachinery/pkg/types" diff --git a/pkg/router/functionReferenceResolver.go b/pkg/router/functionReferenceResolver.go index 2a4e23ba..9cc4d438 100644 --- a/pkg/router/functionReferenceResolver.go +++ b/pkg/router/functionReferenceResolver.go @@ -20,7 +20,6 @@ import ( "fmt" "time" - "github.com/pkg/errors" "go.uber.org/zap" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" k8sCache "k8s.io/client-go/tools/cache" @@ -111,7 +110,7 @@ func (frr *functionReferenceResolver) resolve(trigger fv1.HTTPTrigger) (*resolve } default: - return nil, errors.Errorf("unrecognized function reference type %v", trigger.Spec.FunctionReference.Type) + return nil, fmt.Errorf("unrecognized function reference type %v", trigger.Spec.FunctionReference.Type) } // cache resolve result @@ -145,7 +144,7 @@ func (frr *functionReferenceResolver) resolveByName(namespace, name string) (*re } if !isExist { frr.logger.Error("function does not exists", zap.String("name", name), zap.String("namespace", namespace)) - return nil, errors.Errorf("function %s/%s does not exist", namespace, name) + return nil, fmt.Errorf("function %s/%s does not exist", namespace, name) } f := obj.(*fv1.Function) diff --git a/pkg/router/router.go b/pkg/router/router.go index cc1bd8b0..5828c4d0 100644 --- a/pkg/router/router.go +++ b/pkg/router/router.go @@ -47,7 +47,6 @@ import ( "time" "github.com/gorilla/mux" - "github.com/pkg/errors" "go.opentelemetry.io/otel" "go.uber.org/zap" @@ -91,7 +90,7 @@ func serve(ctx context.Context, logger *zap.Logger, mgr manager.Interface, port httpTriggerSet *HTTPTriggerSet, displayAccessLog bool) error { mr, err := router(ctx, logger, mgr, httpTriggerSet) if err != nil { - return errors.Wrap(err, "error making router") + return fmt.Errorf("error making router: %w", err) } handler := otelUtils.GetHandlerWithOTEL(mr, "fission-router", otelUtils.UrlsToIgnore("/router-healthz")) mgr.Add(ctx, func(ctx context.Context) { @@ -106,52 +105,52 @@ func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger * fissionClient, err := clientGen.GetFissionClient() if err != nil { - return errors.Wrap(err, "error making the fission client") + return fmt.Errorf("error making the fission client: %w", err) } kubeClient, err := clientGen.GetKubernetesClient() if err != nil { - return errors.Wrap(err, "error making the kube client") + return fmt.Errorf("error making the kube client: %w", err) } err = crd.WaitForFunctionCRDs(ctx, logger, fissionClient) if err != nil { - return errors.Wrap(err, "error waiting for CRDs") + return fmt.Errorf("error waiting for CRDs: %w", err) } timeoutStr := os.Getenv("ROUTER_ROUND_TRIP_TIMEOUT") timeout, err := time.ParseDuration(timeoutStr) if err != nil { - return errors.Wrap(err, fmt.Sprintf("failed to parse timeout duration value('%s') from 'ROUTER_ROUND_TRIP_TIMEOUT'", timeoutStr)) + return fmt.Errorf("failed to parse timeout duration value('%s') from 'ROUTER_ROUND_TRIP_TIMEOUT': %w", timeoutStr, err) } timeoutExponentStr := os.Getenv("ROUTER_ROUNDTRIP_TIMEOUT_EXPONENT") timeoutExponent, err := strconv.Atoi(timeoutExponentStr) if err != nil { - return errors.Wrap(err, fmt.Sprintf("failed to parse timeout exponent value('%s') from 'ROUTER_ROUNDTRIP_TIMEOUT_EXPONENT'", timeoutExponentStr)) + return fmt.Errorf("failed to parse timeout exponent value('%s') from 'ROUTER_ROUNDTRIP_TIMEOUT_EXPONENT': %w", timeoutExponentStr, err) } keepAliveTimeStr := os.Getenv("ROUTER_ROUND_TRIP_KEEP_ALIVE_TIME") keepAliveTime, err := time.ParseDuration(keepAliveTimeStr) if err != nil { - return errors.Wrap(err, fmt.Sprintf("failed to parse keep alive duration value('%s') from 'ROUTER_ROUND_TRIP_KEEP_ALIVE_TIME'", keepAliveTimeStr)) + return fmt.Errorf("failed to parse keep alive duration value('%s') from 'ROUTER_ROUND_TRIP_KEEP_ALIVE_TIME': %w", keepAliveTimeStr, err) } disableKeepAliveStr := os.Getenv("ROUTER_ROUND_TRIP_DISABLE_KEEP_ALIVE") disableKeepAlive, err := strconv.ParseBool(disableKeepAliveStr) if err != nil { - return errors.Wrap(err, fmt.Sprintf("failed to parse enable keep alive value('%s') from 'ROUTER_ROUND_TRIP_DISABLE_KEEP_ALIVE'", disableKeepAliveStr)) + return fmt.Errorf("failed to parse enable keep alive value('%s') from 'ROUTER_ROUND_TRIP_DISABLE_KEEP_ALIVE': %w", disableKeepAliveStr, err) } maxRetriesStr := os.Getenv("ROUTER_ROUND_TRIP_MAX_RETRIES") maxRetries, err := strconv.Atoi(maxRetriesStr) if err != nil { - return errors.Wrap(err, fmt.Sprintf("failed to parse max retries value('%s') from 'ROUTER_ROUND_TRIP_MAX_RETRIES'", maxRetriesStr)) + return fmt.Errorf("failed to parse max retries value('%s') from 'ROUTER_ROUND_TRIP_MAX_RETRIES': %w", maxRetriesStr, err) } isDebugEnvStr := os.Getenv("DEBUG_ENV") isDebugEnv, err := strconv.ParseBool(isDebugEnvStr) if err != nil { - return errors.Wrap(err, fmt.Sprintf("failed to parse debug env value('%s') from 'DEBUG_ENV'", isDebugEnvStr)) + return fmt.Errorf("failed to parse debug env value('%s') from 'DEBUG_ENV': %w", isDebugEnvStr, err) } // svcAddrRetryCount is the max times for RetryingRoundTripper to retry with a specific service address @@ -207,7 +206,7 @@ func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger * svcAddrRetryCount: svcAddrRetryCount, }, isDebugEnv, unTapServiceTimeout, throttler.MakeThrottler(svcAddrUpdateTimeout)) if err != nil { - return errors.Wrap(err, "error making HTTP trigger set") + return fmt.Errorf("error making HTTP trigger set: %w", err) } mgr.Add(ctx, func(ctx context.Context) { diff --git a/pkg/storagesvc/archivePruner.go b/pkg/storagesvc/archivePruner.go index c8128579..eb670467 100644 --- a/pkg/storagesvc/archivePruner.go +++ b/pkg/storagesvc/archivePruner.go @@ -18,6 +18,7 @@ package storagesvc import ( "context" + "fmt" "time" "go.uber.org/zap" @@ -27,7 +28,6 @@ import ( "github.com/fission/fission/pkg/generated/clientset/versioned" "github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils/manager" - "github.com/pkg/errors" ) type ArchivePruner struct { @@ -43,7 +43,7 @@ const defaultPruneInterval int = 60 // in minutes func MakeArchivePruner(logger *zap.Logger, clientGen crd.ClientGeneratorInterface, stowClient *StowClient, pruneInterval time.Duration) (*ArchivePruner, error) { fissionClient, err := clientGen.GetFissionClient() if err != nil { - return nil, errors.Wrap(err, "failed to get fission client") + return nil, fmt.Errorf("failed to get fission client: %w", err) } return &ArchivePruner{ diff --git a/pkg/storagesvc/client/client.go b/pkg/storagesvc/client/client.go index 7c9321f6..d05ef12f 100644 --- a/pkg/storagesvc/client/client.go +++ b/pkg/storagesvc/client/client.go @@ -28,7 +28,8 @@ import ( "os" "strings" - "github.com/pkg/errors" + "errors" + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "golang.org/x/net/context/ctxhttp" @@ -160,7 +161,7 @@ func (c *client) Download(ctx context.Context, id string, filePath string) error // quit if file exists _, err := os.Stat(filePath) if err == nil || !os.IsNotExist(err) { - return errors.Errorf("file already exists: %v", filePath) + return fmt.Errorf("file already exists: %v", filePath) } // create @@ -223,7 +224,7 @@ func (c *client) Delete(ctx context.Context, id string) error { defer resp.Body.Close() if resp.StatusCode != http.StatusOK { - return errors.Errorf("HTTP error %v", resp.StatusCode) + return fmt.Errorf("HTTP error %v", resp.StatusCode) } return nil diff --git a/pkg/storagesvc/localstorage.go b/pkg/storagesvc/localstorage.go index cf6443fe..48ec0e52 100644 --- a/pkg/storagesvc/localstorage.go +++ b/pkg/storagesvc/localstorage.go @@ -3,9 +3,10 @@ package storagesvc import ( "os" - "github.com/fission/fission/pkg/utils/uuid" "github.com/graymeta/stow" _ "github.com/graymeta/stow/local" + + "github.com/fission/fission/pkg/utils/uuid" ) type localStorage struct { diff --git a/pkg/storagesvc/storagesvc.go b/pkg/storagesvc/storagesvc.go index 3ca38d74..6a363d41 100644 --- a/pkg/storagesvc/storagesvc.go +++ b/pkg/storagesvc/storagesvc.go @@ -25,9 +25,10 @@ import ( "strconv" "time" + "errors" + "github.com/gorilla/mux" "github.com/graymeta/stow" - "github.com/pkg/errors" "go.uber.org/zap" "github.com/fission/fission/pkg/crd" @@ -292,7 +293,7 @@ func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger * // create a storage client storageClient, err := MakeStowClient(logger, storage) if err != nil { - return errors.Wrap(err, "Error creating stowClient") + return fmt.Errorf("Error creating stowClient: %w", err) } // create http handlers @@ -314,7 +315,7 @@ func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger * } pruner, err := MakeArchivePruner(logger, clientGen, storageClient, time.Duration(pruneInterval)) if err != nil { - return errors.Wrap(err, "Error creating archivePruner") + return fmt.Errorf("Error creating archivePruner: %w", err) } mgr.Add(ctx, func(ctx context.Context) { pruner.Start(ctx, mgr) diff --git a/pkg/storagesvc/stowClient.go b/pkg/storagesvc/stowClient.go index ca3a396f..5e06b6cf 100644 --- a/pkg/storagesvc/stowClient.go +++ b/pkg/storagesvc/stowClient.go @@ -24,8 +24,9 @@ import ( "strings" "time" + "errors" + "github.com/graymeta/stow" - "github.com/pkg/errors" "go.uber.org/zap" ) @@ -208,7 +209,7 @@ func (client *StowClient) getItemIDsWithFilter(filterFunc filter, filterFuncPara for { items, cursor, err = client.container.Items(client.config.storage.getSubDir(), cursor, PaginationSize) if err != nil { - return nil, errors.Wrap(err, "error getting items from container") + return nil, fmt.Errorf("error getting items from container: %w", err) } for _, item := range items { diff --git a/pkg/storagesvc/util.go b/pkg/storagesvc/util.go index 4046a65f..f3197902 100644 --- a/pkg/storagesvc/util.go +++ b/pkg/storagesvc/util.go @@ -17,15 +17,14 @@ limitations under the License. package storagesvc import ( + "fmt" "net/url" - - "github.com/pkg/errors" ) func getQueryParamValue(urlString string, queryParam string) (string, error) { url, err := url.Parse(urlString) if err != nil { - return "", errors.Wrapf(err, "error parsing URL string %q into URL", urlString) + return "", fmt.Errorf("error parsing URL string %q into URL: %w", urlString, err) } return url.Query().Get(queryParam), nil } diff --git a/pkg/throttler/throttler.go b/pkg/throttler/throttler.go index bf0a579a..f0a3400c 100644 --- a/pkg/throttler/throttler.go +++ b/pkg/throttler/throttler.go @@ -20,7 +20,7 @@ import ( "sync" "time" - "github.com/pkg/errors" + "errors" ) type throttlerOperationType int diff --git a/pkg/timer/main.go b/pkg/timer/main.go index 4d67707d..e588e73b 100644 --- a/pkg/timer/main.go +++ b/pkg/timer/main.go @@ -18,8 +18,8 @@ package timer import ( "context" + "fmt" - "github.com/pkg/errors" "go.uber.org/zap" "github.com/fission/fission/pkg/crd" @@ -30,18 +30,18 @@ import ( func Start(ctx context.Context, clientGen crd.ClientGeneratorInterface, logger *zap.Logger, mgr manager.Interface, routerUrl string) error { fissionClient, err := clientGen.GetFissionClient() if err != nil { - return errors.Wrap(err, "failed to get fission client") + return fmt.Errorf("failed to get fission client: %w", err) } err = crd.WaitForFunctionCRDs(ctx, logger, fissionClient) if err != nil { - return errors.Wrap(err, "error waiting for CRDs") + return fmt.Errorf("error waiting for CRDs: %w", err) } poster := publisher.MakeWebhookPublisher(logger, routerUrl) timerSync, err := MakeTimerSync(ctx, logger, fissionClient, MakeTimer(logger, poster)) if err != nil { - return errors.Wrap(err, "error making timer sync") + return fmt.Errorf("error making timer sync: %w", err) } timerSync.Run(ctx, mgr) return nil diff --git a/pkg/utils/gitrepo/gitrepo.go b/pkg/utils/gitrepo/gitrepo.go index ea79ddf0..fb4fde29 100644 --- a/pkg/utils/gitrepo/gitrepo.go +++ b/pkg/utils/gitrepo/gitrepo.go @@ -21,8 +21,9 @@ import ( "os" "strings" + "errors" + "github.com/go-git/go-git/v5" - "github.com/pkg/errors" ) type GitRepo struct { @@ -106,13 +107,13 @@ func (g *GitRepo) GetFileCommitLabel(filePath string) (string, error) { } if !g.isGitRepo { - return "", errors.Errorf(`directory: %s doesn't belong to git repository.`, g.dirPath) + return "", fmt.Errorf(`directory: %s doesn't belong to git repository.`, g.dirPath) } // filepath in the git repository splitPathList := strings.Split(filePath, g.gitRepoRootPath+string(os.PathSeparator)) if len(splitPathList) != 2 { - return "", errors.Errorf("error finding the git repository path of %s", filePath) + return "", fmt.Errorf("error finding the git repository path of %s", filePath) } gitFilePath := splitPathList[1] gitFileStatus := g.status.File(gitFilePath) diff --git a/pkg/utils/httpserver/server.go b/pkg/utils/httpserver/server.go index 5de6d56f..ea78da4a 100644 --- a/pkg/utils/httpserver/server.go +++ b/pkg/utils/httpserver/server.go @@ -6,8 +6,9 @@ import ( "net/http" "strings" - "github.com/fission/fission/pkg/utils/manager" "go.uber.org/zap" + + "github.com/fission/fission/pkg/utils/manager" ) func StartServer(ctx context.Context, log *zap.Logger, mgr manager.Interface, svc string, port string, handler http.Handler) { diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 62118334..06c18865 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -29,7 +29,8 @@ import ( "strconv" "strings" - "github.com/pkg/errors" + "errors" + "golang.org/x/net/context/ctxhttp" apiv1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -75,11 +76,11 @@ func FindAllGlobs(paths ...string) ([]string, error) { // use absolute path to find files path, err := filepath.Abs(p) if err != nil { - return nil, errors.Wrapf(err, "error getting absolute path of path '%s'", p) + return nil, fmt.Errorf("error getting absolute path of path '%s': %w", p, err) } globs, err := filepath.Glob(path) if err != nil { - return nil, errors.Errorf("invalid glob %s: %s", path, err) + return nil, fmt.Errorf("invalid glob %s: %s", path, err) } files = append(files, globs...) // xxx handle excludeGlobs here @@ -166,7 +167,7 @@ func isHttp2xxSuccessful(status int) bool { func DownloadUrl(ctx context.Context, httpClient *http.Client, url string, localPath string) error { // validate local path for directory traversal attacks if filepath.Clean(localPath) != localPath { - return errors.Errorf("invalid local path: %s", localPath) + return fmt.Errorf("invalid local path: %s", localPath) } resp, err := ctxhttp.Get(ctx, httpClient, url) if err != nil { @@ -206,7 +207,7 @@ func DownloadUrl(ctx context.Context, httpClient *http.Client, url string, local func GetStringValueFromEnv(envVar string) (string, error) { v := os.Getenv(envVar) if v == "" { - return v, errors.New(fmt.Sprintf("Еnvironment variable %s empty", envVar)) + return v, fmt.Errorf("environment variable %s empty", envVar) } return v, nil } diff --git a/test/e2e/fetcher/fetcher_test.go b/test/e2e/fetcher/fetcher_test.go index 4dacfd63..19b1a551 100644 --- a/test/e2e/fetcher/fetcher_test.go +++ b/test/e2e/fetcher/fetcher_test.go @@ -18,6 +18,14 @@ import ( "github.com/fission/fission/pkg/fetcher/client" storageClient "github.com/fission/fission/pkg/storagesvc/client" + "github.com/stretchr/testify/require" + "github.com/stretchr/testify/suite" + "go.uber.org/zap" + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/kubernetes" + "github.com/fission/fission/pkg/generated/clientset/versioned" "github.com/fission/fission/pkg/utils" "github.com/fission/fission/pkg/utils/httpserver" @@ -27,13 +35,6 @@ import ( "github.com/fission/fission/test/e2e/framework" "github.com/fission/fission/test/e2e/framework/cli" "github.com/fission/fission/test/e2e/framework/services" - "github.com/stretchr/testify/require" - "github.com/stretchr/testify/suite" - "go.uber.org/zap" - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/client-go/kubernetes" ) const testFileData = `