Merge pull request #153 from yxxhero/move_all_subcommand_to_sigle
move all subcommand to sigle file
This commit is contained in:
		
						commit
						1da88b829c
					
				|  | @ -0,0 +1,115 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func addApplySubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:  "apply", | ||||
| 		Usage: "apply all resources from state file only when there are changes", | ||||
| 		Flags: []cli.Flag{ | ||||
| 			cli.StringSliceFlag{ | ||||
| 				Name:  "set", | ||||
| 				Usage: "additional values to be merged into the command", | ||||
| 			}, | ||||
| 			cli.StringSliceFlag{ | ||||
| 				Name:  "values", | ||||
| 				Usage: "additional value files to be merged into the command", | ||||
| 			}, | ||||
| 			cli.IntFlag{ | ||||
| 				Name:  "concurrency", | ||||
| 				Value: 0, | ||||
| 				Usage: "maximum number of concurrent helm processes to run, 0 is unlimited", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "validate", | ||||
| 				Usage: "validate your manifests against the Kubernetes cluster you are currently pointing at. Note that this requiers access to a Kubernetes cluster to obtain information necessary for validating, like the list of available API versions", | ||||
| 			}, | ||||
| 			cli.IntFlag{ | ||||
| 				Name:  "context", | ||||
| 				Value: 0, | ||||
| 				Usage: "output NUM lines of context around changes", | ||||
| 			}, | ||||
| 			cli.StringFlag{ | ||||
| 				Name:  "output", | ||||
| 				Value: "", | ||||
| 				Usage: "output format for diff plugin", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "detailed-exitcode", | ||||
| 				Usage: "return a non-zero exit code 2 instead of 0 when there were changes detected AND the changes are synced successfully", | ||||
| 			}, | ||||
| 			cli.StringFlag{ | ||||
| 				Name:  "args", | ||||
| 				Value: "", | ||||
| 				Usage: "pass args to helm exec", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "retain-values-files", | ||||
| 				Usage: "DEPRECATED: Use skip-cleanup instead", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "skip-cleanup", | ||||
| 				Usage: "Stop cleaning up temporary values generated by helmfile and helm-secrets. Useful for debugging. Don't use in production for security", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "skip-crds", | ||||
| 				Usage: "if set, no CRDs will be installed on sync. By default, CRDs are installed if not already present", | ||||
| 			}, | ||||
| 			cli.BoolTFlag{ | ||||
| 				Name:  "skip-needs", | ||||
| 				Usage: `do not automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when when --selector/-l flag is not provided. Defaults to true when --include-needs or --include-transitive-needs is not provided`, | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "include-needs", | ||||
| 				Usage: `automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when when --selector/-l flag is not provided`, | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "include-transitive-needs", | ||||
| 				Usage: `like --include-needs, but also includes transitive needs (needs of needs). Does nothing when when --selector/-l flag is not provided. Overrides exclusions of other selectors and conditions.`, | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "skip-diff-on-install", | ||||
| 				Usage: "Skips running helm-diff on releases being newly installed on this apply. Useful when the release manifests are too huge to be reviewed, or it's too time-consuming to diff at all", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "include-tests", | ||||
| 				Usage: "enable the diffing of the helm test hooks", | ||||
| 			}, | ||||
| 			cli.StringSliceFlag{ | ||||
| 				Name:  "suppress", | ||||
| 				Usage: "suppress specified Kubernetes objects in the diff output. Can be provided multiple times. For example: --suppress KeycloakClient --suppress VaultSecret", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "suppress-secrets", | ||||
| 				Usage: "suppress secrets in the diff output. highly recommended to specify on CI/CD use-cases", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "show-secrets", | ||||
| 				Usage: "do not redact secret values in the diff output. should be used for debug purpose only", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "suppress-diff", | ||||
| 				Usage: "suppress diff in the output. Usable in new installs", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "skip-deps", | ||||
| 				Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "wait", | ||||
| 				Usage: `Override helmDefaults.wait setting "helm upgrade --install --wait"`, | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "wait-for-jobs", | ||||
| 				Usage: `Override helmDefaults.waitForJobs setting "helm upgrade --install --wait-for-jobs"`, | ||||
| 			}, | ||||
| 		}, | ||||
| 		Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 			return a.Apply(c) | ||||
| 		}), | ||||
| 	}) | ||||
| } | ||||
|  | @ -0,0 +1,23 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func addBuildSubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:  "build", | ||||
| 		Usage: "output compiled helmfile state(s) as YAML", | ||||
| 		Flags: []cli.Flag{ | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "embed-values", | ||||
| 				Usage: "Read all the values files for every release and embed into the output helmfile.yaml", | ||||
| 			}, | ||||
| 		}, | ||||
| 		Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 			return a.PrintState(c) | ||||
| 		}), | ||||
| 	}) | ||||
| } | ||||
|  | @ -0,0 +1,35 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| var cacheInfoSubcommand = cli.Command{ | ||||
| 	Name:  "info", | ||||
| 	Usage: "cache info", | ||||
| 	Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 		return a.ShowCacheDir(c) | ||||
| 	}), | ||||
| } | ||||
| 
 | ||||
