2022-11-30 01:25:47 +00:00
|
|
|
package release
|
|
|
|
|
2022-12-04 21:38:16 +00:00
|
|
|
import "github.com/portainer/portainer/pkg/libhelm/time"
|
2022-11-30 01:25:47 +00:00
|
|
|
|
|
|
|
// Release is the struct that holds the information for a helm release.
|
|
|
|
// The struct definitions have been copied from the offical Helm Golang client/library.
|
|
|
|
|
|
|
|
// ReleaseElement is a struct that represents a release
|
|
|
|
// This is the official struct from the helm project (golang codebase) - exported
|
|
|
|
type ReleaseElement struct {
|
|
|
|
Name string `json:"name"`
|
|
|
|
Namespace string `json:"namespace"`
|
|
|
|
Revision string `json:"revision"`
|
|
|
|
Updated string `json:"updated"`
|
|
|
|
Status string `json:"status"`
|
|
|
|
Chart string `json:"chart"`
|
|
|
|
AppVersion string `json:"app_version"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Release describes a deployment of a chart, together with the chart
|
|
|
|
// and the variables used to deploy that chart.
|
|
|
|
type Release struct {
|
|
|
|
// Name is the name of the release
|
|
|
|
Name string `json:"name,omitempty"`
|
|
|
|
// Info provides information about a release
|
|
|
|
// Info *Info `json:"info,omitempty"`
|
|
|
|
// Chart is the chart that was released.
|
|
|
|
Chart Chart `json:"chart,omitempty"`
|
|
|
|
// Config is the set of extra Values added to the chart.
|
|
|
|
// These values override the default values inside of the chart.
|
|
|
|
Config map[string]interface{} `json:"config,omitempty"`
|
|
|
|
// Manifest is the string representation of the rendered template.
|
|
|
|
Manifest string `json:"manifest,omitempty"`
|
|
|
|
// Hooks are all of the hooks declared for this release.
|
|
|
|
Hooks []*Hook `json:"hooks,omitempty"`
|
|
|
|
// Version is an int which represents the revision of the release.
|
|
|
|
Version int `json:"version,omitempty"`
|
|
|
|
// Namespace is the kubernetes namespace of the release.
|
|
|
|
Namespace string `json:"namespace,omitempty"`
|
|
|
|
// Labels of the release.
|
|
|
|
// Disabled encoding into Json cause labels are stored in storage driver metadata field.
|
|
|
|
Labels map[string]string `json:"-"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Chart is a helm package that contains metadata, a default config, zero or more
|
|
|
|
// optionally parameterizable templates, and zero or more charts (dependencies).
|
|
|
|
type Chart struct {
|
|
|
|
// Raw contains the raw contents of the files originally contained in the chart archive.
|
|
|
|
//
|
|
|
|
// This should not be used except in special cases like `helm show values`,
|
|
|
|
// where we want to display the raw values, comments and all.
|
|
|
|
Raw []*File `json:"-"`
|
|
|
|
// Metadata is the contents of the Chartfile.
|
|
|
|
Metadata *Metadata `json:"metadata"`
|
|
|
|
// Lock is the contents of Chart.lock.
|
|
|
|
Lock *Lock `json:"lock"`
|
|
|
|
// Templates for this chart.
|
|
|
|
Templates []*File `json:"templates"`
|
|
|
|
// Values are default config for this chart.
|
|
|
|
Values map[string]interface{} `json:"values"`
|
|
|
|
// Schema is an optional JSON schema for imposing structure on Values
|
|
|
|
Schema []byte `json:"schema"`
|
|
|
|
// Files are miscellaneous files in a chart archive,
|
|
|
|
// e.g. README, LICENSE, etc.
|
|
|
|
Files []*File `json:"files"`
|
|
|
|
|
|
|
|
parent *Chart
|
|
|
|
dependencies []*Chart
|
|
|
|
}
|
|
|
|
|
|
|
|
// File represents a file as a name/value pair.
|
|
|
|
//
|
|
|
|
// By convention, name is a relative path within the scope of the chart's
|
|
|
|
// base directory.
|
|
|
|
type File struct {
|
|
|
|
// Name is the path-like name of the template.
|
|
|
|
Name string `json:"name"`
|
|
|
|
// Data is the template as byte data.
|
|
|
|
Data []byte `json:"data"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Metadata for a Chart file. This models the structure of a Chart.yaml file.
|
|
|
|
type Metadata struct {
|
|
|
|
// The name of the chart. Required.
|
|
|
|
Name string `json:"name,omitempty"`
|
|
|
|
// The URL to a relevant project page, git repo, or contact person
|
|
|
|
Home string `json:"home,omitempty"`
|
|
|
|
// Source is the URL to the source code of this chart
|
|
|
|
Sources []string `json:"sources,omitempty"`
|
|
|
|
// A SemVer 2 conformant version string of the chart. Required.
|
|
|
|
Version string `json:"version,omitempty"`
|
|
|
|
// A one-sentence description of the chart
|
|
|
|
Description string `json:"description,omitempty"`
|
|
|
|
// A list of string keywords
|
|
|
|
Keywords []string `json:"keywords,omitempty"`
|
|
|
|
// A list of name and URL/email address combinations for the maintainer(s)
|
|
|
|
Maintainers []*Maintainer `json:"maintainers,omitempty"`
|
|
|
|
// The URL to an icon file.
|
|
|
|
Icon string `json:"icon,omitempty"`
|
|
|
|
// The API Version of this chart. Required.
|
|
|
|
APIVersion string `json:"apiVersion,omitempty"`
|
|
|
|
// The condition to check to enable chart
|
|
|
|
Condition string `json:"condition,omitempty"`
|
|
|
|
// The tags to check to enable chart
|
|
|
|
Tags string `json:"tags,omitempty"`
|
|
|
|
// The version of the application enclosed inside of this chart.
|
|
|
|
AppVersion string `json:"appVersion,omitempty"`
|
|
|
|
// Whether or not this chart is deprecated
|
|
|
|
Deprecated bool `json:"deprecated,omitempty"`
|
|
|
|
// Annotations are additional mappings uninterpreted by Helm,
|
|
|
|
// made available for inspection by other applications.
|
|
|
|
Annotations map[string]string `json:"annotations,omitempty"`
|
|
|
|
// KubeVersion is a SemVer constraint specifying the version of Kubernetes required.
|
|
|
|
KubeVersion string `json:"kubeVersion,omitempty"`
|
|
|
|
// Dependencies are a list of dependencies for a chart.
|
|
|
|
Dependencies []*Dependency `json:"dependencies,omitempty"`
|
|
|
|
// Specifies the chart type: application or library
|
|
|
|
Type string `json:"type,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Maintainer describes a Chart maintainer.
|
|
|
|
type Maintainer struct {
|
|
|
|
// Name is a user name or organization name
|
|
|
|
Name string `json:"name,omitempty"`
|
|
|
|
// Email is an optional email address to contact the named maintainer
|
|
|
|
Email string `json:"email,omitempty"`
|
|
|
|
// URL is an optional URL to an address for the named maintainer
|
|
|
|
URL string `json:"url,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Dependency describes a chart upon which another chart depends.
|
|
|
|
//
|
|
|
|
// Dependencies can be used to express developer intent, or to capture the state
|
|
|
|
// of a chart.
|
|
|
|
type Dependency struct {
|
|
|
|
// Name is the name of the dependency.
|
|
|
|
//
|
|
|
|
// This must mach the name in the dependency's Chart.yaml.
|
|
|
|
Name string `json:"name"`
|
|
|
|
// Version is the version (range) of this chart.
|
|
|
|
//
|
|
|
|
// A lock file will always produce a single version, while a dependency
|
|
|
|
// may contain a semantic version range.
|
|
|
|
Version string `json:"version,omitempty"`
|
|
|
|
// The URL to the repository.
|
|
|
|
//
|
|
|
|
// Appending `index.yaml` to this string should result in a URL that can be
|
|
|
|
// used to fetch the repository index.
|
|
|
|
Repository string `json:"repository"`
|
|
|
|
// A yaml path that resolves to a boolean, used for enabling/disabling charts (e.g. subchart1.enabled )
|
|
|
|
Condition string `json:"condition,omitempty"`
|
|
|
|
// Tags can be used to group charts for enabling/disabling together
|
|
|
|
Tags []string `json:"tags,omitempty"`
|
|
|
|
// Enabled bool determines if chart should be loaded
|
|
|
|
Enabled bool `json:"enabled,omitempty"`
|
|
|
|
// ImportValues holds the mapping of source values to parent key to be imported. Each item can be a
|
|
|
|
// string or pair of child/parent sublist items.
|
|
|
|
ImportValues []interface{} `json:"import-values,omitempty"`
|
|
|
|
// Alias usable alias to be used for the chart
|
|
|
|
Alias string `json:"alias,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Lock is a lock file for dependencies.
|
|
|
|
//
|
|
|
|
// It represents the state that the dependencies should be in.
|
|
|
|
type Lock struct {
|
|
|
|
// Generated is the date the lock file was last generated.
|
|
|
|
Generated time.Time `json:"generated"`
|
|
|
|
// Digest is a hash of the dependencies in Chart.yaml.
|
|
|
|
Digest string `json:"digest"`
|
|
|
|
// Dependencies is the list of dependencies that this lock file has locked.
|
|
|
|
Dependencies []*Dependency `json:"dependencies"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Info describes release information.
|
|
|
|
type Info struct {
|
|
|
|
// FirstDeployed is when the release was first deployed.
|
|
|
|
FirstDeployed time.Time `json:"first_deployed,omitempty"`
|
|
|
|
// LastDeployed is when the release was last deployed.
|
|
|
|
LastDeployed time.Time `json:"last_deployed,omitempty"`
|
|
|
|
// Deleted tracks when this object was deleted.
|
|
|
|
Deleted time.Time `json:"deleted"`
|
|
|
|
// Description is human-friendly "log entry" about this release.
|
|
|
|
Description string `json:"description,omitempty"`
|
|
|
|
// Status is the current state of the release
|
|
|
|
Status Status `json:"status,omitempty"`
|
|
|
|
// Contains the rendered templates/NOTES.txt if available
|
|
|
|
Notes string `json:"notes,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Status is the status of a release
|
|
|
|
type Status string
|
|
|
|
|
|
|
|
// Hook defines a hook object.
|
|
|
|
type Hook struct {
|
|
|
|
Name string `json:"name,omitempty"`
|
|
|
|
// Kind is the Kubernetes kind.
|
|
|
|
Kind string `json:"kind,omitempty"`
|
|
|
|
// Path is the chart-relative path to the template.
|
|
|
|
Path string `json:"path,omitempty"`
|
|
|
|
// Manifest is the manifest contents.
|
|
|
|
Manifest string `json:"manifest,omitempty"`
|
|
|
|
// Events are the events that this hook fires on.
|
|
|
|
Events []HookEvent `json:"events,omitempty"`
|
|
|
|
// LastRun indicates the date/time this was last run.
|
|
|
|
LastRun HookExecution `json:"last_run,omitempty"`
|
|
|
|
// Weight indicates the sort order for execution among similar Hook type
|
|
|
|
Weight int `json:"weight,omitempty"`
|
|
|
|
// DeletePolicies are the policies that indicate when to delete the hook
|
|
|
|
DeletePolicies []HookDeletePolicy `json:"delete_policies,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// HookEvent specifies the hook event
|
|
|
|
type HookEvent string
|
|
|
|
|
|
|
|
// A HookExecution records the result for the last execution of a hook for a given release.
|
|
|
|
type HookExecution struct {
|
|
|
|
// StartedAt indicates the date/time this hook was started
|
|
|
|
StartedAt time.Time `json:"started_at,omitempty"`
|
|
|
|
// CompletedAt indicates the date/time this hook was completed.
|
|
|
|
CompletedAt time.Time `json:"completed_at,omitempty"`
|
|
|
|
// Phase indicates whether the hook completed successfully
|
|
|
|
Phase HookPhase `json:"phase"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// A HookPhase indicates the state of a hook execution
|
|
|
|
type HookPhase string
|
|
|
|
|
|
|
|
// HookDeletePolicy specifies the hook delete policy
|
|
|
|
type HookDeletePolicy string
|