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
|
||||
|
||||
if !chartFetchedByGoGetter {
|
||||
ociChartPath, err := st.getOCIChart(release, dir, helm)
|
||||
ociChartPath, err := st.getOCIChart(release, dir, helm, opts.OutputDirTemplate)
|
||||
if err != nil {
|
||||
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)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -3656,21 +3656,7 @@ func (st *HelmState) getOCIChart(release *ReleaseSpec, tempDir string, helm helm
|
|||
return nil, nil
|
||||
}
|
||||
|
||||
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))
|
||||
|
||||
chartPath := filepath.Join(pathElems...)
|
||||
chartPath, _ := st.getOCIChartPath(tempDir, release, chartName, chartVersion, outputDirTemplate)
|
||||
|
||||
if st.fs.DirectoryExistsAt(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
|
||||
}
|
||||
|
||||
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