| var cacheCleanupSubcommand = cli.Command{ | ||||
| 	Name:  "cleanup", | ||||
| 	Usage: "clean up cache directory", | ||||
| 	Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 		return a.CleanCacheDir(c) | ||||
| 	}), | ||||
| } | ||||
| 
 | ||||
| func addCacheSubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:      "cache", | ||||
| 		Usage:     "cache management", | ||||
| 		ArgsUsage: "[command]", | ||||
| 		Subcommands: []cli.Command{ | ||||
| 			cacheCleanupSubcommand, | ||||
| 			cacheInfoSubcommand, | ||||
| 		}, | ||||
| 	}) | ||||
| } | ||||
|  | @ -0,0 +1,37 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func addDeleteSubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:  "delete", | ||||
| 		Usage: "DEPRECATED: delete releases from state file (helm delete)", | ||||
| 		Flags: []cli.Flag{ | ||||
| 			cli.IntFlag{ | ||||
| 				Name:  "concurrency", | ||||
| 				Value: 0, | ||||
| 				Usage: "maximum number of concurrent helm processes to run, 0 is unlimited", | ||||
| 			}, | ||||
| 			cli.StringFlag{ | ||||
| 				Name:  "args", | ||||
| 				Value: "", | ||||
| 				Usage: "pass args to helm exec", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "purge", | ||||
| 				Usage: "purge releases i.e. free release names and histories", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "skip-deps", | ||||
| 				Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 			}, | ||||
| 		}, | ||||
| 		Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 			return a.Delete(c) | ||||
| 		}), | ||||
| 	}) | ||||
| } | ||||
|  | @ -0,0 +1,33 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func addDestroySubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:  "destroy", | ||||
| 		Usage: "deletes and then purges releases", | ||||
| 		Flags: []cli.Flag{ | ||||
| 			cli.IntFlag{ | ||||
| 				Name:  "concurrency", | ||||
| 				Value: 0, | ||||
| 				Usage: "maximum number of concurrent helm processes to run, 0 is unlimited", | ||||
| 			}, | ||||
| 			cli.StringFlag{ | ||||
| 				Name:  "args", | ||||
| 				Value: "", | ||||
| 				Usage: "pass args to helm exec", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "skip-deps", | ||||
| 				Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 			}, | ||||
| 		}, | ||||
| 		Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 			return a.Destroy(c) | ||||
| 		}), | ||||
| 	}) | ||||
| } | ||||
|  | @ -0,0 +1,32 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func addFetchSubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:  "fetch", | ||||
| 		Usage: "fetch charts from state file", | ||||
| 		Flags: []cli.Flag{ | ||||
| 			cli.IntFlag{ | ||||
| 				Name:  "concurrency", | ||||
| 				Value: 0, | ||||
| 				Usage: "maximum number of concurrent downloads of release charts", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "skip-deps", | ||||
| 				Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 			}, | ||||
| 			cli.StringFlag{ | ||||
| 				Name:  "output-dir", | ||||
| 				Usage: "directory to store charts (default: temporary directory which is deleted when the command terminates)", | ||||
| 			}, | ||||
| 		}, | ||||
| 		Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 			return a.Fetch(c) | ||||
| 		}), | ||||
| 	}) | ||||
| } | ||||
|  | @ -0,0 +1,41 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func addLintSubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:  "lint", | ||||
| 		Usage: "lint charts from state file (helm lint)", | ||||
| 		Flags: []cli.Flag{ | ||||
| 			cli.StringFlag{ | ||||
| 				Name:  "args", | ||||
| 				Value: "", | ||||
| 				Usage: "pass args to helm exec", | ||||
| 			}, | ||||
| 			cli.StringSliceFlag{ | ||||
| 				Name:  "set", | ||||
| 				Usage: "additional values to be merged into the command", | ||||
| 			}, | ||||
| 			cli.StringSliceFlag{ | ||||
| 				Name:  "values", | ||||
| 				Usage: "additional value files to be merged into the command", | ||||
| 			}, | ||||
| 			cli.IntFlag{ | ||||
| 				Name:  "concurrency", | ||||
| 				Value: 0, | ||||
| 				Usage: "maximum number of concurrent downloads of release charts", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "skip-deps", | ||||
| 				Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 			}, | ||||
| 		}, | ||||
| 		Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 			return a.Lint(c) | ||||
| 		}), | ||||
| 	}) | ||||
| } | ||||
|  | @ -0,0 +1,28 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func addListSubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:  "list", | ||||
| 		Usage: "list releases defined in state file", | ||||
| 		Flags: []cli.Flag{ | ||||
| 			cli.StringFlag{ | ||||
| 				Name:  "output", | ||||
| 				Value: "", | ||||
| 				Usage: "output releases list as a json string", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "keep-temp-dir", | ||||
| 				Usage: "Keep temporary directory", | ||||
| 			}, | ||||
| 		}, | ||||
| 		Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 			return a.ListReleases(c) | ||||
| 		}), | ||||
| 	}) | ||||
| } | ||||
							
								
								
									
										13
									
								
								cmd/root.go
								
								
								
								
							
							
						
						
									
										13
									
								
								cmd/root.go
								
								
								
								
							|  | @ -30,6 +30,19 @@ func RootCommand() *cli.App { | |||
| 	addChartsSubcommand(cliApp) | ||||
| 	addDiffSubcommand(cliApp) | ||||
| 	addTemplateSubcommand(cliApp) | ||||
| 	addWriteValuesSubcommand(cliApp) | ||||
| 	addLintSubcommand(cliApp) | ||||
| 	addFetchSubcommand(cliApp) | ||||
| 	addSyncSubcommand(cliApp) | ||||
| 	addApplySubcommand(cliApp) | ||||
| 	addStatusSubcommand(cliApp) | ||||
| 	addDeleteSubcommand(cliApp) | ||||
| 	addDestroySubcommand(cliApp) | ||||
| 	addTestSubcommand(cliApp) | ||||
| 	addBuildSubcommand(cliApp) | ||||
| 	addListSubcommand(cliApp) | ||||
| 	addCacheSubcommand(cliApp) | ||||
| 	addVersionSubcommand(cliApp) | ||||
| 
 | ||||
| 	return cliApp | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,29 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func addStatusSubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:  "status", | ||||
| 		Usage: "retrieve status of releases in state file", | ||||
| 		Flags: []cli.Flag{ | ||||
| 			cli.IntFlag{ | ||||
| 				Name:  "concurrency", | ||||
| 				Value: 0, | ||||
| 				Usage: "maximum number of concurrent helm processes to run, 0 is unlimited", | ||||
| 			}, | ||||
| 			cli.StringFlag{ | ||||
| 				Name:  "args", | ||||
| 				Value: "", | ||||
| 				Usage: "pass args to helm exec", | ||||
| 			}, | ||||
| 		}, | ||||
| 		Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 			return a.Status(c) | ||||
| 		}), | ||||
| 	}) | ||||
| } | ||||
|  | @ -0,0 +1,69 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func addSyncSubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:  "sync", | ||||
| 		Usage: "sync all resources from state file (repos, releases and chart deps)", | ||||
| 		Flags: []cli.Flag{ | ||||
| 			cli.StringSliceFlag{ | ||||
| 				Name:  "set", | ||||
| 				Usage: "additional values to be merged into the command", | ||||
| 			}, | ||||
| 			cli.StringSliceFlag{ | ||||
| 				Name:  "values", | ||||
| 				Usage: "additional value files to be merged into the command", | ||||
| 			}, | ||||
| 			cli.IntFlag{ | ||||
| 				Name:  "concurrency", | ||||
| 				Value: 0, | ||||
| 				Usage: "maximum number of concurrent helm processes to run, 0 is unlimited", | ||||
| 			}, | ||||
| 			cli.StringFlag{ | ||||
| 				Name:  "args", | ||||
| 				Value: "", | ||||
| 				Usage: "pass args to helm exec", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "skip-crds", | ||||
| 				Usage: "if set, no CRDs will be installed on sync. By default, CRDs are installed if not already present", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "skip-deps", | ||||
| 				Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 			}, | ||||
| 			cli.BoolTFlag{ | ||||
| 				Name:  "skip-needs", | ||||
| 				Usage: `do not automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when when --selector/-l flag is not provided. Defaults to true when --include-needs or --include-transitive-needs is not provided`, | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "include-needs", | ||||
| 				Usage: `automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when when --selector/-l flag is not provided`, | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "include-transitive-needs", | ||||
| 				Usage: `like --include-needs, but also includes transitive needs (needs of needs). Does nothing when when --selector/-l flag is not provided. Overrides exclusions of other selectors and conditions.`, | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "validate", | ||||
| 				Usage: `ADVANCED CONFIGURATION: When sync is going to involve helm-template as a part of the "chartify" process, it might fail due to missing .Capabilities. This flag makes instructs helmfile to pass --validate to helm-template so it populates .Capabilities and validates your manifests against the Kubernetes cluster you are currently pointing at. Note that this requiers access to a Kubernetes cluster to obtain information necessary for validating, like the list of available API versions`, | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "wait", | ||||
| 				Usage: `Override helmDefaults.wait setting "helm upgrade --install --wait"`, | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "wait-for-jobs", | ||||
| 				Usage: `Override helmDefaults.waitForJobs setting "helm upgrade --install --wait-for-jobs"`, | ||||
| 			}, | ||||
| 		}, | ||||
| 		Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 			return a.Sync(c) | ||||
| 		}), | ||||
| 	}) | ||||
| } | ||||
|  | @ -0,0 +1,46 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func addTestSubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:  "test", | ||||
| 		Usage: "test releases from state file (helm test)", | ||||
| 		Flags: []cli.Flag{ | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "cleanup", | ||||
| 				Usage: "delete test pods upon completion", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "logs", | ||||
| 				Usage: "Dump the logs from test pods (this runs after all tests are complete, but before any cleanup)", | ||||
| 			}, | ||||
| 			cli.StringFlag{ | ||||
| 				Name:  "args", | ||||
| 				Value: "", | ||||
| 				Usage: "pass additional args to helm exec", | ||||
| 			}, | ||||
| 			cli.IntFlag{ | ||||
| 				Name:  "timeout", | ||||
| 				Value: 300, | ||||
| 				Usage: "maximum time for tests to run before being considered failed", | ||||
| 			}, | ||||
| 			cli.IntFlag{ | ||||
| 				Name:  "concurrency", | ||||
| 				Value: 0, | ||||
| 				Usage: "maximum number of concurrent helm processes to run, 0 is unlimited", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "skip-deps", | ||||
| 				Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 			}, | ||||
| 		}, | ||||
| 		Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 			return a.Test(c) | ||||
| 		}), | ||||
| 	}) | ||||
| } | ||||
|  | @ -0,0 +1,17 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func addVersionSubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:      "version", | ||||
| 		Usage:     "Show the version for Helmfile.", | ||||
| 		ArgsUsage: "[command]", | ||||
| 		Action: func(c *cli.Context) error { | ||||
| 			cli.ShowVersion(c) | ||||
| 			return nil | ||||
| 		}, | ||||
| 	}) | ||||
| } | ||||
|  | @ -0,0 +1,40 @@ | |||
| package cmd | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func addWriteValuesSubcommand(cliApp *cli.App) { | ||||
| 	cliApp.Commands = append(cliApp.Commands, cli.Command{ | ||||
| 		Name:  "write-values", | ||||
| 		Usage: "write values files for releases. Similar to `helmfile template`, write values files instead of manifests.", | ||||
| 		Flags: []cli.Flag{ | ||||
| 			cli.StringSliceFlag{ | ||||
| 				Name:  "set", | ||||
| 				Usage: "additional values to be merged into the command", | ||||
| 			}, | ||||
| 			cli.StringSliceFlag{ | ||||
| 				Name:  "values", | ||||
| 				Usage: "additional value files to be merged into the command", | ||||
| 			}, | ||||
| 			cli.StringFlag{ | ||||
| 				Name:  "output-file-template", | ||||
| 				Usage: "go text template for generating the output file. Default: {{ .State.BaseName }}-{{ .State.AbsPathSHA1 }}/{{ .Release.Name}}.yaml", | ||||
| 			}, | ||||
| 			cli.IntFlag{ | ||||
| 				Name:  "concurrency", | ||||
| 				Value: 0, | ||||
| 				Usage: "maximum number of concurrent downloads of release charts", | ||||
| 			}, | ||||
| 			cli.BoolFlag{ | ||||
| 				Name:  "skip-deps", | ||||
| 				Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 			}, | ||||
| 		}, | ||||
| 		Action: Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 			return a.WriteValues(c) | ||||
| 		}), | ||||
| 	}) | ||||
| } | ||||
							
								
								
									
										420
									
								
								main.go
								
								
								
								
							
							
						
						
									
										420
									
								
								main.go
								
								
								
								
							|  | @ -5,431 +5,11 @@ import ( | |||
| 	"os" | ||||
| 
 | ||||
| 	"github.com/helmfile/helmfile/cmd" | ||||
| 	"github.com/helmfile/helmfile/pkg/app" | ||||
| 	"github.com/helmfile/helmfile/pkg/config" | ||||
| 	"github.com/urfave/cli" | ||||
| ) | ||||
| 
 | ||||
