Exemplo n.º 1
0
    def snapshot_update_access(self, context, snapshot, access_rules,
                               add_rules, delete_rules, share_server=None):
        """Update access rules for given snapshot.

        This driver has two different behaviors according to parameters:
        1. Recovery after error - 'access_rules' contains all access_rules,
        'add_rules' and 'delete_rules' shall be empty. Previously existing
        access rules are cleared and then added back according
        to 'access_rules'.

        2. Adding/Deleting of several access rules - 'access_rules' contains
        all access_rules, 'add_rules' and 'delete_rules' contain rules which
        should be added/deleted. Rules in 'access_rules' are ignored and
        only rules from 'add_rules' and 'delete_rules' are applied.

        :param context: Current context
        :param snapshot: Snapshot model with snapshot data.
        :param access_rules: All access rules for given snapshot
        :param add_rules: Empty List or List of access rules which should be
               added. access_rules already contains these rules.
        :param delete_rules: Empty List or List of access rules which should be
               removed. access_rules doesn't contain these rules.
        :param share_server: None or Share server model
        """
        helper = self._get_helper(snapshot['share'])
        access_rules, add_rules, delete_rules = utils.change_rules_to_readonly(
            access_rules, add_rules, delete_rules)

        helper.update_access(self.share_server,
                             snapshot['name'], access_rules,
                             add_rules=add_rules, delete_rules=delete_rules)
Exemplo n.º 2
0
 def snapshot_update_access(self, context, snapshot, access_rules,
                            add_rules, delete_rules, share_server=None):
     # snapshots are to be mounted in read-only mode, see:
     # "Add mountable snapshots" on openstack specs.
     access_rules, _, _ = utils.change_rules_to_readonly(
         access_rules, [], [])
     try:
         self._update_access(snapshot, access_rules, is_snapshot=True)
     except exception.InvalidShareAccess as e:
         raise exception.InvalidSnapshotAccess(e)
Exemplo n.º 3
0
    def revert_to_snapshot(self,
                           context,
                           snapshot,
                           share_access_rules,
                           snapshot_access_rules,
                           share_server=None):
        share = snapshot['share']
        # Temporarily remove all access rules
        self._get_helper(share).update_access(self.share_server,
                                              snapshot['name'], [], [], [])
        self._get_helper(share).update_access(self.share_server, share['name'],
                                              [], [], [])
        # Unmount the snapshot filesystem
        self._unmount_device(snapshot)
        # Unmount the share filesystem
        self._unmount_device(share)
        # Merge the snapshot LV back into the share, reverting it
        snap_lv_name = "%s/%s" % (self.configuration.lvm_share_volume_group,
                                  snapshot['name'])
        self._execute('lvconvert', '--merge', snap_lv_name, run_as_root=True)

        # Now recreate the snapshot that was destroyed by the merge
        self._create_snapshot(context, snapshot)
        # At this point we can mount the share again
        device_name = self._get_local_path(share)
        self._mount_device(share, device_name)
        # Also remount the snapshot
        device_name = self._get_local_path(snapshot)
        self._mount_device(snapshot, device_name)
        # Lastly we add all the access rules back
        self._get_helper(share).update_access(self.share_server, share['name'],
                                              share_access_rules, [], [])
        snapshot_access_rules, __, __ = utils.change_rules_to_readonly(
            snapshot_access_rules, [], [])
        self._get_helper(share).update_access(self.share_server,
                                              snapshot['name'],
                                              snapshot_access_rules, [], [])
Exemplo n.º 4
0
    def revert_to_snapshot(self, context, snapshot, share_access_rules,
                           snapshot_access_rules, share_server=None):
        share = snapshot['share']
        # Temporarily remove all access rules
        self._get_helper(share).update_access(self.share_server,
                                              snapshot['name'], [], [], [])
        self._get_helper(share).update_access(self.share_server,
                                              share['name'], [], [], [])
        # Unmount the snapshot filesystem
        self._unmount_device(snapshot)
        # Unmount the share filesystem
        self._unmount_device(share)
        # Merge the snapshot LV back into the share, reverting it
        snap_lv_name = "%s/%s" % (self.configuration.lvm_share_volume_group,
                                  snapshot['name'])
        self._execute('lvconvert', '--merge', snap_lv_name, run_as_root=True)

        # Now recreate the snapshot that was destroyed by the merge
        self._create_snapshot(context, snapshot)
        # At this point we can mount the share again
        device_name = self._get_local_path(share)
        self._mount_device(share, device_name)
        # Also remount the snapshot
        device_name = self._get_local_path(snapshot)
        self._mount_device(snapshot, device_name)
        # Lastly we add all the access rules back
        self._get_helper(share).update_access(self.share_server,
                                              share['name'],
                                              share_access_rules,
                                              [], [])
        snapshot_access_rules, __, __ = utils.change_rules_to_readonly(
            snapshot_access_rules, [], [])
        self._get_helper(share).update_access(self.share_server,
                                              snapshot['name'],
                                              snapshot_access_rules,
                                              [], [])