Andrey Smirnov e1779ac77c feat: implement registry mirror & config for image pull
When images are pulled by Talos or via CRI plugin, configuration
for each registry is applied. Mirrors allow to redirect pull request to
either local registry or cached registry. Auth & TLS enable
authentication and TLS authentication for non-public registries.

Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
2020-02-14 00:28:59 +03:00

37 lines
1.0 KiB
Go

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
package image
import (
"context"
"fmt"
"time"
"github.com/talos-systems/talos/pkg/config/machine"
"github.com/talos-systems/talos/pkg/retry"
"github.com/containerd/containerd"
)
// Pull is a convenience function that wraps the containerd image pull func with
// retry functionality.
func Pull(ctx context.Context, config machine.Registries, client *containerd.Client, ref string) (img containerd.Image, err error) {
resolver := NewResolver(config)
err = retry.Exponential(1*time.Minute, retry.WithUnits(1*time.Second)).Retry(func() error {
if img, err = client.Pull(ctx, ref, containerd.WithPullUnpack, containerd.WithResolver(resolver)); err != nil {
return retry.ExpectedError(fmt.Errorf("failed to pull image %q: %w", ref, err))
}
return nil
})
if err != nil {
return nil, err
}
return img, nil
}