camel-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From nferr...@apache.org
Subject [camel-k] 01/02: Add delete integration option
Date Wed, 19 Sep 2018 15:19:57 GMT
This is an automated email from the ASF dual-hosted git repository.

nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit eed2abf387e3e784e539c7fc38237d47e9206a2a
Author: Dmitry Volodin <dmvolod@gmail.com>
AuthorDate: Wed Sep 19 12:32:27 2018 +0300

    Add delete integration option
---
 pkg/client/cmd/delete.go | 101 +++++++++++++++++++++++++++++++++++++++++++++++
 pkg/client/cmd/root.go   |   7 ++--
 2 files changed, 105 insertions(+), 3 deletions(-)

diff --git a/pkg/client/cmd/delete.go b/pkg/client/cmd/delete.go
new file mode 100644
index 0000000..3b0f25a
--- /dev/null
+++ b/pkg/client/cmd/delete.go
@@ -0,0 +1,101 @@
+/*
+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 (
+	"errors"
+	"fmt"
+	"os"
+
+	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+	"github.com/operator-framework/operator-sdk/pkg/sdk"
+	"github.com/spf13/cobra"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+// NewCmdDelete --
+func newCmdDelete(rootCmdOptions *RootCmdOptions) *cobra.Command {
+	options := deleteCmdOptions{
+		RootCmdOptions: rootCmdOptions,
+	}
+	cmd := cobra.Command{
+		Use:   "delete",
+		Short: "Delete integrations deployed on Kubernetes",
+		RunE:  options.run,
+	}
+
+	cmd.Flags().StringVar(&options.integrationName, "name", "", "The integration name")
+	cmd.Flags().BoolVar(&options.deleteAll, "all", false, "Delete all integrations")
+	cmd.ParseFlags(os.Args)
+
+	return &cmd
+}
+
+type deleteCmdOptions struct {
+	*RootCmdOptions
+	integrationName string
+	deleteAll       bool
+}
+
+func (o *deleteCmdOptions) run(cmd *cobra.Command, args []string) error {
+	namespace := o.Namespace
+
+	integrationList := v1alpha1.IntegrationList{
+		TypeMeta: metav1.TypeMeta{
+			APIVersion: v1alpha1.SchemeGroupVersion.String(),
+			Kind:       v1alpha1.IntegrationKind,
+		},
+	}
+
+	integration := v1alpha1.Integration{
+		TypeMeta: metav1.TypeMeta{
+			Kind:       v1alpha1.IntegrationKind,
+			APIVersion: v1alpha1.SchemeGroupVersion.String(),
+		},
+		ObjectMeta: metav1.ObjectMeta{
+			Namespace: namespace,
+			Name:      o.integrationName,
+		},
+	}
+
+	if o.integrationName != "" && !o.deleteAll {
+		err := sdk.Delete(&integration)
+		if err != nil {
+			return err
+		}
+
+		fmt.Println("Integration " + integration.GetName() + " deleted")
+	} else if o.deleteAll {
+		//Looks like Operator SDK doesn't support deletion of all objects with one command
+		err := sdk.List(namespace, &integrationList)
+		if err != nil {
+			return err
+		}
+		for _, integration := range integrationList.Items {
+			err := sdk.Delete(&integration)
+			if err != nil {
+				return err
+			}
+		}
+	} else {
+		err := errors.New("An integration name or --all option must be specified")
+		return err
+	}
+
+	return nil
+}
diff --git a/pkg/client/cmd/root.go b/pkg/client/cmd/root.go
index 7fbeeef..4c3e574 100644
--- a/pkg/client/cmd/root.go
+++ b/pkg/client/cmd/root.go
@@ -46,9 +46,9 @@ func NewKamelCommand(ctx context.Context) (*cobra.Command, error) {
 		Context: ctx,
 	}
 	var cmd = cobra.Command{
-		Use:                    "kamel",
-		Short:                  "Kamel is a awesome client tool for running Apache Camel integrations
natively on Kubernetes",
-		Long:                   kamelCommandLongDescription,
+		Use:   "kamel",
+		Short: "Kamel is a awesome client tool for running Apache Camel integrations natively on
Kubernetes",
+		Long:  kamelCommandLongDescription,
 		BashCompletionFunction: bashCompletionFunction,
 	}
 
@@ -76,6 +76,7 @@ func NewKamelCommand(ctx context.Context) (*cobra.Command, error) {
 	cmd.AddCommand(newCmdVersion())
 	cmd.AddCommand(newCmdRun(&options))
 	cmd.AddCommand(newCmdGet(&options))
+	cmd.AddCommand(newCmdDelete(&options))
 	cmd.AddCommand(newCmdInstall(&options))
 	cmd.AddCommand(newCmdContext(&options))
 


Mime
View raw message