fix(oci): use output-dir-template in path if specified (#1648)
* fix(oci): use output-dir-template in path if specified Signed-off-by: Henrik Huitti <henrik.huitti@henhu.fi>
This commit is contained in:
parent
54b7ab4a14
commit
066a558303
|
|
@ -1215,7 +1215,7 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre
|
||||||
chartFetchedByGoGetter := chartPath != chartName
|
chartFetchedByGoGetter := chartPath != chartName
|
||||||
|
|
||||||
if !chartFetchedByGoGetter {
|
if !chartFetchedByGoGetter {
|
||||||
ociChartPath, err := st.getOCIChart(release, dir, helm)
|
ociChartPath, err := st.getOCIChart(release, dir, helm, opts.OutputDirTemplate)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
results <- &chartPrepareResult{err: fmt.Errorf("release %q: %w", release.Name, err)}
|
results <- &chartPrepareResult{err: fmt.Errorf("release %q: %w", release.Name, err)}
|
||||||
|
|
||||||
|
|
@ -3646,7 +3646,7 @@ func (st *HelmState) Reverse() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helmexec.Interface) (*string, error) {
|
func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helmexec.Interface, outputDirTemplate string) (*string, error) {
|
||||||
qualifiedChartName, chartName, chartVersion, err := st.getOCIQualifiedChartName(release, helm)
|
qualifiedChartName, chartName, chartVersion, err := st.getOCIQualifiedChartName(release, helm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -3656,21 +3656,7 @@ func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helm
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
pathElems := []string{
|
chartPath, _ := st.getOCIChartPath(tempDir, release, chartName, chartVersion, outputDirTemplate)
|
||||||
tempDir,
|
|
||||||
}
|
|
||||||
|
|
||||||
if release.Namespace != "" {
|
|
||||||
pathElems = append(pathElems, release.Namespace)
|
|
||||||
}
|
|
||||||
|
|
||||||
if release.KubeContext != "" {
|
|
||||||
pathElems = append(pathElems, release.KubeContext)
|
|
||||||
}
|
|
||||||
|
|
||||||
pathElems = append(pathElems, release.Name, chartName, safeVersionPath(chartVersion))
|
|
||||||
|
|
||||||
chartPath := filepath.Join(pathElems...)
|
|
||||||
|
|
||||||
if st.fs.DirectoryExistsAt(chartPath) {
|
if st.fs.DirectoryExistsAt(chartPath) {
|
||||||
st.logger.Debugf("chart already exists at %s", chartPath)
|
st.logger.Debugf("chart already exists at %s", chartPath)
|
||||||
|
|
@ -3754,3 +3740,23 @@ func (st *HelmState) FullFilePath() (string, error) {
|
||||||
}
|
}
|
||||||
return filepath.Join(wd, st.basePath, st.FilePath), err
|
return filepath.Join(wd, st.basePath, st.FilePath), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (st *HelmState) getOCIChartPath(tempDir string, release *ReleaseSpec, chartName, chartVersion, outputDirTemplate string) (string, error) {
|
||||||
|
if outputDirTemplate != "" {
|
||||||
|
return generateChartPath(chartName, tempDir, release, outputDirTemplate)
|
||||||
|
}
|
||||||
|
|
||||||
|
pathElems := []string{tempDir}
|
||||||
|
|
||||||
|
if release.Namespace != "" {
|
||||||
|
pathElems = append(pathElems, release.Namespace)
|
||||||
|
}
|
||||||
|
|
||||||
|
if release.KubeContext != "" {
|
||||||
|
pathElems = append(pathElems, release.KubeContext)
|
||||||
|
}
|
||||||
|
|
||||||
|
pathElems = append(pathElems, release.Name, chartName, safeVersionPath(chartVersion))
|
||||||
|
|
||||||
|
return filepath.Join(pathElems...), nil
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -3724,3 +3724,69 @@ func TestHelmState_appendApiVersionsFlags(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGetOCIChartPath(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
tempDir string
|
||||||
|
release *ReleaseSpec
|
||||||
|
chartName string
|
||||||
|
chartVersion string
|
||||||
|
outputDirTemplate string
|
||||||
|
expectedPath string
|
||||||
|
expectedErr bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "OCI chart with template",
|
||||||
|
tempDir: "charts",
|
||||||
|
release: &ReleaseSpec{
|
||||||
|
Name: "karpenter",
|
||||||
|
Chart: "karpenter/karpenter",
|
||||||
|
},
|
||||||
|
chartName: "karpenter",
|
||||||
|
chartVersion: "0.37.0",
|
||||||
|
outputDirTemplate: "{{ .OutputDir }}/",
|
||||||
|
expectedPath: "charts/",
|
||||||
|
expectedErr: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "OCI chart with template containing unknown values",
|
||||||
|
tempDir: "charts",
|
||||||
|
release: &ReleaseSpec{
|
||||||
|
Name: "karpenter",
|
||||||
|
Chart: "karpenter/karpenter",
|
||||||
|
},
|
||||||
|
chartName: "karpenter",
|
||||||
|
chartVersion: "0.37.0",
|
||||||
|
outputDirTemplate: "{{ .SomethingThatDoesNotExist }}/",
|
||||||
|
expectedPath: "",
|
||||||
|
expectedErr: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "OCI chart without template",
|
||||||
|
tempDir: "charts",
|
||||||
|
release: &ReleaseSpec{
|
||||||
|
Name: "karpenter",
|
||||||
|
Chart: "karpenter/karpenter",
|
||||||
|
},
|
||||||
|
chartName: "karpenter",
|
||||||
|
chartVersion: "0.37.0",
|
||||||
|
expectedPath: "charts/karpenter/karpenter/0.37.0",
|
||||||
|
expectedErr: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
st := &HelmState{}
|
||||||
|
path, err := st.getOCIChartPath(tt.tempDir, tt.release, tt.chartName, tt.chartVersion, tt.outputDirTemplate)
|
||||||
|
|
||||||
|
if tt.expectedErr {
|
||||||
|
require.Error(t, err)
|
||||||
|
} else {
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, tt.expectedPath, path)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue