Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build/kubefile/parser/parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ import (
"strings"
"unicode"

"github.com/docker/docker/pkg/system"
"github.com/containers/storage/pkg/system"
"github.com/pkg/errors"

"github.com/sealerio/sealer/build/kubefile/command"
Expand Down
47 changes: 28 additions & 19 deletions cmd/sealer/cmd/image/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,19 @@ import (
"github.com/sealerio/sealer/pkg/imageengine"
)

var loadOpts *options.LoadOptions
var (
loadOpts *options.LoadOptions

var longNewLoadCmdDescription = `Load a sealer image from a tar archive`
longNewLoadCmdDescription = `
Load a sealer image from a tar archive
Save an image to docker-archive or oci-archive on the local machine. Default is docker-archive.`

var exampleForLoadCmd = `
exampleForLoadCmd = `
sealer load -i kubernetes.tar
`

Specifies the temporary load directory:
sealer load -i my.tar --tmp-dir /root/my-tmp`
)

// NewLoadCmd loadCmd represents the load command
func NewLoadCmd() *cobra.Command {
Expand All @@ -40,28 +46,31 @@ func NewLoadCmd() *cobra.Command {
Long: longNewLoadCmdDescription,
Example: exampleForLoadCmd,
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
engine, err := imageengine.NewImageEngine(options.EngineGlobalConfigurations{})
if err != nil {
return err
}

err = engine.Load(loadOpts)
if err == nil {
logrus.Infof("successfully load %s to image storage", loadOpts.Input)
}

return err
},
RunE: runLoadCmd,
}
loadOpts = &options.LoadOptions{}
flags := loadCmd.Flags()
flags.StringVarP(&loadOpts.Input, "input", "i", "", "Load image from file")
flags.StringVarP(&loadOpts.Input, "input", "i", "", "Read from specified archive file")
flags.BoolVarP(&loadOpts.Quiet, "quiet", "q", false, "Suppress the output")
flags.StringVar(&loadOpts.TmpDir, "tmp-dir", "", "set temporary directory when load image. if not set, use system`s temporary directory")
flags.StringVar(&loadOpts.TmpDir, "tmp-dir", "", "Set temporary directory when load image. use system temporary directory(/tmp/) if not present.")

if err := loadCmd.MarkFlagRequired("input"); err != nil {
logrus.Errorf("failed to init flag: %v", err)
os.Exit(1)
}
return loadCmd
}

func runLoadCmd(cmd *cobra.Command, args []string) error {
engine, err := imageengine.NewImageEngine(options.EngineGlobalConfigurations{})
if err != nil {
return err
}

err = engine.Load(loadOpts)
if err == nil {
logrus.Infof("successfully load %s to image storage", loadOpts.Input)
}

return err
}
1 change: 0 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,6 @@ replace (
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.21.0
k8s.io/apimachinery => k8s.io/apimachinery v0.24.2-rc.0
k8s.io/apiserver => k8s.io/apiserver v0.24.2
k8s.io/cli-runtime => k8s.io/cli-runtime v0.24.2
k8s.io/client-go => k8s.io/client-go v0.24.2
k8s.io/cloud-provider => k8s.io/cloud-provider v0.21.0
k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.24.2
Expand Down
451 changes: 451 additions & 0 deletions go.sum

Large diffs are not rendered by default.

16 changes: 8 additions & 8 deletions pkg/cluster-runtime/hook.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,24 +50,24 @@ const (
PreUnInstallCluster Phase = "pre-uninstall"
//PostUnInstallCluster on master0
PostUnInstallCluster Phase = "post-uninstall"
//PreScaleUpCluster on master0
//PreScaleUpCluster on master0: will run before scaleup cluster
PreScaleUpCluster Phase = "pre-scaleup"
//PostScaleUpCluster on master0
//PostScaleUpCluster on master0: will run after scaleup cluster
PostScaleUpCluster Phase = "post-scaleup"
//UpgradeCluster on master0
//UpgradeHost on master0: will run for upgrading cluster
UpgradeCluster Phase = "upgrade"
//RollbackCluster on master0
RollbackCluster Phase = "rollback"

//PreInitHost on role
//PreInitHost on role: will run before init cluster host
PreInitHost Phase = "pre-init-host"
//PostInitHost on role
//PostInitHost on role: will run after init cluster host
PostInitHost Phase = "post-init-host"
//PreCleanHost on role
//PreCleanHost on role: will run before clean cluster host
PreCleanHost Phase = "pre-clean-host"
//PostCleanHost on role
//PostCleanHost on role: will run after clean cluster host
PostCleanHost Phase = "post-clean-host"
//UpgradeHost on role
//UpgradeHost on role: will run before upgrade cluster
UpgradeHost Phase = "upgrade-host"
)

Expand Down
6 changes: 3 additions & 3 deletions pkg/define/options/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,9 @@ type SaveOptions struct {
}

type LoadOptions struct {
Input string
TmpDir string
Quiet bool
Input string //read from specified archive file
TmpDir string //temporary load directory
Quiet bool //suppress the output
}

type InspectOptions struct {
Expand Down
35 changes: 34 additions & 1 deletion pkg/image/distributionutil/login.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ package distributionutil

import (
"context"
"crypto/tls"
"fmt"
"io"
"net"
"net/http"
"net/url"
"os"
Expand All @@ -30,22 +32,30 @@ import (
"github.com/docker/docker/api/types"
"github.com/docker/docker/dockerversion"
dockerRegistry "github.com/docker/docker/registry"
"github.com/docker/go-connections/tlsconfig"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
)

func Login(ctx context.Context, authConfig *types.AuthConfig) error {
if authConfig.Username == "" && authConfig.Password == "" {
return errors.New("must provide username and password")
}

domain := authConfig.ServerAddress
if !strings.HasPrefix(domain, "http://") && !strings.HasPrefix(domain, "https://") {
domain = "https://" + domain
}

logrus.Debugf("login domain: %s", domain)

endpointURL, err := url.Parse(domain)
if err != nil {
return err
}

modifiers := dockerRegistry.Headers(dockerversion.DockerUserAgent(ctx), nil)
base := dockerRegistry.NewTransport(nil)
base := newTransport(nil)
base.TLSClientConfig.InsecureSkipVerify = os.Getenv("SKIP_TLS_VERIFY") == "true"
if err := dockerRegistry.ReadCertsDirectory(base.TLSClientConfig, filepath.Join(dockerRegistry.CertsDir(), endpointURL.Host)); err != nil {
return err
Expand All @@ -56,6 +66,7 @@ func Login(ctx context.Context, authConfig *types.AuthConfig) error {
creds := loginCredentialStore{
authConfig: &credentialAuthConfig,
}

loginClient, err := authHTTPClient(endpointURL, authTransport, modifiers, creds, nil)
if err != nil {
return err
Expand Down Expand Up @@ -90,6 +101,28 @@ func Login(ctx context.Context, authConfig *types.AuthConfig) error {
return err
}

// newTransport returns a new HTTP transport. If tlsConfig is nil, it uses the
// default TLS configuration.
func newTransport(tlsConfig *tls.Config) *http.Transport {
if tlsConfig == nil {
tlsConfig = tlsconfig.ServerDefault()
}

direct := &net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}

return &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: direct.DialContext,
TLSHandshakeTimeout: 10 * time.Second,
TLSClientConfig: tlsConfig,
// TODO(dmcgowan): Call close idle connections when complete and use keep alive
DisableKeepAlives: true,
}
}

func authHTTPClient(endpoint *url.URL, authTransport http.RoundTripper, modifiers []transport.RequestModifier, creds auth.CredentialStore, scopes []auth.Scope) (*http.Client, error) {
challengeManager, _, err := dockerRegistry.PingV2Registry(endpoint, authTransport)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion pkg/imageengine/buildah/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ func (engine *Engine) wrapper2Options(opts *options.BuildOptions, wrapper *build
return define.BuildOptions{}, nil, err
}

var excludes []string
excludes := []string{}
if wrapper.IgnoreFile != "" {
if excludes, _, err = parse.ContainerIgnoreFile(contextDir, wrapper.IgnoreFile); err != nil {
return define.BuildOptions{}, []string{}, err
Expand Down
17 changes: 12 additions & 5 deletions pkg/imageengine/buildah/load.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import (
"github.com/go-errors/errors"
"github.com/sirupsen/logrus"

"github.com/containers/common/pkg/auth"
"github.com/sealerio/sealer/common"
"github.com/sealerio/sealer/pkg/define/options"
"github.com/sealerio/sealer/utils/archive"
Expand All @@ -40,6 +41,13 @@ func (engine *Engine) Load(opts *options.LoadOptions) error {
return err
}

systemCxt := engine.SystemContext()
if err := auth.CheckAuthFile(systemCxt.AuthFilePath); err != nil {
return err
}

systemCxt.BigFilesTemporaryDir = opts.TmpDir

loadOpts := &libimage.LoadOptions{}
if !opts.Quiet {
loadOpts.Writer = os.Stderr
Expand Down Expand Up @@ -74,8 +82,9 @@ func (engine *Engine) Load(opts *options.LoadOptions) error {
}

metaFile := filepath.Join(tempDir, common.DefaultMetadataName)

// assume it is single image to load
if _, err := os.Stat(metaFile); err != nil {
//assume it is single image to load
return engine.loadOneImage(imageSrc, loadOpts)
}

Expand All @@ -87,11 +96,9 @@ func (engine *Engine) Load(opts *options.LoadOptions) error {

manifestName := string(metaBytes)
// delete it if manifestName is already used
_, err = engine.ImageRuntime().LookupManifestList(manifestName)
if err == nil {
if _, err := engine.ImageRuntime().LookupManifestList(manifestName); err == nil {
logrus.Warnf("%s is already in use, will delete it", manifestName)
delErr := engine.DeleteManifests([]string{manifestName}, &options.ManifestDeleteOpts{})
if delErr != nil {
if delErr := engine.DeleteManifests([]string{manifestName}, &options.ManifestDeleteOpts{}); delErr != nil {
return fmt.Errorf("%s is already in use: %v", manifestName, delErr)
}
}
Expand Down
3 changes: 1 addition & 2 deletions vendor/modules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1257,7 +1257,7 @@ k8s.io/apimachinery/pkg/version
k8s.io/apimachinery/pkg/watch
k8s.io/apimachinery/third_party/forked/golang/netutil
k8s.io/apimachinery/third_party/forked/golang/reflect
# k8s.io/cli-runtime v0.24.2 => k8s.io/cli-runtime v0.24.2
# k8s.io/cli-runtime v0.24.2
## explicit; go 1.16
k8s.io/cli-runtime/pkg/genericclioptions
k8s.io/cli-runtime/pkg/printers
Expand Down Expand Up @@ -1555,7 +1555,6 @@ sigs.k8s.io/yaml
# k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.21.0
# k8s.io/apimachinery => k8s.io/apimachinery v0.24.2-rc.0
# k8s.io/apiserver => k8s.io/apiserver v0.24.2
# k8s.io/cli-runtime => k8s.io/cli-runtime v0.24.2
# k8s.io/client-go => k8s.io/client-go v0.24.2
# k8s.io/cloud-provider => k8s.io/cloud-provider v0.21.0
# k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.24.2
Expand Down