@@ -643,15 +643,31 @@ def _set_container(self, namespace, container_name, data, **kwargs): # noqa
643643 self ._default_readiness_probe (data , kwargs .get ('build_type' ), env .get ('PORT' , None ))
644644
645645 def _get_private_registry_config (self , registry , image ):
646- # try to get the hostname information
647- hostname = registry .get ('hostname' , None )
648- if not hostname :
649- hostname , _ = docker_auth .split_repo_name (image )
650- if hostname == docker_auth .INDEX_NAME :
651- hostname = "https://index.docker.io/v1/"
646+ secret_name = settings .REGISTRY_SECRET_PREFIX
647+ if registry :
648+ # try to get the hostname information
649+ hostname = registry .get ('hostname' , None )
650+ if not hostname :
651+ hostname , _ = docker_auth .split_repo_name (image )
652+ if hostname == docker_auth .INDEX_NAME :
653+ hostname = "https://index.docker.io/v1/"
654+ username = registry .get ('username' )
655+ password = registry .get ('password' )
656+ elif settings .REGISTRY_LOCATION == 'off-cluster' :
657+ secret = self .get_secret ('deis' , 'registry-secret' ).json ()
658+ username = secret ['data' ]['username' ]
659+ password = secret ['data' ]['password' ]
660+ hostname = secret ['data' ]['hostname' ]
661+ if hostname == '' :
662+ hostname = "https://index.docker.io/v1/"
663+ secret_name = secret_name + "-" + settings .REGISTRY_LOCATION
664+ elif settings .REGISTRY_LOCATION in ['ecr' , 'gcr' ]:
665+ return None , secret_name + "-" + settings .REGISTRY_LOCATION , False
666+ else :
667+ return None , None , None
652668
653669 # create / update private registry secret
654- auth = bytes ('{}:{}' .format (registry . get ( ' username' ), registry . get ( ' password' ) ), 'UTF-8' )
670+ auth = bytes ('{}:{}' .format (username , password ), 'UTF-8' )
655671 # value has to be a base64 encoded JSON
656672 docker_config = json .dumps ({
657673 "auths" : {
@@ -660,36 +676,34 @@ def _get_private_registry_config(self, registry, image):
660676 }
661677 }
662678 })
663- return docker_config
679+ return docker_config , secret_name , True
664680
665681 def _set_image_secret (self , data , namespace , ** kwargs ):
666682 """
667683 Take registry information and set as an imagePullSecret for an RC / Deployment
668684 http://kubernetes.io/docs/user-guide/images/#specifying-imagepullsecrets-on-a-pod
669685 """
670- registry = kwargs .get ('registry' , {})
671- if not registry :
686+ docker_config , secret_name , secret_create = self . _get_private_registry_config ( kwargs .get ('registry' , {}), kwargs . get ( 'image' )) # noqa
687+ if secret_create is None :
672688 return
673- docker_config = self ._get_private_registry_config (registry , kwargs .get ('image' )) # noqa
674- secret_data = {'.dockerconfigjson' : docker_config }
675-
676- secret_name = 'private-registry'
677- try :
678- self .get_secret (namespace , secret_name )
679- except KubeHTTPException :
680- self .create_secret (
681- namespace ,
682- secret_name ,
683- secret_data ,
684- secret_type = 'kubernetes.io/dockerconfigjson'
685- )
686- else :
687- self .update_secret (
688- namespace ,
689- secret_name ,
690- secret_data ,
691- secret_type = 'kubernetes.io/dockerconfigjson'
692- )
689+ elif secret_create :
690+ secret_data = {'.dockerconfigjson' : docker_config }
691+ try :
692+ self .get_secret (namespace , secret_name )
693+ except KubeHTTPException :
694+ self .create_secret (
695+ namespace ,
696+ secret_name ,
697+ secret_data ,
698+ secret_type = 'kubernetes.io/dockerconfigjson'
699+ )
700+ else :
701+ self .update_secret (
702+ namespace ,
703+ secret_name ,
704+ secret_data ,
705+ secret_type = 'kubernetes.io/dockerconfigjson'
706+ )
693707
694708 # apply image pull secret to a Pod spec
695709 data ['imagePullSecrets' ] = [{'name' : secret_name }]
@@ -821,7 +835,10 @@ def create_namespace(self, namespace):
821835 "kind" : "Namespace" ,
822836 "apiVersion" : "v1" ,
823837 "metadata" : {
824- "name" : namespace
838+ "name" : namespace ,
839+ "labels" : {
840+ 'heritage' : 'deis'
841+ }
825842 }
826843 }
827844
0 commit comments