Example #1
0
    def test_volume_migrate_list_pool_get_exception(self):
        volume = self.cinder_volumes.get(name="v2_volume")
        cinder.volume_get(IsA(http.HttpRequest), volume.id).AndReturn(volume)
        cinder.pool_list(IsA(http.HttpRequest)).AndRaise(self.exceptions.cinder)

        self.mox.ReplayAll()
        url = reverse("horizon:admin:volumes:volumes:migrate", args=[volume.id])
        res = self.client.get(url)

        self.assertRedirectsNoFollow(res, INDEX_URL)
Example #2
0
    def test_volume_migrate_get(self):
        volume = self.cinder_volumes.get(name="v2_volume")
        cinder.volume_get(IsA(http.HttpRequest), volume.id).AndReturn(volume)
        cinder.pool_list(IsA(http.HttpRequest)).AndReturn(self.cinder_pools.list())

        self.mox.ReplayAll()

        url = reverse("horizon:admin:volumes:volumes:migrate", args=[volume.id])
        res = self.client.get(url)

        self.assertTemplateUsed(res, "admin/volumes/volumes/migrate_volume.html")
Example #3
0
    def test_volume_migrate_list_pool_get_exception(self):
        volume = self.cinder_volumes.get(name='v2_volume')
        cinder.volume_get(IsA(http.HttpRequest), volume.id) \
            .AndReturn(volume)
        cinder.pool_list(IsA(http.HttpRequest)) \
            .AndRaise(self.exceptions.cinder)

        self.mox.ReplayAll()
        url = reverse('horizon:admin:volumes:migrate', args=[volume.id])
        res = self.client.get(url)

        self.assertRedirectsNoFollow(res, INDEX_URL)
Example #4
0
    def test_volume_migrate_get(self):
        volume = self.cinder_volumes.get(name='v2_volume')
        cinder.volume_get(IsA(http.HttpRequest), volume.id) \
            .AndReturn(volume)
        cinder.pool_list(IsA(http.HttpRequest)) \
            .AndReturn(self.cinder_pools.list())

        self.mox.ReplayAll()

        url = reverse('horizon:admin:volumes:migrate', args=[volume.id])
        res = self.client.get(url)

        self.assertTemplateUsed(res, 'admin/volumes/migrate_volume.html')
Example #5
0
    def test_volume_migrate_post_api_exception(self):
        volume = self.cinder_volumes.get(name="v2_volume")
        host = self.cinder_pools.first().name

        cinder.volume_get(IsA(http.HttpRequest), volume.id).AndReturn(volume)
        cinder.pool_list(IsA(http.HttpRequest)).AndReturn(self.cinder_pools.list())
        cinder.volume_migrate(IsA(http.HttpRequest), volume.id, host, False).AndRaise(self.exceptions.cinder)

        self.mox.ReplayAll()

        url = reverse("horizon:admin:volumes:volumes:migrate", args=[volume.id])
        res = self.client.post(url, {"host": host, "volume_id": volume.id})
        self.assertRedirectsNoFollow(res, INDEX_URL)
Example #6
0
 def get_hosts(self):
     try:
         return cinder.pool_list(self.request)
     except Exception:
         exceptions.handle(self.request,
                           _('Unable to retrieve pools information.'),
                           redirect=self.success_url)
Example #7
0
 def get_hosts(self):
     try:
         return cinder.pool_list(self.request)
     except Exception:
         exceptions.handle(self.request,
                           _('Unable to retrieve pools information.'),
                           redirect=self.success_url)
    def __init__(self, request, *args, **kwargs):
        super(forms.SelfHandlingForm, self).__init__(request, *args, **kwargs)

        # get list of backend names from cinder
        self.keystone_api.do_setup(request)
        endpoints = self.keystone_api.get_ssmc_endpoints()

        pools = horizon_cinder.pool_list(self.request, detailed=True)
        backends = []
        for pool in pools:
            backends.append(pool.volume_backend_name)

        choices = []
        for backend in backends:
            # only show backends that haven't been assigned an endpoint
            matchFound = False
            for endpoint in endpoints:
                if endpoint['backend'] == backend:
                    matchFound = True
                    break
            if not matchFound:
                choice = forms.ChoiceField = (backend, backend)
                choices.append(choice)

        self.fields['backend'].choices = choices

        # set default port number
        self.fields['endpoint_port'].initial = '8443'