| func main() { | ||||
| 
 | ||||
| 	rootCmd := cmd.RootCommand() | ||||
| 	subCommands := []cli.Command{ | ||||
| 		{ | ||||
| 			Name:  "write-values", | ||||
| 			Usage: "write values files for releases. Similar to `helmfile template`, write values files instead of manifests.", | ||||
| 			Flags: []cli.Flag{ | ||||
| 				cli.StringSliceFlag{ | ||||
| 					Name:  "set", | ||||
| 					Usage: "additional values to be merged into the command", | ||||
| 				}, | ||||
| 				cli.StringSliceFlag{ | ||||
| 					Name:  "values", | ||||
| 					Usage: "additional value files to be merged into the command", | ||||
| 				}, | ||||
| 				cli.StringFlag{ | ||||
| 					Name:  "output-file-template", | ||||
| 					Usage: "go text template for generating the output file. Default: {{ .State.BaseName }}-{{ .State.AbsPathSHA1 }}/{{ .Release.Name}}.yaml", | ||||
| 				}, | ||||
| 				cli.IntFlag{ | ||||
| 					Name:  "concurrency", | ||||
| 					Value: 0, | ||||
| 					Usage: "maximum number of concurrent downloads of release charts", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "skip-deps", | ||||
| 					Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 				}, | ||||
| 			}, | ||||
| 			Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 				return a.WriteValues(c) | ||||
| 			}), | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:  "lint", | ||||
| 			Usage: "lint charts from state file (helm lint)", | ||||
| 			Flags: []cli.Flag{ | ||||
| 				cli.StringFlag{ | ||||
| 					Name:  "args", | ||||
| 					Value: "", | ||||
| 					Usage: "pass args to helm exec", | ||||
| 				}, | ||||
| 				cli.StringSliceFlag{ | ||||
| 					Name:  "set", | ||||
| 					Usage: "additional values to be merged into the command", | ||||
| 				}, | ||||
| 				cli.StringSliceFlag{ | ||||
| 					Name:  "values", | ||||
| 					Usage: "additional value files to be merged into the command", | ||||
| 				}, | ||||
| 				cli.IntFlag{ | ||||
| 					Name:  "concurrency", | ||||
| 					Value: 0, | ||||
| 					Usage: "maximum number of concurrent downloads of release charts", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "skip-deps", | ||||
| 					Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 				}, | ||||
| 			}, | ||||
| 			Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 				return a.Lint(c) | ||||
| 			}), | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:  "fetch", | ||||
| 			Usage: "fetch charts from state file", | ||||
| 			Flags: []cli.Flag{ | ||||
| 				cli.IntFlag{ | ||||
| 					Name:  "concurrency", | ||||
| 					Value: 0, | ||||
| 					Usage: "maximum number of concurrent downloads of release charts", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "skip-deps", | ||||
| 					Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 				}, | ||||
| 				cli.StringFlag{ | ||||
| 					Name:  "output-dir", | ||||
| 					Usage: "directory to store charts (default: temporary directory which is deleted when the command terminates)", | ||||
| 				}, | ||||
| 			}, | ||||
| 			Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 				return a.Fetch(c) | ||||
| 			}), | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:  "sync", | ||||
| 			Usage: "sync all resources from state file (repos, releases and chart deps)", | ||||
| 			Flags: []cli.Flag{ | ||||
| 				cli.StringSliceFlag{ | ||||
| 					Name:  "set", | ||||
| 					Usage: "additional values to be merged into the command", | ||||
| 				}, | ||||
| 				cli.StringSliceFlag{ | ||||
| 					Name:  "values", | ||||
| 					Usage: "additional value files to be merged into the command", | ||||
| 				}, | ||||
| 				cli.IntFlag{ | ||||
| 					Name:  "concurrency", | ||||
| 					Value: 0, | ||||
| 					Usage: "maximum number of concurrent helm processes to run, 0 is unlimited", | ||||
| 				}, | ||||
| 				cli.StringFlag{ | ||||
| 					Name:  "args", | ||||
| 					Value: "", | ||||
| 					Usage: "pass args to helm exec", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "skip-crds", | ||||
| 					Usage: "if set, no CRDs will be installed on sync. By default, CRDs are installed if not already present", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "skip-deps", | ||||
| 					Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 				}, | ||||
| 				cli.BoolTFlag{ | ||||
| 					Name:  "skip-needs", | ||||
| 					Usage: `do not automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when when --selector/-l flag is not provided. Defaults to true when --include-needs or --include-transitive-needs is not provided`, | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "include-needs", | ||||
| 					Usage: `automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when when --selector/-l flag is not provided`, | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "include-transitive-needs", | ||||
| 					Usage: `like --include-needs, but also includes transitive needs (needs of needs). Does nothing when when --selector/-l flag is not provided. Overrides exclusions of other selectors and conditions.`, | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "validate", | ||||
| 					Usage: `ADVANCED CONFIGURATION: When sync is going to involve helm-template as a part of the "chartify" process, it might fail due to missing .Capabilities. This flag makes instructs helmfile to pass --validate to helm-template so it populates .Capabilities and validates your manifests against the Kubernetes cluster you are currently pointing at. Note that this requiers access to a Kubernetes cluster to obtain information necessary for validating, like the list of available API versions`, | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "wait", | ||||
| 					Usage: `Override helmDefaults.wait setting "helm upgrade --install --wait"`, | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "wait-for-jobs", | ||||
| 					Usage: `Override helmDefaults.waitForJobs setting "helm upgrade --install --wait-for-jobs"`, | ||||
| 				}, | ||||
| 			}, | ||||
| 			Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 				return a.Sync(c) | ||||
| 			}), | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:  "apply", | ||||
| 			Usage: "apply all resources from state file only when there are changes", | ||||
| 			Flags: []cli.Flag{ | ||||
| 				cli.StringSliceFlag{ | ||||
| 					Name:  "set", | ||||
| 					Usage: "additional values to be merged into the command", | ||||
| 				}, | ||||
| 				cli.StringSliceFlag{ | ||||
| 					Name:  "values", | ||||
| 					Usage: "additional value files to be merged into the command", | ||||
| 				}, | ||||
| 				cli.IntFlag{ | ||||
| 					Name:  "concurrency", | ||||
| 					Value: 0, | ||||
| 					Usage: "maximum number of concurrent helm processes to run, 0 is unlimited", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "validate", | ||||
| 					Usage: "validate your manifests against the Kubernetes cluster you are currently pointing at. Note that this requiers access to a Kubernetes cluster to obtain information necessary for validating, like the list of available API versions", | ||||
| 				}, | ||||
| 				cli.IntFlag{ | ||||
| 					Name:  "context", | ||||
| 					Value: 0, | ||||
| 					Usage: "output NUM lines of context around changes", | ||||
| 				}, | ||||
| 				cli.StringFlag{ | ||||
| 					Name:  "output", | ||||
| 					Value: "", | ||||
| 					Usage: "output format for diff plugin", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "detailed-exitcode", | ||||
| 					Usage: "return a non-zero exit code 2 instead of 0 when there were changes detected AND the changes are synced successfully", | ||||
| 				}, | ||||
| 				cli.StringFlag{ | ||||
| 					Name:  "args", | ||||
| 					Value: "", | ||||
| 					Usage: "pass args to helm exec", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "retain-values-files", | ||||
| 					Usage: "DEPRECATED: Use skip-cleanup instead", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "skip-cleanup", | ||||
| 					Usage: "Stop cleaning up temporary values generated by helmfile and helm-secrets. Useful for debugging. Don't use in production for security", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "skip-crds", | ||||
| 					Usage: "if set, no CRDs will be installed on sync. By default, CRDs are installed if not already present", | ||||
| 				}, | ||||
| 				cli.BoolTFlag{ | ||||
| 					Name:  "skip-needs", | ||||
| 					Usage: `do not automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when when --selector/-l flag is not provided. Defaults to true when --include-needs or --include-transitive-needs is not provided`, | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "include-needs", | ||||
| 					Usage: `automatically include releases from the target release's "needs" when --selector/-l flag is provided. Does nothing when when --selector/-l flag is not provided`, | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "include-transitive-needs", | ||||
| 					Usage: `like --include-needs, but also includes transitive needs (needs of needs). Does nothing when when --selector/-l flag is not provided. Overrides exclusions of other selectors and conditions.`, | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "skip-diff-on-install", | ||||
| 					Usage: "Skips running helm-diff on releases being newly installed on this apply. Useful when the release manifests are too huge to be reviewed, or it's too time-consuming to diff at all", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "include-tests", | ||||
| 					Usage: "enable the diffing of the helm test hooks", | ||||
| 				}, | ||||
| 				cli.StringSliceFlag{ | ||||
| 					Name:  "suppress", | ||||
| 					Usage: "suppress specified Kubernetes objects in the diff output. Can be provided multiple times. For example: --suppress KeycloakClient --suppress VaultSecret", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "suppress-secrets", | ||||
| 					Usage: "suppress secrets in the diff output. highly recommended to specify on CI/CD use-cases", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "show-secrets", | ||||
| 					Usage: "do not redact secret values in the diff output. should be used for debug purpose only", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "suppress-diff", | ||||
| 					Usage: "suppress diff in the output. Usable in new installs", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "skip-deps", | ||||
| 					Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "wait", | ||||
| 					Usage: `Override helmDefaults.wait setting "helm upgrade --install --wait"`, | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "wait-for-jobs", | ||||
| 					Usage: `Override helmDefaults.waitForJobs setting "helm upgrade --install --wait-for-jobs"`, | ||||
| 				}, | ||||
| 			}, | ||||
| 			Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 				return a.Apply(c) | ||||
| 			}), | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:  "status", | ||||
| 			Usage: "retrieve status of releases in state file", | ||||
| 			Flags: []cli.Flag{ | ||||
| 				cli.IntFlag{ | ||||
| 					Name:  "concurrency", | ||||
| 					Value: 0, | ||||
| 					Usage: "maximum number of concurrent helm processes to run, 0 is unlimited", | ||||
| 				}, | ||||
| 				cli.StringFlag{ | ||||
| 					Name:  "args", | ||||
| 					Value: "", | ||||
| 					Usage: "pass args to helm exec", | ||||
| 				}, | ||||
| 			}, | ||||
| 			Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 				return a.Status(c) | ||||
| 			}), | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:  "delete", | ||||
| 			Usage: "DEPRECATED: delete releases from state file (helm delete)", | ||||
| 			Flags: []cli.Flag{ | ||||
| 				cli.IntFlag{ | ||||
| 					Name:  "concurrency", | ||||
| 					Value: 0, | ||||
| 					Usage: "maximum number of concurrent helm processes to run, 0 is unlimited", | ||||
| 				}, | ||||
| 				cli.StringFlag{ | ||||
| 					Name:  "args", | ||||
| 					Value: "", | ||||
| 					Usage: "pass args to helm exec", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "purge", | ||||
| 					Usage: "purge releases i.e. free release names and histories", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "skip-deps", | ||||
| 					Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 				}, | ||||
| 			}, | ||||
| 			Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 				return a.Delete(c) | ||||
| 			}), | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:  "destroy", | ||||
| 			Usage: "deletes and then purges releases", | ||||
| 			Flags: []cli.Flag{ | ||||
| 				cli.IntFlag{ | ||||
| 					Name:  "concurrency", | ||||
| 					Value: 0, | ||||
| 					Usage: "maximum number of concurrent helm processes to run, 0 is unlimited", | ||||
| 				}, | ||||
| 				cli.StringFlag{ | ||||
| 					Name:  "args", | ||||
| 					Value: "", | ||||
| 					Usage: "pass args to helm exec", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "skip-deps", | ||||
| 					Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 				}, | ||||
| 			}, | ||||
| 			Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 				return a.Destroy(c) | ||||
| 			}), | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:  "test", | ||||
| 			Usage: "test releases from state file (helm test)", | ||||
| 			Flags: []cli.Flag{ | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "cleanup", | ||||
| 					Usage: "delete test pods upon completion", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "logs", | ||||
| 					Usage: "Dump the logs from test pods (this runs after all tests are complete, but before any cleanup)", | ||||
| 				}, | ||||
| 				cli.StringFlag{ | ||||
| 					Name:  "args", | ||||
| 					Value: "", | ||||
| 					Usage: "pass additional args to helm exec", | ||||
| 				}, | ||||
| 				cli.IntFlag{ | ||||
| 					Name:  "timeout", | ||||
| 					Value: 300, | ||||
| 					Usage: "maximum time for tests to run before being considered failed", | ||||
| 				}, | ||||
| 				cli.IntFlag{ | ||||
| 					Name:  "concurrency", | ||||
| 					Value: 0, | ||||
| 					Usage: "maximum number of concurrent helm processes to run, 0 is unlimited", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "skip-deps", | ||||
| 					Usage: `skip running "helm repo update" and "helm dependency build"`, | ||||
| 				}, | ||||
| 			}, | ||||
| 			Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 				return a.Test(c) | ||||
| 			}), | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:  "build", | ||||
| 			Usage: "output compiled helmfile state(s) as YAML", | ||||
| 			Flags: []cli.Flag{ | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "embed-values", | ||||
| 					Usage: "Read all the values files for every release and embed into the output helmfile.yaml", | ||||
| 				}, | ||||
| 			}, | ||||
| 			Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 				return a.PrintState(c) | ||||
| 			}), | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:  "list", | ||||
| 			Usage: "list releases defined in state file", | ||||
| 			Flags: []cli.Flag{ | ||||
| 				cli.StringFlag{ | ||||
| 					Name:  "output", | ||||
| 					Value: "", | ||||
| 					Usage: "output releases list as a json string", | ||||
| 				}, | ||||
| 				cli.BoolFlag{ | ||||
| 					Name:  "keep-temp-dir", | ||||
| 					Usage: "Keep temporary directory", | ||||
| 				}, | ||||
| 			}, | ||||
| 			Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 				return a.ListReleases(c) | ||||
| 			}), | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:      "cache", | ||||
| 			Usage:     "cache management", | ||||
| 			ArgsUsage: "[command]", | ||||
| 			Subcommands: []cli.Command{ | ||||
| 				{ | ||||
| 					Name:  "info", | ||||
| 					Usage: "cache info", | ||||
| 					Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 						return a.ShowCacheDir(c) | ||||
| 					}), | ||||
| 				}, | ||||
| 				{ | ||||
| 					Name:  "cleanup", | ||||
| 					Usage: "clean up cache directory", | ||||
| 					Action: cmd.Action(func(a *app.App, c config.ConfigImpl) error { | ||||
| 						return a.CleanCacheDir(c) | ||||
| 					}), | ||||
| 				}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		{ | ||||
| 			Name:      "version", | ||||
| 			Usage:     "Show the version for Helmfile.", | ||||
| 			ArgsUsage: "[command]", | ||||
| 			Action: func(c *cli.Context) error { | ||||
| 				cli.ShowVersion(c) | ||||
| 				return nil | ||||
| 			}, | ||||
| 		}, | ||||
| 	} | ||||
| 	rootCmd.Commands = append(rootCmd.Commands, subCommands...) | ||||
| 
 | ||||
| 	err := rootCmd.Run(os.Args) | ||||
| 	if err != nil { | ||||
| 		fmt.Fprintf(os.Stderr, "%v\n", err) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue