Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions coriolis/api/v1/endpoint_actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,24 @@ def _validate_connection(self, req, id, body):
except exception.InvalidParameterValue as ex:
raise exc.HTTPNotFound(explanation=ex.msg)

@api_wsgi.action('invalidate')
def _invalidate(self, req, id, body):
context = req.environ['coriolis.context']
context.can(
"%s:invalidate" % endpoint_policies.ENDPOINTS_POLICY_PREFIX)
try:
self._endpoint_api.invalidate_cache(context, id)
return {
"invalidate": {
"success": True,
"message": "Instance list cache invalidation triggered."
}
}
except exception.NotFound as ex:
raise exc.HTTPNotFound(explanation=ex.msg)
except exception.InvalidParameterValue as ex:
raise exc.HTTPBadRequest(explanation=ex.msg)


def create_resource():
return api_wsgi.Resource(EndpointActionsController())
4 changes: 4 additions & 0 deletions coriolis/cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,7 @@ def get_cache_decorator(provider):
MEMOIZE = cache.get_memoization_decorator(
CONF, cache_region, provider)
return MEMOIZE


def invalidate():
cache_region.invalidate()
4 changes: 4 additions & 0 deletions coriolis/endpoints/api.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Copyright 2016 Cloudbase Solutions Srl
# All Rights Reserved.

from coriolis import cache
from coriolis.conductor.rpc import client as rpc_conductor_client
from coriolis.minion_manager.rpc import client as rpc_minion_manager_client
from coriolis import utils
Expand Down Expand Up @@ -35,6 +36,9 @@ def validate_connection(self, ctxt, endpoint_id):
return self._rpc_conductor_client.validate_endpoint_connection(
ctxt, endpoint_id)

def invalidate_cache(self, ctxt, endpoint_id):
cache.invalidate()

@utils.bad_request_on_error("Invalid destination environment: %s")
def validate_target_environment(self, ctxt, endpoint_id, target_env):
return self._rpc_conductor_client.validate_endpoint_target_environment(
Expand Down
11 changes: 11 additions & 0 deletions coriolis/policies/endpoints.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,17 @@ def get_endpoints_policy_label(rule_label):
}
]
),
policy.DocumentedRuleDefault(
get_endpoints_policy_label('invalidate'),
ENDPOINTS_POLICY_DEFAULT_RULE,
"Invalidate instance list cache for endpoint",
[
{
"path": "/endpoints/{endpoint_id}/actions",
"method": "POST"
}
]
),
policy.DocumentedRuleDefault(
get_endpoints_policy_label('list_instances'),
ENDPOINTS_POLICY_DEFAULT_RULE,
Expand Down