def test_launch_keypairlist_error(self): image = self.images.first() self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'tenant_quota_usages') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') api.image_get_meta(IsA(http.HttpRequest), image.id).AndReturn(image) api.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn( self.quota_usages.first()) api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) exception = keystone_exceptions.ClientException('Failed.') api.keypair_list(IsA(http.HttpRequest)).AndRaise(exception) api.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) self.mox.ReplayAll() url = reverse('horizon:nova:images_and_snapshots:images:launch', args=[image.id]) res = self.client.get(url) self.assertTemplateUsed(res, 'nova/images_and_snapshots/images/launch.html') self.assertEqual(len(res.context['form'].fields['keypair'].choices), 1)
def test_update_post(self): image_to_update = self.images.first() image_updated = {'name': u'new_name', 'container_format': u'new_format', 'is_public': False, 'disk_format': u'new_disk_format', 'properties': {}} self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'image_update') api.image_get_meta(IsA(http.HttpRequest), image_to_update.id).AndReturn(image_to_update) api.image_update(IsA(http.HttpRequest), image_to_update.id, image_updated) self.mox.ReplayAll() form_data = {'method': 'UpdateImageForm', 'image_id': image_to_update.id, 'name': image_updated['name'], 'container_format': image_updated['container_format'], 'disk_format': image_updated['disk_format'], 'public': image_updated['is_public']} url = reverse('horizon:nova:images_and_snapshots:images:update', args=[image_to_update.id]) res = self.client.post(url, form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow( res, reverse('horizon:nova:images_and_snapshots:index'))
def test_launch_post(self): FLAVOR_ID = self.flavors[0].id IMAGE_ID = '1' KEY_NAME = self.keypairs[0].name SERVER_NAME = 'serverName' USER_DATA = 'userData' form_data = {'method': 'LaunchForm', 'flavor': FLAVOR_ID, 'image_id': IMAGE_ID, 'key_name': KEY_NAME, 'name': SERVER_NAME, 'user_data': USER_DATA, 'tenant_id': self.TEST_TENANT, 'security_groups': 'default', } self.mox.StubOutWithMock(api, 'image_get_meta') api.image_get_meta(IsA(http.HttpRequest), IMAGE_ID).AndReturn(self.visibleImage) self.mox.StubOutWithMock(api, 'tenant_quota_get') api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT).AndReturn(FakeQuota) self.mox.StubOutWithMock(api, 'flavor_list') api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors) self.mox.StubOutWithMock(api, 'keypair_list') api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs) self.mox.StubOutWithMock(api, 'security_group_list') api.security_group_list(IsA(http.HttpRequest)).AndReturn( self.security_groups) # called again by the form api.image_get_meta(IsA(http.HttpRequest), IMAGE_ID).AndReturn(self.visibleImage) self.mox.StubOutWithMock(api, 'flavor_get') api.flavor_get(IsA(http.HttpRequest), IsA(unicode)).AndReturn(self.flavors[0]) self.mox.StubOutWithMock(api, 'server_create') api.server_create(IsA(http.HttpRequest), SERVER_NAME, self.visibleImage, self.flavors[0], KEY_NAME, USER_DATA, [self.security_groups[0].name]) self.mox.StubOutWithMock(messages, 'success') messages.success(IsA(http.HttpRequest), IsA(basestring)) self.mox.ReplayAll() res = self.client.post(reverse('horizon:nova:images:launch', args=[IMAGE_ID]), form_data) self.assertRedirectsNoFollow(res, reverse('horizon:nova:instances:index'))
def test_launch_get(self): image = self.images.first() quota_usages = self.quota_usages.first() self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'tenant_quota_usages') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') api.image_get_meta(IsA(http.HttpRequest), image.id).AndReturn(image) api.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_usages) api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs.list()) api.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) self.mox.ReplayAll() url = reverse('horizon:nova:images_and_snapshots:images:launch', args=[image.id]) res = self.client.get(url) form = res.context['form'] self.assertTemplateUsed(res, 'nova/images_and_snapshots/images/launch.html') self.assertEqual(res.context['image'].name, image.name) self.assertIn(self.flavors.first().name, form.fields['flavor'].choices[0][1]) self.assertEqual(self.keypairs.first().name, form.fields['keypair'].choices[1][0])
def test_launch_get(self): IMAGE_ID = 1 self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'tenant_quota_get') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') api.image_get_meta(IsA(http.HttpRequest), str(IMAGE_ID)) \ .AndReturn(self.visibleImage) api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT).AndReturn(FakeQuota) api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors) api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs) api.security_group_list(IsA(http.HttpRequest)).AndReturn( self.security_groups) self.mox.ReplayAll() res = self.client.get( reverse('horizon:nova:images_and_snapshots:images:launch', args=[IMAGE_ID])) form = res.context['form'] self.assertTemplateUsed(res, 'nova/images_and_snapshots/images/launch.html') self.assertEqual(res.context['image'].name, self.visibleImage.name) self.assertIn('m1.massive', form.fields['flavor'].choices[0][1]) self.assertEqual(form.fields['keypair'].choices[0][0], self.keypairs[0].name)
def test_launch_keypairlist_error(self): IMAGE_ID = '2' self.mox.StubOutWithMock(api, 'image_get_meta') api.image_get_meta(IsA(http.HttpRequest), IMAGE_ID).AndReturn(self.visibleImage) self.mox.StubOutWithMock(api, 'tenant_quota_get') api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT).AndReturn(FakeQuota) self.mox.StubOutWithMock(api, 'flavor_list') api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors) exception = api_exceptions.ApiException('apiException') self.mox.StubOutWithMock(api, 'keypair_list') api.keypair_list(IsA(http.HttpRequest)).AndRaise(exception) self.mox.StubOutWithMock(api, 'security_group_list') api.security_group_list(IsA(http.HttpRequest)).AndReturn( self.security_groups) self.mox.ReplayAll() res = self.client.get(reverse('horizon:nova:images:launch', args=[IMAGE_ID])) self.assertTemplateUsed(res, 'nova/images/launch.html') form = res.context['form'] form_keyfield = form.fields['key_name'] self.assertEqual(len(form_keyfield.choices), 0)
def test_launch_flavorlist_error(self): IMAGE_ID = '1' self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'tenant_quota_get') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') api.image_get_meta(IsA(http.HttpRequest), IMAGE_ID).AndReturn(self.visibleImage) api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT).AndReturn(FakeQuota) exception = keystone_exceptions.ClientException('Failed.') api.flavor_list(IsA(http.HttpRequest)).AndRaise(exception) api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs) api.security_group_list(IsA(http.HttpRequest)).AndReturn( self.security_groups) self.mox.ReplayAll() res = self.client.get( reverse('horizon:nova:images_and_snapshots:images:launch', args=[IMAGE_ID])) self.assertTemplateUsed(res, 'nova/images_and_snapshots/images/launch.html')
def test_update_post(self): image_to_update = self.images.first() image_updated = { 'name': u'new_name', 'container_format': u'new_format', 'is_public': False, 'disk_format': u'new_disk_format', 'properties': {} } self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'image_update') api.image_get_meta(IsA(http.HttpRequest), image_to_update.id).AndReturn(image_to_update) api.image_update(IsA(http.HttpRequest), image_to_update.id, image_updated) self.mox.ReplayAll() form_data = { 'method': 'UpdateImageForm', 'image_id': image_to_update.id, 'name': image_updated['name'], 'container_format': image_updated['container_format'], 'disk_format': image_updated['disk_format'], 'public': image_updated['is_public'] } url = reverse('horizon:nova:images_and_snapshots:images:update', args=[image_to_update.id]) res = self.client.post(url, form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow( res, reverse('horizon:nova:images_and_snapshots:index'))
def test_launch_form_apiexception(self): FLAVOR_ID = self.flavors[0].id IMAGE_ID = '1' KEY_NAME = self.keypairs[0].name SERVER_NAME = 'serverName' USER_DATA = 'userData' form_data = {'method': 'LaunchForm', 'flavor': FLAVOR_ID, 'image_id': IMAGE_ID, 'key_name': KEY_NAME, 'name': SERVER_NAME, 'tenant_id': self.TEST_TENANT, 'user_data': USER_DATA, 'security_groups': 'default', } self.mox.StubOutWithMock(api, 'image_get_meta') api.image_get_meta(IgnoreArg(), IMAGE_ID).AndReturn(self.visibleImage) self.mox.StubOutWithMock(api, 'tenant_quota_get') api.tenant_quota_get(IsA(http.HttpRequest), self.TEST_TENANT).AndReturn(FakeQuota) self.mox.StubOutWithMock(api, 'flavor_list') api.flavor_list(IgnoreArg()).AndReturn(self.flavors) self.mox.StubOutWithMock(api, 'keypair_list') api.keypair_list(IgnoreArg()).AndReturn(self.keypairs) self.mox.StubOutWithMock(api, 'security_group_list') api.security_group_list(IsA(http.HttpRequest)).AndReturn( self.security_groups) # called again by the form api.image_get_meta(IgnoreArg(), IMAGE_ID).AndReturn(self.visibleImage) self.mox.StubOutWithMock(api, 'flavor_get') api.flavor_get(IgnoreArg(), IsA(unicode)).AndReturn(self.flavors[0]) self.mox.StubOutWithMock(api, 'server_create') exception = api_exceptions.ApiException('apiException') api.server_create(IsA(http.HttpRequest), SERVER_NAME, self.visibleImage, self.flavors[0], KEY_NAME, USER_DATA, self.security_groups).AndRaise(exception) self.mox.StubOutWithMock(messages, 'error') messages.error(IsA(http.HttpRequest), IsA(basestring)) self.mox.ReplayAll() url = reverse('horizon:nova:images:launch', args=[IMAGE_ID]) res = self.client.post(url, form_data) self.assertTemplateUsed(res, 'nova/images/launch.html')
def test_launch_post(self): flavor = self.flavors.first() image = self.images.first() keypair = self.keypairs.first() server = self.servers.first() volume = self.volumes.first() sec_group = self.security_groups.first() USER_DATA = 'user data' device_name = u'vda' volume_choice = "%s:vol" % volume.id block_device_mapping = {device_name: u"%s::0" % volume_choice} self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') self.mox.StubOutWithMock(api, 'server_create') self.mox.StubOutWithMock(api, 'volume_list') api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs.list()) api.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) api.image_get_meta(IsA(http.HttpRequest), image.id).AndReturn(image) api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list()) api.server_create(IsA(http.HttpRequest), server.name, image.id, flavor.id, keypair.name, USER_DATA, [sec_group.name], block_device_mapping, instance_count=IsA(int)) self.mox.ReplayAll() form_data = { 'method': 'LaunchForm', 'flavor': flavor.id, 'image_id': image.id, 'keypair': keypair.name, 'name': server.name, 'user_data': USER_DATA, 'tenant_id': self.tenants.first().id, 'security_groups': sec_group.name, 'volume': volume_choice, 'device_name': device_name, 'count': 1 } url = reverse('horizon:nova:images_and_snapshots:images:launch', args=[image.id]) res = self.client.post(url, form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow( res, reverse('horizon:nova:instances_and_volumes:index'))
def test_update_get(self): image = self.images.first() self.mox.StubOutWithMock(api, 'image_get_meta') api.image_get_meta(IsA(http.HttpRequest), image.id).AndReturn(image) self.mox.ReplayAll() url = reverse('horizon:nova:images_and_snapshots:images:update', args=[image.id]) res = self.client.get(url) self.assertTemplateUsed(res, 'nova/images_and_snapshots/images/update.html')
def test_update_get(self): image = self.images.first() self.mox.StubOutWithMock(api, 'image_get_meta') api.image_get_meta(IsA(http.HttpRequest), image.id).AndReturn(image) self.mox.ReplayAll() url = reverse('horizon:nova:images_and_snapshots:images:update', args=[image.id]) res = self.client.get(url) self.assertTemplateUsed( res, 'nova/images_and_snapshots/images/update.html')
def test_launch_post(self): flavor = self.flavors.first() image = self.images.first() keypair = self.keypairs.first() server = self.servers.first() volume = self.volumes.first() sec_group = self.security_groups.first() USER_DATA = 'user data' device_name = u'vda' volume_choice = "%s:vol" % volume.id block_device_mapping = {device_name: u"%s::0" % volume_choice} self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') self.mox.StubOutWithMock(api, 'server_create') self.mox.StubOutWithMock(api, 'volume_list') api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs.list()) api.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) api.image_get_meta(IsA(http.HttpRequest), image.id).AndReturn(image) api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list()) api.server_create(IsA(http.HttpRequest), server.name, image.id, flavor.id, keypair.name, USER_DATA, [sec_group.name], block_device_mapping, instance_count=IsA(int)) self.mox.ReplayAll() form_data = {'method': 'LaunchForm', 'flavor': flavor.id, 'image_id': image.id, 'keypair': keypair.name, 'name': server.name, 'user_data': USER_DATA, 'tenant_id': self.tenants.first().id, 'security_groups': sec_group.name, 'volume': volume_choice, 'device_name': device_name, 'count': 1} url = reverse('horizon:nova:images_and_snapshots:images:launch', args=[image.id]) res = self.client.post(url, form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, reverse('horizon:nova:instances_and_volumes:index'))
def test_launch_form_keystone_exception(self): FLAVOR_ID = self.flavors[0].id IMAGE_ID = '1' keypair = self.keypairs[0].name SERVER_NAME = 'serverName' USER_DATA = 'userData' self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') self.mox.StubOutWithMock(api, 'server_create') self.mox.StubOutWithMock(api, 'volume_list') form_data = {'method': 'LaunchForm', 'flavor': FLAVOR_ID, 'image_id': IMAGE_ID, 'keypair': keypair, 'name': SERVER_NAME, 'tenant_id': self.TEST_TENANT, 'user_data': USER_DATA, 'count': int(1), 'security_groups': 'default'} api.flavor_list(IgnoreArg()).AndReturn(self.flavors) api.keypair_list(IgnoreArg()).AndReturn(self.keypairs) api.security_group_list(IsA(http.HttpRequest)).AndReturn( self.security_groups) api.image_get_meta(IgnoreArg(), IMAGE_ID).AndReturn(self.visibleImage) api.volume_list(IgnoreArg()).AndReturn(self.volumes) exception = keystone_exceptions.ClientException('Failed') api.server_create(IsA(http.HttpRequest), SERVER_NAME, IMAGE_ID, str(FLAVOR_ID), keypair, USER_DATA, [group.name for group in self.security_groups], None, instance_count=IsA(int)).AndRaise(exception) self.mox.StubOutWithMock(messages, 'error') messages.error(IsA(http.HttpRequest), IsA(basestring)) self.mox.ReplayAll() url = reverse('horizon:nova:images_and_snapshots:images:launch', args=[IMAGE_ID]) res = self.client.post(url, form_data) self.assertRedirectsNoFollow(res, IMAGES_INDEX_URL)
def test_launch_post(self): FLAVOR_ID = self.flavors[0].id IMAGE_ID = '1' keypair = self.keypairs[0].name SERVER_NAME = 'serverName' USER_DATA = 'userData' volume = self.volumes[0].id device_name = 'vda' BLOCK_DEVICE_MAPPING = {device_name: "1:::0"} form_data = {'method': 'LaunchForm', 'flavor': FLAVOR_ID, 'image_id': IMAGE_ID, 'keypair': keypair, 'name': SERVER_NAME, 'user_data': USER_DATA, 'count': 1, 'tenant_id': self.TEST_TENANT, 'security_groups': 'default', 'volume': volume, 'device_name': device_name } self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') self.mox.StubOutWithMock(api, 'server_create') self.mox.StubOutWithMock(api, 'volume_list') api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors) api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs) api.security_group_list(IsA(http.HttpRequest)).AndReturn( self.security_groups) api.image_get_meta(IsA(http.HttpRequest), IMAGE_ID).AndReturn(self.visibleImage) api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes) api.server_create(IsA(http.HttpRequest), SERVER_NAME, str(IMAGE_ID), str(FLAVOR_ID), keypair, USER_DATA, [self.security_groups[0].name], BLOCK_DEVICE_MAPPING, instance_count=IsA(int)) self.mox.ReplayAll() res = self.client.post( reverse('horizon:nova:images_and_snapshots:images:launch', args=[IMAGE_ID]), form_data) self.assertRedirectsNoFollow(res, reverse('horizon:nova:instances_and_volumes:index'))
def update(request, image_id): try: image = api.image_get_meta(request, image_id) except glance_exception.ClientConnectionError, e: LOG.exception("Error connecting to glance") messages.error(request, _("Error connecting to glance: %s") % e.message)
def handle(self, request, data): image_id = data['image_id'] tenant_id = data['tenant_id'] # flavor = "m1.tiny" #KDS: hack to give some valid user_data user_data=data['tenant_id'] meta_data = {'input_array' : 'default_input', 'output_array' : 'default_output'} # print("KDS4 xcp forms.py: dataget-metadata=%s\n" %(data.get('meta_data'))) try: image = api.image_get_meta(request, image_id) flavor = api.flavor_get(request, data['flavor']) api.server_create(request, data['name'], image, flavor, data.get('key_name'), user_data, meta_data, # data.get('meta_data'), data.get('security_groups')) #KDS: pass meta_data as 'meta' instead of 'user_data' print("KDS2 xcp forms.py: meta-data=%s dataget-metadata=%s\n" %(meta_data, data.get('meta_data'))) msg = _('Instance was successfully launched') LOG.info(msg) messages.success(request, msg) return redirect( 'horizon:nova:instances_and_volumes:instances:index') except api_exceptions.ApiException, e: LOG.exception('ApiException while creating instances of image "%s"' % image_id) messages.error(request, _('Unable to launch instance: %s') % e.message) print("KDS3 xcp forms.py: meta-data=%s dataget-metadata=%s\n" %(meta_data, data.get('meta_data')))
def handle(self, request, data): image_id = data['image_id'] tenant_id = data['tenant_id'] try: image = api.image_get_meta(request, image_id) flavor = api.flavor_get(request, data['flavor']) api.server_create(request, data['name'], image, flavor, data.get('key_name'), normalize_newlines(data.get('user_data')), data.get('security_groups')) msg = _('Instance was successfully launched') LOG.info(msg) messages.success(request, msg) return redirect( 'horizon:nova:instances_and_volumes:instances:index') except api_exceptions.ApiException, e: LOG.exception('ApiException while creating instances of image "%s"' % image_id) messages.error(request, _('Unable to launch instance: %s') % e.message)
def test_launch_form_instance_count_error(self): flavor = self.flavors.first() image = self.images.first() keypair = self.keypairs.first() server = self.servers.first() volume = self.volumes.first() sec_group = self.security_groups.first() USER_DATA = 'user data' device_name = u'vda' volume_choice = "%s:vol" % volume.id self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') self.mox.StubOutWithMock(api, 'volume_list') self.mox.StubOutWithMock(api, 'volume_snapshot_list') self.mox.StubOutWithMock(api, 'tenant_quota_usages') api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs.list()) api.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) api.image_get_meta(IsA(http.HttpRequest), image.id).AndReturn(image) api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list()) api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn([]) api.tenant_quota_usages(IsA(http.HttpRequest)) \ .AndReturn(self.quota_usages.first()) self.mox.ReplayAll() form_data = {'method': 'LaunchForm', 'flavor': flavor.id, 'image_id': image.id, 'keypair': keypair.name, 'name': server.name, 'user_data': USER_DATA, 'tenant_id': self.tenants.first().id, 'security_groups': sec_group.name, 'volume': volume_choice, 'device_name': device_name, 'count': 0} url = reverse('horizon:nova:images_and_snapshots:images:launch', args=[image.id]) res = self.client.post(url, form_data) self.assertFormErrors(res, count=1)
def test_launch_form_instance_count_error(self): flavor = self.flavors.first() image = self.images.first() keypair = self.keypairs.first() server = self.servers.first() volume = self.volumes.first() sec_group = self.security_groups.first() USER_DATA = 'user data' device_name = u'vda' volume_choice = "%s:vol" % volume.id self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') self.mox.StubOutWithMock(api, 'volume_list') self.mox.StubOutWithMock(api, 'volume_snapshot_list') self.mox.StubOutWithMock(api, 'tenant_quota_usages') api.flavor_list(IsA(http.HttpRequest)).AndReturn(self.flavors.list()) api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs.list()) api.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) api.image_get_meta(IsA(http.HttpRequest), image.id).AndReturn(image) api.volume_list(IsA(http.HttpRequest)).AndReturn(self.volumes.list()) api.volume_snapshot_list(IsA(http.HttpRequest)).AndReturn([]) api.tenant_quota_usages(IsA(http.HttpRequest)) \ .AndReturn(self.quota_usages.first()) self.mox.ReplayAll() form_data = { 'method': 'LaunchForm', 'flavor': flavor.id, 'image_id': image.id, 'keypair': keypair.name, 'name': server.name, 'user_data': USER_DATA, 'tenant_id': self.tenants.first().id, 'security_groups': sec_group.name, 'volume': volume_choice, 'device_name': device_name, 'count': 0 } url = reverse('horizon:nova:images_and_snapshots:images:launch', args=[image.id]) res = self.client.post(url, form_data) self.assertFormErrors(res, count=1)
def test_launch_form_keystone_exception(self): flavor = self.flavors.first() image = self.images.first() keypair = self.keypairs.first() server = self.servers.first() sec_group = self.security_groups.first() USER_DATA = 'userData' self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') self.mox.StubOutWithMock(api, 'server_create') self.mox.StubOutWithMock(api, 'volume_list') api.flavor_list(IgnoreArg()).AndReturn(self.flavors.list()) api.keypair_list(IgnoreArg()).AndReturn(self.keypairs.list()) api.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) api.image_get_meta(IgnoreArg(), image.id).AndReturn(image) api.volume_list(IgnoreArg()).AndReturn(self.volumes.list()) exc = keystone_exceptions.ClientException('Failed') api.server_create(IsA(http.HttpRequest), server.name, image.id, flavor.id, keypair.name, USER_DATA, [sec_group.name], None, instance_count=IsA(int)).AndRaise(exc) self.mox.ReplayAll() form_data = { 'method': 'LaunchForm', 'flavor': flavor.id, 'image_id': image.id, 'keypair': keypair.name, 'name': server.name, 'tenant_id': self.tenant.id, 'user_data': USER_DATA, 'count': 1, 'security_groups': sec_group.name } url = reverse('horizon:nova:images_and_snapshots:images:launch', args=[image.id]) res = self.client.post(url, form_data) self.assertRedirectsNoFollow(res, IMAGES_INDEX_URL)
def get_object(self, *args, **kwargs): try: self.object = api.image_get_meta(self.request, kwargs['image_id']) except: msg = _('Unable to retrieve image "%s".') % kwargs['image_id'] redirect = reverse('horizon:nova:images:index') exceptions.handle(self.request, msg, redirect=redirect) return self.object
def get_object(self, *args, **kwargs): try: self.object = api.image_get_meta(self.request, kwargs['image_id']) except: msg = _('Unable to retrieve image "%s".') % kwargs['image_id'] redirect = reverse('horizon:nova:images_and_snapshots:index') exceptions.handle(self.request, msg, redirect=redirect) return self.object
def test_launch_form_keystone_exception(self): flavor = self.flavors.first() image = self.images.first() keypair = self.keypairs.first() server = self.servers.first() sec_group = self.security_groups.first() USER_DATA = 'userData' self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') self.mox.StubOutWithMock(api, 'server_create') self.mox.StubOutWithMock(api, 'volume_list') api.flavor_list(IgnoreArg()).AndReturn(self.flavors.list()) api.keypair_list(IgnoreArg()).AndReturn(self.keypairs.list()) api.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) api.image_get_meta(IgnoreArg(), image.id).AndReturn(image) api.volume_list(IgnoreArg()).AndReturn(self.volumes.list()) exc = keystone_exceptions.ClientException('Failed') api.server_create(IsA(http.HttpRequest), server.name, image.id, flavor.id, keypair.name, USER_DATA, [sec_group.name], None, instance_count=IsA(int)).AndRaise(exc) self.mox.ReplayAll() form_data = {'method': 'LaunchForm', 'flavor': flavor.id, 'image_id': image.id, 'keypair': keypair.name, 'name': server.name, 'tenant_id': self.tenant.id, 'user_data': USER_DATA, 'count': 1, 'security_groups': sec_group.name} url = reverse('horizon:nova:images_and_snapshots:images:launch', args=[image.id]) res = self.client.post(url, form_data) self.assertRedirectsNoFollow(res, IMAGES_INDEX_URL)
def get_object(self, *args, **kwargs): image_id = self.kwargs["image_id"] try: self.object = api.image_get_meta(self.request, image_id) except: msg = _('Unable to retrieve image "%s".') % image_id redirect = reverse('horizon:nova:images_and_snapshots:index') exceptions.handle(self.request, msg, redirect=redirect) return self.object
def test_image_get_meta(self): """ Verify "get" returns our custom Image class. """ image = self.images.get(id='1') glanceclient = self.stub_glanceclient() glanceclient.get_image_meta(image.id).AndReturn(image) self.mox.ReplayAll() ret_val = api.image_get_meta(self.request, image.id) self.assertIsInstance(ret_val, api.glance.Image) self.assertEqual(ret_val._apidict, image)
def handle(self, request, data): image_id = data['image_id'] tenant_id = request.user.tenant_id error_retrieving = _('Unable to retrieve image info from glance: %s' % image_id) error_updating = _('Error updating image with id: %s' % image_id) try: image = api.image_get_meta(request, image_id) except glance_exception.ClientConnectionError, e: LOG.exception(_('Error connecting to glance')) messages.error(request, error_retrieving)
def test_launch_flavorlist_error(self): image = self.images.first() self.mox.StubOutWithMock(api, 'image_get_meta') self.mox.StubOutWithMock(api, 'tenant_quota_usages') self.mox.StubOutWithMock(api, 'flavor_list') self.mox.StubOutWithMock(api, 'keypair_list') self.mox.StubOutWithMock(api, 'security_group_list') api.image_get_meta(IsA(http.HttpRequest), image.id).AndReturn(image) api.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn( self.quota_usages.first()) exc = keystone_exceptions.ClientException('Failed.') api.flavor_list(IsA(http.HttpRequest)).AndRaise(exc) api.keypair_list(IsA(http.HttpRequest)).AndReturn(self.keypairs.list()) api.security_group_list(IsA(http.HttpRequest)) \ .AndReturn(self.security_groups.list()) self.mox.ReplayAll() url = reverse('horizon:nova:images_and_snapshots:images:launch', args=[image.id]) res = self.client.get(url) self.assertTemplateUsed( res, 'nova/images_and_snapshots/images/launch.html')
def handle(self, request, data): image_id = data['image_id'] tenant_id = request.user.tenant_id try: image = api.image_get_meta(request, image_id) if image.owner == request.user.username: api.image_delete(request, image_id) else: messages.info(request, _("Unable to delete image, you are not \ its owner.")) return redirect('dash_images_update', tenant_id, image_id) except glance_exception.ClientConnectionError, e: LOG.exception("Error connecting to glance") messages.error(request, _("Error connecting to glance: %s") % e.message)
def handle(self, request, data): image_id = data['image_id'] tenant_id = request.user.tenant_id try: image = api.image_get_meta(request, image_id) if image.owner == request.user.username: api.image_delete(request, image_id) else: messages.info( request, _("Unable to delete image, you are not \ its owner.")) return redirect('dash_images_update', tenant_id, image_id) except glance_exception.ClientConnectionError, e: LOG.exception("Error connecting to glance") messages.error(request, _("Error connecting to glance: %s") % e.message)
def handle(self, request, data): image_id = data['image_id'] tenant_id = data['tenant_id'] try: image = api.image_get_meta(request, image_id) flavor = api.flavor_get(request, data['flavor']) api.server_create(request, data['name'], image, flavor, data.get('key_name'), normalize_newlines(data.get('user_data')), data.get('security_groups')) msg = _('Instance was successfully launched') LOG.info(msg) messages.success(request, msg) return redirect('horizon:nova:instances:index') except api_exceptions.ApiException, e: LOG.exception( 'ApiException while creating instances of image "%s"' % image_id) messages.error(request, _('Unable to launch instance: %s') % e.message)
LOG.exception('Unable to retrieve list of keypairs') return [] def securitygrouplist(): try: fl = api.security_group_list(request) sel = [(f.name, f.name) for f in fl] return sel except novaclient_exceptions.ClientException, e: LOG.exception('Unable to retrieve list of security groups') return [] tenant_id = request.user.tenant_id # TODO(mgius): Any reason why these can't be after the launchform logic? # If The form is valid, we've just wasted these two api calls image = api.image_get_meta(request, image_id) quotas = api.tenant_quota_get(request, request.user.tenant_id) try: quotas.ram = int(quotas.ram) except Exception, e: messages.error(request, _('Error parsing quota for %(image)s: %(msg)s') % {"image": image_id, "msg": e.message}) return shortcuts.redirect('horizon:nova:instances:index') form, handled = LaunchForm.maybe_handle( request, initial={'flavorlist': flavorlist(), 'keynamelist': keynamelist(), 'securitygrouplist': securitygrouplist(), 'image_id': image_id, 'tenant_id': tenant_id})
LOG.exception('Unable to retrieve list of keypairs') return [] def securitygrouplist(): try: fl = api.security_group_list(request) sel = [(f.name, f.name) for f in fl] return sel except novaclient_exceptions.ClientException, e: LOG.exception('Unable to retrieve list of security groups') return [] tenant_id = request.user.tenant_id # TODO(mgius): Any reason why these can't be after the launchform logic? # If The form is valid, we've just wasted these two api calls image = api.image_get_meta(request, image_id) quotas = api.tenant_quota_get(request, request.user.tenant_id) try: quotas.ram = int(quotas.ram) except Exception, e: if not hasattr(e, 'message'): e.message = str(e) messages.error( request, _('Error parsing quota for %(image)s: %(msg)s') % { "image": image_id, "msg": e.message }) return shortcuts.redirect( 'horizon:nova:instances_and_volumes:instances:index')