def _setup_for_existing_users(self):
        if (self.config["use_share_networks"]
                and not self.config["share_networks"]):
            msg = _("Usage of share networks was enabled but for deployment "
                    "with existing users share networks also should be "
                    "specified via arg 'share_networks'")
            raise exceptions.ContextSetupFailure(ctx_name=self.get_name(),
                                                 msg=msg)

        # Set flag that says we will not delete/cleanup share networks
        self.context[CONTEXT_NAME]["delete_share_networks"] = False

        for tenant_name_or_id, share_networks in self.config[
                "share_networks"].items():
            # Verify project existence
            for tenant in self.context["tenants"].values():
                if tenant_name_or_id in (tenant["id"], tenant["name"]):
                    tenant_id = tenant["id"]
                    existing_user = None
                    for user in self.context["users"]:
                        if user["tenant_id"] == tenant_id:
                            existing_user = user
                            break
                    break
            else:
                msg = _("Provided tenant Name or ID '%s' was not found in "
                        "existing tenants.") % tenant_name_or_id
                raise exceptions.ContextSetupFailure(ctx_name=self.get_name(),
                                                     msg=msg)
            self.context["tenants"][tenant_id][CONTEXT_NAME] = {}
            self.context["tenants"][tenant_id][CONTEXT_NAME][
                "share_networks"] = []

            manila_scenario = manila_utils.ManilaScenario(
                {"user": existing_user})
            existing_sns = manila_scenario._list_share_networks(
                detailed=False, search_opts={"project_id": tenant_id})

            for sn_name_or_id in share_networks:
                # Verify share network existence
                for sn in existing_sns:
                    if sn_name_or_id in (sn.id, sn.name):
                        break
                else:
                    msg = _("Specified share network '%(sn)s' does not "
                            "exist for tenant '%(tenant_id)s'") % {
                                "sn": sn_name_or_id,
                                "tenant_id": tenant_id
                            }
                    raise exceptions.ContextSetupFailure(
                        ctx_name=self.get_name(), msg=msg)

                # Set share network for project
                self.context["tenants"][tenant_id][CONTEXT_NAME][
                    "share_networks"].append(sn)

            # Add shared integer var per project that will be used as index
            # for list with share networks. It is required for balancing.
            self.context["tenants"][tenant_id][CONTEXT_NAME]["sn_iterator"] = (
                utils.RAMInt())
示例#2
0
    def _cleanup_tenant_resources(self, resources_plural_name,
                                  resources_singular_name):
        """Cleans up tenant resources.

        :param resources_plural_name: plural name for resources
        :param resources_singular_name: singular name for resource. Expected
            to be part of resource deletion method name (obj._delete_%s)
        """
        for user, tenant_id in (utils.iterate_per_tenants(
                self.context.get("users", []))):
            manila_scenario = manila_utils.ManilaScenario({
                "user": user,
                "config": {
                    "api_versions": self.context["config"].get(
                        "api_versions", [])}
            })
            resources = self.context["tenants"][tenant_id][CONTEXT_NAME].get(
                resources_plural_name, [])
            for resource in resources:
                logger = logging.ExceptionLogger(
                    LOG,
                    _("Failed to delete %(name)s %(id)s for tenant %(t)s.") % {
                        "id": resource, "t": tenant_id,
                        "name": resources_singular_name})
                with logger:
                    delete_func = getattr(
                        manila_scenario,
                        "_delete_%s" % resources_singular_name)
                    delete_func(resource)
示例#3
0
    def _setup_for_existing_users(self):
        if (self.config["use_share_networks"]
                and not self.config["share_networks"]):
            msg = _("Usage of share networks was enabled but for deployment "
                    "with existing users share networks also should be "
                    "specified via arg 'share_networks'")
            raise exceptions.ContextSetupFailure(ctx_name=self.get_name(),
                                                 msg=msg)

        for tenant_name_or_id, share_networks in self.config[
                "share_networks"].items():
            # Verify project existence
            for tenant in self.context["tenants"].values():
                if tenant_name_or_id in (tenant["id"], tenant["name"]):
                    tenant_id = tenant["id"]
                    existing_user = None
                    for user in self.context["users"]:
                        if user["tenant_id"] == tenant_id:
                            existing_user = user
                            break
                    break
            else:
                msg = _("Provided tenant Name or ID '%s' was not found in "
                        "existing tenants.") % tenant_name_or_id
                raise exceptions.ContextSetupFailure(ctx_name=self.get_name(),
                                                     msg=msg)
            self.context["tenants"][tenant_id][CONTEXT_NAME] = {}
            self.context["tenants"][tenant_id][CONTEXT_NAME][
                "share_networks"] = []

            manila_scenario = manila_utils.ManilaScenario({
                "user": existing_user,
                "config": {
                    "api_versions":
                    self.context["config"].get("api_versions", [])
                }
            })
            existing_sns = manila_scenario._list_share_networks(
                detailed=False, search_opts={"project_id": tenant_id})

            for sn_name_or_id in share_networks:
                # Verify share network existence
                for sn in existing_sns:
                    if sn_name_or_id in (sn.id, sn.name):
                        break
                else:
                    msg = _("Specified share network '%(sn)s' does not "
                            "exist for tenant '%(tenant_id)s'") % {
                                "sn": sn_name_or_id,
                                "tenant_id": tenant_id
                            }
                    raise exceptions.ContextSetupFailure(
                        ctx_name=self.get_name(), msg=msg)

                # Set share network for project
                self.context["tenants"][tenant_id][CONTEXT_NAME][
                    "share_networks"].append(sn.to_dict())
