gnocchi: quote the resource_id in url
Some resource_id looks like "812c9916-83f7-460b-8b27-ab5a2ba98275/foobar". This change uses urllib.quote to encode them when they are used into a url. Related-bug: #1480346 Change-Id: If19b0aec5f89e031b886b7f1e2233c0a88d1b4b1
This commit is contained in:
parent
fcf5b4e7e2
commit
33355eaf68
@ -19,6 +19,7 @@ import json
|
|||||||
from oslo_log import log
|
from oslo_log import log
|
||||||
import requests
|
import requests
|
||||||
import retrying
|
import retrying
|
||||||
|
from six.moves.urllib import parse as urlparse
|
||||||
|
|
||||||
from ceilometer.i18n import _
|
from ceilometer.i18n import _
|
||||||
from ceilometer import keystone_client
|
from ceilometer import keystone_client
|
||||||
@ -104,7 +105,8 @@ class Client(object):
|
|||||||
measure_attributes):
|
measure_attributes):
|
||||||
r = self._session.post("%s/v1/resource/%s/%s/metric/%s/measures"
|
r = self._session.post("%s/v1/resource/%s/%s/metric/%s/measures"
|
||||||
% (self._gnocchi_url, resource_type,
|
% (self._gnocchi_url, resource_type,
|
||||||
resource_id, metric_name),
|
urlparse.quote(resource_id, safe=""),
|
||||||
|
metric_name),
|
||||||
headers=self._get_headers(),
|
headers=self._get_headers(),
|
||||||
data=json.dumps(measure_attributes))
|
data=json.dumps(measure_attributes))
|
||||||
|
|
||||||
@ -155,7 +157,8 @@ class Client(object):
|
|||||||
resource_extra):
|
resource_extra):
|
||||||
r = self._session.patch(
|
r = self._session.patch(
|
||||||
"%s/v1/resource/%s/%s"
|
"%s/v1/resource/%s/%s"
|
||||||
% (self._gnocchi_url, resource_type, resource_id),
|
% (self._gnocchi_url, resource_type,
|
||||||
|
urlparse.quote(resource_id, safe="")),
|
||||||
headers=self._get_headers(),
|
headers=self._get_headers(),
|
||||||
data=json.dumps(resource_extra))
|
data=json.dumps(resource_extra))
|
||||||
|
|
||||||
@ -175,7 +178,7 @@ class Client(object):
|
|||||||
params = {metric_name: archive_policy}
|
params = {metric_name: archive_policy}
|
||||||
r = self._session.post("%s/v1/resource/%s/%s/metric"
|
r = self._session.post("%s/v1/resource/%s/%s/metric"
|
||||||
% (self._gnocchi_url, resource_type,
|
% (self._gnocchi_url, resource_type,
|
||||||
resource_id),
|
urlparse.quote(resource_id, safe="")),
|
||||||
headers=self._get_headers(),
|
headers=self._get_headers(),
|
||||||
data=json.dumps(params))
|
data=json.dumps(params))
|
||||||
if r.status_code == 409:
|
if r.status_code == 409:
|
||||||
|
@ -337,7 +337,7 @@ class DispatcherWorkflowTest(base.BaseTestCase,
|
|||||||
group="dispatcher_gnocchi"
|
group="dispatcher_gnocchi"
|
||||||
)
|
)
|
||||||
|
|
||||||
self.sample['resource_id'] = str(uuid.uuid4())
|
self.sample['resource_id'] = str(uuid.uuid4()) + "/foobar"
|
||||||
|
|
||||||
@mock.patch('ceilometer.dispatcher.gnocchi.LOG')
|
@mock.patch('ceilometer.dispatcher.gnocchi.LOG')
|
||||||
@mock.patch('ceilometer.dispatcher.gnocchi_client.LOG')
|
@mock.patch('ceilometer.dispatcher.gnocchi_client.LOG')
|
||||||
@ -348,7 +348,9 @@ class DispatcherWorkflowTest(base.BaseTestCase,
|
|||||||
base_url = self.dispatcher.conf.dispatcher_gnocchi.url
|
base_url = self.dispatcher.conf.dispatcher_gnocchi.url
|
||||||
url_params = {
|
url_params = {
|
||||||
'url': urlparse.urljoin(base_url, '/v1/resource'),
|
'url': urlparse.urljoin(base_url, '/v1/resource'),
|
||||||
'resource_id': self.sample['resource_id'],
|
# NOTE(sileht): we don't use urlparse.quote here
|
||||||
|
# to ensure / is converted in %2F
|
||||||
|
'resource_id': self.sample['resource_id'].replace("/", "%2F"),
|
||||||
'resource_type': self.resource_type,
|
'resource_type': self.resource_type,
|
||||||
'metric_name': self.sample['counter_name']
|
'metric_name': self.sample['counter_name']
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user