@@ -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"
@@ -397,10 +401,31 @@ func (cmd *InitCmd) configureKubernetes() {
397401}
398402
399403func (cmd * InitCmd ) configureRegistry () {
404+ dockerUsername := ""
405+ createInternalRegistryDefaultAnswer := "yes"
406+
407+ var imageBuilder * docker.Builder
408+ var dockerBuilderErr error
409+
410+ imageBuilder , dockerBuilderErr = docker .NewBuilder ("" , "" , "" , false )
411+
412+ if dockerBuilderErr == nil {
413+ log .StartWait ("Checking Docker credentials" )
414+ dockerAuthConfig , dockerAuthErr := imageBuilder .Authenticate ("" , "" , true )
415+ log .StopWait ()
416+
417+ if dockerAuthErr == nil {
418+ dockerUsername = dockerAuthConfig .Username
419+
420+ if dockerUsername != "" {
421+ createInternalRegistryDefaultAnswer = "no"
422+ }
423+ }
424+ }
400425 internalRegistryConfig := cmd .config .Services .InternalRegistry
401426 createInternalRegistry := stdinutil .GetFromStdin (& stdinutil.GetFromStdinParams {
402427 Question : "Should we create a private registry within your Kubernetes cluster for you? (yes | no)" ,
403- DefaultValue : "yes" ,
428+ DefaultValue : createInternalRegistryDefaultAnswer ,
404429 ValidationRegexPattern : "^(yes)|(no)$" ,
405430 })
406431
@@ -413,22 +438,77 @@ func (cmd *InitCmd) configureRegistry() {
413438
414439 cmd .defaultRegistry .URL = registryURL
415440 internalRegistryConfig = nil
441+ loginWarningServer := ""
442+
443+ if dockerUsername == "" {
444+ if * registryURL != "hub.docker.com" {
445+ loginWarningServer = " " + * registryURL
446+ imageBuilder , dockerBuilderErr = docker .NewBuilder (* registryURL , "" , "" , false )
447+ }
448+
449+ if dockerBuilderErr == nil {
450+ log .StartWait ("Checking Docker credentials" )
451+ dockerAuthConfig , dockerAuthErr := imageBuilder .Authenticate ("" , "" , true )
452+ log .StopWait ()
453+
454+ if dockerAuthErr == nil {
455+ dockerUsername = dockerAuthConfig .Username
456+ }
457+ }
458+ }
459+
460+ if dockerUsername == "" {
461+ if cmd .defaultImage .Build .Engine .Docker != nil {
462+ log .Fatal ("Make sure you login to the registry with: docker login" + loginWarningServer )
463+ } else {
464+ registryMapOverwrite := * cmd .overwriteConfig .Registries
465+ defaultRegistryOverwrite , defaultRegistryOverwriteDefined := registryMapOverwrite ["default" ]
466+
467+ if ! defaultRegistryOverwriteDefined {
468+ defaultRegistryOverwrite = & v1.RegistryConfig {}
469+ registryMapOverwrite ["default" ] = defaultRegistryOverwrite
470+ }
471+
472+ if defaultRegistryOverwrite .Auth == nil {
473+ defaultRegistryOverwrite .Auth = & v1.RegistryAuth {}
474+ }
475+
476+ if defaultRegistryOverwrite .Auth .Username == nil {
477+ defaultRegistryOverwrite .Auth .Username = configutil .String ("" )
478+ }
479+
480+ defaultRegistryOverwrite .Auth .Username = stdinutil .GetFromStdin (& stdinutil.GetFromStdinParams {
481+ Question : "Which username do you want to use to push images to " + * registryURL + "?" ,
482+ DefaultValue : * defaultRegistryOverwrite .Auth .Username ,
483+ ValidationRegexPattern : "^[a-zA-Z0-9]{4,30}$" ,
484+ })
485+ dockerUsername = * defaultRegistryOverwrite .Auth .Username
486+
487+ if defaultRegistryOverwrite .Auth .Password == nil {
488+ defaultRegistryOverwrite .Auth .Password = configutil .String ("" )
489+ }
490+
491+ defaultRegistryOverwrite .Auth .Username = stdinutil .GetFromStdin (& stdinutil.GetFromStdinParams {
492+ Question : "Which password do you want to use to push images to " + * registryURL + "?" ,
493+ DefaultValue : * defaultRegistryOverwrite .Auth .Password ,
494+ ValidationRegexPattern : "^.*$" ,
495+ })
496+ }
497+ }
416498
417499 if * registryURL == "hub.docker.com" {
418500 defaultImageName := * cmd .defaultImage .Name
419501 defaultImageNameParts := strings .Split (defaultImageName , "/" )
420- existingDockerUsername := ""
421502
422- if len (defaultImageNameParts ) > 1 {
423- existingDockerUsername = defaultImageNameParts [ 0 ]
503+ if len (defaultImageNameParts ) < 2 {
504+ defaultImageName = dockerUsername + "/" + strings . TrimPrefix ( defaultImageName , dockerUsername )
424505 }
425506
426- dockerUsername : = stdinutil .GetFromStdin (& stdinutil.GetFromStdinParams {
427- Question : "What is your Docker username ?" ,
428- DefaultValue : existingDockerUsername ,
507+ cmd . defaultImage . Name = stdinutil .GetFromStdin (& stdinutil.GetFromStdinParams {
508+ Question : "Which image name do you want to use on Docker Hub ?" ,
509+ DefaultValue : defaultImageName ,
429510 ValidationRegexPattern : "^[a-zA-Z0-9]{4,30}$" ,
430511 })
431- cmd .defaultImage .Name = configutil .String (* dockerUsername + "/" + strings .TrimPrefix (defaultImageName , * dockerUsername ))
432512 }
433513 } else {
434514 imageMap := * cmd .config .Images
@@ -513,6 +593,8 @@ func (cmd *InitCmd) configureRegistry() {
513593 },
514594 },
515595 }
596+ } else if kubectl .IsMinikube () == false {
597+ log .Warn ("Your Kubernetes cluster will not be able to pull images from a registry without a registry domain!\n " )
516598 }
517599 }
518600 secrets , registryHasSecrets := registryReleaseValues ["secrets" ]
0 commit comments