From 2043c32551bf308efad63bb4b68faab4a92c7b1b Mon Sep 17 00:00:00 2001 From: Kei Nohguchi Date: Tue, 17 May 2016 14:58:32 -0700 Subject: [PATCH] openswitch.py: Fix the OpenSwitch REST authentication It's a cookie based authentication, that we get it through /login endpoint, called by connect() method and save the cookie for the rest of the call. --- lib/ansible/module_utils/openswitch.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/ansible/module_utils/openswitch.py b/lib/ansible/module_utils/openswitch.py index 0a9f13dcedd..097b9f11560 100644 --- a/lib/ansible/module_utils/openswitch.py +++ b/lib/ansible/module_utils/openswitch.py @@ -114,7 +114,20 @@ class Rest(object): if not port: port = 80 - self.baseurl = '%s://%s:%s/rest/v1' % (proto, host, port) + baseurl = '%s://%s:%s' % (proto, host, port) + headers = dict({'Content-Type': 'application/x-www-form-urlencoded'}) + # Get a cookie and save it the rest of the operations. + url = '%s/%s' % (baseurl, 'login') + data = 'username=%s&password=%s' % (self.module.params['username'], + self.module.params['password']) + resp, hdrs = fetch_url(self.module, url, data=data, + headers=headers, method='POST') + + # Update the base url for the rest of the operations. + self.baseurl = '%s/rest/v1' % (baseurl) + self.headers = dict({'Content-Type': 'application/json', + 'Accept': 'application/json', + 'Cookie': resp.headers.get('Set-Cookie')}) def _url_builder(self, path): if path[0] == '/': @@ -127,7 +140,7 @@ class Rest(object): if headers is None: headers = dict() - headers.update({'Content-Type': 'application/json'}) + headers.update(self.headers) resp, hdrs = fetch_url(self.module, url, data=data, headers=headers, method=method)