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


The following commit(s) were added to refs/heads/master by this push:
     new 6275a0c  kamel run Sample.java works
6275a0c is described below

commit 6275a0c6493cd542d02e34c6b58de415dbbfa7c9
Author: nferraro <ni.ferr...@gmail.com>
AuthorDate: Fri Sep 7 10:40:07 2018 +0200

    kamel run Sample.java works
---
 Gopkg.lock                                         | 19 ++++----
 Gopkg.toml                                         |  9 ++--
 Sample.java                                        | 14 ++++++
 .../{main.go => kamel_k_operator.go}               |  0
 cmd/kamel/{main.go => kamel.go}                    | 12 +++--
 pkg/{ => client}/cmd/cmd.go                        | 15 ++++--
 pkg/{cmd/config => client/cmd}/config.go           | 16 +++----
 pkg/{ => client}/cmd/run/run.go                    | 54 ++++++++++++++++++++--
 pkg/{ => client}/cmd/version/version.go            |  0
 .../main.go => pkg/util/kubernetes/sanitize.go     | 30 +++++++-----
 10 files changed, 122 insertions(+), 47 deletions(-)

diff --git a/Gopkg.lock b/Gopkg.lock
index 8c9833a..203e5c3 100644
--- a/Gopkg.lock
+++ b/Gopkg.lock
@@ -4,8 +4,8 @@
 [[projects]]
   name = "cloud.google.com/go"
   packages = ["compute/metadata"]
-  revision = "64a2037ec6be8a4b0c1d1f706ed35b428b989239"
-  version = "v0.26.0"
+  revision = "c728a003b238b26cef9ab6753a5dc424b331c3ad"
+  version = "v0.27.0"
 
 [[projects]]
   name = "github.com/PuerkitoBio/purell"
@@ -191,7 +191,7 @@
   version = "v3.9.0"
 
 [[projects]]
-  branch = "master"
+  branch = "custom-init"
   name = "github.com/operator-framework/operator-sdk"
   packages = [
     "pkg/k8sclient",
@@ -200,7 +200,8 @@
     "pkg/util/k8sutil",
     "version"
   ]
-  revision = "0f60da86a138f7e79f275d539c18615bc2727014"
+  revision = "1f054f1486dfe08ab250696ed0d786253638e7ca"
+  source = "g...@github.com:nicolaferraro/operator-sdk.git"
 
 [[projects]]
   name = "github.com/pkg/errors"
@@ -278,7 +279,7 @@
   branch = "master"
   name = "golang.org/x/crypto"
   packages = ["ssh/terminal"]
-  revision = "182538f80094b6a8efaade63a8fd8e0d9d5843dd"
+  revision = "0709b304e793a5edb4a2c0145f281ecdc20838a4"
 
 [[projects]]
   branch = "master"
@@ -291,7 +292,7 @@
     "http2/hpack",
     "idna"
   ]
-  revision = "8a410e7b638dca158bf9e766925842f6651ff828"
+  revision = "161cd47e91fd58ac17490ef4d742dc98bb4cf60e"
 
 [[projects]]
   branch = "master"
@@ -312,7 +313,7 @@
     "unix",
     "windows"
   ]
-  revision = "fa5fdf94c78965f1aa8423f0cc50b8b8d728b05a"
+  revision = "8cf3aee429924738c56c34bb819c4ea8273fc434"
 
 [[projects]]
   name = "golang.org/x/text"
@@ -350,7 +351,7 @@
     "imports",
     "internal/fastwalk"
   ]
-  revision = "7ca132754999accbaa5c1735eda29e7ce0f3bf03"
+  revision = "0aa4b8830f481fed77b73cf7cea2bc3129e05148"
 
 [[projects]]
   name = "google.golang.org/appengine"
@@ -584,6 +585,6 @@
 [solve-meta]
   analyzer-name = "dep"
   analyzer-version = 1
-  inputs-digest = 
"c389a066bf0697a6e8a5b618cb76954f299b9d346e69cc46dade09c1de436ce8"
+  inputs-digest = 
"48fe81abc082944be87772c4562916fb9fe53b198f41ca770d84957d6b785516"
   solver-name = "gps-cdcl"
   solver-version = 1
