@@ -378,6 +378,34 @@ def __init__(self):
378378 self ._settings = Settings ()
379379 self ._logger = logging .getLogger (__name__ )
380380
381+ def check_connection (self , controller , ssl_verify ):
382+ url = urlparse .urljoin (controller , '/v1/' )
383+ error_message = """
384+ {} does not appear to be a valid Deis controller.
385+ Make sure that the Controller URI is correct and the server is running.
386+ """ .format (controller )
387+
388+ try :
389+ response = self ._session .get (url , allow_redirects = False ,
390+ verify = ssl_verify )
391+ except requests .exceptions .ConnectionError as err :
392+ raise EnvironmentError (error_message + "\n Specific Error: " + str (err .message ))
393+
394+ if response .status_code != 401 :
395+ raise EnvironmentError (error_message )
396+ self .check_api_version (response .headers .get ('X_DEIS_API_VERSION' ))
397+
398+ def check_api_version (self , server_api_version ):
399+ """
400+ Check if the client is compatable with the api
401+ """
402+ if server_api_version is not None and server_api_version != __api_version__ :
403+ self ._logger .warning ("""
404+ ! WARNING: Client and server API versions do not match. Please consider upgrading.
405+ ! Client version: {}
406+ ! Server version: {}
407+ """ .format (__api_version__ , server_api_version ))
408+
381409 def _dispatch (self , method , path , body = None , ** kwargs ):
382410 """
383411 Dispatch an API request to the active Deis controller
@@ -397,13 +425,7 @@ def _dispatch(self, method, path, body=None, **kwargs):
397425 }
398426 response = func (url , data = body , headers = headers , verify = ssl_verify )
399427 # check for version mismatch
400- server_api_version = response .headers .get ('X_DEIS_API_VERSION' )
401- if server_api_version is not None and server_api_version != __api_version__ :
402- self ._logger .warning ("""
403- ! WARNING: Client and server API versions do not match. Please consider upgrading.
404- ! Client version: {}
405- ! Server version: {}
406- """ .format (__api_version__ , server_api_version ))
428+ self .check_api_version (response .headers .get ('X_DEIS_API_VERSION' ))
407429 return response
408430
409431 def apps (self , args ):
@@ -710,8 +732,14 @@ def auth_register(self, args):
710732 """
711733 controller = args ['<controller>' ]
712734 ssl_verify = True
735+ ssl_option = args .get ('--ssl-verify' )
736+ if ssl_option == 'false' :
737+ ssl_verify = False
713738 if not urlparse .urlparse (controller ).scheme :
714739 controller = "http://{}" .format (controller )
740+
741+ self .check_connection (controller , ssl_verify )
742+
715743 username = args .get ('--username' )
716744 if not username :
717745 username = raw_input ('username: ' )
@@ -722,9 +750,6 @@ def auth_register(self, args):
722750 if password != confirm :
723751 self ._logger .error ('Password mismatch, aborting registration.' )
724752 sys .exit (1 )
725- ssl_option = args .get ('--ssl-verify' )
726- if ssl_option == 'false' :
727- ssl_verify = False
728753 email = args .get ('--email' )
729754 if not email :
730755 email = raw_input ('email: ' )
@@ -804,17 +829,20 @@ def auth_login(self, args):
804829 """
805830 controller = args ['<controller>' ]
806831 ssl_verify = True
832+ ssl_option = args .get ('--ssl-verify' )
833+ if ssl_option == 'false' :
834+ ssl_verify = False
807835 if not urlparse .urlparse (controller ).scheme :
808836 controller = "http://{}" .format (controller )
837+
838+ self .check_connection (controller , ssl_verify )
839+
809840 username = args .get ('--username' )
810841 if not username :
811842 username = raw_input ('username: ' )
812843 password = args .get ('--password' )
813844 if not password :
814845 password = getpass ('password: ' )
815- ssl_option = args .get ('--ssl-verify' )
816- if ssl_option == 'false' :
817- ssl_verify = False
818846 url = urlparse .urljoin (controller , '/v1/auth/login/' )
819847 payload = {'username' : username , 'password' : password }
820848 # post credentials to the login URL
0 commit comments