Skip to content

Commit 595a371

Browse files
committed
pkg/helm: automatically convert v2 releases to v3
1 parent 8caf19d commit 595a371

File tree

3 files changed

+120
-18
lines changed

3 files changed

+120
-18
lines changed

go.mod

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,18 @@ module github.com/operator-framework/operator-sdk
33
go 1.13
44

55
require (
6+
github.com/DATA-DOG/go-sqlmock v1.3.3 // indirect
67
github.com/blang/semver v3.5.1+incompatible
78
github.com/coreos/go-semver v0.3.0
89
github.com/coreos/prometheus-operator v0.33.0
910
github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32
1011
github.com/go-logr/logr v0.1.0
1112
github.com/go-logr/zapr v0.1.1
13+
github.com/helm/helm v2.15.2+incompatible
14+
github.com/helm/helm-2to3 v0.1.7
1215
github.com/iancoleman/strcase v0.0.0-20190422225806-e506e3ef7365
16+
github.com/jmoiron/sqlx v1.2.0 // indirect
17+
github.com/lib/pq v1.2.0 // indirect
1318
github.com/markbates/inflect v1.0.4
1419
github.com/martinlindhe/base36 v1.0.0
1520
github.com/mattbaird/jsonpatch v0.0.0-20171005235357-81af80346b1a
@@ -22,6 +27,7 @@ require (
2227
github.com/pkg/errors v0.8.1
2328
github.com/prometheus/client_golang v1.2.1
2429
github.com/rogpeppe/go-internal v1.5.0
30+
github.com/rubenv/sql-migrate v0.0.0-20191025130928-9355dd04f4b3 // indirect
2531
github.com/sergi/go-diff v1.0.0
2632
github.com/sirupsen/logrus v1.4.2
2733
github.com/spf13/afero v1.2.2
@@ -31,15 +37,17 @@ require (
3137
github.com/stretchr/testify v1.4.0
3238
go.uber.org/zap v1.10.0
3339
golang.org/x/tools v0.0.0-20191018212557-ed542cd5b28a
40+
gopkg.in/gorp.v1 v1.7.2 // indirect
3441
gopkg.in/yaml.v2 v2.2.4
35-
helm.sh/helm/v3 v3.0.0-beta.5.0.20191028225627-82a100b0b727
42+
helm.sh/helm/v3 v3.0.0-rc.1
3643
k8s.io/api v0.0.0
3744
k8s.io/apiextensions-apiserver v0.0.0
3845
k8s.io/apimachinery v0.0.0
3946
k8s.io/cli-runtime v0.0.0
4047
k8s.io/client-go v11.0.0+incompatible
4148
k8s.io/code-generator v0.0.0
4249
k8s.io/gengo v0.0.0-20191010091904-7fa3014cb28f
50+
k8s.io/helm v2.15.2+incompatible
4351
k8s.io/klog v1.0.0
4452
k8s.io/kube-openapi v0.0.0-20190918143330-0270cf2f1c1d
4553
k8s.io/kube-state-metrics v1.8.0

go.sum

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,17 @@ github.com/BurntSushi/toml v0.3.0/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03
2828
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
2929
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
3030
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
31+
github.com/DATA-DOG/go-sqlmock v1.3.3 h1:CWUqKXe0s8A2z6qCgkP4Kru7wC11YoAnoupUKFDnH08=
32+
github.com/DATA-DOG/go-sqlmock v1.3.3/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
3133
github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14=
3234
github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA=
3335
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E=
3436
github.com/MakeNowJust/heredoc v0.0.0-20171113091838-e9091a26100e h1:eb0Pzkt15Bm7f2FFYv7sjY7NPFi3cPkS3tv1CcrFBWA=
3537
github.com/MakeNowJust/heredoc v0.0.0-20171113091838-e9091a26100e/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E=
3638
github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg=
3739
github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
40+
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
41+
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
3842
github.com/Masterminds/semver/v3 v3.0.1 h1:2kKm5lb7dKVrt5TYUiAavE6oFc1cFT0057UVGT+JqLk=
3943
github.com/Masterminds/semver/v3 v3.0.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
4044
github.com/Masterminds/sprig/v3 v3.0.0 h1:KSQz7Nb08/3VU9E4ns29dDxcczhOD1q7O1UfM4G3t3g=
@@ -291,6 +295,7 @@ github.com/go-openapi/validate v0.17.2/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+
291295
github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4=
292296
github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA=
293297
github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU=
298+
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
294299
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
295300
github.com/gobuffalo/envy v1.6.5 h1:X3is06x7v0nW2xiy2yFbbIjwHz57CD6z6MkvqULTCm8=
296301
github.com/gobuffalo/envy v1.6.5/go.mod h1:N+GkhhZ/93bGZc6ZKhJLP6+m+tCNPKwgSpH9kaifseQ=
@@ -408,6 +413,10 @@ github.com/heketi/heketi v9.0.0+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7
408413
github.com/heketi/rest v0.0.0-20180404230133-aa6a65207413/go.mod h1:BeS3M108VzVlmAue3lv2WcGuPAX94/KN63MUURzbYSI=
409414
github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4=
410415
github.com/heketi/utils v0.0.0-20170317161834-435bc5bdfa64/go.mod h1:RYlF4ghFZPPmk2TC5REt5OFwvfb6lzxFWrTWB+qs28s=
416+
github.com/helm/helm v2.15.2+incompatible h1:pq6HCDeTKk9iCPidfyJE62Fl8CmxOiOFsd6hQLPrRPo=
417+
github.com/helm/helm v2.15.2+incompatible/go.mod h1:ahXhuvluW4YnSL6W6hDVetZsVK8Pv4BP8OwKli7aMqo=
418+
github.com/helm/helm-2to3 v0.1.7 h1:b6sFX12yGA6ggIGGYaf8oMHPxBqGGYFJmFzxgEh3EF0=
419+
github.com/helm/helm-2to3 v0.1.7/go.mod h1:BHJsKSrCzZye9v+mhZ0ZIvKv08hbadEHRngu6HIm5xE=
411420
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
412421
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
413422
github.com/huandu/xstrings v1.2.0 h1:yPeWdRnmynF7p+lLYz0H2tthW9lqhMJrQV/U7yy4wX0=
@@ -425,6 +434,8 @@ github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NH
425434
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
426435
github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a/go.mod h1:wK6yTYYcgjHE1Z1QtXACPDjcFJyBskHEdagmnq3vsP8=
427436
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
437+
github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA=
438+
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
428439
github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8=
429440
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
430441
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
@@ -457,6 +468,9 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
457468
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
458469
github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k=
459470
github.com/leanovate/gopter v0.2.4/go.mod h1:gNcbPWNEWRe4lm+bycKqxUYoH5uoVje5SkOJ3uoLer8=
471+
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
472+
github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
473+
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
460474
github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc=
461475
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
462476
github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc=
@@ -477,6 +491,7 @@ github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN
477491
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
478492
github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM=
479493
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
494+
github.com/maorfr/helm-plugin-utils v0.0.0-20181205064038-588190cb5e3b/go.mod h1:p3gwmRSFqbWw6plBpR0sKl3n3vpu8kX70gvCJKMvvCA=
480495
github.com/markbates/inflect v1.0.4 h1:5fh1gzTFhfae06u3hzHYO9xe3l3v3nW5Pwt3naLTP5g=
481496
github.com/markbates/inflect v1.0.4/go.mod h1:1fR9+pO2KHEO9ZRtto13gDwwZaAKstQzferVeWqbgNs=
482497
github.com/marten-seemann/qtls v0.2.3/go.mod h1:xzjG7avBwGGbdZ8dTGxlBnLArsVKLvwmjgmPuiQEcYk=
@@ -658,6 +673,8 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So
658673
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
659674
github.com/rogpeppe/go-internal v1.5.0 h1:Usqs0/lDK/NqTkvrmKSwA/3XkZAs7ZAW/eLeQ2MVBTw=
660675
github.com/rogpeppe/go-internal v1.5.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
676+
github.com/rubenv/sql-migrate v0.0.0-20191025130928-9355dd04f4b3 h1:lwDYefgiwhjuAuVnMVUYknoF+Yg9CBUykYGvYoPCNnQ=
677+
github.com/rubenv/sql-migrate v0.0.0-20191025130928-9355dd04f4b3/go.mod h1:WS0rl9eEliYI8DPnr3TOwz4439pay+qNgzJoVya/DmY=
661678
github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto=
662679
github.com/russross/blackfriday v0.0.0-20170610170232-067529f716f4/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
663680
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
@@ -938,6 +955,8 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy
938955
gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE=
939956
gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
940957
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
958+
gopkg.in/gorp.v1 v1.7.2 h1:j3DWlAyGVv8whO7AcIWznQ2Yj7yJkn34B8s63GViAAw=
959+
gopkg.in/gorp.v1 v1.7.2/go.mod h1:Wo3h+DBQZIxATwftsglhdD/62zRFPhGhTiu5jUJmCaw=
941960
gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
942961
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
943962
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
@@ -964,8 +983,11 @@ gotest.tools v2.1.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81
964983
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
965984
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
966985
gotest.tools/gotestsum v0.3.5/go.mod h1:Mnf3e5FUzXbkCfynWBGOwLssY7gTQgCHObK9tMpAriY=
986+
helm.sh/helm v2.15.2+incompatible h1:v+fbOh4QsOCP/gViD6sdlPXdF785Z9j5BjVSguYyyv0=
967987
helm.sh/helm/v3 v3.0.0-beta.5.0.20191028225627-82a100b0b727 h1:e/bmueHlkHkcjXlk68YU91grzVPCwMsg47TQXBaxugo=
968988
helm.sh/helm/v3 v3.0.0-beta.5.0.20191028225627-82a100b0b727/go.mod h1:sI7B9yfvMgxtTPMWdk1jSKJ2aa59UyP9qhPydqW6mgo=
989+
helm.sh/helm/v3 v3.0.0-rc.1 h1:i/M1xi5MPMsbGQQLUekLjS/XaNqxVeV0nEk41BD85+Y=
990+
helm.sh/helm/v3 v3.0.0-rc.1/go.mod h1:sI7B9yfvMgxtTPMWdk1jSKJ2aa59UyP9qhPydqW6mgo=
969991
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
970992
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
971993
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1001,6 +1023,8 @@ k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8
10011023
k8s.io/gengo v0.0.0-20191010091904-7fa3014cb28f h1:eW/6wVuHNZgQJmFesyAxu0cvj0WAHHUuGaLbPcmNY3Q=
10021024
k8s.io/gengo v0.0.0-20191010091904-7fa3014cb28f/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
10031025
k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM=
1026+
k8s.io/helm v2.15.2+incompatible h1:UjEb+c5BUZDGR9zU3dWG3OXASLIeqLeY0FCIx6ZyfTY=
1027+
k8s.io/helm v2.15.2+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI=
10041028
k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
10051029
k8s.io/klog v0.1.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
10061030
k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=

pkg/helm/release/manager_factory.go

Lines changed: 87 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,25 @@ import (
1919
"io"
2020
"strings"
2121

22-
"k8s.io/apimachinery/pkg/runtime"
23-
24-
"k8s.io/apimachinery/pkg/api/meta"
25-
22+
helm2to3 "github.com/helm/helm-2to3/pkg/v3"
2623
"github.com/martinlindhe/base36"
2724
"github.com/pborman/uuid"
2825
"helm.sh/helm/v3/pkg/action"
2926
"helm.sh/helm/v3/pkg/chart/loader"
3027
"helm.sh/helm/v3/pkg/kube"
31-
helmrelease "helm.sh/helm/v3/pkg/release"
32-
"helm.sh/helm/v3/pkg/storage"
33-
"helm.sh/helm/v3/pkg/storage/driver"
28+
helmreleasev3 "helm.sh/helm/v3/pkg/release"
29+
v3storage "helm.sh/helm/v3/pkg/storage"
30+
v3driver "helm.sh/helm/v3/pkg/storage/driver"
31+
"k8s.io/apimachinery/pkg/api/meta"
3432
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3533
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
34+
"k8s.io/apimachinery/pkg/runtime"
3635
apitypes "k8s.io/apimachinery/pkg/types"
3736
"k8s.io/cli-runtime/pkg/resource"
3837
v1 "k8s.io/client-go/kubernetes/typed/core/v1"
38+
helmreleasev2 "k8s.io/helm/pkg/proto/hapi/release"
39+
v2storage "k8s.io/helm/pkg/storage"
40+
v2driver "k8s.io/helm/pkg/storage/driver"
3941
crmanager "sigs.k8s.io/controller-runtime/pkg/manager"
4042

4143
"github.com/operator-framework/operator-sdk/pkg/helm/client"
@@ -65,7 +67,14 @@ func (f managerFactory) NewManager(cr *unstructured.Unstructured) (Manager, erro
6567
if err != nil {
6668
return nil, fmt.Errorf("failed to get core/v1 client: %s", err)
6769
}
68-
storageBackend := storage.Init(driver.NewSecrets(clientv1.Secrets(cr.GetNamespace())))
70+
71+
v2StorageBackend := v2storage.Init(v2driver.NewSecrets(clientv1.Secrets(cr.GetNamespace())))
72+
v3StorageBackend := v3storage.Init(v3driver.NewSecrets(clientv1.Secrets(cr.GetNamespace())))
73+
74+
if err := convertV2ToV3(v2StorageBackend, v3StorageBackend, cr); err != nil {
75+
return nil, fmt.Errorf("failed to convert releases from v2 to v3: %s", err)
76+
}
77+
6978
rcg, err := client.NewRESTClientGetter(f.mgr)
7079
if err != nil {
7180
return nil, fmt.Errorf("failed to get REST client getter from manager: %s", err)
@@ -75,7 +84,7 @@ func (f managerFactory) NewManager(cr *unstructured.Unstructured) (Manager, erro
7584
if err != nil {
7685
return nil, fmt.Errorf("failed to load chart dir: %s", err)
7786
}
78-
releaseName, err := getReleaseName(storageBackend, crChart.Name(), cr)
87+
releaseName, err := getReleaseName(v3StorageBackend, crChart.Name(), cr)
7988
if err != nil {
8089
return nil, fmt.Errorf("failed to get helm release name: %s", err)
8190
}
@@ -90,13 +99,13 @@ func (f managerFactory) NewManager(cr *unstructured.Unstructured) (Manager, erro
9099
}
91100
actionConfig := &action.Configuration{
92101
RESTClientGetter: rcg,
93-
Releases: storageBackend,
102+
Releases: v3StorageBackend,
94103
KubeClient: ownerRefClient,
95104
Log: func(_ string, _ ...interface{}) {},
96105
}
97106
return &manager{
98107
actionConfig: actionConfig,
99-
storageBackend: storageBackend,
108+
storageBackend: v3StorageBackend,
100109
kubeClient: ownerRefClient,
101110

102111
releaseName: releaseName,
@@ -138,6 +147,55 @@ func (c *ownerRefInjectingClient) Build(reader io.Reader, validate bool) (kube.R
138147
return resourceList, nil
139148
}
140149

150+
func convertV2ToV3(v2StorageBackend *v2storage.Storage, v3StorageBackend *v3storage.Storage, cr *unstructured.Unstructured) error {
151+
// If a v2 release with the legacy name exists, convert it to v3.
152+
legacyName := getLegacyName(cr)
153+
legacyHistoryV2, legacyV2Exists, err := releaseHistoryV2(v2StorageBackend, legacyName)
154+
if err != nil {
155+
return err
156+
}
157+
if legacyV2Exists {
158+
if err := convertHistoryToV3(legacyHistoryV2, v2StorageBackend, v3StorageBackend); err != nil {
159+
return err
160+
}
161+
return nil
162+
}
163+
164+
// If a v2 release with the CR name exists, convert it to v3.
165+
releaseName := cr.GetName()
166+
historyV2, existsV2, err := releaseHistoryV2(v2StorageBackend, releaseName)
167+
if err != nil {
168+
return err
169+
}
170+
if existsV2 {
171+
if err := convertHistoryToV3(historyV2, v2StorageBackend, v3StorageBackend); err != nil {
172+
return err
173+
}
174+
return nil
175+
}
176+
return nil
177+
}
178+
179+
func convertHistoryToV3(history []*helmreleasev2.Release, v2StorageBackend *v2storage.Storage, v3StorageBackend *v3storage.Storage) error {
180+
for _, v2Rel := range history {
181+
v3Rel, err := helm2to3.CreateRelease(v2Rel)
182+
if err != nil {
183+
return fmt.Errorf("generate v3 release: %s", err)
184+
}
185+
if err := v3StorageBackend.Create(v3Rel); err != nil {
186+
return fmt.Errorf("create v3 release: %s", err)
187+
}
188+
if _, err := v2StorageBackend.Delete(v2Rel.GetName(), v2Rel.GetVersion()); err != nil {
189+
return fmt.Errorf("delete v2 release: %s", err)
190+
}
191+
}
192+
return nil
193+
}
194+
195+
func getLegacyName(cr *unstructured.Unstructured) string {
196+
return fmt.Sprintf("%s-%s", cr.GetName(), shortenUID(cr.GetUID()))
197+
}
198+
141199
// getReleaseName returns a release name for the CR. If a release for the
142200
// legacy name exists, the legacy name is returned. This ensures
143201
// backwards-compatibility for pre-existing CRs.
@@ -169,10 +227,11 @@ func (c *ownerRefInjectingClient) Build(reader io.Reader, validate bool) (kube.R
169227
// admission webhook so that the CR owner receives immediate feedback of the
170228
// collision. As is, the only indication of collision will be in the CR status
171229
// and operator logs.
172-
func getReleaseName(storageBackend *storage.Storage, crChartName string, cr *unstructured.Unstructured) (string, error) {
173-
// If a release with the legacy name exists, return the legacy name.
174-
legacyName := fmt.Sprintf("%s-%s", cr.GetName(), shortenUID(cr.GetUID()))
175-
_, legacyExists, err := releaseHistory(storageBackend, legacyName)
230+
func getReleaseName(storageBackend *v3storage.Storage, crChartName string, cr *unstructured.Unstructured) (string, error) {
231+
// If a release with the legacy name exists as a v3 release,
232+
// return the legacy name.
233+
legacyName := getLegacyName(cr)
234+
_, legacyExists, err := releaseHistoryV3(storageBackend, legacyName)
176235
if err != nil {
177236
return "", err
178237
}
@@ -182,7 +241,7 @@ func getReleaseName(storageBackend *storage.Storage, crChartName string, cr *uns
182241

183242
// If a release with the CR name does not exist, return the CR name.
184243
releaseName := cr.GetName()
185-
history, exists, err := releaseHistory(storageBackend, releaseName)
244+
history, exists, err := releaseHistoryV3(storageBackend, releaseName)
186245
if err != nil {
187246
return "", err
188247
}
@@ -204,7 +263,18 @@ func getReleaseName(storageBackend *storage.Storage, crChartName string, cr *uns
204263
return releaseName, nil
205264
}
206265

207-
func releaseHistory(storageBackend *storage.Storage, releaseName string) ([]*helmrelease.Release, bool, error) {
266+
func releaseHistoryV2(storageBackend *v2storage.Storage, releaseName string) ([]*helmreleasev2.Release, bool, error) {
267+
releaseHistory, err := storageBackend.History(releaseName)
268+
if err != nil {
269+
if notFoundErr(err) {
270+
return nil, false, nil
271+
}
272+
return nil, false, err
273+
}
274+
return releaseHistory, len(releaseHistory) > 0, nil
275+
}
276+
277+
func releaseHistoryV3(storageBackend *v3storage.Storage, releaseName string) ([]*helmreleasev3.Release, bool, error) {
208278
releaseHistory, err := storageBackend.History(releaseName)
209279
if err != nil {
210280
if notFoundErr(err) {

0 commit comments

Comments
 (0)