| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package login
- import (
- "context"
- "fmt"
- "strings"
- "github.com/pkg/errors"
- "github.com/spf13/cobra"
- "github.com/docker/api/cli/dockerclassic"
- "github.com/docker/api/client"
- "github.com/docker/api/errdefs"
- )
- // Command returns the login command
- func Command() *cobra.Command {
- cmd := &cobra.Command{
- Use: "login [OPTIONS] [SERVER] | login azure",
- Short: "Log in to a Docker registry",
- Long: "Log in to a Docker registry or cloud backend.\nIf no registry server is specified, the default is defined by the daemon.",
- Args: cobra.MaximumNArgs(1),
- RunE: runLogin,
- }
- // define flags for backward compatibility with docker-classic
- flags := cmd.Flags()
- flags.StringP("username", "u", "", "Username")
- flags.StringP("password", "p", "", "Password")
- flags.BoolP("password-stdin", "", false, "Take the password from stdin")
- return cmd
- }
- func runLogin(cmd *cobra.Command, args []string) error {
- if len(args) == 1 && !strings.Contains(args[0], ".") {
- backend := args[0]
- switch backend {
- case "azure":
- return cloudLogin(cmd, "aci")
- default:
- return errors.New("unknown backend type for cloud login: " + backend)
- }
- }
- return dockerclassic.ExecCmd(cmd)
- }
- func cloudLogin(cmd *cobra.Command, backendType string) error {
- ctx := cmd.Context()
- cs, err := client.GetCloudService(ctx, backendType)
- if err != nil {
- return errors.Wrap(errdefs.ErrLoginFailed, "cannot connect to backend")
- }
- err = cs.Login(ctx, nil)
- if errors.Is(err, context.Canceled) {
- return errors.New("login canceled")
- }
- if err != nil {
- return err
- }
- fmt.Println("login succeeded")
- return nil
- }
|