示例#1
0
 def setUp(self):
     super(self.__class__, self).setUp()
     CONF.set_default("default_share_type", None)
     self.flags(rpc_backend='manila.openstack.common.rpc.impl_fake')
     self.share_api = share_api.API()
     self.admin_context = context.RequestContext('admin', 'fake', True)
     self.member_context = context.RequestContext('fake', 'fake')
示例#2
0
 def setUp(self):
     super(ShareAdminActionsAPITest, self).setUp()
     CONF.set_default("default_share_type", None)
     self.flags(transport_url='rabbit://*****:*****@mqhost:5672')
     self.share_api = share_api.API()
     self.admin_context = context.RequestContext('admin', 'fake', True)
     self.member_context = context.RequestContext('fake', 'fake')
示例#3
0
    def deny_rules_and_wait(self, context, share, saved_rules):

        api = share_api.API()

        # Deny each one.
        for instance in share.instances:
            for access in saved_rules:
                api.deny_access_to_instance(context, instance, access)

        # Wait for all rules to be cleared.
        starttime = time.time()
        deadline = starttime + self.migration_wait_access_rules_timeout
        tries = 0
        rules = self.db.share_access_get_all_for_share(context, share['id'])
        while len(rules) > 0:
            tries += 1
            now = time.time()
            if now > deadline:
                msg = _("Timeout removing access rules from share "
                        "%(share_id)s. Timeout was %(timeout)s seconds.") % {
                            'share_id': share['id'],
                            'timeout': self.migration_wait_access_rules_timeout
                        }
                raise exception.ShareMigrationFailed(reason=msg)
            else:
                time.sleep(tries**2)
            rules = self.db.share_access_get_all_for_share(
                context, share['id'])
示例#4
0
 def setUp(self):
     super(AdminActionsTest, self).setUp()
     self.tempdir = tempfile.mkdtemp()
     self.flags(rpc_backend='manila.openstack.common.rpc.impl_fake')
     self.flags(lock_path=self.tempdir)
     self.share_api = share_api.API()
     self.admin_context = context.RequestContext('admin', 'fake', True)
     self.member_context = context.RequestContext('fake', 'fake')
示例#5
0
    def __init__(self, context, db, create_delete_timeout, access_rule_timeout,
                 share):

        self.db = db
        self.share = share
        self.context = context
        self.api = share_api.API()
        self.migration_create_delete_share_timeout = create_delete_timeout
        self.migration_wait_access_rules_timeout = access_rule_timeout
示例#6
0
    def translate_transitional_statuses(self, context, access_dict, access):
        """In 2.28, the per access rule status was (re)introduced."""
        api = share_api.API()
        share = api.get(context, access['share_id'])

        if (share['access_rules_status'] ==
                constants.SHARE_INSTANCE_RULES_SYNCING):
            access_dict['state'] = constants.STATUS_NEW
        else:
            access_dict['state'] = share['access_rules_status']
示例#7
0
    def __init__(self, context, db, access_helper):

        self.db = db
        self.context = context
        self.access_helper = access_helper
        self.api = share_api.API()
        self.access_helper = access_helper

        self.migration_create_delete_share_timeout = (
            CONF.migration_create_delete_share_timeout)
        self.migration_wait_access_rules_timeout = (
            CONF.migration_wait_access_rules_timeout)
示例#8
0
 def __init__(self, *args, **kwargs):
     super(MapRFSNativeShareDriver, self).__init__(False, *args, **kwargs)
     self.configuration.append_config_values(maprfs_native_share_opts)
     self.backend_name = self.configuration.safe_get(
         'share_backend_name') or 'MapR-FS-Native'
     self._base_volume_dir = self.configuration.safe_get(
         'maprfs_base_volume_dir') or '/'
     self._maprfs_util = None
     self._maprfs_base_path = "maprfs://"
     self.cldb_ip = self.configuration.maprfs_cldb_ip or []
     self.zookeeper_ip = self.configuration.maprfs_zookeeper_ip or []
     self.rename_volume = self.configuration.maprfs_rename_managed_volume
     self.api = api.API()
示例#9
0
 def setUp(self):
     super(ShareMetaDataTest, self).setUp()
     self.share_api = api.API()
     self.share_controller = shares.ShareController()
     self.controller = share_metadata.ShareMetadataController()
     self.ctxt = context.RequestContext('admin', 'fake', True)
     self.origin_metadata = {
         "key1": "value1",
         "key2": "value2",
         "key3": "value3",
     }
     self.share = db.share_create(self.ctxt, {})
     self.share_id = self.share['id']
     self.url = '/shares/%s/metadata' % self.share_id
     db.share_metadata_update(
         self.ctxt, self.share_id, self.origin_metadata, delete=False)
示例#10
0
文件: zadara.py 项目: onstring/manila
 def __init__(self, *args, **kwargs):
     """Do initialization."""
     super(ZadaraVPSAShareDriver, self).__init__(False, *args, **kwargs)
     self.vpsa = None
     self.configuration.append_config_values(common.zadara_opts)
     self.configuration.append_config_values(manila_opts)
     self.api = api.API()
     # The valid list of share options that can be specified
     # as the metadata while creating manila share
     self.share_options = [
         'smbguest', 'smbonly', 'smbwindowsacl', 'smbfilecreatemask',
         'smbbrowseable', 'smbhiddenfiles', 'smbhideunreadable',
         'smbhideunwriteable', 'smbhidedotfiles', 'smbstoredosattributes',
         'smbdircreatemask', 'smbmaparchive', 'smbencryptionmode',
         'smbenableoplocks', 'smbaiosize', 'nfsrootsquash', 'nfsallsquash',
         'nfsanongid', 'nfsanonuid', 'atimeupdate', 'readaheadkb', 'crypt',
         'compress', 'dedupe', 'attachpolicies'
     ]