diff --git a/Gopkg.toml b/Gopkg.toml
index 4eee1cb..4886973 100644
--- a/Gopkg.toml
+++ b/Gopkg.toml
@@ -53,6 +53,9 @@ required = [
 
 [[constraint]]
   name = "github.com/operator-framework/operator-sdk"
-  # The version rule is used for a specific release and the master branch for 
in between releases.
-  branch = "master"
-  # version = "=v0.0.5"
+  # Using fork to customize the Kubernetes rest config
+  source = "g...@github.com:nicolaferraro/operator-sdk.git"
+  branch = "custom-init"
+  ## The version rule is used for a specific release and the master branch for 
in between releases.
+  #branch = "master"
+  ## version = "=v0.0.5"
diff --git a/Sample.java b/Sample.java
new file mode 100644
index 0000000..47f59e9
--- /dev/null
+++ b/Sample.java
@@ -0,0 +1,14 @@
+package kamel;
+
+import org.apache.camel.builder.RouteBuilder;
+
+public class Routes extends RouteBuilder {
+
+  @Override
+  public void configure() throws Exception {
+         from("timer:tick")
+               .setBody(constant("Hello Kamel!!!"))
+               .to("log:info");
+  }
+
+}
\ No newline at end of file
diff --git a/cmd/camel-k-operator/main.go 
b/cmd/camel-k-operator/kamel_k_operator.go
similarity index 100%
rename from cmd/camel-k-operator/main.go
rename to cmd/camel-k-operator/kamel_k_operator.go
diff --git a/cmd/kamel/main.go b/cmd/kamel/kamel.go
similarity index 82%
copy from cmd/kamel/main.go
copy to cmd/kamel/kamel.go
index bc1c1bb..c502427 100644
--- a/cmd/kamel/main.go
+++ b/cmd/kamel/kamel.go
@@ -21,16 +21,20 @@ import (
        _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
        "fmt"
        "os"
-       "github.com/apache/camel-k/pkg/cmd"
+       "github.com/apache/camel-k/pkg/client/cmd"
 )
 
 func main() {
+       rootCmd, err := cmd.NewKamelCommand()
+       exitOnError(err)
 
-       rootCmd := cmd.NewKamelCommand()
+       err = rootCmd.Execute()
+       exitOnError(err)
+}
 
-       if err := rootCmd.Execute(); err != nil {
+func exitOnError(err error) {
+       if err != nil {
                fmt.Println(err)
                os.Exit(1)
        }
-
 }
diff --git a/pkg/cmd/cmd.go b/pkg/client/cmd/cmd.go
similarity index 81%
rename from pkg/cmd/cmd.go
rename to pkg/client/cmd/cmd.go
index dacf440..6f4c258 100644
--- a/pkg/cmd/cmd.go
+++ b/pkg/client/cmd/cmd.go
@@ -19,11 +19,12 @@ package cmd
 
 import (
        "github.com/spf13/cobra"
-       "github.com/apache/camel-k/pkg/cmd/version"
-       "github.com/apache/camel-k/pkg/cmd/run"
+       "github.com/apache/camel-k/pkg/client/cmd/version"
+       "github.com/apache/camel-k/pkg/client/cmd/run"
 )
 
-func NewKamelCommand() *cobra.Command {
+func NewKamelCommand() (*cobra.Command, error) {
+
        var rootCmd = cobra.Command{
                Use: "kamel",
                Short: "Kamel is a awesome client tool for running Apache Camel 
integrations natively on Kubernetes",
@@ -34,6 +35,12 @@ func NewKamelCommand() *cobra.Command {
        var kubeconfig string
        rootCmd.PersistentFlags().StringVar(&kubeconfig, "config", "", "Path to 
the config file to use for CLI requests")
 
+       // Initialize the Kubernetes client to allow using the operator-sdk
+       err := initKubeClient(&rootCmd)
+       if err != nil {
+               return nil, err
+       }
+
        rootCmd.AddCommand(version.NewCmdVersion(), run.NewCmdRun())
-       return &rootCmd
+       return &rootCmd, nil
 }
\ No newline at end of file
diff --git a/pkg/cmd/config/config.go b/pkg/client/cmd/config.go
similarity index 82%
rename from pkg/cmd/config/config.go
rename to pkg/client/cmd/config.go
index 1e8583e..590b02d 100644
--- a/pkg/cmd/config/config.go
+++ b/pkg/client/cmd/config.go
@@ -15,17 +15,17 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 */
 
-package config
+package cmd
 
 import (
        "path/filepath"
        "k8s.io/client-go/tools/clientcmd"
        "os"
-       "k8s.io/client-go/kubernetes"
        "github.com/spf13/cobra"
+       "github.com/operator-framework/operator-sdk/pkg/k8sclient"
 )
 
-func NewKubeClient(cmd *cobra.Command) (*kubernetes.Clientset, error) {
+func initKubeClient(cmd *cobra.Command) error {
        kubeconfig := cmd.Flag("config").Value.String()
        if kubeconfig == "" {
                kubeconfig = filepath.Join(homeDir(), ".kube", "config")
@@ -34,15 +34,11 @@ func NewKubeClient(cmd *cobra.Command) 
(*kubernetes.Clientset, error) {
        // use the current context in kubeconfig
        config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
        if err != nil {
-               return nil, err
+               return err
        }
 
-       // create the clientset
-       clientset, err := kubernetes.NewForConfig(config)
-       if err != nil {
-               return nil, err
-       }
-       return clientset, nil
+       k8sclient.CustomConfig = config
+       return nil
 }
 
 func homeDir() string {
diff --git a/pkg/cmd/run/run.go b/pkg/client/cmd/run/run.go
similarity index 58%
rename from pkg/cmd/run/run.go
rename to pkg/client/cmd/run/run.go
index 6510635..3237f80 100644
--- a/pkg/cmd/run/run.go
+++ b/pkg/client/cmd/run/run.go
@@ -22,8 +22,12 @@ import (
        "errors"
        "strconv"
        "os"
-       "github.com/apache/camel-k/pkg/cmd/config"
-       "fmt"
+       "github.com/operator-framework/operator-sdk/pkg/sdk"
+       "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+       "k8s.io/apimachinery/pkg/apis/meta/v1"
+       "io/ioutil"
+       k8serrors "k8s.io/apimachinery/pkg/api/errors"
+       "github.com/apache/camel-k/pkg/util/kubernetes"
 )
 
 type runCmdFlags struct {
@@ -59,11 +63,51 @@ func validateArgs(cmd *cobra.Command, args []string) error {
 }
 
 func run(cmd *cobra.Command, args []string) error {
-       _, err := config.NewKubeClient(cmd)
+       code, err := loadCode(args[0])
        if err != nil {
                return err
        }
 
-       fmt.Println("Now something should run")
-       return nil
+       name := kubernetes.SanitizeName(args[0])
+       if name == "" {
+               name = "integration"
+       }
+
+       integration := v1alpha1.Integration{
+               TypeMeta: v1.TypeMeta{
+                       Kind: "Integration",
+                       APIVersion: v1alpha1.SchemeGroupVersion.String(),
+               },
+               ObjectMeta: v1.ObjectMeta{
+                       Namespace: "test", // TODO discover current namespace 
dynamically (and with command option)
+                       Name: name,
+               },
+               Spec: v1alpha1.IntegrationSpec{
+                       Source: v1alpha1.SourceSpec{
+                               Code: &code,
+                       },
+               },
+       }
+
+       err = sdk.Create(&integration)
+       if err != nil && k8serrors.IsAlreadyExists(err) {
+               clone := integration.DeepCopy()
+               err = sdk.Get(clone)
+               if err != nil {
+                       return err
+               }
+               integration.ResourceVersion = clone.ResourceVersion
+               err = sdk.Update(&integration)
+       }
+
+       return err
+}
+
+func loadCode(fileName string) (string, error) {
+       content, err := ioutil.ReadFile(fileName)
+       if err != nil {
+               return "", err
+       }
+       // TODO check encoding issues
+       return string(content), err
 }
diff --git a/pkg/cmd/version/version.go b/pkg/client/cmd/version/version.go
similarity index 100%
rename from pkg/cmd/version/version.go
rename to pkg/client/cmd/version/version.go
diff --git a/cmd/kamel/main.go b/pkg/util/kubernetes/sanitize.go
similarity index 62%
rename from cmd/kamel/main.go
rename to pkg/util/kubernetes/sanitize.go
index bc1c1bb..37ec58c 100644
--- a/cmd/kamel/main.go
+++ b/pkg/util/kubernetes/sanitize.go
@@ -15,22 +15,28 @@ See the License for the specific language governing 
permissions and
 limitations under the License.
 */
 
-package main
+package kubernetes
 
 import (
-       _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
-       "fmt"
-       "os"
-       "github.com/apache/camel-k/pkg/cmd"
+       "strings"
+       "regexp"
+       "unicode"
 )
 
-func main() {
+var disallowedChars *regexp.Regexp
 
-       rootCmd := cmd.NewKamelCommand()
-
-       if err := rootCmd.Execute(); err != nil {
-               fmt.Println(err)
-               os.Exit(1)
-       }
+func init() {
+       disallowedChars = regexp.MustCompile("[^a-z0-9-]")
+}
 
+func SanitizeName(name string) string {
+       name = strings.Split(name, ".")[0]
+       name = strings.ToLower(name)
+       name = disallowedChars.ReplaceAllString(name, "")
+       name = strings.TrimFunc(name, isDisallowedStartEndChar)
+       return name
 }
+
+func isDisallowedStartEndChar(rune rune) bool {
+       return !unicode.IsLetter(rune)
+}
\ No newline at end of file

Reply via email to