Skip to content

Commit c235e04

Browse files
committed
registry+v1: support webhooks, add simple converter CLI
1 parent c22b12d commit c235e04

File tree

21 files changed

+2678
-885
lines changed

21 files changed

+2678
-885
lines changed

cmd/registryv1-to-helm/main.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"path/filepath"
7+
8+
"github.com/spf13/cobra"
9+
"helm.sh/helm/v3/pkg/chartutil"
10+
11+
"github.com/operator-framework/operator-controller/internal/features"
12+
"github.com/operator-framework/operator-controller/internal/rukpak/convert"
13+
)
14+
15+
func main() {
16+
if err := rootCmd().Execute(); err != nil {
17+
os.Exit(1)
18+
}
19+
}
20+
21+
func rootCmd() *cobra.Command {
22+
cmd := &cobra.Command{
23+
Use: "registryv1-to-helm <registry+v1-directory-path> [output-path]",
24+
Args: cobra.RangeArgs(1, 2),
25+
Run: func(cmd *cobra.Command, args []string) {
26+
registryv1Path := args[0]
27+
28+
saveDir := "."
29+
if len(args) == 2 {
30+
saveDir = args[1]
31+
}
32+
33+
rv1, err := convert.LoadRegistryV1(cmd.Context(), os.DirFS(registryv1Path))
34+
if err != nil {
35+
fmt.Fprintf(os.Stderr, "failed to load registry+v1 bundle: %v\n", err)
36+
os.Exit(1)
37+
}
38+
39+
var toChartOpts []convert.ToHelmChartOption
40+
if features.OperatorControllerFeatureGate.Enabled(features.CertManagerWebhookInjection) {
41+
toChartOpts = append(toChartOpts, convert.WithCertManagerCertificateProvider())
42+
}
43+
44+
chrt, err := rv1.ToHelmChart(toChartOpts...)
45+
if err != nil {
46+
fmt.Fprintf(os.Stderr, "failed to convert registry v1 to helm chart: %v\n", err)
47+
os.Exit(1)
48+
}
49+
50+
if err := chartutil.SaveDir(chrt, saveDir); err != nil {
51+
fmt.Fprintf(os.Stderr, "failed to write helm chart to directory: %v\n", err)
52+
os.Exit(1)
53+
}
54+
55+
origChartDir := filepath.Join(saveDir, chrt.Metadata.Name)
56+
desiredChartDir := filepath.Join(saveDir, fmt.Sprintf("%s-%s", chrt.Metadata.Name, chrt.Metadata.Version))
57+
if err := os.Rename(origChartDir, desiredChartDir); err != nil {
58+
fmt.Fprintf(os.Stderr, "failed to rename helm chart directory: %v\n", err)
59+
os.Exit(1)
60+
}
61+
cmd.Printf("Chart saved to %s\n", desiredChartDir)
62+
},
63+
}
64+
features.OperatorControllerFeatureGate.AddFlag(cmd.Flags())
65+
return cmd
66+
}

cmd/registryv1-to-helm/values.yaml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
affinity:
2+
nodeAffinity:
3+
requiredDuringSchedulingIgnoredDuringExecution:
4+
nodeSelectorTerms:
5+
- matchExpressions:
6+
- key: node-role.kubernetes.io/master
7+
operator: Exists
8+
nodeSelector:
9+
overrideKey1: overrideValue1
10+
11+
selector:
12+
overrideKey2: overrideValue2
13+
14+
tolerations:
15+
- effect: NoSchedule
16+
key: node-role.kubernetes.io/master2
17+
18+
volumes:
19+
- name: argocd-operator-token-5z5z2
20+
emptyDir: {}
21+
22+
env:
23+
- name: WATCH_NAMESPACE
24+
value: BAR
25+
26+
envFrom:
27+
- configMapRef:
28+
name: my-configmap
29+
- secretRef:
30+
name: my-secret
31+
32+
resources:
33+
requests:
34+
cpu: 100m
35+
memory: 100Mi
36+
37+
volumeMounts:
38+
- name: tmp
39+
mountPath: override

