Ejemplo n.º 1
0
 def revert_to_snapshot(
     self,
     context,
     snapshot,
     share_access_rules,
     snapshot_access_rules,
     share_server=None,
 ):
     dataset_name = self._make_source_name(snapshot)
     filt = "source_display_name='{0}' and suffix='{1}'".format(
         dataset_name, snapshot["id"])
     LOG.debug("FlashBlade filter %(name)s", {"name": filt})
     name = "{0}.{1}".format(dataset_name, snapshot["id"])
     self._get_flashblade_snapshot_by_name(filt)
     fs_attr = purity_fb.FileSystem(name=dataset_name,
                                    source=purity_fb.Reference(name=name))
     try:
         self._sys.file_systems.create_file_systems(
             overwrite=True,
             discard_non_snapshotted_data=True,
             file_system=fs_attr,
         )
     except purity_fb.rest.ApiException as ex:
         msg = _("Failed to revert snapshot: %s\n") % ex
         LOG.exception(msg)
         raise exception.ManilaException(message=msg)
Ejemplo n.º 2
0
 def _update_nfs_access(self, share, access_rules):
     dataset_name = self._make_share_name(share)
     self._get_flashblade_filesystem_by_name(dataset_name)
     nfs_rules = ""
     rule_state = {}
     for access in access_rules:
         if access["access_type"] == "ip":
             line = (access["access_to"] + "(" + access["access_level"] +
                     ",no_root_squash) ")
             rule_state[access["access_id"]] = {"state": "active"}
             nfs_rules += line
         else:
             message = _(
                 'Only "ip" access type is allowed for NFS protocol.')
             LOG.error(message)
             rule_state[access["access_id"]] = {"state": "error"}
     try:
         self._sys.file_systems.update_file_systems(
             name=dataset_name,
             attributes=purity_fb.FileSystem(nfs=purity_fb.NfsRule(
                 rules=nfs_rules)),
         )
         message = "Set nfs rules %(nfs_rules)s for %(share_name)s"
         LOG.debug(message, {
             "nfs_rules": nfs_rules,
             "share_name": dataset_name
         })
     except purity_fb.rest.ApiException as ex:
         msg = _("Failed to set NFS access rules: %s\n") % ex
         LOG.exception(msg)
         raise exception.ManilaException(message=msg)
     return rule_state
Ejemplo n.º 3
0
    def create_share(self, context, share, share_server=None):
        """Create a share and export it based on protocol used."""
        size = share["size"] * units.Gi
        share_name = self._make_share_name(share)

        if share["share_proto"] == "NFS":
            flashblade_fs = purity_fb.FileSystem(
                name=share_name,
                provisioned=size,
                hard_limit_enabled=True,
                fast_remove_directory_enabled=True,
                snapshot_directory_enabled=True,
                nfs=purity_fb.NfsRule(v3_enabled=True,
                                      rules="",
                                      v4_1_enabled=True),
            )
            self._sys.file_systems.create_file_systems(flashblade_fs)
            location = self._get_full_nfs_export_path(share_name)
        else:
            message = _("Unsupported share protocol: %(proto)s.") % {
                "proto": share["share_proto"]
            }
            LOG.exception(message)
            raise exception.InvalidShare(reason=message)
        LOG.info("FlashBlade created share %(name)s", {"name": share_name})

        return location
Ejemplo n.º 4
0
 def _resize_share(self, share, new_size):
     dataset_name = self._make_share_name(share)
     self._get_flashblade_filesystem_by_name(dataset_name)
     consumed_size = (self._sys.file_systems.list_file_systems(
         names=[dataset_name]).items[0].space.virtual)
     attr = {}
     if consumed_size >= new_size * units.Gi:
         raise exception.ShareShrinkingPossibleDataLoss(
             share_id=share["id"])
     attr["provisioned"] = new_size * units.Gi
     n_attr = purity_fb.FileSystem(**attr)
     LOG.debug("Resizing filesystem...")
     self._sys.file_systems.update_file_systems(name=dataset_name,
                                                attributes=n_attr)
Ejemplo n.º 5
0
 def delete_share(self, context, share, share_server=None):
     """Called to delete a share"""
     dataset_name = self._make_share_name(share)
     try:
         self._get_flashblade_filesystem_by_name(dataset_name)
     except purity_fb.rest.ApiException:
         message = ("share %(dataset_name)s not found on FlashBlade, skip "
                    "delete")
         LOG.warning(message, {"dataset_name": dataset_name})
         return
     self._sys.file_systems.update_file_systems(
         name=dataset_name,
         attributes=purity_fb.FileSystem(
             nfs=purity_fb.NfsRule(v3_enabled=False, v4_1_enabled=False),
             smb=purity_fb.ProtocolRule(enabled=False),
             destroyed=True,
         ),
     )
     if self.configuration.flashblade_eradicate:
         self._sys.file_systems.delete_file_systems(name=dataset_name)
         LOG.info("FlashBlade eradicated share %(name)s",
                  {"name": dataset_name})