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