Skip to content

Commit

Permalink
Load swift policies
Browse files Browse the repository at this point in the history
  • Loading branch information
JoanBoronat committed Nov 2, 2017
1 parent 3ffec77 commit 2bdccde
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 2 deletions.
2 changes: 1 addition & 1 deletion api/api/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@


urlpatterns = [
url(r'^swift/', include('swift.urls')),
url(r'^swift/', include('swift_api.urls')),
url(r'^projects/', include('projects.urls')),
url(r'^filters/', include('filters.urls')),
url(r'^metrics/', include('metrics.urls')),
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
50 changes: 49 additions & 1 deletion api/swift/views.py → api/swift_api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,13 @@
from rest_framework import status
from rest_framework.exceptions import ParseError
from rest_framework.parsers import JSONParser
from swiftclient import client as swift_client
from swiftclient import client as swift_client
from swift.common.ring import RingBuilder
from operator import itemgetter
import os
import glob
import json
import math
import logging
import requests
import paramiko
Expand Down Expand Up @@ -227,8 +231,52 @@ def deploy_storage_policy(request, storage_policy_id):

@csrf_exempt
def load_swift_policies(request):

try:
r = get_redis_connection()
except RedisError:
return JSONResponse('Error connecting with DB', status=status.HTTP_500_INTERNAL_SERVER_ERROR)


if request.method == "POST":

files = glob.glob('/etc/swift/object.builder*')


try:

for file in files:
builder = RingBuilder.load(file)
if '-' in file:
id = file.split('-')[-1]
key = 'storage-policy:' + id
if id > r.get('storage-policies:id'):
r.set('storage-policies:id', id)
else:
key = 'storage-policy:0'

# os.system("sed -n -e '/\[" + key + "\]/,/^[[:space:]]*$/ p' /etc/swift/swift.conf | grep -Ev '(#.*$)|(^$)'")

devices = []
for device in builder.devs:
devices.append(device['ip'] + ':' + device['device'])

data = {'name': 'TODO',
'default': 'False',
'deprecated': 'False',
'time': '1',
'devices': json.dumps(devices),
'deployed': 'True',
'policy_type': 'replication',
'partition_power': int(math.log(builder.parts, 2)),
'replicas': int(builder.replicas)
}

r.hmset(key, data)


except RedisError:
return JSONResponse('Policies could not be loaded', status=status.HTTP_500_INTERNAL_SERVER_ERROR)

return JSONResponse('Policies loaded correctly', status=status.HTTP_200_OK)

Expand Down

0 comments on commit 2bdccde

Please sign in to comment.