@@ -29,41 +29,31 @@ import (
2929 "strconv"
3030 "strings"
3131
32- kbappsv1 "github.com/apecloud/kubeblocks/apis/apps/v1"
32+ extensionsv1alpha1 "github.com/apecloud/kubeblocks/apis/extensions/v1alpha1"
33+ "github.com/apecloud/kubeblocks/pkg/constant"
34+ viper "github.com/apecloud/kubeblocks/pkg/viperx"
3335 "github.com/jedib0t/go-pretty/v6/table"
3436 "github.com/spf13/cobra"
3537 "github.com/spf13/pflag"
36- helmaction "helm.sh/helm/v3/pkg/action"
37- "helm.sh/helm/v3/pkg/chart/loader"
38- "helm.sh/helm/v3/pkg/releaseutil"
3938 corev1 "k8s.io/api/core/v1"
40- apierrors "k8s.io/apimachinery/pkg/api/errors"
4139 "k8s.io/apimachinery/pkg/api/resource"
4240 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4341 "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
4442 "k8s.io/apimachinery/pkg/runtime"
45- "k8s.io/apimachinery/pkg/runtime/schema"
4643 "k8s.io/cli-runtime/pkg/genericiooptions"
4744 discoverycli "k8s.io/client-go/discovery"
4845 "k8s.io/client-go/dynamic"
4946 "k8s.io/client-go/kubernetes"
5047 cmdutil "k8s.io/kubectl/pkg/cmd/util"
5148 "k8s.io/kubectl/pkg/util/templates"
5249 "k8s.io/utils/strings/slices"
53- "sigs.k8s.io/yaml"
54-
55- extensionsv1alpha1 "github.com/apecloud/kubeblocks/apis/extensions/v1alpha1"
56- "github.com/apecloud/kubeblocks/pkg/constant"
57- viper "github.com/apecloud/kubeblocks/pkg/viperx"
5850
5951 "github.com/apecloud/kbcli/pkg/action"
60- "github.com/apecloud/kbcli/pkg/cluster"
6152 clusterCmd "github.com/apecloud/kbcli/pkg/cmd/cluster"
6253 "github.com/apecloud/kbcli/pkg/cmd/plugin"
6354 "github.com/apecloud/kbcli/pkg/printer"
6455 "github.com/apecloud/kbcli/pkg/types"
6556 "github.com/apecloud/kbcli/pkg/util"
66- "github.com/apecloud/kbcli/pkg/util/helm"
6757)
6858
6959type addonEnableFlags struct {
@@ -236,7 +226,6 @@ func newEnableCmd(f cmdutil.Factory, streams genericiooptions.IOStreams) *cobra.
236226 util .CheckErr (o .validate ())
237227 util .CheckErr (o .complete (o , cmd , []string {name }))
238228 util .CheckErr (o .CmdComplete (cmd ))
239- util .CheckErr (o .process09ClusterDefAndComponentVersions ())
240229 util .CheckErr (o .Run ())
241230 if isEngineAddon (& o .addon ) {
242231 util .CheckErr (clusterCmd .RegisterClusterChart (f , streams , "" , name , getAddonVersion (& o .addon ), types .ClusterChartsRepoURL ))
@@ -1034,112 +1023,3 @@ func (o *addonCmdOpts) checkBeforeDisable() error {
10341023 }
10351024 return CheckAddonUsedByCluster (o .dynamic , o .Names , o .In )
10361025}
1037-
1038- func (o * addonCmdOpts ) process09ClusterDefAndComponentVersions () error {
1039- kbDeploys , err := util .GetKBDeploys (o .client , util .KubeblocksAppComponent , metav1 .NamespaceAll )
1040- if err != nil || len (kbDeploys ) < 2 {
1041- return err
1042- }
1043- if ! strings .HasPrefix (o .addon .Spec .Version , "1.0" ) {
1044- return nil
1045- }
1046- var newKBNamespace string
1047- for _ , v := range kbDeploys {
1048- if strings .HasPrefix (v .Labels [constant .AppVersionLabelKey ], "1.0" ) {
1049- newKBNamespace = v .Namespace
1050- break
1051- }
1052- }
1053- // 1. get manifests from the helm repo
1054- chartsDownloader , err := helm .NewDownloader (helm .NewConfig (newKBNamespace , "" , "" , false ))
1055- if err != nil {
1056- return err
1057- }
1058- // DownloadTo can't specify the saved name, so download it to TempDir and rename it when copy
1059- chartPath , _ , err := chartsDownloader .DownloadTo (o .addon .Spec .Helm .ChartLocationURL , "" , cluster .CliChartsCacheDir )
1060- if err != nil {
1061- return err
1062- }
1063- // 2. overwrite the spec of ClusterDefinition and ComponentVersion with the new version
1064- actionCfg , err := helm .NewActionConfig (helm .NewConfig (newKBNamespace , "" , "" , false ))
1065- if err != nil {
1066- return err
1067- }
1068- chart , err := loader .Load (chartPath )
1069- if err != nil {
1070- return err
1071- }
1072- renderer := helmaction .NewInstall (actionCfg )
1073- renderer .ReleaseName = o .addon .Name + "for-upgrade"
1074- renderer .Namespace = newKBNamespace
1075- renderer .DryRun = true
1076- renderer .Replace = true
1077- renderer .ClientOnly = true
1078- valuesMap := map [string ]interface {}{}
1079- if o .addon .Spec .Helm != nil {
1080- for _ , v := range o .addon .Spec .Helm .InstallValues .SetValues {
1081- keyValues := strings .Split (v , "=" )
1082- if len (keyValues ) != 2 {
1083- return fmt .Errorf ("invalid install value: %s" , v )
1084- }
1085- valuesMap [keyValues [0 ]] = keyValues [1 ]
1086- }
1087- }
1088- release , err := renderer .Run (chart , valuesMap )
1089- if err != nil {
1090- return err
1091- }
1092-
1093- updateObject := func (obj runtime.Object , gvr schema.GroupVersionResource ) error {
1094- unstructuredObj := obj .(* unstructured.Unstructured )
1095- targetObj , err := o .dynamic .Resource (gvr ).Namespace ("" ).Get (context .TODO (), unstructuredObj .GetName (), metav1.GetOptions {})
1096- if err != nil {
1097- if apierrors .IsNotFound (err ) {
1098- if _ , err = o .dynamic .Resource (gvr ).Namespace ("" ).Create (context .TODO (), unstructuredObj , metav1.CreateOptions {}); err != nil {
1099- return err
1100- }
1101- return nil
1102- }
1103- return err
1104- }
1105- annotations := targetObj .GetAnnotations ()
1106- annotations [constant .CRDAPIVersionAnnotationKey ] = kbappsv1 .GroupVersion .String ()
1107- annotations ["meta.helm.sh/release-name" ] = "kb-addon-" + o .addon .Name
1108- annotations ["meta.helm.sh/release-namespace" ] = newKBNamespace
1109- targetObj .SetAnnotations (annotations )
1110- targetObj .Object ["spec" ] = unstructuredObj .Object ["spec" ]
1111- if _ , err = o .dynamic .Resource (gvr ).Namespace ("" ).Update (context .TODO (), targetObj , metav1.UpdateOptions {}); err != nil {
1112- return err
1113- }
1114- return nil
1115- }
1116- manifests := releaseutil .SplitManifests (release .Manifest )
1117- for _ , manifest := range manifests {
1118-
1119- // convert yaml to json
1120- jsonData , err := yaml .YAMLToJSON ([]byte (manifest ))
1121- if err != nil {
1122- return err
1123- }
1124- // check if jsonData is empty or null
1125- if len (jsonData ) == 0 || string (jsonData ) == "null" {
1126- continue
1127- }
1128- // get resource gvk
1129- obj , gvk , err := unstructured .UnstructuredJSONScheme .Decode (jsonData , nil , nil )
1130- if err != nil {
1131- return err
1132- }
1133- switch gvk .Kind {
1134- case types .KindClusterDef :
1135- if err = updateObject (obj , types .ClusterDefGVR ()); err != nil {
1136- return err
1137- }
1138- case types .KindComponentVersion :
1139- if err = updateObject (obj , types .ComponentVersionsGVR ()); err != nil {
1140- return err
1141- }
1142- }
1143- }
1144- return nil
1145- }
0 commit comments