You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2020/11/17 10:46:35 UTC
[camel-k] 01/12: Add local run command.
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 5e827721eb9e166fa92c511988549f7a43e3e955
Author: Doru Bercea <gh...@ibm.com>
AuthorDate: Tue Nov 3 10:29:00 2020 -0500
Add local run command.
---
pkg/cmd/inspect.go | 2 +-
pkg/cmd/local_run.go | 131 +++++++++++++++++++++++++++++++++++++++++++++++++++
pkg/cmd/root.go | 1 +
3 files changed, 133 insertions(+), 1 deletion(-)
diff --git a/pkg/cmd/inspect.go b/pkg/cmd/inspect.go
index 1c2cbf4..02eed21 100644
--- a/pkg/cmd/inspect.go
+++ b/pkg/cmd/inspect.go
@@ -18,7 +18,6 @@ limitations under the License.
package cmd
import (
- "errors"
"fmt"
"io/ioutil"
"os"
@@ -32,6 +31,7 @@ import (
"github.com/apache/camel-k/pkg/util/camel"
"github.com/apache/camel-k/pkg/util/defaults"
"github.com/apache/camel-k/pkg/util/maven"
+ "github.com/pkg/errors"
"github.com/scylladb/go-set/strset"
"github.com/spf13/cobra"
)
diff --git a/pkg/cmd/local_run.go b/pkg/cmd/local_run.go
new file mode 100644
index 0000000..70af154
--- /dev/null
+++ b/pkg/cmd/local_run.go
@@ -0,0 +1,131 @@
+/*
+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"
+ "path"
+
+ v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+ "github.com/apache/camel-k/pkg/trait"
+ "github.com/apache/camel-k/pkg/util"
+ "github.com/apache/camel-k/pkg/util/camel"
+ "github.com/scylladb/go-set/strset"
+ "github.com/spf13/cobra"
+)
+
+func newCmdLocalRun(rootCmdOptions *RootCmdOptions) (*cobra.Command, *localRunCmdOptions) {
+ options := localRunCmdOptions{
+ RootCmdOptions: rootCmdOptions,
+ }
+
+ cmd := cobra.Command{
+ Use: "local-run [files to inspect]",
+ Short: "Run a Camel integration locally.",
+ Long: `Run a Camel integration locally using existing integration files.`,
+ PreRunE: decode(&options),
+ RunE: func(_ *cobra.Command, args []string) error {
+ if err := options.validate(args); err != nil {
+ return err
+ }
+ if err := options.run(args); err != nil {
+ fmt.Println(err.Error())
+ }
+
+ return nil
+ },
+ Annotations: map[string]string{
+ offlineCommandLabel: "true",
+ },
+ }
+
+ cmd.Flags().StringP("properties", "p", "", "Output format. One of: json|yaml")
+
+ return &cmd, &options
+}
+
+type localRunCmdOptions struct {
+ *RootCmdOptions
+ Properties string `mapstructure:"properties"`
+}
+
+func (command *localRunCmdOptions) validate(args []string) error {
+ // If no source files have been provided there is nothing to inspect.
+ if len(args) == 0 {
+ return errors.New("no integration files have been provided, nothing to inspect")
+ }
+
+ // Ensure source files exist.
+ for _, arg := range args {
+ // fmt.Printf("Validating file: %v\n", arg)
+ fileExists, err := util.FileExists(arg)
+
+ // Report any error.
+ if err != nil {
+ return err
+ }
+
+ // Signal file not found.
+ if !fileExists {
+ return errors.New("input file " + arg + " file does not exist")
+ }
+ }
+
+ return nil
+}
+
+func (command *localRunCmdOptions) run(args []string) error {
+ // Attempt to reuse existing Camel catalog if one is present.
+ catalog, err := camel.MainCatalog()
+ if err != nil {
+ return err
+ }
+
+ // Generate catalog if one was not found.
+ if catalog == nil {
+ catalog, err = generateCatalog()
+ if err != nil {
+ return err
+ }
+ }
+
+ // List of top-level dependencies.
+ dependencies := strset.New()
+
+ // Invoke the dependency inspector code for each source file.
+ for _, source := range args {
+ data, _, err := loadContent(source, false, false)
+ if err != nil {
+ return err
+ }
+
+ sourceSpec := v1.SourceSpec{
+ DataSpec: v1.DataSpec{
+ Name: path.Base(source),
+ Content: data,
+ Compression: false,
+ },
+ }
+
+ // Extract list of top-level dependencies.
+ dependencies.Merge(trait.AddSourceDependencies(sourceSpec, catalog))
+ }
+
+ return nil
+}
diff --git a/pkg/cmd/root.go b/pkg/cmd/root.go
index 2899a30..eba43c2 100644
--- a/pkg/cmd/root.go
+++ b/pkg/cmd/root.go
@@ -139,6 +139,7 @@ func addKamelSubcommands(cmd *cobra.Command, options *RootCmdOptions) {
cmd.AddCommand(cmdOnly(newCmdInit(options)))
cmd.AddCommand(cmdOnly(newCmdDebug(options)))
cmd.AddCommand(cmdOnly(newCmdInspect(options)))
+ cmd.AddCommand(cmdOnly(newCmdLocalRun(options)))
}
func addHelpSubCommands(cmd *cobra.Command, options *RootCmdOptions) error {