Skip to content

Commit 882354c

Browse files
authored
Reformatting and updating help documentation (#241)
* clustercatalog content discovery for packages and bundle versions Signed-off-by: Ankita Thomas <[email protected]> * linter fixes Signed-off-by: Ankita Thomas <[email protected]> * reformat get commands Signed-off-by: Ankita Thomas <[email protected]> * reformat install commands Signed-off-by: Ankita Thomas <[email protected]> * reformat update commands Signed-off-by: Ankita Thomas <[email protected]> * refactor delete commands Signed-off-by: Ankita Thomas <[email protected]> * spinner Signed-off-by: Ankita Thomas <[email protected]> * fix formatting and type conversion Signed-off-by: Ankita Thomas <[email protected]> * group common flags Signed-off-by: Ankita Thomas <[email protected]> * fixing tests Signed-off-by: Ankita Thomas <[email protected]> * fix log formatting Signed-off-by: Ankita Thomas <[email protected]> --------- Signed-off-by: Ankita Thomas <[email protected]>
1 parent 17efdb4 commit 882354c

34 files changed

+1207
-405
lines changed

go.mod

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ go 1.23.4
44

55
require (
66
github.com/blang/semver/v4 v4.0.0
7+
github.com/briandowns/spinner v1.23.2
78
github.com/containerd/containerd v1.7.26
89
github.com/containerd/platforms v0.2.1
910
github.com/onsi/ginkgo v1.16.5
@@ -19,6 +20,7 @@ require (
1920
k8s.io/api v0.32.2
2021
k8s.io/apiextensions-apiserver v0.32.2
2122
k8s.io/apimachinery v0.32.2
23+
k8s.io/cli-runtime v0.32.2
2224
k8s.io/client-go v0.32.2
2325
sigs.k8s.io/controller-runtime v0.20.2
2426
sigs.k8s.io/yaml v1.4.0
@@ -27,6 +29,7 @@ require (
2729
require (
2830
cel.dev/expr v0.18.0 // indirect
2931
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect
32+
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect
3033
github.com/BurntSushi/toml v1.4.0 // indirect
3134
github.com/Microsoft/go-winio v0.6.2 // indirect
3235
github.com/Microsoft/hcsshim v0.12.9 // indirect
@@ -54,6 +57,7 @@ require (
5457
github.com/docker/go-units v0.5.0 // indirect
5558
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
5659
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
60+
github.com/fatih/color v1.15.0 // indirect
5761
github.com/felixge/httpsnoop v1.0.4 // indirect
5862
github.com/fsnotify/fsnotify v1.8.0 // indirect
5963
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
@@ -83,14 +87,18 @@ require (
8387
github.com/josharian/intern v1.0.0 // indirect
8488
github.com/json-iterator/go v1.1.12 // indirect
8589
github.com/klauspost/compress v1.18.0 // indirect
90+
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
8691
github.com/mailru/easyjson v0.9.0 // indirect
92+
github.com/mattn/go-colorable v0.1.13 // indirect
93+
github.com/mattn/go-isatty v0.0.20 // indirect
8794
github.com/moby/locker v1.0.1 // indirect
8895
github.com/moby/spdystream v0.5.0 // indirect
8996
github.com/moby/sys/capability v0.3.0 // indirect
9097
github.com/moby/sys/mountinfo v0.7.2 // indirect
9198
github.com/moby/sys/sequential v0.5.0 // indirect
9299
github.com/moby/sys/user v0.3.0 // indirect
93100
github.com/moby/sys/userns v0.1.0 // indirect
101+
github.com/moby/term v0.5.0 // indirect
94102
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
95103
github.com/modern-go/reflect2 v1.0.2 // indirect
96104
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect

go.sum

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ cel.dev/expr v0.18.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw=
33
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
44
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
55
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
6+
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
7+
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
68
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
79
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
810
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
@@ -20,6 +22,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
2022
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
2123
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
2224
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
25+
github.com/briandowns/spinner v1.23.2 h1:Zc6ecUnI+YzLmJniCfDNaMbW0Wid1d5+qcTq4L2FW8w=
26+
github.com/briandowns/spinner v1.23.2/go.mod h1:LaZeM4wm2Ywy6vO571mvhQNRcWfRUnXOs0RcKV0wYKM=
2327
github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70=
2428
github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
2529
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
@@ -62,6 +66,8 @@ github.com/containers/storage v1.56.1/go.mod h1:c6WKowcAlED/DkWGNuL9bvGYqIWCVy7i
6266
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
6367
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
6468
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
69+
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
70+
github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
6571
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
6672
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
6773
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -97,6 +103,8 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m
97103
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
98104
github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU=
99105
github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM=
106+
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
107+
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
100108
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
101109
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
102110
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
@@ -212,8 +220,15 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
212220
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
213221
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
214222
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
223+
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
224+
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
215225
github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
216226
github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
227+
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
228+
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
229+
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
230+
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
231+
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
217232
github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM=
218233
github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
219234
github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
@@ -230,6 +245,8 @@ github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo=
230245
github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
231246
github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
232247
github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
248+
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
249+
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
233250
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
234251
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
235252
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -424,7 +441,10 @@ golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7w
424441
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
425442
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
426443
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
444+
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
427445
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
446+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
447+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
428448
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
429449
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
430450
golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU=
@@ -512,6 +532,8 @@ k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ=
512532
k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
513533
k8s.io/apiserver v0.32.2 h1:WzyxAu4mvLkQxwD9hGa4ZfExo3yZZaYzoYvvVDlM6vw=
514534
k8s.io/apiserver v0.32.2/go.mod h1:PEwREHiHNU2oFdte7BjzA1ZyjWjuckORLIK/wLV5goM=
535+
k8s.io/cli-runtime v0.32.2 h1:aKQR4foh9qeyckKRkNXUccP9moxzffyndZAvr+IXMks=
536+
k8s.io/cli-runtime v0.32.2/go.mod h1:a/JpeMztz3xDa7GCyyShcwe55p8pbcCVQxvqZnIwXN8=
515537
k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA=
516538
k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94=
517539
k8s.io/component-base v0.32.2 h1:1aUL5Vdmu7qNo4ZsE+569PV5zFatM9hl+lb3dEea2zU=

internal/cmd/catalog_remove.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ func newCatalogRemoveCmd(cfg *action.Configuration) *cobra.Command {
1212
u := internalaction.NewCatalogRemove(cfg)
1313
cmd := &cobra.Command{
1414
Use: "remove <catalog_name>",
15-
Short: "Remove a operator catalog",
15+
Short: "Remove an operator catalog",
1616
Args: cobra.ExactArgs(1),
1717
Run: func(cmd *cobra.Command, args []string) {
1818
u.CatalogName = args[0]

internal/cmd/internal/olmv1/catalog_create.go

Lines changed: 50 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,27 @@ import (
55

66
"github.com/spf13/cobra"
77
"github.com/spf13/pflag"
8+
"k8s.io/apimachinery/pkg/runtime/schema"
9+
"k8s.io/apimachinery/pkg/util/errors"
10+
11+
olmv1 "github.com/operator-framework/operator-controller/api/v1"
812

913
"github.com/operator-framework/kubectl-operator/internal/cmd/internal/log"
1014
v1action "github.com/operator-framework/kubectl-operator/internal/pkg/v1/action"
1115
"github.com/operator-framework/kubectl-operator/pkg/action"
1216
)
1317

14-
// NewCatalogCreateCmd allows creating a new catalog
18+
type catalogCreateOptions struct {
19+
dryRunOptions
20+
mutableCatalogOptions
21+
}
22+
23+
// NewCatalogCreateCmd returns a command that creates a new catalog.
24+
// At minimum, the catalog name and the source image reference must be provided.
1525
func NewCatalogCreateCmd(cfg *action.Configuration) *cobra.Command {
1626
i := v1action.NewCatalogCreate(cfg)
1727
i.Logf = log.Printf
28+
var opts catalogCreateOptions
1829

1930
cmd := &cobra.Command{
2031
Use: "catalog <catalog_name> <image_source_ref>",
@@ -24,22 +35,52 @@ func NewCatalogCreateCmd(cfg *action.Configuration) *cobra.Command {
2435
Run: func(cmd *cobra.Command, args []string) {
2536
i.CatalogName = args[0]
2637
i.ImageSourceRef = args[1]
27-
28-
if err := i.Run(cmd.Context()); err != nil {
38+
opts.Image = i.ImageSourceRef
39+
if err := opts.validate(); err != nil {
40+
log.Fatalf("failed to parse flags: %v", err)
41+
}
42+
i.DryRun = opts.DryRun
43+
i.Output = opts.Output
44+
i.AvailabilityMode = opts.AvailabilityMode
45+
i.Priority = opts.Priority
46+
i.Labels = opts.Labels
47+
i.PollIntervalMinutes = opts.PollIntervalMinutes
48+
catalogObj, err := i.Run(cmd.Context())
49+
if err != nil {
2950
log.Fatalf("failed to create catalog %q: %v", i.CatalogName, err)
3051
}
31-
log.Printf("catalog %q created", i.CatalogName)
52+
if len(i.DryRun) == 0 {
53+
log.Printf("catalog %q created", i.CatalogName)
54+
return
55+
}
56+
if len(i.Output) == 0 {
57+
log.Printf("catalog %q created (dry run)", i.CatalogName)
58+
return
59+
}
60+
61+
catalogObj.GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{Group: olmv1.GroupVersion.Group,
62+
Version: olmv1.GroupVersion.Version, Kind: "ClusterCatalog"})
63+
printFormattedCatalogs(i.Output, *catalogObj)
3264
},
3365
}
66+
bindMutableCatalogFlags(cmd.Flags(), &opts.mutableCatalogOptions)
3467
bindCatalogCreateFlags(cmd.Flags(), i)
68+
bindDryRunFlags(cmd.Flags(), &opts.dryRunOptions)
3569

3670
return cmd
3771
}
3872

3973
func bindCatalogCreateFlags(fs *pflag.FlagSet, i *v1action.CatalogCreate) {
40-
fs.Int32Var(&i.Priority, "priority", 0, "priority determines the likelihood of a catalog being selected in conflict scenarios")
41-
fs.BoolVar(&i.Available, "available", true, "true means that the catalog should be active and serving data")
42-
fs.IntVar(&i.PollIntervalMinutes, "source-poll-interval-minutes", 10, "catalog source polling interval [in minutes]")
43-
fs.StringToStringVar(&i.Labels, "labels", map[string]string{}, "labels that will be added to the catalog")
44-
fs.DurationVar(&i.CleanupTimeout, "cleanup-timeout", time.Minute, "the amount of time to wait before cancelling cleanup after a failed creation attempt")
74+
fs.DurationVar(&i.CleanupTimeout, "cleanup-timeout", time.Minute, "the amount of time to wait before cancelling cleanup after a failed creation attempt.")
75+
}
76+
77+
func (o *catalogCreateOptions) validate() error {
78+
var errs []error
79+
if err := o.dryRunOptions.validate(); err != nil {
80+
errs = append(errs, err)
81+
}
82+
if err := o.mutableCatalogOptions.validate(); err != nil {
83+
errs = append(errs, err)
84+
}
85+
return errors.NewAggregate(errs)
4586
}

internal/cmd/internal/olmv1/catalog_delete.go

Lines changed: 42 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,48 +3,73 @@ package olmv1
33
import (
44
"github.com/spf13/cobra"
55
"github.com/spf13/pflag"
6+
"k8s.io/apimachinery/pkg/runtime/schema"
7+
8+
olmv1 "github.com/operator-framework/operator-controller/api/v1"
69

710
"github.com/operator-framework/kubectl-operator/internal/cmd/internal/log"
811
v1action "github.com/operator-framework/kubectl-operator/internal/pkg/v1/action"
912
"github.com/operator-framework/kubectl-operator/pkg/action"
1013
)
1114

12-
// NewCatalogDeleteCmd allows deleting either a single or all
13-
// existing catalogs
15+
type catalogDeleteOptions struct {
16+
dryRunOptions
17+
}
18+
19+
// NewCatalogDeleteCmd deletes either a specific catalog by name
20+
// or all catalogs on cluster.
1421
func NewCatalogDeleteCmd(cfg *action.Configuration) *cobra.Command {
15-
d := v1action.NewCatalogDelete(cfg)
16-
d.Logf = log.Printf
22+
i := v1action.NewCatalogDelete(cfg)
23+
i.Logf = log.Printf
24+
var opts catalogDeleteOptions
1725

1826
cmd := &cobra.Command{
1927
Use: "catalog [catalog_name]",
2028
Aliases: []string{"catalogs [catalog_name]"},
2129
Args: cobra.RangeArgs(0, 1),
2230
Short: "Delete either a single or all of the existing catalogs",
2331
Run: func(cmd *cobra.Command, args []string) {
24-
if len(args) == 0 {
25-
catalogs, err := d.Run(cmd.Context())
26-
if err != nil {
27-
log.Fatalf("failed deleting catalogs: %v", err)
32+
if len(args) > 0 {
33+
if i.DeleteAll {
34+
log.Fatalf("failed to delete catalog: cannot specify both --all and a catalog name")
35+
}
36+
i.CatalogName = args[0]
37+
}
38+
if err := opts.validate(); err != nil {
39+
log.Fatalf("failed to parse flags: %v", err)
40+
}
41+
i.DryRun = opts.DryRun
42+
i.Output = opts.Output
43+
catalogs, err := i.Run(cmd.Context())
44+
if err != nil {
45+
log.Fatalf("failed to delete catalog(s): %v", err)
46+
}
47+
if len(i.DryRun) == 0 {
48+
for _, c := range catalogs {
49+
log.Printf("catalog %q deleted", c.Name)
2850
}
29-
for _, catalog := range catalogs {
30-
log.Printf("catalog %q deleted", catalog)
51+
return
52+
}
53+
if len(i.Output) == 0 {
54+
for _, c := range catalogs {
55+
log.Printf("catalog %q deleted (dry run)", c.Name)
3156
}
32-
3357
return
3458
}
3559

36-
d.CatalogName = args[0]
37-
if _, err := d.Run(cmd.Context()); err != nil {
38-
log.Fatalf("failed to delete catalog %q: %v", d.CatalogName, err)
60+
for _, c := range catalogs {
61+
c.GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{Group: olmv1.GroupVersion.Group,
62+
Version: olmv1.GroupVersion.Version, Kind: "ClusterCatalog"})
3963
}
40-
log.Printf("catalog %q deleted", d.CatalogName)
64+
printFormattedCatalogs(i.Output, catalogs...)
4165
},
4266
}
43-
bindCatalogDeleteFlags(cmd.Flags(), d)
67+
bindCatalogDeleteFlags(cmd.Flags(), i)
68+
bindDryRunFlags(cmd.Flags(), &opts.dryRunOptions)
4469

4570
return cmd
4671
}
4772

4873
func bindCatalogDeleteFlags(fs *pflag.FlagSet, d *v1action.CatalogDelete) {
49-
fs.BoolVar(&d.DeleteAll, "all", false, "delete all catalogs")
74+
fs.BoolVarP(&d.DeleteAll, "all", "a", false, "delete all catalogs")
5075
}

internal/cmd/internal/olmv1/catalog_installed_get.go renamed to internal/cmd/internal/olmv1/catalog_get.go

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,50 @@ package olmv1
22

33
import (
44
"github.com/spf13/cobra"
5+
"k8s.io/apimachinery/pkg/runtime/schema"
6+
7+
olmv1 "github.com/operator-framework/operator-controller/api/v1"
58

69
"github.com/operator-framework/kubectl-operator/internal/cmd/internal/log"
710
v1action "github.com/operator-framework/kubectl-operator/internal/pkg/v1/action"
811
"github.com/operator-framework/kubectl-operator/pkg/action"
912
)
1013

1114
// NewCatalogInstalledGetCmd handles get commands in the form of:
12-
// catalog(s) [catalog_name] - this will either list all the installed operators
15+
// catalog(s) [catalog_name] - this will either list all the installed catalogs
1316
// if no catalog_name has been provided or display the details of the specific
1417
// one otherwise
1518
func NewCatalogInstalledGetCmd(cfg *action.Configuration) *cobra.Command {
1619
i := v1action.NewCatalogInstalledGet(cfg)
1720
i.Logf = log.Printf
21+
var opts getOptions
1822

1923
cmd := &cobra.Command{
2024
Use: "catalog [catalog_name]",
21-
Aliases: []string{"catalogs"},
25+
Aliases: []string{"catalogs [catalog_name]"},
2226
Args: cobra.RangeArgs(0, 1),
2327
Short: "Display one or many installed catalogs",
2428
Run: func(cmd *cobra.Command, args []string) {
2529
if len(args) == 1 {
2630
i.CatalogName = args[0]
2731
}
32+
if err := opts.validate(); err != nil {
33+
log.Fatalf("failed to parse flags: %v", err)
34+
}
35+
i.Selector = opts.ParsedSelector
2836
installedCatalogs, err := i.Run(cmd.Context())
2937
if err != nil {
3038
log.Fatalf("failed getting installed catalog(s): %v", err)
3139
}
3240

33-
printFormattedCatalogs(installedCatalogs...)
41+
for i := range installedCatalogs {
42+
installedCatalogs[i].GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{Group: olmv1.GroupVersion.Group,
43+
Version: olmv1.GroupVersion.Version, Kind: "ClusterCatalog"})
44+
}
45+
printFormattedCatalogs(opts.Output, installedCatalogs...)
3446
},
3547
}
48+
bindGetFlags(cmd.Flags(), &opts)
3649

3750
return cmd
3851
}

0 commit comments

Comments
 (0)