示例#4
0
    def _setup_for_autocreated_users(self):
        # Create share network for each network of tenant
        for user, tenant_id in (utils.iterate_per_tenants(
                self.context.get("users", []))):
            networks = self.context["tenants"][tenant_id].get("networks")
            manila_scenario = manila_utils.ManilaScenario({
                "task":
                self.task,
                "owner_id":
                self.get_owner_id(),
                "user":
                user,
                "config": {
                    "api_versions":
                    self.context["config"].get("api_versions", [])
                }
            })
            manila_scenario.RESOURCE_NAME_FORMAT = self.RESOURCE_NAME_FORMAT
            self.context["tenants"][tenant_id][CONTEXT_NAME] = {
                "share_networks": []
            }
            data = {}

            def _setup_share_network(tenant_id, data):
                share_network = manila_scenario._create_share_network(
                    **data).to_dict()
                self.context["tenants"][tenant_id][CONTEXT_NAME][
                    "share_networks"].append(share_network)
                for ss in self.context["tenants"][tenant_id].get(
                        consts.SECURITY_SERVICES_CONTEXT_NAME,
                    {}).get("security_services", []):
                    manila_scenario._add_security_service_to_share_network(
                        share_network["id"], ss["id"])

            if networks:
                for network in networks:
                    if network.get("cidr"):
                        data["nova_net_id"] = network["id"]
                    elif network.get("subnets"):
                        data["neutron_net_id"] = network["id"]
                        data["neutron_subnet_id"] = network["subnets"][0]
                    else:
                        LOG.warning(
                            _("Can not determine network service provider. "
                              "Share network will have no data."))
                    _setup_share_network(tenant_id, data)
            else:
                _setup_share_network(tenant_id, data)
示例#5
0
 def setup(self):
     for user, tenant_id in (
             utils.iterate_per_tenants(self.context.get("users", []))):
         manila_scenario = manila_utils.ManilaScenario({
             "task": self.task,
             "user": user,
             "config": {
                 "api_versions": self.context["config"].get(
                     "api_versions", [])}
         })
         self._create_shares(
             manila_scenario,
             tenant_id,
             self.config["share_proto"],
             self.config["size"],
             self.config["share_type"],
         )
示例#6
0
 def _wait_for_cleanup_of_share_networks(self):
     """Waits for deletion of Manila service resources."""
     for user, tenant_id in (utils.iterate_per_tenants(
             self.context.get("users", []))):
         self._wait_for_resources_deletion(
             self.context["tenants"][tenant_id][CONTEXT_NAME].get("shares"))
         manila_scenario = manila_utils.ManilaScenario({
             "user": user,
             "admin": self.context["admin"],
             "config": {
                 "api_versions": self.context["config"].get(
                     "api_versions", [])}
         })
         for sn in self.context["tenants"][tenant_id][CONTEXT_NAME][
                 "share_networks"]:
             share_servers = manila_scenario._list_share_servers(
                 search_opts={"share_network": sn["id"]})
             self._wait_for_resources_deletion(share_servers)
示例#7
0
 def setup(self):
     for user, tenant_id in (utils.iterate_per_tenants(
             self.context.get("users", []))):
         self.context["tenants"][tenant_id][CONTEXT_NAME] = {
             "security_services": [],
         }
         if self.config["security_services"]:
             manila_scenario = manila_utils.ManilaScenario({
                 "task": self.task,
                 "user": user,
                 "config": {
                     "api_versions": self.context["config"].get(
                         "api_versions", [])}
             })
             for ss in self.config["security_services"]:
                 inst = manila_scenario._create_security_service(
                     **ss).to_dict()
                 self.context["tenants"][tenant_id][CONTEXT_NAME][
                     "security_services"].append(inst)
 def setUp(self):
     super(ManilaScenarioTestCase, self).setUp()
     self.scenario = utils.ManilaScenario(self.context)