def refresh_wrapper(exports, request, logger): try: refresh_nfs_exports(exports) except Exception as e: e_msg = ('A lower level error occured while refreshing ' 'NFS exports: %s' % e.__str__()) handle_exception(Exception(e_msg), 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, sname, export_id): try: share = Share.objects.get(name=sname) if (not NFSExport.objects.filter(id=export_id).exists()): e_msg = ('NFS export with id: %d does not exist' % export_id) handle_exception(Exception(e_msg), request) export = NFSExport.objects.get(id=export_id) if (len(NFSExport.objects.filter(share=share)) == 1): export_mnt_pt = ('/export/%s' % sname) umount_root(export_mnt_pt) if (is_share_mounted(sname, mnt_prefix='/export/')): e_msg = ('Cannot delete nfs export with id: %d due to ' 'busy mount. Try again later.' % export_id) handle_exception(Exception(e_msg), request) export.enabled = False exports = self._create_nfs_export_input(export) export.delete() refresh_nfs_exports(exports) return Response() except RockStorAPIException: raise except Exception, e: handle_exception(e, request)
def refresh_wrapper(exports, request, logger): try: refresh_nfs_exports(exports) except Exception as e: e_msg = ( "A lower level error occurred while refreshing NFS exports: ({})." ).format(e.__str__()) handle_exception(Exception(e_msg), request)
def refresh_wrapper(exports, request, logger): try: refresh_nfs_exports(exports) except Exception, e: e_msg = ('Unable to delete the export because it is in use.' ' Try again Later') logger.exception(e) handle_exception(Exception(e_msg), request)
def refresh_wrapper(exports, request, logger): try: refresh_nfs_exports(exports) except Exception, e: e_msg = ('A lower level error occured while refreshing NFS exports. ' 'Error: %s. This could be due to invalid input. ' 'If so, correct your input and try again.' % e) logger.exception(e) handle_exception(Exception(e_msg), request)
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 delete(self, request, sname, export_id): try: share = Share.objects.get(name=sname) if (not NFSExport.objects.filter(id=export_id).exists()): e_msg = ('NFS export with id: %d does not exist' % export_id) handle_exception(Exception(e_msg), request) export = NFSExport.objects.get(id=export_id) if (is_share_mounted(share.name) and not SambaShare.objects.filter(share=share).exists() and not len(NFSExport.objects.filter(share=share)) > 1): umount_root(export.mount) export.enabled = False exports = self._create_nfs_export_input(export) export.delete() refresh_nfs_exports(exports) return Response() except RockStorAPIException: raise except Exception, e: handle_exception(e, request)
def _toggle_visibility(self, share, snap_name, snap_qgroup, on=True): cur_exports = list(NFSExport.objects.all()) # The following may be buggy when used with system mounted (fstab) /home # but we currently don't allow /home to be exported. snap_mnt_pt = "{}{}/.{}".format(settings.MNT_PT, share.name, snap_name) export_pt = snap_mnt_pt.replace(settings.MNT_PT, settings.NFS_EXPORT_ROOT) if on: mount_snap(share, snap_name, snap_qgroup) if NFSExport.objects.filter(share=share).exists(): se = NFSExport.objects.filter(share=share)[0] export_group = NFSExportGroup( host_str=se.export_group.host_str, nohide=True ) export_group.save() export = NFSExport( share=share, export_group=export_group, mount=export_pt ) export.full_clean() export.save() cur_exports.append(export) else: for mnt in (snap_mnt_pt, export_pt): try: export = NFSExport.objects.get(share=share, mount=mnt) cur_exports.remove(export) export.export_group.delete() export.delete() except NFSExport.DoesNotExist: pass except Exception as e: logger.exception(e) finally: umount_root(export_pt) umount_root(snap_mnt_pt) exports = self.create_nfs_export_input(cur_exports) adv_entries = [x.export_str for x in AdvancedNFSExport.objects.all()] exports_d = self.create_adv_nfs_export_input(adv_entries, self.request) exports.update(exports_d) refresh_nfs_exports(exports)
def post(self, request, sname): try: share = Share.objects.get(name=sname) options = { 'host_str': '*', 'mod_choice': 'ro', 'sync_choice': 'async', 'security': 'insecure', 'id': -1, } if ('host_str' in request.DATA): options['host_str'] = request.DATA['host_str'] if ('mod_choice' in request.DATA): options['mod_choice'] = request.DATA['mod_choice'] if ('sync_choice' in request.DATA): options['sync_choice'] = request.DATA['sync_choice'] mnt_pt = ('%s%s' % (settings.MNT_PT, 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(share=share, mount=mnt_pt, host_str=options['host_str'], editable=options['mod_choice'], syncable=options['sync_choice'], mount_security=options['security']) export.full_clean() export.save() exports = self._create_nfs_export_input(export) refresh_nfs_exports(exports) nfs_serializer = NFSExportSerializer(export) return Response(nfs_serializer.data) except RockStorAPIException: raise except Exception, e: handle_exception(e, request)
def _toggle_visibility(self, share, snap_name, on=True): cur_exports = list(NFSExport.objects.all()) snap_mnt_pt = ('%s%s/.%s' % (settings.MNT_PT, share.name, snap_name)) export_pt = snap_mnt_pt.replace(settings.MNT_PT, settings.NFS_EXPORT_ROOT) if (on): mount_snap(share, snap_name) if (NFSExport.objects.filter(share=share).exists()): se = NFSExport.objects.filter(share=share)[0] export_group = NFSExportGroup( host_str=se.export_group.host_str, nohide=True) export_group.save() export = NFSExport(share=share, export_group=export_group, mount=export_pt) export.full_clean() export.save() cur_exports.append(export) else: for mnt in (snap_mnt_pt, export_pt): try: export = NFSExport.objects.get(share=share, mount=mnt) cur_exports.remove(export) export.export_group.delete() export.delete() except NFSExport.DoesNotExist: pass except Exception as e: logger.exception(e) finally: umount_root(export_pt) umount_root(snap_mnt_pt) exports = self.create_nfs_export_input(cur_exports) adv_entries = [x.export_str for x in AdvancedNFSExport.objects.all()] exports_d = self.create_adv_nfs_export_input(adv_entries, self.request) exports.update(exports_d) refresh_nfs_exports(exports)
def _toggle_visibility(self, share, snap_name, snap_qgroup, on=True): cur_exports = list(NFSExport.objects.all()) snap_mnt_pt = ('%s%s/.%s' % (settings.MNT_PT, share.name, snap_name)) export_pt = snap_mnt_pt.replace(settings.MNT_PT, settings.NFS_EXPORT_ROOT) if (on): mount_snap(share, snap_name, snap_qgroup) if (NFSExport.objects.filter(share=share).exists()): se = NFSExport.objects.filter(share=share)[0] export_group = NFSExportGroup( host_str=se.export_group.host_str, nohide=True) export_group.save() export = NFSExport(share=share, export_group=export_group, mount=export_pt) export.full_clean() export.save() cur_exports.append(export) else: for mnt in (snap_mnt_pt, export_pt): try: export = NFSExport.objects.get(share=share, mount=mnt) cur_exports.remove(export) export.export_group.delete() export.delete() except NFSExport.DoesNotExist: pass except Exception as e: logger.exception(e) finally: umount_root(export_pt) umount_root(snap_mnt_pt) exports = self.create_nfs_export_input(cur_exports) adv_entries = [x.export_str for x in AdvancedNFSExport.objects.all()] exports_d = self.create_adv_nfs_export_input(adv_entries, self.request) exports.update(exports_d) refresh_nfs_exports(exports)
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)
export = NFSExport.objects.get(share=share, mount=mnt) cur_exports.remove(export) export.export_group.delete() export.delete() except NFSExport.DoesNotExist: pass except Exception, e: logger.exception(e) finally: umount_root(export_pt) umount_root(snap_mnt_pt) exports = self.create_nfs_export_input(cur_exports) adv_entries = [x.export_str for x in AdvancedNFSExport.objects.all()] exports_d = self.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, 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) snap_size = 0 qgroup_id = '0/na' if (snap_type == 'replication'): writable = False add_snap(share.pool, share.subvol_name, snap_name, writable) snap_id = share_id(share.pool, snap_name)
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') systemctl('atd', 'enable') systemctl('atd', 'start')