Skip to content

Commit 7c5ae50

Browse files
feat(client): check controller before attempting to register.
1 parent 95746aa commit 7c5ae50

1 file changed

Lines changed: 41 additions & 13 deletions

File tree

client/deis.py

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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 + "\nSpecific 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

Comments
 (0)