@@ -528,6 +528,21 @@ def resolve_state(self, pod):
528528
529529 return states [pod ['status' ]['phase' ]]
530530
531+ def _get_port (self , image ):
532+ try :
533+ image = self .registry + '/' + image
534+ repo = image .split (":" )
535+ # image already includes the tag, so we split it out here
536+ docker_cli = Client (version = "auto" )
537+ docker_cli .pull (repo [0 ]+ ":" + repo [1 ], tag = repo [2 ], insecure_registry = True )
538+ image_info = docker_cli .inspect_image (image )
539+ port = int (list (image_info ['Config' ]['ExposedPorts' ].keys ())[0 ].split ("/" )[0 ])
540+ except Exception :
541+ logger .debug ("Failed to find port for Docker image {}, defaulting to 5000" .format (image )) # noqa
542+ port = 5000
543+
544+ return port
545+
531546 def _api (self , tmpl , * args ):
532547 """Return a fully-qualified Kubernetes API URL from a string template with args."""
533548 url = "/api/{}" .format (self .apiversion ) + tmpl .format (* args )
@@ -1007,23 +1022,14 @@ def _get_service(self, name, namespace):
10071022 return response
10081023
10091024 def _create_service (self , name , app_name , app_type , data = {}, ** kwargs ):
1010- docker_cli = Client (version = "auto" )
1011- image = kwargs .get ('image' )
1012- try :
1013- image = self .registry + '/' + image
1014- repo = image .split (":" )
1015- # image already includes the tag, so we split it out here
1016- docker_cli .pull (repo [0 ]+ ":" + repo [1 ], tag = repo [2 ], insecure_registry = True )
1017- image_info = docker_cli .inspect_image (image )
1018- port = int (list (image_info ['Config' ]['ExposedPorts' ].keys ())[0 ].split ("/" )[0 ])
1019- except :
1020- port = 5000
1025+ port = self ._get_port (kwargs .get ('image' ))
10211026 l = {
10221027 "version" : self .apiversion ,
10231028 "port" : port ,
10241029 "type" : app_type ,
10251030 "name" : app_name ,
10261031 }
1032+
10271033 # Merge external data on to the prefined template
10281034 template = json .loads (string .Template (SERVICE_TEMPLATE ).substitute (l ))
10291035 data = dict_merge (template , data )
0 commit comments