You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2018/12/24 11:39:40 UTC
[camel-k] branch master updated: chore(client): add a reset command
This is an automated email from the ASF dual-hosted git repository.
lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/master by this push:
new 5140057 chore(client): add a reset command
5140057 is described below
commit 5140057f87220cd6fded71d67396c615f9b530c0
Author: nferraro <ni...@gmail.com>
AuthorDate: Fri Dec 21 13:26:16 2018 +0100
chore(client): add a reset command
---
pkg/client/cmd/reset.go | 108 ++++++++++++++++++++++++++++++++++++++++++++++++
pkg/client/cmd/root.go | 1 +
2 files changed, 109 insertions(+)
diff --git a/pkg/client/cmd/reset.go b/pkg/client/cmd/reset.go
new file mode 100644
index 0000000..6a456b7
--- /dev/null
+++ b/pkg/client/cmd/reset.go
@@ -0,0 +1,108 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package cmd
+
+import (
+ "fmt"
+
+ "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+ "github.com/operator-framework/operator-sdk/pkg/sdk"
+ "github.com/pkg/errors"
+ "github.com/spf13/cobra"
+)
+
+func newCmdReset(rootCmdOptions *RootCmdOptions) *cobra.Command {
+ options := resetCmdOptions{
+ RootCmdOptions: rootCmdOptions,
+ }
+ cmd := cobra.Command{
+ Use: "reset",
+ Short: "Reset the Camel K installation",
+ Long: `Reset the Camel K installation by deleting everything except current platform configuration.`,
+ RunE: options.reset,
+ }
+
+ return &cmd
+}
+
+type resetCmdOptions struct {
+ *RootCmdOptions
+}
+
+func (o *resetCmdOptions) reset(cmd *cobra.Command, args []string) (err error) {
+ var n int
+ if n, err = o.deleteAllIntegrations(); err != nil {
+ return err
+ }
+ fmt.Printf("%d integrations deleted from namespace %s\n", n, o.Namespace)
+
+ if n, err = o.deleteAllIntegrationContexts(); err != nil {
+ return err
+ }
+ fmt.Printf("%d integration contexts deleted from namespace %s\n", n, o.Namespace)
+
+ if err = o.resetIntegrationPlatform(); err != nil {
+ return err
+ }
+ fmt.Println("Camel K platform has been reset successfully!")
+ return err
+}
+
+func (o *resetCmdOptions) deleteAllIntegrations() (int, error) {
+ list := v1alpha1.NewIntegrationList()
+ if err := sdk.List(o.Namespace, &list); err != nil {
+ return 0, errors.Wrap(err, fmt.Sprintf("could not retrieve integrations from namespace %s", o.Namespace))
+ }
+ for _, i := range list.Items {
+ it := i
+ if err := sdk.Delete(&it); err != nil {
+ return 0, errors.Wrap(err, fmt.Sprintf("could not delete integration %s from namespace %s", it.Name, it.Namespace))
+ }
+ }
+ return len(list.Items), nil
+}
+
+func (o *resetCmdOptions) deleteAllIntegrationContexts() (int, error) {
+ list := v1alpha1.NewIntegrationContextList()
+ if err := sdk.List(o.Namespace, &list); err != nil {
+ return 0, errors.Wrap(err, fmt.Sprintf("could not retrieve integration contexts from namespace %s", o.Namespace))
+ }
+ for _, i := range list.Items {
+ ictx := i
+ if err := sdk.Delete(&ictx); err != nil {
+ return 0, errors.Wrap(err, fmt.Sprintf("could not delete integration context %s from namespace %s", ictx.Name, ictx.Namespace))
+ }
+ }
+ return len(list.Items), nil
+}
+
+func (o *resetCmdOptions) resetIntegrationPlatform() error {
+ list := v1alpha1.NewIntegrationPlatformList()
+ if err := sdk.List(o.Namespace, &list); err != nil {
+ return errors.Wrap(err, fmt.Sprintf("could not retrieve integration platform from namespace %s", o.Namespace))
+ }
+ if len(list.Items) > 1 {
+ return errors.New(fmt.Sprintf("expected 1 integration platform in the namespace, found: %d", len(list.Items)))
+ } else if len(list.Items) == 0 {
+ return errors.New("no integration platforms found in the namespace: run \"kamel install\" to install the platform")
+ }
+ platform := list.Items[0]
+ // Let's reset the status
+ platform.Status = v1alpha1.IntegrationPlatformStatus{}
+ return sdk.Update(&platform)
+}
diff --git a/pkg/client/cmd/root.go b/pkg/client/cmd/root.go
index 203876a..92a83e8 100644
--- a/pkg/client/cmd/root.go
+++ b/pkg/client/cmd/root.go
@@ -76,6 +76,7 @@ func NewKamelCommand(ctx context.Context) (*cobra.Command, error) {
cmd.AddCommand(newCmdInstall(&options))
cmd.AddCommand(newCmdLog(&options))
cmd.AddCommand(newCmdContext(&options))
+ cmd.AddCommand(newCmdReset(&options))
return &cmd, nil
}