Skip to content

Commit 1949262

Browse files
committed
add option and flag to set WatchNamespaces for operator install
1 parent 0a001ca commit 1949262

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

internal/pkg/action/operator_install.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type OperatorInstall struct {
2828
Channel string
2929
Version string
3030
Approval subscription.ApprovalValue
31+
WatchNamespaces []string
3132
InstallMode operator.InstallMode
3233
InstallTimeout time.Duration
3334
CleanupTimeout time.Duration
@@ -44,13 +45,23 @@ func (i *OperatorInstall) BindFlags(fs *pflag.FlagSet) {
4445
fs.StringVarP(&i.Channel, "channel", "c", "", "subscription channel")
4546
fs.VarP(&i.Approval, "approval", "a", fmt.Sprintf("approval (%s or %s)", v1alpha1.ApprovalManual, v1alpha1.ApprovalAutomatic))
4647
fs.StringVarP(&i.Version, "version", "v", "", "install specific version for operator (default latest)")
47-
fs.VarP(&i.InstallMode, "install-mode", "i", "install mode")
48+
fs.StringSliceVarP(&i.WatchNamespaces, "watch", "w", []string{}, "namespaces to watch")
4849
fs.DurationVarP(&i.InstallTimeout, "timeout", "t", time.Minute, "the amount of time to wait before cancelling the install")
4950
fs.DurationVar(&i.CleanupTimeout, "cleanup-timeout", time.Minute, "the amount to time to wait before cancelling cleanup")
5051
fs.BoolVarP(&i.CreateOperatorGroup, "create-operator-group", "C", false, "create operator group if necessary")
52+
53+
fs.VarP(&i.InstallMode, "install-mode", "i", "install mode")
54+
fs.MarkHidden("install-mode")
5155
}
5256

5357
func (i *OperatorInstall) Run(ctx context.Context) (*v1alpha1.ClusterServiceVersion, error) {
58+
if len(i.WatchNamespaces) > 0 && !i.InstallMode.IsEmpty() {
59+
return nil, fmt.Errorf("WatchNamespaces and InstallMode options are mutually exclusive")
60+
}
61+
if i.InstallMode.IsEmpty() {
62+
i.configureInstallModeFromWatch()
63+
}
64+
5465
pm, err := i.getPackageManifest(ctx)
5566
if err != nil {
5667
return nil, fmt.Errorf("get package manifest: %v", err)
@@ -90,6 +101,22 @@ func (i *OperatorInstall) Run(ctx context.Context) (*v1alpha1.ClusterServiceVers
90101
return csv, nil
91102
}
92103

104+
func (i *OperatorInstall) configureInstallModeFromWatch() {
105+
i.InstallMode.TargetNamespaces = i.WatchNamespaces
106+
switch len(i.InstallMode.TargetNamespaces) {
107+
case 0:
108+
i.InstallMode.InstallModeType = v1alpha1.InstallModeTypeAllNamespaces
109+
case 1:
110+
if i.InstallMode.TargetNamespaces[0] == i.config.Namespace {
111+
i.InstallMode.InstallModeType = v1alpha1.InstallModeTypeOwnNamespace
112+
} else {
113+
i.InstallMode.InstallModeType = v1alpha1.InstallModeTypeSingleNamespace
114+
}
115+
default:
116+
i.InstallMode.InstallModeType = v1alpha1.InstallModeTypeMultiNamespace
117+
}
118+
}
119+
93120
func (i *OperatorInstall) getPackageManifest(ctx context.Context) (*operatorsv1.PackageManifest, error) {
94121
pm := &operatorsv1.PackageManifest{}
95122
key := types.NamespacedName{

0 commit comments

Comments
 (0)