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)
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")
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)
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')
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)
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'
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)
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