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
The following commit(s) were added to refs/heads/master by this push:
new ebda259 feature(kamel): Validate --context when given
ebda259 is described below
commit ebda25900cc7e11bd679a81a46b289a9a464981f
Author: Roland Huß <[email protected]>
AuthorDate: Tue Feb 12 19:29:39 2019 +0100
feature(kamel): Validate --context when given
---
deploy/resources.go | 46 +++++++++++++++++++++----------------------
pkg/cmd/install.go | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 79 insertions(+), 23 deletions(-)
diff --git a/deploy/resources.go b/deploy/resources.go
index aea1c50..dd46d97 100644
--- a/deploy/resources.go
+++ b/deploy/resources.go
@@ -4178,6 +4178,29 @@ spec:
version: 2.23.1
`
+ Resources["cr-example.yaml"] =
+ `
+apiVersion: camel.apache.org/v1alpha1
+kind: Integration
+metadata:
+ name: example
+spec:
+ source:
+ content: |-
+ // This is Camel K Groovy example route
+
+ rnd = new Random()
+
+ from('timer:groovy?period=1s')
+ .routeId('groovy')
+ .setBody()
+ .constant('Hello Camel K!')
+ .process {
+ it.in.headers['RandomValue'] = rnd.nextInt()
+ }
+ .to('log:info?showHeaders=true')
+ name: routes.groovy
+`
Resources["crd-camel-catalog.yaml"] =
`
apiVersion: apiextensions.k8s.io/v1beta1
@@ -4297,29 +4320,6 @@ spec:
JSONPath: .status.context
`
- Resources["cr-example.yaml"] =
- `
-apiVersion: camel.apache.org/v1alpha1
-kind: Integration
-metadata:
- name: example
-spec:
- source:
- content: |-
- // This is Camel K Groovy example route
-
- rnd = new Random()
-
- from('timer:groovy?period=1s')
- .routeId('groovy')
- .setBody()
- .constant('Hello Camel K!')
- .process {
- it.in.headers['RandomValue'] = rnd.nextInt()
- }
- .to('log:info?showHeaders=true')
- name: routes.groovy
-`
Resources["operator-deployment-kubernetes.yaml"] =
`
apiVersion: apps/v1
diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go
index fa7d428..6ea6bad 100644
--- a/pkg/cmd/install.go
+++ b/pkg/cmd/install.go
@@ -19,6 +19,11 @@ package cmd
import (
"fmt"
+ "github.com/apache/camel-k/deploy"
+ "github.com/apache/camel-k/pkg/apis"
+ "github.com/apache/camel-k/pkg/platform"
+ "go.uber.org/multierr"
+ "k8s.io/apimachinery/pkg/runtime"
"strings"
"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
@@ -40,6 +45,7 @@ func newCmdInstall(rootCmdOptions *RootCmdOptions)
*cobra.Command {
Use: "install",
Short: "Install Camel K on a Kubernetes cluster",
Long: `Installs Camel K on a Kubernetes or OpenShift cluster.`,
+ PreRunE: impl.validate,
RunE: impl.install,
}
@@ -230,3 +236,53 @@ func (o *installCmdOptions) waitForPlatformReady(platform
*v1alpha1.IntegrationP
return watch.HandlePlatformStateChanges(o.Context, platform, handler)
}
+
+func (o *installCmdOptions) validate(cmd *cobra.Command, args []string) error {
+ var result error
+
+ // Let's register only our own APIs
+ schema := runtime.NewScheme()
+ if err := apis.AddToScheme(schema); err != nil {
+ return err
+ }
+
+ if o.contexts == nil {
+ return nil
+ }
+ for _, context := range o.contexts {
+ err := errorIfContextIsNotAvailable(schema, context,
len(o.contexts))
+ result = multierr.Append(result, err)
+ }
+ return result
+}
+
+func errorIfContextIsNotAvailable(schema *runtime.Scheme, context string,
nrContexts int) error {
+
+ if context == platform.NoContext {
+ if nrContexts > 1 {
+ return errors.New("You can only use one --context
argument when selecting 'none'")
+ }
+
+ // Indicates that nothing should be installed
+ return nil
+ }
+
+ for _, resource := range deploy.Resources {
+ resource, err := kubernetes.LoadResourceFromYaml(schema,
resource)
+ if err != nil {
+ // Not one of our registered schemas
+ continue
+ }
+ kind := resource.GetObjectKind().GroupVersionKind()
+ if kind.Kind != "IntegrationContext" {
+ continue
+ }
+ integrationContext := resource.(*v1alpha1.IntegrationContext)
+ if integrationContext.Name == context {
+ return nil
+ }
+ }
+ return errors.Errorf("Unknown context '%s'", context)
+}
+
+