@@ -7,6 +7,10 @@ import (
77 "strconv"
88 "strings"
99
10+ "github.com/covexo/devspace/pkg/devspace/clients/kubectl"
11+
12+ "github.com/covexo/devspace/pkg/devspace/builder/docker"
13+
1014 "github.com/covexo/devspace/pkg/devspace/config/configutil"
1115 "github.com/covexo/devspace/pkg/devspace/generator"
1216 "github.com/covexo/devspace/pkg/util/log"
@@ -421,10 +425,31 @@ func (cmd *InitCmd) configureKubernetes() {
421425}
422426
423427func (cmd * InitCmd ) configureRegistry () {
428+ dockerUsername := ""
429+ createInternalRegistryDefaultAnswer := "yes"
430+
431+ var imageBuilder * docker.Builder
432+ var dockerBuilderErr error
433+
434+ imageBuilder , dockerBuilderErr = docker .NewBuilder ("" , "" , "" , false )
435+
436+ if dockerBuilderErr == nil {
437+ log .StartWait ("Checking Docker credentials" )
438+ dockerAuthConfig , dockerAuthErr := imageBuilder .Authenticate ("" , "" , true )
439+ log .StopWait ()
440+
441+ if dockerAuthErr == nil {
442+ dockerUsername = dockerAuthConfig .Username
443+
444+ if dockerUsername != "" {
445+ createInternalRegistryDefaultAnswer = "no"
446+ }
447+ }
448+ }
424449 internalRegistryConfig := cmd .config .Services .InternalRegistry
425450 createInternalRegistry := stdinutil .GetFromStdin (& stdinutil.GetFromStdinParams {
426451 Question : "Should we create a private registry within your Kubernetes cluster for you? (yes | no)" ,
427- DefaultValue : "yes" ,
452+ DefaultValue : createInternalRegistryDefaultAnswer ,
428453 ValidationRegexPattern : "^(yes)|(no)$" ,
429454 })
430455
@@ -437,22 +462,77 @@ func (cmd *InitCmd) configureRegistry() {
437462
438463 cmd .defaultRegistry .URL = registryURL
439464 internalRegistryConfig = nil
465+ loginWarningServer := ""
466+
467+ if dockerUsername == "" {
468+ if * registryURL != "hub.docker.com" {
469+ loginWarningServer = " " + * registryURL
470+ imageBuilder , dockerBuilderErr = docker .NewBuilder (* registryURL , "" , "" , false )
471+ }
472+
473+ if dockerBuilderErr == nil {
474+ log .StartWait ("Checking Docker credentials" )
475+ dockerAuthConfig , dockerAuthErr := imageBuilder .Authenticate ("" , "" , true )
476+ log .StopWait ()
477+
478+ if dockerAuthErr == nil {
479+ dockerUsername = dockerAuthConfig .Username
480+ }
481+ }
482+ }
483+
484+ if dockerUsername == "" {
485+ if cmd .defaultImage .Build .Engine .Docker != nil {
486+ log .Fatal ("Make sure you login to the registry with: docker login" + loginWarningServer )
487+ } else {
488+ registryMapOverwrite := * cmd .overwriteConfig .Registries
489+ defaultRegistryOverwrite , defaultRegistryOverwriteDefined := registryMapOverwrite ["default" ]
490+
491+ if ! defaultRegistryOverwriteDefined {
492+ defaultRegistryOverwrite = & v1.RegistryConfig {}
493+ registryMapOverwrite ["default" ] = defaultRegistryOverwrite
494+ }
495+
496+ if defaultRegistryOverwrite .Auth == nil {
497+ defaultRegistryOverwrite .Auth = & v1.RegistryAuth {}
498+ }
499+
500+ if defaultRegistryOverwrite .Auth .Username == nil {
501+ defaultRegistryOverwrite .Auth .Username = configutil .String ("" )
502+ }
503+
504+ defaultRegistryOverwrite .Auth .Username = stdinutil .GetFromStdin (& stdinutil.GetFromStdinParams {
505+ Question : "Which username do you want to use to push images to " + * registryURL + "?" ,
506+ DefaultValue : * defaultRegistryOverwrite .Auth .Username ,
507+ ValidationRegexPattern : "^[a-zA-Z0-9]{4,30}$" ,
508+ })
509+ dockerUsername = * defaultRegistryOverwrite .Auth .Username
510+
511+ if defaultRegistryOverwrite .Auth .Password == nil {
512+ defaultRegistryOverwrite .Auth .Password = configutil .String ("" )
513+ }
514+
515+ defaultRegistryOverwrite .Auth .Username = stdinutil .GetFromStdin (& stdinutil.GetFromStdinParams {
516+ Question : "Which password do you want to use to push images to " + * registryURL + "?" ,
517+ DefaultValue : * defaultRegistryOverwrite .Auth .Password ,
518+ ValidationRegexPattern : "^.*$" ,
519+ })
520+ }
521+ }
440522
441523 if * registryURL == "hub.docker.com" {
442524 defaultImageName := * cmd .defaultImage .Name
443525 defaultImageNameParts := strings .Split (defaultImageName , "/" )
444- existingDockerUsername := ""
445526
446- if len (defaultImageNameParts ) > 1 {
447- existingDockerUsername = defaultImageNameParts [ 0 ]
527+ if len (defaultImageNameParts ) < 2 {
528+ defaultImageName = dockerUsername + "/" + strings . TrimPrefix ( defaultImageName , dockerUsername )
448529 }
449530
450- dockerUsername : = stdinutil .GetFromStdin (& stdinutil.GetFromStdinParams {
451- Question : "What is your Docker username ?" ,
452- DefaultValue : existingDockerUsername ,
531+ cmd . defaultImage . Name = stdinutil .GetFromStdin (& stdinutil.GetFromStdinParams {
532+ Question : "Which image name do you want to use on Docker Hub ?" ,
533+ DefaultValue : defaultImageName ,
453534 ValidationRegexPattern : "^[a-zA-Z0-9]{4,30}$" ,
454535 })
455- cmd .defaultImage .Name = configutil .String (* dockerUsername + "/" + strings .TrimPrefix (defaultImageName , * dockerUsername ))
456536 }
457537 } else {
458538 imageMap := * cmd .config .Images
@@ -537,6 +617,8 @@ func (cmd *InitCmd) configureRegistry() {
537617 },
538618 },
539619 }
620+ } else if kubectl .IsMinikube () == false {
621+ log .Warn ("Your Kubernetes cluster will not be able to pull images from a registry without a registry domain!\n " )
540622 }
541623 }
542624 secrets , registryHasSecrets := registryReleaseValues ["secrets" ]
0 commit comments