go.mod

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,21 @@ require (
77
github.com/BurntSushi/toml v1.4.0
88
github.com/Masterminds/semver/v3 v3.3.1
99
github.com/blang/semver/v4 v4.0.0
10+
github.com/cert-manager/cert-manager v1.16.1
1011
github.com/containerd/containerd v1.7.24
1112
github.com/containers/image/v5 v5.32.2
1213
github.com/fsnotify/fsnotify v1.8.0
1314
github.com/go-logr/logr v1.4.2
15+
github.com/go-openapi/spec v0.21.0
1416
github.com/google/go-cmp v0.6.0
1517
github.com/google/go-containerregistry v0.20.2
18+
github.com/joeycumines/go-dotnotation v0.0.0-20180131115956-2d3612e36c5d
1619
github.com/opencontainers/go-digest v1.0.0
1720
github.com/operator-framework/api v0.27.0
1821
github.com/operator-framework/catalogd v1.0.0
1922
github.com/operator-framework/helm-operator-plugins v0.7.0
2023
github.com/operator-framework/operator-registry v1.48.0
24+
github.com/spf13/cobra v1.8.1
2125
github.com/spf13/pflag v1.0.5
2226
github.com/stretchr/testify v1.10.0
2327
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
@@ -30,7 +34,7 @@ require (
3034
k8s.io/client-go v0.31.3
3135
k8s.io/component-base v0.31.2
3236
k8s.io/klog/v2 v2.130.1
33-
k8s.io/utils v0.0.0-20240711033017-18e509b52bc8
37+
k8s.io/utils v0.0.0-20240921022957-49e7df575cb6
3438
sigs.k8s.io/controller-runtime v0.19.0
3539
sigs.k8s.io/yaml v1.4.0
3640
)
@@ -48,22 +52,16 @@ require (
4852
github.com/Microsoft/hcsshim v0.12.5 // indirect
4953
github.com/VividCortex/ewma v1.2.0 // indirect
5054
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect
51-
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
5255
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
5356
github.com/beorn7/perks v1.0.1 // indirect
54-
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
5557
github.com/cespare/xxhash/v2 v2.3.0 // indirect
5658
github.com/chai2010/gettext-go v1.0.2 // indirect
5759
github.com/containerd/cgroups/v3 v3.0.3 // indirect
58-
github.com/containerd/containerd/api v1.7.19 // indirect
5960
github.com/containerd/continuity v0.4.2 // indirect
6061
github.com/containerd/errdefs v0.3.0 // indirect
6162
github.com/containerd/log v0.1.0 // indirect
6263
github.com/containerd/platforms v0.2.1 // indirect
6364
github.com/containerd/stargz-snapshotter/estargz v0.15.1 // indirect
64-
github.com/containerd/ttrpc v1.2.5 // indirect
65-
github.com/containerd/typeurl/v2 v2.1.1 // indirect
66-
github.com/containers/common v0.60.4 // indirect
6765
github.com/containers/libtrust v0.0.0-20230121012942-c1716e8a8d01 // indirect
6866
github.com/containers/ocicrypt v1.2.0 // indirect
6967
github.com/containers/storage v1.55.0 // indirect
@@ -81,11 +79,11 @@ require (
8179
github.com/docker/go-connections v0.5.0 // indirect
8280
github.com/docker/go-metrics v0.0.1 // indirect
8381
github.com/docker/go-units v0.5.0 // indirect
84-
github.com/emicklei/go-restful/v3 v3.11.2 // indirect
82+
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
8583
github.com/evanphx/json-patch v5.9.0+incompatible // indirect
8684
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
8785
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect
88-
github.com/fatih/color v1.15.0 // indirect
86+
github.com/fatih/color v1.16.0 // indirect
8987
github.com/felixge/httpsnoop v1.0.4 // indirect
9088
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
9189
github.com/go-errors/errors v1.4.2 // indirect
@@ -101,7 +99,6 @@ require (
10199
github.com/go-openapi/jsonreference v0.21.0 // indirect
102100
github.com/go-openapi/loads v0.22.0 // indirect
103101
github.com/go-openapi/runtime v0.28.0 // indirect
104-
github.com/go-openapi/spec v0.21.0 // indirect
105102
github.com/go-openapi/strfmt v0.23.0 // indirect
106103
github.com/go-openapi/swag v0.23.0 // indirect
107104
github.com/go-openapi/validate v0.24.0 // indirect
@@ -110,16 +107,14 @@ require (
110107
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
111108
github.com/golang/protobuf v1.5.4 // indirect
112109
github.com/google/btree v1.1.2 // indirect
113-
github.com/google/cel-go v0.20.1 // indirect
114110
github.com/google/gnostic-models v0.6.8 // indirect
115111
github.com/google/gofuzz v1.2.0 // indirect
116112
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
117113
github.com/google/uuid v1.6.0 // indirect
118114
github.com/gorilla/mux v1.8.1 // indirect
119-
github.com/gorilla/websocket v1.5.0 // indirect
115+
github.com/gorilla/websocket v1.5.1 // indirect
120116
github.com/gosuri/uitable v0.0.4 // indirect
121117
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
122-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect
123118
github.com/h2non/filetype v1.1.3 // indirect
124119
github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c // indirect
125120
github.com/hashicorp/errwrap v1.1.0 // indirect
@@ -172,7 +167,6 @@ require (
172167
github.com/opencontainers/runtime-spec v1.2.0 // indirect
173168
github.com/openshift/crd-schema-checker v0.0.0-20240404194209-35a9033b1d11 // indirect
174169
github.com/operator-framework/operator-lib v0.15.0 // indirect
175-
github.com/otiai10/copy v1.14.0 // indirect
176170
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
177171
github.com/pkg/errors v0.9.1 // indirect
178172
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
@@ -191,9 +185,7 @@ require (
191185
github.com/sigstore/sigstore v1.8.4 // indirect
192186
github.com/sirupsen/logrus v1.9.3 // indirect
193187
github.com/spf13/cast v1.7.0 // indirect
194-
github.com/spf13/cobra v1.8.1 // indirect
195188
github.com/stefanberger/go-pkcs11uri v0.0.0-20230803200340-78284954bff6 // indirect
196-
github.com/stoewer/go-strcase v1.3.0 // indirect
197189
github.com/stretchr/objx v0.5.2 // indirect
198190
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
199191
github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect
@@ -207,42 +199,35 @@ require (
207199
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
208200
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
209201
github.com/xlab/treeprint v1.2.0 // indirect
210-
go.etcd.io/bbolt v1.3.11 // indirect
211202
go.mongodb.org/mongo-driver v1.14.0 // indirect
212203
go.mozilla.org/pkcs7 v0.0.0-20210826202110-33d05740a352 // indirect
213204
go.opencensus.io v0.24.0 // indirect
214205
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect
215206
go.opentelemetry.io/otel v1.29.0 // indirect
216-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.29.0 // indirect
217-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 // indirect
218207
go.opentelemetry.io/otel/metric v1.29.0 // indirect
219-
go.opentelemetry.io/otel/sdk v1.29.0 // indirect
220208
go.opentelemetry.io/otel/trace v1.29.0 // indirect
221-
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
222209
go.starlark.net v0.0.0-20230612165344-9532f5667272 // indirect
223210
golang.org/x/crypto v0.28.0 // indirect
224211
golang.org/x/net v0.30.0 // indirect
225-
golang.org/x/oauth2 v0.22.0 // indirect
212+
golang.org/x/oauth2 v0.23.0 // indirect
226213
golang.org/x/sync v0.8.0 // indirect
227214
golang.org/x/sys v0.26.0 // indirect
228215
golang.org/x/term v0.25.0 // indirect
229216
golang.org/x/text v0.19.0 // indirect
230-
golang.org/x/time v0.5.0 // indirect
217+
golang.org/x/time v0.6.0 // indirect
231218
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
232-
google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 // indirect
233-
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect
234-
google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect
219+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect
235220
google.golang.org/grpc v1.67.1 // indirect
236221
google.golang.org/protobuf v1.35.1 // indirect
237222
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
238223
gopkg.in/inf.v0 v0.9.1 // indirect
239224
gopkg.in/warnings.v0 v0.1.2 // indirect
240225
gopkg.in/yaml.v3 v3.0.1 // indirect
241226
k8s.io/apiserver v0.31.2 // indirect
242-
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
227+
k8s.io/kube-openapi v0.0.0-20240903163716-9e1beecbcb38 // indirect
243228
k8s.io/kubectl v0.31.1 // indirect
244229
oras.land/oras-go v1.2.5 // indirect
245-
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.30.3 // indirect
230+
sigs.k8s.io/gateway-api v1.1.0 // indirect
246231
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
247232
sigs.k8s.io/kustomize/api v0.17.2 // indirect
248233
sigs.k8s.io/kustomize/kyaml v0.17.1 // indirect

0 commit comments

Comments
 (0)