Skip to content

Commit 338bb3c

Browse files
committed
registry+v1: support webhooks, add simple converter CLI
1 parent e51c0c2 commit 338bb3c

File tree

23 files changed

+3004
-882
lines changed

23 files changed

+3004
-882
lines changed

cmd/manager/main.go

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ import (
6161
"github.com/operator-framework/operator-controller/internal/finalizers"
6262
"github.com/operator-framework/operator-controller/internal/httputil"
6363
"github.com/operator-framework/operator-controller/internal/resolve"
64+
"github.com/operator-framework/operator-controller/internal/rukpak/convert"
6465
"github.com/operator-framework/operator-controller/internal/rukpak/preflights/crdupgradesafety"
6566
"github.com/operator-framework/operator-controller/internal/rukpak/source"
6667
"github.com/operator-framework/operator-controller/internal/scheme"
@@ -88,14 +89,15 @@ func podNamespace() string {
8889

8990
func main() {
9091
var (
91-
metricsAddr string
92-
enableLeaderElection bool
93-
probeAddr string
94-
cachePath string
95-
operatorControllerVersion bool
96-
systemNamespace string
97-
caCertDir string
98-
globalPullSecret string
92+
metricsAddr string
93+
enableLeaderElection bool
94+
probeAddr string
95+
cachePath string
96+
operatorControllerVersion bool
97+
systemNamespace string
98+
caCertDir string
99+
globalPullSecret string
100+
registryV1CertProviderName string
99101
)
100102
flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.")
101103
flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.")
@@ -108,10 +110,14 @@ func main() {
108110
flag.StringVar(&systemNamespace, "system-namespace", "", "Configures the namespace that gets used to deploy system resources.")
109111
flag.StringVar(&globalPullSecret, "global-pull-secret", "", "The <namespace>/<name> of the global pull secret that is going to be used to pull bundle images.")
110112

113+
features.InitializeFromCLIFlags(pflag.CommandLine)
114+
if features.OperatorControllerFeatureGate.Enabled(features.RegistryV1WebhookSupport) {
115+
flag.StringVar(&registryV1CertProviderName, "registry-v1-cert-provider", "", "Certificate provider to use for registry+v1 webhook certificates")
116+
}
117+
111118
klog.InitFlags(flag.CommandLine)
112119

113120
pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
114-
features.OperatorControllerFeatureGate.AddFlag(pflag.CommandLine)
115121
pflag.Parse()
116122

117123
if operatorControllerVersion {
@@ -284,9 +290,16 @@ func main() {
284290
crdupgradesafety.NewPreflight(aeClient.CustomResourceDefinitions()),
285291
}
286292

293+
rv1CertProvider, err := convert.CertProviderByName(registryV1CertProviderName)
294+
if err != nil {
295+
setupLog.Error(err, "failed to load certificate provider")
296+
os.Exit(1)
297+
}
298+
287299
applier := &applier.Helm{
288300
ActionClientGetter: acg,
289301
Preflights: preflights,
302+
ConvertToChartOpts: []convert.ToHelmChartOption{convert.WithCertificateProvider(rv1CertProvider)},
290303
}
291304

292305
cm := contentmanager.NewManager(clientRestConfigMapper, mgr.GetConfig(), mgr.GetRESTMapper())

cmd/registryv1-to-helm/main.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
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+
var registryV1CertProviderName string
23+
cmd := &cobra.Command{
24+
Use: "registryv1-to-helm <registry+v1-directory-path> [output-path]",
25+
Args: cobra.RangeArgs(1, 2),
26+
Run: func(cmd *cobra.Command, args []string) {
27+
registryv1Path := args[0]
28+
29+
saveDir := "."
30+
if len(args) == 2 {
31+
saveDir = args[1]
32+
}
33+
34+
rv1, err := convert.LoadRegistryV1(cmd.Context(), os.DirFS(registryv1Path))
35+
if err != nil {
36+
fmt.Fprintf(os.Stderr, "failed to load registry+v1 bundle: %v\n", err)
37+
os.Exit(1)
38+
}
39+
40+
rv1CertProvider, err := convert.CertProviderByName(registryV1CertProviderName)
41+
if err != nil {
42+
fmt.Fprintf(os.Stderr, "failed to load certificate provider: %v\n", err)
43+
os.Exit(1)
44+
}
45+
46+
chrt, err := rv1.ToHelmChart(convert.WithCertificateProvider(rv1CertProvider))
47+
if err != nil {
48+
fmt.Fprintf(os.Stderr, "failed to convert registry v1 to helm chart: %v\n", err)
49+
os.Exit(1)
50+
}
51+
52+
if err := chartutil.SaveDir(chrt, saveDir); err != nil {
53+
fmt.Fprintf(os.Stderr, "failed to write helm chart to directory: %v\n", err)
54+
os.Exit(1)
55+
}
56+
57+
origChartDir := filepath.Join(saveDir, chrt.Metadata.Name)
58+
desiredChartDir := filepath.Join(saveDir, fmt.Sprintf("%s-%s", chrt.Metadata.Name, chrt.Metadata.Version))
59+
if err := os.Rename(origChartDir, desiredChartDir); err != nil {
60+
fmt.Fprintf(os.Stderr, "failed to rename helm chart directory: %v\n", err)
61+
os.Exit(1)
62+
}
63+
cmd.Printf("Chart saved to %s\n", desiredChartDir)
64+
},
65+
}
66+
features.InitializeFromCLIFlags(cmd.Flags())
67+
if features.OperatorControllerFeatureGate.Enabled(features.RegistryV1WebhookSupport) {
68+
cmd.Flags().StringVar(&registryV1CertProviderName, "registry-v1-cert-provider", "", "a certificate provider to use to generate certificates for registry+v1-defined webhooks (if unset, registry+v1 bundles that define webhooks are unsupported)")
69+
}
70+
71+
return cmd
72+
}

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)