Skip to content

Commit 1699a67

Browse files
authored
fix chart deploy service preview (#4536)
Signed-off-by: Patrick Zhao <zhaoyu@koderover.com>
1 parent 47f76ad commit 1699a67

3 files changed

Lines changed: 50 additions & 15 deletions

File tree

pkg/microservice/aslan/core/common/service/kube/helm.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -952,7 +952,12 @@ func GetHelmChartManifest(service *commonmodels.Service, valuesYaml, chartName,
952952
ValuesYaml: valuesYaml,
953953
}
954954

955-
manifestBytes, err := helmClient.TemplateChart(chartSpec, nil)
955+
var templateOptions *helmclient.HelmTemplateOptions
956+
if helmClient != nil && helmClient.KubeVersion != nil {
957+
templateOptions = &helmclient.HelmTemplateOptions{KubeVersion: helmClient.KubeVersion}
958+
}
959+
960+
manifestBytes, err := helmClient.TemplateChart(chartSpec, templateOptions)
956961
if err != nil {
957962
return nil, fmt.Errorf("failed to template chart %s/%s, chartPath: %s, err: %s", chartName, chartVersion, chartPath, err)
958963
}

pkg/microservice/aslan/core/environment/service/environment.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1605,19 +1605,27 @@ func GenEstimatedValues(projectName, envName, namespace, serviceOrReleaseName st
16051605
if scene == EstimateValuesSceneCreateEnv || scene == EstimateValuesSceneCreateService {
16061606
// service already exists in the current environment, create it
16071607

1608-
currentReleaseName = util.GeneReleaseName(latestTmplSvc.GetReleaseNaming(), projectName, prod.Namespace, envName, latestTmplSvc.ServiceName)
1609-
latestReleaseName = currentReleaseName
1608+
if !isHelmChartDeploy {
1609+
currentReleaseName = util.GeneReleaseName(latestTmplSvc.GetReleaseNaming(), projectName, prod.Namespace, envName, latestTmplSvc.ServiceName)
1610+
latestReleaseName = currentReleaseName
1611+
} else {
1612+
currentReleaseName = serviceOrReleaseName
1613+
latestReleaseName = serviceOrReleaseName
1614+
}
16101615

16111616
currentYaml = ""
16121617
} else if scene == EstimateValuesSceneUpdateService {
16131618
// service exists in the current environment, update it
16141619
if isHelmChartDeploy {
1620+
currentReleaseName = serviceOrReleaseName
1621+
latestReleaseName = serviceOrReleaseName
1622+
16151623
render := prodSvc.GetServiceRender()
16161624
chartRepo, err := commonrepo.NewHelmRepoColl().Find(&commonrepo.HelmRepoFindOption{RepoName: render.ChartRepo})
16171625
if err != nil {
16181626
return nil, fmt.Errorf("failed to query chart-repo info, repoName: %s", render.ChartRepo)
16191627
}
1620-
client, err := commonutil.NewHelmClient(chartRepo)
1628+
client, err := helmtool.NewClientFromNamespace(prod.ClusterID, prod.Namespace)
16211629
if err != nil {
16221630
return nil, fmt.Errorf("failed to new helm client, err %s", err)
16231631
}
@@ -1646,7 +1654,7 @@ func GenEstimatedValues(projectName, envName, namespace, serviceOrReleaseName st
16461654
return nil, fmt.Errorf("failed to download instantiate chart, err: %w", err)
16471655
}
16481656

1649-
helmClient, err := helmtool.NewClient()
1657+
helmClient, err := helmtool.NewClientFromNamespace(prod.ClusterID, prod.Namespace)
16501658
if err != nil {
16511659
return nil, fmt.Errorf("failed to new helm client, err %s", err)
16521660
}
@@ -1672,7 +1680,7 @@ func GenEstimatedValues(projectName, envName, namespace, serviceOrReleaseName st
16721680

16731681
if contextType == EstimateContentTypeManifest {
16741682
render := prodSvc.GetServiceRender()
1675-
helmClient, err := helmtool.NewClient()
1683+
helmClient, err := helmtool.NewClientFromNamespace(prod.ClusterID, prod.Namespace)
16761684
if err != nil {
16771685
return nil, fmt.Errorf("failed to new helm client, err %s", err)
16781686
}
@@ -1691,7 +1699,7 @@ func GenEstimatedValues(projectName, envName, namespace, serviceOrReleaseName st
16911699
if err != nil {
16921700
return nil, fmt.Errorf("failed to query chart-repo info, repoName: %s", arg.ChartRepo)
16931701
}
1694-
client, err := commonutil.NewHelmClient(chartRepo)
1702+
client, err := helmtool.NewClientFromNamespace(prod.ClusterID, prod.Namespace)
16951703
if err != nil {
16961704
return nil, fmt.Errorf("failed to new helm client, err %s", err)
16971705
}
@@ -1724,7 +1732,7 @@ func GenEstimatedValues(projectName, envName, namespace, serviceOrReleaseName st
17241732
return nil, fmt.Errorf("failed to download instantiate chart, err: %w", err)
17251733
}
17261734

1727-
helmClient, err := helmtool.NewClient()
1735+
helmClient, err := helmtool.NewClientFromNamespace(prod.ClusterID, prod.Namespace)
17281736
if err != nil {
17291737
return nil, fmt.Errorf("failed to new helm client, err %s", err)
17301738
}
@@ -1777,7 +1785,7 @@ func GenEstimatedValues(projectName, envName, namespace, serviceOrReleaseName st
17771785

17781786
if contextType == EstimateContentTypeManifest {
17791787
render := prodSvc.GetServiceRender()
1780-
helmClient, err := helmtool.NewClient()
1788+
helmClient, err := helmtool.NewClientFromNamespace(prod.ClusterID, prod.Namespace)
17811789
if err != nil {
17821790
return nil, fmt.Errorf("failed to new helm client, err %s", err)
17831791
}

pkg/tool/helmclient/helmclient.go

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import (
3939
"helm.sh/helm/v3/pkg/action"
4040
"helm.sh/helm/v3/pkg/chart"
4141
"helm.sh/helm/v3/pkg/chart/loader"
42+
helmchartutil "helm.sh/helm/v3/pkg/chartutil"
4243
"helm.sh/helm/v3/pkg/cli"
4344
"helm.sh/helm/v3/pkg/downloader"
4445
"helm.sh/helm/v3/pkg/getter"
@@ -55,7 +56,7 @@ import (
5556
"k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
5657
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
5758
"k8s.io/client-go/rest"
58-
"k8s.io/helm/pkg/chartutil"
59+
k8schartutil "k8s.io/helm/pkg/chartutil"
5960
"sigs.k8s.io/controller-runtime/pkg/client"
6061
"sigs.k8s.io/yaml"
6162

@@ -88,6 +89,7 @@ type HelmClient struct {
8889
*hc.HelmClient
8990
kubeClient client.Client
9091
Namespace string
92+
KubeVersion *helmchartutil.KubeVersion
9193
lock *sync.Mutex
9294
RestConfig *rest.Config
9395
RegistryClient *registry.Client
@@ -111,21 +113,24 @@ func NewClient() (*HelmClient, error) {
111113
HelmClient: helmClient,
112114
kubeClient: nil,
113115
Namespace: "",
116+
KubeVersion: nil,
114117
lock: &sync.Mutex{},
115118
RestConfig: nil,
116119
RegistryClient: nil,
117120
}, nil
118121
}
119122

120-
// NewClientFromNamespace returns a new Helm client constructed with the provided clusterID and namespace
121-
// a kubeClient will be initialized to support necessary k8s operations when install/upgrade helm charts
123+
// NewClientFromNamespace returns a new Helm client constructed with the provided clusterID and namespace.
124+
// A kubeClient will be initialized to support necessary k8s operations when install/upgrade helm charts.
122125
func NewClientFromNamespace(clusterID, namespace string) (*HelmClient, error) {
123-
restConfig, err := clientmanager.NewKubeClientManager().GetRestConfig(clusterID)
126+
kubeManager := clientmanager.NewKubeClientManager()
127+
128+
restConfig, err := kubeManager.GetRestConfig(clusterID)
124129
if err != nil {
125130
return nil, err
126131
}
127132

128-
kubeClient, err := clientmanager.NewKubeClientManager().GetControllerRuntimeClient(clusterID)
133+
kubeClient, err := kubeManager.GetControllerRuntimeClient(clusterID)
129134
if err != nil {
130135
return nil, err
131136
}
@@ -142,10 +147,26 @@ func NewClientFromNamespace(clusterID, namespace string) (*HelmClient, error) {
142147
}
143148

144149
helmClient := hcClient.(*hc.HelmClient)
150+
clientset, err := kubeManager.GetKubernetesClientSet(clusterID)
151+
if err != nil {
152+
return nil, fmt.Errorf("failed to get kubernetes clientset for cluster %s: %v", clusterID, err)
153+
}
154+
155+
versionInfo, err := clientset.Discovery().ServerVersion()
156+
if err != nil {
157+
return nil, fmt.Errorf("failed to get kubernetes server version for cluster %s: %v", clusterID, err)
158+
}
159+
160+
kubeVersion, err := helmchartutil.ParseKubeVersion(versionInfo.GitVersion)
161+
if err != nil {
162+
return nil, fmt.Errorf("failed to parse kubernetes server version %q for cluster %s: %v", versionInfo.GitVersion, clusterID, err)
163+
}
164+
145165
return &HelmClient{
146166
HelmClient: helmClient,
147167
kubeClient: kubeClient,
148168
Namespace: namespace,
169+
KubeVersion: kubeVersion,
149170
lock: &sync.Mutex{},
150171
RestConfig: restConfig,
151172
RegistryClient: nil,
@@ -171,6 +192,7 @@ func NewClientFromRestConf(restConfig *rest.Config, ns string) (*HelmClient, err
171192
HelmClient: helmClient,
172193
kubeClient: nil,
173194
Namespace: ns,
195+
KubeVersion: nil,
174196
lock: &sync.Mutex{},
175197
RestConfig: restConfig,
176198
RegistryClient: nil,
@@ -817,7 +839,7 @@ func (hClient *HelmClient) runPull(p *action.Pull, chartRef string) (string, err
817839
return out.String(), errors.Errorf("failed to untar: a file or directory with the name %s already exists", udCheck)
818840
}
819841

820-
return out.String(), chartutil.ExpandFile(ud, saved)
842+
return out.String(), k8schartutil.ExpandFile(ud, saved)
821843
}
822844
return out.String(), nil
823845
}

0 commit comments

Comments
 (0)