This is an automated email from the ASF dual-hosted git repository.
pcongiusti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git
The following commit(s) were added to refs/heads/main by this push:
new 8f6a997 feat(cmd): OLM default discovery
8f6a997 is described below
commit 8f6a9973e4d77cc02bbf39de299deaafa2346d09
Author: Pasquale Congiusti <[email protected]>
AuthorDate: Mon Nov 8 13:07:44 2021 +0100
feat(cmd): OLM default discovery
If the cluster which we are connected is a plain K8S cluster, we will use
Operator SDK community parameters during OLM installation procedure.
Closes #2113
---
pkg/cmd/install.go | 14 ++++++------
pkg/cmd/install_test.go | 13 ++++++------
pkg/cmd/uninstall.go | 6 +++---
pkg/util/olm/operator.go | 55 ++++++++++++++++++++++++++++++++++++------------
4 files changed, 58 insertions(+), 30 deletions(-)
diff --git a/pkg/cmd/install.go b/pkg/cmd/install.go
index c73ac1f..1921a2c 100644
--- a/pkg/cmd/install.go
+++ b/pkg/cmd/install.go
@@ -102,14 +102,14 @@ func newCmdInstall(rootCmdOptions *RootCmdOptions)
(*cobra.Command, *installCmdO
// OLM
cmd.Flags().Bool("olm", true, "Try to install everything via OLM
(Operator Lifecycle Manager) if available")
- cmd.Flags().String("olm-operator-name", olm.DefaultOperatorName, "Name
of the Camel K operator in the OLM source or marketplace")
- cmd.Flags().String("olm-package", olm.DefaultPackage, "Name of the
Camel K package in the OLM source or marketplace")
- cmd.Flags().String("olm-channel", olm.DefaultChannel, "Name of the
Camel K channel in the OLM source or marketplace")
- cmd.Flags().String("olm-source", olm.DefaultSource, "Name of the OLM
source providing the Camel K package (defaults to the standard Operator Hub
source)")
- cmd.Flags().String("olm-source-namespace", olm.DefaultSourceNamespace,
"Namespace where the OLM source is available")
- cmd.Flags().String("olm-starting-csv", olm.DefaultStartingCSV, "Allow
to install a specific version from the operator source instead of latest
available "+
+ cmd.Flags().String("olm-operator-name", "", "Name of the Camel K
operator in the OLM source or marketplace")
+ cmd.Flags().String("olm-package", "", "Name of the Camel K package in
the OLM source or marketplace")
+ cmd.Flags().String("olm-channel", "", "Name of the Camel K channel in
the OLM source or marketplace")
+ cmd.Flags().String("olm-source", "", "Name of the OLM source providing
the Camel K package (defaults to the standard Operator Hub source)")
+ cmd.Flags().String("olm-source-namespace", "", "Namespace where the OLM
source is available")
+ cmd.Flags().String("olm-starting-csv", "", "Allow to install a specific
version from the operator source instead of latest available "+
"from the channel")
- cmd.Flags().String("olm-global-namespace", olm.DefaultGlobalNamespace,
"A namespace containing an OperatorGroup that defines global scope for the "+
+ cmd.Flags().String("olm-global-namespace", "", "A namespace containing
an OperatorGroup that defines global scope for the "+
"operator (used in combination with the --global flag)")
// Maven
diff --git a/pkg/cmd/install_test.go b/pkg/cmd/install_test.go
index 689b420..8c4e587 100644
--- a/pkg/cmd/install_test.go
+++ b/pkg/cmd/install_test.go
@@ -24,7 +24,6 @@ import (
"github.com/stretchr/testify/assert"
v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
- "github.com/apache/camel-k/pkg/util/olm"
"github.com/apache/camel-k/pkg/util/test"
)
@@ -70,12 +69,12 @@ func TestInstallNoFlag(t *testing.T) {
assert.Equal(t, false, installCmdOptions.Save)
assert.Equal(t, false, installCmdOptions.Force)
assert.Equal(t, true, installCmdOptions.Olm)
- assert.Equal(t, olm.DefaultOperatorName,
installCmdOptions.olmOptions.OperatorName)
- assert.Equal(t, olm.DefaultPackage,
installCmdOptions.olmOptions.Package)
- assert.Equal(t, olm.DefaultChannel,
installCmdOptions.olmOptions.Channel)
- assert.Equal(t, olm.DefaultSource, installCmdOptions.olmOptions.Source)
- assert.Equal(t, olm.DefaultSourceNamespace,
installCmdOptions.olmOptions.SourceNamespace)
- assert.Equal(t, olm.DefaultGlobalNamespace,
installCmdOptions.olmOptions.GlobalNamespace)
+ assert.Equal(t, "", installCmdOptions.olmOptions.OperatorName)
+ assert.Equal(t, "", installCmdOptions.olmOptions.Package)
+ assert.Equal(t, "", installCmdOptions.olmOptions.Channel)
+ assert.Equal(t, "", installCmdOptions.olmOptions.Source)
+ assert.Equal(t, "", installCmdOptions.olmOptions.SourceNamespace)
+ assert.Equal(t, "", installCmdOptions.olmOptions.GlobalNamespace)
assert.Equal(t, int32(8081), installCmdOptions.HealthPort)
assert.Equal(t, false, installCmdOptions.Monitoring)
assert.Equal(t, int32(8080), installCmdOptions.MonitoringPort)
diff --git a/pkg/cmd/uninstall.go b/pkg/cmd/uninstall.go
index 6451aca..43fbff4 100644
--- a/pkg/cmd/uninstall.go
+++ b/pkg/cmd/uninstall.go
@@ -62,9 +62,9 @@ func newCmdUninstall(rootCmdOptions *RootCmdOptions)
(*cobra.Command, *uninstall
cmd.Flags().Bool("skip-kamelets", false, "Do not uninstall the Kamelets
in the current namespace")
cmd.Flags().Bool("global", false, "Indicates that a global installation
is going to be uninstalled (affects OLM)")
cmd.Flags().Bool("olm", true, "Try to uninstall via OLM (Operator
Lifecycle Manager) if available")
- cmd.Flags().String("olm-operator-name", olm.DefaultOperatorName, "Name
of the Camel K operator in the OLM source or marketplace")
- cmd.Flags().String("olm-package", olm.DefaultPackage, "Name of the
Camel K package in the OLM source or marketplace")
- cmd.Flags().String("olm-global-namespace", olm.DefaultGlobalNamespace,
"A namespace containing an OperatorGroup that defines "+
+ cmd.Flags().String("olm-operator-name", "", "Name of the Camel K
operator in the OLM source or marketplace")
+ cmd.Flags().String("olm-package", "", "Name of the Camel K package in
the OLM source or marketplace")
+ cmd.Flags().String("olm-global-namespace", "", "A namespace containing
an OperatorGroup that defines "+
"global scope for the operator (used in combination with the
--global flag)")
cmd.Flags().Bool("all", false, "Do uninstall all Camel K resources")
diff --git a/pkg/util/olm/operator.go b/pkg/util/olm/operator.go
index 3a25715..23ca3fd 100644
--- a/pkg/util/olm/operator.go
+++ b/pkg/util/olm/operator.go
@@ -34,6 +34,7 @@ import (
"github.com/apache/camel-k/pkg/client"
"github.com/apache/camel-k/pkg/util/kubernetes"
+ "github.com/apache/camel-k/pkg/util/openshift"
)
// The following properties can be overridden at build time via ldflags
@@ -73,7 +74,10 @@ type Options struct {
// IsOperatorInstalled tells if a OLM CSV or a Subscription is already
installed in the namespace
func IsOperatorInstalled(ctx context.Context, client client.Client, namespace
string, global bool, options Options) (bool, error) {
- options = fillDefaults(options)
+ options, err := fillDefaults(options, client)
+ if err != nil {
+ return false, err
+ }
// CSV is present in current namespace for both local and global
installation modes
if csv, err := findCSV(ctx, client, namespace, options); err != nil {
return false, err
@@ -141,7 +145,10 @@ func HasPermissionToInstall(ctx context.Context, client
client.Client, namespace
// Install creates a subscription for the OLM package
func Install(ctx context.Context, client client.Client, namespace string,
global bool, options Options, collection *kubernetes.Collection,
tolerations []string, nodeSelectors []string, resourcesRequirements
[]string, envVars []string) (bool, error) {
- options = fillDefaults(options)
+ options, err := fillDefaults(options, client)
+ if err != nil {
+ return false, err
+ }
if installed, err := IsOperatorInstalled(ctx, client, namespace,
global, options); err != nil {
return false, err
} else if installed {
@@ -169,7 +176,7 @@ func Install(ctx context.Context, client client.Client,
namespace string, global
},
}
// Additional configuration
- err := maybeSetTolerations(&sub, tolerations)
+ err = maybeSetTolerations(&sub, tolerations)
if err != nil {
return false, errors.Wrap(err, "could not set tolerations")
}
@@ -265,6 +272,10 @@ func maybeSetEnvVars(sub *operatorsv1alpha1.Subscription,
envVars []string) erro
// Uninstall removes CSV and subscription from the namespace
func Uninstall(ctx context.Context, client client.Client, namespace string,
global bool, options Options) error {
+ options, err := fillDefaults(options, client)
+ if err != nil {
+ return err
+ }
sub, err := findSubscription(ctx, client, namespace, global, options)
if err != nil {
return err
@@ -333,7 +344,7 @@ func findOperatorGroup(ctx context.Context, client
client.Client, namespace stri
return nil, nil
}
-func fillDefaults(o Options) Options {
+func fillDefaults(o Options, client client.Client) (Options, error) {
if o.OperatorName == "" {
o.OperatorName = DefaultOperatorName
}
@@ -343,17 +354,35 @@ func fillDefaults(o Options) Options {
if o.Channel == "" {
o.Channel = DefaultChannel
}
- if o.Source == "" {
- o.Source = DefaultSource
- }
- if o.SourceNamespace == "" {
- o.SourceNamespace = DefaultSourceNamespace
- }
if o.StartingCSV == "" {
o.StartingCSV = DefaultStartingCSV
}
- if o.GlobalNamespace == "" {
- o.GlobalNamespace = DefaultGlobalNamespace
+ isOCP, err := openshift.IsOpenShift(client)
+ if err != nil {
+ return o, err
+ }
+ if isOCP {
+ if o.Source == "" {
+ o.Source = DefaultSource
+ }
+ if o.SourceNamespace == "" {
+ o.SourceNamespace = DefaultSourceNamespace
+ }
+ if o.GlobalNamespace == "" {
+ o.GlobalNamespace = DefaultGlobalNamespace
+ }
+ } else {
+ // Use a different set of defaults value
+ if o.Source == "" {
+ o.Source = "operatorhubio-catalog"
+ }
+ if o.SourceNamespace == "" {
+ o.SourceNamespace = "olm"
+ }
+ if o.GlobalNamespace == "" {
+ o.GlobalNamespace = "operators"
+ }
}
- return o
+
+ return o, nil
}