示例#11
0
    def __init__(self, *args, **kwargs):
        super(EosDriver, self).__init__(False,
                                        *args,
                                        config_opts=[eos_opts],
                                        **kwargs)
        self.api = api.API()

        self.backend_name = self.configuration.safe_get(
            'share_backend_name') or 'EOS'
        self.configuration.append_config_values(eos_opts)

        channel = grpc.insecure_channel('ajp.cern.ch:50051')
        #channel = grpc.insecure_channel('localhost:50051')
        self.grpc_client = eos_pb2_grpc.EosStub(channel)

        self.conn = openstack.connect(
            auth_url='http://188.185.71.204/identity/v3',
            username='******',
            password='******',
            project_name='admin',
            project_domain_id='default',
            user_domain_id='default')
示例#12
0
    def create_instance_and_wait(self, context, share, share_instance, host):

        api = share_api.API()

        new_share_instance = api.create_instance(
            context, share, share_instance['share_network_id'], host['host'])

        # Wait for new_share_instance to become ready
        starttime = time.time()
        deadline = starttime + self.migration_create_delete_share_timeout
        new_share_instance = self.db.share_instance_get(
            context, new_share_instance['id'], with_share_data=True)
        tries = 0
        while new_share_instance['status'] != constants.STATUS_AVAILABLE:
            tries += 1
            now = time.time()
            if new_share_instance['status'] == constants.STATUS_ERROR:
                msg = _("Failed to create new share instance"
                        " (from %(share_id)s) on "
                        "destination host %(host_name)s") % {
                            'share_id': share['id'],
                            'host_name': host['host']
                        }
                raise exception.ShareMigrationFailed(reason=msg)
            elif now > deadline:
                msg = _("Timeout creating new share instance "
                        "(from %(share_id)s) on "
                        "destination host %(host_name)s") % {
                            'share_id': share['id'],
                            'host_name': host['host']
                        }
                raise exception.ShareMigrationFailed(reason=msg)
            else:
                time.sleep(tries**2)
            new_share_instance = self.db.share_instance_get(
                context, new_share_instance['id'], with_share_data=True)

        return new_share_instance
示例#13
0
 def __init__(self):
     self.share_api = api.API()
示例#14
0
    def deny_rules_and_wait(self, context, share, saved_rules):

        api = share_api.API()
        api.deny_access_to_instance(context, share.instance, saved_rules)

        self.wait_for_access_update(share.instance)
示例#15
0
class ZaqarNotification(hook.HookBase):
    share_api = api.API()

    def _access_changed_trigger(self, context, func_name, access_rules_ids,
                                share_instance_id):

        access = [
            self.db.share_access_get(context, rule_id)
            for rule_id in access_rules_ids
        ]

        share_instance = self.db.share_instance_get(context, share_instance_id)

        share = self.share_api.get(context, share_id=share_instance.share_id)

        def rules_view(rules):
            result = []

            for rule in rules:
                access_instance = None

                for ins in rule.instance_mappings:
                    if ins.share_instance_id == share_instance_id:
                        access_instance = ins
                        break
                    else:
                        raise exception.InstanceNotFound(
                            instance_id=share_instance_id)

                result.append({
                    'access_id': rule.id,
                    'access_instance_id': access_instance.id,
                    'access_type': rule.access_type,
                    'access_to': rule.access_to,
                    'access_level': rule.access_level,
                })
            return result

        is_allow_operation = 'allow' in func_name
        results = {
            'share_id': share.share_id,
            'share_instance_id': share_instance_id,
            'export_locations':
            [el.path for el in share_instance.export_locations],
            'share_proto': share.share_proto,
            'access_rules': rules_view(access),
            'is_allow_operation': is_allow_operation,
            'availability_zone': share_instance.availability_zone,
        }
        LOG.debug(results)
        return results

    def _execute_pre_hook(self, context, func_name, *args, **kwargs):
        LOG.debug("\n PRE zaqar notification has been called for "
                  "method '%s'.\n" % func_name)
        if func_name == "deny_access":
            LOG.debug("\nSending notification about denied access.\n")
            data = self._access_changed_trigger(
                context,
                func_name,
                kwargs.get('access_rules'),
                kwargs.get('share_instance_id'),
            )
            self._send_notification(data)

    def _execute_post_hook(self, context, func_name, pre_hook_data,
                           driver_action_results, *args, **kwargs):
        LOG.debug("\n POST zaqar notification has been called for "
                  "method '%s'.\n" % func_name)
        if func_name == "allow_access":
            LOG.debug("\nSending notification about allowed access.\n")
            data = self._access_changed_trigger(
                context,
                func_name,
                kwargs.get('access_rules'),
                kwargs.get('share_instance_id'),
            )
            self._send_notification(data)

    def _send_notification(self, data):
        for queue_name in CONF.zaqar.zaqar_queues:
            ZAQARCLIENT.queue_name = queue_name
            message = {
                "body": {
                    "example_message":
                    ("message generated at '%s'" % timeutils.utcnow()),
                    "data":
                    data,
                }
            }
            LOG.debug(
                "\n Sending message %(m)s to '%(q)s' queue using '%(u)s' user "
                "and '%(p)s' project." % {
                    'm': message,
                    'q': queue_name,
                    'u': CONF.zaqar.zaqar_username,
                    'p': CONF.zaqar.zaqar_project_name,
                })
            queue = ZAQARCLIENT.queue(queue_name)
            queue.post(message)

    def _execute_periodic_hook(self, context, periodic_hook_data, *args,
                               **kwargs):
        LOG.debug("Periodic zaqar notification has been called. (Placeholder)")