Documentation ¶
Index ¶
- type ChartSpec
- type Client
- type GenericHelmOptions
- type HelmClient
- func (c *HelmClient) AddOrUpdateChartRepo(entry repo.Entry) error
- func (c *HelmClient) GetChart(chartName string, chartPathOptions *action.ChartPathOptions) (*chart.Chart, string, error)
- func (c *HelmClient) GetProviders() getter.Providers
- func (c *HelmClient) GetRelease(name string) (*release.Release, error)
- func (c *HelmClient) GetReleaseValues(name string, allValues bool) (map[string]interface{}, error)
- func (c *HelmClient) GetSettings() *cli.EnvSettings
- func (c *HelmClient) InstallChart(ctx context.Context, spec *ChartSpec, opts *GenericHelmOptions) (*release.Release, error)
- func (c *HelmClient) InstallOrUpgradeChart(ctx context.Context, spec *ChartSpec, opts *GenericHelmOptions) (*release.Release, error)
- func (c *HelmClient) LintChart(spec *ChartSpec) error
- func (c *HelmClient) ListDeployedReleases() ([]*release.Release, error)
- func (c *HelmClient) ListReleaseHistory(name string, max int) ([]*release.Release, error)
- func (c *HelmClient) ListReleasesByStateMask(states action.ListStates) ([]*release.Release, error)
- func (c *HelmClient) Login(entry *repo.Entry) error
- func (c *HelmClient) RollbackRelease(spec *ChartSpec) error
- func (c *HelmClient) RunChartTests(releaseName string) (bool, error)
- func (c *HelmClient) SetDebugLog(debugLog action.DebugLog)
- func (c *HelmClient) TemplateChart(spec *ChartSpec, options *HelmTemplateOptions) ([]byte, error)
- func (c *HelmClient) UninstallRelease(spec *ChartSpec) error
- func (c *HelmClient) UninstallReleaseByName(name string) error
- func (c *HelmClient) UpdateChartRepos() error
- func (c *HelmClient) UpgradeChart(ctx context.Context, spec *ChartSpec, opts *GenericHelmOptions) (*release.Release, error)
- type HelmTemplateOptions
- type KubeConfClientOptions
- type Options
- type RESTClientGetter
- type RESTClientOption
- type RestConfClientOptions
- type RollBack
Examples ¶
- HelmClient.AddOrUpdateChartRepo (Private)
- HelmClient.AddOrUpdateChartRepo (Public)
- HelmClient.GetRelease
- HelmClient.GetReleaseValues
- HelmClient.InstallOrUpgradeChart
- HelmClient.InstallOrUpgradeChart (UseChartDirectory)
- HelmClient.InstallOrUpgradeChart (UseCustomRollBackStrategy)
- HelmClient.InstallOrUpgradeChart (UseDefaultRollBackStrategy)
- HelmClient.InstallOrUpgradeChart (UseLocalChartArchive)
- HelmClient.InstallOrUpgradeChart (UseURL)
- HelmClient.LintChart
- HelmClient.ListDeployedReleases
- HelmClient.RollbackRelease
- HelmClient.TemplateChart
- HelmClient.UninstallRelease
- HelmClient.UninstallReleaseByName
- HelmClient.UpdateChartRepos
- New
- NewClientFromKubeConf
- NewClientFromRestConf
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ChartSpec ¶
type ChartSpec struct { ReleaseName string `json:"release"` ChartName string `json:"chart"` // Namespace where the chart release is deployed. // Note that helmclient.Options.Namespace should ideally match the namespace configured here. Namespace string `json:"namespace"` // ValuesYaml is the values.yaml content. // use string instead of map[string]interface{} // https://github.com/kubernetes-sigs/kubebuilder/issues/528#issuecomment-466449483 // and https://github.com/kubernetes-sigs/controller-tools/pull/317 // +optional ValuesYaml string `json:"valuesYaml,omitempty"` // Specify values similar to the cli // +optional ValuesOptions values.Options `json:"valuesOptions,omitempty"` // Version of the chart release. // +optional Version string `json:"version,omitempty"` // CreateNamespace indicates whether to create the namespace if it does not exist. // +optional CreateNamespace bool `json:"createNamespace,omitempty"` // DisableHooks indicates whether to disable hooks. // +optional DisableHooks bool `json:"disableHooks,omitempty"` // Replace indicates whether to replace the chart release if it already exists. // +optional Replace bool `json:"replace,omitempty"` // Wait indicates whether to wait for the release to be deployed or not. // +optional Wait bool `json:"wait,omitempty"` // WaitForJobs indicates whether to wait for completion of release Jobs before marking the release as successful. // 'Wait' has to be specified for this to take effect. // The timeout may be specified via the 'Timeout' field. WaitForJobs bool `json:"waitForJobs,omitempty"` // DependencyUpdate indicates whether to update the chart release if the dependencies have changed. // +optional DependencyUpdate bool `json:"dependencyUpdate,omitempty"` // Timeout configures the time to wait for any individual Kubernetes operation (like Jobs for hooks). // +optional Timeout time.Duration `json:"timeout,omitempty"` // GenerateName indicates that the release name should be generated. // +optional GenerateName bool `json:"generateName,omitempty"` // NameTemplate is the template used to generate the release name if GenerateName is configured. // +optional NameTemplate string `json:"nameTemplate,omitempty"` // Atomic indicates whether to install resources atomically. // 'Wait' will automatically be set to true when using Atomic. // +optional Atomic bool `json:"atomic,omitempty"` // SkipCRDs indicates whether to skip CRDs during installation. // +optional SkipCRDs bool `json:"skipCRDs,omitempty"` // Upgrade indicates whether to perform a CRD upgrade during installation. // +optional UpgradeCRDs bool `json:"upgradeCRDs,omitempty"` // SubNotes indicates whether to print sub-notes. // +optional SubNotes bool `json:"subNotes,omitempty"` // Force indicates whether to force the operation. // +optional Force bool `json:"force,omitempty"` // ResetValues indicates whether to reset the values.yaml file during installation. // +optional ResetValues bool `json:"resetValues,omitempty"` // ReuseValues indicates whether to reuse the values.yaml file during installation. // +optional ReuseValues bool `json:"reuseValues,omitempty"` // Recreate indicates whether to recreate the release if it already exists. // +optional Recreate bool `json:"recreate,omitempty"` // MaxHistory limits the maximum number of revisions saved per release. // +optional MaxHistory int `json:"maxHistory,omitempty"` // CleanupOnFail indicates whether to cleanup the release on failure. // +optional CleanupOnFail bool `json:"cleanupOnFail,omitempty"` // DryRun indicates whether to perform a dry run. // +optional DryRun bool `json:"dryRun,omitempty"` // DryRunOption controls whether the operation is prepared, but not executed with options on whether or not to interact with the remote cluster. DryRunOption string `json:"dryRunOption,omitempty"` // Description specifies a custom description for the uninstalled release // +optional Description string `json:"description,omitempty"` // KeepHistory indicates whether to retain or purge the release history during uninstall // +optional KeepHistory bool `json:"keepHistory,omitempty"` // Labels specifies a set of labels to be applied to the release // +optional Labels map[string]string `json:"labels,omitempty"` }
ChartSpec defines the values of a helm chart +kubebuilder:object:generate:=true
func (*ChartSpec) DeepCopy ¶
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ChartSpec.
func (*ChartSpec) DeepCopyInto ¶
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type Client ¶
type Client interface { AddOrUpdateChartRepo(entry repo.Entry) error Login(entry *repo.Entry) error UpdateChartRepos() error InstallOrUpgradeChart(ctx context.Context, spec *ChartSpec, opts *GenericHelmOptions) (*release.Release, error) InstallChart(ctx context.Context, spec *ChartSpec, opts *GenericHelmOptions) (*release.Release, error) UpgradeChart(ctx context.Context, spec *ChartSpec, opts *GenericHelmOptions) (*release.Release, error) ListDeployedReleases() ([]*release.Release, error) ListReleasesByStateMask(action.ListStates) ([]*release.Release, error) GetRelease(name string) (*release.Release, error) // RollBack is an interface to abstract a rollback action. RollBack GetReleaseValues(name string, allValues bool) (map[string]interface{}, error) GetSettings() *cli.EnvSettings GetProviders() getter.Providers UninstallRelease(spec *ChartSpec) error UninstallReleaseByName(name string) error TemplateChart(spec *ChartSpec, options *HelmTemplateOptions) ([]byte, error) LintChart(spec *ChartSpec) error SetDebugLog(debugLog action.DebugLog) ListReleaseHistory(name string, max int) ([]*release.Release, error) GetChart(chartName string, chartPathOptions *action.ChartPathOptions) (*chart.Chart, string, error) RunChartTests(releaseName string) (bool, error) }
Client holds the method signatures for a Helm client. NOTE: This is an interface to allow for mocking in tests.
func New ¶
New returns a new Helm client with the provided options
Example ¶
var outputBuffer bytes.Buffer opt := &Options{ Namespace: "default", // Change this to the namespace you wish the client to operate in. RepositoryCache: "/tmp/.helmcache", RepositoryConfig: "/tmp/.helmrepo", Debug: true, Linting: true, DebugLog: func(format string, v ...interface{}) {}, Output: &outputBuffer, // Not mandatory, leave open for default os.Stdout } helmClient, err := New(opt) if err != nil { panic(err) } _ = helmClient
Output:
func NewClientFromKubeConf ¶
func NewClientFromKubeConf(options *KubeConfClientOptions, restClientOpts ...RESTClientOption) (Client, error)
NewClientFromKubeConf returns a new Helm client constructed with the provided kubeconfig & RESTClient (optional) options.
Example ¶
opt := &KubeConfClientOptions{ Options: &Options{ Namespace: "default", // Change this to the namespace you wish to install the chart in. RepositoryCache: "/tmp/.helmcache", RepositoryConfig: "/tmp/.helmrepo", Debug: true, Linting: true, // Change this to false if you don't want linting. DebugLog: func(format string, v ...interface{}) { // Change this to your own logger. Default is 'log.Printf(format, v...)'. }, }, KubeContext: "", KubeConfig: []byte{}, } helmClient, err := NewClientFromKubeConf(opt, Burst(100), Timeout(10e9)) if err != nil { panic(err) } _ = helmClient
Output:
func NewClientFromRestConf ¶
func NewClientFromRestConf(options *RestConfClientOptions) (Client, error)
NewClientFromRestConf returns a new Helm client constructed with the provided REST config options.
Example ¶
opt := &RestConfClientOptions{ Options: &Options{ Namespace: "default", // Change this to the namespace you wish the client to operate in. RepositoryCache: "/tmp/.helmcache", RepositoryConfig: "/tmp/.helmrepo", Debug: true, Linting: true, // Change this to false if you don't want linting. DebugLog: func(format string, v ...interface{}) { // Change this to your own logger. Default is 'log.Printf(format, v...)'. }, }, RestConfig: &rest.Config{}, } helmClient, err := NewClientFromRestConf(opt) if err != nil { panic(err) } _ = helmClient
Output:
type GenericHelmOptions ¶
type GenericHelmOptions struct { PostRenderer postrender.PostRenderer RollBack RollBack }
type HelmClient ¶
type HelmClient struct { // Settings defines the environment settings of a client. Settings *cli.EnvSettings Providers getter.Providers // ActionConfig is the helm action configuration. ActionConfig *action.Configuration DebugLog action.DebugLog // contains filtered or unexported fields }
HelmClient Client defines the values of a helm client.
func (*HelmClient) AddOrUpdateChartRepo ¶
func (c *HelmClient) AddOrUpdateChartRepo(entry repo.Entry) error
AddOrUpdateChartRepo adds or updates the provided helm chart repository.
Example (Private) ¶
// Define a private chart repository chartRepo := repo.Entry{ Name: "stable", URL: "https://private-chartrepo.somedomain.com", Username: "foo", Password: "bar", // Since helm 3.6.1 it is necessary to pass 'PassCredentialsAll = true'. PassCredentialsAll: true, } // Add a chart-repository to the client. if err := helmClient.AddOrUpdateChartRepo(chartRepo); err != nil { panic(err) }
Output:
Example (Public) ¶
// Define a public chart repository. chartRepo := repo.Entry{ Name: "stable", URL: "https://charts.helm.sh/stable", } // Add a chart-repository to the client. if err := helmClient.AddOrUpdateChartRepo(chartRepo); err != nil { panic(err) }
Output:
func (*HelmClient) GetChart ¶
func (c *HelmClient) GetChart(chartName string, chartPathOptions *action.ChartPathOptions) (*chart.Chart, string, error)
GetChart returns a chart matching the provided chart name and options.
func (*HelmClient) GetProviders ¶
func (c *HelmClient) GetProviders() getter.Providers
func (*HelmClient) GetRelease ¶
func (c *HelmClient) GetRelease(name string) (*release.Release, error)
GetRelease returns a release specified by name.
Example ¶
// Get specific details of a deployed release. if _, err := helmClient.GetRelease("etcd-operator"); err != nil { panic(err) }
Output:
func (*HelmClient) GetReleaseValues ¶
func (c *HelmClient) GetReleaseValues(name string, allValues bool) (map[string]interface{}, error)
GetReleaseValues returns the (optionally, all computed) values for the specified release.
Example ¶
// Get the values of a deployed release. if _, err := helmClient.GetReleaseValues("etcd-operator", true); err != nil { panic(err) }
Output:
func (*HelmClient) GetSettings ¶
func (c *HelmClient) GetSettings() *cli.EnvSettings
func (*HelmClient) InstallChart ¶
func (c *HelmClient) InstallChart(ctx context.Context, spec *ChartSpec, opts *GenericHelmOptions) (*release.Release, error)
InstallChart installs the provided chart and returns the corresponding release. Namespace and other context is provided via the helmclient.Options struct when instantiating a client.
func (*HelmClient) InstallOrUpgradeChart ¶
func (c *HelmClient) InstallOrUpgradeChart(ctx context.Context, spec *ChartSpec, opts *GenericHelmOptions) (*release.Release, error)
InstallOrUpgradeChart installs or upgrades the provided chart and returns the corresponding release. Namespace and other context is provided via the helmclient.Options struct when instantiating a client.
Example ¶
// Define the chart to be installed chartSpec := ChartSpec{ ReleaseName: "etcd-operator", ChartName: "stable/etcd-operator", Namespace: "default", UpgradeCRDs: true, Wait: true, } // Install a chart release. // Note that helmclient.Options.Namespace should ideally match the namespace in chartSpec.Namespace. if _, err := helmClient.InstallOrUpgradeChart(context.Background(), &chartSpec, nil); err != nil { panic(err) }
Output:
Example (UseChartDirectory) ¶
// Use an unpacked chart directory. chartSpec := ChartSpec{ ReleaseName: "etcd-operator", ChartName: "/path/to/stable/etcd-operator", Namespace: "default", UpgradeCRDs: true, Wait: true, } if _, err := helmClient.InstallOrUpgradeChart(context.Background(), &chartSpec, nil); err != nil { panic(err) }
Output:
Example (UseCustomRollBackStrategy) ¶
// Define the chart to be installed chartSpec := ChartSpec{ ReleaseName: "etcd-operator", ChartName: "stable/etcd-operator", Namespace: "default", UpgradeCRDs: true, Wait: true, } // Use a custom rollback strategy (customRollBack needs to implement RollBack). rollBacker := customRollBack{} opts := GenericHelmOptions{ RollBack: rollBacker, } // Install a chart release. // Note that helmclient.Options.Namespace should ideally match the namespace in chartSpec.Namespace. if _, err := helmClient.InstallOrUpgradeChart(context.Background(), &chartSpec, &opts); err != nil { panic(err) }
Output:
Example (UseDefaultRollBackStrategy) ¶
// Define the chart to be installed chartSpec := ChartSpec{ ReleaseName: "etcd-operator", ChartName: "stable/etcd-operator", Namespace: "default", UpgradeCRDs: true, Wait: true, } // Use the default rollback strategy offer by HelmClient (revert to the previous version). opts := GenericHelmOptions{ RollBack: helmClient, } // Install a chart release. // Note that helmclient.Options.Namespace should ideally match the namespace in chartSpec.Namespace. if _, err := helmClient.InstallOrUpgradeChart(context.Background(), &chartSpec, &opts); err != nil { panic(err) }
Output:
Example (UseLocalChartArchive) ¶
// Use an archived chart directory. chartSpec := ChartSpec{ ReleaseName: "etcd-operator", ChartName: "/path/to/stable/etcd-operator.tar.gz", Namespace: "default", UpgradeCRDs: true, Wait: true, } if _, err := helmClient.InstallOrUpgradeChart(context.Background(), &chartSpec, nil); err != nil { panic(err) }
Output:
Example (UseURL) ¶
// Use an archived chart directory via URL. chartSpec := ChartSpec{ ReleaseName: "etcd-operator", ChartName: "http://helm.whatever.com/repo/etcd-operator.tar.gz", Namespace: "default", UpgradeCRDs: true, Wait: true, } if _, err := helmClient.InstallOrUpgradeChart(context.Background(), &chartSpec, nil); err != nil { panic(err) }
Output:
func (*HelmClient) LintChart ¶
func (c *HelmClient) LintChart(spec *ChartSpec) error
LintChart fetches a chart using the provided ChartSpec 'spec' and lints it's values.
Example ¶
// Define a chart with custom values to be tested. chartSpec := ChartSpec{ ReleaseName: "etcd-operator", ChartName: "stable/etcd-operator", Namespace: "default", UpgradeCRDs: true, Wait: true, ValuesYaml: `deployments: etcdOperator: true backupOperator: false`, } if err := helmClient.LintChart(&chartSpec); err != nil { panic(err) }
Output:
func (*HelmClient) ListDeployedReleases ¶
func (c *HelmClient) ListDeployedReleases() ([]*release.Release, error)
ListDeployedReleases lists all deployed releases. Namespace and other context is provided via the helmclient.Options struct when instantiating a client.
Example ¶
// List all deployed releases. if _, err := helmClient.ListDeployedReleases(); err != nil { panic(err) }
Output:
func (*HelmClient) ListReleaseHistory ¶
ListReleaseHistory lists the last 'max' number of entries in the history of the release identified by 'name'.
func (*HelmClient) ListReleasesByStateMask ¶
func (c *HelmClient) ListReleasesByStateMask(states action.ListStates) ([]*release.Release, error)
ListReleasesByStateMask lists all releases filtered by stateMask. Namespace and other context is provided via the helmclient.Options struct when instantiating a client.
func (*HelmClient) Login ¶
func (c *HelmClient) Login(entry *repo.Entry) error
Login authenticate in private repositories
func (*HelmClient) RollbackRelease ¶
func (c *HelmClient) RollbackRelease(spec *ChartSpec) error
RollbackRelease implicitly rolls back a release to the last revision.
Example ¶
// Define the released chart to be installed chartSpec := ChartSpec{ ReleaseName: "etcd-operator", ChartName: "stable/etcd-operator", Namespace: "default", UpgradeCRDs: true, Wait: true, } // Rollback to the previous version of the release. if err := helmClient.RollbackRelease(&chartSpec); err != nil { return }
Output:
func (*HelmClient) RunChartTests ¶
func (c *HelmClient) RunChartTests(releaseName string) (bool, error)
RunTests runs the tests that were deployed with the release provided. It returns true if all the tests ran successfully and false in all other cases. NOTE: error = nil implies that all tests ran to either success or failure.
func (*HelmClient) SetDebugLog ¶
func (c *HelmClient) SetDebugLog(debugLog action.DebugLog)
SetDebugLog set's a Helm client's DebugLog to the desired 'debugLog'.
func (*HelmClient) TemplateChart ¶
func (c *HelmClient) TemplateChart(spec *ChartSpec, options *HelmTemplateOptions) ([]byte, error)
TemplateChart returns a rendered version of the provided ChartSpec 'spec' by performing a "dry-run" install.
Example ¶
chartSpec := ChartSpec{ ReleaseName: "etcd-operator", ChartName: "stable/etcd-operator", Namespace: "default", UpgradeCRDs: true, Wait: true, ValuesYaml: `deployments: etcdOperator: true backupOperator: false`, } options := &HelmTemplateOptions{ KubeVersion: &chartutil.KubeVersion{ Version: "v1.23.10", Major: "1", Minor: "23", }, APIVersions: []string{ "helm.sh/v1/Test", }, } _, err := helmClient.TemplateChart(&chartSpec, options) if err != nil { panic(err) }
Output:
func (*HelmClient) UninstallRelease ¶
func (c *HelmClient) UninstallRelease(spec *ChartSpec) error
UninstallRelease uninstalls the provided release
Example ¶
// Define the released chart to be installed. chartSpec := ChartSpec{ ReleaseName: "etcd-operator", ChartName: "stable/etcd-operator", Namespace: "default", Wait: true, DryRun: true, KeepHistory: true, } // Uninstall the chart release. // Note that helmclient.Options.Namespace should ideally match the namespace in chartSpec.Namespace. if err := helmClient.UninstallRelease(&chartSpec); err != nil { panic(err) }
Output:
func (*HelmClient) UninstallReleaseByName ¶
func (c *HelmClient) UninstallReleaseByName(name string) error
UninstallReleaseByName uninstalls a release identified by the provided 'name'.
Example ¶
// Uninstall a release by name. if err := helmClient.UninstallReleaseByName("etcd-operator"); err != nil { panic(err) }
Output:
func (*HelmClient) UpdateChartRepos ¶
func (c *HelmClient) UpdateChartRepos() error
UpdateChartRepos updates the list of chart repositories stored in the client's cache.
Example ¶
// Update the list of chart repositories. if err := helmClient.UpdateChartRepos(); err != nil { panic(err) }
Output:
func (*HelmClient) UpgradeChart ¶
func (c *HelmClient) UpgradeChart(ctx context.Context, spec *ChartSpec, opts *GenericHelmOptions) (*release.Release, error)
UpgradeChart upgrades the provided chart and returns the corresponding release. Namespace and other context is provided via the helmclient.Options struct when instantiating a client.
type HelmTemplateOptions ¶
type HelmTemplateOptions struct { KubeVersion *chartutil.KubeVersion // APIVersions defined here will be appended to the default list helm provides APIVersions chartutil.VersionSet }
type KubeConfClientOptions ¶
KubeConfClientOptions defines the options used for constructing a client via kubeconfig.
type Options ¶
type Options struct { Namespace string RepositoryConfig string RepositoryCache string Debug bool Linting bool DebugLog action.DebugLog RegistryConfig string Output io.Writer }
Options defines the options of a client. If Output is not set, os.Stdout will be used.
type RESTClientGetter ¶
type RESTClientGetter struct {
// contains filtered or unexported fields
}
RESTClientGetter defines the values of a helm REST client.
func NewRESTClientGetter ¶
func NewRESTClientGetter(namespace string, kubeConfig []byte, restConfig *rest.Config, opts ...RESTClientOption) *RESTClientGetter
NewRESTClientGetter returns a RESTClientGetter using the provided 'namespace', 'kubeConfig' and 'restConfig'.
source: https://github.com/helm/helm/issues/6910#issuecomment-601277026
func (*RESTClientGetter) ToDiscoveryClient ¶
func (c *RESTClientGetter) ToDiscoveryClient() (discovery.CachedDiscoveryInterface, error)
ToDiscoveryClient returns a CachedDiscoveryInterface that can be used as a discovery client.
func (*RESTClientGetter) ToRESTConfig ¶
func (c *RESTClientGetter) ToRESTConfig() (*rest.Config, error)
ToRESTConfig returns a REST config build from a given kubeconfig
func (*RESTClientGetter) ToRESTMapper ¶
func (c *RESTClientGetter) ToRESTMapper() (meta.RESTMapper, error)
func (*RESTClientGetter) ToRawKubeConfigLoader ¶
func (c *RESTClientGetter) ToRawKubeConfigLoader() clientcmd.ClientConfig
type RESTClientOption ¶
RESTClientOption is a function that can be used to set the RESTClientOptions of a HelmClient.
func Burst ¶
func Burst(v int) RESTClientOption
Maximum burst for throttle the created RESTClient will use DefaultBurst: 100.
func Timeout ¶
func Timeout(d time.Duration) RESTClientOption
Timeout specifies the timeout for a RESTClient as a RESTClientOption. The default (if unspecified) is 32 seconds. See [1] for reference. [^1]: https://github.com/kubernetes/client-go/blob/c6bd30b9ec5f668df191bc268c6f550c37726edb/discovery/discovery_client.go#L52
type RestConfClientOptions ¶
RestConfClientOptions defines the options used for constructing a client via REST config.