Merge branch 'update-strategy-feature' of https://github.com/simbou2000/helmfile into update-strategy-feature
Signed-off-by: Simon Bouchard <sbouchard@rbbn.com>
This commit is contained in:
commit
9a6aa9e52b
|
|
@ -45,7 +45,7 @@ linters:
|
||||||
lines: 280
|
lines: 280
|
||||||
statements: 140
|
statements: 140
|
||||||
gocognit:
|
gocognit:
|
||||||
min-complexity: 100
|
min-complexity: 110
|
||||||
goconst:
|
goconst:
|
||||||
min-len: 3
|
min-len: 3
|
||||||
min-occurrences: 8
|
min-occurrences: 8
|
||||||
|
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
Vagrant.configure("2") do |config|
|
|
||||||
config.vm.box = "ubuntu/focal64"
|
|
||||||
config.vm.hostname = "minikube.box"
|
|
||||||
config.vm.provision :shell, privileged: false,
|
|
||||||
inline: <<-EOS
|
|
||||||
set -e
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y make docker.io
|
|
||||||
sudo systemctl start docker
|
|
||||||
sudo usermod -G docker $USER
|
|
||||||
cd /vagrant/.circleci
|
|
||||||
make all
|
|
||||||
EOS
|
|
||||||
|
|
||||||
config.vm.provider "virtualbox" do |v|
|
|
||||||
v.memory = 2048
|
|
||||||
v.cpus = 2
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -416,6 +416,10 @@ helmfiles:
|
||||||
# If set to "Error", return an error when a subhelmfile points to a
|
# If set to "Error", return an error when a subhelmfile points to a
|
||||||
# non-existent path. The default behavior is to print a warning and continue.
|
# non-existent path. The default behavior is to print a warning and continue.
|
||||||
missingFileHandler: Error
|
missingFileHandler: Error
|
||||||
|
missingFileHandlerConfig:
|
||||||
|
# Ignores missing git branch error so that the Debug/Info/Warn handler can treat a missing branch as non-error.
|
||||||
|
# See https://github.com/helmfile/helmfile/issues/392
|
||||||
|
ignoreMissingGitBranch: true
|
||||||
|
|
||||||
#
|
#
|
||||||
# Advanced Configuration: Environments
|
# Advanced Configuration: Environments
|
||||||
|
|
|
||||||
2
go.mod
2
go.mod
|
|
@ -84,7 +84,7 @@ require (
|
||||||
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
|
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
|
||||||
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
||||||
github.com/otiai10/copy v1.14.1 // indirect
|
github.com/otiai10/copy v1.14.1
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||||
github.com/ryanuber/go-glob v1.0.0 // indirect
|
github.com/ryanuber/go-glob v1.0.0 // indirect
|
||||||
|
|
|
||||||
|
|
@ -345,8 +345,7 @@ func (a *App) Fetch(c FetchConfigProvider) error {
|
||||||
OutputDir: c.OutputDir(),
|
OutputDir: c.OutputDir(),
|
||||||
OutputDirTemplate: c.OutputDirTemplate(),
|
OutputDirTemplate: c.OutputDirTemplate(),
|
||||||
Concurrency: c.Concurrency(),
|
Concurrency: c.Concurrency(),
|
||||||
}, func() {
|
}, func() {})
|
||||||
})
|
|
||||||
|
|
||||||
if prepErr != nil {
|
if prepErr != nil {
|
||||||
errs = append(errs, prepErr)
|
errs = append(errs, prepErr)
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,8 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
copyDir "github.com/otiai10/copy"
|
||||||
)
|
)
|
||||||
|
|
||||||
type fileStat struct {
|
type fileStat struct {
|
||||||
|
|
@ -36,6 +38,7 @@ type FileSystem struct {
|
||||||
Chdir func(string) error
|
Chdir func(string) error
|
||||||
Abs func(string) (string, error)
|
Abs func(string) (string, error)
|
||||||
EvalSymlinks func(string) (string, error)
|
EvalSymlinks func(string) (string, error)
|
||||||
|
CopyDir func(src, dst string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
func DefaultFileSystem() *FileSystem {
|
func DefaultFileSystem() *FileSystem {
|
||||||
|
|
@ -55,6 +58,7 @@ func DefaultFileSystem() *FileSystem {
|
||||||
dfs.DirectoryExistsAt = dfs.directoryExistsDefault
|
dfs.DirectoryExistsAt = dfs.directoryExistsDefault
|
||||||
dfs.FileExists = dfs.fileExistsDefault
|
dfs.FileExists = dfs.fileExistsDefault
|
||||||
dfs.Abs = dfs.absDefault
|
dfs.Abs = dfs.absDefault
|
||||||
|
dfs.CopyDir = dfs.copyDirDefault
|
||||||
return &dfs
|
return &dfs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -100,6 +104,9 @@ func FromFileSystem(params FileSystem) *FileSystem {
|
||||||
if params.Dir != nil {
|
if params.Dir != nil {
|
||||||
dfs.Dir = params.Dir
|
dfs.Dir = params.Dir
|
||||||
}
|
}
|
||||||
|
if params.CopyDir != nil {
|
||||||
|
dfs.CopyDir = params.CopyDir
|
||||||
|
}
|
||||||
return dfs
|
return dfs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -180,3 +187,8 @@ func (filesystem *FileSystem) absDefault(path string) (string, error) {
|
||||||
}
|
}
|
||||||
return filepath.Abs(path)
|
return filepath.Abs(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// copyDirDefault recursively copies a directory tree, preserving permissions.
|
||||||
|
func (filesystem *FileSystem) copyDirDefault(src string, dst string) error {
|
||||||
|
return copyDir.Copy(src, dst, copyDir.Options{Sync: true})
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,31 @@ func (c *StateCreator) loadBases(envValues, overrodeEnv *environment.Environment
|
||||||
return layers[0], nil
|
return layers[0], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getEnvMissingFileHandlerConfig returns the first non-nil MissingFileHandlerConfig from the environment spec, state, or default.
|
||||||
|
func (st *HelmState) getEnvMissingFileHandlerConfig(es EnvironmentSpec) *MissingFileHandlerConfig {
|
||||||
|
switch {
|
||||||
|
case es.MissingFileHandlerConfig != nil:
|
||||||
|
return es.MissingFileHandlerConfig
|
||||||
|
case st.MissingFileHandlerConfig != nil:
|
||||||
|
return st.MissingFileHandlerConfig
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// getEnvMissingFileHandler returns the first non-nil MissingFileHandler from the environment spec, state, or default.
|
||||||
|
func (st *HelmState) getEnvMissingFileHandler(es EnvironmentSpec) *string {
|
||||||
|
defaultMissingFileHandler := "Error"
|
||||||
|
switch {
|
||||||
|
case es.MissingFileHandler != nil:
|
||||||
|
return es.MissingFileHandler
|
||||||
|
case st.MissingFileHandler != nil:
|
||||||
|
return st.MissingFileHandler
|
||||||
|
default:
|
||||||
|
return &defaultMissingFileHandler
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// nolint: unparam
|
// nolint: unparam
|
||||||
func (c *StateCreator) loadEnvValues(st *HelmState, name string, failOnMissingEnv bool, ctxEnv, overrode *environment.Environment) (*environment.Environment, error) {
|
func (c *StateCreator) loadEnvValues(st *HelmState, name string, failOnMissingEnv bool, ctxEnv, overrode *environment.Environment) (*environment.Environment, error) {
|
||||||
secretVals := map[string]any{}
|
secretVals := map[string]any{}
|
||||||
|
|
@ -250,7 +275,7 @@ func (c *StateCreator) loadEnvValues(st *HelmState, name string, failOnMissingEn
|
||||||
var envSecretFiles []string
|
var envSecretFiles []string
|
||||||
if len(envSpec.Secrets) > 0 {
|
if len(envSpec.Secrets) > 0 {
|
||||||
for _, urlOrPath := range envSpec.Secrets {
|
for _, urlOrPath := range envSpec.Secrets {
|
||||||
resolved, skipped, err := st.storage().resolveFile(envSpec.MissingFileHandler, "environment values", urlOrPath, envSpec.MissingFileHandlerConfig.resolveFileOptions()...)
|
resolved, skipped, err := st.storage().resolveFile(st.getEnvMissingFileHandler(envSpec), "environment values", urlOrPath, st.getEnvMissingFileHandlerConfig(envSpec).resolveFileOptions()...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -14,5 +14,5 @@ type EnvironmentSpec struct {
|
||||||
// a message about the missing file at the log-level.
|
// a message about the missing file at the log-level.
|
||||||
MissingFileHandler *string `yaml:"missingFileHandler,omitempty"`
|
MissingFileHandler *string `yaml:"missingFileHandler,omitempty"`
|
||||||
// MissingFileHandlerConfig is composed of various settings for the MissingFileHandler
|
// MissingFileHandlerConfig is composed of various settings for the MissingFileHandler
|
||||||
MissingFileHandlerConfig MissingFileHandlerConfig `yaml:"missingFileHandlerConfig,omitempty"`
|
MissingFileHandlerConfig *MissingFileHandlerConfig `yaml:"missingFileHandlerConfig,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -350,7 +350,7 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
|
||||||
|
|
||||||
jsonPatches := release.JSONPatches
|
jsonPatches := release.JSONPatches
|
||||||
if len(jsonPatches) > 0 {
|
if len(jsonPatches) > 0 {
|
||||||
generatedFiles, err := st.generateTemporaryReleaseValuesFiles(release, jsonPatches, release.MissingFileHandler)
|
generatedFiles, err := st.generateTemporaryReleaseValuesFiles(release, jsonPatches)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, clean, err
|
return nil, clean, err
|
||||||
}
|
}
|
||||||
|
|
@ -364,7 +364,7 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
|
||||||
|
|
||||||
strategicMergePatches := release.StrategicMergePatches
|
strategicMergePatches := release.StrategicMergePatches
|
||||||
if len(strategicMergePatches) > 0 {
|
if len(strategicMergePatches) > 0 {
|
||||||
generatedFiles, err := st.generateTemporaryReleaseValuesFiles(release, strategicMergePatches, release.MissingFileHandler)
|
generatedFiles, err := st.generateTemporaryReleaseValuesFiles(release, strategicMergePatches)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, clean, err
|
return nil, clean, err
|
||||||
}
|
}
|
||||||
|
|
@ -378,7 +378,7 @@ func (st *HelmState) PrepareChartify(helm helmexec.Interface, release *ReleaseSp
|
||||||
|
|
||||||
transformers := release.Transformers
|
transformers := release.Transformers
|
||||||
if len(transformers) > 0 {
|
if len(transformers) > 0 {
|
||||||
generatedFiles, err := st.generateTemporaryReleaseValuesFiles(release, transformers, release.MissingFileHandler)
|
generatedFiles, err := st.generateTemporaryReleaseValuesFiles(release, transformers)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, clean, err
|
return nil, clean, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -88,9 +88,9 @@ type ReleaseSetSpec struct {
|
||||||
// If set to "Error", return an error when a subhelmfile points to a
|
// If set to "Error", return an error when a subhelmfile points to a
|
||||||
// non-existent path. The default behavior is to print a warning. Note the
|
// non-existent path. The default behavior is to print a warning. Note the
|
||||||
// differing default compared to other MissingFileHandlers.
|
// differing default compared to other MissingFileHandlers.
|
||||||
MissingFileHandler string `yaml:"missingFileHandler,omitempty"`
|
MissingFileHandler *string `yaml:"missingFileHandler,omitempty"`
|
||||||
// MissingFileHandlerConfig is composed of various settings for the MissingFileHandler
|
// MissingFileHandlerConfig is composed of various settings for the MissingFileHandler
|
||||||
MissingFileHandlerConfig MissingFileHandlerConfig `yaml:"missingFileHandlerConfig,omitempty"`
|
MissingFileHandlerConfig *MissingFileHandlerConfig `yaml:"missingFileHandlerConfig,omitempty"`
|
||||||
|
|
||||||
LockFile string `yaml:"lockFilePath,omitempty"`
|
LockFile string `yaml:"lockFilePath,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
@ -313,6 +313,10 @@ type ReleaseSpec struct {
|
||||||
// MissingFileHandler is set to either "Error" or "Warn". "Error" instructs helmfile to fail when unable to find a values or secrets file. When "Warn", it prints the file and continues.
|
// MissingFileHandler is set to either "Error" or "Warn". "Error" instructs helmfile to fail when unable to find a values or secrets file. When "Warn", it prints the file and continues.
|
||||||
// The default value for MissingFileHandler is "Error".
|
// The default value for MissingFileHandler is "Error".
|
||||||
MissingFileHandler *string `yaml:"missingFileHandler,omitempty"`
|
MissingFileHandler *string `yaml:"missingFileHandler,omitempty"`
|
||||||
|
|
||||||
|
// MissingFileHandlerConfig is composed of various settings for the MissingFileHandler
|
||||||
|
MissingFileHandlerConfig *MissingFileHandlerConfig `yaml:"missingFileHandlerConfig,omitempty"`
|
||||||
|
|
||||||
// Needs is the [KUBECONTEXT/][NS/]NAME representations of releases that this release depends on.
|
// Needs is the [KUBECONTEXT/][NS/]NAME representations of releases that this release depends on.
|
||||||
Needs []string `yaml:"needs,omitempty"`
|
Needs []string `yaml:"needs,omitempty"`
|
||||||
|
|
||||||
|
|
@ -1474,6 +1478,18 @@ func (st *HelmState) PrepareCharts(helm helmexec.Interface, dir string, concurre
|
||||||
// for a remote chart, so that the user can notice/fix the issue in a local chart while
|
// for a remote chart, so that the user can notice/fix the issue in a local chart while
|
||||||
// a broken remote chart won't completely block their job.
|
// a broken remote chart won't completely block their job.
|
||||||
chartPath = normalizedChart
|
chartPath = normalizedChart
|
||||||
|
if helmfileCommand == "pull" && isLocal {
|
||||||
|
chartAbsPath := strings.TrimSuffix(filepath.Clean(normalizedChart), "/")
|
||||||
|
chartPath, err = generateChartPath(filepath.Base(chartAbsPath), dir, release, opts.OutputDirTemplate)
|
||||||
|
if err != nil {
|
||||||
|
results <- &chartPrepareResult{err: err}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := st.fs.CopyDir(normalizedChart, filepath.Clean(chartPath)); err != nil {
|
||||||
|
results <- &chartPrepareResult{err: err}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
buildDeps = !skipDeps
|
buildDeps = !skipDeps
|
||||||
} else if !opts.ForceDownload {
|
} else if !opts.ForceDownload {
|
||||||
|
|
@ -3300,7 +3316,7 @@ func (st *HelmState) ExpandedHelmfiles() ([]SubHelmfileSpec, error) {
|
||||||
}
|
}
|
||||||
if len(matches) == 0 {
|
if len(matches) == 0 {
|
||||||
err := fmt.Errorf("no matches for path: %s", hf.Path)
|
err := fmt.Errorf("no matches for path: %s", hf.Path)
|
||||||
if st.MissingFileHandler == "Error" {
|
if *st.MissingFileHandler == "Error" {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
st.logger.Warnf("no matches for path: %s", hf.Path)
|
st.logger.Warnf("no matches for path: %s", hf.Path)
|
||||||
|
|
@ -3347,19 +3363,54 @@ func (st *HelmState) removeFiles(files []string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c MissingFileHandlerConfig) resolveFileOptions() []resolveFileOption {
|
func (c *MissingFileHandlerConfig) resolveFileOptions() []resolveFileOption {
|
||||||
|
if c == nil {
|
||||||
|
return []resolveFileOption{
|
||||||
|
ignoreMissingGitBranch(false),
|
||||||
|
}
|
||||||
|
}
|
||||||
return []resolveFileOption{
|
return []resolveFileOption{
|
||||||
ignoreMissingGitBranch(c.IgnoreMissingGitBranch),
|
ignoreMissingGitBranch(c.IgnoreMissingGitBranch),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (st *HelmState) generateTemporaryReleaseValuesFiles(release *ReleaseSpec, values []any, missingFileHandler *string) ([]string, error) {
|
// getReleaseMissingFileHandlerConfig returns the first non-nil MissingFileHandlerConfig in the following order:
|
||||||
|
// - release.MissingFileHandlerConfig
|
||||||
|
// - st.MissingFileHandlerConfig
|
||||||
|
func (st *HelmState) getReleaseMissingFileHandlerConfig(release *ReleaseSpec) *MissingFileHandlerConfig {
|
||||||
|
switch {
|
||||||
|
case release.MissingFileHandlerConfig != nil:
|
||||||
|
return release.MissingFileHandlerConfig
|
||||||
|
case st.MissingFileHandlerConfig != nil:
|
||||||
|
return st.MissingFileHandlerConfig
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// getReleaseMissingFileHandler returns the first non-nil MissingFileHandler in the following order:
|
||||||
|
// - release.MissingFileHandler
|
||||||
|
// - st.MissingFileHandler
|
||||||
|
// - "Error"
|
||||||
|
func (st *HelmState) getReleaseMissingFileHandler(release *ReleaseSpec) *string {
|
||||||
|
defaultMissingFileHandler := "Error"
|
||||||
|
switch {
|
||||||
|
case release.MissingFileHandler != nil:
|
||||||
|
return release.MissingFileHandler
|
||||||
|
case st.MissingFileHandler != nil:
|
||||||
|
return st.MissingFileHandler
|
||||||
|
default:
|
||||||
|
return &defaultMissingFileHandler
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (st *HelmState) generateTemporaryReleaseValuesFiles(release *ReleaseSpec, values []any) ([]string, error) {
|
||||||
generatedFiles := []string{}
|
generatedFiles := []string{}
|
||||||
|
|
||||||
for _, value := range values {
|
for _, value := range values {
|
||||||
switch typedValue := value.(type) {
|
switch typedValue := value.(type) {
|
||||||
case string:
|
case string:
|
||||||
paths, skip, err := st.storage().resolveFile(missingFileHandler, "values", typedValue, st.MissingFileHandlerConfig.resolveFileOptions()...)
|
paths, skip, err := st.storage().resolveFile(st.getReleaseMissingFileHandler(release), "values", typedValue, st.getReleaseMissingFileHandlerConfig(release).resolveFileOptions()...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return generatedFiles, err
|
return generatedFiles, err
|
||||||
}
|
}
|
||||||
|
|
@ -3440,7 +3491,7 @@ func (st *HelmState) generateVanillaValuesFiles(release *ReleaseSpec) ([]string,
|
||||||
return nil, fmt.Errorf("Failed to render values in %s for release %s: type %T isn't supported", st.FilePath, release.Name, valuesMapSecretsRendered["values"])
|
return nil, fmt.Errorf("Failed to render values in %s for release %s: type %T isn't supported", st.FilePath, release.Name, valuesMapSecretsRendered["values"])
|
||||||
}
|
}
|
||||||
|
|
||||||
generatedFiles, err := st.generateTemporaryReleaseValuesFiles(release, valuesSecretsRendered, release.MissingFileHandler)
|
generatedFiles, err := st.generateTemporaryReleaseValuesFiles(release, valuesSecretsRendered)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -3506,7 +3557,7 @@ func (st *HelmState) generateSecretValuesFiles(helm helmexec.Interface, release
|
||||||
generatedDecryptedFiles = append(generatedDecryptedFiles, valfile)
|
generatedDecryptedFiles = append(generatedDecryptedFiles, valfile)
|
||||||
}
|
}
|
||||||
|
|
||||||
generatedFiles, err := st.generateTemporaryReleaseValuesFiles(release, generatedDecryptedFiles, release.MissingFileHandler)
|
generatedFiles, err := st.generateTemporaryReleaseValuesFiles(release, generatedDecryptedFiles)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,7 @@ ${kubectl} create namespace ${test_ns} || fail "Could not create namespace ${tes
|
||||||
|
|
||||||
# TEST CASES----------------------------------------------------------------------------------------------------------
|
# TEST CASES----------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
. ${dir}/test-cases/fetch-forl-local-chart.sh
|
||||||
. ${dir}/test-cases/suppress-output-line-regex.sh
|
. ${dir}/test-cases/suppress-output-line-regex.sh
|
||||||
. ${dir}/test-cases/chartify-jsonPatches-and-strategicMergePatches.sh
|
. ${dir}/test-cases/chartify-jsonPatches-and-strategicMergePatches.sh
|
||||||
. ${dir}/test-cases/include-template-func.sh
|
. ${dir}/test-cases/include-template-func.sh
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
fetch_forl_local_chart_input_dir="${cases_dir}/fetch-forl-local-chart/input"
|
||||||
|
|
||||||
|
fetch_forl_local_chart_tmp=$(mktemp -d)
|
||||||
|
|
||||||
|
case_title="fetch for local chart"
|
||||||
|
|
||||||
|
test_start "$case_title"
|
||||||
|
|
||||||
|
info "Comparing fetch-forl-local-chart diff log #$i"
|
||||||
|
${helmfile} -f ${fetch_forl_local_chart_input_dir}/helmfile.yaml.gotmpl fetch --output-dir ${fetch_forl_local_chart_tmp} || fail "\"helmfile fetch\" shouldn't fail"
|
||||||
|
cat ${fetch_forl_local_chart_tmp}/helmfile-tests/local-chart/raw/latest/Chart.yaml || fail "Chart.yaml should exist in the fetched local chart directory"
|
||||||
|
cat ${fetch_forl_local_chart_tmp}/helmfile-tests/local-chart/raw/latest/templates/resources.yaml || fail "templates/resources.yaml should exist in the fetched local chart directory"
|
||||||
|
echo code=$?
|
||||||
|
|
||||||
|
test_pass "$case_title"
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
releases:
|
||||||
|
- name: local-chart
|
||||||
|
chart: ../../../charts/raw
|
||||||
|
namespace: local-chart
|
||||||
Loading…
Reference in New Issue