From 4e71b762243940549a97a67b8018ded5bbfa3808 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sat, 27 Jun 2015 13:48:26 -0700 Subject: [PATCH 01/40] Destroy qgroup as part of share deletion. --- src/rockstor/fs/btrfs.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/rockstor/fs/btrfs.py b/src/rockstor/fs/btrfs.py index 652f21919..a7a93190b 100644 --- a/src/rockstor/fs/btrfs.py +++ b/src/rockstor/fs/btrfs.py @@ -349,8 +349,10 @@ def remove_share(pool, pool_device, share_name): subvol_mnt_pt = root_pool_mnt + '/' + share_name if (not is_subvol(subvol_mnt_pt)): return + qgroup = ('0/%s' % share_id(pool, pool_device, share_name)) delete_cmd = [BTRFS, 'subvolume', 'delete', subvol_mnt_pt] run_command(delete_cmd) + return qgroup_destroy(qgroup, root_pool_mnt) def remove_snap(pool, pool_device, share_name, snap_name): @@ -460,6 +462,15 @@ def qgroup_id(pool, disk_name, share_name): return '0/' + sid +def qgroup_destroy(qid, mnt_pt): + o, e, rc = run_command([BTRFS, 'qgroup', 'show', mnt_pt]) + for l in o: + if (re.match(qid, l) is not None and + l.split()[0] == qid): + return run_command([BTRFS, 'qgroup', 'destroy', qid, mnt_pt]) + return False + + def update_quota(pool, pool_device, qgroup, size_bytes): pool_device = '/dev/' + pool_device root_pool_mnt = mount_root(pool, pool_device) From 9f02a0e3e6dd78317a74afc30bcafca4e80de379 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sat, 27 Jun 2015 14:18:30 -0700 Subject: [PATCH 02/40] destroy qgroup after deleting snapshot. #697 --- src/rockstor/fs/btrfs.py | 4 +++- src/rockstor/storageadmin/views/snapshot.py | 7 +++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/rockstor/fs/btrfs.py b/src/rockstor/fs/btrfs.py index a7a93190b..b86714447 100644 --- a/src/rockstor/fs/btrfs.py +++ b/src/rockstor/fs/btrfs.py @@ -362,7 +362,9 @@ def remove_snap(pool, pool_device, share_name, snap_name): if (is_mounted(snap_path)): umount_root(snap_path) if (is_subvol(snap_path)): - return run_command([BTRFS, 'subvolume', 'delete', snap_path]) + qgroup = ('0/%s' % share_id(pool, pool_device, snap_name)) + run_command([BTRFS, 'subvolume', 'delete', snap_path]) + return qgroup_destroy(qgroup, root_mnt) else: o, e, rc = run_command([BTRFS, 'subvolume', 'list', '-s', root_mnt]) snap = None diff --git a/src/rockstor/storageadmin/views/snapshot.py b/src/rockstor/storageadmin/views/snapshot.py index c5a322faa..46d13ba9b 100644 --- a/src/rockstor/storageadmin/views/snapshot.py +++ b/src/rockstor/storageadmin/views/snapshot.py @@ -153,19 +153,18 @@ def _create(self, share, snap_name, pool_device, request, uvisible, (snap_name, share.name)) handle_exception(Exception(e_msg), request) - real_name = snap_name snap_size = 0 qgroup_id = '0/na' if (snap_type != 'receiver'): if (snap_type == 'replication'): writable = False add_snap(share.pool, pool_device, share.subvol_name, - real_name, readonly=not writable) - snap_id = share_id(share.pool, pool_device, real_name) + snap_name, readonly=not writable) + snap_id = share_id(share.pool, pool_device, snap_name) qgroup_id = ('0/%s' % snap_id) snap_size, eusage = share_usage(share.pool, pool_device, qgroup_id) - s = Snapshot(share=share, name=snap_name, real_name=real_name, + s = Snapshot(share=share, name=snap_name, real_name=snap_name, size=snap_size, qgroup=qgroup_id, uvisible=uvisible, snap_type=snap_type, writable=writable) From 53d03ec7aca9a9746d2442d7dc63afcd20b59aca Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sat, 27 Jun 2015 20:19:34 -0700 Subject: [PATCH 03/40] Add owncloud as a rock-on. #697 --- src/rockstor/storageadmin/views/rockon.py | 12 ++++ .../storageadmin/views/rockon_helpers.py | 55 +++++++++++++++++-- src/rockstor/storageadmin/views/rockon_id.py | 11 ++-- 3 files changed, 69 insertions(+), 9 deletions(-) diff --git a/src/rockstor/storageadmin/views/rockon.py b/src/rockstor/storageadmin/views/rockon.py index 39197e7f8..af66ef3df 100644 --- a/src/rockstor/storageadmin/views/rockon.py +++ b/src/rockstor/storageadmin/views/rockon.py @@ -122,6 +122,12 @@ def post(self, request, command=None): else: po.protocol = ports[p] po.save() + else: + ports = {} + ports = [int(p) for p in ports.keys()] + for po in DPort.objects.filter(container=co): + if (po.containerp not in ports): + po.delete() if ('volumes' in containers[c]): volumes = containers[c]['volumes'] @@ -159,6 +165,12 @@ def post(self, request, command=None): except: pass cco.save() + else: + cc_d = {} + for cco in DCustomConfig.objects.filter(rockon=ro): + if (cco.key not in cc_d): + cco.delete() + if ('app_link' in rockons[r]): app_link = rockons[r]['app_link'] if (ro.state != 'installed'): diff --git a/src/rockstor/storageadmin/views/rockon_helpers.py b/src/rockstor/storageadmin/views/rockon_helpers.py index 9dbc70603..3f330a0be 100644 --- a/src/rockstor/storageadmin/views/rockon_helpers.py +++ b/src/rockstor/storageadmin/views/rockon_helpers.py @@ -17,6 +17,7 @@ """ from system.osi import run_command +from django.conf import settings from django_ztask.decorators import task from cli.rest_util import api_call from system.services import service_status @@ -77,6 +78,10 @@ def start(rid): new_status = 'started' try: rockon = RockOn.objects.get(id=rid) + if (rockon.name == 'OpenVPN'): + run_command([DOCKER, 'start', 'ovpn-data']) + if (rockon.name == 'OwnCloud'): + run_command([DOCKER, 'start', 'owncloud-postgres']) run_command([DOCKER, 'start', rockon.name]) except: new_status = 'start_failed' @@ -92,6 +97,10 @@ def stop(rid): try: rockon = RockOn.objects.get(id=rid) run_command([DOCKER, 'stop', rockon.name]) + if (rockon.name == 'OpenVPN'): + run_command([DOCKER, 'stop', 'ovpn-data']) + if (rockon.name == 'OwnCloud'): + run_command([DOCKER, 'stop', 'owncloud-postgres']) except: new_status = 'stop_failed' finally: @@ -121,6 +130,8 @@ def install(rid): btsync_install(rockon) elif (rockon.name == 'Syncthing'): syncthing_install(rockon) + elif (rockon.name == 'OwnCloud'): + owncloud_install(rockon) except Exception, e: logger.debug('exception while installing the rockon') logger.exception(e) @@ -138,6 +149,8 @@ def uninstall(rid, new_state='available'): rm_container(rockon.name) if (rockon.name == 'OpenVPN'): rm_container('ovpn-data') + if (rockon.name == 'OwnCloud'): + rm_container('owncloud-postgres') except Exception, e: logger.debug('exception while uninstalling rockon') logger.exception(e) @@ -157,7 +170,7 @@ def plex_install(rockon): image = c.dimage.name run_command([DOCKER, 'pull', image, ]) for v in DVolume.objects.filter(container=c): - share_mnt = '/mnt2/%s' % v.share.name + share_mnt = '%s%s' % (settings.MNT_PT, v.share.name) if (v.dest_dir == '/config'): config_share = share_mnt cmd.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir), ]) @@ -227,7 +240,7 @@ def transmission_install(rockon): image = c.dimage.name run_command([DOCKER, 'pull', image]) for v in DVolume.objects.filter(container=c): - share_mnt = '/mnt2/%s' % v.share.name + share_mnt = '%s%s' % (settings.MNT_PT, v.share.name) mount_share(v.share.name, share_mnt) cmd.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir), ]) for p in DPort.objects.filter(container=c): @@ -243,7 +256,7 @@ def btsync_install(rockon): image = c.dimage.name run_command([DOCKER, 'pull', image]) for v in DVolume.objects.filter(container=c): - share_mnt = '/mnt2/%s' % v.share.name + share_mnt = '%s%s' % (settings.MNT_PT, v.share.name) mount_share(v.share.name, share_mnt) cmd.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir), ]) for p in DPort.objects.filter(container=c): @@ -259,10 +272,44 @@ def syncthing_install(rockon): image = c.dimage.name run_command([DOCKER, 'pull', image]) for v in DVolume.objects.filter(container=c): - share_mnt = '/mnt2/%s' % v.share.name + share_mnt = '%s%s' % (settings.MNT_PT, v.share.name) mount_share(v.share.name, share_mnt) cmd.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir), ]) for p in DPort.objects.filter(container=c): cmd.extend(['-p', '%d:%d' % (p.hostp, p.containerp), ]) cmd.append(image) run_command(cmd) + + +def owncloud_install(rockon): + oc_name = 'owncloud' + dbc_name = '%s-postgres' % oc_name + rm_container(dbc_name) + rm_container(rockon.name) + for c in DContainer.objects.filter(rockon=rockon): + image = c.dimage.name + run_command([DOCKER, 'pull', image,]) + dbc_cmd = [DOCKER, 'run', '--name', dbc_name] + dbc = DContainer.objects.get(rockon=rockon, name=dbc_name) + vo = DVolume.objects.get(container=dbc) + share_mnt = '%s%s' % (settings.MNT_PT, vo.share.name) + dbc_cmd.extend(['-v', '%s:%s' % (share_mnt, vo.dest_dir)]) + db_user = DCustomConfig.objects.get(rockon=rockon, key='DB User') + db_pw = DCustomConfig.objects.get(rockon=rockon, key='DB Password') + dbc_cmd.extend(['-e', 'POSTGRES_USER=%s' % db_user, '-e', + 'POSTGRES_PASSWORD=%s' % db_pw, '-d', 'postgres']) + run_command(dbc_cmd) + logger.debug('postgres container initiated') + + oc = DContainer.objects.get(rockon=rockon, name=oc_name) + po = DPort.objects.get(container=oc) + oc_cmd = [DOCKER, 'run', '--link', '%s:db' % dbc_name, '-d', '--name', + rockon.name, '-p', '%s:%s' % (po.hostp, po.containerp)] + for v in DVolume.objects.filter(container=oc): + share_mnt = '%s%s' % (settings.MNT_PT, v.share.name) + oc_cmd.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir)]) + oc_cmd.extend(['-v', '%s/rockstor.key:/etc/ssl/private/owncloud.key' % settings.CERTDIR, + '-v', '%s/rockstor.cert:/etc/ssl/certs/owncloud.crt' % settings.CERTDIR, + '-e', 'HTTPS_ENABLED=true']) + oc_cmd.append(oc.dimage.name) + run_command(oc_cmd) diff --git a/src/rockstor/storageadmin/views/rockon_id.py b/src/rockstor/storageadmin/views/rockon_id.py index c239bd4e4..932554a15 100644 --- a/src/rockstor/storageadmin/views/rockon_id.py +++ b/src/rockstor/storageadmin/views/rockon_id.py @@ -92,11 +92,12 @@ def post(self, request, rid, command): if (not Share.objects.filter(name=sname).exists()): e_msg = ('Invalid Share(%s).' % sname) handle_exception(Exception(e_msg), request) - so = Share.objects.get(name=sname) - vo = DVolume.objects.get(container=co, - dest_dir=s) - vo.share = so - vo.save() + if (DVolume.objects.filter(container=co, dest_dir=s).exists()): + so = Share.objects.get(name=sname) + vo = DVolume.objects.get(container=co, + dest_dir=s) + vo.share = so + vo.save() for p in port_map.keys(): if (not DPort.objects.filter(containerp=p).exists()): e_msg = ('Invalid Port(%s).' % p) From 385d0ddd709b4c4c16462ce5d7a0681f2272b480 Mon Sep 17 00:00:00 2001 From: Garrett Kadillak Date: Tue, 30 Jun 2015 17:26:36 -0700 Subject: [PATCH 04/40] Fixes forms for rockons service, adds breadcrumbs --- .../js/templates/rockons/custom_choice.jst | 14 +++++++----- .../js/templates/rockons/install_choice.jst | 13 ++++++----- .../js/templates/rockons/install_summary.jst | 16 ++++++++------ .../js/templates/rockons/port_choice.jst | 12 +++++----- .../js/templates/rockons/vol_table.jst | 22 +++++++++++++------ 5 files changed, 47 insertions(+), 30 deletions(-) diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/custom_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/custom_choice.jst index 9100359dd..e3c59defe 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/custom_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/custom_choice.jst @@ -1,9 +1,11 @@ - +
-

Additional configuration needed for this Rock-on.

+
+

Additional configuration needed for this Rock-on.

+

diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst index 3ac764258..f95f4bc00 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst @@ -1,7 +1,10 @@ - -
-

Assign Share(s) to the Rock-on. For proper functionality, make sure to assign new/empty and dedicated Shares.

+
+
+
+ Assign Share(s) to the Rock-on. For proper functionality, make sure to assign new/empty and dedicated Shares. +
+
diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst index 0d1f87af3..acec3aff0 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst @@ -1,10 +1,12 @@ - +
-

Click submit to start the installation.

+
+

Click submit to start the installation.

+

diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst index f7c9e9f0a..3f7d1b98f 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst @@ -1,8 +1,10 @@ - +
-

Assign appropriate ports to the Rock-on. If unsure, go with default values provided.

+
+

Assign appropriate ports to the Rock-on. If unsure, go with default values provided.

+

diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst index 8e8992cb0..78f3cea33 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst @@ -2,22 +2,30 @@
-
+
+ <% volumes.each(function(volume, index) { %>
- <% volumes.each(function(volume, index) { %> - -
- <% shares.each(function(share, index) { %> <% }); %>
- <% }); %> +
+ Example help text +
+
+ <% }); %> +
+
+

* = This field is required

+
-
+ From 11205ddab534b57d8c6a19611217f385849c8226 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Wed, 1 Jul 2015 12:04:49 -0700 Subject: [PATCH 05/40] refactor rockon update logic. initial round. #697 --- src/rockstor/storageadmin/views/rockon.py | 115 +++++++++++++++------- 1 file changed, 80 insertions(+), 35 deletions(-) diff --git a/src/rockstor/storageadmin/views/rockon.py b/src/rockstor/storageadmin/views/rockon.py index af66ef3df..2179f76ee 100644 --- a/src/rockstor/storageadmin/views/rockon.py +++ b/src/rockstor/storageadmin/views/rockon.py @@ -20,7 +20,7 @@ from rest_framework.response import Response from django.db import transaction from storageadmin.models import (RockOn, DImage, DContainer, DPort, DVolume, - ContainerOption, DCustomConfig) + ContainerOption, DCustomConfig, DContainerLink) from storageadmin.serializers import RockOnSerializer from storageadmin.util import handle_exception import rest_framework_custom as rfc @@ -71,24 +71,35 @@ def post(self, request, command=None): if (command == 'update'): rockons = self._get_available(request) for r in rockons.keys(): + if (r != 'OwnCloud'): + continue name = r + r_d = rockons[r] + ui_d = r_d['ui'] ro = None if (RockOn.objects.filter(name=name).exists()): ro = RockOn.objects.get(name=name) if (ro.state != 'available'): #don't update metadata if it's installed or in some pending state. continue - ro.description = rockons[r]['description'] + ro.description = r_d['description'] + ro.website = r_d['website'] + ro.icon = r_d['icon'] + ro.link = ui_d['slug'] + ro.https = ui_d['https'] else: ro = RockOn(name=name, - description=rockons[r]['description'], + description=r_d['description'], version='1.0', state='available', - status='stopped') + status='stopped', website=r_d['website'], + icon=r_d['icon'], link=ui_d['slug'], + https=ui_d['https']) ro.save() - containers = rockons[r]['containers'] + containers = r_d['containers'] for c in containers.keys(): io = None - iname = containers[c]['image'] + c_d = containers[c] + iname = c_d['image'] if (DImage.objects.filter(name=iname).exists()): io = DImage.objects.get(name=iname) else: @@ -100,27 +111,38 @@ def post(self, request, command=None): co = DContainer.objects.get(name=c) co.dimage = io co.rockon = ro + co.launch_order = c_d['launch_order'] else: - co = DContainer(rockon=ro, dimage=io, name=c) + co = DContainer(rockon=ro, dimage=io, name=c, + launch_order=c_d['launch_order']) co.save() + if ('ports' in containers[c]): ports = containers[c]['ports'] for p in ports.keys(): + p_d = ports[p] po = None if (DPort.objects.filter(hostp=p).exists()): po = DPort.objects.get(hostp=p) po.container = co + po.containerp_default = p_d['default'] + po.description = p_d['description'] + po.uiport = p_d['ui'] + po.protocol = p_d['protocol'] elif (DPort.objects.filter(containerp=p, container=co).exists()): po = DPort.objects.get(containerp=p, container=co) po.hostp = p + po.containerp_default = p_d['default'] + po.description = p_d['description'] + po.uiport = p_d['ui'] + po.protocol = p_d['protocol'] else: - po = DPort(hostp=p, containerp=p, - container=co) - if (ports[p] == 'ui'): - po.uiport = True - else: - po.protocol = ports[p] + po = DPort(description=p_d['description'], + hostp=p, containerp=p, + containerp_default=p_d['default'], + container=co, uiport=p_d['ui'], + protocol=p_d['protocol']) po.save() else: ports = {} @@ -129,16 +151,24 @@ def post(self, request, command=None): if (po.containerp not in ports): po.delete() + v_d = {} if ('volumes' in containers[c]): - volumes = containers[c]['volumes'] - for v in volumes: - if (not DVolume.objects.filter( - dest_dir=v, container=co).exists()): - vo = DVolume(container=co, dest_dir=v) + v_d = containers[c]['volumes'] + for v in v_d.keys(): + cv_d = v_d[v] + if (DVolume.objects.filter(dest_dir=v, container=co).exists()): + vo = DVolume.objects.get(dest_dir=v, container=co) + vo.description = cv_d['description'] + vo.label = cv_d['label'] + vo.min_size = cv_d['min_size'] + vo.save() + else: + vo = DVolume(container=co, dest_dir=v, description=cv_d['description'], + min_size=cv_d['min_size'], label=cv_d['label']) vo.save() - for vo in DVolume.objects.filter(container=co): - if (vo.dest_dir not in volumes): - vo.delete() + for vo in DVolume.objects.filter(container=co): + if (vo.dest_dir not in v_d): + vo.delete() if ('opts' in containers[c]): options = containers[c]['opts'] @@ -149,14 +179,36 @@ def post(self, request, command=None): val=options[o]) oo.save() - if ('custom_config' in rockons[r]): - cc_d = rockons[r]['custom_config'] + if ('container_links' in r_d): + l_d = r_d['container_links'] + for cname in l_d.keys(): + ll = l_d[cname] + lsources = [l['source_container'] for l in ll] + co = DContainer.objects.get(rockon=ro, name=cname) + for clo in co.destination_container.all(): + if (clo.name not in lsources): + clo.delete() + for cl_d in ll: + sco = DContainer.objects.get(rockon=ro, name=cl_d['source_container']) + if (DContainerLink.objects.filter(source=sco, destination=co).exists()): + clo = DContainerLink.objects.get(source=sco) + clo.name = cl_d['name'] + clo.save() + else: + clo = DContainerLink(source=sco, + destination=co, name=cl_d['name']) + clo.save() + + if ('custom_config' in r_d): + cc_d = r_d['custom_config'] for k in cc_d: + ccc_d = cc_d[k] cco, created = DCustomConfig.objects.get_or_create( rockon=ro, key=k, - defaults={'description': cc_d[k]}) + defaults={'description': ccc_d['description'], 'label': ccc_d['label']}) if (not created): - cco.description = cc_d[k] + cco.description = ccc_d['description'] + cco.label = ccc_d['label'] if (not created and k == 'iprange' and ro.name == 'Plex'): from storageadmin.models import NetworkInterface try: @@ -170,22 +222,15 @@ def post(self, request, command=None): for cco in DCustomConfig.objects.filter(rockon=ro): if (cco.key not in cc_d): cco.delete() - - if ('app_link' in rockons[r]): - app_link = rockons[r]['app_link'] - if (ro.state != 'installed'): - ro.link = app_link - if ('website' in rockons[r]): - ro.website = rockons[r]['website'] - ro.save() return Response() def _get_available(self, request): msg = ('Network error while checking for updates. ' 'Please try again later.') with self._handle_exception(request, msg=msg): - r = requests.get('http://rockstor.com/rockons.json') - rockons = r.json() + #r = requests.get('http://rockstor.com/rockons.json') + #rockons = r.json() + from rockon_json import rockons return rockons @transaction.atomic From 479b449a4cce3015012673e9aa9b9dc55a5813f9 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Wed, 1 Jul 2015 13:21:41 -0700 Subject: [PATCH 06/40] rockon metadata for testing. --- .../storageadmin/views/rockon_json.py | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 src/rockstor/storageadmin/views/rockon_json.py diff --git a/src/rockstor/storageadmin/views/rockon_json.py b/src/rockstor/storageadmin/views/rockon_json.py new file mode 100644 index 000000000..ea616b713 --- /dev/null +++ b/src/rockstor/storageadmin/views/rockon_json.py @@ -0,0 +1,79 @@ +rockons = \ + {u'OpenVPN': {u'containers': {u'openvpn': {u'image': u'kylemanna/openvpn', + u'opts': {u'cap-add': u'NET_ADMIN'}, + u'ports': {u'1194': u'udp'}}, + u'ovpn-data': {u'image': u'busybox', + u'opts': {u'-v': u'/etc/openvpn'}}}, + u'custom_config': {u'servername': u'Your vpn server domainname or ip address. This is the server endpoint clients will try to connect. eg: vpn.rockstor.com'}, + u'description': u'Open Source VPN', + u'website': u'https://openvpn.net/'}, + u'Plex': {u'app_link': u'web', + u'containers': {u'plex': {u'image': u'timhaak/plex', + u'opts': {u'net': u'host'}, + u'ports': {u'32400': u'ui'}, + u'volumes': [u'/config', '/data',]}}, + u'custom_config': {u'iprange': u'ip range of your network'}, + u'description': u'Plex media server', + u'website': u'https://plex.tv/'}, + 'Transmission': {'app_link': '', + 'containers': {'transmission': {'image': 'dperson/transmission', + 'ports': {'9091': 'ui', + '51413': ''}, + 'volumes': ['/var/lib/transmission-daemon/downloads', + '/var/lib/transmission-daemon/incomplete',]}}, + 'custom_config': {'TRUSER': 'Set the username for your Transmission UI', + 'TRPASSWD': 'Password for the user'}, + 'description': 'Open Source BitTorrent client', + 'website': 'http://www.transmissionbt.com/'}, + 'BTSync': {'app_link': '', + 'containers': {'btsync': {'image': 'aostanin/btsync', + 'ports': {'8888': 'ui'}, + 'volumes': ['/data']}}, + 'description': 'BitTorrent Sync', + 'website': 'https://www.getsync.com/'}, + 'Syncthing': {'app_link': '', + 'containers': {'syncthing': {'image': 'istepanov/syncthing', + 'ports': {'8080': 'ui', + '22000': '', + '21025': 'udp'}, + 'volumes': ['/home/syncthing/.config/syncthing', + '/home/syncthing/Sync',]}}, + 'description': 'Continuous File Synchronization', + 'website': 'https://syncthing.net/',}, + 'OwnCloud': {'ui': {'slug': '', + 'https': True,}, + 'containers': {'owncloud': {'image': 'pschmitt/owncloud', + 'ports': {'443': {'ui': True, + 'default': 8080, + 'protocol': 'tcp', + 'description': 'The port where OwnCloud UI runs. Since Rockstor WebUI runs on 443, choose a different port or the suggested default.',},}, + 'volumes': {'/var/www/owncloud/data': + {'description': 'Choose a dedicated Share for OwnCloud data. Eg: create a Share called owncloud-data for this purpose alone.', + 'min_size': 1073741824, + 'label': 'Data directory',}, + '/var/www/owncloud/config': + {'description': 'Choose a dedicated Share for OwnCloud configuration. Eg: create a Share called owncloud-config for this purpose alone.', + 'label': 'Config directory', + 'min_size': 1073741824,},}, + 'launch_order': 2,}, + 'owncloud-postgres': {'image': 'postgres', + 'volumes': {'/var/lib/pgsql/data': + {'description': 'Choose a dedicated Share for OwnClouds postgresql database. Eg: create a Share called owncloud-db for this purpose.', + 'label': 'Database', + 'min_size': 1073741824, }, }, + 'launch_order': 1}, }, + 'container_links': {'owncloud': [{'source_container': 'owncloud-postgres', + 'name': 'db'},]}, + 'custom_config': {'db_user': + {'label': 'DB User', + 'description': 'Choose a username for the admin of OwnCloud database.',}, + 'db_pw': + {'label': 'DB Password', + 'description': 'Choose a secure password for the database admin user',},}, + 'description': 'Secure file sharing and hosting', + 'website': 'https://owncloud.org/', + 'icon': 'https://owncloud.org/wp-content/themes/owncloudorgnew/assets/img/common/logo_owncloud.svg',}, + } + +# help text for Volumes +# It is strongly recommended From da2947585549d804733d727052603621de5d6e0b Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Wed, 1 Jul 2015 14:31:18 -0700 Subject: [PATCH 07/40] install wizard changes. #697 --- .../storageadmin/js/templates/rockons/install_choice.jst | 5 +---- .../storageadmin/js/templates/rockons/vol_table.jst | 8 +++----- .../js/templates/services/configure_docker.jst | 6 ++++-- .../static/storageadmin/js/views/configure_service.js | 2 +- .../storageadmin/static/storageadmin/js/views/rockons.js | 2 +- 5 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst index f95f4bc00..5cdd02a5c 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst @@ -1,10 +1,7 @@ -
-
- Assign Share(s) to the Rock-on. For proper functionality, make sure to assign new/empty and dedicated Shares. -
+
Shares provide storage to Rock-ons and they must be assigned properly. Make sure to read each field's tooltip for specific information. We strongly recommend that you create dedicated Shares assignments.
diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst index 78f3cea33..cc9f2a53e 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst @@ -6,7 +6,7 @@
<% volumes.each(function(volume, index) { %>
- +
-
- Example help text -
+ +
<% }); %>
@@ -28,4 +27,3 @@
- diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/services/configure_docker.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/services/configure_docker.jst index 105d0b2b4..59cb4eea2 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/services/configure_docker.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/services/configure_docker.jst @@ -19,7 +19,7 @@ */ -

Configure <%= service.get('display_name') %>

+

Configure <%= service.get('display_name') %> Service

@@ -29,6 +29,9 @@
+
+
We strongly recommend that you create a separate Share(at least 5GB size) for this purpose. During the lifetime of Rock-ons, several snapshots will be created and space could fill up quickly. It is best managed in a separate Share to avoid clobbering other data.
+
<% if (shares.length === 0) {%> @@ -37,7 +40,6 @@

Go to shares <% } else { %> -    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/custom_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/custom_choice.jst index e3c59defe..eb8ecc0c6 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/custom_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/custom_choice.jst @@ -3,9 +3,8 @@
  • Ports
  • Config
  • -
    -

    Additional configuration needed for this Rock-on.

    +

    Additional configuration is needed for this Rock-on. Make sure to read tooltips for specific information before making your selection.


    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst index 5cdd02a5c..4547aaf95 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst @@ -2,6 +2,6 @@
  • Shares
  • -
    Shares provide storage to Rock-ons and they must be assigned properly. Make sure to read each field's tooltip for specific information. We strongly recommend that you create dedicated Shares assignments.
    +

    Shares provide storage to the Rock-on and they must be assigned properly. Make sure to read each field's tooltip for specific information. We strongly recommend that you create dedicated Share assignments.

    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst index 3f7d1b98f..9f8c1fa2b 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst @@ -2,9 +2,7 @@
  • Shares
  • Ports
  • -
    -

    Assign appropriate ports to the Rock-on. If unsure, go with default values provided.

    +

    Ports provide network access to and from the Rock-on. Correctly assigning them is critical. Make sure to read each field's tooltip before making your selection.

    -
    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst index e8a633b86..c3af66e61 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst @@ -9,10 +9,11 @@
    <% ports.each(function(port, index) { %> - +
    - + +
    <% }); %>
    diff --git a/src/rockstor/storageadmin/views/rockon.py b/src/rockstor/storageadmin/views/rockon.py index d83fe4051..e96af334e 100644 --- a/src/rockstor/storageadmin/views/rockon.py +++ b/src/rockstor/storageadmin/views/rockon.py @@ -141,7 +141,7 @@ def post(self, request, command=None): po.label = p_d['label'] else: po = DPort(description=p_d['description'], - hostp=p, containerp=p, + hostp=p, containerp=p_d['default'], containerp_default=p_d['default'], container=co, uiport=p_d['ui'], protocol=p_d['protocol'], diff --git a/src/rockstor/storageadmin/views/rockon_json.py b/src/rockstor/storageadmin/views/rockon_json.py index 41f1fd4ee..be094eba3 100644 --- a/src/rockstor/storageadmin/views/rockon_json.py +++ b/src/rockstor/storageadmin/views/rockon_json.py @@ -47,7 +47,7 @@ 'default': 8080, 'protocol': 'tcp', 'label': 'UI port', - 'description': 'The port where OwnCloud UI runs. Since Rockstor WebUI runs on 443, choose a different port or the suggested default.',},}, + 'description': 'OwnCloud UI port. Since Rockstor WebUI runs on 443, choose a different port or the suggested default.',},}, 'volumes': {'/var/www/owncloud/data': {'description': 'Choose a dedicated Share for OwnCloud data. Eg: create a Share called owncloud-data for this purpose alone.', 'min_size': 1073741824, @@ -59,7 +59,7 @@ 'launch_order': 2,}, 'owncloud-postgres': {'image': 'postgres', 'volumes': {'/var/lib/pgsql/data': - {'description': 'Choose a dedicated Share for OwnClouds postgresql database. Eg: create a Share called owncloud-db for this purpose.', + {'description': 'Choose a dedicated Share for OwnClouds postgresql database. Eg: create a Share called owncloud-db for this purpose alone.', 'label': 'Database', 'min_size': 1073741824, }, }, 'launch_order': 1}, }, @@ -67,7 +67,7 @@ 'name': 'db'},]}, 'custom_config': {'db_user': {'label': 'DB User', - 'description': 'Choose a username for the admin of OwnCloud database.',}, + 'description': 'Choose a administrator username for the OwnCloud database.',}, 'db_pw': {'label': 'DB Password', 'description': 'Choose a secure password for the database admin user',},}, From 96b2b5ba92a020aaccbbe655101abfe96cb11d0a Mon Sep 17 00:00:00 2001 From: Garrett Kadillak Date: Wed, 1 Jul 2015 15:14:59 -0700 Subject: [PATCH 10/40] Update selects for forms, add validation --- buildout.cfg | 1 - .../storageadmin/js/templates/rockons/install_choice.jst | 2 +- .../js/templates/rockons/install_complete.jst | 2 +- .../js/templates/rockons/install_summary.jst | 2 +- .../storageadmin/js/templates/rockons/port_choice.jst | 2 +- .../storageadmin/js/templates/rockons/ports_form.jst | 8 ++++---- .../static/storageadmin/js/templates/rockons/rockons.jst | 2 +- .../js/templates/rockons/update_complete.jst | 2 +- .../storageadmin/js/templates/rockons/vol_table.jst | 9 +++------ 9 files changed, 13 insertions(+), 17 deletions(-) diff --git a/buildout.cfg b/buildout.cfg index 2c7f69632..55a540966 100644 --- a/buildout.cfg +++ b/buildout.cfg @@ -18,7 +18,6 @@ extends = base-buildout.cfg parts = stop-servers - rpm-deps django scripts postgres-setup diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst index 4547aaf95..747fd9913 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst @@ -2,6 +2,6 @@
  • Shares
  • -

    Shares provide storage to the Rock-on and they must be assigned properly. Make sure to read each field's tooltip for specific information. We strongly recommend that you create dedicated Share assignments.

    +

    Shares provide storage to Rock-ons and they must be assigned properly. Make sure to read each field's tooltip for specific information. We strongly recommend that you create dedicated Shares assignments.

    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_complete.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_complete.jst index 0f3b2f941..691791064 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_complete.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_complete.jst @@ -1,3 +1,3 @@
    -

    Installation is in progress.
    It can take a while depending on the type of Rock-on, network speed and other factors.
    You can monitor the Rock-ons page which refreshes periodically during the installation.

    +

    Installation is in progress.
    It can take a while depending on the type of Rock-on, network speed and other factors.
    You can monitor the Rock-ons page which refreshes periodically during the installation.

    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst index acec3aff0..86d963803 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst @@ -6,7 +6,7 @@
    -

    Click submit to start the installation.

    +

    Click submit to start the installation.


    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst index 9f8c1fa2b..ab63d1397 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst @@ -3,6 +3,6 @@
  • Ports
  • -

    Ports provide network access to and from the Rock-on. Correctly assigning them is critical. Make sure to read each field's tooltip before making your selection.

    +

    Assign appropriate ports to the Rock-on. If unsure, go with default values provided.

    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst index c3af66e61..e041f224a 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst @@ -3,16 +3,16 @@
    -
    +
    <% ports.each(function(port, index) { %> - + -
    - +
    +
    <% }); %> diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst index 97b745e82..4b25533f4 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst @@ -21,7 +21,7 @@
    <% if ( !status ) {%> -
    +
    Warning! Rock-on service is not running. Please turn it on to use features on this screen.
    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/update_complete.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/update_complete.jst index d9c339bbc..c45a265f4 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/update_complete.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/update_complete.jst @@ -1,3 +1,3 @@
    -

    Click submit to start the update. You can monitor the Rock-ons page which refreshes periodically during the update.

    +

    Click submit to start the update. You can monitor the Rock-ons page which refreshes periodically during the update.

    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst index cc9f2a53e..b847cfc0c 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst @@ -8,8 +8,10 @@
    - + <% shares.each(function(share, index) { %> + <% }); %> @@ -18,11 +20,6 @@
    <% }); %> -
    -
    -

    * = This field is required

    -
    -
    From eedc6182155eb9ca90fe2dbedf63f81750097316 Mon Sep 17 00:00:00 2001 From: Garrett Kadillak Date: Wed, 1 Jul 2015 16:00:46 -0700 Subject: [PATCH 11/40] Change more forms to be horizontal, fix tooltip --- .../storageadmin/js/templates/rockons/cc_form.jst | 12 +++++++----- .../js/templates/rockons/custom_choice.jst | 2 +- .../js/templates/rockons/install_summary.jst | 2 +- .../storageadmin/js/templates/rockons/ports_form.jst | 3 ++- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/cc_form.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/cc_form.jst index 0b8bdab7c..86c31806b 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/cc_form.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/cc_form.jst @@ -3,17 +3,19 @@
    -
    +
    + <% cc.each(function(cci, index) { %>
    - <% cc.each(function(cci, index) { %> -
    + <% }); %>
    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/custom_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/custom_choice.jst index eb8ecc0c6..eb6e46709 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/custom_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/custom_choice.jst @@ -6,5 +6,5 @@

    Additional configuration is needed for this Rock-on. Make sure to read tooltips for specific information before making your selection.

    -
    +
    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst index 86d963803..9594158c7 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst @@ -8,5 +8,5 @@

    Click submit to start the installation.

    -
    +
    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst index e041f224a..b25b3f919 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst @@ -13,8 +13,9 @@
    - +
    + <% }); %>
    From c431caa84bc30df3974d52c03e3e6ae307996056 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Wed, 1 Jul 2015 16:22:16 -0700 Subject: [PATCH 12/40] add form validation to share selection screen. #697 --- .../js/templates/rockons/install_choice.jst | 2 +- .../js/templates/rockons/port_choice.jst | 2 +- .../static/storageadmin/js/views/rockons.js | 19 +++++++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst index 747fd9913..1bf2a118f 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst @@ -2,6 +2,6 @@
  • Shares
  • -

    Shares provide storage to Rock-ons and they must be assigned properly. Make sure to read each field's tooltip for specific information. We strongly recommend that you create dedicated Shares assignments.

    +

    Shares provide storage to the Rock-on and they must be assigned properly. Make sure to read each field's tooltip for specific information before making a selection. We strongly recommend that you create dedicated Shares assignments.

    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst index ab63d1397..90c90116c 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst @@ -3,6 +3,6 @@
  • Ports
  • -

    Assign appropriate ports to the Rock-on. If unsure, go with default values provided.

    +

    Ports provide network access to the Rock-on. Read the tooltips and make appropriate selection or choose suggested default.

    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js b/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js index 763d2a856..6eebd0781 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js +++ b/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js @@ -389,9 +389,28 @@ RockonShareChoice = RockstorWizardPage.extend({ renderVolumes: function() { this.$('#ph-vols-table').html(this.vol_template({volumes: this.volumes, shares: this.shares})); + //form validation + this.volForm = this.$('#vol-select-form'); + var rules = {}; + var messages = {}; + this.volumes.each(function(volume) { + rules[volume.id] = { required: true }; + messages[volume.id] = "Please read the tooltip and make the right selection"; + }); + this.validator = this.volForm.validate({ + rules: rules, + messages: messages + }); }, save: function() { + + // Validate the form + if (!this.volForm.valid()) { + this.validator.showErrors(); + return $.Deferred().reject(); + } + var share_map = {}; var volumes = this.volumes.filter(function(volume) { share_map[volume.get('dest_dir')] = this.$('#' + volume.id).val(); From d7e7577364e4dc4998ca0c4ac60d115fc0ef229f Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Wed, 1 Jul 2015 18:42:21 -0700 Subject: [PATCH 13/40] add qgroup cleanup script. #697 --- src/rockstor/qgroup_clean.py | 53 ++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 src/rockstor/qgroup_clean.py diff --git a/src/rockstor/qgroup_clean.py b/src/rockstor/qgroup_clean.py new file mode 100644 index 000000000..f138516c3 --- /dev/null +++ b/src/rockstor/qgroup_clean.py @@ -0,0 +1,53 @@ +""" +Copyright (c) 2012-2015 RockStor, Inc. +This file is part of RockStor. + +RockStor is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published +by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + +RockStor is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +BTRFS = '/usr/sbin/btrfs' + + +import re +from django.conf import settings +from storageadmin.models import Pool +from system.osi import run_command + + +def main(): + for p in Pool.objects.all(): + mnt_pt = '%s%s' % (settings.MNT_PT, p.name) + o, e, rc = run_command([BTRFS, 'subvol', 'list', mnt_pt]) + subvol_ids = [] + for l in o: + if (re.match('ID ', l) is not None): + subvol_ids.append(l.split()[1]) + + o, e, rc = run_command([BTRFS, 'qgroup', 'show', mnt_pt]) + qgroup_ids = [] + for l in o: + if (re.match('0/', l) is not None): + q = l.split()[0].split('/')[1] + if (q == '5'): + continue + qgroup_ids.append(l.split()[0].split('/')[1]) + + for q in qgroup_ids: + if (q not in subvol_ids): + print ('qgroup %s not in use. deleting' % q) + run_command([BTRFS, 'qgroup', 'destroy', '0/%s' % q, mnt_pt]) + + +if __name__ == '__main__': + main() From 6f84c05f90665a33dde1a866d01cbca891b6f404 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Wed, 1 Jul 2015 21:03:01 -0700 Subject: [PATCH 14/40] install backend improvement. #697 --- src/rockstor/storageadmin/views/rockon.py | 9 ++- .../storageadmin/views/rockon_helpers.py | 67 +++++++++---------- .../storageadmin/views/rockon_json.py | 2 +- 3 files changed, 38 insertions(+), 40 deletions(-) diff --git a/src/rockstor/storageadmin/views/rockon.py b/src/rockstor/storageadmin/views/rockon.py index e96af334e..72879b727 100644 --- a/src/rockstor/storageadmin/views/rockon.py +++ b/src/rockstor/storageadmin/views/rockon.py @@ -79,7 +79,8 @@ def post(self, request, command=None): ro = None if (RockOn.objects.filter(name=name).exists()): ro = RockOn.objects.get(name=name) - if (ro.state != 'available'): + logger.debug('ro state = %s' % ro.state) + if (ro.state != 'available' and (re.match('pending', ro.state) is not None)): #don't update metadata if it's installed or in some pending state. continue ro.description = r_d['description'] @@ -155,8 +156,8 @@ def post(self, request, command=None): po.delete() v_d = {} - if ('volumes' in containers[c]): - v_d = containers[c]['volumes'] + if ('volumes' in c_d): + v_d = c_d['volumes'] for v in v_d.keys(): cv_d = v_d[v] if (DVolume.objects.filter(dest_dir=v, container=co).exists()): @@ -169,6 +170,8 @@ def post(self, request, command=None): vo = DVolume(container=co, dest_dir=v, description=cv_d['description'], min_size=cv_d['min_size'], label=cv_d['label']) vo.save() + + logger.debug('v_d = %s' % v_d) for vo in DVolume.objects.filter(container=co): if (vo.dest_dir not in v_d): vo.delete() diff --git a/src/rockstor/storageadmin/views/rockon_helpers.py b/src/rockstor/storageadmin/views/rockon_helpers.py index 3f330a0be..8869bbb64 100644 --- a/src/rockstor/storageadmin/views/rockon_helpers.py +++ b/src/rockstor/storageadmin/views/rockon_helpers.py @@ -22,7 +22,7 @@ from cli.rest_util import api_call from system.services import service_status from storageadmin.models import (RockOn, DContainer, DVolume, DPort, - DCustomConfig, Share, Disk) + DCustomConfig, Share, Disk, DContainerLink) from fs import btrfs DOCKER = '/usr/bin/docker' @@ -69,6 +69,7 @@ def rockon_status(name): def rm_container(name): + o, e, rc = run_command([DOCKER, 'stop', name], throw=False) o, e, rc = run_command([DOCKER, 'rm', name], throw=False) return logger.debug('Attempted to remove a container(%s). out: %s ' 'err: %s rc: %s.' % (name, o, e, rc)) @@ -78,11 +79,8 @@ def start(rid): new_status = 'started' try: rockon = RockOn.objects.get(id=rid) - if (rockon.name == 'OpenVPN'): - run_command([DOCKER, 'start', 'ovpn-data']) - if (rockon.name == 'OwnCloud'): - run_command([DOCKER, 'start', 'owncloud-postgres']) - run_command([DOCKER, 'start', rockon.name]) + for c in DContainer.objects.filter(rockon=rockon).order_by('launch_order'): + run_command([DOCKER, 'start', c.name]) except: new_status = 'start_failed' finally: @@ -282,34 +280,31 @@ def syncthing_install(rockon): def owncloud_install(rockon): - oc_name = 'owncloud' - dbc_name = '%s-postgres' % oc_name - rm_container(dbc_name) - rm_container(rockon.name) for c in DContainer.objects.filter(rockon=rockon): - image = c.dimage.name - run_command([DOCKER, 'pull', image,]) - dbc_cmd = [DOCKER, 'run', '--name', dbc_name] - dbc = DContainer.objects.get(rockon=rockon, name=dbc_name) - vo = DVolume.objects.get(container=dbc) - share_mnt = '%s%s' % (settings.MNT_PT, vo.share.name) - dbc_cmd.extend(['-v', '%s:%s' % (share_mnt, vo.dest_dir)]) - db_user = DCustomConfig.objects.get(rockon=rockon, key='DB User') - db_pw = DCustomConfig.objects.get(rockon=rockon, key='DB Password') - dbc_cmd.extend(['-e', 'POSTGRES_USER=%s' % db_user, '-e', - 'POSTGRES_PASSWORD=%s' % db_pw, '-d', 'postgres']) - run_command(dbc_cmd) - logger.debug('postgres container initiated') - - oc = DContainer.objects.get(rockon=rockon, name=oc_name) - po = DPort.objects.get(container=oc) - oc_cmd = [DOCKER, 'run', '--link', '%s:db' % dbc_name, '-d', '--name', - rockon.name, '-p', '%s:%s' % (po.hostp, po.containerp)] - for v in DVolume.objects.filter(container=oc): - share_mnt = '%s%s' % (settings.MNT_PT, v.share.name) - oc_cmd.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir)]) - oc_cmd.extend(['-v', '%s/rockstor.key:/etc/ssl/private/owncloud.key' % settings.CERTDIR, - '-v', '%s/rockstor.cert:/etc/ssl/certs/owncloud.crt' % settings.CERTDIR, - '-e', 'HTTPS_ENABLED=true']) - oc_cmd.append(oc.dimage.name) - run_command(oc_cmd) + rm_container(c.name) + run_command([DOCKER, 'pull', c.dimage.name]) + + for c in DContainer.objects.filter(rockon=rockon).order_by('launch_order'): + cmd = [DOCKER, 'run', '-d', '--name', c.name, ] + if (c.dimage.name == 'postgres'): + db_user = DCustomConfig.objects.get(rockon=rockon, key='db_user') + db_pw = DCustomConfig.objects.get(rockon=rockon, key='db_pw') + cmd.extend(['-e', 'POSTGRES_USER=%s' % db_user, '-e', + 'POSTGRES_PASSWORD=%s' % db_pw]) + for po in DPort.objects.filter(container=c): + pstr = '%s:%s' % (po.hostp, po.containerp) + if (po.protocol is not None): + pstr = '%s/%s' % (pstr, po.protocol) + cmd.extend(['-p', '%s:%s' % (po.hostp, po.containerp)]) + for lo in DContainerLink.objects.filter(destination=c): + cmd.extend(['--link', '%s:%s' % (lo.source.name, lo.name)]) + for v in DVolume.objects.filter(container=c): + share_mnt = ('%s%s' % (settings.MNT_PT, v.share.name)) + cmd.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir)]) + if (c.name == 'owncloud'): + cmd.extend(['-v', '%s/rockstor.key:/etc/ssl/private/owncloud.key' % settings.CERTDIR, + '-v', '%s/rockstor.cert:/etc/ssl/certs/owncloud.crt' % settings.CERTDIR, + '-e', 'HTTPS_ENABLED=true']) + cmd.append(c.dimage.name) + logger.debug('docker cmd = %s' % cmd) + run_command(cmd) diff --git a/src/rockstor/storageadmin/views/rockon_json.py b/src/rockstor/storageadmin/views/rockon_json.py index be094eba3..451b625a2 100644 --- a/src/rockstor/storageadmin/views/rockon_json.py +++ b/src/rockstor/storageadmin/views/rockon_json.py @@ -58,7 +58,7 @@ 'min_size': 1073741824,},}, 'launch_order': 2,}, 'owncloud-postgres': {'image': 'postgres', - 'volumes': {'/var/lib/pgsql/data': + 'volumes': {'/var/lib/postgresql/data': {'description': 'Choose a dedicated Share for OwnClouds postgresql database. Eg: create a Share called owncloud-db for this purpose alone.', 'label': 'Database', 'min_size': 1073741824, }, }, From 04235f0e34d2aa7ada8a9af230e10548308a5f5b Mon Sep 17 00:00:00 2001 From: Garrett Kadillak Date: Thu, 2 Jul 2015 11:15:24 -0700 Subject: [PATCH 15/40] Adds overlay for state of rockon --- .../static/storageadmin/css/style.css | 20 ++++++ .../js/templates/rockons/rockons.jst | 69 ++++++++++++++----- .../js/templates/rockons/vol_table.jst | 2 +- 3 files changed, 72 insertions(+), 19 deletions(-) diff --git a/src/rockstor/storageadmin/static/storageadmin/css/style.css b/src/rockstor/storageadmin/static/storageadmin/css/style.css index 9a9798e05..6bbacb02a 100644 --- a/src/rockstor/storageadmin/static/storageadmin/css/style.css +++ b/src/rockstor/storageadmin/static/storageadmin/css/style.css @@ -2526,4 +2526,24 @@ This file is generated by `grunt build`, do not edit it by hand. .shorten-input { width: 50%; +} + +.overlay { + position:absolute; + top:0; + left:0; + right:0; + bottom:0; + background-color:rgba(0, 0, 0, 0.57); + background: url(data:;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAABl0RVh0U29mdHdhcmUAUGFpbnQuTkVUIHYzLjUuNUmK/OAAAAATSURBVBhXY2RgYNgHxGAAYuwDAA78AjwwRoQYAAAAAElFTkSuQmCC) repeat scroll transparent\9; /* ie fallback png background image */ + z-index:9999; + color:white; +} + +.overlay-text { + display: inline-block; + vertical-align: middle; + padding: 10px 15px; + position:relative; + font-weight:bold; } \ No newline at end of file diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst index 4b25533f4..735f4122b 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst @@ -44,8 +44,33 @@ <% rockons.each(function(rockon, index) { %> <% if (rockon.get('state') == 'installed' || rockon.get('state').match('pending')) { %> <% installed += 1; %> -
    +
    + <% if (rockon.get('state') === 'pending_install') { %> +
    +
    + +
    +

    Installing...

    +
    +
    +
    + <% } %> + + <% if (rockon.get('state') === 'pending_uninstall') { %> +
    +
    + +
    +

    Uninstalling...

    +
    + +
    +
    + <% } %> + +
    +

    <%= rockon.get('name') %>

    <%= rockon.get('description') %>

    @@ -101,25 +126,33 @@ <% rockons.each(function(rockon, index) { %> <% if (rockon.get('state') == 'available' || rockon.get('state') == 'install_failed') { %> <% all += 1; %> -
    -
    -
    -

    <%= rockon.get('name') %>

    -

    <%= rockon.get('description') %>

    - <% if (rockon.get('state') == 'install_failed') { %> - Failed to install in the previous attempt. Here's how you can proceed. -
      -
    • Check logs in /opt/rockstor/var/log for clues.
    • -
    • Install again.
    • -
    • If the problem persists, post on the forums or email support@rockstor.com
    • -
    - <% } %> - Install -
    +
    +
    + + + +
    + +
    +

    <%= rockon.get('name') %>

    + <%= rockon.get('description') %> + <% if (rockon.get('state') == 'install_failed') { %> + Failed to install in the previous attempt. Here's how you can proceed. +
      +
    • Check logs in /opt/rockstor/var/log for clues.
    • +
    • Install again.
    • +
    • If the problem persists, post on the forums or email support@rockstor.com
    • +
    + <% } %>
    +
    + Install +
    + <% } %> +
    - <% } %> - <% }); %> + <% }); %> + <% if (all == 0) { %>
    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst index b847cfc0c..bd2c3c358 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst @@ -9,7 +9,7 @@
    +
    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst index 20099ffbf..0b7c58f38 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst @@ -63,9 +63,9 @@

    Uninstalling...

    - +
    -
    +
    <% } %> @@ -91,15 +91,10 @@
    ON
      

    - <% if (ui_map[rockon.get('id')]) { %> + <% if (ui_map[rockon.get('id')] && (rockon.get('status') == 'started')) { %> Open <% } %> Uninstall - <% } else { %> - <% if (rockon.get('state').match('pending') || rockon.get('status').match('pending')) { %> -

    Rockon is in transition state(<%= rockon.get('state') %>/<%= rockon.get('status') %>). Please wait...

    - <% } %> - Uninstall <% } %>
    @@ -144,7 +139,7 @@
    <% } %> <% }); %> - + <% if (all == 0) { %>
    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/summary_table.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/summary_table.jst index 8a151d4d6..de2d41bb6 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/summary_table.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/summary_table.jst @@ -18,8 +18,8 @@ <% for (p in port_map) { %> Port - <%= port_map[p] %> <%= p %> + <%= port_map[p] %> <% } %> diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst index bd2c3c358..ef541c21e 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst @@ -9,7 +9,7 @@
    -
    - <% }); %>
    - + <% }); %>
    -
    -
    From 4808d85c48d34a0b10aed9bd2732d3bf4247b41a Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sat, 4 Jul 2015 09:36:32 -0700 Subject: [PATCH 30/40] bunch of improvements for more testing. #697 --- .../0031_auto__add_field_rockon_ui.py | 500 +++++++++++++++++ ...p_default__add_field_dport_hostp_defaul.py | 508 ++++++++++++++++++ ...to__add_field_rockon_volume_add_support.py | 501 +++++++++++++++++ .../0034_auto__add_field_rockon_more_info.py | 502 +++++++++++++++++ .../0035_auto__chg_field_dvolume_min_size.py | 500 +++++++++++++++++ src/rockstor/storageadmin/models/rockon.py | 19 +- src/rockstor/storageadmin/serializers.py | 1 + .../static/storageadmin/js/views/rockons.js | 12 +- src/rockstor/storageadmin/views/rockon.py | 21 +- .../storageadmin/views/rockon_helpers.py | 23 +- .../storageadmin/views/rockon_json.py | 222 ++++---- 11 files changed, 2687 insertions(+), 122 deletions(-) create mode 100644 src/rockstor/storageadmin/migrations/0031_auto__add_field_rockon_ui.py create mode 100644 src/rockstor/storageadmin/migrations/0032_auto__del_field_dport_containerp_default__add_field_dport_hostp_defaul.py create mode 100644 src/rockstor/storageadmin/migrations/0033_auto__add_field_rockon_volume_add_support.py create mode 100644 src/rockstor/storageadmin/migrations/0034_auto__add_field_rockon_more_info.py create mode 100644 src/rockstor/storageadmin/migrations/0035_auto__chg_field_dvolume_min_size.py diff --git a/src/rockstor/storageadmin/migrations/0031_auto__add_field_rockon_ui.py b/src/rockstor/storageadmin/migrations/0031_auto__add_field_rockon_ui.py new file mode 100644 index 000000000..e50b3cffb --- /dev/null +++ b/src/rockstor/storageadmin/migrations/0031_auto__add_field_rockon_ui.py @@ -0,0 +1,500 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'RockOn.ui' + db.add_column(u'storageadmin_rockon', 'ui', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'RockOn.ui' + db.delete_column(u'storageadmin_rockon', 'ui') + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'oauth2_provider.application': { + 'Meta': {'object_name': 'Application'}, + 'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'Ad3WjP1_=tZwfeXDkzSYAAQR2vSmscE;uUDiwLN8'", 'unique': 'True', 'max_length': '100'}), + 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u'IaE5Yk.IDSPjXXv8I;Iy29AnB?2?GPtk2zy5KNedVy1F;Jho;QpLux3hn6GXfZBWVgrZyv!AAnKa9Gh1HQ?A@ro8NNkZTpNiiqp0aEe:G09cUOapdg;=aXdi@m;q5?=m'", 'max_length': '255', 'blank': 'True'}), + 'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'redirect_uris': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + }, + 'storageadmin.advancednfsexport': { + 'Meta': {'object_name': 'AdvancedNFSExport'}, + 'export_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'storageadmin.apikeys': { + 'Meta': {'object_name': 'APIKeys'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), + 'user': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '8'}) + }, + 'storageadmin.appliance': { + 'Meta': {'object_name': 'Appliance'}, + 'client_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'client_secret': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'current_appliance': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'hostname': ('django.db.models.fields.CharField', [], {'default': "'Rockstor'", 'max_length': '128'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'mgmt_port': ('django.db.models.fields.IntegerField', [], {'default': '443'}), + 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) + }, + 'storageadmin.containeroption': { + 'Meta': {'object_name': 'ContainerOption'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.dashboardconfig': { + 'Meta': {'object_name': 'DashboardConfig'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True'}), + 'widgets': ('django.db.models.fields.CharField', [], {'max_length': '4096'}) + }, + 'storageadmin.dcontainer': { + 'Meta': {'object_name': 'DContainer'}, + 'dimage': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DImage']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'launch_order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}), + 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}) + }, + 'storageadmin.dcontainerlink': { + 'Meta': {'unique_together': "(('destination', 'name'),)", 'object_name': 'DContainerLink'}, + 'destination': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'destination_container'", 'to': "orm['storageadmin.DContainer']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'source': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.DContainer']", 'unique': 'True'}) + }, + 'storageadmin.dcustomconfig': { + 'Meta': {'unique_together': "(('rockon', 'key'),)", 'object_name': 'DCustomConfig'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}), + 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) + }, + 'storageadmin.dimage': { + 'Meta': {'object_name': 'DImage'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'repo': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'tag': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.disk': { + 'Meta': {'object_name': 'Disk'}, + 'btrfs_uuid': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), + 'offline': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'parted': ('django.db.models.fields.BooleanField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'serial': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'smart_available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'smart_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'transport': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'vendor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) + }, + 'storageadmin.dport': { + 'Meta': {'unique_together': "(('container', 'containerp'),)", 'object_name': 'DPort'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + 'containerp': ('django.db.models.fields.IntegerField', [], {}), + 'containerp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'hostp': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'protocol': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'uiport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.dvolume': { + 'Meta': {'unique_together': "(('container', 'dest_dir'),)", 'object_name': 'DVolume'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'dest_dir': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'min_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']", 'null': 'True'}), + 'uservol': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.group': { + 'Meta': {'object_name': 'Group'}, + 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'gid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'groupname': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'storageadmin.installedplugin': { + 'Meta': {'object_name': 'InstalledPlugin'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'install_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'plugin_meta': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Plugin']"}) + }, + 'storageadmin.iscsitarget': { + 'Meta': {'object_name': 'IscsiTarget'}, + 'dev_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), + 'dev_size': ('django.db.models.fields.IntegerField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), + 'tid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'tname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) + }, + 'storageadmin.netatalkshare': { + 'Meta': {'object_name': 'NetatalkShare'}, + 'description': ('django.db.models.fields.CharField', [], {'default': "'afp on rockstor'", 'max_length': '1024'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'netatalkshare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}), + 'time_machine': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}) + }, + 'storageadmin.networkinterface': { + 'Meta': {'object_name': 'NetworkInterface'}, + 'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'boot_proto': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'dns_servers': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'gateway': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ipaddr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'itype': ('django.db.models.fields.CharField', [], {'default': "'io'", 'max_length': '100'}), + 'mac': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'netmask': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'network': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'onboot': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.nfsexport': { + 'Meta': {'object_name': 'NFSExport'}, + 'export_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.NFSExportGroup']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mount': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}) + }, + 'storageadmin.nfsexportgroup': { + 'Meta': {'object_name': 'NFSExportGroup'}, + 'admin_host': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'editable': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '2'}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'host_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mount_security': ('django.db.models.fields.CharField', [], {'default': "'insecure'", 'max_length': '8'}), + 'nohide': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'syncable': ('django.db.models.fields.CharField', [], {'default': "'async'", 'max_length': '5'}) + }, + 'storageadmin.oauthapp': { + 'Meta': {'object_name': 'OauthApp'}, + 'application': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['oauth2_provider.Application']", 'unique': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.User']"}) + }, + 'storageadmin.plugin': { + 'Meta': {'object_name': 'Plugin'}, + 'css_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}), + 'display_name': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'js_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}) + }, + 'storageadmin.pool': { + 'Meta': {'object_name': 'Pool'}, + 'compression': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mnt_options': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'raid': ('django.db.models.fields.CharField', [], {'max_length': '10'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.poolbalance': { + 'Meta': {'object_name': 'PoolBalance'}, + 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'percent_done': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'pid': ('django.db.models.fields.IntegerField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}) + }, + 'storageadmin.poolscrub': { + 'Meta': {'object_name': 'PoolScrub'}, + 'corrected_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'csum_discards': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'csum_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'data_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kb_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'last_physical': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'malloc_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'no_csum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'pid': ('django.db.models.fields.IntegerField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'read_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}), + 'super_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tree_bytes_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'tree_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'uncorrectable_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'unverified_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'verify_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}) + }, + 'storageadmin.posixacls': { + 'Meta': {'object_name': 'PosixACLs'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'owner': ('django.db.models.fields.CharField', [], {'max_length': '5'}), + 'perms': ('django.db.models.fields.CharField', [], {'max_length': '3'}), + 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) + }, + 'storageadmin.rockon': { + 'Meta': {'object_name': 'RockOn'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'https': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'icon': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'link': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'ui': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}) + }, + 'storageadmin.sambacustomconfig': { + 'Meta': {'object_name': 'SambaCustomConfig'}, + 'custom_config': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) + }, + 'storageadmin.sambashare': { + 'Meta': {'object_name': 'SambaShare'}, + 'browsable': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}), + 'comment': ('django.db.models.fields.CharField', [], {'default': "'foo bar'", 'max_length': '100'}), + 'guest_ok': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'read_only': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'sambashare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}) + }, + 'storageadmin.setup': { + 'Meta': {'object_name': 'Setup'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'setup_disks': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_network': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_system': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.sftp': { + 'Meta': {'object_name': 'SFTP'}, + 'editable': ('django.db.models.fields.CharField', [], {'default': "'ro'", 'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.Share']", 'unique': 'True'}) + }, + 'storageadmin.share': { + 'Meta': {'object_name': 'Share'}, + 'compression_algo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'group': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'owner': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), + 'perms': ('django.db.models.fields.CharField', [], {'default': "'755'", 'max_length': '9'}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'replica': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'subvol_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.smartattribute': { + 'Meta': {'object_name': 'SMARTAttribute'}, + 'aid': ('django.db.models.fields.IntegerField', [], {}), + 'atype': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'failed': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'normed_value': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'raw_value': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'threshold': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'updated': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'worst': ('django.db.models.fields.IntegerField', [], {'default': '0'}) + }, + 'storageadmin.smartcapability': { + 'Meta': {'object_name': 'SMARTCapability'}, + 'capabilities': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.smarterrorlog': { + 'Meta': {'object_name': 'SMARTErrorLog'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.smarterrorlogsummary': { + 'Meta': {'object_name': 'SMARTErrorLogSummary'}, + 'details': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'error_num': ('django.db.models.fields.IntegerField', [], {}), + 'etype': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'storageadmin.smartidentity': { + 'Meta': {'object_name': 'SMARTIdentity'}, + 'assessment': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'ata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'capacity': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'device_model': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'enabled': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'firmware_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'in_smartdb': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'model_family': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'rotation_rate': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'sata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'scanned_on': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'sector_size': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'serial_number': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'supported': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'world_wide_name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'storageadmin.smartinfo': { + 'Meta': {'object_name': 'SMARTInfo'}, + 'disk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Disk']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + 'storageadmin.smarttestlog': { + 'Meta': {'object_name': 'SMARTTestLog'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'lba_of_first_error': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), + 'pct_completed': ('django.db.models.fields.IntegerField', [], {}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'test_num': ('django.db.models.fields.IntegerField', [], {}) + }, + 'storageadmin.smarttestlogdetail': { + 'Meta': {'object_name': 'SMARTTestLogDetail'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.snapshot': { + 'Meta': {'unique_together': "(('share', 'name'),)", 'object_name': 'Snapshot'}, + 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'real_name': ('django.db.models.fields.CharField', [], {'default': "'unknownsnap'", 'max_length': '4096'}), + 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'snap_type': ('django.db.models.fields.CharField', [], {'default': "'admin'", 'max_length': '64'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uvisible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'writable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.supportcase': { + 'Meta': {'object_name': 'SupportCase'}, + 'case_type': ('django.db.models.fields.CharField', [], {'max_length': '6'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notes': ('django.db.models.fields.TextField', [], {}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '9'}), + 'zipped_log': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.tlscertificate': { + 'Meta': {'object_name': 'TLSCertificate'}, + 'certificate': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) + }, + 'storageadmin.user': { + 'Meta': {'object_name': 'User'}, + 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'gid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Group']", 'null': 'True'}), + 'homedir': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'public_key': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), + 'shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'smb_shares': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_users'", 'null': 'True', 'to': "orm['storageadmin.SambaShare']"}), + 'uid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'suser'", 'unique': 'True', 'null': 'True', 'to': u"orm['auth.User']"}), + 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}) + } + } + + complete_apps = ['storageadmin'] \ No newline at end of file diff --git a/src/rockstor/storageadmin/migrations/0032_auto__del_field_dport_containerp_default__add_field_dport_hostp_defaul.py b/src/rockstor/storageadmin/migrations/0032_auto__del_field_dport_containerp_default__add_field_dport_hostp_defaul.py new file mode 100644 index 000000000..b2f21b2fa --- /dev/null +++ b/src/rockstor/storageadmin/migrations/0032_auto__del_field_dport_containerp_default__add_field_dport_hostp_defaul.py @@ -0,0 +1,508 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'DPort.containerp_default' + db.delete_column(u'storageadmin_dport', 'containerp_default') + + # Adding field 'DPort.hostp_default' + db.add_column(u'storageadmin_dport', 'hostp_default', + self.gf('django.db.models.fields.IntegerField')(null=True), + keep_default=False) + + + def backwards(self, orm): + # Adding field 'DPort.containerp_default' + db.add_column(u'storageadmin_dport', 'containerp_default', + self.gf('django.db.models.fields.IntegerField')(null=True), + keep_default=False) + + # Deleting field 'DPort.hostp_default' + db.delete_column(u'storageadmin_dport', 'hostp_default') + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'oauth2_provider.application': { + 'Meta': {'object_name': 'Application'}, + 'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'1h?8mGid3NTgY93ymaV2Jr2A_;7YT=1qrGDeso0B'", 'unique': 'True', 'max_length': '100'}), + 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u'VM=g?=B2nyjM2L.-:lHrrtaRPC9o;cMXqrs0P@69NpKTy4AoQE6Dt0Ap=BWTk=swRkXoVHG4ZxyxCGCVALu_5sbvS4J:rs6fABGl=_U4p2.JjxIC8@tTiTdoOPq1ElTV'", 'max_length': '255', 'blank': 'True'}), + 'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'redirect_uris': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + }, + 'storageadmin.advancednfsexport': { + 'Meta': {'object_name': 'AdvancedNFSExport'}, + 'export_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'storageadmin.apikeys': { + 'Meta': {'object_name': 'APIKeys'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), + 'user': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '8'}) + }, + 'storageadmin.appliance': { + 'Meta': {'object_name': 'Appliance'}, + 'client_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'client_secret': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'current_appliance': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'hostname': ('django.db.models.fields.CharField', [], {'default': "'Rockstor'", 'max_length': '128'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'mgmt_port': ('django.db.models.fields.IntegerField', [], {'default': '443'}), + 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) + }, + 'storageadmin.containeroption': { + 'Meta': {'object_name': 'ContainerOption'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.dashboardconfig': { + 'Meta': {'object_name': 'DashboardConfig'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True'}), + 'widgets': ('django.db.models.fields.CharField', [], {'max_length': '4096'}) + }, + 'storageadmin.dcontainer': { + 'Meta': {'object_name': 'DContainer'}, + 'dimage': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DImage']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'launch_order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}), + 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}) + }, + 'storageadmin.dcontainerlink': { + 'Meta': {'unique_together': "(('destination', 'name'),)", 'object_name': 'DContainerLink'}, + 'destination': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'destination_container'", 'to': "orm['storageadmin.DContainer']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'source': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.DContainer']", 'unique': 'True'}) + }, + 'storageadmin.dcustomconfig': { + 'Meta': {'unique_together': "(('rockon', 'key'),)", 'object_name': 'DCustomConfig'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}), + 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) + }, + 'storageadmin.dimage': { + 'Meta': {'object_name': 'DImage'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'repo': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'tag': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.disk': { + 'Meta': {'object_name': 'Disk'}, + 'btrfs_uuid': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), + 'offline': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'parted': ('django.db.models.fields.BooleanField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'serial': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'smart_available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'smart_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'transport': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'vendor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) + }, + 'storageadmin.dport': { + 'Meta': {'unique_together': "(('container', 'containerp'),)", 'object_name': 'DPort'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + 'containerp': ('django.db.models.fields.IntegerField', [], {}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'hostp': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'hostp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'protocol': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'uiport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.dvolume': { + 'Meta': {'unique_together': "(('container', 'dest_dir'),)", 'object_name': 'DVolume'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'dest_dir': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'min_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']", 'null': 'True'}), + 'uservol': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.group': { + 'Meta': {'object_name': 'Group'}, + 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'gid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'groupname': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'storageadmin.installedplugin': { + 'Meta': {'object_name': 'InstalledPlugin'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'install_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'plugin_meta': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Plugin']"}) + }, + 'storageadmin.iscsitarget': { + 'Meta': {'object_name': 'IscsiTarget'}, + 'dev_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), + 'dev_size': ('django.db.models.fields.IntegerField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), + 'tid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'tname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) + }, + 'storageadmin.netatalkshare': { + 'Meta': {'object_name': 'NetatalkShare'}, + 'description': ('django.db.models.fields.CharField', [], {'default': "'afp on rockstor'", 'max_length': '1024'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'netatalkshare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}), + 'time_machine': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}) + }, + 'storageadmin.networkinterface': { + 'Meta': {'object_name': 'NetworkInterface'}, + 'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'boot_proto': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'dns_servers': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'gateway': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ipaddr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'itype': ('django.db.models.fields.CharField', [], {'default': "'io'", 'max_length': '100'}), + 'mac': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'netmask': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'network': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'onboot': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.nfsexport': { + 'Meta': {'object_name': 'NFSExport'}, + 'export_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.NFSExportGroup']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mount': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}) + }, + 'storageadmin.nfsexportgroup': { + 'Meta': {'object_name': 'NFSExportGroup'}, + 'admin_host': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'editable': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '2'}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'host_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mount_security': ('django.db.models.fields.CharField', [], {'default': "'insecure'", 'max_length': '8'}), + 'nohide': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'syncable': ('django.db.models.fields.CharField', [], {'default': "'async'", 'max_length': '5'}) + }, + 'storageadmin.oauthapp': { + 'Meta': {'object_name': 'OauthApp'}, + 'application': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['oauth2_provider.Application']", 'unique': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.User']"}) + }, + 'storageadmin.plugin': { + 'Meta': {'object_name': 'Plugin'}, + 'css_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}), + 'display_name': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'js_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}) + }, + 'storageadmin.pool': { + 'Meta': {'object_name': 'Pool'}, + 'compression': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mnt_options': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'raid': ('django.db.models.fields.CharField', [], {'max_length': '10'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.poolbalance': { + 'Meta': {'object_name': 'PoolBalance'}, + 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'percent_done': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'pid': ('django.db.models.fields.IntegerField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}) + }, + 'storageadmin.poolscrub': { + 'Meta': {'object_name': 'PoolScrub'}, + 'corrected_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'csum_discards': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'csum_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'data_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kb_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'last_physical': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'malloc_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'no_csum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'pid': ('django.db.models.fields.IntegerField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'read_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}), + 'super_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tree_bytes_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'tree_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'uncorrectable_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'unverified_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'verify_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}) + }, + 'storageadmin.posixacls': { + 'Meta': {'object_name': 'PosixACLs'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'owner': ('django.db.models.fields.CharField', [], {'max_length': '5'}), + 'perms': ('django.db.models.fields.CharField', [], {'max_length': '3'}), + 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) + }, + 'storageadmin.rockon': { + 'Meta': {'object_name': 'RockOn'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'https': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'icon': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'link': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'ui': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}) + }, + 'storageadmin.sambacustomconfig': { + 'Meta': {'object_name': 'SambaCustomConfig'}, + 'custom_config': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) + }, + 'storageadmin.sambashare': { + 'Meta': {'object_name': 'SambaShare'}, + 'browsable': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}), + 'comment': ('django.db.models.fields.CharField', [], {'default': "'foo bar'", 'max_length': '100'}), + 'guest_ok': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'read_only': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'sambashare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}) + }, + 'storageadmin.setup': { + 'Meta': {'object_name': 'Setup'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'setup_disks': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_network': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_system': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.sftp': { + 'Meta': {'object_name': 'SFTP'}, + 'editable': ('django.db.models.fields.CharField', [], {'default': "'ro'", 'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.Share']", 'unique': 'True'}) + }, + 'storageadmin.share': { + 'Meta': {'object_name': 'Share'}, + 'compression_algo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'group': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'owner': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), + 'perms': ('django.db.models.fields.CharField', [], {'default': "'755'", 'max_length': '9'}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'replica': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'subvol_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.smartattribute': { + 'Meta': {'object_name': 'SMARTAttribute'}, + 'aid': ('django.db.models.fields.IntegerField', [], {}), + 'atype': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'failed': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'normed_value': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'raw_value': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'threshold': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'updated': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'worst': ('django.db.models.fields.IntegerField', [], {'default': '0'}) + }, + 'storageadmin.smartcapability': { + 'Meta': {'object_name': 'SMARTCapability'}, + 'capabilities': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.smarterrorlog': { + 'Meta': {'object_name': 'SMARTErrorLog'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.smarterrorlogsummary': { + 'Meta': {'object_name': 'SMARTErrorLogSummary'}, + 'details': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'error_num': ('django.db.models.fields.IntegerField', [], {}), + 'etype': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'storageadmin.smartidentity': { + 'Meta': {'object_name': 'SMARTIdentity'}, + 'assessment': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'ata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'capacity': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'device_model': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'enabled': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'firmware_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'in_smartdb': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'model_family': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'rotation_rate': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'sata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'scanned_on': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'sector_size': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'serial_number': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'supported': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'world_wide_name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'storageadmin.smartinfo': { + 'Meta': {'object_name': 'SMARTInfo'}, + 'disk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Disk']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + 'storageadmin.smarttestlog': { + 'Meta': {'object_name': 'SMARTTestLog'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'lba_of_first_error': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), + 'pct_completed': ('django.db.models.fields.IntegerField', [], {}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'test_num': ('django.db.models.fields.IntegerField', [], {}) + }, + 'storageadmin.smarttestlogdetail': { + 'Meta': {'object_name': 'SMARTTestLogDetail'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.snapshot': { + 'Meta': {'unique_together': "(('share', 'name'),)", 'object_name': 'Snapshot'}, + 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'real_name': ('django.db.models.fields.CharField', [], {'default': "'unknownsnap'", 'max_length': '4096'}), + 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'snap_type': ('django.db.models.fields.CharField', [], {'default': "'admin'", 'max_length': '64'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uvisible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'writable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.supportcase': { + 'Meta': {'object_name': 'SupportCase'}, + 'case_type': ('django.db.models.fields.CharField', [], {'max_length': '6'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notes': ('django.db.models.fields.TextField', [], {}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '9'}), + 'zipped_log': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.tlscertificate': { + 'Meta': {'object_name': 'TLSCertificate'}, + 'certificate': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) + }, + 'storageadmin.user': { + 'Meta': {'object_name': 'User'}, + 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'gid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Group']", 'null': 'True'}), + 'homedir': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'public_key': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), + 'shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'smb_shares': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_users'", 'null': 'True', 'to': "orm['storageadmin.SambaShare']"}), + 'uid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'suser'", 'unique': 'True', 'null': 'True', 'to': u"orm['auth.User']"}), + 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}) + } + } + + complete_apps = ['storageadmin'] \ No newline at end of file diff --git a/src/rockstor/storageadmin/migrations/0033_auto__add_field_rockon_volume_add_support.py b/src/rockstor/storageadmin/migrations/0033_auto__add_field_rockon_volume_add_support.py new file mode 100644 index 000000000..085a7b5c0 --- /dev/null +++ b/src/rockstor/storageadmin/migrations/0033_auto__add_field_rockon_volume_add_support.py @@ -0,0 +1,501 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'RockOn.volume_add_support' + db.add_column(u'storageadmin_rockon', 'volume_add_support', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'RockOn.volume_add_support' + db.delete_column(u'storageadmin_rockon', 'volume_add_support') + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'oauth2_provider.application': { + 'Meta': {'object_name': 'Application'}, + 'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'c?2AW4RQpAdRuVdrAM3LBVIed=PG5jUr8ZnsuUKi'", 'unique': 'True', 'max_length': '100'}), + 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u'DWpaNnrH_WE6nEo:G!T6v15lyw8HZrpDy9f@c=sSGWMRR=Gw=MgJ?x6qKtS129YJ2L_qrjE:D:Vqj3uvfJHMRGYICtKXxN=ER?Lu.LAqxm0VTtCjI?TuLkGv06OcovVd'", 'max_length': '255', 'blank': 'True'}), + 'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'redirect_uris': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + }, + 'storageadmin.advancednfsexport': { + 'Meta': {'object_name': 'AdvancedNFSExport'}, + 'export_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'storageadmin.apikeys': { + 'Meta': {'object_name': 'APIKeys'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), + 'user': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '8'}) + }, + 'storageadmin.appliance': { + 'Meta': {'object_name': 'Appliance'}, + 'client_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'client_secret': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'current_appliance': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'hostname': ('django.db.models.fields.CharField', [], {'default': "'Rockstor'", 'max_length': '128'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'mgmt_port': ('django.db.models.fields.IntegerField', [], {'default': '443'}), + 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) + }, + 'storageadmin.containeroption': { + 'Meta': {'object_name': 'ContainerOption'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.dashboardconfig': { + 'Meta': {'object_name': 'DashboardConfig'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True'}), + 'widgets': ('django.db.models.fields.CharField', [], {'max_length': '4096'}) + }, + 'storageadmin.dcontainer': { + 'Meta': {'object_name': 'DContainer'}, + 'dimage': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DImage']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'launch_order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}), + 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}) + }, + 'storageadmin.dcontainerlink': { + 'Meta': {'unique_together': "(('destination', 'name'),)", 'object_name': 'DContainerLink'}, + 'destination': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'destination_container'", 'to': "orm['storageadmin.DContainer']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'source': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.DContainer']", 'unique': 'True'}) + }, + 'storageadmin.dcustomconfig': { + 'Meta': {'unique_together': "(('rockon', 'key'),)", 'object_name': 'DCustomConfig'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}), + 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) + }, + 'storageadmin.dimage': { + 'Meta': {'object_name': 'DImage'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'repo': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'tag': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.disk': { + 'Meta': {'object_name': 'Disk'}, + 'btrfs_uuid': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), + 'offline': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'parted': ('django.db.models.fields.BooleanField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'serial': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'smart_available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'smart_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'transport': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'vendor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) + }, + 'storageadmin.dport': { + 'Meta': {'unique_together': "(('container', 'containerp'),)", 'object_name': 'DPort'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + 'containerp': ('django.db.models.fields.IntegerField', [], {}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'hostp': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'hostp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'protocol': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'uiport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.dvolume': { + 'Meta': {'unique_together': "(('container', 'dest_dir'),)", 'object_name': 'DVolume'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'dest_dir': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'min_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']", 'null': 'True'}), + 'uservol': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.group': { + 'Meta': {'object_name': 'Group'}, + 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'gid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'groupname': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'storageadmin.installedplugin': { + 'Meta': {'object_name': 'InstalledPlugin'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'install_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'plugin_meta': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Plugin']"}) + }, + 'storageadmin.iscsitarget': { + 'Meta': {'object_name': 'IscsiTarget'}, + 'dev_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), + 'dev_size': ('django.db.models.fields.IntegerField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), + 'tid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'tname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) + }, + 'storageadmin.netatalkshare': { + 'Meta': {'object_name': 'NetatalkShare'}, + 'description': ('django.db.models.fields.CharField', [], {'default': "'afp on rockstor'", 'max_length': '1024'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'netatalkshare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}), + 'time_machine': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}) + }, + 'storageadmin.networkinterface': { + 'Meta': {'object_name': 'NetworkInterface'}, + 'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'boot_proto': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'dns_servers': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'gateway': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ipaddr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'itype': ('django.db.models.fields.CharField', [], {'default': "'io'", 'max_length': '100'}), + 'mac': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'netmask': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'network': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'onboot': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.nfsexport': { + 'Meta': {'object_name': 'NFSExport'}, + 'export_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.NFSExportGroup']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mount': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}) + }, + 'storageadmin.nfsexportgroup': { + 'Meta': {'object_name': 'NFSExportGroup'}, + 'admin_host': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'editable': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '2'}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'host_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mount_security': ('django.db.models.fields.CharField', [], {'default': "'insecure'", 'max_length': '8'}), + 'nohide': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'syncable': ('django.db.models.fields.CharField', [], {'default': "'async'", 'max_length': '5'}) + }, + 'storageadmin.oauthapp': { + 'Meta': {'object_name': 'OauthApp'}, + 'application': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['oauth2_provider.Application']", 'unique': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.User']"}) + }, + 'storageadmin.plugin': { + 'Meta': {'object_name': 'Plugin'}, + 'css_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}), + 'display_name': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'js_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}) + }, + 'storageadmin.pool': { + 'Meta': {'object_name': 'Pool'}, + 'compression': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mnt_options': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'raid': ('django.db.models.fields.CharField', [], {'max_length': '10'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.poolbalance': { + 'Meta': {'object_name': 'PoolBalance'}, + 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'percent_done': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'pid': ('django.db.models.fields.IntegerField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}) + }, + 'storageadmin.poolscrub': { + 'Meta': {'object_name': 'PoolScrub'}, + 'corrected_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'csum_discards': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'csum_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'data_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kb_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'last_physical': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'malloc_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'no_csum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'pid': ('django.db.models.fields.IntegerField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'read_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}), + 'super_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tree_bytes_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'tree_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'uncorrectable_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'unverified_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'verify_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}) + }, + 'storageadmin.posixacls': { + 'Meta': {'object_name': 'PosixACLs'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'owner': ('django.db.models.fields.CharField', [], {'max_length': '5'}), + 'perms': ('django.db.models.fields.CharField', [], {'max_length': '3'}), + 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) + }, + 'storageadmin.rockon': { + 'Meta': {'object_name': 'RockOn'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'https': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'icon': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'link': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'ui': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'volume_add_support': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}) + }, + 'storageadmin.sambacustomconfig': { + 'Meta': {'object_name': 'SambaCustomConfig'}, + 'custom_config': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) + }, + 'storageadmin.sambashare': { + 'Meta': {'object_name': 'SambaShare'}, + 'browsable': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}), + 'comment': ('django.db.models.fields.CharField', [], {'default': "'foo bar'", 'max_length': '100'}), + 'guest_ok': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'read_only': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'sambashare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}) + }, + 'storageadmin.setup': { + 'Meta': {'object_name': 'Setup'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'setup_disks': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_network': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_system': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.sftp': { + 'Meta': {'object_name': 'SFTP'}, + 'editable': ('django.db.models.fields.CharField', [], {'default': "'ro'", 'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.Share']", 'unique': 'True'}) + }, + 'storageadmin.share': { + 'Meta': {'object_name': 'Share'}, + 'compression_algo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'group': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'owner': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), + 'perms': ('django.db.models.fields.CharField', [], {'default': "'755'", 'max_length': '9'}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'replica': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'subvol_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.smartattribute': { + 'Meta': {'object_name': 'SMARTAttribute'}, + 'aid': ('django.db.models.fields.IntegerField', [], {}), + 'atype': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'failed': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'normed_value': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'raw_value': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'threshold': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'updated': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'worst': ('django.db.models.fields.IntegerField', [], {'default': '0'}) + }, + 'storageadmin.smartcapability': { + 'Meta': {'object_name': 'SMARTCapability'}, + 'capabilities': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.smarterrorlog': { + 'Meta': {'object_name': 'SMARTErrorLog'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.smarterrorlogsummary': { + 'Meta': {'object_name': 'SMARTErrorLogSummary'}, + 'details': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'error_num': ('django.db.models.fields.IntegerField', [], {}), + 'etype': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'storageadmin.smartidentity': { + 'Meta': {'object_name': 'SMARTIdentity'}, + 'assessment': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'ata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'capacity': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'device_model': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'enabled': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'firmware_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'in_smartdb': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'model_family': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'rotation_rate': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'sata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'scanned_on': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'sector_size': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'serial_number': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'supported': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'world_wide_name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'storageadmin.smartinfo': { + 'Meta': {'object_name': 'SMARTInfo'}, + 'disk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Disk']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + 'storageadmin.smarttestlog': { + 'Meta': {'object_name': 'SMARTTestLog'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'lba_of_first_error': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), + 'pct_completed': ('django.db.models.fields.IntegerField', [], {}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'test_num': ('django.db.models.fields.IntegerField', [], {}) + }, + 'storageadmin.smarttestlogdetail': { + 'Meta': {'object_name': 'SMARTTestLogDetail'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.snapshot': { + 'Meta': {'unique_together': "(('share', 'name'),)", 'object_name': 'Snapshot'}, + 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'real_name': ('django.db.models.fields.CharField', [], {'default': "'unknownsnap'", 'max_length': '4096'}), + 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'snap_type': ('django.db.models.fields.CharField', [], {'default': "'admin'", 'max_length': '64'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uvisible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'writable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.supportcase': { + 'Meta': {'object_name': 'SupportCase'}, + 'case_type': ('django.db.models.fields.CharField', [], {'max_length': '6'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notes': ('django.db.models.fields.TextField', [], {}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '9'}), + 'zipped_log': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.tlscertificate': { + 'Meta': {'object_name': 'TLSCertificate'}, + 'certificate': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) + }, + 'storageadmin.user': { + 'Meta': {'object_name': 'User'}, + 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'gid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Group']", 'null': 'True'}), + 'homedir': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'public_key': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), + 'shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'smb_shares': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_users'", 'null': 'True', 'to': "orm['storageadmin.SambaShare']"}), + 'uid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'suser'", 'unique': 'True', 'null': 'True', 'to': u"orm['auth.User']"}), + 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}) + } + } + + complete_apps = ['storageadmin'] \ No newline at end of file diff --git a/src/rockstor/storageadmin/migrations/0034_auto__add_field_rockon_more_info.py b/src/rockstor/storageadmin/migrations/0034_auto__add_field_rockon_more_info.py new file mode 100644 index 000000000..41860b3b7 --- /dev/null +++ b/src/rockstor/storageadmin/migrations/0034_auto__add_field_rockon_more_info.py @@ -0,0 +1,502 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'RockOn.more_info' + db.add_column(u'storageadmin_rockon', 'more_info', + self.gf('django.db.models.fields.CharField')(max_length=4096, null=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'RockOn.more_info' + db.delete_column(u'storageadmin_rockon', 'more_info') + + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'oauth2_provider.application': { + 'Meta': {'object_name': 'Application'}, + 'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'BKk6rXlZ8t-Lm2o=AXAl@TfXBhVmBebr1wMHbG=w'", 'unique': 'True', 'max_length': '100'}), + 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u'cw6yYfzM2Fr=7PrNAg;t!!YcHzsr1O=Q5q1:yia=G@mj0wTSl5QSV1L0!_KB0c2Q4QjzliB0?56YE4BdV7LT56SVgvZJh1=89n;judfhDes344FvxJTGgWmQsMtUNQxh'", 'max_length': '255', 'blank': 'True'}), + 'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'redirect_uris': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + }, + 'storageadmin.advancednfsexport': { + 'Meta': {'object_name': 'AdvancedNFSExport'}, + 'export_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'storageadmin.apikeys': { + 'Meta': {'object_name': 'APIKeys'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), + 'user': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '8'}) + }, + 'storageadmin.appliance': { + 'Meta': {'object_name': 'Appliance'}, + 'client_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'client_secret': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'current_appliance': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'hostname': ('django.db.models.fields.CharField', [], {'default': "'Rockstor'", 'max_length': '128'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'mgmt_port': ('django.db.models.fields.IntegerField', [], {'default': '443'}), + 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) + }, + 'storageadmin.containeroption': { + 'Meta': {'object_name': 'ContainerOption'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.dashboardconfig': { + 'Meta': {'object_name': 'DashboardConfig'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True'}), + 'widgets': ('django.db.models.fields.CharField', [], {'max_length': '4096'}) + }, + 'storageadmin.dcontainer': { + 'Meta': {'object_name': 'DContainer'}, + 'dimage': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DImage']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'launch_order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}), + 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}) + }, + 'storageadmin.dcontainerlink': { + 'Meta': {'unique_together': "(('destination', 'name'),)", 'object_name': 'DContainerLink'}, + 'destination': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'destination_container'", 'to': "orm['storageadmin.DContainer']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'source': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.DContainer']", 'unique': 'True'}) + }, + 'storageadmin.dcustomconfig': { + 'Meta': {'unique_together': "(('rockon', 'key'),)", 'object_name': 'DCustomConfig'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}), + 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) + }, + 'storageadmin.dimage': { + 'Meta': {'object_name': 'DImage'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'repo': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'tag': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.disk': { + 'Meta': {'object_name': 'Disk'}, + 'btrfs_uuid': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), + 'offline': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'parted': ('django.db.models.fields.BooleanField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'serial': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'smart_available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'smart_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'transport': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'vendor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) + }, + 'storageadmin.dport': { + 'Meta': {'unique_together': "(('container', 'containerp'),)", 'object_name': 'DPort'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + 'containerp': ('django.db.models.fields.IntegerField', [], {}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'hostp': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'hostp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'protocol': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'uiport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.dvolume': { + 'Meta': {'unique_together': "(('container', 'dest_dir'),)", 'object_name': 'DVolume'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'dest_dir': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'min_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']", 'null': 'True'}), + 'uservol': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.group': { + 'Meta': {'object_name': 'Group'}, + 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'gid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'groupname': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'storageadmin.installedplugin': { + 'Meta': {'object_name': 'InstalledPlugin'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'install_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'plugin_meta': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Plugin']"}) + }, + 'storageadmin.iscsitarget': { + 'Meta': {'object_name': 'IscsiTarget'}, + 'dev_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), + 'dev_size': ('django.db.models.fields.IntegerField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), + 'tid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'tname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) + }, + 'storageadmin.netatalkshare': { + 'Meta': {'object_name': 'NetatalkShare'}, + 'description': ('django.db.models.fields.CharField', [], {'default': "'afp on rockstor'", 'max_length': '1024'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'netatalkshare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}), + 'time_machine': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}) + }, + 'storageadmin.networkinterface': { + 'Meta': {'object_name': 'NetworkInterface'}, + 'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'boot_proto': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'dns_servers': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'gateway': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ipaddr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'itype': ('django.db.models.fields.CharField', [], {'default': "'io'", 'max_length': '100'}), + 'mac': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'netmask': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'network': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'onboot': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.nfsexport': { + 'Meta': {'object_name': 'NFSExport'}, + 'export_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.NFSExportGroup']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mount': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}) + }, + 'storageadmin.nfsexportgroup': { + 'Meta': {'object_name': 'NFSExportGroup'}, + 'admin_host': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'editable': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '2'}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'host_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mount_security': ('django.db.models.fields.CharField', [], {'default': "'insecure'", 'max_length': '8'}), + 'nohide': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'syncable': ('django.db.models.fields.CharField', [], {'default': "'async'", 'max_length': '5'}) + }, + 'storageadmin.oauthapp': { + 'Meta': {'object_name': 'OauthApp'}, + 'application': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['oauth2_provider.Application']", 'unique': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.User']"}) + }, + 'storageadmin.plugin': { + 'Meta': {'object_name': 'Plugin'}, + 'css_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}), + 'display_name': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'js_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}) + }, + 'storageadmin.pool': { + 'Meta': {'object_name': 'Pool'}, + 'compression': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mnt_options': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'raid': ('django.db.models.fields.CharField', [], {'max_length': '10'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.poolbalance': { + 'Meta': {'object_name': 'PoolBalance'}, + 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'percent_done': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'pid': ('django.db.models.fields.IntegerField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}) + }, + 'storageadmin.poolscrub': { + 'Meta': {'object_name': 'PoolScrub'}, + 'corrected_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'csum_discards': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'csum_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'data_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kb_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'last_physical': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'malloc_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'no_csum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'pid': ('django.db.models.fields.IntegerField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'read_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}), + 'super_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tree_bytes_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'tree_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'uncorrectable_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'unverified_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'verify_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}) + }, + 'storageadmin.posixacls': { + 'Meta': {'object_name': 'PosixACLs'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'owner': ('django.db.models.fields.CharField', [], {'max_length': '5'}), + 'perms': ('django.db.models.fields.CharField', [], {'max_length': '3'}), + 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) + }, + 'storageadmin.rockon': { + 'Meta': {'object_name': 'RockOn'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'https': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'icon': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'link': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'more_info': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'ui': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'volume_add_support': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}) + }, + 'storageadmin.sambacustomconfig': { + 'Meta': {'object_name': 'SambaCustomConfig'}, + 'custom_config': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) + }, + 'storageadmin.sambashare': { + 'Meta': {'object_name': 'SambaShare'}, + 'browsable': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}), + 'comment': ('django.db.models.fields.CharField', [], {'default': "'foo bar'", 'max_length': '100'}), + 'guest_ok': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'read_only': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'sambashare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}) + }, + 'storageadmin.setup': { + 'Meta': {'object_name': 'Setup'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'setup_disks': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_network': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_system': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.sftp': { + 'Meta': {'object_name': 'SFTP'}, + 'editable': ('django.db.models.fields.CharField', [], {'default': "'ro'", 'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.Share']", 'unique': 'True'}) + }, + 'storageadmin.share': { + 'Meta': {'object_name': 'Share'}, + 'compression_algo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'group': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'owner': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), + 'perms': ('django.db.models.fields.CharField', [], {'default': "'755'", 'max_length': '9'}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'replica': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'subvol_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.smartattribute': { + 'Meta': {'object_name': 'SMARTAttribute'}, + 'aid': ('django.db.models.fields.IntegerField', [], {}), + 'atype': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'failed': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'normed_value': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'raw_value': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'threshold': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'updated': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'worst': ('django.db.models.fields.IntegerField', [], {'default': '0'}) + }, + 'storageadmin.smartcapability': { + 'Meta': {'object_name': 'SMARTCapability'}, + 'capabilities': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.smarterrorlog': { + 'Meta': {'object_name': 'SMARTErrorLog'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.smarterrorlogsummary': { + 'Meta': {'object_name': 'SMARTErrorLogSummary'}, + 'details': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'error_num': ('django.db.models.fields.IntegerField', [], {}), + 'etype': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'storageadmin.smartidentity': { + 'Meta': {'object_name': 'SMARTIdentity'}, + 'assessment': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'ata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'capacity': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'device_model': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'enabled': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'firmware_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'in_smartdb': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'model_family': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'rotation_rate': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'sata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'scanned_on': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'sector_size': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'serial_number': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'supported': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'world_wide_name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'storageadmin.smartinfo': { + 'Meta': {'object_name': 'SMARTInfo'}, + 'disk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Disk']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + 'storageadmin.smarttestlog': { + 'Meta': {'object_name': 'SMARTTestLog'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'lba_of_first_error': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), + 'pct_completed': ('django.db.models.fields.IntegerField', [], {}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'test_num': ('django.db.models.fields.IntegerField', [], {}) + }, + 'storageadmin.smarttestlogdetail': { + 'Meta': {'object_name': 'SMARTTestLogDetail'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.snapshot': { + 'Meta': {'unique_together': "(('share', 'name'),)", 'object_name': 'Snapshot'}, + 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'real_name': ('django.db.models.fields.CharField', [], {'default': "'unknownsnap'", 'max_length': '4096'}), + 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'snap_type': ('django.db.models.fields.CharField', [], {'default': "'admin'", 'max_length': '64'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uvisible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'writable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.supportcase': { + 'Meta': {'object_name': 'SupportCase'}, + 'case_type': ('django.db.models.fields.CharField', [], {'max_length': '6'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notes': ('django.db.models.fields.TextField', [], {}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '9'}), + 'zipped_log': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.tlscertificate': { + 'Meta': {'object_name': 'TLSCertificate'}, + 'certificate': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) + }, + 'storageadmin.user': { + 'Meta': {'object_name': 'User'}, + 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'gid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Group']", 'null': 'True'}), + 'homedir': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'public_key': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), + 'shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'smb_shares': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_users'", 'null': 'True', 'to': "orm['storageadmin.SambaShare']"}), + 'uid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'suser'", 'unique': 'True', 'null': 'True', 'to': u"orm['auth.User']"}), + 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}) + } + } + + complete_apps = ['storageadmin'] \ No newline at end of file diff --git a/src/rockstor/storageadmin/migrations/0035_auto__chg_field_dvolume_min_size.py b/src/rockstor/storageadmin/migrations/0035_auto__chg_field_dvolume_min_size.py new file mode 100644 index 000000000..6561ef060 --- /dev/null +++ b/src/rockstor/storageadmin/migrations/0035_auto__chg_field_dvolume_min_size.py @@ -0,0 +1,500 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'DVolume.min_size' + db.alter_column(u'storageadmin_dvolume', 'min_size', self.gf('django.db.models.fields.IntegerField')(null=True)) + + def backwards(self, orm): + + # Changing field 'DVolume.min_size' + db.alter_column(u'storageadmin_dvolume', 'min_size', self.gf('django.db.models.fields.IntegerField')()) + + models = { + u'auth.group': { + 'Meta': {'object_name': 'Group'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), + 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) + }, + u'auth.permission': { + 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, + 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) + }, + u'auth.user': { + 'Meta': {'object_name': 'User'}, + 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), + 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), + 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), + 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), + 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), + 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) + }, + u'contenttypes.contenttype': { + 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, + 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) + }, + u'oauth2_provider.application': { + 'Meta': {'object_name': 'Application'}, + 'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'sN0naaeySKET5iqxHO05;8JzlRnqc5gqU5y=8k?!'", 'unique': 'True', 'max_length': '100'}), + 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u'GBekbAhBLHrjObXtL@KBys@TOrae2Gh1;nb.rO1pZc1wf70Q5;VZ=bhcfTpCYOt@K7v-GXU6O9pZ8ARfYyygqMR@86mElcl7s0VcIeV;LDIlvf-m0X57ALuSab9YcGRa'", 'max_length': '255', 'blank': 'True'}), + 'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), + 'redirect_uris': ('django.db.models.fields.TextField', [], {'blank': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) + }, + 'storageadmin.advancednfsexport': { + 'Meta': {'object_name': 'AdvancedNFSExport'}, + 'export_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'storageadmin.apikeys': { + 'Meta': {'object_name': 'APIKeys'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), + 'user': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '8'}) + }, + 'storageadmin.appliance': { + 'Meta': {'object_name': 'Appliance'}, + 'client_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'client_secret': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), + 'current_appliance': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'hostname': ('django.db.models.fields.CharField', [], {'default': "'Rockstor'", 'max_length': '128'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ip': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'mgmt_port': ('django.db.models.fields.IntegerField', [], {'default': '443'}), + 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) + }, + 'storageadmin.containeroption': { + 'Meta': {'object_name': 'ContainerOption'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}) + }, + 'storageadmin.dashboardconfig': { + 'Meta': {'object_name': 'DashboardConfig'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True'}), + 'widgets': ('django.db.models.fields.CharField', [], {'max_length': '4096'}) + }, + 'storageadmin.dcontainer': { + 'Meta': {'object_name': 'DContainer'}, + 'dimage': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DImage']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'launch_order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}), + 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}) + }, + 'storageadmin.dcontainerlink': { + 'Meta': {'unique_together': "(('destination', 'name'),)", 'object_name': 'DContainerLink'}, + 'destination': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'destination_container'", 'to': "orm['storageadmin.DContainer']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'source': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.DContainer']", 'unique': 'True'}) + }, + 'storageadmin.dcustomconfig': { + 'Meta': {'unique_together': "(('rockon', 'key'),)", 'object_name': 'DCustomConfig'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), + 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}), + 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) + }, + 'storageadmin.dimage': { + 'Meta': {'object_name': 'DImage'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'repo': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'tag': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.disk': { + 'Meta': {'object_name': 'Disk'}, + 'btrfs_uuid': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'model': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), + 'offline': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'parted': ('django.db.models.fields.BooleanField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), + 'serial': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'smart_available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'smart_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'transport': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'vendor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) + }, + 'storageadmin.dport': { + 'Meta': {'unique_together': "(('container', 'containerp'),)", 'object_name': 'DPort'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + 'containerp': ('django.db.models.fields.IntegerField', [], {}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'hostp': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'hostp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'protocol': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), + 'uiport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.dvolume': { + 'Meta': {'unique_together': "(('container', 'dest_dir'),)", 'object_name': 'DVolume'}, + 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), + 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'dest_dir': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'min_size': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']", 'null': 'True'}), + 'uservol': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.group': { + 'Meta': {'object_name': 'Group'}, + 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'gid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'groupname': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) + }, + 'storageadmin.installedplugin': { + 'Meta': {'object_name': 'InstalledPlugin'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'install_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'plugin_meta': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Plugin']"}) + }, + 'storageadmin.iscsitarget': { + 'Meta': {'object_name': 'IscsiTarget'}, + 'dev_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), + 'dev_size': ('django.db.models.fields.IntegerField', [], {}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), + 'tid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'tname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) + }, + 'storageadmin.netatalkshare': { + 'Meta': {'object_name': 'NetatalkShare'}, + 'description': ('django.db.models.fields.CharField', [], {'default': "'afp on rockstor'", 'max_length': '1024'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'netatalkshare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}), + 'time_machine': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}) + }, + 'storageadmin.networkinterface': { + 'Meta': {'object_name': 'NetworkInterface'}, + 'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'boot_proto': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'dns_servers': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'domain': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'gateway': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'ipaddr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'itype': ('django.db.models.fields.CharField', [], {'default': "'io'", 'max_length': '100'}), + 'mac': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'netmask': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'network': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), + 'onboot': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.nfsexport': { + 'Meta': {'object_name': 'NFSExport'}, + 'export_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.NFSExportGroup']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mount': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}) + }, + 'storageadmin.nfsexportgroup': { + 'Meta': {'object_name': 'NFSExportGroup'}, + 'admin_host': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'editable': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '2'}), + 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'host_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mount_security': ('django.db.models.fields.CharField', [], {'default': "'insecure'", 'max_length': '8'}), + 'nohide': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'syncable': ('django.db.models.fields.CharField', [], {'default': "'async'", 'max_length': '5'}) + }, + 'storageadmin.oauthapp': { + 'Meta': {'object_name': 'OauthApp'}, + 'application': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['oauth2_provider.Application']", 'unique': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), + 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.User']"}) + }, + 'storageadmin.plugin': { + 'Meta': {'object_name': 'Plugin'}, + 'css_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}), + 'display_name': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'js_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}) + }, + 'storageadmin.pool': { + 'Meta': {'object_name': 'Pool'}, + 'compression': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'mnt_options': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'raid': ('django.db.models.fields.CharField', [], {'max_length': '10'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.poolbalance': { + 'Meta': {'object_name': 'PoolBalance'}, + 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'percent_done': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'pid': ('django.db.models.fields.IntegerField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}) + }, + 'storageadmin.poolscrub': { + 'Meta': {'object_name': 'PoolScrub'}, + 'corrected_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'csum_discards': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'csum_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'data_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'kb_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), + 'last_physical': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'malloc_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'no_csum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'pid': ('django.db.models.fields.IntegerField', [], {}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'read_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}), + 'super_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'tree_bytes_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'tree_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'uncorrectable_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'unverified_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'verify_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}) + }, + 'storageadmin.posixacls': { + 'Meta': {'object_name': 'PosixACLs'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'owner': ('django.db.models.fields.CharField', [], {'max_length': '5'}), + 'perms': ('django.db.models.fields.CharField', [], {'max_length': '3'}), + 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) + }, + 'storageadmin.rockon': { + 'Meta': {'object_name': 'RockOn'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'https': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'icon': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'link': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'more_info': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'ui': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'volume_add_support': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}) + }, + 'storageadmin.sambacustomconfig': { + 'Meta': {'object_name': 'SambaCustomConfig'}, + 'custom_config': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) + }, + 'storageadmin.sambashare': { + 'Meta': {'object_name': 'SambaShare'}, + 'browsable': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}), + 'comment': ('django.db.models.fields.CharField', [], {'default': "'foo bar'", 'max_length': '100'}), + 'guest_ok': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'read_only': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'sambashare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}) + }, + 'storageadmin.setup': { + 'Meta': {'object_name': 'Setup'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'setup_disks': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_network': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_system': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'setup_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.sftp': { + 'Meta': {'object_name': 'SFTP'}, + 'editable': ('django.db.models.fields.CharField', [], {'default': "'ro'", 'max_length': '2'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'share': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.Share']", 'unique': 'True'}) + }, + 'storageadmin.share': { + 'Meta': {'object_name': 'Share'}, + 'compression_algo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'group': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), + 'owner': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), + 'perms': ('django.db.models.fields.CharField', [], {'default': "'755'", 'max_length': '9'}), + 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), + 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'replica': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'subvol_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) + }, + 'storageadmin.smartattribute': { + 'Meta': {'object_name': 'SMARTAttribute'}, + 'aid': ('django.db.models.fields.IntegerField', [], {}), + 'atype': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'failed': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'normed_value': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'raw_value': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'threshold': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'updated': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'worst': ('django.db.models.fields.IntegerField', [], {'default': '0'}) + }, + 'storageadmin.smartcapability': { + 'Meta': {'object_name': 'SMARTCapability'}, + 'capabilities': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + }, + 'storageadmin.smarterrorlog': { + 'Meta': {'object_name': 'SMARTErrorLog'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.smarterrorlogsummary': { + 'Meta': {'object_name': 'SMARTErrorLogSummary'}, + 'details': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'error_num': ('django.db.models.fields.IntegerField', [], {}), + 'etype': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), + 'state': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'storageadmin.smartidentity': { + 'Meta': {'object_name': 'SMARTIdentity'}, + 'assessment': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'ata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'capacity': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'device_model': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'enabled': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'firmware_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'in_smartdb': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'model_family': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'rotation_rate': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'sata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'scanned_on': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'sector_size': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'serial_number': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'supported': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + 'world_wide_name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) + }, + 'storageadmin.smartinfo': { + 'Meta': {'object_name': 'SMARTInfo'}, + 'disk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Disk']"}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) + }, + 'storageadmin.smarttestlog': { + 'Meta': {'object_name': 'SMARTTestLog'}, + 'description': ('django.db.models.fields.CharField', [], {'max_length': '64'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'lba_of_first_error': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), + 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), + 'pct_completed': ('django.db.models.fields.IntegerField', [], {}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '256'}), + 'test_num': ('django.db.models.fields.IntegerField', [], {}) + }, + 'storageadmin.smarttestlogdetail': { + 'Meta': {'object_name': 'SMARTTestLogDetail'}, + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), + 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.snapshot': { + 'Meta': {'unique_together': "(('share', 'name'),)", 'object_name': 'Snapshot'}, + 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), + 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), + 'real_name': ('django.db.models.fields.CharField', [], {'default': "'unknownsnap'", 'max_length': '4096'}), + 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), + 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), + 'snap_type': ('django.db.models.fields.CharField', [], {'default': "'admin'", 'max_length': '64'}), + 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'uvisible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), + 'writable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) + }, + 'storageadmin.supportcase': { + 'Meta': {'object_name': 'SupportCase'}, + 'case_type': ('django.db.models.fields.CharField', [], {'max_length': '6'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'notes': ('django.db.models.fields.TextField', [], {}), + 'status': ('django.db.models.fields.CharField', [], {'max_length': '9'}), + 'zipped_log': ('django.db.models.fields.CharField', [], {'max_length': '128'}) + }, + 'storageadmin.tlscertificate': { + 'Meta': {'object_name': 'TLSCertificate'}, + 'certificate': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'key': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), + 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) + }, + 'storageadmin.user': { + 'Meta': {'object_name': 'User'}, + 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), + 'email': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'gid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), + 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Group']", 'null': 'True'}), + 'homedir': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'public_key': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), + 'shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'smb_shares': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_users'", 'null': 'True', 'to': "orm['storageadmin.SambaShare']"}), + 'uid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), + 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'suser'", 'unique': 'True', 'null': 'True', 'to': u"orm['auth.User']"}), + 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}) + } + } + + complete_apps = ['storageadmin'] \ No newline at end of file diff --git a/src/rockstor/storageadmin/models/rockon.py b/src/rockstor/storageadmin/models/rockon.py index c6211695e..6876c5c2b 100644 --- a/src/rockstor/storageadmin/models/rockon.py +++ b/src/rockstor/storageadmin/models/rockon.py @@ -30,6 +30,19 @@ class RockOn(models.Model): website = models.CharField(max_length=2048, null=True) https = models.BooleanField(default=False) icon = models.URLField(max_length=1024, null=True) + ui = models.BooleanField(default=False) + volume_add_support = models.BooleanField(default=False) + more_info = models.CharField(max_length=4096, null=True) + + @property + def ui_port(self): + if (not self.ui): + return None + for co in self.dcontainer_set.all(): + for po in co.dport_set.all(): + if (po.uiport): + return po.hostp + return None class Meta: app_label = 'storageadmin' @@ -67,8 +80,8 @@ class Meta: class DPort(models.Model): description = models.CharField(max_length=1024, null=True) hostp = models.IntegerField(unique=True) + hostp_default = models.IntegerField(null=True) containerp = models.IntegerField() - containerp_default = models.IntegerField(null=True) container = models.ForeignKey(DContainer) protocol = models.CharField(max_length=32, null=True) uiport = models.BooleanField(default=False) @@ -85,7 +98,7 @@ class DVolume(models.Model): dest_dir = models.CharField(max_length=1024) uservol = models.BooleanField(default=False) description = models.CharField(max_length=1024, null=True) - min_size = models.IntegerField(default=0) + min_size = models.IntegerField(null=True) label = models.CharField(max_length=1024, null=True) @property @@ -102,7 +115,7 @@ class Meta: class ContainerOption(models.Model): container = models.ForeignKey(DContainer) name = models.CharField(max_length=1024) - val = models.CharField(max_length=1024) + val = models.CharField(max_length=1024, blank=True) class Meta: app_label = 'storageadmin' diff --git a/src/rockstor/storageadmin/serializers.py b/src/rockstor/storageadmin/serializers.py index c2d329e0d..011d027ea 100644 --- a/src/rockstor/storageadmin/serializers.py +++ b/src/rockstor/storageadmin/serializers.py @@ -185,6 +185,7 @@ class Meta: class RockOnSerializer(serializers.ModelSerializer): + ui_port = serializers.IntegerField() class Meta: model = RockOn diff --git a/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js b/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js index c3f93ee7e..818a4c83e 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js +++ b/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js @@ -595,7 +595,7 @@ RockonInstallComplete = RockstorWizardPage.extend({ RockonSettingsWizardView = WizardView.extend({ initialize: function() { WizardView.prototype.initialize.apply(this, arguments); - this.pages = []; + this.pages = [RockonSettingsSummary,]; this.rockon = this.model.get('rockon'); this.volumes = new RockOnVolumeCollection(null, {rid: this.rockon.id}); this.ports = new RockOnPortCollection(null, {rid: this.rockon.id}); @@ -640,9 +640,11 @@ RockonSettingsWizardView = WizardView.extend({ }, addPages: function() { - this.pages.push.apply(this.pages, - [RockonSettingsSummary, RockonAddShare, - RockonSettingsSummary, RockonSettingsComplete]); + if (this.rockon.get('volume_add_support')) { + this.pages.push.apply(this.pages, + [RockonAddShare, RockonSettingsSummary, + RockonSettingsComplete]); + } WizardView.prototype.render.apply(this, arguments); return this; }, @@ -659,7 +661,7 @@ RockonSettingsWizardView = WizardView.extend({ if (this.currentPageNum == 0) { this.$('#prev-page').hide(); this.$('#next-page').html('Add a Share'); - if (this.volumes.length == 0) { + if (!this.rockon.get('volume_add_support')) { this.$('#next-page').hide(); } } else if (this.currentPageNum == (this.pages.length - 2)) { diff --git a/src/rockstor/storageadmin/views/rockon.py b/src/rockstor/storageadmin/views/rockon.py index 3fad45645..007f0c887 100644 --- a/src/rockstor/storageadmin/views/rockon.py +++ b/src/rockstor/storageadmin/views/rockon.py @@ -85,20 +85,21 @@ def post(self, request, command=None): continue ro.description = r_d['description'] ro.website = r_d['website'] - ro.icon = r_d['icon'] - ro.volume_add_support = r_d['volume_add_support'] - ro.more_info = r_d['more_info'] else: ro = RockOn(name=name, description=r_d['description'], version='1.0', state='available', - status='stopped', website=r_d['website'], - icon=r_d['icon'], volume_add_support=r_d['volume_add_support'], - more_info=r_d['more_info']) + status='stopped', website=r_d['website']) if ('ui' in r_d): ui_d = r_d['ui'] ro.link = ui_d['slug'] ro.https = ui_d['https'] + if ('icon' in r_d): + ro.icon = r_d['icon'] + if ('volume_add_support' in r_d): + ro.volume_add_support = r_d['volume_add_support'] + if ('more_info' in r_d): + ro.more_info = r_d['more_info'] ro.save() containers = r_d['containers'] for c in containers.keys(): @@ -167,16 +168,18 @@ def post(self, request, command=None): v_d = c_d['volumes'] for v in v_d.keys(): cv_d = v_d[v] + vo = None if (DVolume.objects.filter(dest_dir=v, container=co).exists()): vo = DVolume.objects.get(dest_dir=v, container=co) vo.description = cv_d['description'] vo.label = cv_d['label'] - vo.min_size = cv_d['min_size'] vo.save() else: vo = DVolume(container=co, dest_dir=v, description=cv_d['description'], - min_size=cv_d['min_size'], label=cv_d['label']) - vo.save() + label=cv_d['label']) + if ('min_size' in cv_d): + vo.min_size = cv_d['min_size'] + vo.save() for vo in DVolume.objects.filter(container=co): if (vo.dest_dir not in v_d): diff --git a/src/rockstor/storageadmin/views/rockon_helpers.py b/src/rockstor/storageadmin/views/rockon_helpers.py index e5af77bd2..863e5c8c4 100644 --- a/src/rockstor/storageadmin/views/rockon_helpers.py +++ b/src/rockstor/storageadmin/views/rockon_helpers.py @@ -270,20 +270,17 @@ def btsync_install(rockon): run_command(cmd) +def generic_install(rockon): + for c in DContainer.objects.filter(rockon=rockon).order_by('launch_order'): + cmd = [DOCKER, 'run', '-d', '--name', c.name,] + cmd.extend(vol_ops(c)) + cmd.extend(port_ops(c)) + cmd.append(c.dimage.name) + run_command(cmd) + + def syncthing_install(rockon): - rm_container(rockon.name) - cmd = [DOCKER, 'run', '-d', '--name', rockon.name,] - c = DContainer.objects.get(rockon=rockon) - image = c.dimage.name - run_command([DOCKER, 'pull', image]) - for v in DVolume.objects.filter(container=c): - share_mnt = '%s%s' % (settings.MNT_PT, v.share.name) - mount_share(v.share.name, share_mnt) - cmd.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir), ]) - for p in DPort.objects.filter(container=c): - cmd.extend(['-p', '%d:%d' % (p.hostp, p.containerp), ]) - cmd.append(image) - run_command(cmd) + return generic_install(rockon) def pull_images(rockon): diff --git a/src/rockstor/storageadmin/views/rockon_json.py b/src/rockstor/storageadmin/views/rockon_json.py index 53726f071..497a1596f 100644 --- a/src/rockstor/storageadmin/views/rockon_json.py +++ b/src/rockstor/storageadmin/views/rockon_json.py @@ -1,98 +1,136 @@ -rockons = \ - {u'OpenVPN': {u'containers': {u'openvpn': {'image': 'kylemanna/openvpn', - 'ports': {'1194': - {'protocol': 'udp', - 'label': 'Server port', - 'host_default': 1194, - 'description': 'OpenVPN server listening port. You may need to open this port on your firewall.',},}, - 'launch_order': 2, - u'opts': [['--cap-add=NET_ADMIN', ''], - ['--volumes-from', 'ovpn-data'], ],}, - u'ovpn-data': {'image': 'busybox', - 'opts': [['-v', '/etc/openvpn'], ], - 'launch_order': 1,},}, - 'custom_config': {'servername': - {'label': 'Server address', - 'description': "Your Rockstor system's public ip address or hostname.",},}, +TCP = 'tcp' +UDP = 'udp' +ONE_GB = 1073741824 - 'description': 'Open Source VPN server', - 'website': 'https://openvpn.net/', - 'icon': 'https://openvpn.net/', - 'more_info': '

    Additional steps are required by this Rockon.

    The following steps require you to execute commands as the root user on your Rockstor system.

    Initialize PKI    Do this only once.

    /opt/rockstor/bin/ovpn-initpki

    Generate a client certificate    One for every client(without passphrase)

    /opt/rockstor/bin/ovpn-client-gen

    Retrieve client configuration    For any one of your clients. The resulting .ovpn file can be used to connect.

    /opt/rockstor/bin/ovpn-client-print

    Configure firewall

    If your Rockstor system is behind a firewall, you will need to configure it to allow OpenVPN traffic to forward to your Rockstor system.

    ', - 'volume_add_support': False, }, +openvpn = {u'containers': {u'openvpn': {'image': 'kylemanna/openvpn', + 'ports': {'1194': + {'protocol': 'udp', + 'label': 'Server port', + 'host_default': 1194, + 'description': 'OpenVPN server listening port. You may need to open it on your firewall.',},}, + 'launch_order': 2, + u'opts': [['--cap-add=NET_ADMIN', ''], + ['--volumes-from', 'ovpn-data'], ],}, + u'ovpn-data': {'image': 'busybox', + 'opts': [['-v', '/etc/openvpn'], ], + 'launch_order': 1,},}, - u'Plex': {u'app_link': u'web', - u'containers': {u'plex': {u'image': u'timhaak/plex', - u'opts': {u'net': u'host'}, - u'ports': {u'32400': u'ui'}, - u'volumes': [u'/config', '/data',]}}, - u'custom_config': {u'iprange': u'ip range of your network'}, - u'description': u'Plex media server', - u'website': u'https://plex.tv/'}, - 'Transmission': {'app_link': '', - 'containers': {'transmission': {'image': 'dperson/transmission', - 'ports': {'9091': 'ui', - '51413': ''}, - 'volumes': ['/var/lib/transmission-daemon/downloads', - '/var/lib/transmission-daemon/incomplete',]}}, - 'custom_config': {'TRUSER': 'Set the username for your Transmission UI', - 'TRPASSWD': 'Password for the user'}, - 'description': 'Open Source BitTorrent client', - 'website': 'http://www.transmissionbt.com/'}, - 'BTSync': {'app_link': '', - 'containers': {'btsync': {'image': 'aostanin/btsync', - 'ports': {'8888': 'ui'}, - 'volumes': ['/data']}}, - 'description': 'BitTorrent Sync', - 'website': 'https://www.getsync.com/'}, - 'Syncthing': {'app_link': '', - 'containers': {'syncthing': {'image': 'istepanov/syncthing', - 'ports': {'8080': 'ui', - '22000': '', - '21025': 'udp'}, - 'volumes': ['/home/syncthing/.config/syncthing', - '/home/syncthing/Sync',]}}, - 'description': 'Continuous File Synchronization', - 'website': 'https://syncthing.net/',}, - 'OwnCloud': {'ui': {'slug': '', - 'https': True,}, - 'containers': {'owncloud': {'image': 'pschmitt/owncloud', - 'ports': {'443': - {'ui': True, - 'host_default': 8080, - 'protocol': 'tcp', - 'label': 'UI port', - 'description': 'OwnCloud UI port. Since Rockstor WebUI runs on 443, choose a different port or the suggested default.',},}, - 'volumes': {'/var/www/owncloud/data': - {'description': 'Choose a dedicated Share for OwnCloud data. Eg: create a Share called owncloud-data for this purpose alone.', - 'min_size': 1073741824, - 'label': 'Data directory',}, - '/var/www/owncloud/config': - {'description': 'Choose a dedicated Share for OwnCloud configuration. Eg: create a Share called owncloud-config for this purpose alone.', - 'label': 'Config directory', - 'min_size': 1073741824,},}, - 'launch_order': 2,}, - 'owncloud-postgres': {'image': 'postgres', - 'volumes': {'/var/lib/postgresql/data': - {'description': 'Choose a dedicated Share for OwnClouds postgresql database. Eg: create a Share called owncloud-db for this purpose alone.', - 'label': 'Database', - 'min_size': 1073741824, }, }, - 'launch_order': 1}, }, - 'container_links': {'owncloud': [{'source_container': 'owncloud-postgres', - 'name': 'db'},]}, - 'custom_config': {'db_user': - {'label': 'DB User', - 'description': 'Choose a administrator username for the OwnCloud database.',}, - 'db_pw': - {'label': 'DB Password', - 'description': 'Choose a secure password for the database admin user',},}, - 'description': 'Secure file sharing and hosting', - 'website': 'https://owncloud.org/', - 'icon': 'https://owncloud.org/wp-content/themes/owncloudorgnew/assets/img/common/logo_owncloud.svg', - 'more_info': '

    Default username for your OwnCloud UI is admin and password is changeme

    ', - 'volume_add_support': False, }, - } + 'custom_config': {'servername': + {'label': 'Server address', + 'description': "Your Rockstor system's public ip address or hostname.",},}, + + 'description': 'Open Source VPN server', + 'website': 'https://openvpn.net/', + 'icon': 'https://openvpn.net/', + 'more_info': '

    Additional steps are required by this Rockon.

    The following steps require you to execute commands as the root user on your Rockstor system.

    Initialize PKI    Do this only once.

    /opt/rockstor/bin/ovpn-initpki

    Generate a client certificate    One for every client(without passphrase)

    /opt/rockstor/bin/ovpn-client-gen

    Retrieve client configuration    For any one of your clients. The resulting .ovpn file can be used to connect.

    /opt/rockstor/bin/ovpn-client-print

    Configure firewall

    If your Rockstor system is behind a firewall, you will need to configure it to allow OpenVPN traffic to forward to your Rockstor system.

    ', + 'volume_add_support': False, } + +owncloud = {'ui': {'slug': '', + 'https': True,}, + + 'containers': {'owncloud': {'image': 'pschmitt/owncloud', + 'ports': {'443': + {'ui': True, + 'host_default': 8080, + 'protocol': 'tcp', + 'label': 'WebUI port', + 'description': 'OwnCloud WebUI port. Since Rockstor WebUI runs on 443, choose a different port or the suggested default.',},}, + 'volumes': {'/var/www/owncloud/data': + {'description': 'Choose a dedicated Share for OwnCloud data. Eg: create a Share called owncloud-data for this purpose alone.', + 'min_size': 1073741824, + 'label': 'Data directory',}, + '/var/www/owncloud/config': + {'description': 'Choose a dedicated Share for OwnCloud configuration. Eg: create a Share called owncloud-config for this purpose alone.', + 'label': 'Config directory', + 'min_size': 1073741824,},}, + 'launch_order': 2,}, + 'owncloud-postgres': {'image': 'postgres', + 'volumes': {'/var/lib/postgresql/data': + {'description': 'Choose a dedicated Share for OwnClouds postgresql database. Eg: create a Share called owncloud-db for this purpose alone.', + 'label': 'Database', + 'min_size': 1073741824, }, }, + 'launch_order': 1}, }, + 'container_links': {'owncloud': [{'source_container': 'owncloud-postgres', + 'name': 'db'},]}, + 'custom_config': {'db_user': + {'label': 'DB User', + 'description': 'Choose a administrator username for the OwnCloud database.',}, + 'db_pw': + {'label': 'DB Password', + 'description': 'Choose a secure password for the database admin user',},}, + 'description': 'Secure file sharing and hosting', + 'website': 'https://owncloud.org/', + 'icon': 'https://owncloud.org/wp-content/themes/owncloudorgnew/assets/img/common/logo_owncloud.svg', + 'more_info': '

    Default username for your OwnCloud UI is admin and password is changeme

    ', + 'volume_add_support': False, } + +syncthing = {'ui': {'slug': '', + 'https': True,}, + + 'containers': {'syncthing': {'image': 'istepanov/syncthing', + 'ports': {'8384': + {'ui': True, + 'host_default': 8090, + 'protocol': TCP, + 'label': 'WebUI port', + 'description': 'Syncthing WebUI port. Choose the suggested default unless you have a strong reason not to.',}, + '22000': + {'host_default': 22000, + 'protocol': TCP, + 'label': 'Listening port', + 'description': 'Port for incoming data. You may need to open it on your firewall',}, + '21025': + {'host_default': 21025, + 'protocol': UDP, + 'label': 'Discovery port', + 'description': 'Port for discovery broadcasts. You may need to open it on your firewall',},}, + 'volumes': {'/home/syncthing/.config/syncthing': + {'description': 'Choose a dedicated Share for configuration. Eg: create a Share called syncthing-config for this purpose alone.', + 'min_size': ONE_GB, + 'label': 'Config directory',}, + '/home/syncthing/Sync': + {'label': 'Data directory', + 'description': 'Choose a dedicated Share for all incoming data. Eg: create a Share called syncthing-data for this purpose alone.',},}, + 'launch_order': 1,},}, + 'description': 'Continuous File Synchronization', + 'website': 'https://syncthing.net/',} + +rockons = {'OpenVPN': openvpn, + 'OwnCloud': owncloud, + 'Syncthing': syncthing, } + + + +# rockons = \ +# { + +# u'Plex': {u'app_link': u'web', +# u'containers': {u'plex': {u'image': u'timhaak/plex', +# u'opts': {u'net': u'host'}, +# u'ports': {u'32400': u'ui'}, +# u'volumes': [u'/config', '/data',]}}, +# u'custom_config': {u'iprange': u'ip range of your network'}, +# u'description': u'Plex media server', +# u'website': u'https://plex.tv/'}, +# 'Transmission': {'app_link': '', +# 'containers': {'transmission': {'image': 'dperson/transmission', +# 'ports': {'9091': 'ui', +# '51413': ''}, +# 'volumes': ['/var/lib/transmission-daemon/downloads', +# '/var/lib/transmission-daemon/incomplete',]}}, +# 'custom_config': {'TRUSER': 'Set the username for your Transmission UI', +# 'TRPASSWD': 'Password for the user'}, +# 'description': 'Open Source BitTorrent client', +# 'website': 'http://www.transmissionbt.com/'}, +# 'BTSync': {'app_link': '', +# 'containers': {'btsync': {'image': 'aostanin/btsync', +# 'ports': {'8888': 'ui'}, +# 'volumes': ['/data']}}, +# 'description': 'BitTorrent Sync', +# 'website': 'https://www.getsync.com/'}, + +# } # help text for Volumes # It is strongly recommended From 6d8a73fa2a7c72626b6a4df6e09a181c14b15869 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sat, 4 Jul 2015 11:41:57 -0700 Subject: [PATCH 31/40] simplify update with get_or_create. #697 --- src/rockstor/storageadmin/views/rockon.py | 115 ++++++++---------- .../storageadmin/views/rockon_json.py | 2 +- 2 files changed, 49 insertions(+), 68 deletions(-) diff --git a/src/rockstor/storageadmin/views/rockon.py b/src/rockstor/storageadmin/views/rockon.py index 007f0c887..c59f4546f 100644 --- a/src/rockstor/storageadmin/views/rockon.py +++ b/src/rockstor/storageadmin/views/rockon.py @@ -71,25 +71,20 @@ def post(self, request, command=None): if (command == 'update'): rockons = self._get_available(request) - for r in rockons.keys(): + for r in rockons: name = r r_d = rockons[r] - ro = None - if (RockOn.objects.filter(name=name).exists()): - ro = RockOn.objects.get(name=name) - if (ro.state == 'installed' or (re.match('pending', ro.state) is not None)): - #don't update metadata if it's installed or in some pending state. - logger.debug('Rock-On(%s) is either installed or ' - 'in pending state. Skipping update.' % - name) - continue - ro.description = r_d['description'] - ro.website = r_d['website'] - else: - ro = RockOn(name=name, - description=r_d['description'], - version='1.0', state='available', - status='stopped', website=r_d['website']) + ro_defaults = {'description': r_d['description'], + 'website': r_d['website'], + 'version': '1.0', + 'state': 'available', + 'status': 'stopped'} + ro, created = RockOn.objects.get_or_create(name=name, + defaults=ro_defaults) + if (not created): + ro.description = ro_defaults['description'] + ro.website = ro_defaults['website'] + ro.version = ro_defaults['version'] if ('ui' in r_d): ui_d = r_d['ui'] ro.link = ui_d['slug'] @@ -102,31 +97,30 @@ def post(self, request, command=None): ro.more_info = r_d['more_info'] ro.save() containers = r_d['containers'] - for c in containers.keys(): - io = None + for c in containers: c_d = containers[c] - iname = c_d['image'] - if (DImage.objects.filter(name=iname).exists()): - io = DImage.objects.get(name=iname) - else: - io = DImage(name=iname, tag='latest', repo='foo') - io.save() - - co = None - if (DContainer.objects.filter(name=c).exists()): - co = DContainer.objects.get(name=c) + io, created = DImage.objects.get_or_create(name=c_d['image'], + defaults={'tag': 'latest', + 'repo': 'na'}) + co_defaults = {'rockon': ro, + 'dimage': io, + 'launch_order': c_d['launch_order'],} + co, created = DContainer.objects.get_or_create(name=c, + defaults=co_defaults) + if (co.rockon.name != ro.name): + e_msg = ('Container(%s) belongs to another ' + 'Rock-On(%s). Update rolled back.' % + (c, co.rockon.name)) + handle_exception(Exception(e_msg), request) + if (not created): co.dimage = io - co.rockon = ro - co.launch_order = c_d['launch_order'] - else: - co = DContainer(rockon=ro, dimage=io, name=c, - launch_order=c_d['launch_order']) + co.launch_order = co_defaults['launch_order'] co.save() - + ports = {} if ('ports' in containers[c]): ports = containers[c]['ports'] - for p in ports.keys(): + for p in ports: p_d = ports[p] p = int(p) po = None @@ -156,8 +150,6 @@ def post(self, request, command=None): ro.ui = True ro.save() po.save() - else: - ports = {} ports = [int(p) for p in ports] for po in DPort.objects.filter(container=co): if (po.containerp not in ports): @@ -166,21 +158,18 @@ def post(self, request, command=None): v_d = {} if ('volumes' in c_d): v_d = c_d['volumes'] - for v in v_d.keys(): + for v in v_d: cv_d = v_d[v] - vo = None - if (DVolume.objects.filter(dest_dir=v, container=co).exists()): - vo = DVolume.objects.get(dest_dir=v, container=co) - vo.description = cv_d['description'] - vo.label = cv_d['label'] - vo.save() - else: - vo = DVolume(container=co, dest_dir=v, description=cv_d['description'], - label=cv_d['label']) + vo_defaults = {'description': cv_d['description'], + 'label': cv_d['label']} + vo, created = DVolume.objects.get_or_create(dest_dir=v, container=co, + defaults=vo_defaults) + if (not created): + vo.description = vo_defaults['description'] + vo.label = vo_defaults['label'] if ('min_size' in cv_d): vo.min_size = cv_d['min_size'] vo.save() - for vo in DVolume.objects.filter(container=co): if (vo.dest_dir not in v_d): vo.delete() @@ -189,20 +178,17 @@ def post(self, request, command=None): options = containers[c]['opts'] id_l = [] for o in options: - try: - oo = ContainerOption.objects.get(container=co, name=o[0], val=o[1]) - id_l.append(oo.id) - except ContainerOption.DoesNotExist: - oo = ContainerOption(container=co, name=o[0], val=o[1]) - oo.save() - id_l.append(oo.id) + oo, created = ContainerOption.objects.get_or_create(container=co, + name=o[0], + val=o[1]) + id_l.append(oo.id) for oo in ContainerOption.objects.filter(container=co): if (oo.id not in id_l): oo.delete() if ('container_links' in r_d): l_d = r_d['container_links'] - for cname in l_d.keys(): + for cname in l_d: ll = l_d[cname] lsources = [l['source_container'] for l in ll] co = DContainer.objects.get(rockon=ro, name=cname) @@ -211,15 +197,12 @@ def post(self, request, command=None): clo.delete() for cl_d in ll: sco = DContainer.objects.get(rockon=ro, name=cl_d['source_container']) - if (DContainerLink.objects.filter(source=sco, destination=co).exists()): - clo = DContainerLink.objects.get(source=sco) - clo.name = cl_d['name'] - clo.save() - else: - clo = DContainerLink(source=sco, - destination=co, name=cl_d['name']) - clo.save() + clo, created = DContainerLink.objects.get_or_create(source=sco, + destination=co) + clo.name = cl_d['name'] + clo.save() + cc_d = {} if ('custom_config' in r_d): cc_d = r_d['custom_config'] for k in cc_d: @@ -238,8 +221,6 @@ def post(self, request, command=None): except: pass cco.save() - else: - cc_d = {} for cco in DCustomConfig.objects.filter(rockon=ro): if (cco.key not in cc_d): cco.delete() diff --git a/src/rockstor/storageadmin/views/rockon_json.py b/src/rockstor/storageadmin/views/rockon_json.py index 497a1596f..27de9d33b 100644 --- a/src/rockstor/storageadmin/views/rockon_json.py +++ b/src/rockstor/storageadmin/views/rockon_json.py @@ -71,7 +71,7 @@ 'containers': {'syncthing': {'image': 'istepanov/syncthing', 'ports': {'8384': {'ui': True, - 'host_default': 8090, + 'host_default': 8384, 'protocol': TCP, 'label': 'WebUI port', 'description': 'Syncthing WebUI port. Choose the suggested default unless you have a strong reason not to.',}, From ba01c57beef2f2b92fe90cdc248f1cefb4e068dd Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sat, 4 Jul 2015 13:36:35 -0700 Subject: [PATCH 32/40] refactor and simplify transmission rock-on. #697 --- src/rockstor/storageadmin/views/rockon.py | 5 ++- .../storageadmin/views/rockon_helpers.py | 24 +++++----- .../storageadmin/views/rockon_json.py | 44 +++++++++++++------ 3 files changed, 45 insertions(+), 28 deletions(-) diff --git a/src/rockstor/storageadmin/views/rockon.py b/src/rockstor/storageadmin/views/rockon.py index c59f4546f..95f7ef4df 100644 --- a/src/rockstor/storageadmin/views/rockon.py +++ b/src/rockstor/storageadmin/views/rockon.py @@ -88,7 +88,8 @@ def post(self, request, command=None): if ('ui' in r_d): ui_d = r_d['ui'] ro.link = ui_d['slug'] - ro.https = ui_d['https'] + if ('https' in ui_d): + ro.https = ui_d['https'] if ('icon' in r_d): ro.icon = r_d['icon'] if ('volume_add_support' in r_d): @@ -122,6 +123,8 @@ def post(self, request, command=None): ports = containers[c]['ports'] for p in ports: p_d = ports[p] + if ('protocol' not in p_d): + p_d['protocol'] = None p = int(p) po = None if (DPort.objects.filter(containerp=p, container=co).exists()): diff --git a/src/rockstor/storageadmin/views/rockon_helpers.py b/src/rockstor/storageadmin/views/rockon_helpers.py index 863e5c8c4..cf3f05589 100644 --- a/src/rockstor/storageadmin/views/rockon_helpers.py +++ b/src/rockstor/storageadmin/views/rockon_helpers.py @@ -204,13 +204,18 @@ def port_ops(container): pstr = '%s:%s' % (po.hostp, po.containerp) if (po.protocol is not None): pstr = '%s/%s' % (pstr, po.protocol) - ops_list.extend(['-p', pstr]) + ops_list.extend(['-p', pstr]) + else: + tcp = '%s/tcp' % pstr + udp = '%s/udp' % pstr + ops_list.extend(['-p', tcp, '-p', udp,]) return ops_list def vol_ops(container): ops_list = [] for v in DVolume.objects.filter(container=container): share_mnt = ('%s%s' % (settings.MNT_PT, v.share.name)) + mount_share(v.share.name, share_mnt) ops_list.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir)]) return ops_list @@ -237,20 +242,13 @@ def openvpn_install(rockon): def transmission_install(rockon): - rm_container(rockon.name) - cmd = [DOCKER, 'run', '-d', '--name', rockon.name,] + co = DContainer.objects.get(rockon=rockon, launch_order=1) + cmd = [DOCKER, 'run', '-d', '--name', co.name] for cco in DCustomConfig.objects.filter(rockon=rockon): cmd.extend(['-e', '%s=%s' % (cco.key, cco.val)]) - c = DContainer.objects.get(rockon=rockon) - image = c.dimage.name - run_command([DOCKER, 'pull', image]) - for v in DVolume.objects.filter(container=c): - share_mnt = '%s%s' % (settings.MNT_PT, v.share.name) - mount_share(v.share.name, share_mnt) - cmd.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir), ]) - for p in DPort.objects.filter(container=c): - cmd.extend(['-p', '%d:%d' % (p.hostp, p.containerp), ]) - cmd.append(image) + cmd.extend(vol_ops(co)) + cmd.extend(port_ops(co)) + cmd.append(co.dimage.name) run_command(cmd) diff --git a/src/rockstor/storageadmin/views/rockon_json.py b/src/rockstor/storageadmin/views/rockon_json.py index 27de9d33b..4c3592afa 100644 --- a/src/rockstor/storageadmin/views/rockon_json.py +++ b/src/rockstor/storageadmin/views/rockon_json.py @@ -74,17 +74,17 @@ 'host_default': 8384, 'protocol': TCP, 'label': 'WebUI port', - 'description': 'Syncthing WebUI port. Choose the suggested default unless you have a strong reason not to.',}, + 'description': 'Syncthing WebUI port. Suggested default: 8384.',}, '22000': {'host_default': 22000, 'protocol': TCP, 'label': 'Listening port', - 'description': 'Port for incoming data. You may need to open it on your firewall',}, + 'description': 'Port for incoming data. You may need to open it(protocol: tcp) on your firewall. Suggest default: 22000.',}, '21025': {'host_default': 21025, 'protocol': UDP, 'label': 'Discovery port', - 'description': 'Port for discovery broadcasts. You may need to open it on your firewall',},}, + 'description': 'Port for discovery broadcasts. You may need to open it(protocol: udp) on your firewall. Suggested default: 21025.',},}, 'volumes': {'/home/syncthing/.config/syncthing': {'description': 'Choose a dedicated Share for configuration. Eg: create a Share called syncthing-config for this purpose alone.', 'min_size': ONE_GB, @@ -96,9 +96,35 @@ 'description': 'Continuous File Synchronization', 'website': 'https://syncthing.net/',} +transmission = {'ui': {'slug': '',}, + 'containers': {'transmission': {'image': 'dperson/transmission', + 'ports': {'9091': + {'ui': True, + 'host_default': 9091, + 'protocol': 'tcp', + 'label': 'WebUI port', + 'description': 'Transmission WebUI port. Suggested default: 9091',}, + '51413': + {'host_default': 51413, + 'label': 'Sharing port', + 'description': 'Port used to share the file being downloaded. You may need to open it(protocol: tcp and udp) on your firewall. Suggested default: 51413.',},}, + 'volumes': {'/var/lib/transmission-daemon': + {'description': "Choose a Share where Transmission will save all of it's files including your downloads. Eg: create a Share called transmission-rockon.", + 'label': 'Data directory',},}, + 'launch_order': 1,},}, + 'custom_config': {'TRUSER': + {'label': 'WebUI username', + 'description': 'Choose a login username for Transmission WebUI.',}, + 'TRPASSWD': + {'label': 'WebUI password', + 'description': 'Choose a login password for the Transmission WebUI.',},}, + 'description': 'Open Source BitTorrent client', + 'website': 'http://www.transmissionbt.com/',} + rockons = {'OpenVPN': openvpn, 'OwnCloud': owncloud, - 'Syncthing': syncthing, } + 'Syncthing': syncthing, + 'Transmission': transmission, } @@ -113,16 +139,6 @@ # u'custom_config': {u'iprange': u'ip range of your network'}, # u'description': u'Plex media server', # u'website': u'https://plex.tv/'}, -# 'Transmission': {'app_link': '', -# 'containers': {'transmission': {'image': 'dperson/transmission', -# 'ports': {'9091': 'ui', -# '51413': ''}, -# 'volumes': ['/var/lib/transmission-daemon/downloads', -# '/var/lib/transmission-daemon/incomplete',]}}, -# 'custom_config': {'TRUSER': 'Set the username for your Transmission UI', -# 'TRPASSWD': 'Password for the user'}, -# 'description': 'Open Source BitTorrent client', -# 'website': 'http://www.transmissionbt.com/'}, # 'BTSync': {'app_link': '', # 'containers': {'btsync': {'image': 'aostanin/btsync', # 'ports': {'8888': 'ui'}, From 603ce4ccc2ffe1248731bfffde976b012e71baf7 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sat, 4 Jul 2015 16:54:00 -0700 Subject: [PATCH 33/40] simplify and refactory btsync rock-on. #697 --- .../rockons/settings_summary_table.jst | 10 ----- .../templates/services/configure_docker.jst | 40 +++++++++---------- .../storageadmin/views/rockon_helpers.py | 14 +------ .../storageadmin/views/rockon_json.py | 29 ++++++++++++-- 4 files changed, 47 insertions(+), 46 deletions(-) diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/settings_summary_table.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/settings_summary_table.jst index 05b96525c..9647d2161 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/settings_summary_table.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/settings_summary_table.jst @@ -45,13 +45,3 @@

    Important information about this Rock-On

    <%= rockon.get('more_info') %> <% } %> - -<% if (rockon.get('name') == "BTSync") { %> - <% var vol = volumes.find(function(v) { return v.get('dest_dir') == '/data'; }); %> -

    Information about Authentication

    -

    The default username for the UI is admin and the password is password .

    - <% if (vol) { %> -

    You can change the username and password by editing btsync.conf inside the Share called <%= vol.get('share_name') %>

    -

    Restart the Rock-on after changing the password for it to take affect.

    - <% } %> -<% } %> diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/services/configure_docker.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/services/configure_docker.jst index 59cb4eea2..04c725dd6 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/services/configure_docker.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/services/configure_docker.jst @@ -20,43 +20,43 @@

    Configure <%= service.get('display_name') %> Service

    - +
    +

    We strongly recommend that you create a separate Share(at least 5GB size) for this purpose. During the lifetime of Rock-ons, several snapshots will be created and space could fill up quickly. It is best managed in a separate Share to avoid clobbering other data.

    +

    To create a new Share, click here.

    +
    -
    -
    -
    We strongly recommend that you create a separate Share(at least 5GB size) for this purpose. During the lifetime of Rock-ons, several snapshots will be created and space could fill up quickly. It is best managed in a separate Share to avoid clobbering other data.
    -
    +
    - <% if (shares.length === 0) {%> -

    You currently have no shares. You will need a share to run the - the Rock-ons service. -

    - Go to shares - <% } else { %> - + + <% shares.each( function(share, index) { %> <% if (share.get('name') == config.root_share) { %> - <% } else { %> + <% } else { %> - <% } %> - <% }); %> - - + <% } %> + <% }); %> +
    <% } %> - - + +
    diff --git a/src/rockstor/storageadmin/views/rockon_helpers.py b/src/rockstor/storageadmin/views/rockon_helpers.py index cf3f05589..11f62a792 100644 --- a/src/rockstor/storageadmin/views/rockon_helpers.py +++ b/src/rockstor/storageadmin/views/rockon_helpers.py @@ -253,19 +253,7 @@ def transmission_install(rockon): def btsync_install(rockon): - rm_container(rockon.name) - cmd = [DOCKER, 'run', '-d', '--name', rockon.name,] - c = DContainer.objects.get(rockon=rockon) - image = c.dimage.name - run_command([DOCKER, 'pull', image]) - for v in DVolume.objects.filter(container=c): - share_mnt = '%s%s' % (settings.MNT_PT, v.share.name) - mount_share(v.share.name, share_mnt) - cmd.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir), ]) - for p in DPort.objects.filter(container=c): - cmd.extend(['-p', '%d:%d' % (p.hostp, p.containerp), ]) - cmd.append(image) - run_command(cmd) + return generic_install(rockon) def generic_install(rockon): diff --git a/src/rockstor/storageadmin/views/rockon_json.py b/src/rockstor/storageadmin/views/rockon_json.py index 4c3592afa..db5135d1d 100644 --- a/src/rockstor/storageadmin/views/rockon_json.py +++ b/src/rockstor/storageadmin/views/rockon_json.py @@ -79,7 +79,7 @@ {'host_default': 22000, 'protocol': TCP, 'label': 'Listening port', - 'description': 'Port for incoming data. You may need to open it(protocol: tcp) on your firewall. Suggest default: 22000.',}, + 'description': 'Port for incoming data. You may need to open it(protocol: tcp) on your firewall. Suggested default: 22000.',}, '21025': {'host_default': 21025, 'protocol': UDP, @@ -101,7 +101,7 @@ 'ports': {'9091': {'ui': True, 'host_default': 9091, - 'protocol': 'tcp', + 'protocol': TCP, 'label': 'WebUI port', 'description': 'Transmission WebUI port. Suggested default: 9091',}, '51413': @@ -121,10 +121,33 @@ 'description': 'Open Source BitTorrent client', 'website': 'http://www.transmissionbt.com/',} +btsync = {'ui': {'slug': '',}, + 'containers': {'btsync': {'image': 'aostanin/btsync', + 'ports': {'8888': + {'ui': True, + 'host_default': 8888, + 'protocol': TCP, + 'label': 'WebUI port', + 'description': 'BTSync WebUI port. Suggested default: 8888',}, + '3369': + {'host_default': 3369, + 'procotol': UDP, + 'label': 'Listening port', + 'description': 'Port for incoming data. You may need to open it(protocol: udp) on your firewall. Suggested default: 3369.',},}, + 'volumes': {'/data': + {'description': 'Choose a dedicated Share for all incoming data. Eg: create a Share called btsync-data for this purpose alone.', + 'label': 'Data directory',},}, + 'launch_order': 1,},}, + 'description': 'BitTorrent Sync', + 'website': 'https://www.getsync.com/', + 'volume_add_support': True, + 'more_info': '

    Authentication

    Default username for your BTSync UI isadminand password ispassword

    Storage

    We strongly recommend changing the Default folder location to/datain the UI preferences.

    You can also assign additional Shares for custom organization of your data.

    '} + rockons = {'OpenVPN': openvpn, 'OwnCloud': owncloud, 'Syncthing': syncthing, - 'Transmission': transmission, } + 'Transmission': transmission, + 'BTSync': btsync, } From 7e633132e8fedf1bd6aa9054c4150799160195e2 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sat, 4 Jul 2015 18:16:53 -0700 Subject: [PATCH 34/40] simplify plex rock-on. #697 --- src/rockstor/storageadmin/views/rockon.py | 9 +-- .../storageadmin/views/rockon_helpers.py | 59 ++++--------------- .../storageadmin/views/rockon_json.py | 51 ++++++++-------- 3 files changed, 38 insertions(+), 81 deletions(-) diff --git a/src/rockstor/storageadmin/views/rockon.py b/src/rockstor/storageadmin/views/rockon.py index 95f7ef4df..2334c1bd0 100644 --- a/src/rockstor/storageadmin/views/rockon.py +++ b/src/rockstor/storageadmin/views/rockon.py @@ -216,14 +216,7 @@ def post(self, request, command=None): if (not created): cco.description = ccc_d['description'] cco.label = ccc_d['label'] - if (not created and k == 'iprange' and ro.name == 'Plex'): - from storageadmin.models import NetworkInterface - try: - ni = NetworkInterface.objects.filter(itype='management')[0] - cco.val = ('%s/255.255.255.0' % ni.ipaddr) - except: - pass - cco.save() + cco.save() for cco in DCustomConfig.objects.filter(rockon=ro): if (cco.key not in cc_d): cco.delete() diff --git a/src/rockstor/storageadmin/views/rockon_helpers.py b/src/rockstor/storageadmin/views/rockon_helpers.py index 11f62a792..2ff13f01e 100644 --- a/src/rockstor/storageadmin/views/rockon_helpers.py +++ b/src/rockstor/storageadmin/views/rockon_helpers.py @@ -150,45 +150,6 @@ def uninstall(rid, new_state='available'): save_error=False) -def plex_install(rockon): - # to make install idempotent, remove the container that may exist from a previous attempt - rm_container(rockon.name) - cmd = [DOCKER, 'run', '-d', '--name', rockon.name, '--net="host"', ] - config_share = None - for c in DContainer.objects.filter(rockon=rockon): - image = c.dimage.name - run_command([DOCKER, 'pull', image, ]) - for v in DVolume.objects.filter(container=c): - share_mnt = '%s%s' % (settings.MNT_PT, v.share.name) - if (v.dest_dir == '/config'): - config_share = share_mnt - cmd.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir), ]) - for p in DPort.objects.filter(container=c): - cmd.extend(['-p', '%d:%d' % (p.hostp, p.containerp), ]) - cmd.append(image) - logger.debug('cmd = %s' % cmd) - run_command(cmd) - run_command([DOCKER, 'stop', rockon.name, ]) - pref_file = ('%s/Library/Application Support/Plex Media Server/' - 'Preferences.xml' % config_share) - logger.debug('pref file: %s' % pref_file) - cco = DCustomConfig.objects.get(rockon=rockon) - logger.debug('network val %s' % cco.val) - import re - from tempfile import mkstemp - from shutil import move - fo, npath = mkstemp() - with open(pref_file) as pfo, open(npath, 'w') as tfo: - for l in pfo.readlines(): - nl = l - if (re.match('' % - (l[:-3], cco.val)) - tfo.write('%s\n' % nl) - return move(npath, pref_file) - - def container_ops(container): ops_list = [] for o in ContainerOption.objects.filter(container=container): @@ -219,6 +180,16 @@ def vol_ops(container): ops_list.extend(['-v', '%s:%s' % (share_mnt, v.dest_dir)]) return ops_list +def generic_install(rockon): + for c in DContainer.objects.filter(rockon=rockon).order_by('launch_order'): + cmd = [DOCKER, 'run', '-d', '--name', c.name,] + cmd.extend(vol_ops(c)) + cmd.extend(port_ops(c)) + cmd.extend(container_ops(c)) + cmd.append(c.dimage.name) + run_command(cmd) + + def openvpn_install(rockon): #volume container vol_co = DContainer.objects.get(rockon=rockon, launch_order=1) @@ -256,13 +227,8 @@ def btsync_install(rockon): return generic_install(rockon) -def generic_install(rockon): - for c in DContainer.objects.filter(rockon=rockon).order_by('launch_order'): - cmd = [DOCKER, 'run', '-d', '--name', c.name,] - cmd.extend(vol_ops(c)) - cmd.extend(port_ops(c)) - cmd.append(c.dimage.name) - run_command(cmd) +def plex_install(rockon): + return generic_install(rockon) def syncthing_install(rockon): @@ -274,6 +240,7 @@ def pull_images(rockon): rm_container(c.name) run_command([DOCKER, 'pull', c.dimage.name]) + def owncloud_install(rockon): for c in DContainer.objects.filter(rockon=rockon).order_by('launch_order'): cmd = [DOCKER, 'run', '-d', '--name', c.name, ] diff --git a/src/rockstor/storageadmin/views/rockon_json.py b/src/rockstor/storageadmin/views/rockon_json.py index db5135d1d..2931457d6 100644 --- a/src/rockstor/storageadmin/views/rockon_json.py +++ b/src/rockstor/storageadmin/views/rockon_json.py @@ -135,7 +135,7 @@ 'label': 'Listening port', 'description': 'Port for incoming data. You may need to open it(protocol: udp) on your firewall. Suggested default: 3369.',},}, 'volumes': {'/data': - {'description': 'Choose a dedicated Share for all incoming data. Eg: create a Share called btsync-data for this purpose alone.', + {'description': 'Choose a dedicated Share for all incoming data. Eg: create a Share called btsync-data for this purpose alone. It will be available as /data inside BTSync.', 'label': 'Data directory',},}, 'launch_order': 1,},}, 'description': 'BitTorrent Sync', @@ -143,33 +143,30 @@ 'volume_add_support': True, 'more_info': '

    Authentication

    Default username for your BTSync UI isadminand password ispassword

    Storage

    We strongly recommend changing the Default folder location to/datain the UI preferences.

    You can also assign additional Shares for custom organization of your data.

    '} +plex = {'ui': {'slug': 'web',}, + 'containers': {'plex': {'image': 'timhaak/plex', + 'ports': {'32400': + {'ui': True, + 'host_default': 32400, + 'protocol': TCP, + 'label': 'WebUI port', + 'description': 'Plex WebUI port. Suggested default: 32400',},}, + 'launch_order': 1, + 'opts': [['--net=host', ''],], + 'volumes': {'/config': + {'description': 'Choose a dedicated Share for Plex configuration. Eg: create a Share called plex-config for this purpose alone.', + 'label': 'Config directory',}, + '/data': + {'description': 'Choose a dedicated Share for Plex content(your media). Eg: create a Share called plex-data for this purpose alone. You can also assign other media Shares on the system after installation.', + 'label': 'Data directory',},},},}, + 'description': 'Plex media server', + 'website': 'https://plex.tv/', + 'volume_add_support': True, + 'more_info': '

    Adding media to Plex.

    You can add more Shares(with media) from here

    Then, from Plex WebUI, you can update and re-index your library.

    '} + rockons = {'OpenVPN': openvpn, 'OwnCloud': owncloud, 'Syncthing': syncthing, 'Transmission': transmission, - 'BTSync': btsync, } - - - -# rockons = \ -# { - -# u'Plex': {u'app_link': u'web', -# u'containers': {u'plex': {u'image': u'timhaak/plex', -# u'opts': {u'net': u'host'}, -# u'ports': {u'32400': u'ui'}, -# u'volumes': [u'/config', '/data',]}}, -# u'custom_config': {u'iprange': u'ip range of your network'}, -# u'description': u'Plex media server', -# u'website': u'https://plex.tv/'}, -# 'BTSync': {'app_link': '', -# 'containers': {'btsync': {'image': 'aostanin/btsync', -# 'ports': {'8888': 'ui'}, -# 'volumes': ['/data']}}, -# 'description': 'BitTorrent Sync', -# 'website': 'https://www.getsync.com/'}, - -# } - -# help text for Volumes -# It is strongly recommended + 'BTSync': btsync, + 'Plex': plex, } From a61a615de23d22c39de0cc992cbc2b7cdcafa4e0 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sat, 4 Jul 2015 19:49:13 -0700 Subject: [PATCH 35/40] activate tabs correctly. #697 --- .../storageadmin/static/storageadmin/js/views/rockons.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js b/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js index 818a4c83e..888eca331 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js +++ b/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js @@ -108,7 +108,7 @@ RockonsView = RockstorLayoutView.extend({ $('#install-rockon-overlay').overlay({load: false}); this.$("ul.nav.nav-tabs").tabs("div.css-panes > div"); - this.$("ul.nav.nav-tabs").data("tabs").click(this.defTab); + this.$('.nav-tabs li:eq(' + this.defTab + ') a').click(); }, From 9150b18760e1a2dfa1f816afb5cb8a645af9aa2a Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sat, 4 Jul 2015 19:50:26 -0700 Subject: [PATCH 36/40] update header messages on the install wizard. #697 --- .../static/storageadmin/js/templates/rockons/install_choice.jst | 2 +- .../storageadmin/js/templates/rockons/install_summary.jst | 2 +- .../static/storageadmin/js/templates/rockons/port_choice.jst | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst index df92f1e22..d38127f84 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_choice.jst @@ -2,6 +2,6 @@
    -

    Shares provide storage to the Rock-on and they must be assigned properly. Make sure to read each field's tooltip for specific information before making a selection. We strongly recommend that you create dedicated Shares assignments.

    +

    Shares provide storage to the Rock-on. Make sure to read tooltips for specific information before making a selection. We strongly recommend creating dedicated Share assignments. If a Share is assigned to more than one Rock-On, it could cause strange behavior.

    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst index bbfee3cd0..48030b532 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/install_summary.jst @@ -4,7 +4,7 @@
    -

    Click submit to start the installation.

    +

    Please verify your input and click submit to start the installation.

    diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst index 83e97f2f1..32acedf76 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/port_choice.jst @@ -3,6 +3,6 @@
    -

    Ports provide network access to the Rock-on. Read the tooltips and make appropriate selection or choose suggested default.

    +

    Ports provide network access to the Rock-on. Preferred default values are provided for convenience. Read tooltips for more information.

    From 0cb1cd2b457cff344b30216fc6cdeabac0eb8c67 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sat, 4 Jul 2015 20:53:48 -0700 Subject: [PATCH 37/40] change tooltip icon. #697 --- .../static/storageadmin/js/templates/rockons/cc_form.jst | 2 +- .../storageadmin/js/templates/rockons/ports_form.jst | 2 +- .../js/templates/rockons/settings_summary_table.jst | 8 ++++---- .../storageadmin/js/templates/rockons/summary_table.jst | 6 +++--- .../storageadmin/js/templates/rockons/vol_table.jst | 3 +-- .../storageadmin/static/storageadmin/js/views/rockons.js | 2 +- 6 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/cc_form.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/cc_form.jst index 86c31806b..2f2c8ea29 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/cc_form.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/cc_form.jst @@ -12,7 +12,7 @@
    -    +   
    <% }); %> diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst index 53aff79fc..b1d6af266 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/ports_form.jst @@ -10,7 +10,7 @@
    - + <% }); %> diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/settings_summary_table.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/settings_summary_table.jst index 9647d2161..4042d6e9b 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/settings_summary_table.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/settings_summary_table.jst @@ -2,9 +2,9 @@ - - - + + + @@ -35,7 +35,7 @@ <% cc.each(function(cci, index) { %> - + <% }); %> diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/summary_table.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/summary_table.jst index de2d41bb6..b85b79996 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/summary_table.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/summary_table.jst @@ -1,9 +1,9 @@
    Resource type  Name  Mapped representation  Resource type  Name  Mapped representation  
    Custom<%= cci.get('val') %>  <%= cci.get('val') %>   <%= cci.get('key') %>
    - - - + + + diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst index ef541c21e..396ae49d2 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/vol_table.jst @@ -16,8 +16,7 @@ <% }); %> - - + <% }); %> diff --git a/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js b/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js index 888eca331..9a0859ed3 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js +++ b/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js @@ -48,8 +48,8 @@ RockonsView = RockstorLayoutView.extend({ }, render: function() { - this.rockons.fetch(); this.service.fetch(); + this.rockons.fetch(); this.updateStatus(); return this; From 74d9220e1331197f194cc2d5ff1300a6f3b77be9 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sat, 4 Jul 2015 21:59:24 -0700 Subject: [PATCH 38/40] get meta from json. #697 --- src/rockstor/storageadmin/views/rockon.py | 6 ++--- src/rockstor/storageadmin/views/rockon_id.py | 3 --- .../storageadmin/views/rockon_json.py | 26 ++++++++----------- 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/src/rockstor/storageadmin/views/rockon.py b/src/rockstor/storageadmin/views/rockon.py index 2334c1bd0..029aba164 100644 --- a/src/rockstor/storageadmin/views/rockon.py +++ b/src/rockstor/storageadmin/views/rockon.py @@ -226,10 +226,8 @@ def _get_available(self, request): msg = ('Network error while checking for updates. ' 'Please try again later.') with self._handle_exception(request, msg=msg): - #r = requests.get('http://rockstor.com/rockons.json') - #rockons = r.json() - from rockon_json import rockons - return rockons + r = requests.get('http://rockstor.com/rockons_testing.json') + return r.json() @transaction.atomic def delete(self, request, sname): diff --git a/src/rockstor/storageadmin/views/rockon_id.py b/src/rockstor/storageadmin/views/rockon_id.py index 130cc8e90..a567c0818 100644 --- a/src/rockstor/storageadmin/views/rockon_id.py +++ b/src/rockstor/storageadmin/views/rockon_id.py @@ -80,11 +80,8 @@ def post(self, request, rid, command): if (command == 'install'): self._pending_check(request) share_map = request.data.get('shares', {}) - logger.debug('share map = %s' % share_map) port_map = request.data.get('ports', {}) - logger.debug('port map = %s' % port_map) cc_map = request.data.get('cc', {}) - logger.debug('cc map = %s' % cc_map) containers = DContainer.objects.filter(rockon=rockon) for co in containers: for s in share_map.keys(): diff --git a/src/rockstor/storageadmin/views/rockon_json.py b/src/rockstor/storageadmin/views/rockon_json.py index 2931457d6..a05713be5 100644 --- a/src/rockstor/storageadmin/views/rockon_json.py +++ b/src/rockstor/storageadmin/views/rockon_json.py @@ -23,31 +23,29 @@ 'description': 'Open Source VPN server', 'website': 'https://openvpn.net/', 'icon': 'https://openvpn.net/', - 'more_info': '

    Additional steps are required by this Rockon.

    The following steps require you to execute commands as the root user on your Rockstor system.

    Initialize PKI    Do this only once.

    /opt/rockstor/bin/ovpn-initpki

    Generate a client certificate    One for every client(without passphrase)

    /opt/rockstor/bin/ovpn-client-gen

    Retrieve client configuration    For any one of your clients. The resulting .ovpn file can be used to connect.

    /opt/rockstor/bin/ovpn-client-print

    Configure firewall

    If your Rockstor system is behind a firewall, you will need to configure it to allow OpenVPN traffic to forward to your Rockstor system.

    ', - 'volume_add_support': False, } + 'more_info': '

    Additional steps are required by this Rockon.

    Run these following commands as therootuser on your Rockstor system.

    Initialize PKI    Rock-on will not start without it.

    /opt/rockstor/bin/ovpn-initpki

    Generate a client certificate    One for every client

    /opt/rockstor/bin/ovpn-client-gen

    Retrieve client configuration    For any one of your clients. The resulting .ovpn file can be used to connect.

    /opt/rockstor/bin/ovpn-client-print

    Configure firewall

    If your Rockstor system is behind a firewall, you will need to configure it to allow OpenVPN traffic to forward to your Rockstor system.

    ',} owncloud = {'ui': {'slug': '', 'https': True,}, - 'containers': {'owncloud': {'image': 'pschmitt/owncloud', 'ports': {'443': {'ui': True, 'host_default': 8080, 'protocol': 'tcp', 'label': 'WebUI port', - 'description': 'OwnCloud WebUI port. Since Rockstor WebUI runs on 443, choose a different port or the suggested default.',},}, + 'description': 'OwnCloud WebUI port. Suggested default: 8080',},}, 'volumes': {'/var/www/owncloud/data': - {'description': 'Choose a dedicated Share for OwnCloud data. Eg: create a Share called owncloud-data for this purpose alone.', + {'description': 'Choose a Share for OwnCloud data. Eg: create a Share called owncloud-data for this purpose alone.', 'min_size': 1073741824, 'label': 'Data directory',}, '/var/www/owncloud/config': - {'description': 'Choose a dedicated Share for OwnCloud configuration. Eg: create a Share called owncloud-config for this purpose alone.', + {'description': 'Choose a Share for OwnCloud configuration. Eg: create a Share called owncloud-config for this purpose alone.', 'label': 'Config directory', 'min_size': 1073741824,},}, 'launch_order': 2,}, 'owncloud-postgres': {'image': 'postgres', 'volumes': {'/var/lib/postgresql/data': - {'description': 'Choose a dedicated Share for OwnClouds postgresql database. Eg: create a Share called owncloud-db for this purpose alone.', + {'description': "Choose a Share for OwnCloud's postgresql database. Eg: create a Share called owncloud-db for this purpose alone.", 'label': 'Database', 'min_size': 1073741824, }, }, 'launch_order': 1}, }, @@ -62,12 +60,10 @@ 'description': 'Secure file sharing and hosting', 'website': 'https://owncloud.org/', 'icon': 'https://owncloud.org/wp-content/themes/owncloudorgnew/assets/img/common/logo_owncloud.svg', - 'more_info': '

    Default username for your OwnCloud UI is admin and password is changeme

    ', - 'volume_add_support': False, } + 'more_info': '

    Default username for your OwnCloud UI isadminand password ischangeme

    ',} syncthing = {'ui': {'slug': '', 'https': True,}, - 'containers': {'syncthing': {'image': 'istepanov/syncthing', 'ports': {'8384': {'ui': True, @@ -86,12 +82,12 @@ 'label': 'Discovery port', 'description': 'Port for discovery broadcasts. You may need to open it(protocol: udp) on your firewall. Suggested default: 21025.',},}, 'volumes': {'/home/syncthing/.config/syncthing': - {'description': 'Choose a dedicated Share for configuration. Eg: create a Share called syncthing-config for this purpose alone.', + {'description': 'Choose a Share for configuration. Eg: create a Share called syncthing-config for this purpose alone.', 'min_size': ONE_GB, 'label': 'Config directory',}, '/home/syncthing/Sync': {'label': 'Data directory', - 'description': 'Choose a dedicated Share for all incoming data. Eg: create a Share called syncthing-data for this purpose alone.',},}, + 'description': 'Choose a Share for all incoming data. Eg: create a Share called syncthing-data for this purpose alone.',},}, 'launch_order': 1,},}, 'description': 'Continuous File Synchronization', 'website': 'https://syncthing.net/',} @@ -135,7 +131,7 @@ 'label': 'Listening port', 'description': 'Port for incoming data. You may need to open it(protocol: udp) on your firewall. Suggested default: 3369.',},}, 'volumes': {'/data': - {'description': 'Choose a dedicated Share for all incoming data. Eg: create a Share called btsync-data for this purpose alone. It will be available as /data inside BTSync.', + {'description': 'Choose a Share for all incoming data. Eg: create a Share called btsync-data for this purpose alone. It will be available as /data inside BTSync.', 'label': 'Data directory',},}, 'launch_order': 1,},}, 'description': 'BitTorrent Sync', @@ -154,10 +150,10 @@ 'launch_order': 1, 'opts': [['--net=host', ''],], 'volumes': {'/config': - {'description': 'Choose a dedicated Share for Plex configuration. Eg: create a Share called plex-config for this purpose alone.', + {'description': 'Choose a Share for Plex configuration. Eg: create a Share called plex-config for this purpose alone.', 'label': 'Config directory',}, '/data': - {'description': 'Choose a dedicated Share for Plex content(your media). Eg: create a Share called plex-data for this purpose alone. You can also assign other media Shares on the system after installation.', + {'description': 'Choose a Share for Plex content(your media). Eg: create a Share called plex-data for this purpose alone. You can also assign other media Shares on the system after installation.', 'label': 'Data directory',},},},}, 'description': 'Plex media server', 'website': 'https://plex.tv/', From 08c70b8fbb022f13ca635529a14ca0cebfcbfed6 Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sun, 5 Jul 2015 15:55:44 -0700 Subject: [PATCH 39/40] consolidate migration files. #697 --- ...nique_dcontainerlink_destination_name__.py | 56 +- .../0030_auto__add_field_dport_label.py | 499 ----------------- .../0031_auto__add_field_rockon_ui.py | 500 ----------------- ...p_default__add_field_dport_hostp_defaul.py | 508 ------------------ ...to__add_field_rockon_volume_add_support.py | 501 ----------------- .../0034_auto__add_field_rockon_more_info.py | 502 ----------------- .../0035_auto__chg_field_dvolume_min_size.py | 500 ----------------- 7 files changed, 46 insertions(+), 3020 deletions(-) delete mode 100644 src/rockstor/storageadmin/migrations/0030_auto__add_field_dport_label.py delete mode 100644 src/rockstor/storageadmin/migrations/0031_auto__add_field_rockon_ui.py delete mode 100644 src/rockstor/storageadmin/migrations/0032_auto__del_field_dport_containerp_default__add_field_dport_hostp_defaul.py delete mode 100644 src/rockstor/storageadmin/migrations/0033_auto__add_field_rockon_volume_add_support.py delete mode 100644 src/rockstor/storageadmin/migrations/0034_auto__add_field_rockon_more_info.py delete mode 100644 src/rockstor/storageadmin/migrations/0035_auto__chg_field_dvolume_min_size.py diff --git a/src/rockstor/storageadmin/migrations/0029_auto__add_dcontainerlink__add_unique_dcontainerlink_destination_name__.py b/src/rockstor/storageadmin/migrations/0029_auto__add_dcontainerlink__add_unique_dcontainerlink_destination_name__.py index da8617127..8898ab7c4 100644 --- a/src/rockstor/storageadmin/migrations/0029_auto__add_dcontainerlink__add_unique_dcontainerlink_destination_name__.py +++ b/src/rockstor/storageadmin/migrations/0029_auto__add_dcontainerlink__add_unique_dcontainerlink_destination_name__.py @@ -27,7 +27,7 @@ def forwards(self, orm): # Adding field 'DVolume.min_size' db.add_column(u'storageadmin_dvolume', 'min_size', - self.gf('django.db.models.fields.IntegerField')(default=0), + self.gf('django.db.models.fields.IntegerField')(null=True), keep_default=False) # Adding field 'DVolume.label' @@ -40,11 +40,16 @@ def forwards(self, orm): self.gf('django.db.models.fields.CharField')(max_length=1024, null=True), keep_default=False) - # Adding field 'DPort.containerp_default' - db.add_column(u'storageadmin_dport', 'containerp_default', + # Adding field 'DPort.hostp_default' + db.add_column(u'storageadmin_dport', 'hostp_default', self.gf('django.db.models.fields.IntegerField')(null=True), keep_default=False) + # Adding field 'DPort.label' + db.add_column(u'storageadmin_dport', 'label', + self.gf('django.db.models.fields.CharField')(max_length=1024, null=True), + keep_default=False) + # Adding field 'RockOn.https' db.add_column(u'storageadmin_rockon', 'https', self.gf('django.db.models.fields.BooleanField')(default=False), @@ -55,6 +60,21 @@ def forwards(self, orm): self.gf('django.db.models.fields.URLField')(max_length=1024, null=True), keep_default=False) + # Adding field 'RockOn.ui' + db.add_column(u'storageadmin_rockon', 'ui', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + # Adding field 'RockOn.volume_add_support' + db.add_column(u'storageadmin_rockon', 'volume_add_support', + self.gf('django.db.models.fields.BooleanField')(default=False), + keep_default=False) + + # Adding field 'RockOn.more_info' + db.add_column(u'storageadmin_rockon', 'more_info', + self.gf('django.db.models.fields.CharField')(max_length=4096, null=True), + keep_default=False) + # Deleting field 'DContainer.link' db.delete_column(u'storageadmin_dcontainer', 'link_id') @@ -88,8 +108,11 @@ def backwards(self, orm): # Deleting field 'DPort.description' db.delete_column(u'storageadmin_dport', 'description') - # Deleting field 'DPort.containerp_default' - db.delete_column(u'storageadmin_dport', 'containerp_default') + # Deleting field 'DPort.hostp_default' + db.delete_column(u'storageadmin_dport', 'hostp_default') + + # Deleting field 'DPort.label' + db.delete_column(u'storageadmin_dport', 'label') # Deleting field 'RockOn.https' db.delete_column(u'storageadmin_rockon', 'https') @@ -97,6 +120,15 @@ def backwards(self, orm): # Deleting field 'RockOn.icon' db.delete_column(u'storageadmin_rockon', 'icon') + # Deleting field 'RockOn.ui' + db.delete_column(u'storageadmin_rockon', 'ui') + + # Deleting field 'RockOn.volume_add_support' + db.delete_column(u'storageadmin_rockon', 'volume_add_support') + + # Deleting field 'RockOn.more_info' + db.delete_column(u'storageadmin_rockon', 'more_info') + # Adding field 'DContainer.link' db.add_column(u'storageadmin_dcontainer', 'link', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['storageadmin.DContainer'], null=True), @@ -149,8 +181,8 @@ def backwards(self, orm): u'oauth2_provider.application': { 'Meta': {'object_name': 'Application'}, 'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'30bogdA73xoMjf1P1DT0gBfIU4c3lU1sak6Wx?XA'", 'unique': 'True', 'max_length': '100'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u'A5pWZVo_sjfl491r:!7S7tq9;e_So9gAfmLpn=1yy25ZK7WO3ZDbD5EbAbtaXMslEc=I08XFsoMTDXZ6OIw0Ef7oHC7sGxUN2w-Z9.?nt3QtX97BX?2jI9mpGanIylmh'", 'max_length': '255', 'blank': 'True'}), + 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'nu4VyMB1uIUDSd2M3;7Ftd74pUoXeCw.OMpJW@3z'", 'unique': 'True', 'max_length': '100'}), + 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u'9ervOaClzm7nrzPBY6hA8BNDr6;-12MuIm?1403MD=y.nGCM!ei3K:0fCips!423br;TIahiyspAojObwHI5WtaKUsqxN9mP9dkb:ou;L5YRsLRF@Ib3l-ARp9Vfz6CC'", 'max_length': '255', 'blank': 'True'}), 'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), @@ -184,7 +216,7 @@ def backwards(self, orm): 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) + 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}) }, 'storageadmin.dashboardconfig': { 'Meta': {'object_name': 'DashboardConfig'}, @@ -243,10 +275,11 @@ def backwards(self, orm): 'Meta': {'unique_together': "(('container', 'containerp'),)", 'object_name': 'DPort'}, 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), 'containerp': ('django.db.models.fields.IntegerField', [], {}), - 'containerp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), 'hostp': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), + 'hostp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), 'protocol': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), 'uiport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, @@ -257,7 +290,7 @@ def backwards(self, orm): 'dest_dir': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'min_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}), + 'min_size': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']", 'null': 'True'}), 'uservol': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) }, @@ -401,10 +434,13 @@ def backwards(self, orm): 'icon': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True'}), u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), 'link': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), + 'more_info': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), 'state': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), 'status': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'ui': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'version': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), + 'volume_add_support': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}) }, 'storageadmin.sambacustomconfig': { diff --git a/src/rockstor/storageadmin/migrations/0030_auto__add_field_dport_label.py b/src/rockstor/storageadmin/migrations/0030_auto__add_field_dport_label.py deleted file mode 100644 index c70f9c4bf..000000000 --- a/src/rockstor/storageadmin/migrations/0030_auto__add_field_dport_label.py +++ /dev/null @@ -1,499 +0,0 @@ -# -*- coding: utf-8 -*- -from south.utils import datetime_utils as datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding field 'DPort.label' - db.add_column(u'storageadmin_dport', 'label', - self.gf('django.db.models.fields.CharField')(max_length=1024, null=True), - keep_default=False) - - - def backwards(self, orm): - # Deleting field 'DPort.label' - db.delete_column(u'storageadmin_dport', 'label') - - - models = { - u'auth.group': { - 'Meta': {'object_name': 'Group'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - u'auth.permission': { - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - u'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - u'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - u'oauth2_provider.application': { - 'Meta': {'object_name': 'Application'}, - 'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'0uxY90OnAYXRweiIJ18d8Q_;L2KTDLzvbC22@egH'", 'unique': 'True', 'max_length': '100'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u';W;.JPKvlE7jW7bKrI-fb;GJhmgYQp_Q@uXwCVmj3:U7-J!g_fY9mO6LNqYw0G?z01eUT4OEdEaG1cyZzn=b=zwZ?iX952wLLcVRtmo2hYKJnQOqzfKWL6c5RiebrtNk'", 'max_length': '255', 'blank': 'True'}), - 'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), - 'redirect_uris': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) - }, - 'storageadmin.advancednfsexport': { - 'Meta': {'object_name': 'AdvancedNFSExport'}, - 'export_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'storageadmin.apikeys': { - 'Meta': {'object_name': 'APIKeys'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), - 'user': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '8'}) - }, - 'storageadmin.appliance': { - 'Meta': {'object_name': 'Appliance'}, - 'client_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), - 'current_appliance': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'hostname': ('django.db.models.fields.CharField', [], {'default': "'Rockstor'", 'max_length': '128'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'ip': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'mgmt_port': ('django.db.models.fields.IntegerField', [], {'default': '443'}), - 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'storageadmin.containeroption': { - 'Meta': {'object_name': 'ContainerOption'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.dashboardconfig': { - 'Meta': {'object_name': 'DashboardConfig'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True'}), - 'widgets': ('django.db.models.fields.CharField', [], {'max_length': '4096'}) - }, - 'storageadmin.dcontainer': { - 'Meta': {'object_name': 'DContainer'}, - 'dimage': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DImage']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'launch_order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}), - 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}) - }, - 'storageadmin.dcontainerlink': { - 'Meta': {'unique_together': "(('destination', 'name'),)", 'object_name': 'DContainerLink'}, - 'destination': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'destination_container'", 'to': "orm['storageadmin.DContainer']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), - 'source': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.DContainer']", 'unique': 'True'}) - }, - 'storageadmin.dcustomconfig': { - 'Meta': {'unique_together': "(('rockon', 'key'),)", 'object_name': 'DCustomConfig'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), - 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) - }, - 'storageadmin.dimage': { - 'Meta': {'object_name': 'DImage'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'repo': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'tag': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.disk': { - 'Meta': {'object_name': 'Disk'}, - 'btrfs_uuid': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), - 'offline': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'parted': ('django.db.models.fields.BooleanField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), - 'serial': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'smart_available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'smart_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'transport': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'vendor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) - }, - 'storageadmin.dport': { - 'Meta': {'unique_together': "(('container', 'containerp'),)", 'object_name': 'DPort'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - 'containerp': ('django.db.models.fields.IntegerField', [], {}), - 'containerp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'hostp': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'protocol': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), - 'uiport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.dvolume': { - 'Meta': {'unique_together': "(('container', 'dest_dir'),)", 'object_name': 'DVolume'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'dest_dir': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'min_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']", 'null': 'True'}), - 'uservol': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.group': { - 'Meta': {'object_name': 'Group'}, - 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'gid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'groupname': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'storageadmin.installedplugin': { - 'Meta': {'object_name': 'InstalledPlugin'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'install_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'plugin_meta': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Plugin']"}) - }, - 'storageadmin.iscsitarget': { - 'Meta': {'object_name': 'IscsiTarget'}, - 'dev_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'dev_size': ('django.db.models.fields.IntegerField', [], {}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), - 'tid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'tname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) - }, - 'storageadmin.netatalkshare': { - 'Meta': {'object_name': 'NetatalkShare'}, - 'description': ('django.db.models.fields.CharField', [], {'default': "'afp on rockstor'", 'max_length': '1024'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'netatalkshare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}), - 'time_machine': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}) - }, - 'storageadmin.networkinterface': { - 'Meta': {'object_name': 'NetworkInterface'}, - 'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'boot_proto': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'dns_servers': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'domain': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'gateway': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'ipaddr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'itype': ('django.db.models.fields.CharField', [], {'default': "'io'", 'max_length': '100'}), - 'mac': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'netmask': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'network': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'onboot': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.nfsexport': { - 'Meta': {'object_name': 'NFSExport'}, - 'export_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.NFSExportGroup']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mount': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}) - }, - 'storageadmin.nfsexportgroup': { - 'Meta': {'object_name': 'NFSExportGroup'}, - 'admin_host': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'editable': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '2'}), - 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'host_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mount_security': ('django.db.models.fields.CharField', [], {'default': "'insecure'", 'max_length': '8'}), - 'nohide': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'syncable': ('django.db.models.fields.CharField', [], {'default': "'async'", 'max_length': '5'}) - }, - 'storageadmin.oauthapp': { - 'Meta': {'object_name': 'OauthApp'}, - 'application': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['oauth2_provider.Application']", 'unique': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.User']"}) - }, - 'storageadmin.plugin': { - 'Meta': {'object_name': 'Plugin'}, - 'css_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}), - 'display_name': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'js_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}) - }, - 'storageadmin.pool': { - 'Meta': {'object_name': 'Pool'}, - 'compression': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mnt_options': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'raid': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.poolbalance': { - 'Meta': {'object_name': 'PoolBalance'}, - 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'percent_done': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'pid': ('django.db.models.fields.IntegerField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}) - }, - 'storageadmin.poolscrub': { - 'Meta': {'object_name': 'PoolScrub'}, - 'corrected_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'csum_discards': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'csum_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'data_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'kb_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), - 'last_physical': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'malloc_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'no_csum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'pid': ('django.db.models.fields.IntegerField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'read_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}), - 'super_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'tree_bytes_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'tree_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'uncorrectable_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'unverified_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'verify_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - 'storageadmin.posixacls': { - 'Meta': {'object_name': 'PosixACLs'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'owner': ('django.db.models.fields.CharField', [], {'max_length': '5'}), - 'perms': ('django.db.models.fields.CharField', [], {'max_length': '3'}), - 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) - }, - 'storageadmin.rockon': { - 'Meta': {'object_name': 'RockOn'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'https': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'icon': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'link': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}) - }, - 'storageadmin.sambacustomconfig': { - 'Meta': {'object_name': 'SambaCustomConfig'}, - 'custom_config': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) - }, - 'storageadmin.sambashare': { - 'Meta': {'object_name': 'SambaShare'}, - 'browsable': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}), - 'comment': ('django.db.models.fields.CharField', [], {'default': "'foo bar'", 'max_length': '100'}), - 'guest_ok': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'read_only': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'sambashare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}) - }, - 'storageadmin.setup': { - 'Meta': {'object_name': 'Setup'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'setup_disks': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_network': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_system': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.sftp': { - 'Meta': {'object_name': 'SFTP'}, - 'editable': ('django.db.models.fields.CharField', [], {'default': "'ro'", 'max_length': '2'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.Share']", 'unique': 'True'}) - }, - 'storageadmin.share': { - 'Meta': {'object_name': 'Share'}, - 'compression_algo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'group': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'owner': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), - 'perms': ('django.db.models.fields.CharField', [], {'default': "'755'", 'max_length': '9'}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'replica': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'subvol_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.smartattribute': { - 'Meta': {'object_name': 'SMARTAttribute'}, - 'aid': ('django.db.models.fields.IntegerField', [], {}), - 'atype': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'failed': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'normed_value': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'raw_value': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'threshold': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'updated': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'worst': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - 'storageadmin.smartcapability': { - 'Meta': {'object_name': 'SMARTCapability'}, - 'capabilities': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.smarterrorlog': { - 'Meta': {'object_name': 'SMARTErrorLog'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.smarterrorlogsummary': { - 'Meta': {'object_name': 'SMARTErrorLogSummary'}, - 'details': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'error_num': ('django.db.models.fields.IntegerField', [], {}), - 'etype': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'storageadmin.smartidentity': { - 'Meta': {'object_name': 'SMARTIdentity'}, - 'assessment': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'ata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'capacity': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'device_model': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'enabled': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'firmware_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'in_smartdb': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'model_family': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'rotation_rate': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'sata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'scanned_on': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'sector_size': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'serial_number': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'supported': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'world_wide_name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'storageadmin.smartinfo': { - 'Meta': {'object_name': 'SMARTInfo'}, - 'disk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Disk']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) - }, - 'storageadmin.smarttestlog': { - 'Meta': {'object_name': 'SMARTTestLog'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'lba_of_first_error': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), - 'pct_completed': ('django.db.models.fields.IntegerField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'test_num': ('django.db.models.fields.IntegerField', [], {}) - }, - 'storageadmin.smarttestlogdetail': { - 'Meta': {'object_name': 'SMARTTestLogDetail'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.snapshot': { - 'Meta': {'unique_together': "(('share', 'name'),)", 'object_name': 'Snapshot'}, - 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'real_name': ('django.db.models.fields.CharField', [], {'default': "'unknownsnap'", 'max_length': '4096'}), - 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'snap_type': ('django.db.models.fields.CharField', [], {'default': "'admin'", 'max_length': '64'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uvisible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'writable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.supportcase': { - 'Meta': {'object_name': 'SupportCase'}, - 'case_type': ('django.db.models.fields.CharField', [], {'max_length': '6'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'notes': ('django.db.models.fields.TextField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '9'}), - 'zipped_log': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.tlscertificate': { - 'Meta': {'object_name': 'TLSCertificate'}, - 'certificate': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'storageadmin.user': { - 'Meta': {'object_name': 'User'}, - 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'email': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'gid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Group']", 'null': 'True'}), - 'homedir': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'public_key': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'smb_shares': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_users'", 'null': 'True', 'to': "orm['storageadmin.SambaShare']"}), - 'uid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), - 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'suser'", 'unique': 'True', 'null': 'True', 'to': u"orm['auth.User']"}), - 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}) - } - } - - complete_apps = ['storageadmin'] \ No newline at end of file diff --git a/src/rockstor/storageadmin/migrations/0031_auto__add_field_rockon_ui.py b/src/rockstor/storageadmin/migrations/0031_auto__add_field_rockon_ui.py deleted file mode 100644 index e50b3cffb..000000000 --- a/src/rockstor/storageadmin/migrations/0031_auto__add_field_rockon_ui.py +++ /dev/null @@ -1,500 +0,0 @@ -# -*- coding: utf-8 -*- -from south.utils import datetime_utils as datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding field 'RockOn.ui' - db.add_column(u'storageadmin_rockon', 'ui', - self.gf('django.db.models.fields.BooleanField')(default=False), - keep_default=False) - - - def backwards(self, orm): - # Deleting field 'RockOn.ui' - db.delete_column(u'storageadmin_rockon', 'ui') - - - models = { - u'auth.group': { - 'Meta': {'object_name': 'Group'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - u'auth.permission': { - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - u'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - u'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - u'oauth2_provider.application': { - 'Meta': {'object_name': 'Application'}, - 'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'Ad3WjP1_=tZwfeXDkzSYAAQR2vSmscE;uUDiwLN8'", 'unique': 'True', 'max_length': '100'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u'IaE5Yk.IDSPjXXv8I;Iy29AnB?2?GPtk2zy5KNedVy1F;Jho;QpLux3hn6GXfZBWVgrZyv!AAnKa9Gh1HQ?A@ro8NNkZTpNiiqp0aEe:G09cUOapdg;=aXdi@m;q5?=m'", 'max_length': '255', 'blank': 'True'}), - 'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), - 'redirect_uris': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) - }, - 'storageadmin.advancednfsexport': { - 'Meta': {'object_name': 'AdvancedNFSExport'}, - 'export_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'storageadmin.apikeys': { - 'Meta': {'object_name': 'APIKeys'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), - 'user': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '8'}) - }, - 'storageadmin.appliance': { - 'Meta': {'object_name': 'Appliance'}, - 'client_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), - 'current_appliance': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'hostname': ('django.db.models.fields.CharField', [], {'default': "'Rockstor'", 'max_length': '128'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'ip': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'mgmt_port': ('django.db.models.fields.IntegerField', [], {'default': '443'}), - 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'storageadmin.containeroption': { - 'Meta': {'object_name': 'ContainerOption'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.dashboardconfig': { - 'Meta': {'object_name': 'DashboardConfig'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True'}), - 'widgets': ('django.db.models.fields.CharField', [], {'max_length': '4096'}) - }, - 'storageadmin.dcontainer': { - 'Meta': {'object_name': 'DContainer'}, - 'dimage': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DImage']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'launch_order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}), - 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}) - }, - 'storageadmin.dcontainerlink': { - 'Meta': {'unique_together': "(('destination', 'name'),)", 'object_name': 'DContainerLink'}, - 'destination': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'destination_container'", 'to': "orm['storageadmin.DContainer']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), - 'source': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.DContainer']", 'unique': 'True'}) - }, - 'storageadmin.dcustomconfig': { - 'Meta': {'unique_together': "(('rockon', 'key'),)", 'object_name': 'DCustomConfig'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), - 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) - }, - 'storageadmin.dimage': { - 'Meta': {'object_name': 'DImage'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'repo': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'tag': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.disk': { - 'Meta': {'object_name': 'Disk'}, - 'btrfs_uuid': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), - 'offline': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'parted': ('django.db.models.fields.BooleanField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), - 'serial': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'smart_available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'smart_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'transport': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'vendor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) - }, - 'storageadmin.dport': { - 'Meta': {'unique_together': "(('container', 'containerp'),)", 'object_name': 'DPort'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - 'containerp': ('django.db.models.fields.IntegerField', [], {}), - 'containerp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'hostp': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'protocol': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), - 'uiport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.dvolume': { - 'Meta': {'unique_together': "(('container', 'dest_dir'),)", 'object_name': 'DVolume'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'dest_dir': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'min_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']", 'null': 'True'}), - 'uservol': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.group': { - 'Meta': {'object_name': 'Group'}, - 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'gid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'groupname': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'storageadmin.installedplugin': { - 'Meta': {'object_name': 'InstalledPlugin'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'install_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'plugin_meta': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Plugin']"}) - }, - 'storageadmin.iscsitarget': { - 'Meta': {'object_name': 'IscsiTarget'}, - 'dev_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'dev_size': ('django.db.models.fields.IntegerField', [], {}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), - 'tid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'tname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) - }, - 'storageadmin.netatalkshare': { - 'Meta': {'object_name': 'NetatalkShare'}, - 'description': ('django.db.models.fields.CharField', [], {'default': "'afp on rockstor'", 'max_length': '1024'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'netatalkshare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}), - 'time_machine': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}) - }, - 'storageadmin.networkinterface': { - 'Meta': {'object_name': 'NetworkInterface'}, - 'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'boot_proto': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'dns_servers': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'domain': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'gateway': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'ipaddr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'itype': ('django.db.models.fields.CharField', [], {'default': "'io'", 'max_length': '100'}), - 'mac': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'netmask': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'network': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'onboot': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.nfsexport': { - 'Meta': {'object_name': 'NFSExport'}, - 'export_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.NFSExportGroup']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mount': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}) - }, - 'storageadmin.nfsexportgroup': { - 'Meta': {'object_name': 'NFSExportGroup'}, - 'admin_host': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'editable': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '2'}), - 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'host_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mount_security': ('django.db.models.fields.CharField', [], {'default': "'insecure'", 'max_length': '8'}), - 'nohide': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'syncable': ('django.db.models.fields.CharField', [], {'default': "'async'", 'max_length': '5'}) - }, - 'storageadmin.oauthapp': { - 'Meta': {'object_name': 'OauthApp'}, - 'application': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['oauth2_provider.Application']", 'unique': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.User']"}) - }, - 'storageadmin.plugin': { - 'Meta': {'object_name': 'Plugin'}, - 'css_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}), - 'display_name': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'js_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}) - }, - 'storageadmin.pool': { - 'Meta': {'object_name': 'Pool'}, - 'compression': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mnt_options': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'raid': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.poolbalance': { - 'Meta': {'object_name': 'PoolBalance'}, - 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'percent_done': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'pid': ('django.db.models.fields.IntegerField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}) - }, - 'storageadmin.poolscrub': { - 'Meta': {'object_name': 'PoolScrub'}, - 'corrected_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'csum_discards': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'csum_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'data_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'kb_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), - 'last_physical': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'malloc_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'no_csum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'pid': ('django.db.models.fields.IntegerField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'read_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}), - 'super_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'tree_bytes_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'tree_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'uncorrectable_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'unverified_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'verify_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - 'storageadmin.posixacls': { - 'Meta': {'object_name': 'PosixACLs'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'owner': ('django.db.models.fields.CharField', [], {'max_length': '5'}), - 'perms': ('django.db.models.fields.CharField', [], {'max_length': '3'}), - 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) - }, - 'storageadmin.rockon': { - 'Meta': {'object_name': 'RockOn'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'https': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'icon': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'link': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'ui': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}) - }, - 'storageadmin.sambacustomconfig': { - 'Meta': {'object_name': 'SambaCustomConfig'}, - 'custom_config': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) - }, - 'storageadmin.sambashare': { - 'Meta': {'object_name': 'SambaShare'}, - 'browsable': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}), - 'comment': ('django.db.models.fields.CharField', [], {'default': "'foo bar'", 'max_length': '100'}), - 'guest_ok': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'read_only': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'sambashare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}) - }, - 'storageadmin.setup': { - 'Meta': {'object_name': 'Setup'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'setup_disks': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_network': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_system': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.sftp': { - 'Meta': {'object_name': 'SFTP'}, - 'editable': ('django.db.models.fields.CharField', [], {'default': "'ro'", 'max_length': '2'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.Share']", 'unique': 'True'}) - }, - 'storageadmin.share': { - 'Meta': {'object_name': 'Share'}, - 'compression_algo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'group': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'owner': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), - 'perms': ('django.db.models.fields.CharField', [], {'default': "'755'", 'max_length': '9'}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'replica': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'subvol_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.smartattribute': { - 'Meta': {'object_name': 'SMARTAttribute'}, - 'aid': ('django.db.models.fields.IntegerField', [], {}), - 'atype': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'failed': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'normed_value': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'raw_value': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'threshold': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'updated': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'worst': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - 'storageadmin.smartcapability': { - 'Meta': {'object_name': 'SMARTCapability'}, - 'capabilities': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.smarterrorlog': { - 'Meta': {'object_name': 'SMARTErrorLog'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.smarterrorlogsummary': { - 'Meta': {'object_name': 'SMARTErrorLogSummary'}, - 'details': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'error_num': ('django.db.models.fields.IntegerField', [], {}), - 'etype': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'storageadmin.smartidentity': { - 'Meta': {'object_name': 'SMARTIdentity'}, - 'assessment': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'ata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'capacity': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'device_model': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'enabled': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'firmware_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'in_smartdb': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'model_family': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'rotation_rate': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'sata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'scanned_on': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'sector_size': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'serial_number': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'supported': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'world_wide_name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'storageadmin.smartinfo': { - 'Meta': {'object_name': 'SMARTInfo'}, - 'disk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Disk']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) - }, - 'storageadmin.smarttestlog': { - 'Meta': {'object_name': 'SMARTTestLog'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'lba_of_first_error': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), - 'pct_completed': ('django.db.models.fields.IntegerField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'test_num': ('django.db.models.fields.IntegerField', [], {}) - }, - 'storageadmin.smarttestlogdetail': { - 'Meta': {'object_name': 'SMARTTestLogDetail'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.snapshot': { - 'Meta': {'unique_together': "(('share', 'name'),)", 'object_name': 'Snapshot'}, - 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'real_name': ('django.db.models.fields.CharField', [], {'default': "'unknownsnap'", 'max_length': '4096'}), - 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'snap_type': ('django.db.models.fields.CharField', [], {'default': "'admin'", 'max_length': '64'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uvisible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'writable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.supportcase': { - 'Meta': {'object_name': 'SupportCase'}, - 'case_type': ('django.db.models.fields.CharField', [], {'max_length': '6'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'notes': ('django.db.models.fields.TextField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '9'}), - 'zipped_log': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.tlscertificate': { - 'Meta': {'object_name': 'TLSCertificate'}, - 'certificate': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'storageadmin.user': { - 'Meta': {'object_name': 'User'}, - 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'email': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'gid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Group']", 'null': 'True'}), - 'homedir': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'public_key': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'smb_shares': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_users'", 'null': 'True', 'to': "orm['storageadmin.SambaShare']"}), - 'uid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), - 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'suser'", 'unique': 'True', 'null': 'True', 'to': u"orm['auth.User']"}), - 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}) - } - } - - complete_apps = ['storageadmin'] \ No newline at end of file diff --git a/src/rockstor/storageadmin/migrations/0032_auto__del_field_dport_containerp_default__add_field_dport_hostp_defaul.py b/src/rockstor/storageadmin/migrations/0032_auto__del_field_dport_containerp_default__add_field_dport_hostp_defaul.py deleted file mode 100644 index b2f21b2fa..000000000 --- a/src/rockstor/storageadmin/migrations/0032_auto__del_field_dport_containerp_default__add_field_dport_hostp_defaul.py +++ /dev/null @@ -1,508 +0,0 @@ -# -*- coding: utf-8 -*- -from south.utils import datetime_utils as datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Deleting field 'DPort.containerp_default' - db.delete_column(u'storageadmin_dport', 'containerp_default') - - # Adding field 'DPort.hostp_default' - db.add_column(u'storageadmin_dport', 'hostp_default', - self.gf('django.db.models.fields.IntegerField')(null=True), - keep_default=False) - - - def backwards(self, orm): - # Adding field 'DPort.containerp_default' - db.add_column(u'storageadmin_dport', 'containerp_default', - self.gf('django.db.models.fields.IntegerField')(null=True), - keep_default=False) - - # Deleting field 'DPort.hostp_default' - db.delete_column(u'storageadmin_dport', 'hostp_default') - - - models = { - u'auth.group': { - 'Meta': {'object_name': 'Group'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - u'auth.permission': { - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - u'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - u'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - u'oauth2_provider.application': { - 'Meta': {'object_name': 'Application'}, - 'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'1h?8mGid3NTgY93ymaV2Jr2A_;7YT=1qrGDeso0B'", 'unique': 'True', 'max_length': '100'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u'VM=g?=B2nyjM2L.-:lHrrtaRPC9o;cMXqrs0P@69NpKTy4AoQE6Dt0Ap=BWTk=swRkXoVHG4ZxyxCGCVALu_5sbvS4J:rs6fABGl=_U4p2.JjxIC8@tTiTdoOPq1ElTV'", 'max_length': '255', 'blank': 'True'}), - 'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), - 'redirect_uris': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) - }, - 'storageadmin.advancednfsexport': { - 'Meta': {'object_name': 'AdvancedNFSExport'}, - 'export_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'storageadmin.apikeys': { - 'Meta': {'object_name': 'APIKeys'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), - 'user': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '8'}) - }, - 'storageadmin.appliance': { - 'Meta': {'object_name': 'Appliance'}, - 'client_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), - 'current_appliance': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'hostname': ('django.db.models.fields.CharField', [], {'default': "'Rockstor'", 'max_length': '128'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'ip': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'mgmt_port': ('django.db.models.fields.IntegerField', [], {'default': '443'}), - 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'storageadmin.containeroption': { - 'Meta': {'object_name': 'ContainerOption'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.dashboardconfig': { - 'Meta': {'object_name': 'DashboardConfig'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True'}), - 'widgets': ('django.db.models.fields.CharField', [], {'max_length': '4096'}) - }, - 'storageadmin.dcontainer': { - 'Meta': {'object_name': 'DContainer'}, - 'dimage': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DImage']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'launch_order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}), - 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}) - }, - 'storageadmin.dcontainerlink': { - 'Meta': {'unique_together': "(('destination', 'name'),)", 'object_name': 'DContainerLink'}, - 'destination': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'destination_container'", 'to': "orm['storageadmin.DContainer']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), - 'source': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.DContainer']", 'unique': 'True'}) - }, - 'storageadmin.dcustomconfig': { - 'Meta': {'unique_together': "(('rockon', 'key'),)", 'object_name': 'DCustomConfig'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), - 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) - }, - 'storageadmin.dimage': { - 'Meta': {'object_name': 'DImage'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'repo': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'tag': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.disk': { - 'Meta': {'object_name': 'Disk'}, - 'btrfs_uuid': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), - 'offline': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'parted': ('django.db.models.fields.BooleanField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), - 'serial': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'smart_available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'smart_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'transport': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'vendor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) - }, - 'storageadmin.dport': { - 'Meta': {'unique_together': "(('container', 'containerp'),)", 'object_name': 'DPort'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - 'containerp': ('django.db.models.fields.IntegerField', [], {}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'hostp': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'hostp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'protocol': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), - 'uiport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.dvolume': { - 'Meta': {'unique_together': "(('container', 'dest_dir'),)", 'object_name': 'DVolume'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'dest_dir': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'min_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']", 'null': 'True'}), - 'uservol': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.group': { - 'Meta': {'object_name': 'Group'}, - 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'gid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'groupname': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'storageadmin.installedplugin': { - 'Meta': {'object_name': 'InstalledPlugin'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'install_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'plugin_meta': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Plugin']"}) - }, - 'storageadmin.iscsitarget': { - 'Meta': {'object_name': 'IscsiTarget'}, - 'dev_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'dev_size': ('django.db.models.fields.IntegerField', [], {}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), - 'tid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'tname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) - }, - 'storageadmin.netatalkshare': { - 'Meta': {'object_name': 'NetatalkShare'}, - 'description': ('django.db.models.fields.CharField', [], {'default': "'afp on rockstor'", 'max_length': '1024'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'netatalkshare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}), - 'time_machine': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}) - }, - 'storageadmin.networkinterface': { - 'Meta': {'object_name': 'NetworkInterface'}, - 'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'boot_proto': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'dns_servers': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'domain': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'gateway': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'ipaddr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'itype': ('django.db.models.fields.CharField', [], {'default': "'io'", 'max_length': '100'}), - 'mac': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'netmask': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'network': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'onboot': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.nfsexport': { - 'Meta': {'object_name': 'NFSExport'}, - 'export_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.NFSExportGroup']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mount': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}) - }, - 'storageadmin.nfsexportgroup': { - 'Meta': {'object_name': 'NFSExportGroup'}, - 'admin_host': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'editable': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '2'}), - 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'host_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mount_security': ('django.db.models.fields.CharField', [], {'default': "'insecure'", 'max_length': '8'}), - 'nohide': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'syncable': ('django.db.models.fields.CharField', [], {'default': "'async'", 'max_length': '5'}) - }, - 'storageadmin.oauthapp': { - 'Meta': {'object_name': 'OauthApp'}, - 'application': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['oauth2_provider.Application']", 'unique': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.User']"}) - }, - 'storageadmin.plugin': { - 'Meta': {'object_name': 'Plugin'}, - 'css_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}), - 'display_name': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'js_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}) - }, - 'storageadmin.pool': { - 'Meta': {'object_name': 'Pool'}, - 'compression': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mnt_options': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'raid': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.poolbalance': { - 'Meta': {'object_name': 'PoolBalance'}, - 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'percent_done': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'pid': ('django.db.models.fields.IntegerField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}) - }, - 'storageadmin.poolscrub': { - 'Meta': {'object_name': 'PoolScrub'}, - 'corrected_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'csum_discards': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'csum_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'data_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'kb_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), - 'last_physical': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'malloc_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'no_csum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'pid': ('django.db.models.fields.IntegerField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'read_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}), - 'super_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'tree_bytes_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'tree_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'uncorrectable_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'unverified_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'verify_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - 'storageadmin.posixacls': { - 'Meta': {'object_name': 'PosixACLs'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'owner': ('django.db.models.fields.CharField', [], {'max_length': '5'}), - 'perms': ('django.db.models.fields.CharField', [], {'max_length': '3'}), - 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) - }, - 'storageadmin.rockon': { - 'Meta': {'object_name': 'RockOn'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'https': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'icon': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'link': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'ui': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}) - }, - 'storageadmin.sambacustomconfig': { - 'Meta': {'object_name': 'SambaCustomConfig'}, - 'custom_config': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) - }, - 'storageadmin.sambashare': { - 'Meta': {'object_name': 'SambaShare'}, - 'browsable': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}), - 'comment': ('django.db.models.fields.CharField', [], {'default': "'foo bar'", 'max_length': '100'}), - 'guest_ok': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'read_only': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'sambashare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}) - }, - 'storageadmin.setup': { - 'Meta': {'object_name': 'Setup'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'setup_disks': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_network': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_system': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.sftp': { - 'Meta': {'object_name': 'SFTP'}, - 'editable': ('django.db.models.fields.CharField', [], {'default': "'ro'", 'max_length': '2'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.Share']", 'unique': 'True'}) - }, - 'storageadmin.share': { - 'Meta': {'object_name': 'Share'}, - 'compression_algo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'group': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'owner': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), - 'perms': ('django.db.models.fields.CharField', [], {'default': "'755'", 'max_length': '9'}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'replica': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'subvol_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.smartattribute': { - 'Meta': {'object_name': 'SMARTAttribute'}, - 'aid': ('django.db.models.fields.IntegerField', [], {}), - 'atype': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'failed': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'normed_value': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'raw_value': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'threshold': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'updated': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'worst': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - 'storageadmin.smartcapability': { - 'Meta': {'object_name': 'SMARTCapability'}, - 'capabilities': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.smarterrorlog': { - 'Meta': {'object_name': 'SMARTErrorLog'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.smarterrorlogsummary': { - 'Meta': {'object_name': 'SMARTErrorLogSummary'}, - 'details': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'error_num': ('django.db.models.fields.IntegerField', [], {}), - 'etype': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'storageadmin.smartidentity': { - 'Meta': {'object_name': 'SMARTIdentity'}, - 'assessment': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'ata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'capacity': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'device_model': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'enabled': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'firmware_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'in_smartdb': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'model_family': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'rotation_rate': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'sata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'scanned_on': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'sector_size': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'serial_number': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'supported': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'world_wide_name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'storageadmin.smartinfo': { - 'Meta': {'object_name': 'SMARTInfo'}, - 'disk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Disk']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) - }, - 'storageadmin.smarttestlog': { - 'Meta': {'object_name': 'SMARTTestLog'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'lba_of_first_error': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), - 'pct_completed': ('django.db.models.fields.IntegerField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'test_num': ('django.db.models.fields.IntegerField', [], {}) - }, - 'storageadmin.smarttestlogdetail': { - 'Meta': {'object_name': 'SMARTTestLogDetail'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.snapshot': { - 'Meta': {'unique_together': "(('share', 'name'),)", 'object_name': 'Snapshot'}, - 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'real_name': ('django.db.models.fields.CharField', [], {'default': "'unknownsnap'", 'max_length': '4096'}), - 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'snap_type': ('django.db.models.fields.CharField', [], {'default': "'admin'", 'max_length': '64'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uvisible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'writable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.supportcase': { - 'Meta': {'object_name': 'SupportCase'}, - 'case_type': ('django.db.models.fields.CharField', [], {'max_length': '6'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'notes': ('django.db.models.fields.TextField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '9'}), - 'zipped_log': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.tlscertificate': { - 'Meta': {'object_name': 'TLSCertificate'}, - 'certificate': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'storageadmin.user': { - 'Meta': {'object_name': 'User'}, - 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'email': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'gid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Group']", 'null': 'True'}), - 'homedir': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'public_key': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'smb_shares': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_users'", 'null': 'True', 'to': "orm['storageadmin.SambaShare']"}), - 'uid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), - 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'suser'", 'unique': 'True', 'null': 'True', 'to': u"orm['auth.User']"}), - 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}) - } - } - - complete_apps = ['storageadmin'] \ No newline at end of file diff --git a/src/rockstor/storageadmin/migrations/0033_auto__add_field_rockon_volume_add_support.py b/src/rockstor/storageadmin/migrations/0033_auto__add_field_rockon_volume_add_support.py deleted file mode 100644 index 085a7b5c0..000000000 --- a/src/rockstor/storageadmin/migrations/0033_auto__add_field_rockon_volume_add_support.py +++ /dev/null @@ -1,501 +0,0 @@ -# -*- coding: utf-8 -*- -from south.utils import datetime_utils as datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding field 'RockOn.volume_add_support' - db.add_column(u'storageadmin_rockon', 'volume_add_support', - self.gf('django.db.models.fields.BooleanField')(default=False), - keep_default=False) - - - def backwards(self, orm): - # Deleting field 'RockOn.volume_add_support' - db.delete_column(u'storageadmin_rockon', 'volume_add_support') - - - models = { - u'auth.group': { - 'Meta': {'object_name': 'Group'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - u'auth.permission': { - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - u'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - u'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - u'oauth2_provider.application': { - 'Meta': {'object_name': 'Application'}, - 'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'c?2AW4RQpAdRuVdrAM3LBVIed=PG5jUr8ZnsuUKi'", 'unique': 'True', 'max_length': '100'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u'DWpaNnrH_WE6nEo:G!T6v15lyw8HZrpDy9f@c=sSGWMRR=Gw=MgJ?x6qKtS129YJ2L_qrjE:D:Vqj3uvfJHMRGYICtKXxN=ER?Lu.LAqxm0VTtCjI?TuLkGv06OcovVd'", 'max_length': '255', 'blank': 'True'}), - 'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), - 'redirect_uris': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) - }, - 'storageadmin.advancednfsexport': { - 'Meta': {'object_name': 'AdvancedNFSExport'}, - 'export_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'storageadmin.apikeys': { - 'Meta': {'object_name': 'APIKeys'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), - 'user': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '8'}) - }, - 'storageadmin.appliance': { - 'Meta': {'object_name': 'Appliance'}, - 'client_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), - 'current_appliance': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'hostname': ('django.db.models.fields.CharField', [], {'default': "'Rockstor'", 'max_length': '128'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'ip': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'mgmt_port': ('django.db.models.fields.IntegerField', [], {'default': '443'}), - 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'storageadmin.containeroption': { - 'Meta': {'object_name': 'ContainerOption'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.dashboardconfig': { - 'Meta': {'object_name': 'DashboardConfig'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True'}), - 'widgets': ('django.db.models.fields.CharField', [], {'max_length': '4096'}) - }, - 'storageadmin.dcontainer': { - 'Meta': {'object_name': 'DContainer'}, - 'dimage': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DImage']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'launch_order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}), - 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}) - }, - 'storageadmin.dcontainerlink': { - 'Meta': {'unique_together': "(('destination', 'name'),)", 'object_name': 'DContainerLink'}, - 'destination': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'destination_container'", 'to': "orm['storageadmin.DContainer']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), - 'source': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.DContainer']", 'unique': 'True'}) - }, - 'storageadmin.dcustomconfig': { - 'Meta': {'unique_together': "(('rockon', 'key'),)", 'object_name': 'DCustomConfig'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), - 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) - }, - 'storageadmin.dimage': { - 'Meta': {'object_name': 'DImage'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'repo': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'tag': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.disk': { - 'Meta': {'object_name': 'Disk'}, - 'btrfs_uuid': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), - 'offline': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'parted': ('django.db.models.fields.BooleanField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), - 'serial': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'smart_available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'smart_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'transport': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'vendor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) - }, - 'storageadmin.dport': { - 'Meta': {'unique_together': "(('container', 'containerp'),)", 'object_name': 'DPort'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - 'containerp': ('django.db.models.fields.IntegerField', [], {}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'hostp': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'hostp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'protocol': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), - 'uiport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.dvolume': { - 'Meta': {'unique_together': "(('container', 'dest_dir'),)", 'object_name': 'DVolume'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'dest_dir': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'min_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']", 'null': 'True'}), - 'uservol': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.group': { - 'Meta': {'object_name': 'Group'}, - 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'gid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'groupname': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'storageadmin.installedplugin': { - 'Meta': {'object_name': 'InstalledPlugin'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'install_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'plugin_meta': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Plugin']"}) - }, - 'storageadmin.iscsitarget': { - 'Meta': {'object_name': 'IscsiTarget'}, - 'dev_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'dev_size': ('django.db.models.fields.IntegerField', [], {}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), - 'tid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'tname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) - }, - 'storageadmin.netatalkshare': { - 'Meta': {'object_name': 'NetatalkShare'}, - 'description': ('django.db.models.fields.CharField', [], {'default': "'afp on rockstor'", 'max_length': '1024'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'netatalkshare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}), - 'time_machine': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}) - }, - 'storageadmin.networkinterface': { - 'Meta': {'object_name': 'NetworkInterface'}, - 'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'boot_proto': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'dns_servers': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'domain': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'gateway': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'ipaddr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'itype': ('django.db.models.fields.CharField', [], {'default': "'io'", 'max_length': '100'}), - 'mac': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'netmask': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'network': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'onboot': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.nfsexport': { - 'Meta': {'object_name': 'NFSExport'}, - 'export_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.NFSExportGroup']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mount': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}) - }, - 'storageadmin.nfsexportgroup': { - 'Meta': {'object_name': 'NFSExportGroup'}, - 'admin_host': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'editable': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '2'}), - 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'host_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mount_security': ('django.db.models.fields.CharField', [], {'default': "'insecure'", 'max_length': '8'}), - 'nohide': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'syncable': ('django.db.models.fields.CharField', [], {'default': "'async'", 'max_length': '5'}) - }, - 'storageadmin.oauthapp': { - 'Meta': {'object_name': 'OauthApp'}, - 'application': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['oauth2_provider.Application']", 'unique': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.User']"}) - }, - 'storageadmin.plugin': { - 'Meta': {'object_name': 'Plugin'}, - 'css_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}), - 'display_name': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'js_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}) - }, - 'storageadmin.pool': { - 'Meta': {'object_name': 'Pool'}, - 'compression': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mnt_options': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'raid': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.poolbalance': { - 'Meta': {'object_name': 'PoolBalance'}, - 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'percent_done': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'pid': ('django.db.models.fields.IntegerField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}) - }, - 'storageadmin.poolscrub': { - 'Meta': {'object_name': 'PoolScrub'}, - 'corrected_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'csum_discards': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'csum_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'data_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'kb_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), - 'last_physical': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'malloc_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'no_csum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'pid': ('django.db.models.fields.IntegerField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'read_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}), - 'super_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'tree_bytes_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'tree_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'uncorrectable_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'unverified_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'verify_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - 'storageadmin.posixacls': { - 'Meta': {'object_name': 'PosixACLs'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'owner': ('django.db.models.fields.CharField', [], {'max_length': '5'}), - 'perms': ('django.db.models.fields.CharField', [], {'max_length': '3'}), - 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) - }, - 'storageadmin.rockon': { - 'Meta': {'object_name': 'RockOn'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'https': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'icon': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'link': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'ui': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'volume_add_support': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}) - }, - 'storageadmin.sambacustomconfig': { - 'Meta': {'object_name': 'SambaCustomConfig'}, - 'custom_config': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) - }, - 'storageadmin.sambashare': { - 'Meta': {'object_name': 'SambaShare'}, - 'browsable': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}), - 'comment': ('django.db.models.fields.CharField', [], {'default': "'foo bar'", 'max_length': '100'}), - 'guest_ok': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'read_only': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'sambashare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}) - }, - 'storageadmin.setup': { - 'Meta': {'object_name': 'Setup'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'setup_disks': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_network': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_system': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.sftp': { - 'Meta': {'object_name': 'SFTP'}, - 'editable': ('django.db.models.fields.CharField', [], {'default': "'ro'", 'max_length': '2'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.Share']", 'unique': 'True'}) - }, - 'storageadmin.share': { - 'Meta': {'object_name': 'Share'}, - 'compression_algo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'group': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'owner': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), - 'perms': ('django.db.models.fields.CharField', [], {'default': "'755'", 'max_length': '9'}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'replica': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'subvol_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.smartattribute': { - 'Meta': {'object_name': 'SMARTAttribute'}, - 'aid': ('django.db.models.fields.IntegerField', [], {}), - 'atype': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'failed': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'normed_value': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'raw_value': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'threshold': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'updated': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'worst': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - 'storageadmin.smartcapability': { - 'Meta': {'object_name': 'SMARTCapability'}, - 'capabilities': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.smarterrorlog': { - 'Meta': {'object_name': 'SMARTErrorLog'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.smarterrorlogsummary': { - 'Meta': {'object_name': 'SMARTErrorLogSummary'}, - 'details': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'error_num': ('django.db.models.fields.IntegerField', [], {}), - 'etype': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'storageadmin.smartidentity': { - 'Meta': {'object_name': 'SMARTIdentity'}, - 'assessment': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'ata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'capacity': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'device_model': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'enabled': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'firmware_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'in_smartdb': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'model_family': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'rotation_rate': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'sata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'scanned_on': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'sector_size': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'serial_number': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'supported': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'world_wide_name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'storageadmin.smartinfo': { - 'Meta': {'object_name': 'SMARTInfo'}, - 'disk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Disk']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) - }, - 'storageadmin.smarttestlog': { - 'Meta': {'object_name': 'SMARTTestLog'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'lba_of_first_error': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), - 'pct_completed': ('django.db.models.fields.IntegerField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'test_num': ('django.db.models.fields.IntegerField', [], {}) - }, - 'storageadmin.smarttestlogdetail': { - 'Meta': {'object_name': 'SMARTTestLogDetail'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.snapshot': { - 'Meta': {'unique_together': "(('share', 'name'),)", 'object_name': 'Snapshot'}, - 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'real_name': ('django.db.models.fields.CharField', [], {'default': "'unknownsnap'", 'max_length': '4096'}), - 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'snap_type': ('django.db.models.fields.CharField', [], {'default': "'admin'", 'max_length': '64'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uvisible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'writable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.supportcase': { - 'Meta': {'object_name': 'SupportCase'}, - 'case_type': ('django.db.models.fields.CharField', [], {'max_length': '6'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'notes': ('django.db.models.fields.TextField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '9'}), - 'zipped_log': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.tlscertificate': { - 'Meta': {'object_name': 'TLSCertificate'}, - 'certificate': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'storageadmin.user': { - 'Meta': {'object_name': 'User'}, - 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'email': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'gid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Group']", 'null': 'True'}), - 'homedir': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'public_key': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'smb_shares': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_users'", 'null': 'True', 'to': "orm['storageadmin.SambaShare']"}), - 'uid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), - 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'suser'", 'unique': 'True', 'null': 'True', 'to': u"orm['auth.User']"}), - 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}) - } - } - - complete_apps = ['storageadmin'] \ No newline at end of file diff --git a/src/rockstor/storageadmin/migrations/0034_auto__add_field_rockon_more_info.py b/src/rockstor/storageadmin/migrations/0034_auto__add_field_rockon_more_info.py deleted file mode 100644 index 41860b3b7..000000000 --- a/src/rockstor/storageadmin/migrations/0034_auto__add_field_rockon_more_info.py +++ /dev/null @@ -1,502 +0,0 @@ -# -*- coding: utf-8 -*- -from south.utils import datetime_utils as datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding field 'RockOn.more_info' - db.add_column(u'storageadmin_rockon', 'more_info', - self.gf('django.db.models.fields.CharField')(max_length=4096, null=True), - keep_default=False) - - - def backwards(self, orm): - # Deleting field 'RockOn.more_info' - db.delete_column(u'storageadmin_rockon', 'more_info') - - - models = { - u'auth.group': { - 'Meta': {'object_name': 'Group'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - u'auth.permission': { - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - u'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - u'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - u'oauth2_provider.application': { - 'Meta': {'object_name': 'Application'}, - 'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'BKk6rXlZ8t-Lm2o=AXAl@TfXBhVmBebr1wMHbG=w'", 'unique': 'True', 'max_length': '100'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u'cw6yYfzM2Fr=7PrNAg;t!!YcHzsr1O=Q5q1:yia=G@mj0wTSl5QSV1L0!_KB0c2Q4QjzliB0?56YE4BdV7LT56SVgvZJh1=89n;judfhDes344FvxJTGgWmQsMtUNQxh'", 'max_length': '255', 'blank': 'True'}), - 'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), - 'redirect_uris': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) - }, - 'storageadmin.advancednfsexport': { - 'Meta': {'object_name': 'AdvancedNFSExport'}, - 'export_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'storageadmin.apikeys': { - 'Meta': {'object_name': 'APIKeys'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), - 'user': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '8'}) - }, - 'storageadmin.appliance': { - 'Meta': {'object_name': 'Appliance'}, - 'client_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), - 'current_appliance': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'hostname': ('django.db.models.fields.CharField', [], {'default': "'Rockstor'", 'max_length': '128'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'ip': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'mgmt_port': ('django.db.models.fields.IntegerField', [], {'default': '443'}), - 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'storageadmin.containeroption': { - 'Meta': {'object_name': 'ContainerOption'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.dashboardconfig': { - 'Meta': {'object_name': 'DashboardConfig'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True'}), - 'widgets': ('django.db.models.fields.CharField', [], {'max_length': '4096'}) - }, - 'storageadmin.dcontainer': { - 'Meta': {'object_name': 'DContainer'}, - 'dimage': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DImage']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'launch_order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}), - 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}) - }, - 'storageadmin.dcontainerlink': { - 'Meta': {'unique_together': "(('destination', 'name'),)", 'object_name': 'DContainerLink'}, - 'destination': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'destination_container'", 'to': "orm['storageadmin.DContainer']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), - 'source': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.DContainer']", 'unique': 'True'}) - }, - 'storageadmin.dcustomconfig': { - 'Meta': {'unique_together': "(('rockon', 'key'),)", 'object_name': 'DCustomConfig'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), - 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) - }, - 'storageadmin.dimage': { - 'Meta': {'object_name': 'DImage'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'repo': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'tag': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.disk': { - 'Meta': {'object_name': 'Disk'}, - 'btrfs_uuid': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), - 'offline': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'parted': ('django.db.models.fields.BooleanField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), - 'serial': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'smart_available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'smart_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'transport': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'vendor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) - }, - 'storageadmin.dport': { - 'Meta': {'unique_together': "(('container', 'containerp'),)", 'object_name': 'DPort'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - 'containerp': ('django.db.models.fields.IntegerField', [], {}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'hostp': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'hostp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'protocol': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), - 'uiport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.dvolume': { - 'Meta': {'unique_together': "(('container', 'dest_dir'),)", 'object_name': 'DVolume'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'dest_dir': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'min_size': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']", 'null': 'True'}), - 'uservol': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.group': { - 'Meta': {'object_name': 'Group'}, - 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'gid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'groupname': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'storageadmin.installedplugin': { - 'Meta': {'object_name': 'InstalledPlugin'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'install_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'plugin_meta': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Plugin']"}) - }, - 'storageadmin.iscsitarget': { - 'Meta': {'object_name': 'IscsiTarget'}, - 'dev_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'dev_size': ('django.db.models.fields.IntegerField', [], {}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), - 'tid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'tname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) - }, - 'storageadmin.netatalkshare': { - 'Meta': {'object_name': 'NetatalkShare'}, - 'description': ('django.db.models.fields.CharField', [], {'default': "'afp on rockstor'", 'max_length': '1024'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'netatalkshare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}), - 'time_machine': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}) - }, - 'storageadmin.networkinterface': { - 'Meta': {'object_name': 'NetworkInterface'}, - 'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'boot_proto': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'dns_servers': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'domain': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'gateway': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'ipaddr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'itype': ('django.db.models.fields.CharField', [], {'default': "'io'", 'max_length': '100'}), - 'mac': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'netmask': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'network': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'onboot': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.nfsexport': { - 'Meta': {'object_name': 'NFSExport'}, - 'export_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.NFSExportGroup']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mount': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}) - }, - 'storageadmin.nfsexportgroup': { - 'Meta': {'object_name': 'NFSExportGroup'}, - 'admin_host': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'editable': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '2'}), - 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'host_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mount_security': ('django.db.models.fields.CharField', [], {'default': "'insecure'", 'max_length': '8'}), - 'nohide': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'syncable': ('django.db.models.fields.CharField', [], {'default': "'async'", 'max_length': '5'}) - }, - 'storageadmin.oauthapp': { - 'Meta': {'object_name': 'OauthApp'}, - 'application': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['oauth2_provider.Application']", 'unique': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.User']"}) - }, - 'storageadmin.plugin': { - 'Meta': {'object_name': 'Plugin'}, - 'css_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}), - 'display_name': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'js_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}) - }, - 'storageadmin.pool': { - 'Meta': {'object_name': 'Pool'}, - 'compression': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mnt_options': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'raid': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.poolbalance': { - 'Meta': {'object_name': 'PoolBalance'}, - 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'percent_done': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'pid': ('django.db.models.fields.IntegerField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}) - }, - 'storageadmin.poolscrub': { - 'Meta': {'object_name': 'PoolScrub'}, - 'corrected_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'csum_discards': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'csum_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'data_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'kb_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), - 'last_physical': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'malloc_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'no_csum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'pid': ('django.db.models.fields.IntegerField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'read_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}), - 'super_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'tree_bytes_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'tree_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'uncorrectable_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'unverified_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'verify_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - 'storageadmin.posixacls': { - 'Meta': {'object_name': 'PosixACLs'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'owner': ('django.db.models.fields.CharField', [], {'max_length': '5'}), - 'perms': ('django.db.models.fields.CharField', [], {'max_length': '3'}), - 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) - }, - 'storageadmin.rockon': { - 'Meta': {'object_name': 'RockOn'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'https': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'icon': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'link': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'more_info': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'ui': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'volume_add_support': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}) - }, - 'storageadmin.sambacustomconfig': { - 'Meta': {'object_name': 'SambaCustomConfig'}, - 'custom_config': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) - }, - 'storageadmin.sambashare': { - 'Meta': {'object_name': 'SambaShare'}, - 'browsable': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}), - 'comment': ('django.db.models.fields.CharField', [], {'default': "'foo bar'", 'max_length': '100'}), - 'guest_ok': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'read_only': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'sambashare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}) - }, - 'storageadmin.setup': { - 'Meta': {'object_name': 'Setup'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'setup_disks': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_network': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_system': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.sftp': { - 'Meta': {'object_name': 'SFTP'}, - 'editable': ('django.db.models.fields.CharField', [], {'default': "'ro'", 'max_length': '2'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.Share']", 'unique': 'True'}) - }, - 'storageadmin.share': { - 'Meta': {'object_name': 'Share'}, - 'compression_algo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'group': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'owner': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), - 'perms': ('django.db.models.fields.CharField', [], {'default': "'755'", 'max_length': '9'}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'replica': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'subvol_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.smartattribute': { - 'Meta': {'object_name': 'SMARTAttribute'}, - 'aid': ('django.db.models.fields.IntegerField', [], {}), - 'atype': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'failed': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'normed_value': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'raw_value': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'threshold': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'updated': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'worst': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - 'storageadmin.smartcapability': { - 'Meta': {'object_name': 'SMARTCapability'}, - 'capabilities': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.smarterrorlog': { - 'Meta': {'object_name': 'SMARTErrorLog'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.smarterrorlogsummary': { - 'Meta': {'object_name': 'SMARTErrorLogSummary'}, - 'details': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'error_num': ('django.db.models.fields.IntegerField', [], {}), - 'etype': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'storageadmin.smartidentity': { - 'Meta': {'object_name': 'SMARTIdentity'}, - 'assessment': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'ata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'capacity': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'device_model': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'enabled': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'firmware_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'in_smartdb': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'model_family': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'rotation_rate': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'sata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'scanned_on': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'sector_size': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'serial_number': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'supported': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'world_wide_name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'storageadmin.smartinfo': { - 'Meta': {'object_name': 'SMARTInfo'}, - 'disk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Disk']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) - }, - 'storageadmin.smarttestlog': { - 'Meta': {'object_name': 'SMARTTestLog'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'lba_of_first_error': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), - 'pct_completed': ('django.db.models.fields.IntegerField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'test_num': ('django.db.models.fields.IntegerField', [], {}) - }, - 'storageadmin.smarttestlogdetail': { - 'Meta': {'object_name': 'SMARTTestLogDetail'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.snapshot': { - 'Meta': {'unique_together': "(('share', 'name'),)", 'object_name': 'Snapshot'}, - 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'real_name': ('django.db.models.fields.CharField', [], {'default': "'unknownsnap'", 'max_length': '4096'}), - 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'snap_type': ('django.db.models.fields.CharField', [], {'default': "'admin'", 'max_length': '64'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uvisible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'writable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.supportcase': { - 'Meta': {'object_name': 'SupportCase'}, - 'case_type': ('django.db.models.fields.CharField', [], {'max_length': '6'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'notes': ('django.db.models.fields.TextField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '9'}), - 'zipped_log': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.tlscertificate': { - 'Meta': {'object_name': 'TLSCertificate'}, - 'certificate': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'storageadmin.user': { - 'Meta': {'object_name': 'User'}, - 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'email': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'gid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Group']", 'null': 'True'}), - 'homedir': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'public_key': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'smb_shares': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_users'", 'null': 'True', 'to': "orm['storageadmin.SambaShare']"}), - 'uid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), - 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'suser'", 'unique': 'True', 'null': 'True', 'to': u"orm['auth.User']"}), - 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}) - } - } - - complete_apps = ['storageadmin'] \ No newline at end of file diff --git a/src/rockstor/storageadmin/migrations/0035_auto__chg_field_dvolume_min_size.py b/src/rockstor/storageadmin/migrations/0035_auto__chg_field_dvolume_min_size.py deleted file mode 100644 index 6561ef060..000000000 --- a/src/rockstor/storageadmin/migrations/0035_auto__chg_field_dvolume_min_size.py +++ /dev/null @@ -1,500 +0,0 @@ -# -*- coding: utf-8 -*- -from south.utils import datetime_utils as datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Changing field 'DVolume.min_size' - db.alter_column(u'storageadmin_dvolume', 'min_size', self.gf('django.db.models.fields.IntegerField')(null=True)) - - def backwards(self, orm): - - # Changing field 'DVolume.min_size' - db.alter_column(u'storageadmin_dvolume', 'min_size', self.gf('django.db.models.fields.IntegerField')()) - - models = { - u'auth.group': { - 'Meta': {'object_name': 'Group'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - u'auth.permission': { - 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - u'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - u'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - u'oauth2_provider.application': { - 'Meta': {'object_name': 'Application'}, - 'authorization_grant_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'client_id': ('django.db.models.fields.CharField', [], {'default': "u'sN0naaeySKET5iqxHO05;8JzlRnqc5gqU5y=8k?!'", 'unique': 'True', 'max_length': '100'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'default': "u'GBekbAhBLHrjObXtL@KBys@TOrae2Gh1;nb.rO1pZc1wf70Q5;VZ=bhcfTpCYOt@K7v-GXU6O9pZ8ARfYyygqMR@86mElcl7s0VcIeV;LDIlvf-m0X57ALuSab9YcGRa'", 'max_length': '255', 'blank': 'True'}), - 'client_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}), - 'redirect_uris': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}) - }, - 'storageadmin.advancednfsexport': { - 'Meta': {'object_name': 'AdvancedNFSExport'}, - 'export_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'storageadmin.apikeys': { - 'Meta': {'object_name': 'APIKeys'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), - 'user': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '8'}) - }, - 'storageadmin.appliance': { - 'Meta': {'object_name': 'Appliance'}, - 'client_id': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'client_secret': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}), - 'current_appliance': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'hostname': ('django.db.models.fields.CharField', [], {'default': "'Rockstor'", 'max_length': '128'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'ip': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'mgmt_port': ('django.db.models.fields.IntegerField', [], {'default': '443'}), - 'uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'storageadmin.containeroption': { - 'Meta': {'object_name': 'ContainerOption'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}) - }, - 'storageadmin.dashboardconfig': { - 'Meta': {'object_name': 'DashboardConfig'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']", 'unique': 'True'}), - 'widgets': ('django.db.models.fields.CharField', [], {'max_length': '4096'}) - }, - 'storageadmin.dcontainer': { - 'Meta': {'object_name': 'DContainer'}, - 'dimage': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DImage']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'launch_order': ('django.db.models.fields.IntegerField', [], {'default': '1'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}), - 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}) - }, - 'storageadmin.dcontainerlink': { - 'Meta': {'unique_together': "(('destination', 'name'),)", 'object_name': 'DContainerLink'}, - 'destination': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'destination_container'", 'to': "orm['storageadmin.DContainer']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), - 'source': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.DContainer']", 'unique': 'True'}) - }, - 'storageadmin.dcustomconfig': { - 'Meta': {'unique_together': "(('rockon', 'key'),)", 'object_name': 'DCustomConfig'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True'}), - 'rockon': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.RockOn']"}), - 'val': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) - }, - 'storageadmin.dimage': { - 'Meta': {'object_name': 'DImage'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'repo': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'tag': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.disk': { - 'Meta': {'object_name': 'Disk'}, - 'btrfs_uuid': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '10'}), - 'offline': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'parted': ('django.db.models.fields.BooleanField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), - 'serial': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'smart_available': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'smart_enabled': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'transport': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'vendor': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}) - }, - 'storageadmin.dport': { - 'Meta': {'unique_together': "(('container', 'containerp'),)", 'object_name': 'DPort'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - 'containerp': ('django.db.models.fields.IntegerField', [], {}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'hostp': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'hostp_default': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'protocol': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}), - 'uiport': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.dvolume': { - 'Meta': {'unique_together': "(('container', 'dest_dir'),)", 'object_name': 'DVolume'}, - 'container': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.DContainer']"}), - 'description': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'dest_dir': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'label': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'min_size': ('django.db.models.fields.IntegerField', [], {'null': 'True'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']", 'null': 'True'}), - 'uservol': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.group': { - 'Meta': {'object_name': 'Group'}, - 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'gid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'groupname': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'storageadmin.installedplugin': { - 'Meta': {'object_name': 'InstalledPlugin'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'install_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'plugin_meta': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Plugin']"}) - }, - 'storageadmin.iscsitarget': { - 'Meta': {'object_name': 'IscsiTarget'}, - 'dev_name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'dev_size': ('django.db.models.fields.IntegerField', [], {}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), - 'tid': ('django.db.models.fields.IntegerField', [], {'unique': 'True'}), - 'tname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}) - }, - 'storageadmin.netatalkshare': { - 'Meta': {'object_name': 'NetatalkShare'}, - 'description': ('django.db.models.fields.CharField', [], {'default': "'afp on rockstor'", 'max_length': '1024'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'netatalkshare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}), - 'time_machine': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}) - }, - 'storageadmin.networkinterface': { - 'Meta': {'object_name': 'NetworkInterface'}, - 'alias': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'boot_proto': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'dns_servers': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'domain': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'gateway': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'ipaddr': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'itype': ('django.db.models.fields.CharField', [], {'default': "'io'", 'max_length': '100'}), - 'mac': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'netmask': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'network': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}), - 'onboot': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.nfsexport': { - 'Meta': {'object_name': 'NFSExport'}, - 'export_group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.NFSExportGroup']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mount': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}) - }, - 'storageadmin.nfsexportgroup': { - 'Meta': {'object_name': 'NFSExportGroup'}, - 'admin_host': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'editable': ('django.db.models.fields.CharField', [], {'default': "'rw'", 'max_length': '2'}), - 'enabled': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'host_str': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mount_security': ('django.db.models.fields.CharField', [], {'default': "'insecure'", 'max_length': '8'}), - 'nohide': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'syncable': ('django.db.models.fields.CharField', [], {'default': "'async'", 'max_length': '5'}) - }, - 'storageadmin.oauthapp': { - 'Meta': {'object_name': 'OauthApp'}, - 'application': ('django.db.models.fields.related.OneToOneField', [], {'to': u"orm['oauth2_provider.Application']", 'unique': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.User']"}) - }, - 'storageadmin.plugin': { - 'Meta': {'object_name': 'Plugin'}, - 'css_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'description': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '4096'}), - 'display_name': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'js_file_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'key': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}) - }, - 'storageadmin.pool': { - 'Meta': {'object_name': 'Pool'}, - 'compression': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mnt_options': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'raid': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.poolbalance': { - 'Meta': {'object_name': 'PoolBalance'}, - 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'percent_done': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'pid': ('django.db.models.fields.IntegerField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}) - }, - 'storageadmin.poolscrub': { - 'Meta': {'object_name': 'PoolScrub'}, - 'corrected_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'csum_discards': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'csum_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'data_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'end_time': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'kb_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'null': 'True'}), - 'last_physical': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'malloc_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'no_csum': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'pid': ('django.db.models.fields.IntegerField', [], {}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'read_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'start_time': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'status': ('django.db.models.fields.CharField', [], {'default': "'started'", 'max_length': '10'}), - 'super_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'tree_bytes_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'tree_extents_scrubbed': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'uncorrectable_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'unverified_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'verify_errors': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - 'storageadmin.posixacls': { - 'Meta': {'object_name': 'PosixACLs'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'owner': ('django.db.models.fields.CharField', [], {'max_length': '5'}), - 'perms': ('django.db.models.fields.CharField', [], {'max_length': '3'}), - 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) - }, - 'storageadmin.rockon': { - 'Meta': {'object_name': 'RockOn'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'https': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'icon': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'link': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'more_info': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'ui': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'volume_add_support': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'website': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}) - }, - 'storageadmin.sambacustomconfig': { - 'Meta': {'object_name': 'SambaCustomConfig'}, - 'custom_config': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'smb_share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SambaShare']"}) - }, - 'storageadmin.sambashare': { - 'Meta': {'object_name': 'SambaShare'}, - 'browsable': ('django.db.models.fields.CharField', [], {'default': "'yes'", 'max_length': '3'}), - 'comment': ('django.db.models.fields.CharField', [], {'default': "'foo bar'", 'max_length': '100'}), - 'guest_ok': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'read_only': ('django.db.models.fields.CharField', [], {'default': "'no'", 'max_length': '3'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'sambashare'", 'unique': 'True', 'to': "orm['storageadmin.Share']"}) - }, - 'storageadmin.setup': { - 'Meta': {'object_name': 'Setup'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'setup_disks': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_network': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_system': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'setup_user': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.sftp': { - 'Meta': {'object_name': 'SFTP'}, - 'editable': ('django.db.models.fields.CharField', [], {'default': "'ro'", 'max_length': '2'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'share': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['storageadmin.Share']", 'unique': 'True'}) - }, - 'storageadmin.share': { - 'Meta': {'object_name': 'Share'}, - 'compression_algo': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'group': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '4096'}), - 'owner': ('django.db.models.fields.CharField', [], {'default': "'root'", 'max_length': '4096'}), - 'perms': ('django.db.models.fields.CharField', [], {'default': "'755'", 'max_length': '9'}), - 'pool': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Pool']"}), - 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'replica': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'subvol_name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uuid': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True'}) - }, - 'storageadmin.smartattribute': { - 'Meta': {'object_name': 'SMARTAttribute'}, - 'aid': ('django.db.models.fields.IntegerField', [], {}), - 'atype': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'failed': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'normed_value': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'raw_value': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'threshold': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'updated': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'worst': ('django.db.models.fields.IntegerField', [], {'default': '0'}) - }, - 'storageadmin.smartcapability': { - 'Meta': {'object_name': 'SMARTCapability'}, - 'capabilities': ('django.db.models.fields.CharField', [], {'max_length': '2048'}), - 'flag': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'storageadmin.smarterrorlog': { - 'Meta': {'object_name': 'SMARTErrorLog'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.smarterrorlogsummary': { - 'Meta': {'object_name': 'SMARTErrorLogSummary'}, - 'details': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'error_num': ('django.db.models.fields.IntegerField', [], {}), - 'etype': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), - 'state': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'storageadmin.smartidentity': { - 'Meta': {'object_name': 'SMARTIdentity'}, - 'assessment': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'ata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'capacity': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'device_model': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'enabled': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'firmware_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'in_smartdb': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'model_family': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'rotation_rate': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'sata_version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'scanned_on': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'sector_size': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'serial_number': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'supported': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'world_wide_name': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'storageadmin.smartinfo': { - 'Meta': {'object_name': 'SMARTInfo'}, - 'disk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Disk']"}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}) - }, - 'storageadmin.smarttestlog': { - 'Meta': {'object_name': 'SMARTTestLog'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'lba_of_first_error': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'lifetime_hours': ('django.db.models.fields.IntegerField', [], {}), - 'pct_completed': ('django.db.models.fields.IntegerField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'test_num': ('django.db.models.fields.IntegerField', [], {}) - }, - 'storageadmin.smarttestlogdetail': { - 'Meta': {'object_name': 'SMARTTestLogDetail'}, - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'info': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.SMARTInfo']"}), - 'line': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.snapshot': { - 'Meta': {'unique_together': "(('share', 'name'),)", 'object_name': 'Snapshot'}, - 'eusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '4096'}), - 'qgroup': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'real_name': ('django.db.models.fields.CharField', [], {'default': "'unknownsnap'", 'max_length': '4096'}), - 'rusage': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'share': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Share']"}), - 'size': ('django.db.models.fields.BigIntegerField', [], {'default': '0'}), - 'snap_type': ('django.db.models.fields.CharField', [], {'default': "'admin'", 'max_length': '64'}), - 'toc': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), - 'uvisible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'writable': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'storageadmin.supportcase': { - 'Meta': {'object_name': 'SupportCase'}, - 'case_type': ('django.db.models.fields.CharField', [], {'max_length': '6'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'notes': ('django.db.models.fields.TextField', [], {}), - 'status': ('django.db.models.fields.CharField', [], {'max_length': '9'}), - 'zipped_log': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'storageadmin.tlscertificate': { - 'Meta': {'object_name': 'TLSCertificate'}, - 'certificate': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'key': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'storageadmin.user': { - 'Meta': {'object_name': 'User'}, - 'admin': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'email': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'gid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['storageadmin.Group']", 'null': 'True'}), - 'homedir': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'public_key': ('django.db.models.fields.CharField', [], {'max_length': '4096', 'null': 'True'}), - 'shell': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True'}), - 'smb_shares': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'admin_users'", 'null': 'True', 'to': "orm['storageadmin.SambaShare']"}), - 'uid': ('django.db.models.fields.IntegerField', [], {'default': '5000'}), - 'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'suser'", 'unique': 'True', 'null': 'True', 'to': u"orm['auth.User']"}), - 'username': ('django.db.models.fields.CharField', [], {'default': "''", 'unique': 'True', 'max_length': '4096'}) - } - } - - complete_apps = ['storageadmin'] \ No newline at end of file From 9c8a382412f8e2626c9c09b645e35e13f869663e Mon Sep 17 00:00:00 2001 From: Suman Chakravartula Date: Sun, 5 Jul 2015 16:14:12 -0700 Subject: [PATCH 40/40] remove more info from settings modal and add it as a separate model for better clarity. #697 --- .../js/templates/rockons/more_info.jst | 1 + .../js/templates/rockons/rockons.jst | 5 +- .../rockons/settings_summary_table.jst | 5 -- .../static/storageadmin/js/views/rockons.js | 56 ++++++++++++++++++- .../storageadmin/views/rockon_json.py | 2 +- 5 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/more_info.jst diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/more_info.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/more_info.jst new file mode 100644 index 000000000..4316548a3 --- /dev/null +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/more_info.jst @@ -0,0 +1 @@ +<%= rockon.get('more_info') %> diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst index e24e1500a..87c191b14 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/rockons.jst @@ -84,7 +84,10 @@ <% } %>
    ON
       - +    + <% if (rockon.get('more_info')) { %> + + <% } %>

    <% if (ui_map[rockon.get('id')]) { %> <% if (rockon.get('status') == 'started') { %> diff --git a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/settings_summary_table.jst b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/settings_summary_table.jst index 4042d6e9b..9c0e16490 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/settings_summary_table.jst +++ b/src/rockstor/storageadmin/static/storageadmin/js/templates/rockons/settings_summary_table.jst @@ -40,8 +40,3 @@ <% }); %>
    Resource type  Name  Mapped representation  Resource type  Name  Mapped representation  
    - -<% if (rockon.get('more_info')) { %> -

    Important information about this Rock-On

    -<%= rockon.get('more_info') %> -<% } %> diff --git a/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js b/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js index 9a0859ed3..da662eb42 100644 --- a/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js +++ b/src/rockstor/storageadmin/static/storageadmin/js/views/rockons.js @@ -44,7 +44,8 @@ RockonsView = RockstorLayoutView.extend({ 'click .slider-stop': 'stopRockon', 'click .slider-start': 'startRockon', 'click #js-update-rockons': 'updateRockons', - 'click #js-rockon-settings': 'rockonSettings' + 'click #js-rockon-settings': 'rockonSettings', + 'click #js-rockon-info': 'rockonInfo' }, render: function() { @@ -177,9 +178,9 @@ RockonsView = RockstorLayoutView.extend({ rockonSettings: function(event) { var _this = this; event.preventDefault(); - var rockon_id = this.getRockonId(event); + var rockon_id = _this.getRockonId(event); var rockon_o = _this.rockons.get(rockon_id); - this.stopPolling(); + _this.stopPolling(); var wizardView = new RockonSettingsWizardView({ model: new Backbone.Model({ rockon: rockon_o}), title: rockon_o.get('name') + ' Settings', @@ -189,6 +190,21 @@ RockonsView = RockstorLayoutView.extend({ $('#install-rockon-overlay').overlay().load(); }, + rockonInfo: function(event) { + var _this = this; + event.preventDefault(); + var rockon_id = _this.getRockonId(event); + var rockon_o = _this.rockons.get(rockon_id); + _this.stopPolling(); + var infoView = new RockonInfoView({ + model: new Backbone.Model({ rockon: rockon_o}), + title: 'Additional information about ' + rockon_o.get('name') + ' Rock-on', + parent: this + }); + $('.overlay-content', '#install-rockon-overlay').html(infoView.render().el); + $('#install-rockon-overlay').overlay().load(); + }, + getRockonId: function(event) { var slider = $(event.currentTarget); return slider.attr('data-rockon-id'); @@ -592,6 +608,23 @@ RockonInstallComplete = RockstorWizardPage.extend({ }); +RockonInfoView = WizardView.extend({ + initialize: function() { + WizardView.prototype.initialize.apply(this, arguments); + this.pages = [RockonInfoSummary,]; + }, + + render: function() { + WizardView.prototype.render.apply(this, arguments); + return this; + }, + + modifyButtonText: function() { + this.$('#prev-page').hide(); + this.$('#next-page').hide(); + } +}); + RockonSettingsWizardView = WizardView.extend({ initialize: function() { WizardView.prototype.initialize.apply(this, arguments); @@ -746,6 +779,23 @@ RockonAddShare = RockstorWizardPage.extend({ }); +RockonInfoSummary = RockstorWizardPage.extend({ + initialize: function() { + this.template = window.JST.rockons_settings_summary; + this.sub_template = window.JST.rockons_more_info; + RockstorWizardPage.prototype.initialize.apply(this, arguments); + }, + + render: function() { + RockstorWizardPage.prototype.render.apply(this, arguments); + this.$('#ph-settings-summary-table').html(this.sub_template({ + rockon: this.model.get('rockon') + })); + return this; + } + +}); + RockonSettingsSummary = RockstorWizardPage.extend({ initialize: function() { this.template = window.JST.rockons_settings_summary; diff --git a/src/rockstor/storageadmin/views/rockon_json.py b/src/rockstor/storageadmin/views/rockon_json.py index a05713be5..84a6d4a21 100644 --- a/src/rockstor/storageadmin/views/rockon_json.py +++ b/src/rockstor/storageadmin/views/rockon_json.py @@ -158,7 +158,7 @@ 'description': 'Plex media server', 'website': 'https://plex.tv/', 'volume_add_support': True, - 'more_info': '

    Adding media to Plex.

    You can add more Shares(with media) from here

    Then, from Plex WebUI, you can update and re-index your library.

    '} + 'more_info': '

    Adding more media to Plex.

    You can add more Shares(with media) to Plex from the settings wizard of this Rock-on. Then, from Plex WebUI, you can update and re-index your library.

    '} rockons = {'OpenVPN': openvpn, 'OwnCloud': owncloud,