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