Merge "Impelment Akamai purge functionality by CCU"
This commit is contained in:
commit
5b4361bc0b
|
@ -377,8 +377,56 @@ class ServiceController(base.ServiceBase):
|
|||
else:
|
||||
return self.responder.deleted(provider_service_id)
|
||||
|
||||
def purge(self, service_id, purge_urls=None):
|
||||
pass
|
||||
def purge(self, provider_service_id, purge_url=None):
|
||||
try:
|
||||
# Get the service
|
||||
if purge_url is None:
|
||||
raise RuntimeError('Akamai purge-all functionality has not'
|
||||
' been implemented')
|
||||
else:
|
||||
try:
|
||||
policies = json.loads(provider_service_id)
|
||||
except Exception:
|
||||
# raise a more meaningful error for debugging info
|
||||
try:
|
||||
raise RuntimeError('Mal-formed Akaimai policy ids: %s'
|
||||
% provider_service_id)
|
||||
except Exception:
|
||||
return self.responder.failed("failed to delete "
|
||||
"service")
|
||||
|
||||
for policy in policies:
|
||||
resp = self.policy_api_client.get(
|
||||
self.policy_api_base_url.format(policy_name=policy),
|
||||
headers=self.request_header)
|
||||
if resp.status_code != 200:
|
||||
raise RuntimeError(resp.text)
|
||||
else:
|
||||
url_scheme = 'http'
|
||||
policy_content = json.loads(resp.text)
|
||||
# loop over matches to get the correct url scheme
|
||||
for m_item in policy_content['rules'][0]['matches']:
|
||||
if m_item['name'] == 'url-scheme':
|
||||
url_scheme = m_item['value']
|
||||
break
|
||||
actual_purge_url = url_scheme + "://www." + policy + (
|
||||
purge_url)
|
||||
data = {
|
||||
'objects': [
|
||||
actual_purge_url
|
||||
]
|
||||
}
|
||||
resp = self.ccu_api_client.post(self.ccu_api_base_url,
|
||||
data=json.dumps(data),
|
||||
headers=(
|
||||
self.request_header
|
||||
))
|
||||
if resp.status_code != 201:
|
||||
raise RuntimeError(resp.text)
|
||||
return self.responder.purged(provider_service_id,
|
||||
purge_url=purge_url)
|
||||
except Exception:
|
||||
return self.responder.failed("failed to PURGE service")
|
||||
|
||||
@decorators.lazy_property(write=False)
|
||||
def current_customer(self):
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
{
|
||||
"no_url_scheme": {
|
||||
"rules": [{
|
||||
"matches": [
|
||||
{"name": "url-wildcard",
|
||||
"value": "/*"}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"url_scheme_http": {
|
||||
"rules": [{
|
||||
"matches": [
|
||||
{"name": "url-wildcard",
|
||||
"value": "/*"},
|
||||
{"name": "url-scheme",
|
||||
"value": "http"}
|
||||
]}
|
||||
]
|
||||
},
|
||||
"url_scheme_https": {
|
||||
"rules": [{
|
||||
"matches": [
|
||||
{"name": "url-wildcard",
|
||||
"value": "/*"},
|
||||
{"name": "url-scheme",
|
||||
"value": "https"}
|
||||
]}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -167,3 +167,49 @@ class TestServices(base.TestCase):
|
|||
resp = controller.update(
|
||||
provider_service_id, service_obj, service_obj, service_obj)
|
||||
self.assertIn('id', resp[self.driver.provider_name])
|
||||
|
||||
def test_purge_all(self):
|
||||
provider_service_id = json.dumps([str(uuid.uuid1())])
|
||||
controller = services.ServiceController(self.driver)
|
||||
resp = controller.purge(provider_service_id, None)
|
||||
self.assertIn('error', resp[self.driver.provider_name])
|
||||
|
||||
def test_purge_with_get_exception(self):
|
||||
provider_service_id = json.dumps([str(uuid.uuid1())])
|
||||
controller = services.ServiceController(self.driver)
|
||||
controller.policy_api_client.get.return_value = mock.Mock(
|
||||
status_code=400,
|
||||
text='Some get error happened'
|
||||
)
|
||||
resp = controller.purge(provider_service_id, '/img/abc.jpeg')
|
||||
self.assertIn('error', resp[self.driver.provider_name])
|
||||
|
||||
@ddt.file_data('policy_detail.json')
|
||||
def test_purge_with_ccu_exception(self, policy_detail_json):
|
||||
provider_service_id = json.dumps([str(uuid.uuid1())])
|
||||
controller = services.ServiceController(self.driver)
|
||||
controller.policy_api_client.get.return_value = mock.Mock(
|
||||
status_code=200,
|
||||
text=json.dumps(policy_detail_json)
|
||||
)
|
||||
controller.ccu_api_client.post.return_value = mock.Mock(
|
||||
status_code=400,
|
||||
text="purge request post failed"
|
||||
)
|
||||
resp = controller.purge(provider_service_id, '/img/abc.jpeg')
|
||||
self.assertIn('error', resp[self.driver.provider_name])
|
||||
|
||||
@ddt.file_data('policy_detail.json')
|
||||
def test_purge(self, policy_detail_json):
|
||||
provider_service_id = json.dumps([str(uuid.uuid1())])
|
||||
controller = services.ServiceController(self.driver)
|
||||
controller.policy_api_client.get.return_value = mock.Mock(
|
||||
status_code=200,
|
||||
text=json.dumps(policy_detail_json)
|
||||
)
|
||||
controller.ccu_api_client.post.return_value = mock.Mock(
|
||||
status_code=201,
|
||||
text="purge request post complete"
|
||||
)
|
||||
resp = controller.purge(provider_service_id, '/img/abc.jpeg')
|
||||
self.assertIn('id', resp[self.driver.provider_name])
|
||||
|
|
Loading…
Reference in New Issue