Documentation ¶
Overview ¶
Example ¶
Move a chart and its dependencies to another registry and or repository
// i.e ./mariadb-7.5.relocated.tgz destinationPath := "%s-%s.relocated.tgz" // Initialize the Mover action chartMover, err := NewChartMover( &ChartMoveRequest{ Source: Source{ // The Helm Chart can be provided in either tarball or directory form Chart: ChartSpec{Local: &LocalChart{Path: "./helm_chart.tgz"}}, // path to file containing rules such as // {{.image.registry}}:{{.image.tag}} ImageHintsFile: "./image-hints.yaml", }, Target: Target{ Chart: ChartSpec{Local: &LocalChart{Path: destinationPath}}, // Where to push and how to rewrite the found images // i.e docker.io/bitnami/mariadb => myregistry.com/myteam/mariadb Rules: RewriteRules{ Registry: "myregistry.com", RepositoryPrefix: "/myteam", }, }, }, ) if err != nil { fmt.Println(err) return } // Perform the push, rewrite and repackage of the Helm Chart err = chartMover.Move() if err != nil { fmt.Println(err) return }
Output:
Example (Load) ¶
Load a chart and its dependencies from a intermediate bundle tarball into a registry repository
// i.e ./mariadb-7.5.relocated.tgz destinationPath := "%s-%s.relocated.tgz" // Initialize the Mover action chartMover, err := NewChartMover( &ChartMoveRequest{ Source: Source{ Chart: ChartSpec{ // The intermediate source tarball where the source chart and // container images are present. See Save example IntermediateBundle: &IntermediateBundle{Path: "helm_chart.intermediate-bundle.tar"}, }, // no path to hints file as it is already coming inside the intermediate bundle }, Target: Target{ Chart: ChartSpec{Local: &LocalChart{Path: destinationPath}}, // Where to push and how to rewrite the found images // i.e docker.io/bitnami/mariadb => myregistry.com/myteam/mariadb Rules: RewriteRules{ Registry: "myregistry.com", RepositoryPrefix: "/myteam", }, }, }, ) if err != nil { fmt.Println(err) return } // Perform the push, rewrite and repackage of the Helm Chart // All origin data is taken from within the source intermediate bundle err = chartMover.Move() if err != nil { fmt.Println(err) return }
Output:
Example (Save) ¶
Save a chart and all its dependencies into a intermediate bundle tarball
// Initialize the Mover action chartMover, err := NewChartMover( &ChartMoveRequest{ Source: Source{ // The Helm Chart can be provided in either tarball or directory form Chart: ChartSpec{Local: &LocalChart{Path: "./helm_chart.tgz"}}, // path to file containing rules such as // {{.image.registry}}:{{.image.tag}} ImageHintsFile: "./image-hints.yaml", }, Target: Target{ Chart: ChartSpec{ // The target intermediate bundle path to place the charts and all its dependencies IntermediateBundle: &IntermediateBundle{Path: "helm_chart.intermediate-bundle.tar"}, }, // No rewrite rules, as this only saves the chart and its dependencies as is }, }, ) if err != nil { fmt.Println(err) return } // Save the chart, hints file and all container images // into `helm_chart.intermediate-bundle.tar` // // So we get something like: // $ tar tvf helm_chart.intermediate-bundle.tar // -rw-r--r-- 0/0 201 1970-01-01 01:00 hints.yaml // -rw-r--r-- 0/0 349 1970-01-01 01:00 original-chart/... // -rw-r--r-- 0/0 773120 1970-01-01 01:00 images.tar // // For how the move completes using an intermediate bundle input see the Load example err = chartMover.Move() if err != nil { fmt.Println(err) return }
Output:
Index ¶
- Constants
- Variables
- func IsIntermediateBundle(bundlePath string) bool
- type ChartLoadingError
- type ChartMetadata
- type ChartMoveRequest
- type ChartMover
- type ChartSpec
- type ContainerRepository
- type Containers
- type IntermediateBundle
- type LocalChart
- type Logger
- type Option
- type RewriteRules
- type Source
- type Target
Examples ¶
Constants ¶
const ( // EmbeddedHintsFilename to be present in the Helm Chart rootpath EmbeddedHintsFilename = ".relok8s-images.yaml" // DefaultRetries indicates the default number of retries for pull/push operations DefaultRetries = 3 // IntermediateBundleHintsFilename to be present in the intermediate archive root path IntermediateBundleHintsFilename = "hints.yaml" )
Variables ¶
var ( // ErrImageHintsMissing indicates that neither the hints file was provided nor found in the Helm chart ErrImageHintsMissing = errors.New("no image hints provided") // ErrOCIRewritesMissing indicates that no rewrite rules have been provided ErrOCIRewritesMissing = errors.New("at least one rewrite rule is required") )
var ( // ErrNotIntermediateBundle when a verified path does not have expected intermediate bundle contents ErrNotIntermediateBundle = errors.New("not an intermediate chart bundle") )
Functions ¶
func IsIntermediateBundle ¶ added in v0.3.49
IsIntermediateBundle returns tue only if VerifyIntermediateBundle finds no errors
Types ¶
type ChartLoadingError ¶ added in v0.3.45
func (*ChartLoadingError) Error ¶ added in v0.3.45
func (e *ChartLoadingError) Error() string
func (*ChartLoadingError) Unwrap ¶ added in v0.3.45
func (e *ChartLoadingError) Unwrap() error
type ChartMetadata ¶
ChartMetadata exposes metadata about the Helm Chart to be relocated
type ChartMoveRequest ¶ added in v0.3.45
ChartMoveRequest defines a chart move
type ChartMover ¶
type ChartMover struct {
// contains filtered or unexported fields
}
ChartMover represents a Helm Chart moving relocation. It's initialization must be done view NewChartMover
func NewChartMover ¶
func NewChartMover(req *ChartMoveRequest, opts ...Option) (*ChartMover, error)
NewChartMover creates a ChartMover to relocate a chart following the given imagePatters and rules.
func (*ChartMover) Move ¶
func (cm *ChartMover) Move() error
Move performs the relocation.
A regular move executes the Chart relocation which includes - Push all the images to their new locations - Rewrite the Helm Chart and its subcharts - Repackage the Helm chart as toChartFilename
A save to an offline tarball bundle will: - Drop all images to disk, with the original chart (unpacked) and hints file - Package all in a single compressed tarball
func (*ChartMover) Print ¶
func (cm *ChartMover) Print()
Print shows the changes expected to be performed during relocation, including the new location of the Helm Chart Images as well as the expected rewrites in the Helm Chart.
func (*ChartMover) WithRetries ¶
func (cm *ChartMover) WithRetries(retries uint) *ChartMover
WithRetries sets how many times to retry push operations
type ChartSpec ¶ added in v0.3.45
type ChartSpec struct { Local *LocalChart IntermediateBundle *IntermediateBundle }
ChartSpec of possible chart inputs or outputs
type ContainerRepository ¶ added in v0.3.45
ContainerRepository defines a private repo name and credentials
func (ContainerRepository) Authorization ¶ added in v0.3.45
func (repo ContainerRepository) Authorization() (*authn.AuthConfig, error)
Authorization implements an authn.Authenticator
See https://pkg.go.dev/github.com/google/go-containerregistry/pkg/authn#Authenticator
Returns an authn.AuthConfig with a user / password pair to be used for authentication
func (ContainerRepository) Resolve ¶ added in v0.3.45
func (repo ContainerRepository) Resolve(resource authn.Resource) (authn.Authenticator, error)
Resolve implements an authn.KeyChain
See https://pkg.go.dev/github.com/google/go-containerregistry/pkg/authn#Keychain
Returns a custom credentials authn.Authenticator if the given resource RegistryStr() matches the Repository, otherwise it falls back to the default KeyChain which may include local docker credentials.
type Containers ¶ added in v0.3.45
type Containers struct {
ContainerRepository
}
Containers is the section for private repository definition
type IntermediateBundle ¶ added in v0.3.49
type IntermediateBundle LocalChart
IntermediateBundle is a self contained version of the original chart with the hints file and container images
type LocalChart ¶ added in v0.3.45
type LocalChart struct {
Path string
}
LocalChart is a reference to a local chart
type Logger ¶
type Logger interface { Printf(format string, i ...interface{}) Println(i ...interface{}) }
Logger represents an interface used to output moving information
var DefaultLogger Logger = defaultLogger{}
DefaultLogger to stdout
var NoLogger Logger = noLogger{}
DefaultNoLogger swallows all logs
type Option ¶
type Option func(*ChartMover)
Option adds optional functionality to NewChartMover constructor
func WithRetries ¶
WithRetries defines how many times to retry the push operation
type RewriteRules ¶
type RewriteRules struct { // Registry overrides the registry part of the image FQDN, i.e myregistry.io Registry string // RepositoryPrefix will override the image path by being prepended before the image name RepositoryPrefix string // Push the image even if there is already an image with a different digest ForcePush bool }
RewriteRules indicate What kind of target registry overrides we want to apply to the found images
func (*RewriteRules) Validate ¶ added in v0.3.45
func (r *RewriteRules) Validate() error
type Source ¶ added in v0.3.45
type Source struct { Chart ChartSpec ImageHintsFile string Containers Containers }
Source of the chart move
type Target ¶ added in v0.3.45
type Target struct { Chart ChartSpec Rules RewriteRules Containers Containers }
Target of the chart move