From d950bab9332adedbb05a25573487bafa50e98372 Mon Sep 17 00:00:00 2001 From: memo Date: Thu, 26 Nov 2015 19:38:03 +0000 Subject: [PATCH] Initialize freezer-scheduler with insecure mode for keystone v3 Add verify and insecure flags for freezer scheduler and apiclient in order to handle insecure connections when keystone and freezer-api are available through https Add support for keystone v2 and v3 in the windows scheduler Add explicit parameters to apiclient for v3 connections Change-Id: Ib950c85e3d8d2b192ec7ba60e4fe5641202d2960 --- actions.py | 14 ++++++++------ backups.py | 12 +++++++----- client.py | 28 +++++++++++++++++++++------- jobs.py | 24 +++++++++++++++--------- registration.py | 13 ++++++++----- sessions.py | 25 +++++++++++++++---------- 6 files changed, 74 insertions(+), 42 deletions(-) diff --git a/actions.py b/actions.py index 857662e..bcacd5d 100644 --- a/actions.py +++ b/actions.py @@ -23,9 +23,10 @@ import exceptions class ActionManager(object): - def __init__(self, client): + def __init__(self, client, verify=True): self.client = client self.endpoint = self.client.endpoint + '/v1/actions/' + self.verify = verify @property def headers(self): @@ -36,7 +37,8 @@ class ActionManager(object): endpoint = self.endpoint + action_id r = requests.post(endpoint, data=json.dumps(doc), - headers=self.headers) + headers=self.headers, + verify=self.verify) if r.status_code != 201: raise exceptions.ApiClientException(r) action_id = r.json()['action_id'] @@ -44,7 +46,7 @@ class ActionManager(object): def delete(self, action_id): endpoint = self.endpoint + action_id - r = requests.delete(endpoint, headers=self.headers) + r = requests.delete(endpoint, headers=self.headers, verify=self.verify) if r.status_code != 204: raise exceptions.ApiClientException(r) @@ -52,14 +54,14 @@ class ActionManager(object): data = json.dumps(search) if search else None query = {'limit': int(limit), 'offset': int(offset)} r = requests.get(self.endpoint, headers=self.headers, - params=query, data=data) + params=query, data=data, verify=self.verify) if r.status_code != 200: raise exceptions.ApiClientException(r) return r.json()['actions'] def get(self, action_id): endpoint = self.endpoint + action_id - r = requests.get(endpoint, headers=self.headers) + r = requests.get(endpoint, headers=self.headers, verify=self.verify) if r.status_code == 200: return r.json() if r.status_code == 404: @@ -70,7 +72,7 @@ class ActionManager(object): endpoint = self.endpoint + action_id r = requests.patch(endpoint, headers=self.headers, - data=json.dumps(update_doc)) + data=json.dumps(update_doc), verify=self.verify) if r.status_code != 200: raise exceptions.ApiClientException(r) return r.json()['version'] diff --git a/backups.py b/backups.py index d1c5eb1..bcc75c5 100644 --- a/backups.py +++ b/backups.py @@ -22,9 +22,10 @@ import exceptions class BackupsManager(object): - def __init__(self, client): + def __init__(self, client, verify=True): self.client = client self.endpoint = self.client.endpoint + '/v1/backups/' + self.verify = verify @property def headers(self): @@ -33,7 +34,8 @@ class BackupsManager(object): def create(self, backup_metadata): r = requests.post(self.endpoint, data=json.dumps(backup_metadata), - headers=self.headers) + headers=self.headers, + verify=self.verify) if r.status_code != 201: raise exceptions.ApiClientException(r) backup_id = r.json()['backup_id'] @@ -41,7 +43,7 @@ class BackupsManager(object): def delete(self, backup_id): endpoint = self.endpoint + backup_id - r = requests.delete(endpoint, headers=self.headers) + r = requests.delete(endpoint, headers=self.headers, verify=self.verify) if r.status_code != 204: raise exceptions.ApiClientException(r) @@ -61,7 +63,7 @@ class BackupsManager(object): data = json.dumps(search) if search else None query = {'limit': int(limit), 'offset': int(offset)} r = requests.get(self.endpoint, headers=self.headers, - params=query, data=data) + params=query, data=data, verify=self.verify) if r.status_code != 200: raise exceptions.ApiClientException(r) @@ -69,7 +71,7 @@ class BackupsManager(object): def get(self, backup_id): endpoint = self.endpoint + backup_id - r = requests.get(endpoint, headers=self.headers) + r = requests.get(endpoint, headers=self.headers, verify=self.verify) if r.status_code == 200: return r.json() if r.status_code == 404: diff --git a/client.py b/client.py index a249e37..3d70721 100644 --- a/client.py +++ b/client.py @@ -187,7 +187,11 @@ class Client(object): auth_url=None, session=None, endpoint=None, - opts=None): + opts=None, + project_name=None, + user_domain_name=None, + project_domain_name=None, + verify=True): self.opts = opts or build_os_option_parser( argparse.ArgumentParser(description='Freezer Client') @@ -204,22 +208,32 @@ class Client(object): self.opts.os_auth_url = auth_url if endpoint: self.opts.os_backup_url = endpoint + if project_name: + self.opts.os_project_name = project_name + if user_domain_name: + self.opts.user_domain_name = user_domain_name + if project_domain_name: + self.opts.project_domain_name = project_domain_name + + # flag to initialize freezer-scheduler with insecure mode + self.verify = verify self._session = session self.version = version - self.backups = BackupsManager(self) - self.registration = RegistrationManager(self) - self.jobs = JobManager(self) - self.actions = ActionManager(self) - self.sessions = SessionManager(self) + self.backups = BackupsManager(self, verify=verify) + self.registration = RegistrationManager(self, verify=verify) + self.jobs = JobManager(self, verify=verify) + self.actions = ActionManager(self, verify=verify) + self.sessions = SessionManager(self, verify=verify) + @cached_property def session(self): if self._session: return self._session auth_plugin = get_auth_plugin(self.opts) - return ksc_session.Session(auth=auth_plugin) + return ksc_session.Session(auth=auth_plugin, verify=self.verify) @cached_property def endpoint(self): diff --git a/jobs.py b/jobs.py index 7a9ec95..2c0b31e 100644 --- a/jobs.py +++ b/jobs.py @@ -22,9 +22,10 @@ import exceptions class JobManager(object): - def __init__(self, client): + def __init__(self, client, verify=True): self.client = client self.endpoint = self.client.endpoint + '/v1/jobs/' + self.verify = verify @property def headers(self): @@ -36,7 +37,8 @@ class JobManager(object): doc['client_id'] = doc.get('client_id', '') or self.client.client_id r = requests.post(endpoint, data=json.dumps(doc), - headers=self.headers) + headers=self.headers, + verify=self.verify) if r.status_code != 201: raise exceptions.ApiClientException(r) job_id = r.json()['job_id'] @@ -44,7 +46,7 @@ class JobManager(object): def delete(self, job_id): endpoint = self.endpoint + job_id - r = requests.delete(endpoint, headers=self.headers) + r = requests.delete(endpoint, headers=self.headers, verify=self.verify) if r.status_code != 204: raise exceptions.ApiClientException(r) @@ -52,7 +54,7 @@ class JobManager(object): data = json.dumps(search) if search else None query = {'limit': int(limit), 'offset': int(offset)} r = requests.get(self.endpoint, headers=self.headers, - params=query, data=data) + params=query, data=data, verify=self.verify) if r.status_code != 200: raise exceptions.ApiClientException(r) return r.json()['jobs'] @@ -66,7 +68,7 @@ class JobManager(object): def get(self, job_id): endpoint = self.endpoint + job_id - r = requests.get(endpoint, headers=self.headers) + r = requests.get(endpoint, headers=self.headers, verify=self.verify) if r.status_code == 200: return r.json() if r.status_code == 404: @@ -77,7 +79,8 @@ class JobManager(object): endpoint = self.endpoint + job_id r = requests.patch(endpoint, headers=self.headers, - data=json.dumps(update_doc)) + data=json.dumps(update_doc), + verify=self.verify) if r.status_code != 200: raise exceptions.ApiClientException(r) return r.json()['version'] @@ -97,7 +100,8 @@ class JobManager(object): doc = {"start": None} r = requests.post(endpoint, headers=self.headers, - data=json.dumps(doc)) + data=json.dumps(doc), + verify=self.verify) if r.status_code != 202: raise exceptions.ApiClientException(r) return r.json() @@ -117,7 +121,8 @@ class JobManager(object): doc = {"stop": None} r = requests.post(endpoint, headers=self.headers, - data=json.dumps(doc)) + data=json.dumps(doc), + verify=self.verify) if r.status_code != 202: raise exceptions.ApiClientException(r) return r.json() @@ -137,7 +142,8 @@ class JobManager(object): doc = {"abort": None} r = requests.post(endpoint, headers=self.headers, - data=json.dumps(doc)) + data=json.dumps(doc), + verify=self.verify) if r.status_code != 202: raise exceptions.ApiClientException(r) return r.json() diff --git a/registration.py b/registration.py index fa520c7..b1b9dcb 100644 --- a/registration.py +++ b/registration.py @@ -22,9 +22,10 @@ import exceptions class RegistrationManager(object): - def __init__(self, client): + def __init__(self, client, verify=True): self.client = client self.endpoint = self.client.endpoint + '/v1/clients/' + self.verify = verify @property def headers(self): @@ -33,7 +34,8 @@ class RegistrationManager(object): def create(self, client_info): r = requests.post(self.endpoint, data=json.dumps(client_info), - headers=self.headers) + headers=self.headers, + verify=self.verify) if r.status_code != 201: raise exceptions.ApiClientException(r) client_id = r.json()['client_id'] @@ -41,7 +43,8 @@ class RegistrationManager(object): def delete(self, client_id): endpoint = self.endpoint + client_id - r = requests.delete(endpoint, headers=self.headers) + r = requests.delete(endpoint, headers=self.headers, + verify=self.verify) if r.status_code != 204: raise exceptions.ApiClientException(r) @@ -65,14 +68,14 @@ class RegistrationManager(object): data = json.dumps(search) if search else None query = {'limit': int(limit), 'offset': int(offset)} r = requests.get(self.endpoint, headers=self.headers, - params=query, data=data) + params=query, data=data, verify=self.verify) if r.status_code != 200: raise exceptions.ApiClientException(r) return r.json()['clients'] def get(self, client_id): endpoint = self.endpoint + client_id - r = requests.get(endpoint, headers=self.headers) + r = requests.get(endpoint, headers=self.headers, verify=self.verify) if r.status_code == 200: return r.json() if r.status_code == 404: diff --git a/sessions.py b/sessions.py index d5df039..e9ccf01 100644 --- a/sessions.py +++ b/sessions.py @@ -22,9 +22,10 @@ import exceptions class SessionManager(object): - def __init__(self, client): + def __init__(self, client, verify=True): self.client = client self.endpoint = self.client.endpoint + '/v1/sessions/' + self.verify = verify @property def headers(self): @@ -35,7 +36,8 @@ class SessionManager(object): endpoint = self.endpoint + session_id r = requests.post(endpoint, data=json.dumps(doc), - headers=self.headers) + headers=self.headers, + verify=self.verify) if r.status_code != 201: raise exceptions.ApiClientException(r) session_id = r.json()['session_id'] @@ -43,7 +45,7 @@ class SessionManager(object): def delete(self, session_id): endpoint = self.endpoint + session_id - r = requests.delete(endpoint, headers=self.headers) + r = requests.delete(endpoint, headers=self.headers, verify=self.verify) if r.status_code != 204: raise exceptions.ApiClientException(r) @@ -51,7 +53,7 @@ class SessionManager(object): data = json.dumps(search) if search else None query = {'limit': int(limit), 'offset': int(offset)} r = requests.get(self.endpoint, headers=self.headers, - params=query, data=data) + params=query, data=data, verify=self.verify) if r.status_code != 200: raise exceptions.ApiClientException(r) return r.json()['sessions'] @@ -63,7 +65,7 @@ class SessionManager(object): def get(self, session_id): endpoint = self.endpoint + session_id - r = requests.get(endpoint, headers=self.headers) + r = requests.get(endpoint, headers=self.headers, verify=self.verify) if r.status_code == 200: return r.json() if r.status_code == 404: @@ -74,7 +76,8 @@ class SessionManager(object): endpoint = self.endpoint + session_id r = requests.patch(endpoint, headers=self.headers, - data=json.dumps(update_doc)) + data=json.dumps(update_doc), + verify=self.verify) if r.status_code != 200: raise exceptions.ApiClientException(r) return r.json()['version'] @@ -83,7 +86,7 @@ class SessionManager(object): # endpoint /v1/sessions/{sessions_id}/jobs/{job_id} endpoint = '{0}{1}/jobs/{2}'.format(self.endpoint, session_id, job_id) r = requests.put(endpoint, - headers=self.headers) + headers=self.headers, verify=self.verify) if r.status_code != 204: raise exceptions.ApiClientException(r) return @@ -95,7 +98,7 @@ class SessionManager(object): r = '' while retry: r = requests.delete(endpoint, - headers=self.headers) + headers=self.headers, verify=self.verify) if r.status_code == 204: return retry -= 1 @@ -126,7 +129,8 @@ class SessionManager(object): }} r = requests.post(endpoint, headers=self.headers, - data=json.dumps(doc)) + data=json.dumps(doc), + verify=self.verify) if r.status_code != 202: raise exceptions.ApiClientException(r) return r.json() @@ -151,7 +155,8 @@ class SessionManager(object): }} r = requests.post(endpoint, headers=self.headers, - data=json.dumps(doc)) + data=json.dumps(doc), + verify=self.verify) if r.status_code != 202: raise exceptions.ApiClientException(r) return r.json()