Example #9
0
    def test_volume_migrate_post_api_exception(self):
        volume = self.cinder_volumes.get(name='v2_volume')
        host = self.cinder_pools.first().name

        cinder.volume_get(IsA(http.HttpRequest), volume.id) \
            .AndReturn(volume)
        cinder.pool_list(IsA(http.HttpRequest)) \
            .AndReturn(self.cinder_pools.list())
        cinder.volume_migrate(IsA(http.HttpRequest),
                              volume.id,
                              host,
                              False) \
            .AndRaise(self.exceptions.cinder)

        self.mox.ReplayAll()

        url = reverse('horizon:admin:volumes:migrate', args=[volume.id])
        res = self.client.post(url, {'host': host, 'volume_id': volume.id})
        self.assertRedirectsNoFollow(res, INDEX_URL)
Example #10
0
    def test_volume_migrate_post(self):
        volume = self.cinder_volumes.get(name='v2_volume')
        host = self.pools.first().name

        cinder.volume_get(IsA(http.HttpRequest), volume.id) \
            .AndReturn(volume)
        cinder.pool_list(IsA(http.HttpRequest)) \
            .AndReturn(self.pools.list())
        cinder.volume_migrate(IsA(http.HttpRequest),
                              volume.id,
                              host,
                              False) \
            .AndReturn(None)

        self.mox.ReplayAll()

        url = reverse('horizon:admin:volumes:volumes:migrate',
                      args=[volume.id])
        res = self.client.post(url, {'host': host, 'volume_id': volume.id})
        self.assertNoFormErrors(res)
        self.assertRedirectsNoFollow(res, INDEX_URL)
    def get_backend_system_info(self, data):
        # pull all of the data out
        disp_results = ""
        items = data.split(";;")
        license_str = "\t\tlicenses:\n\t\t\t"
        for item in items:
            key, value = item.split(":")
            if key == "licenses":
                licenses = value.split(";")
                license_str += ('\n\t\t\t'.join(licenses) + "\n")
            else:
                if key == "host_name":
                    host_name = value
                elif key == "cpgs":
                    cpgs = value
                elif key == "backend":
                    backend = value
                disp_results += ("\t\t" + key + ": " + value + "\n")

        # get pool info
        if host_name and cpgs:
            pool_name_start = host_name + '@' + backend + '#'
            pool_info = ""
            cur_cpgs = cpgs.split(',')
            pools = cinder.pool_list(self.request, detailed=True)
            for cpg in cur_cpgs:
                pool_name = pool_name_start + cpg
                for pool in pools:
                    if pool.name == pool_name:
                        pool_info += "\n\t\tScheduler Data for Pool: " + \
                                     pool_name + "\n"
                        pool_data = pool._apiresource._info['capabilities']
                        for key, value in pool_data.iteritems():
                            pool_info += ("\t\t\t" + key + ": " +
                                          str(value) + "\n")

        return disp_results + license_str + pool_info
    def get_data(self):
        try:
            keystone_api = keystone.KeystoneAPI()
            keystone_api.do_setup(self.request)
            cinder_api = local_cinder.CinderAPI()
            cinder_api.do_setup(None)

            pool_data = {}
            pool_name = self.kwargs['pool_name']
            pools = cinder.pool_list(self.request, detailed=True)
            for pool in pools:
                if pool.name == pool_name:
                    pool_data['name'] = pool_name

                    capabilities = cinder_api.get_capabilities(
                        keystone_api.get_token_id(),
                        keystone_api.get_tenant_id(),
                        pool_name)
                    pool_data['capabilities'] = capabilities

                    pool_data['sched_stats'] = \
                        self.format_sched_stats(
                            pool._apiresource._info['capabilities'])
                    # if hasattr(pool, 'free_capacity_gb'):
                    #     pool_data['free_capacity_gb'] = pool.free_capacity_gb
                    break
            if not pool_data:
                raise Exception("No pool data for cinder host: " + pool_name)
            else:
                pool_data = self.determine_enabled_capabilities(pool_data)

        except Exception as ex:
            redirect = self.get_redirect_url()
            exceptions.handle(self.request,
                              _('Unable to retrieve storage pool data'),
                              redirect=redirect)
        return pool_data