From 90396c7365e43a73187e0d496c1055c0b26b9ea1 Mon Sep 17 00:00:00 2001 From: Ankit Jain Date: Thu, 4 Aug 2016 11:10:31 -0700 Subject: [PATCH] 1. Pass auth header in post_query request Fix for test_verify_object_logs Needed to pass auth header in post_query request Pass expect : 202 in query header to get qid Partial-Bug: #1599654 (cherry picked from commit 1eb5678528d036f7a46a14dd4010667c4ac44be4) Change-Id: Ieb39bdfea09a22160b2b148842434214b0a09152 --- common/connections.py | 2 +- .../collector/opserver_introspect_utils.py | 19 +++++++++++------ tcutils/collector/opserver_util.py | 21 +++++++++++-------- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/common/connections.py b/common/connections.py index 869419378..0ce53a849 100755 --- a/common/connections.py +++ b/common/connections.py @@ -39,7 +39,7 @@ def __init__(self, inputs=None, logger=None, project_name=None, self.agent_inspect = custom_dict(self.get_vrouter_agent_inspect_handle, 'agent_inspect') self.ops_inspects = custom_dict(self.get_opserver_inspect_handle, - 'ops_inspect') + 'ops_inspect:'+self.project_name+':'+self.username) self.cn_inspect = custom_dict(self.get_control_node_inspect_handle, 'cn_inspect') self.ds_inspect = custom_dict(self.get_discovery_service_inspect_handle, diff --git a/tcutils/collector/opserver_introspect_utils.py b/tcutils/collector/opserver_introspect_utils.py index dc1762b52..33ffca7c3 100755 --- a/tcutils/collector/opserver_introspect_utils.py +++ b/tcutils/collector/opserver_introspect_utils.py @@ -291,6 +291,8 @@ def post_query(self, table, start_time=None, end_time=None, where_clause='', sort_fields=None, sort=None, limit=None, filter=None, dir=None): res = None + self._drv._auth() + headers = self._drv._headers try: flows_url = OpServerUtils.opserver_query_url( self._ip, str(self._port)) @@ -304,14 +306,19 @@ def post_query(self, table, start_time=None, end_time=None, print json.dumps(query_dict) res = [] resp = OpServerUtils.post_url_http( - flows_url, json.dumps(query_dict)) + flows_url, json.dumps(query_dict), headers) if resp is not None: resp = json.loads(resp) - qid = resp['href'].rsplit('/', 1)[1] - result = OpServerUtils.get_query_result( - self._ip, str(self._port), qid) - for item in result: - res.append(item) + try: + qid = resp['href'].rsplit('/', 1)[1] + result = OpServerUtils.get_query_result( + self._ip, str(self._port), qid, headers) + for item in result: + res.append(item) + except Exception as e: + if 'value' in resp: + for item in resp['value']: + res.append(item) except Exception as e: print str(e) finally: diff --git a/tcutils/collector/opserver_util.py b/tcutils/collector/opserver_util.py index 89df85a30..8aa7c5a04 100644 --- a/tcutils/collector/opserver_util.py +++ b/tcutils/collector/opserver_util.py @@ -59,17 +59,20 @@ def get_start_end_time(start_time, end_time): # end get_start_end_time @staticmethod - def post_url_http(url, params): + def post_url_http(url, params, token): + DEFAULT_HEADERS = {'Content-type': 'application/json; charset="UTF-8"','Expect': '202-accepted'} + headers = DEFAULT_HEADERS.copy() + headers['X-AUTH-TOKEN'] = token['X-AUTH-TOKEN'] try: print 'request version : %s'%(pkg_resources.get_distribution("requests").version[0]) if int(pkg_resources.get_distribution("requests").version[0]) >= 1: response = requests.post(url, stream=True, data=params, - headers=OpServerUtils.POST_HEADERS) + headers=headers) else: response = requests.post(url, prefetch=False, data=params, - headers=OpServerUtils.POST_HEADERS) + headers=headers) except requests.exceptions.ConnectionError, e: print "Connection to %s failed" % url return None @@ -81,13 +84,13 @@ def post_url_http(url, params): # end post_url_http @staticmethod - def get_url_http(url): + def get_url_http(url, headers=None): data = {} try: if int(pkg_resources.get_distribution("requests").version[0]) >= 1: - data = requests.get(url, stream=True) + data = requests.get(url, stream=True, headers=headers) else: - data = requests.get(url, prefetch=False) + data = requests.get(url, prefetch=False, headers=headers) except requests.exceptions.ConnectionError, e: print "Connection to %s failed" % url @@ -121,11 +124,11 @@ def parse_query_result(result): # end parse_query_result @staticmethod - def get_query_result(opserver_ip, opserver_port, qid): + def get_query_result(opserver_ip, opserver_port, qid, headers): while True: url = OpServerUtils.opserver_query_url( opserver_ip, opserver_port) + '/' + qid - resp = OpServerUtils.get_url_http(url) + resp = OpServerUtils.get_url_http(url, headers=headers) if resp.status_code != 200: yield {} return @@ -137,7 +140,7 @@ def get_query_result(opserver_ip, opserver_port, qid): for chunk in status['chunks']: url = OpServerUtils.opserver_url( opserver_ip, opserver_port) + chunk['href'] - resp = OpServerUtils.get_url_http(url) + resp = OpServerUtils.get_url_http(url, headers=headers) if resp.status_code != 200: yield {} else: