def post(self, request, sname): try: share = validate_share(sname, request) options = parse_options(request) dup_export_check(share, options['host_str'], request) cur_exports = list(NFSExport.objects.all()) eg = NFSExportGroup(**options) eg.save() mnt_pt = ('%s%s' % (settings.MNT_PT, share.name)) export_pt = ('%s%s' % (settings.NFS_EXPORT_ROOT, share.name)) if (not is_share_mounted(share.name)): pool_device = Disk.objects.filter(pool=share.pool)[0].name mount_share(share.subvol_name, pool_device, mnt_pt) export = NFSExport(export_group=eg, share=share, mount=export_pt) export.full_clean() export.save() cur_exports.append(export) exports = create_nfs_export_input(cur_exports) refresh_wrapper(exports, request, logger) nfs_serializer = NFSExportGroupSerializer(eg) return Response(nfs_serializer.data) except RockStorAPIException: raise except Exception, e: handle_exception(e, request)
def post(self, request): if ('entries' not in request.DATA): e_msg = ('Cannot export without specifying entries') handle_exception(Exception(e_msg), request) try: AdvancedNFSExport.objects.all().delete() cur_entries = [] for e in request.DATA['entries']: logger.debug('adv export entry -- %s' % e) ce = AdvancedNFSExport(export_str=e) ce.save() cur_entries.append(ce) exports_d = create_adv_nfs_export_input(request.DATA['entries'], request) cur_exports = list(NFSExport.objects.all()) exports = create_nfs_export_input(cur_exports) exports.update(exports_d) refresh_wrapper(exports, request, logger) nfs_serializer = AdvancedNFSExportSerializer(cur_entries) return Response(nfs_serializer.data) except RockStorAPIException: raise except Exception, e: handle_exception(e, request)
def _toggle_visibility(self, share, snap_name, on=True): for se in NFSExport.objects.filter(share=share): snap_realname = ('%s_%s' % (share.name, snap_name)) mnt_pt = ('%s%s/%s' % (settings.MNT_PT, share.pool.name, snap_realname)) export_pt = mnt_pt.replace(settings.MNT_PT, settings.NFS_EXPORT_ROOT) export = None if (on): if (not NFSExport.objects.filter(share=share, nohide=False)): #master share is not exported, so don't export the snap continue export = NFSExport(share=share, mount=export_pt, host_str=se.host_str, nohide=True) export.full_clean() export.save() else: try: export = NFSExport.objects.get(share=share, host_str=se.host_str, mount=export_pt, nohide=True) export.enabled = False except Exception, e: logger.exception(e) continue exports = create_nfs_export_input(export) refresh_nfs_exports(exports) if (not on): export.delete()
def delete(self, request, export_id): try: eg = validate_export_group(export_id, request) cur_exports = list(NFSExport.objects.all()) for e in NFSExport.objects.filter(export_group=eg): export_pt = ('%s%s' % (settings.NFS_EXPORT_ROOT, e.share.name)) if (e.export_group.nohide): snap_name = e.mount.split(e.share.name + '_')[-1] export_pt = ('%s/%s' % (export_pt, snap_name)) teardown_wrapper(export_pt, request, logger) cur_exports.remove(e) e.delete() eg.delete() exports = create_nfs_export_input(cur_exports) adv_entries = [ e.export_str for e in AdvancedNFSExport.objects.all() ] exports_d = create_adv_nfs_export_input(adv_entries, request) exports.update(exports_d) refresh_wrapper(exports, request, logger) return Response() except RockStorAPIException: raise except Exception, e: handle_exception(e, request)
def post(self, request): with self._handle_exception(request): if ('shares' not in request.data): e_msg = ('Cannot export without specifying shares') handle_exception(Exception(e_msg), request) shares = [validate_share(s, request) for s in request.data['shares']] options = parse_options(request) for s in shares: dup_export_check(s, options['host_str'], request) cur_exports = list(NFSExport.objects.all()) eg = NFSExportGroup(**options) eg.save() for s in shares: mnt_pt = ('%s%s' % (settings.MNT_PT, s.name)) export_pt = ('%s%s' % (settings.NFS_EXPORT_ROOT, s.name)) if (not is_share_mounted(s.name)): pool_device = Disk.objects.filter(pool=s.pool)[0].name mount_share(s, pool_device, mnt_pt) export = NFSExport(export_group=eg, share=s, mount=export_pt) export.full_clean() export.save() cur_exports.append(export) exports = create_nfs_export_input(cur_exports) adv_entries = [e.export_str for e in AdvancedNFSExport.objects.all()] exports_d = create_adv_nfs_export_input(adv_entries, request) exports.update(exports_d) refresh_wrapper(exports, request, logger) nfs_serializer = NFSExportGroupSerializer(eg) return Response(nfs_serializer.data)
def delete(self, request, sname, export_id): try: share = validate_share(sname, request) eg = validate_export_group(export_id, request) cur_exports = list(NFSExport.objects.all()) export = NFSExport.objects.get(export_group=eg, share=share) for e in NFSExport.objects.filter(share=share): if (e.export_group.host_str == eg.host_str): export_pt = ('%s%s' % (settings.NFS_EXPORT_ROOT, share.name)) if (e.export_group.nohide): snap_name = e.mount.split(e.share.name + '_')[-1] export_pt = ('%s%s/%s' % (settings.NFS_EXPORT_ROOT, e.share.name, snap_name)) teardown_wrapper(export_pt, request, logger) cur_exports.remove(e) exports = create_nfs_export_input(cur_exports) export.delete() if (NFSExport.objects.filter(export_group=eg).count() == 0): #delete only when this is the only share in the group eg.delete() refresh_wrapper(exports, request, logger) return Response() except RockStorAPIException: raise except Exception, e: handle_exception(e, request)
def post(self, request): if ('shares' not in request.DATA): e_msg = ('Cannot export without specifying shares') handle_exception(Exception(e_msg), request) shares = [validate_share(s, request) for s in request.DATA['shares']] try: options = parse_options(request) for s in shares: dup_export_check(s, options['host_str'], request) cur_exports = list(NFSExport.objects.all()) eg = NFSExportGroup(**options) eg.save() for s in shares: mnt_pt = ('%s%s' % (settings.MNT_PT, s.name)) export_pt = ('%s%s' % (settings.NFS_EXPORT_ROOT, s.name)) if (not is_share_mounted(s.name)): pool_device = Disk.objects.filter(pool=s.pool)[0].name mount_share(s.subvol_name, pool_device, mnt_pt) export = NFSExport(export_group=eg, share=s, mount=export_pt) export.full_clean() export.save() cur_exports.append(export) exports = create_nfs_export_input(cur_exports) refresh_wrapper(exports, request, logger) nfs_serializer = NFSExportGroupSerializer(eg) return Response(nfs_serializer.data) except RockStorAPIException: raise except Exception, e: handle_exception(e, request)
def post(self, request): with self._handle_exception(request): if ('shares' not in request.data): e_msg = ('Cannot export without specifying shares') handle_exception(Exception(e_msg), request) shares = [ validate_share(s, request) for s in request.data['shares'] ] options = parse_options(request) for s in shares: dup_export_check(s, options['host_str'], request) cur_exports = list(NFSExport.objects.all()) eg = NFSExportGroup(**options) eg.save() for s in shares: mnt_pt = ('%s%s' % (settings.MNT_PT, s.name)) export_pt = ('%s%s' % (settings.NFS_EXPORT_ROOT, s.name)) if (not is_share_mounted(s.name)): pool_device = Disk.objects.filter(pool=s.pool)[0].name mount_share(s, pool_device, mnt_pt) export = NFSExport(export_group=eg, share=s, mount=export_pt) export.full_clean() export.save() cur_exports.append(export) exports = create_nfs_export_input(cur_exports) adv_entries = [ e.export_str for e in AdvancedNFSExport.objects.all() ] exports_d = create_adv_nfs_export_input(adv_entries, request) exports.update(exports_d) refresh_wrapper(exports, request, logger) nfs_serializer = NFSExportGroupSerializer(eg) return Response(nfs_serializer.data)
def put(self, request, sname, export_id): with self._handle_exception(request): share = validate_share(sname, request) eg = validate_export_group(export_id, request) options = parse_options(request) dup_export_check(share, options["host_str"], request, export_id=int(export_id)) NFSExportGroup.objects.filter(id=export_id).update(**options) NFSExportGroup.objects.filter(id=export_id)[0].save() cur_exports = list(NFSExport.objects.all()) exports = create_nfs_export_input(cur_exports) refresh_wrapper(exports, request, logger) nfs_serializer = NFSExportGroupSerializer(eg) return Response(nfs_serializer.data)
def post(self, request, command): if (command == 'bootstrap'): try: logger.info('bootstrapping') exports = create_nfs_export_input(NFSExport.objects.all()) logger.info('export = %s' % exports) refresh_nfs_exports(exports) return Response() except Exception, e: e_msg = ('Unable to export all nfs shares due to a system error') logger.error(e_msg) logger.exception(e) handle_exception(Exception(e_msg), request)
def put(self, request, sname, export_id): with self._handle_exception(request): share = validate_share(sname, request) eg = validate_export_group(export_id, request) options = parse_options(request) dup_export_check(share, options['host_str'], request, export_id=int(export_id)) NFSExportGroup.objects.filter(id=export_id).update(**options) NFSExportGroup.objects.filter(id=export_id)[0].save() cur_exports = list(NFSExport.objects.all()) exports = create_nfs_export_input(cur_exports) refresh_wrapper(exports, request, logger) nfs_serializer = NFSExportGroupSerializer(eg) return Response(nfs_serializer.data)
class CommandView(APIView): authentication_classes = ( DigestAuthentication, SessionAuthentication, BasicAuthentication, OAuth2Authentication, ) permission_classes = (IsAuthenticated, ) def post(self, request, command): if (command == 'bootstrap'): try: for share in Share.objects.all(): if (not is_share_mounted(share.name)): mnt_pt = ('%s%s' % (settings.MNT_PT, share.name)) pool_device = Disk.objects.filter( pool=share.pool)[0].name mount_share(share.subvol_name, pool_device, mnt_pt) except Exception, e: e_msg = ('Unable to mount a share(%s, %s) during bootstrap.' % (pool_device, mnt_pt)) logger.error(e_msg) logger.exception(e) handle_exception(Exception(e_msg), request) try: mnt_map = sftp_mount_map(settings.SFTP_MNT_ROOT) for sftpo in SFTP.objects.all(): sftp_mount(sftpo.share, settings.MNT_PT, settings.SFTP_MNT_ROOT, mnt_map, sftpo.editable) sftp_snap_toggle(sftpo.share) except Exception, e: e_msg = ('Unable to export all sftp shares due to a system' ' error') logger.error(e_msg) logger.exception(e) handle_exception(Exception(e_msg), request) try: exports = create_nfs_export_input(NFSExport.objects.all()) logger.info('export = %s' % exports) refresh_nfs_exports(exports) except Exception, e: e_msg = ('Unable to export all nfs shares due to a system' 'error') logger.error(e_msg) logger.exception(e) handle_exception(Exception(e_msg), request)
def put(self, request, export_id): if ('shares' not in request.DATA): e_msg = ('Cannot export without specifying shares') handle_exception(Exception(e_msg), request) shares = [validate_share(s, request) for s in request.DATA['shares']] try: eg = validate_export_group(export_id, request) options = parse_options(request) for s in shares: dup_export_check(s, options['host_str'], request, export_id=int(export_id)) NFSExportGroup.objects.filter(id=export_id).update(**options) NFSExportGroup.objects.filter(id=export_id)[0].save() cur_exports = list(NFSExport.objects.all()) for e in NFSExport.objects.filter(export_group=eg): if (e.share not in shares): cur_exports.remove(e) e.delete() else: shares.remove(e.share) for s in shares: mnt_pt = ('%s%s' % (settings.MNT_PT, s.name)) export_pt = ('%s%s' % (settings.NFS_EXPORT_ROOT, s.name)) if (not is_share_mounted(s.name)): pool_device = Disk.objects.filter(pool=s.pool)[0].name mount_share(s.subvol_name, pool_device, mnt_pt) export = NFSExport(export_group=eg, share=s, mount=export_pt) export.full_clean() export.save() cur_exports.append(export) exports = create_nfs_export_input(cur_exports) adv_entries = [ e.export_str for e in AdvancedNFSExport.objects.all() ] exports_d = create_adv_nfs_export_input(adv_entries, request) exports.update(exports_d) refresh_wrapper(exports, request, logger) nfs_serializer = NFSExportGroupSerializer(eg) return Response(nfs_serializer.data) except RockStorAPIException: raise except Exception, e: handle_exception(e, request)
def put(self, request, export_id): if ('shares' not in request.DATA): e_msg = ('Cannot export without specifying shares') handle_exception(Exception(e_msg), request) shares = [validate_share(s, request) for s in request.DATA['shares']] try: eg = validate_export_group(export_id, request) options = parse_options(request) for s in shares: dup_export_check(s, options['host_str'], request, export_id=int(export_id)) NFSExportGroup.objects.filter(id=export_id).update(**options) NFSExportGroup.objects.filter(id=export_id)[0].save() cur_exports = list(NFSExport.objects.all()) for e in NFSExport.objects.filter(export_group=eg): if (e.share not in shares): cur_exports.remove(e) e.delete() else: shares.remove(e.share) for s in shares: mnt_pt = ('%s%s' % (settings.MNT_PT, s.name)) export_pt = ('%s%s' % (settings.NFS_EXPORT_ROOT, s.name)) if (not is_share_mounted(s.name)): pool_device = Disk.objects.filter(pool=s.pool)[0].name mount_share(s.subvol_name, pool_device, mnt_pt) export = NFSExport(export_group=eg, share=s, mount=export_pt) export.full_clean() export.save() cur_exports.append(export) exports = create_nfs_export_input(cur_exports) adv_entries = [e.export_str for e in AdvancedNFSExport.objects.all()] exports_d = create_adv_nfs_export_input(adv_entries, request) exports.update(exports_d) refresh_wrapper(exports, request, logger) nfs_serializer = NFSExportGroupSerializer(eg) return Response(nfs_serializer.data) except RockStorAPIException: raise except Exception, e: handle_exception(e, request)
def post(self, request): with self._handle_exception(request): if ('entries' not in request.data): e_msg = ('Cannot export without specifying entries') handle_exception(Exception(e_msg), request) AdvancedNFSExport.objects.all().delete() cur_entries = [] for e in request.data.get('entries'): ce = AdvancedNFSExport(export_str=e) ce.save() cur_entries.append(ce) exports_d = create_adv_nfs_export_input(request.data['entries'], request) cur_exports = list(NFSExport.objects.all()) exports = create_nfs_export_input(cur_exports) exports.update(exports_d) refresh_wrapper(exports, request, logger) nfs_serializer = AdvancedNFSExportSerializer(cur_entries, many=True) return Response(nfs_serializer.data)
def delete(self, request, export_id): with self._handle_exception(request): eg = validate_export_group(export_id, request) cur_exports = list(NFSExport.objects.all()) for e in NFSExport.objects.filter(export_group=eg): export_pt = ('%s%s' % (settings.NFS_EXPORT_ROOT, e.share.name)) if (e.export_group.nohide): snap_name = e.mount.split(e.share.name + '_')[-1] export_pt = ('%s/%s' % (export_pt, snap_name)) teardown_wrapper(export_pt, request, logger) cur_exports.remove(e) e.delete() eg.delete() exports = create_nfs_export_input(cur_exports) adv_entries = [e.export_str for e in AdvancedNFSExport.objects.all()] exports_d = create_adv_nfs_export_input(adv_entries, request) exports.update(exports_d) refresh_wrapper(exports, request, logger) return Response()
def delete(self, request, export_id): try: eg = validate_export_group(export_id, request) cur_exports = list(NFSExport.objects.all()) for e in NFSExport.objects.filter(export_group=eg): export_pt = ('%s%s' % (settings.NFS_EXPORT_ROOT, e.share.name)) if (e.export_group.nohide): snap_name = e.mount.split(e.share.name + '_')[-1] export_pt = ('%s/%s' % (export_pt, snap_name)) teardown_wrapper(export_pt, request, logger) cur_exports.remove(e) e.delete() eg.delete() exports = create_nfs_export_input(cur_exports) refresh_wrapper(exports, request, logger) return Response() except RockStorAPIException: raise except Exception, e: handle_exception(e, request)
def post(self, request, sname): with self._handle_exception(request): share = validate_share(sname, request) options = parse_options(request) dup_export_check(share, options["host_str"], request) cur_exports = list(NFSExport.objects.all()) eg = NFSExportGroup(**options) eg.save() mnt_pt = "%s%s" % (settings.MNT_PT, share.name) export_pt = "%s%s" % (settings.NFS_EXPORT_ROOT, share.name) if not is_share_mounted(share.name): mount_share(share, mnt_pt) export = NFSExport(export_group=eg, share=share, mount=export_pt) export.full_clean() export.save() cur_exports.append(export) exports = create_nfs_export_input(cur_exports) refresh_wrapper(exports, request, logger) nfs_serializer = NFSExportGroupSerializer(eg) return Response(nfs_serializer.data)
def delete(self, request, sname, export_id): with self._handle_exception(request): share = validate_share(sname, request) eg = validate_export_group(export_id, request) cur_exports = list(NFSExport.objects.all()) export = NFSExport.objects.get(export_group=eg, share=share) for e in NFSExport.objects.filter(share=share): if e.export_group.host_str == eg.host_str: export_pt = "%s%s" % (settings.NFS_EXPORT_ROOT, share.name) if e.export_group.nohide: snap_name = e.mount.split(e.share.name + "_")[-1] export_pt = "%s%s/%s" % (settings.NFS_EXPORT_ROOT, e.share.name, snap_name) nfs4_mount_teardown(export_pt) cur_exports.remove(e) exports = create_nfs_export_input(cur_exports) export.delete() if NFSExport.objects.filter(export_group=eg).count() == 0: # delete only when this is the only share in the group eg.delete() refresh_wrapper(exports, request, logger) return Response()
def post(self, request): with self._handle_exception(request): if ('entries' not in request.data): e_msg = ('Cannot export without specifying entries') handle_exception(Exception(e_msg), request) AdvancedNFSExport.objects.all().delete() cur_entries = [] for e in request.data.get('entries'): logger.debug('adv export entry -- %s' % e) ce = AdvancedNFSExport(export_str=e) ce.save() cur_entries.append(ce) exports_d = create_adv_nfs_export_input(request.data['entries'], request) cur_exports = list(NFSExport.objects.all()) exports = create_nfs_export_input(cur_exports) exports.update(exports_d) refresh_wrapper(exports, request, logger) nfs_serializer = AdvancedNFSExportSerializer(cur_entries, many=True) return Response(nfs_serializer.data)
mount=snap_mnt_pt) export.full_clean() export.save() cur_exports.append(export) else: try: export = NFSExport.objects.get(share=share, mount=snap_mnt_pt) cur_exports.remove(export) export.export_group.delete() export.delete() except Exception, e: logger.exception(e) finally: umount_root(export_pt) umount_root(snap_mnt_pt) exports = create_nfs_export_input(cur_exports) adv_entries = [x.export_str for x in AdvancedNFSExport.objects.all()] exports_d = create_adv_nfs_export_input(adv_entries, self.request) exports.update(exports_d) refresh_nfs_exports(exports) @transaction.commit_on_success def _create(self, share, snap_name, pool_device, request, uvisible, snap_type): if (Snapshot.objects.filter(share=share, name=snap_name).exists()): e_msg = ('Snapshot with name: %s already exists for the ' 'share: %s' % (snap_name, share.name)) handle_exception(Exception(e_msg), request) try: real_name = ('%s_%s' % (share.name, snap_name))
try: mnt_map = sftp_mount_map(settings.SFTP_MNT_ROOT) for sftpo in SFTP.objects.all(): sftp_mount(sftpo.share, settings.MNT_PT, settings.SFTP_MNT_ROOT, mnt_map, sftpo.editable) sftp_snap_toggle(sftpo.share) except Exception, e: e_msg = ('Unable to export all sftp shares due to a system' ' error') logger.error(e_msg) logger.exception(e) handle_exception(Exception(e_msg), request) try: exports = create_nfs_export_input(NFSExport.objects.all()) logger.info('export = %s' % exports) refresh_nfs_exports(exports) except Exception, e: e_msg = ('Unable to export all nfs shares due to a system' 'error') logger.error(e_msg) logger.exception(e) handle_exception(Exception(e_msg), request) # bootstrap services try: systemctl('firewalld', 'stop') systemctl('firewalld', 'disable') systemctl('nginx', 'stop') systemctl('nginx', 'disable')
mount=snap_mnt_pt) export.full_clean() export.save() cur_exports.append(export) else: try: export = NFSExport.objects.get(share=share, mount=snap_mnt_pt) cur_exports.remove(export) export.export_group.delete() export.delete() except Exception, e: logger.exception(e) finally: umount_root(export_pt) umount_root(snap_mnt_pt) exports = create_nfs_export_input(cur_exports) adv_entries = [x.export_str for x in AdvancedNFSExport.objects.all()] exports_d = create_adv_nfs_export_input(adv_entries, self.request) exports.update(exports_d) refresh_nfs_exports(exports) @transaction.atomic def _create(self, share, snap_name, pool_device, request, uvisible, snap_type, writable): if (Snapshot.objects.filter(share=share, name=snap_name).exists()): e_msg = ('Snapshot(%s) already exists for the Share(%s).' % (snap_name, share.name)) handle_exception(Exception(e_msg), request) real_name = snap_name snap_size = 0
try: mnt_map = sftp_mount_map(settings.SFTP_MNT_ROOT) for sftpo in SFTP.objects.all(): sftp_mount(sftpo.share, settings.MNT_PT, settings.SFTP_MNT_ROOT, mnt_map, sftpo.editable) sftp_snap_toggle(sftpo.share) except Exception, e: e_msg = ('Unable to export all sftp shares due to a system' ' error') logger.error(e_msg) logger.exception(e) handle_exception(Exception(e_msg), request) try: exports = create_nfs_export_input(NFSExport.objects.all()) refresh_nfs_exports(exports) except Exception, e: e_msg = ('Unable to export all nfs shares due to a system' 'error') logger.error(e_msg) logger.exception(e) handle_exception(Exception(e_msg), request) # bootstrap services try: systemctl('firewalld', 'stop') systemctl('firewalld', 'disable') systemctl('nginx', 'stop') systemctl('nginx', 'disable') systemctl('atd', 'enable')