From commits-return-65783-archive-asf-public=cust-asf.ponee.io@camel.apache.org Mon Oct 8 16:19:44 2018 Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx-eu-01.ponee.io (Postfix) with SMTP id 2D98B1807AA for ; Mon, 8 Oct 2018 16:19:43 +0200 (CEST) Received: (qmail 3596 invoked by uid 500); 8 Oct 2018 14:19:42 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 3341 invoked by uid 99); 8 Oct 2018 14:19:42 -0000 Received: from ec2-52-202-80-70.compute-1.amazonaws.com (HELO gitbox.apache.org) (52.202.80.70) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 08 Oct 2018 14:19:42 +0000 Received: by gitbox.apache.org (ASF Mail Server at gitbox.apache.org, from userid 33) id DFE1282C7F; Mon, 8 Oct 2018 14:19:40 +0000 (UTC) Date: Mon, 08 Oct 2018 14:19:49 +0000 To: "commits@camel.apache.org" Subject: [camel-k] 09/14: Added trait command line config MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit From: lburgazzoli@apache.org In-Reply-To: <153900838033.12376.7955296584845618391@gitbox.apache.org> References: <153900838033.12376.7955296584845618391@gitbox.apache.org> X-Git-Host: gitbox.apache.org X-Git-Repo: camel-k X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Rev: 6243fb71147e8aa57cef4d46a1b4e5d02ec5c10a X-Git-NotificationType: diff X-Git-Multimail-Version: 1.5.dev Auto-Submitted: auto-generated Message-Id: <20181008141940.DFE1282C7F@gitbox.apache.org> 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 commit 6243fb71147e8aa57cef4d46a1b4e5d02ec5c10a Author: nferraro AuthorDate: Fri Oct 5 00:01:34 2018 +0200 Added trait command line config --- pkg/client/cmd/run.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/pkg/client/cmd/run.go b/pkg/client/cmd/run.go index 10e75ed..afd9667 100644 --- a/pkg/client/cmd/run.go +++ b/pkg/client/cmd/run.go @@ -22,6 +22,7 @@ import ( "io/ioutil" "net/http" "os" + "regexp" "strconv" "strings" @@ -43,6 +44,10 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1" ) +var ( + traitConfigRegexp = regexp.MustCompile("^([a-z-]+)((?:\\.[a-z-]+)+)=(.*)$") +) + func newCmdRun(rootCmdOptions *RootCmdOptions) *cobra.Command { options := runCmdOptions{ RootCmdOptions: rootCmdOptions, @@ -69,6 +74,7 @@ func newCmdRun(rootCmdOptions *RootCmdOptions) *cobra.Command { cmd.Flags().BoolVar(&options.Sync, "sync", false, "Synchronize the local source file with the cluster, republishing at each change") cmd.Flags().BoolVar(&options.Dev, "dev", false, "Enable Dev mode (equivalent to \"-w --logs --sync\")") cmd.Flags().BoolVar(&options.DependenciesAutoDiscovery, "auto-discovery", true, "Automatically discover Camel modules by analyzing user code") + cmd.Flags().StringSliceVarP(&options.Traits, "trait", "t", nil, "Configure a trait. E.g. \"-t service.enabled=false\"") // completion support configureKnownCompletions(&cmd) @@ -91,6 +97,7 @@ type runCmdOptions struct { Sync bool Dev bool DependenciesAutoDiscovery bool + Traits []string } func (*runCmdOptions) validateArgs(cmd *cobra.Command, args []string) error { @@ -318,6 +325,10 @@ func (o *runCmdOptions) updateIntegrationCode(filename string) (*v1alpha1.Integr }) } + for _, traitConf := range o.Traits { + o.configureTrait(&integration, traitConf) + } + existed := false err = sdk.Create(&integration) if err != nil && k8serrors.IsAlreadyExists(err) { @@ -361,3 +372,35 @@ func (*runCmdOptions) loadCode(fileName string) (string, error) { bodyString := string(bodyBytes) return string(bodyString), err } + +func (*runCmdOptions) configureTrait(integration *v1alpha1.Integration, config string) error { + if integration.Spec.Traits == nil { + integration.Spec.Traits = make(map[string]v1alpha1.IntegrationTraitSpec) + } + + parts := traitConfigRegexp.FindStringSubmatch(config) + if len(parts) < 4 { + return errors.New("unrecognized config format (expected \".=\"): " + config) + } + traitID := parts[1] + prop := parts[2][1:] + val := parts[3] + var spec v1alpha1.IntegrationTraitSpec + var ok bool + if spec, ok = integration.Spec.Traits[traitID]; !ok { + spec = v1alpha1.IntegrationTraitSpec{ + Configuration: make(map[string]string), + } + } + if prop == "enabled" { + boolVal, err := strconv.ParseBool(val) + if err != nil { + return errors.Wrap(err, "cannot parse bool value "+val) + } + spec.Enabled = &boolVal + } else { + spec.Configuration[prop] = val + } + integration.Spec.Traits[traitID] = spec + return nil +}