Skip to content

Commit

Permalink
Minor improvements and Create Dynamic Policy
Browse files Browse the repository at this point in the history
  • Loading branch information
JoanBoronat committed Oct 20, 2017
1 parent 1eb8334 commit 8f859ec
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 5 deletions.
2 changes: 1 addition & 1 deletion api/api/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
DEPENDENCY_DIR = os.path.join('/opt', 'crystal', 'dependencies')
CONTROLLERS_DIR = os.path.join('/opt', 'crystal', 'controllers')

NATIVE_FILTER_KEYS = ('id', 'filter_name', 'filter_type', 'language', 'dsl_name', 'dependencies', 'main', 'put', 'get', 'valid_parameters', 'execution_server', 'reverse', 'path')
NATIVE_FILTER_KEYS = ('id', 'filter_name', 'filter_type', 'language', 'dsl_name', 'dependencies', 'main', 'put', 'get', 'post', 'head', 'delete', 'valid_parameters', 'execution_server', 'reverse', 'path')
STORLET_FILTER_KEYS = ('id', 'filter_name', 'filter_type', 'language', 'dsl_name', 'interface_version', 'dependencies', 'main', 'put', 'get', 'valid_parameters', 'execution_server', 'reverse', 'path')
DEPENDENCY_KEYS = ('id', 'name', 'version', 'permissions', 'path')

Expand Down
3 changes: 2 additions & 1 deletion api/filters/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ def filter_list(request):
filters = []
for key in keys:
flter = r.hgetall(key)
to_json_bools(flter, 'get', 'put', 'post', 'head', 'delete')
filters.append(flter)
sorted_list = sorted(filters, key=lambda x: int(itemgetter('id')(x)))
return JSONResponse(sorted_list, status=status.HTTP_200_OK)
Expand Down Expand Up @@ -86,7 +87,7 @@ def filter_detail(request, filter_id):

if request.method == 'GET':
my_filter = r.hgetall("filter:" + str(filter_id))
to_json_bools(my_filter, 'put', 'get')
to_json_bools(my_filter, 'put', 'get', 'post', 'head', 'delete')
return JSONResponse(my_filter, status=status.HTTP_200_OK)

elif request.method == 'PUT':
Expand Down
38 changes: 35 additions & 3 deletions api/policies/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import re
import dsl_parser
from api.common import JSONResponse, get_redis_connection, get_project_list, \
get_token_connection, create_local_host, rule_actors
get_token_connection, create_local_host, rule_actors, to_json_bools
from api.exceptions import SwiftClientError, StorletNotFoundException, \
ProjectNotFound, ProjectNotCrystalEnabled
from filters.views import set_filter, unset_filter
Expand All @@ -41,6 +41,8 @@ def policy_list(request):
for it in keys:
for key, value in r.hgetall(it).items():
policy = json.loads(value)
filter = r.hgetall('filter:' + str(policy['dsl_name']))
to_json_bools(filter, 'get', 'put', 'post', 'head', 'delete')
target_id = it.replace('pipeline:', '')
policies.append({'id': key, 'target_id': target_id,
'target_name': project_list[target_id.split(':')[0]],
Expand All @@ -51,7 +53,12 @@ def policy_list(request):
'execution_server': policy['execution_server'],
'reverse': policy['reverse'],
'execution_order': policy['execution_order'],
'params': policy['params']})
'params': policy['params'],
'put': filter['put'],
'get': filter['get'],
'post': filter['post'],
'head': filter['head'],
'delete': filter['delete']})
sorted_policies = sorted(policies, key=lambda x: int(itemgetter('execution_order')(x)))

return JSONResponse(sorted_policies, status=status.HTTP_200_OK)
Expand All @@ -70,7 +77,6 @@ def policy_list(request):
if request.method == 'POST':
# New Policy
rules_string = request.body.splitlines()

for rule_string in rules_string:
#
# Rules improved:
Expand Down Expand Up @@ -105,6 +111,25 @@ def policy_list(request):
'metric before creating a new policy', status=status.HTTP_401_UNAUTHORIZED)

return JSONResponse('Policies added successfully!', status=status.HTTP_201_CREATED)

if request.method == 'PUT':
key = "policy:" + str(r.incr('policies:id'))
data = JSONParser().parse(request)
try:
r.hmset(key, {"id": key.split(':')[1],
"policy": '', # TOFIX Retrieve Policy. From where?
"target": data['target_id'],
"filter": data['filter_id'],
"condition": data['condition'],
"object_type": data['object_type'],
"object_size": data['object_size'],
"object_tag": data['object_tag'],
"transient": data['transient'],
"policy_location": '', # TOFIX Retrieve location. From where?
"alive": True})
return JSONResponse("Policy inserted correctly", status=status.HTTP_201_CREATED)
except RedisError:
return JSONResponse("Error inserting policy", status=status.HTTP_400_BAD_REQUEST)

return JSONResponse('Method ' + str(request.method) + ' not allowed.', status=status.HTTP_405_METHOD_NOT_ALLOWED)

Expand All @@ -131,6 +156,13 @@ def static_policy_detail(request, policy_id):
project_list['global'] = 'Global'
policy_redis = r.hget("pipeline:" + str(target), policy)
data = json.loads(policy_redis)
filter = r.hgetall('filter:' + str(data['dsl_name']))
to_json_bools(filter, 'get', 'put', 'post', 'head', 'delete')
data['get'] = filter['get']
data['put'] = filter['put']
data['post'] = filter['post']
data['head'] = filter['head']
data['delete'] = filter['delete']
data["id"] = policy
data["target_id"] = target
data["target_name"] = project_list[target.split(':')[0]]
Expand Down

0 comments on commit 8f859ec

Please sign in to comment.