def __init__(self, user_credential): self.version = "2" self.user_cred = user_credential self.nova = nclient(self.version, username=self.user_cred['OS_USERNAME'], password=self.user_cred['OS_PASSWORD'], auth_url=self.user_cred['OS_AUTH_URL'], project_name=self.user_cred['OS_PROJECT_NAME']) self.neutron = networks.NeutronManager(self.nova) self.images = images.GlanceManager(self.nova) self.flavors = flavors.FlavorManager(self.nova)
def test_update_flavor_set_existing_name(self): flavor_a = self.flavors.list()[0] flavor_b = self.flavors.list()[1] projects = self.tenants.list() eph = getattr(flavor_a, 'OS-FLV-EXT-DATA:ephemeral') extra_specs = getattr(flavor_a, 'extra_specs') new_flavor = flavors.Flavor( flavors.FlavorManager(None), { 'id': flavor_a.id, 'name': flavor_b.name, 'vcpus': flavor_a.vcpus, 'disk': flavor_a.disk, 'ram': flavor_a.ram, 'swap': flavor_a.swap, 'rxtx_factor': flavor_a.rxtx_factor, 'OS-FLV-EXT-DATA:ephemeral': eph, 'extra_specs': extra_specs }) # GET api.nova.flavor_get(IsA(http.HttpRequest), flavor_a.id) \ .MultipleTimes().AndReturn(flavor_a) api.keystone.tenant_list(IsA(http.HttpRequest)) \ .MultipleTimes().AndReturn([projects, False]) # POST api.nova.flavor_list(IsA(http.HttpRequest), None) \ .AndReturn(self.flavors.list()) self.mox.ReplayAll() # get test url = reverse(constants.FLAVORS_UPDATE_URL, args=[flavor_a.id]) resp = self.client.get(url) self.assertEqual(resp.status_code, 200) self.assertTemplateUsed(resp, constants.FLAVORS_UPDATE_VIEW_TEMPLATE) # post test data = { 'flavor_id': new_flavor.id, 'name': new_flavor.name, 'vcpus': new_flavor.vcpus, 'memory_mb': new_flavor.ram, 'disk_gb': new_flavor.disk, 'swap_mb': new_flavor.swap, 'rxtx_factor': new_flavor.rxtx_factor, 'eph_gb': eph, 'is_public': True } resp = self.client.post(url, data) self.assertFormErrors( resp, 1, 'The name "m1.massive" ' 'is already used by another flavor.')
def __init__(self, username=None, api_key=None, project_id=None, auth_url=None, insecure=False, timeout=None, proxy_tenant_id=None, proxy_token=None, region_name=None, endpoint_type='publicURL', extensions=None, service_type='compute', service_name=None, volume_service_name=None, timings=False, bypass_url=None, os_cache=False, no_cache=True, http_log_debug=False, auth_system='keystone', auth_plugin=None, auth_token=None, cacert=None, tenant_id=None, user_id=None, connection_pool=False, session=None, auth=None, api_version=None, direct_use=True, **kwargs): """Initialization of Client object. :param str username: Username :param str api_key: API Key :param str project_id: Project ID :param str auth_url: Auth URL :param bool insecure: Allow insecure :param float timeout: API timeout, None or 0 disables :param str proxy_tenant_id: Tenant ID :param str proxy_token: Proxy Token :param str region_name: Region Name :param str endpoint_type: Endpoint Type :param str extensions: Exensions :param str service_type: Service Type :param str service_name: Service Name :param str volume_service_name: Volume Service Name :param bool timings: Timings :param str bypass_url: Bypass URL :param bool os_cache: OS cache :param bool no_cache: No cache :param bool http_log_debug: Enable debugging for HTTP connections :param str auth_system: Auth system :param str auth_plugin: Auth plugin :param str auth_token: Auth token :param str cacert: cacert :param str tenant_id: Tenant ID :param str user_id: User ID :param bool connection_pool: Use a connection pool :param str session: Session :param str auth: Auth :param api_version: Compute API version :type api_version: novaclient.api_versions.APIVersion """ if direct_use: import warnings warnings.warn( _LW("'novaclient.v2.client.Client' is not designed to be " "initialized directly. It is inner class of novaclient. " "Please, use 'novaclient.client.Client' instead. " "Related lp bug-report: 1493576")) # FIXME(comstud): Rename the api_key argument above when we # know it's not being used as keyword argument # NOTE(cyeoh): In the novaclient context (unlike Nova) the # project_id is not the same as the tenant_id. Here project_id # is a name (what the Nova API often refers to as a project or # tenant name) and tenant_id is a UUID (what the Nova API # often refers to as a project_id or tenant_id). password = api_key self.projectid = project_id self.tenant_id = tenant_id self.user_id = user_id self.flavors = flavors.FlavorManager(self) self.flavor_access = flavor_access.FlavorAccessManager(self) self.images = images.ImageManager(self) self.limits = limits.LimitsManager(self) self.servers = servers.ServerManager(self) self.versions = versions.VersionManager(self) self.api_version = api_version or api_versions.APIVersion("2.0") # extensions self.agents = agents.AgentsManager(self) self.dns_domains = floating_ip_dns.FloatingIPDNSDomainManager(self) self.dns_entries = floating_ip_dns.FloatingIPDNSEntryManager(self) self.cloudpipe = cloudpipe.CloudpipeManager(self) self.certs = certs.CertificateManager(self) self.floating_ips = floating_ips.FloatingIPManager(self) self.floating_ip_pools = floating_ip_pools.FloatingIPPoolManager(self) self.fping = fping.FpingManager(self) self.volumes = volumes.VolumeManager(self) self.volume_snapshots = volume_snapshots.SnapshotManager(self) self.volume_types = volume_types.VolumeTypeManager(self) self.keypairs = keypairs.KeypairManager(self) self.networks = networks.NetworkManager(self) self.quota_classes = quota_classes.QuotaClassSetManager(self) self.quotas = quotas.QuotaSetManager(self) self.security_groups = security_groups.SecurityGroupManager(self) self.security_group_rules = \ security_group_rules.SecurityGroupRuleManager(self) self.security_group_default_rules = \ security_group_default_rules.SecurityGroupDefaultRuleManager(self) self.usage = usage.UsageManager(self) self.virtual_interfaces = \ virtual_interfaces.VirtualInterfaceManager(self) self.aggregates = aggregates.AggregateManager(self) self.hosts = hosts.HostManager(self) self.hypervisors = hypervisors.HypervisorManager(self) self.hypervisor_stats = hypervisors.HypervisorStatsManager(self) self.services = services.ServiceManager(self) self.fixed_ips = fixed_ips.FixedIPsManager(self) self.floating_ips_bulk = floating_ips_bulk.FloatingIPBulkManager(self) self.os_cache = os_cache or not no_cache self.availability_zones = \ availability_zones.AvailabilityZoneManager(self) self.server_groups = server_groups.ServerGroupsManager(self) self.server_migrations = \ server_migrations.ServerMigrationsManager(self) # Add in any extensions... if extensions: for extension in extensions: if extension.manager_class: setattr(self, extension.name, extension.manager_class(self)) self.client = client._construct_http_client( username=username, password=password, user_id=user_id, project_id=project_id, tenant_id=tenant_id, auth_url=auth_url, auth_token=auth_token, insecure=insecure, timeout=timeout, auth_system=auth_system, auth_plugin=auth_plugin, proxy_token=proxy_token, proxy_tenant_id=proxy_tenant_id, region_name=region_name, endpoint_type=endpoint_type, service_type=service_type, service_name=service_name, volume_service_name=volume_service_name, timings=timings, bypass_url=bypass_url, os_cache=self.os_cache, http_log_debug=http_log_debug, cacert=cacert, connection_pool=connection_pool, session=session, auth=auth, api_version=api_version, **kwargs)
def data(TEST): TEST.servers = utils.TestDataContainer() TEST.flavors = utils.TestDataContainer() TEST.flavor_access = utils.TestDataContainer() TEST.keypairs = utils.TestDataContainer() TEST.volumes = utils.TestDataContainer() TEST.quotas = utils.TestDataContainer() TEST.quota_usages = utils.TestDataContainer() TEST.usages = utils.TestDataContainer() TEST.availability_zones = utils.TestDataContainer() TEST.hypervisors = utils.TestDataContainer() TEST.services = utils.TestDataContainer() TEST.aggregates = utils.TestDataContainer() TEST.server_groups = utils.TestDataContainer() # Volumes volume = volumes.Volume( volumes.VolumeManager(None), {"id": "41023e92-8008-4c8b-8059-7f2293ff3775", "name": 'test_volume', "status": 'available', "size": 40, "display_name": 'Volume name', "created_at": '2012-04-01 10:30:00', "volume_type": None, "attachments": []}) nameless_volume = volumes.Volume( volumes.VolumeManager(None), {"id": "3b189ac8-9166-ac7f-90c9-16c8bf9e01ac", "name": '', "status": 'in-use', "size": 10, "display_name": '', "display_description": '', "device": "/dev/hda", "created_at": '2010-11-21 18:34:25', "volume_type": 'vol_type_1', "attachments": [{"id": "1", "server_id": '1', "device": "/dev/hda"}]}) attached_volume = volumes.Volume( volumes.VolumeManager(None), {"id": "8cba67c1-2741-6c79-5ab6-9c2bf8c96ab0", "name": 'my_volume', "status": 'in-use', "size": 30, "display_name": 'My Volume', "display_description": '', "device": "/dev/hdk", "created_at": '2011-05-01 11:54:33', "volume_type": 'vol_type_2', "attachments": [{"id": "2", "server_id": '1', "device": "/dev/hdk"}]}) non_bootable_volume = volumes.Volume( volumes.VolumeManager(None), {"id": "41023e92-8008-4c8b-8059-7f2293ff3771", "name": 'non_bootable_volume', "status": 'available', "size": 40, "display_name": 'Non Bootable Volume', "created_at": '2012-04-01 10:30:00', "volume_type": None, "attachments": []}) volume.bootable = 'true' nameless_volume.bootable = 'true' attached_volume.bootable = 'true' non_bootable_volume.bootable = 'false' TEST.volumes.add(volume) TEST.volumes.add(nameless_volume) TEST.volumes.add(attached_volume) TEST.volumes.add(non_bootable_volume) # Flavors flavor_1 = flavors.Flavor(flavors.FlavorManager(None), {'id': "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", 'name': 'm1.tiny', 'vcpus': 1, 'disk': 0, 'ram': 512, 'swap': 0, 'rxtx_factor': 1, 'extra_specs': {}, 'os-flavor-access:is_public': True, 'OS-FLV-EXT-DATA:ephemeral': 0}) flavor_2 = flavors.Flavor(flavors.FlavorManager(None), {'id': "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", 'name': 'm1.massive', 'vcpus': 1000, 'disk': 1024, 'ram': 10000, 'swap': 0, 'rxtx_factor': 1, 'extra_specs': {'Trusted': True, 'foo': 'bar'}, 'os-flavor-access:is_public': True, 'OS-FLV-EXT-DATA:ephemeral': 2048}) flavor_3 = flavors.Flavor(flavors.FlavorManager(None), {'id': "dddddddd-dddd-dddd-dddd-dddddddddddd", 'name': 'm1.secret', 'vcpus': 1000, 'disk': 1024, 'ram': 10000, 'swap': 0, 'rxtx_factor': 1, 'extra_specs': {}, 'os-flavor-access:is_public': False, 'OS-FLV-EXT-DATA:ephemeral': 2048}) flavor_4 = flavors.Flavor(flavors.FlavorManager(None), {'id': "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee", 'name': 'm1.metadata', 'vcpus': 1000, 'disk': 1024, 'ram': 10000, 'swap': 0, 'rxtx_factor': 1, 'extra_specs': FlavorExtraSpecs( {'key': 'key_mock', 'value': 'value_mock'}), 'os-flavor-access:is_public': False, 'OS-FLV-EXT-DATA:ephemeral': 2048}) TEST.flavors.add(flavor_1, flavor_2, flavor_3, flavor_4) flavor_access_manager = flavor_access.FlavorAccessManager(None) flavor_access_1 = flavor_access.FlavorAccess( flavor_access_manager, {"tenant_id": "1", "flavor_id": "dddddddd-dddd-dddd-dddd-dddddddddddd"}) flavor_access_2 = flavor_access.FlavorAccess( flavor_access_manager, {"tenant_id": "2", "flavor_id": "dddddddd-dddd-dddd-dddd-dddddddddddd"}) TEST.flavor_access.add(flavor_access_1, flavor_access_2) # Key pairs keypair = keypairs.Keypair(keypairs.KeypairManager(None), dict(name='keyName')) TEST.keypairs.add(keypair) # Quota Sets quota_data = { 'metadata_items': '1', 'injected_file_content_bytes': '1', 'ram': 10000, 'instances': '10', 'injected_files': '1', 'cores': '10', 'key_pairs': 100, 'server_groups': 10, 'server_group_members': 10, 'injected_file_path_bytes': 255, } quota = quotas.QuotaSet(quotas.QuotaSetManager(None), quota_data) TEST.quotas.nova = base.QuotaSet(quota) TEST.quotas.add(base.QuotaSet(quota)) # Quota Usages quota_usage_data = {'gigabytes': {'used': 0, 'quota': 1000}, 'instances': {'used': 0, 'quota': 10}, 'ram': {'used': 0, 'quota': 10000}, 'cores': {'used': 0, 'quota': 20}, 'volumes': {'used': 0, 'quota': 10}} quota_usage = usage_quotas.QuotaUsage() for k, v in quota_usage_data.items(): quota_usage.add_quota(base.Quota(k, v['quota'])) quota_usage.tally(k, v['used']) TEST.quota_usages.add(quota_usage) # Limits limits = {"absolute": {"maxImageMeta": 128, "maxPersonality": 5, "maxPersonalitySize": 10240, "maxSecurityGroupRules": 20, "maxSecurityGroups": 10, "maxServerMeta": 128, "maxTotalCores": 20, "maxTotalFloatingIps": 10, "maxTotalInstances": 10, "maxTotalKeypairs": 100, "maxTotalRAMSize": 10000, "totalCoresUsed": 2, "totalInstancesUsed": 2, "totalKeyPairsUsed": 0, "totalRAMUsed": 1024, "totalSecurityGroupsUsed": 0}} TEST.limits = limits # Servers tenant3 = TEST.tenants.list()[2] vals = {"host": "http://nova.example.com:8774", "name": "server_1", "status": "ACTIVE", "tenant_id": TEST.tenants.first().id, "user_id": TEST.user.id, "server_id": "1", "flavor_id": flavor_1.id, "image_id": TEST.images.first().id, "key_name": keypair.name} server_1 = servers.Server(servers.ServerManager(None), json.loads(SERVER_DATA % vals)['server']) vals.update({"name": "server_2", "status": "BUILD", "server_id": "2"}) server_2 = servers.Server(servers.ServerManager(None), json.loads(SERVER_DATA % vals)['server']) vals.update({"name": u'\u4e91\u89c4\u5219', "status": "ACTIVE", "tenant_id": tenant3.id, "server_id": "3"}) server_3 = servers.Server(servers.ServerManager(None), json.loads(SERVER_DATA % vals)['server']) vals.update({"name": "server_4", "status": "PAUSED", "server_id": "4"}) server_4 = servers.Server(servers.ServerManager(None), json.loads(SERVER_DATA % vals)['server']) TEST.servers.add(server_1, server_2, server_3, server_4) # VNC Console Data console = { u'console': { u'url': u'http://example.com:6080/vnc_auto.html', u'type': u'novnc' } } TEST.servers.vnc_console_data = console # SPICE Console Data console = { u'console': { u'url': u'http://example.com:6080/spice_auto.html', u'type': u'spice' } } TEST.servers.spice_console_data = console # RDP Console Data console = { u'console': { u'url': u'http://example.com:6080/rdp_auto.html', u'type': u'rdp' } } TEST.servers.rdp_console_data = console # MKS Console Data console = { u'remote_console': { u'url': u'http://example.com:6080/mks_auto.html', u'type': u'mks' } } TEST.servers.mks_console_data = console # Usage usage_vals = {"tenant_id": TEST.tenant.id, "instance_name": server_1.name, "flavor_name": flavor_1.name, "flavor_vcpus": flavor_1.vcpus, "flavor_disk": flavor_1.disk, "flavor_ram": flavor_1.ram} usage_obj = usage.Usage(usage.UsageManager(None), json.loads(USAGE_DATA % usage_vals)) TEST.usages.add(usage_obj) usage_2_vals = {"tenant_id": tenant3.id, "instance_name": server_3.name, "flavor_name": flavor_1.name, "flavor_vcpus": flavor_1.vcpus, "flavor_disk": flavor_1.disk, "flavor_ram": flavor_1.ram} usage_obj_2 = usage.Usage(usage.UsageManager(None), json.loads(USAGE_DATA % usage_2_vals)) TEST.usages.add(usage_obj_2) # Availability Zones TEST.availability_zones.add(availability_zones.AvailabilityZone( availability_zones.AvailabilityZoneManager(None), { 'zoneName': 'nova', 'zoneState': {'available': True}, 'hosts': { "host001": { "nova-network": { "active": True, "available": True, }, }, }, }, )) # hypervisors hypervisor_1 = hypervisors.Hypervisor( hypervisors.HypervisorManager(None), { "service": {"host": "devstack001", "id": 3}, "vcpus_used": 1, "hypervisor_type": "QEMU", "local_gb_used": 20, "hypervisor_hostname": "devstack001", "memory_mb_used": 1500, "memory_mb": 2000, "current_workload": 0, "vcpus": 1, "cpu_info": '{"vendor": "Intel", "model": "core2duo",' '"arch": "x86_64", "features": ["lahf_lm"' ', "rdtscp"], "topology": {"cores": 1, "t' 'hreads": 1, "sockets": 1}}', "running_vms": 1, "free_disk_gb": 9, "hypervisor_version": 1002000, "disk_available_least": 6, "local_gb": 29, "free_ram_mb": 500, "id": 1, "servers": [{"name": "test_name", "uuid": "test_uuid"}] }, ) hypervisor_2 = hypervisors.Hypervisor( hypervisors.HypervisorManager(None), { "service": {"host": "devstack002", "id": 4}, "vcpus_used": 1, "hypervisor_type": "QEMU", "local_gb_used": 20, "hypervisor_hostname": "devstack002", "memory_mb_used": 1500, "memory_mb": 2000, "current_workload": 0, "vcpus": 1, "cpu_info": '{"vendor": "Intel", "model": "core2duo",' '"arch": "x86_64", "features": ["lahf_lm"' ', "rdtscp"], "topology": {"cores": 1, "t' 'hreads": 1, "sockets": 1}}', "running_vms": 1, "free_disk_gb": 9, "hypervisor_version": 1002000, "disk_available_least": 6, "local_gb": 29, "free_ram_mb": 500, "id": 2, "servers": [{"name": "test_name_2", "uuid": "test_uuid_2"}] }, ) hypervisor_3 = hypervisors.Hypervisor( hypervisors.HypervisorManager(None), { "service": {"host": "instance-host", "id": 5}, "vcpus_used": 1, "hypervisor_type": "QEMU", "local_gb_used": 20, "hypervisor_hostname": "instance-host", "memory_mb_used": 1500, "memory_mb": 2000, "current_workload": 0, "vcpus": 1, "cpu_info": '{"vendor": "Intel", "model": "core2duo",' '"arch": "x86_64", "features": ["lahf_lm"' ', "rdtscp"], "topology": {"cores": 1, "t' 'hreads": 1, "sockets": 1}}', "running_vms": 1, "free_disk_gb": 9, "hypervisor_version": 1002000, "disk_available_least": 6, "local_gb": 29, "free_ram_mb": 500, "id": 3, }, ) TEST.hypervisors.add(hypervisor_1) TEST.hypervisors.add(hypervisor_2) TEST.hypervisors.add(hypervisor_3) TEST.hypervisors.stats = { "hypervisor_statistics": { "count": 5, "vcpus_used": 3, "local_gb_used": 15, "memory_mb": 483310, "current_workload": 0, "vcpus": 160, "running_vms": 3, "free_disk_gb": 12548, "disk_available_least": 12556, "local_gb": 12563, "free_ram_mb": 428014, "memory_mb_used": 55296, } } # Services service_1 = services.Service(services.ServiceManager(None), { "status": "enabled", "binary": "nova-conductor", "zone": "internal", "state": "up", "updated_at": "2013-07-08T05:21:00.000000", "host": "devstack001", "disabled_reason": None, }) service_2 = services.Service(services.ServiceManager(None), { "status": "enabled", "binary": "nova-compute", "zone": "nova", "state": "up", "updated_at": "2013-07-08T05:20:51.000000", "host": "devstack001", "disabled_reason": None, }) service_3 = services.Service(services.ServiceManager(None), { "status": "enabled", "binary": "nova-compute", "zone": "nova", "state": "down", "updated_at": "2013-07-08T04:20:51.000000", "host": "devstack002", "disabled_reason": None, }) service_4 = services.Service(services.ServiceManager(None), { "status": "disabled", "binary": "nova-compute", "zone": "nova", "state": "up", "updated_at": "2013-07-08T04:20:51.000000", "host": "devstack003", "disabled_reason": None, }) TEST.services.add(service_1) TEST.services.add(service_2) TEST.services.add(service_3) TEST.services.add(service_4) # Aggregates aggregate_1 = aggregates.Aggregate(aggregates.AggregateManager(None), { "name": "foo", "availability_zone": "testing", "deleted": 0, "created_at": "2013-07-04T13:34:38.000000", "updated_at": None, "hosts": ["foo", "bar"], "deleted_at": None, "id": 1, "metadata": {"foo": "testing", "bar": "testing"}, }) aggregate_2 = aggregates.Aggregate(aggregates.AggregateManager(None), { "name": "bar", "availability_zone": "testing", "deleted": 0, "created_at": "2013-07-04T13:34:38.000000", "updated_at": None, "hosts": ["foo", "bar"], "deleted_at": None, "id": 2, "metadata": {"foo": "testing", "bar": "testing"}, }) TEST.aggregates.add(aggregate_1) TEST.aggregates.add(aggregate_2) server_group_1 = server_groups.ServerGroup( server_groups.ServerGroupsManager(None), { "id": "1", "name": "server_group_1", "policies": [], }, ) server_group_2 = server_groups.ServerGroup( server_groups.ServerGroupsManager(None), { "id": "2", "name": "server_group_2", "policies": ["affinity", "some_other_policy"], }, ) server_group_3 = server_groups.ServerGroup( server_groups.ServerGroupsManager(None), { "id": "3", "name": "server_group_3", "policies": ["anti-affinity", "some_other_policy"], }, ) TEST.server_groups.add(server_group_1) TEST.server_groups.add(server_group_2) TEST.server_groups.add(server_group_3)
def test_update_flavor_update_projects_error(self): # The first element has no extra specs flavor = self.flavors.first() projects = self.tenants.list() flavor_projects = [self.tenants.first()] eph = getattr(flavor, 'OS-FLV-EXT-DATA:ephemeral') extra_specs = getattr(flavor, 'extra_specs') new_flavor = flavors.Flavor( flavors.FlavorManager(None), { 'id': "cccccccc-cccc-cccc-cccc-cccccccccccc", 'name': flavor.name, 'vcpus': flavor.vcpus + 1, 'disk': flavor.disk, 'ram': flavor.ram, 'swap': 0, 'OS-FLV-EXT-DATA:ephemeral': eph, 'os-flavor-access:is_public': False, 'extra_specs': extra_specs }) # GET/init, set up expected behavior api.nova.flavor_get(IsA(http.HttpRequest), flavor.id) \ .MultipleTimes().AndReturn(flavor) api.keystone.tenant_list(IsA(http.HttpRequest)) \ .MultipleTimes().AndReturn([projects, False]) # POST/init api.nova.flavor_list(IsA(http.HttpRequest), None) \ .AndReturn(self.flavors.list()) api.nova.flavor_get_extras(IsA(http.HttpRequest), flavor.id, raw=True) \ .AndReturn(extra_specs) api.nova.flavor_delete(IsA(http.HttpRequest), flavor.id) api.nova.flavor_create(IsA(http.HttpRequest), new_flavor.name, new_flavor.ram, new_flavor.vcpus, new_flavor.disk, swap=new_flavor.swap, ephemeral=eph, is_public=new_flavor.is_public) \ .AndReturn(new_flavor) new_flavor_projects = flavor_projects for project in new_flavor_projects: expect = api.nova.add_tenant_to_flavor(IsA(http.HttpRequest), new_flavor.id, project.id) if project == projects[0]: expect.AndRaise(self.exceptions.nova) # Put mocks in replay mode self.mox.ReplayAll() # run get test url = reverse(constants.FLAVORS_UPDATE_URL, args=[flavor.id]) resp = self.client.get(url) self.assertEqual(resp.status_code, 200) self.assertTemplateUsed(resp, constants.FLAVORS_UPDATE_VIEW_TEMPLATE) # run post test data = self._get_workflow_data(new_flavor, access=flavor_projects) data['flavor_id'] = flavor.id resp = self.client.post(url, data) self.assertNoFormErrors(resp) self.assertMessageCount(error=1, warning=0) self.assertRedirectsNoFollow(resp, reverse(constants.FLAVORS_INDEX_URL))
def test_update_flavor_with_extra_specs(self): # The second element has extra specs flavor = self.flavors.list()[1] projects = self.tenants.list() eph = getattr(flavor, 'OS-FLV-EXT-DATA:ephemeral') extra_specs = getattr(flavor, 'extra_specs') new_flavor = flavors.Flavor( flavors.FlavorManager(None), { 'id': "cccccccc-cccc-cccc-cccc-cccccccccccc", 'name': flavor.name, 'vcpus': flavor.vcpus + 1, 'disk': flavor.disk, 'ram': flavor.ram, 'swap': flavor.swap, 'OS-FLV-EXT-DATA:ephemeral': eph, 'extra_specs': extra_specs }) # GET/init, set up expected behavior api.nova.flavor_get(IsA(http.HttpRequest), flavor.id) \ .MultipleTimes().AndReturn(flavor) api.keystone.tenant_list(IsA(http.HttpRequest)) \ .MultipleTimes().AndReturn([projects, False]) # POST/init api.nova.flavor_list(IsA(http.HttpRequest), None) \ .AndReturn(self.flavors.list()) api.nova.flavor_get_extras(IsA(http.HttpRequest), flavor.id, raw=True) \ .AndReturn(extra_specs) api.nova.flavor_delete(IsA(http.HttpRequest), flavor.id) api.nova.flavor_create(IsA(http.HttpRequest), new_flavor.name, new_flavor.ram, new_flavor.vcpus, new_flavor.disk, swap=new_flavor.swap, ephemeral=eph, is_public=True).AndReturn(new_flavor) api.nova.flavor_extra_set(IsA(http.HttpRequest), new_flavor.id, extra_specs) self.mox.ReplayAll() # run get test url = reverse(constants.FLAVORS_UPDATE_URL, args=[flavor.id]) resp = self.client.get(url) self.assertEqual(resp.status_code, 200) self.assertTemplateUsed(resp, constants.FLAVORS_UPDATE_VIEW_TEMPLATE) # run post test workflow_data = { 'flavor_id': flavor.id, 'name': new_flavor.name, 'vcpus': new_flavor.vcpus, 'memory_mb': new_flavor.ram, 'disk_gb': new_flavor.disk, 'swap_mb': new_flavor.swap, 'eph_gb': eph, 'is_public': True } resp = self.client.post(url, workflow_data) self.assertNoFormErrors(resp) self.assertMessageCount(success=1) self.assertRedirectsNoFollow(resp, reverse(constants.FLAVORS_INDEX_URL))
def __init__(self, api_version=None, auth=None, auth_token=None, auth_url=None, cacert=None, cert=None, direct_use=True, endpoint_override=None, endpoint_type='publicURL', extensions=None, http_log_debug=False, insecure=False, logger=None, os_cache=False, password=None, project_domain_id=None, project_domain_name=None, project_id=None, project_name=None, region_name=None, service_name=None, service_type='compute', session=None, timeout=None, timings=False, user_domain_id=None, user_domain_name=None, user_id=None, username=None, **kwargs): """Initialization of Client object. :param api_version: Compute API version :type api_version: novaclient.api_versions.APIVersion :param str auth: Auth :param str auth_token: Auth token :param str auth_url: Auth URL :param str cacert: ca-certificate :param str cert: certificate :param bool direct_use: Inner variable of novaclient. Do not use it outside novaclient. It's restricted. :param str endpoint_override: Bypass URL :param str endpoint_type: Endpoint Type :param str extensions: Extensions :param bool http_log_debug: Enable debugging for HTTP connections :param bool insecure: Allow insecure :param logging.Logger logger: Logger instance to be used for all logging stuff :param str password: User password :param bool os_cache: OS cache :param str project_domain_id: ID of project domain :param str project_domain_name: Name of project domain :param str project_id: Project/Tenant ID :param str project_name: Project/Tenant name :param str region_name: Region Name :param str service_name: Service Name :param str service_type: Service Type :param str session: Session :param float timeout: API timeout, None or 0 disables :param bool timings: Timings :param str user_domain_id: ID of user domain :param str user_domain_name: Name of user domain :param str user_id: User ID :param str username: Username """ if direct_use: raise exceptions.Forbidden( 403, _("'novaclient.v2.client.Client' is not designed to be " "initialized directly. It is inner class of " "novaclient. You should use " "'novaclient.client.Client' instead. Related lp " "bug-report: 1493576")) # NOTE(cyeoh): In the novaclient context (unlike Nova) the # project_id is not the same as the tenant_id. Here project_id # is a name (what the Nova API often refers to as a project or # tenant name) and tenant_id is a UUID (what the Nova API # often refers to as a project_id or tenant_id). self.project_id = project_id self.project_name = project_name self.user_id = user_id self.flavors = flavors.FlavorManager(self) self.flavor_access = flavor_access.FlavorAccessManager(self) self.glance = images.GlanceManager(self) self.limits = limits.LimitsManager(self) self.servers = servers.ServerManager(self) self.versions = versions.VersionManager(self) # extensions self.agents = agents.AgentsManager(self) self.volumes = volumes.VolumeManager(self) self.keypairs = keypairs.KeypairManager(self) self.neutron = networks.NeutronManager(self) self.quota_classes = quota_classes.QuotaClassSetManager(self) self.quotas = quotas.QuotaSetManager(self) self.usage = usage.UsageManager(self) self.aggregates = aggregates.AggregateManager(self) self.hypervisors = hypervisors.HypervisorManager(self) self.hypervisor_stats = hypervisors.HypervisorStatsManager(self) self.services = services.ServiceManager(self) self.os_cache = os_cache self.availability_zones = \ availability_zones.AvailabilityZoneManager(self) self.server_groups = server_groups.ServerGroupsManager(self) self.server_migrations = \ server_migrations.ServerMigrationsManager(self) # V2.0 extensions: # NOTE(andreykurilin): tenant_networks extension is # deprecated now, which is why it is not initialized by default. self.assisted_volume_snapshots = \ assisted_volume_snapshots.AssistedSnapshotManager(self) self.cells = cells.CellsManager(self) self.instance_action = instance_action.InstanceActionManager(self) self.instance_usage_audit_log = \ instance_usage_audit_log.InstanceUsageAuditLogManager(self) self.list_extensions = list_extensions.ListExtManager(self) self.migrations = migrations.MigrationManager(self) self.server_external_events = \ server_external_events.ServerExternalEventManager(self) self.logger = logger or logging.getLogger(__name__) # Add in any extensions... if extensions: for extension in extensions: if extension.manager_class: setattr(self, extension.name, extension.manager_class(self)) self.client = client._construct_http_client( api_version=api_version, auth=auth, auth_token=auth_token, auth_url=auth_url, cacert=cacert, cert=cert, endpoint_override=endpoint_override, endpoint_type=endpoint_type, http_log_debug=http_log_debug, insecure=insecure, logger=logger, os_cache=self.os_cache, password=password, project_domain_id=project_domain_id, project_domain_name=project_domain_name, project_id=project_id, project_name=project_name, region_name=region_name, service_name=service_name, service_type=service_type, session=session, timeout=timeout, timings=timings, user_domain_id=user_domain_id, user_domain_name=user_domain_name, user_id=user_id, username=username, **kwargs)
def __init__(self, username=None, api_key=None, project_id=None, auth_url=None, insecure=False, timeout=None, proxy_tenant_id=None, proxy_token=None, region_name=None, endpoint_type='publicURL', extensions=None, service_type='compute', service_name=None, volume_service_name=None, timings=False, bypass_url=None, os_cache=False, no_cache=True, http_log_debug=False, auth_system='keystone', auth_plugin=None, auth_token=None, cacert=None, tenant_id=None, user_id=None, connection_pool=False, session=None, auth=None, **kwargs): # FIXME(comstud): Rename the api_key argument above when we # know it's not being used as keyword argument # NOTE(cyeoh): In the novaclient context (unlike Nova) the # project_id is not the same as the tenant_id. Here project_id # is a name (what the Nova API often refers to as a project or # tenant name) and tenant_id is a UUID (what the Nova API # often refers to as a project_id or tenant_id). password = api_key self.projectid = project_id self.tenant_id = tenant_id self.user_id = user_id self.flavors = flavors.FlavorManager(self) self.flavor_access = flavor_access.FlavorAccessManager(self) self.images = images.ImageManager(self) self.limits = limits.LimitsManager(self) self.servers = servers.ServerManager(self) self.versions = versions.VersionManager(self) # extensions self.agents = agents.AgentsManager(self) self.dns_domains = floating_ip_dns.FloatingIPDNSDomainManager(self) self.dns_entries = floating_ip_dns.FloatingIPDNSEntryManager(self) self.cloudpipe = cloudpipe.CloudpipeManager(self) self.certs = certs.CertificateManager(self) self.floating_ips = floating_ips.FloatingIPManager(self) self.floating_ip_pools = floating_ip_pools.FloatingIPPoolManager(self) self.fping = fping.FpingManager(self) self.volumes = volumes.VolumeManager(self) self.volume_snapshots = volume_snapshots.SnapshotManager(self) self.volume_types = volume_types.VolumeTypeManager(self) self.keypairs = keypairs.KeypairManager(self) self.networks = networks.NetworkManager(self) self.quota_classes = quota_classes.QuotaClassSetManager(self) self.quotas = quotas.QuotaSetManager(self) self.security_groups = security_groups.SecurityGroupManager(self) self.security_group_rules = \ security_group_rules.SecurityGroupRuleManager(self) self.security_group_default_rules = \ security_group_default_rules.SecurityGroupDefaultRuleManager(self) self.usage = usage.UsageManager(self) self.virtual_interfaces = \ virtual_interfaces.VirtualInterfaceManager(self) self.aggregates = aggregates.AggregateManager(self) self.hosts = hosts.HostManager(self) self.hypervisors = hypervisors.HypervisorManager(self) self.hypervisor_stats = hypervisors.HypervisorStatsManager(self) self.services = services.ServiceManager(self) self.fixed_ips = fixed_ips.FixedIPsManager(self) self.floating_ips_bulk = floating_ips_bulk.FloatingIPBulkManager(self) self.os_cache = os_cache or not no_cache self.availability_zones = \ availability_zones.AvailabilityZoneManager(self) self.server_groups = server_groups.ServerGroupsManager(self) # Add in any extensions... if extensions: for extension in extensions: if extension.manager_class: setattr(self, extension.name, extension.manager_class(self)) self.client = client._construct_http_client( username=username, password=password, user_id=user_id, project_id=project_id, tenant_id=tenant_id, auth_url=auth_url, auth_token=auth_token, insecure=insecure, timeout=timeout, auth_system=auth_system, auth_plugin=auth_plugin, proxy_token=proxy_token, proxy_tenant_id=proxy_tenant_id, region_name=region_name, endpoint_type=endpoint_type, service_type=service_type, service_name=service_name, volume_service_name=volume_service_name, timings=timings, bypass_url=bypass_url, os_cache=self.os_cache, http_log_debug=http_log_debug, cacert=cacert, connection_pool=connection_pool, session=session, auth=auth, **kwargs)
def data(TEST): TEST.servers = utils.TestDataContainer() TEST.flavors = utils.TestDataContainer() TEST.flavor_access = utils.TestDataContainer() TEST.keypairs = utils.TestDataContainer() TEST.security_groups = utils.TestDataContainer() TEST.security_groups_uuid = utils.TestDataContainer() TEST.security_group_rules = utils.TestDataContainer() TEST.security_group_rules_uuid = utils.TestDataContainer() TEST.volumes = utils.TestDataContainer() TEST.quotas = utils.TestDataContainer() TEST.quota_usages = utils.TestDataContainer() TEST.disabled_quotas = utils.TestDataContainer() TEST.floating_ips = utils.TestDataContainer() TEST.floating_ips_uuid = utils.TestDataContainer() TEST.usages = utils.TestDataContainer() TEST.certs = utils.TestDataContainer() TEST.volume_snapshots = utils.TestDataContainer() TEST.volume_types = utils.TestDataContainer() TEST.availability_zones = utils.TestDataContainer() TEST.hypervisors = utils.TestDataContainer() TEST.services = utils.TestDataContainer() TEST.aggregates = utils.TestDataContainer() TEST.hosts = utils.TestDataContainer() # Data return by novaclient. # It is used if API layer does data conversion. TEST.api_floating_ips = utils.TestDataContainer() TEST.api_floating_ips_uuid = utils.TestDataContainer() # Volumes volume = volumes.Volume( volumes.VolumeManager(None), {"id": "41023e92-8008-4c8b-8059-7f2293ff3775", "name": 'test_volume', "status": 'available', "size": 40, "display_name": 'Volume name', "created_at": '2012-04-01 10:30:00', "volume_type": None, "attachments": []}) nameless_volume = volumes.Volume( volumes.VolumeManager(None), {"id": "3b189ac8-9166-ac7f-90c9-16c8bf9e01ac", "name": '', "status": 'in-use', "size": 10, "display_name": '', "display_description": '', "device": "/dev/hda", "created_at": '2010-11-21 18:34:25', "volume_type": 'vol_type_1', "attachments": [{"id": "1", "server_id": '1', "device": "/dev/hda"}]}) attached_volume = volumes.Volume( volumes.VolumeManager(None), {"id": "8cba67c1-2741-6c79-5ab6-9c2bf8c96ab0", "name": 'my_volume', "status": 'in-use', "size": 30, "display_name": 'My Volume', "display_description": '', "device": "/dev/hdk", "created_at": '2011-05-01 11:54:33', "volume_type": 'vol_type_2', "attachments": [{"id": "2", "server_id": '1', "device": "/dev/hdk"}]}) non_bootable_volume = volumes.Volume( volumes.VolumeManager(None), {"id": "41023e92-8008-4c8b-8059-7f2293ff3771", "name": 'non_bootable_volume', "status": 'available', "size": 40, "display_name": 'Non Bootable Volume', "created_at": '2012-04-01 10:30:00', "volume_type": None, "attachments": []}) volume.bootable = 'true' nameless_volume.bootable = 'true' attached_volume.bootable = 'true' non_bootable_volume.bootable = 'false' TEST.volumes.add(volume) TEST.volumes.add(nameless_volume) TEST.volumes.add(attached_volume) TEST.volumes.add(non_bootable_volume) vol_type1 = volume_types.VolumeType(volume_types.VolumeTypeManager(None), {'id': 1, 'name': 'vol_type_1'}) vol_type2 = volume_types.VolumeType(volume_types.VolumeTypeManager(None), {'id': 2, 'name': 'vol_type_2'}) TEST.volume_types.add(vol_type1, vol_type2) # Flavors flavor_1 = flavors.Flavor(flavors.FlavorManager(None), {'id': "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", 'name': 'm1.tiny', 'vcpus': 1, 'disk': 0, 'ram': 512, 'swap': 0, 'rxtx_factor': 1, 'extra_specs': {}, 'os-flavor-access:is_public': True, 'OS-FLV-EXT-DATA:ephemeral': 0}) flavor_2 = flavors.Flavor(flavors.FlavorManager(None), {'id': "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", 'name': 'm1.massive', 'vcpus': 1000, 'disk': 1024, 'ram': 10000, 'swap': 0, 'rxtx_factor': 1, 'extra_specs': {'Trusted': True, 'foo': 'bar'}, 'os-flavor-access:is_public': True, 'OS-FLV-EXT-DATA:ephemeral': 2048}) flavor_3 = flavors.Flavor(flavors.FlavorManager(None), {'id': "dddddddd-dddd-dddd-dddd-dddddddddddd", 'name': 'm1.secret', 'vcpus': 1000, 'disk': 1024, 'ram': 10000, 'swap': 0, 'rxtx_factor': 1, 'extra_specs': {}, 'os-flavor-access:is_public': False, 'OS-FLV-EXT-DATA:ephemeral': 2048}) flavor_4 = flavors.Flavor(flavors.FlavorManager(None), {'id': "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee", 'name': 'm1.metadata', 'vcpus': 1000, 'disk': 1024, 'ram': 10000, 'swap': 0, 'rxtx_factor': 1, 'extra_specs': FlavorExtraSpecs( {'key': 'key_mock', 'value': 'value_mock'}), 'os-flavor-access:is_public': False, 'OS-FLV-EXT-DATA:ephemeral': 2048}) TEST.flavors.add(flavor_1, flavor_2, flavor_3, flavor_4) flavor_access_manager = flavor_access.FlavorAccessManager(None) flavor_access_1 = flavor_access.FlavorAccess( flavor_access_manager, {"tenant_id": "1", "flavor_id": "dddddddd-dddd-dddd-dddd-dddddddddddd"}) flavor_access_2 = flavor_access.FlavorAccess( flavor_access_manager, {"tenant_id": "2", "flavor_id": "dddddddd-dddd-dddd-dddd-dddddddddddd"}) TEST.flavor_access.add(flavor_access_1, flavor_access_2) # Key pairs keypair = keypairs.Keypair(keypairs.KeypairManager(None), dict(name='keyName')) TEST.keypairs.add(keypair) # Security Groups and Rules def generate_security_groups(is_uuid=False): def get_id(is_uuid): global current_int_id if is_uuid: return str(uuid.uuid4()) else: get_id.current_int_id += 1 return get_id.current_int_id get_id.current_int_id = 0 sg_manager = sec_groups.SecurityGroupManager(None) rule_manager = rules.SecurityGroupRuleManager(None) sec_group_1 = sec_groups.SecurityGroup(sg_manager, {"rules": [], "tenant_id": TEST.tenant.id, "id": get_id(is_uuid), "name": u"default", "description": u"default"}) sec_group_2 = sec_groups.SecurityGroup(sg_manager, {"rules": [], "tenant_id": TEST.tenant.id, "id": get_id(is_uuid), "name": u"other_group", "description": u"NotDefault."}) sec_group_3 = sec_groups.SecurityGroup(sg_manager, {"rules": [], "tenant_id": TEST.tenant.id, "id": get_id(is_uuid), "name": u"another_group", "description": u"NotDefault."}) rule = {'id': get_id(is_uuid), 'group': {}, 'ip_protocol': u"tcp", 'from_port': u"80", 'to_port': u"80", 'parent_group_id': sec_group_1.id, 'ip_range': {'cidr': u"0.0.0.0/32"}} icmp_rule = {'id': get_id(is_uuid), 'group': {}, 'ip_protocol': u"icmp", 'from_port': u"9", 'to_port': u"5", 'parent_group_id': sec_group_1.id, 'ip_range': {'cidr': u"0.0.0.0/32"}} group_rule = {'id': 3, 'group': {}, 'ip_protocol': u"tcp", 'from_port': u"80", 'to_port': u"80", 'parent_group_id': sec_group_1.id, 'source_group_id': sec_group_1.id} rule_obj = rules.SecurityGroupRule(rule_manager, rule) rule_obj2 = rules.SecurityGroupRule(rule_manager, icmp_rule) rule_obj3 = rules.SecurityGroupRule(rule_manager, group_rule) sec_group_1.rules = [rule_obj] sec_group_2.rules = [rule_obj] return {"rules": [rule_obj, rule_obj2, rule_obj3], "groups": [sec_group_1, sec_group_2, sec_group_3]} sg_data = generate_security_groups() TEST.security_group_rules.add(*sg_data["rules"]) TEST.security_groups.add(*sg_data["groups"]) sg_uuid_data = generate_security_groups(is_uuid=True) TEST.security_group_rules_uuid.add(*sg_uuid_data["rules"]) TEST.security_groups_uuid.add(*sg_uuid_data["groups"]) # Quota Sets quota_data = dict(metadata_items='1', injected_file_content_bytes='1', ram=10000, floating_ips='1', fixed_ips='10', instances='10', injected_files='1', cores='10', security_groups='10', security_group_rules='20') quota = quotas.QuotaSet(quotas.QuotaSetManager(None), quota_data) TEST.quotas.nova = base.QuotaSet(quota) TEST.quotas.add(base.QuotaSet(quota)) # nova quotas disabled when neutron is enabled disabled_quotas_nova = ['floating_ips', 'fixed_ips', 'security_groups', 'security_group_rules'] TEST.disabled_quotas.add(disabled_quotas_nova) # Quota Usages quota_usage_data = {'gigabytes': {'used': 0, 'quota': 1000}, 'instances': {'used': 0, 'quota': 10}, 'ram': {'used': 0, 'quota': 10000}, 'cores': {'used': 0, 'quota': 20}, 'floating_ips': {'used': 0, 'quota': 10}, 'security_groups': {'used': 0, 'quota': 10}, 'volumes': {'used': 0, 'quota': 10}} quota_usage = usage_quotas.QuotaUsage() for k, v in quota_usage_data.items(): quota_usage.add_quota(base.Quota(k, v['quota'])) quota_usage.tally(k, v['used']) TEST.quota_usages.add(quota_usage) # Limits limits = {"absolute": {"maxImageMeta": 128, "maxPersonality": 5, "maxPersonalitySize": 10240, "maxSecurityGroupRules": 20, "maxSecurityGroups": 10, "maxServerMeta": 128, "maxTotalCores": 20, "maxTotalFloatingIps": 10, "maxTotalInstances": 10, "maxTotalKeypairs": 100, "maxTotalRAMSize": 10000, "totalCoresUsed": 0, "totalInstancesUsed": 0, "totalKeyPairsUsed": 0, "totalRAMUsed": 0, "totalSecurityGroupsUsed": 0}} TEST.limits = limits # Servers tenant3 = TEST.tenants.list()[2] vals = {"host": "http://nova.example.com:8774", "name": "server_1", "status": "ACTIVE", "tenant_id": TEST.tenants.first().id, "user_id": TEST.user.id, "server_id": "1", "flavor_id": flavor_1.id, "image_id": TEST.images.first().id, "key_name": keypair.name} server_1 = servers.Server(servers.ServerManager(None), json.loads(SERVER_DATA % vals)['server']) vals.update({"name": "server_2", "status": "BUILD", "server_id": "2"}) server_2 = servers.Server(servers.ServerManager(None), json.loads(SERVER_DATA % vals)['server']) vals.update({"name": u'\u4e91\u89c4\u5219', "status": "ACTIVE", "tenant_id": tenant3.id, "server_id": "3"}) server_3 = servers.Server(servers.ServerManager(None), json.loads(SERVER_DATA % vals)['server']) vals.update({"name": "server_4", "status": "PAUSED", "server_id": "4"}) server_4 = servers.Server(servers.ServerManager(None), json.loads(SERVER_DATA % vals)['server']) TEST.servers.add(server_1, server_2, server_3, server_4) # VNC Console Data console = {u'console': {u'url': u'http://example.com:6080/vnc_auto.html', u'type': u'novnc'}} TEST.servers.vnc_console_data = console # SPICE Console Data console = {u'console': {u'url': u'http://example.com:6080/spice_auto.html', u'type': u'spice'}} TEST.servers.spice_console_data = console # RDP Console Data console = {u'console': {u'url': u'http://example.com:6080/rdp_auto.html', u'type': u'rdp'}} TEST.servers.rdp_console_data = console # Floating IPs def generate_fip(conf): return floating_ips.FloatingIP(floating_ips.FloatingIPManager(None), conf) fip_1 = {'id': 1, 'fixed_ip': '10.0.0.4', 'instance_id': server_1.id, 'ip': '58.58.58.58', 'pool': 'pool1'} fip_2 = {'id': 2, 'fixed_ip': None, 'instance_id': None, 'ip': '58.58.58.58', 'pool': 'pool2'} # this floating ip is for lbaas tests fip_3 = {'id': 3, 'fixed_ip': '10.0.0.5', # the underlying class maps the instance id to port id 'instance_id': '063cf7f3-ded1-4297-bc4c-31eae876cc91', 'ip': '58.58.58.58', 'pool': 'pool2'} TEST.api_floating_ips.add(generate_fip(fip_1), generate_fip(fip_2), generate_fip(fip_3)) TEST.floating_ips.add(nova.FloatingIp(generate_fip(fip_1)), nova.FloatingIp(generate_fip(fip_2)), nova.FloatingIp(generate_fip(fip_3))) # Floating IP with UUID id (for Floating IP with Neutron Proxy) fip_3 = {'id': str(uuid.uuid4()), 'fixed_ip': '10.0.0.4', 'instance_id': server_1.id, 'ip': '58.58.58.58', 'pool': 'pool1'} fip_4 = {'id': str(uuid.uuid4()), 'fixed_ip': None, 'instance_id': None, 'ip': '58.58.58.58', 'pool': 'pool2'} TEST.api_floating_ips_uuid.add(generate_fip(fip_3), generate_fip(fip_4)) TEST.floating_ips_uuid.add(nova.FloatingIp(generate_fip(fip_3)), nova.FloatingIp(generate_fip(fip_4))) # Usage usage_vals = {"tenant_id": TEST.tenant.id, "instance_name": server_1.name, "flavor_name": flavor_1.name, "flavor_vcpus": flavor_1.vcpus, "flavor_disk": flavor_1.disk, "flavor_ram": flavor_1.ram} usage_obj = usage.Usage(usage.UsageManager(None), json.loads(USAGE_DATA % usage_vals)) TEST.usages.add(usage_obj) usage_2_vals = {"tenant_id": tenant3.id, "instance_name": server_3.name, "flavor_name": flavor_1.name, "flavor_vcpus": flavor_1.vcpus, "flavor_disk": flavor_1.disk, "flavor_ram": flavor_1.ram} usage_obj_2 = usage.Usage(usage.UsageManager(None), json.loads(USAGE_DATA % usage_2_vals)) TEST.usages.add(usage_obj_2) volume_snapshot = vol_snaps.Snapshot( vol_snaps.SnapshotManager(None), {'id': '40f3fabf-3613-4f5e-90e5-6c9a08333fc3', 'display_name': 'test snapshot', 'display_description': 'vol snap!', 'size': 40, 'status': 'available', 'volume_id': '41023e92-8008-4c8b-8059-7f2293ff3775'}) volume_snapshot2 = vol_snaps.Snapshot( vol_snaps.SnapshotManager(None), {'id': 'a374cbb8-3f99-4c3f-a2ef-3edbec842e31', 'display_name': '', 'display_description': 'vol snap 2!', 'size': 80, 'status': 'available', 'volume_id': '3b189ac8-9166-ac7f-90c9-16c8bf9e01ac'}) TEST.volume_snapshots.add(volume_snapshot) TEST.volume_snapshots.add(volume_snapshot2) cert_data = {'private_key': 'private', 'data': 'certificate_data'} certificate = certs.Certificate(certs.CertificateManager(None), cert_data) TEST.certs.add(certificate) # Availability Zones TEST.availability_zones.add(availability_zones.AvailabilityZone( availability_zones.AvailabilityZoneManager(None), { 'zoneName': 'nova', 'zoneState': {'available': True}, 'hosts': { "host001": { "nova-network": { "active": True, "available": True, }, }, }, }, )) # hypervisors hypervisor_1 = hypervisors.Hypervisor( hypervisors.HypervisorManager(None), { "service": {"host": "devstack001", "id": 3}, "vcpus_used": 1, "hypervisor_type": "QEMU", "local_gb_used": 20, "hypervisor_hostname": "devstack001", "memory_mb_used": 1500, "memory_mb": 2000, "current_workload": 0, "vcpus": 1, "cpu_info": '{"vendor": "Intel", "model": "core2duo",' '"arch": "x86_64", "features": ["lahf_lm"' ', "rdtscp"], "topology": {"cores": 1, "t' 'hreads": 1, "sockets": 1}}', "running_vms": 1, "free_disk_gb": 9, "hypervisor_version": 1002000, "disk_available_least": 6, "local_gb": 29, "free_ram_mb": 500, "id": 1, "servers": [{"name": "test_name", "uuid": "test_uuid"}] }, ) hypervisor_2 = hypervisors.Hypervisor( hypervisors.HypervisorManager(None), { "service": {"host": "devstack002", "id": 4}, "vcpus_used": 1, "hypervisor_type": "QEMU", "local_gb_used": 20, "hypervisor_hostname": "devstack001", "memory_mb_used": 1500, "memory_mb": 2000, "current_workload": 0, "vcpus": 1, "cpu_info": '{"vendor": "Intel", "model": "core2duo",' '"arch": "x86_64", "features": ["lahf_lm"' ', "rdtscp"], "topology": {"cores": 1, "t' 'hreads": 1, "sockets": 1}}', "running_vms": 1, "free_disk_gb": 9, "hypervisor_version": 1002000, "disk_available_least": 6, "local_gb": 29, "free_ram_mb": 500, "id": 2, "servers": [{"name": "test_name_2", "uuid": "test_uuid_2"}] }, ) hypervisor_3 = hypervisors.Hypervisor( hypervisors.HypervisorManager(None), { "service": {"host": "instance-host", "id": 5}, "vcpus_used": 1, "hypervisor_type": "QEMU", "local_gb_used": 20, "hypervisor_hostname": "devstack003", "memory_mb_used": 1500, "memory_mb": 2000, "current_workload": 0, "vcpus": 1, "cpu_info": '{"vendor": "Intel", "model": "core2duo",' '"arch": "x86_64", "features": ["lahf_lm"' ', "rdtscp"], "topology": {"cores": 1, "t' 'hreads": 1, "sockets": 1}}', "running_vms": 1, "free_disk_gb": 9, "hypervisor_version": 1002000, "disk_available_least": 6, "local_gb": 29, "free_ram_mb": 500, "id": 3, }, ) TEST.hypervisors.add(hypervisor_1) TEST.hypervisors.add(hypervisor_2) TEST.hypervisors.add(hypervisor_3) TEST.hypervisors.stats = { "hypervisor_statistics": { "count": 5, "vcpus_used": 3, "local_gb_used": 15, "memory_mb": 483310, "current_workload": 0, "vcpus": 160, "running_vms": 3, "free_disk_gb": 12548, "disk_available_least": 12556, "local_gb": 12563, "free_ram_mb": 428014, "memory_mb_used": 55296, } } # Services service_1 = services.Service(services.ServiceManager(None), { "status": "enabled", "binary": "nova-conductor", "zone": "internal", "state": "up", "updated_at": "2013-07-08T05:21:00.000000", "host": "devstack001", "disabled_reason": None, }) service_2 = services.Service(services.ServiceManager(None), { "status": "enabled", "binary": "nova-compute", "zone": "nova", "state": "up", "updated_at": "2013-07-08T05:20:51.000000", "host": "devstack001", "disabled_reason": None, }) service_3 = services.Service(services.ServiceManager(None), { "status": "enabled", "binary": "nova-compute", "zone": "nova", "state": "down", "updated_at": "2013-07-08T04:20:51.000000", "host": "devstack002", "disabled_reason": None, }) service_4 = services.Service(services.ServiceManager(None), { "status": "disabled", "binary": "nova-compute", "zone": "nova", "state": "up", "updated_at": "2013-07-08T04:20:51.000000", "host": "devstack003", "disabled_reason": None, }) TEST.services.add(service_1) TEST.services.add(service_2) TEST.services.add(service_3) TEST.services.add(service_4) # Aggregates aggregate_1 = aggregates.Aggregate(aggregates.AggregateManager(None), { "name": "foo", "availability_zone": "testing", "deleted": 0, "created_at": "2013-07-04T13:34:38.000000", "updated_at": None, "hosts": ["foo", "bar"], "deleted_at": None, "id": 1, "metadata": {"foo": "testing", "bar": "testing"}, }) aggregate_2 = aggregates.Aggregate(aggregates.AggregateManager(None), { "name": "bar", "availability_zone": "testing", "deleted": 0, "created_at": "2013-07-04T13:34:38.000000", "updated_at": None, "hosts": ["foo", "bar"], "deleted_at": None, "id": 2, "metadata": {"foo": "testing", "bar": "testing"}, }) TEST.aggregates.add(aggregate_1) TEST.aggregates.add(aggregate_2) host1 = hosts.Host(hosts.HostManager(None), { "host_name": "devstack001", "service": "compute", "zone": "testing", }) host2 = hosts.Host(hosts.HostManager(None), { "host_name": "devstack002", "service": "nova-conductor", "zone": "testing", }) host3 = hosts.Host(hosts.HostManager(None), { "host_name": "devstack003", "service": "compute", "zone": "testing", }) host4 = hosts.Host(hosts.HostManager(None), { "host_name": "devstack004", "service": "compute", "zone": "testing", }) TEST.hosts.add(host1) TEST.hosts.add(host2) TEST.hosts.add(host3) TEST.hosts.add(host4)
def __init__(self, api_version=None, auth=None, auth_token=None, auth_url=None, cacert=None, cert=None, direct_use=True, endpoint_override=None, endpoint_type='publicURL', extensions=None, http_log_debug=False, insecure=False, logger=None, os_cache=False, password=None, project_domain_id=None, project_domain_name=None, project_id=None, project_name=None, region_name=None, service_name=None, service_type='compute', session=None, timeout=None, timings=False, user_domain_id=None, user_domain_name=None, user_id=None, username=None, **kwargs): """Initialization of Client object. :param api_version: Compute API version :type api_version: novaclient.api_versions.APIVersion :param str auth: Auth :param str auth_token: Auth token :param str auth_url: Auth URL :param str cacert: ca-certificate :param str cert: certificate :param bool direct_use: Inner variable of novaclient. Do not use it outside novaclient. It's restricted. :param str endpoint_override: Bypass URL :param str endpoint_type: Endpoint Type :param str extensions: Extensions :param bool http_log_debug: Enable debugging for HTTP connections :param bool insecure: Allow insecure :param logging.Logger logger: Logger instance to be used for all logging stuff :param str password: User password :param bool os_cache: OS cache :param str project_domain_id: ID of project domain :param str project_domain_name: Name of project domain :param str project_id: Project/Tenant ID :param str project_name: Project/Tenant name :param str region_name: Region Name :param str service_name: Service Name :param str service_type: Service Type :param str session: Session :param float timeout: API timeout, None or 0 disables :param bool timings: Timings :param str user_domain_id: ID of user domain :param str user_domain_name: Name of user domain :param str user_id: User ID :param str username: Username """ if direct_use: raise exceptions.Forbidden( 403, _LE("'novaclient.v2.client.Client' is not designed to be " "initialized directly. It is inner class of " "novaclient. You should use " "'novaclient.client.Client' instead. Related lp " "bug-report: 1493576")) # NOTE(cyeoh): In the novaclient context (unlike Nova) the # project_id is not the same as the tenant_id. Here project_id # is a name (what the Nova API often refers to as a project or # tenant name) and tenant_id is a UUID (what the Nova API # often refers to as a project_id or tenant_id). self.project_id = project_id self.project_name = project_name self.user_id = user_id self.flavors = flavors.FlavorManager(self) self.flavor_access = flavor_access.FlavorAccessManager(self) self.glance = images.GlanceManager(self) self.limits = limits.LimitsManager(self) self.servers = servers.ServerManager(self) self.versions = versions.VersionManager(self) # extensions self.agents = agents.AgentsManager(self) self.dns_domains = floating_ip_dns.FloatingIPDNSDomainManager(self) self.dns_entries = floating_ip_dns.FloatingIPDNSEntryManager(self) self.cloudpipe = cloudpipe.CloudpipeManager(self) self.certs = certs.CertificateManager(self) self.floating_ips = floating_ips.FloatingIPManager(self) self.floating_ip_pools = floating_ip_pools.FloatingIPPoolManager(self) self.fping = fping.FpingManager(self) self.volumes = volumes.VolumeManager(self) self.keypairs = keypairs.KeypairManager(self) self.networks = networks.NetworkManager(self) self.neutron = networks.NeutronManager(self) self.quota_classes = quota_classes.QuotaClassSetManager(self) self.quotas = quotas.QuotaSetManager(self) self.security_groups = security_groups.SecurityGroupManager(self) self.security_group_rules = \ security_group_rules.SecurityGroupRuleManager(self) self.security_group_default_rules = \ security_group_default_rules.SecurityGroupDefaultRuleManager(self) self.usage = usage.UsageManager(self) self.virtual_interfaces = \ virtual_interfaces.VirtualInterfaceManager(self) self.aggregates = aggregates.AggregateManager(self) self.hosts = hosts.HostManager(self) self.hypervisors = hypervisors.HypervisorManager(self) self.hypervisor_stats = hypervisors.HypervisorStatsManager(self) self.services = services.ServiceManager(self) self.fixed_ips = fixed_ips.FixedIPsManager(self) self.floating_ips_bulk = floating_ips_bulk.FloatingIPBulkManager(self) self.os_cache = os_cache self.availability_zones = \ availability_zones.AvailabilityZoneManager(self) self.server_groups = server_groups.ServerGroupsManager(self) self.server_migrations = \ server_migrations.ServerMigrationsManager(self) # V2.0 extensions: # NOTE(andreykurilin): baremetal and tenant_networks extensions are # deprecated now, which is why they are not initialized by default. self.assisted_volume_snapshots = \ assisted_volume_snapshots.AssistedSnapshotManager(self) self.cells = cells.CellsManager(self) self.instance_action = instance_action.InstanceActionManager(self) self.list_extensions = list_extensions.ListExtManager(self) self.migrations = migrations.MigrationManager(self) self.server_external_events = \ server_external_events.ServerExternalEventManager(self) self.logger = logger or logging.getLogger(__name__) # Add in any extensions... if extensions: for extension in extensions: # do not import extensions from contrib directory twice. if extension.name in contrib.V2_0_EXTENSIONS: # NOTE(andreykurilin): this message looks more like # warning or note, but it is not critical, so let's do # not flood "warning" logging level and use just debug.. self.logger.debug( "Nova 2.0 extenstion '%s' is auto-loaded" " by default. You do not need to specify" " it manually.", extension.name) continue if extension.manager_class: setattr(self, extension.name, extension.manager_class(self)) self.client = client._construct_http_client( api_version=api_version, auth=auth, auth_token=auth_token, auth_url=auth_url, cacert=cacert, cert=cert, endpoint_override=endpoint_override, endpoint_type=endpoint_type, http_log_debug=http_log_debug, insecure=insecure, logger=self.logger, os_cache=self.os_cache, password=password, project_domain_id=project_domain_id, project_domain_name=project_domain_name, project_id=project_id, project_name=project_name, region_name=region_name, service_name=service_name, service_type=service_type, session=session, timeout=timeout, timings=timings, user_domain_id=user_domain_id, user_domain_name=user_domain_name, user_id=user_id, username=username, **kwargs)
def data(TEST): TEST.servers = utils.TestDataContainer() TEST.flavors = utils.TestDataContainer() TEST.keypairs = utils.TestDataContainer() TEST.availability_zones = utils.TestDataContainer() # Flavors flavor_1 = flavors.Flavor( flavors.FlavorManager(None), { 'id': "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa", 'name': 'm1.tiny', 'vcpus': 1, 'disk': 0, 'ram': 512, 'swap': 0, 'rxtx_factor': 1, 'extra_specs': {}, 'os-flavor-access:is_public': True, 'OS-FLV-EXT-DATA:ephemeral': 0 }) flavor_2 = flavors.Flavor( flavors.FlavorManager(None), { 'id': "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb", 'name': 'm1.massive', 'vcpus': 1000, 'disk': 1024, 'ram': 10000, 'swap': 0, 'rxtx_factor': 1, 'extra_specs': { 'Trusted': True, 'foo': 'bar' }, 'os-flavor-access:is_public': True, 'OS-FLV-EXT-DATA:ephemeral': 2048 }) flavor_3 = flavors.Flavor( flavors.FlavorManager(None), { 'id': "dddddddd-dddd-dddd-dddd-dddddddddddd", 'name': 'm1.secret', 'vcpus': 1000, 'disk': 1024, 'ram': 10000, 'swap': 0, 'rxtx_factor': 1, 'extra_specs': {}, 'os-flavor-access:is_public': False, 'OS-FLV-EXT-DATA:ephemeral': 2048 }) flavor_4 = flavors.Flavor( flavors.FlavorManager(None), { 'id': "eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee", 'name': 'm1.metadata', 'vcpus': 1000, 'disk': 1024, 'ram': 10000, 'swap': 0, 'rxtx_factor': 1, 'extra_specs': FlavorExtraSpecs({ 'key': 'key_mock', 'value': 'value_mock' }), 'os-flavor-access:is_public': False, 'OS-FLV-EXT-DATA:ephemeral': 2048 }) TEST.flavors.add(flavor_1, flavor_2, flavor_3, flavor_4) # Key pairs keypair = keypairs.Keypair(keypairs.KeypairManager(None), dict(name='keyName')) TEST.keypairs.add(keypair) # Servers vals = { "host": "http://nova.example.com:8774", "name": "server_1", "status": "ACTIVE", "tenant_id": TEST.tenants.first().id, "user_id": TEST.user.id, "server_id": "1", "flavor_id": flavor_1.id, "image_id": TEST.images.first().id, "key_name": keypair.name } server_1 = servers.Server(servers.ServerManager(None), json.loads(SERVER_DATA % vals)['server']) vals.update({"name": "server_2", "status": "BUILD", "server_id": "2"}) server_2 = servers.Server(servers.ServerManager(None), json.loads(SERVER_DATA % vals)['server']) vals.update({"name": "server_4", "status": "PAUSED", "server_id": "4"}) server_4 = servers.Server(servers.ServerManager(None), json.loads(SERVER_DATA % vals)['server']) TEST.servers.add(server_1, server_2, server_4) # Availability Zones TEST.availability_zones.add( availability_zones.AvailabilityZone( availability_zones.AvailabilityZoneManager(None), { 'zoneName': 'nova', 'zoneState': { 'available': True }, 'hosts': { "host001": { "nova-network": { "active": True, "available": True, }, }, }, }, ))
def data(TEST): cluster1 = clusters.Cluster(clusters.Clusters(None), CLUSTER_DATA_ONE) cluster2 = clusters.Cluster(clusters.Clusters(None), CLUSTER_DATA_TWO) database1 = instances.Instance(instances.Instances(None), DATABASE_DATA_ONE) database2 = instances.Instance(instances.Instances(None), DATABASE_DATA_TWO) database3 = instances.Instance(instances.Instances(None), DATABASE_DATA_THREE) bkup1 = backups.Backup(backups.Backups(None), BACKUP_ONE) bkup2 = backups.Backup(backups.Backups(None), BACKUP_TWO) bkup3 = backups.Backup(backups.Backups(None), BACKUP_TWO_INC) cfg1 = configurations.Configuration(configurations.Configurations(None), CONFIG_ONE) cfg2 = configurations.Configuration(configurations.Configurations(None), CONFIG_TWO) user1 = users.User(users.Users(None), USER_ONE) user_db1 = databases.Database(databases.Databases(None), USER_DB_ONE) user_root1 = databases.Database(databases.Databases(None), USER_ROOT_ONE) datastore1 = datastores.Datastore(datastores.Datastores(None), DATASTORE_ONE) version1 = datastores.\ DatastoreVersion(datastores.DatastoreVersions(None), VERSION_ONE) version2 = datastores.\ DatastoreVersion(datastores.DatastoreVersions(None), VERSION_TWO) flavor1 = flavors.Flavor(flavors.FlavorManager(None), FLAVOR_ONE) flavor2 = flavors.Flavor(flavors.FlavorManager(None), FLAVOR_TWO) flavor3 = flavors.Flavor(flavors.FlavorManager(None), FLAVOR_THREE) datastore_mongodb = datastores.Datastore(datastores.Datastores(None), DATASTORE_MONGODB) version_mongodb_2_6 = datastores.\ DatastoreVersion(datastores.DatastoreVersions(None), VERSION_MONGODB_2_6) datastore_redis = datastores.Datastore(datastores.Datastores(None), DATASTORE_REDIS) version_redis_3_0 = datastores.\ DatastoreVersion(datastores.DatastoreVersions(None), VERSION_REDIS_3_0) datastore_vertica = datastores.Datastore(datastores.Datastores(None), DATASTORE_VERTICA) version_vertica_7_1 = datastores.\ DatastoreVersion(datastores.DatastoreVersions(None), VERSION_VERTICA_7_1) log1 = instances.DatastoreLog(instances.Instances(None), LOG_1) log2 = instances.DatastoreLog(instances.Instances(None), LOG_2) log3 = instances.DatastoreLog(instances.Instances(None), LOG_3) log4 = instances.DatastoreLog(instances.Instances(None), LOG_4) TEST.trove_clusters = utils.TestDataContainer() TEST.trove_clusters.add(cluster1) TEST.trove_clusters.add(cluster2) TEST.databases = utils.TestDataContainer() TEST.database_backups = utils.TestDataContainer() TEST.database_configurations = utils.TestDataContainer() TEST.database_users = utils.TestDataContainer() TEST.database_user_dbs = utils.TestDataContainer() TEST.database_user_roots = utils.TestDataContainer() TEST.database_flavors = utils.TestDataContainer() TEST.databases.add(database1) TEST.databases.add(database2) TEST.databases.add(database3) TEST.database_backups.add(bkup1) TEST.database_backups.add(bkup2) TEST.database_backups.add(bkup3) TEST.database_configurations.add(cfg1) TEST.database_configurations.add(cfg2) TEST.configuration_parameters = utils.TestDataContainer() for parameter in CONFIG_PARAMS_ONE: TEST.configuration_parameters.add( configurations.ConfigurationParameter( configurations.ConfigurationParameters(None), parameter)) TEST.configuration_instances = utils.TestDataContainer() TEST.configuration_instances.add( configurations.Configuration( configurations.Configurations(None), CONFIG_INSTANCE_ONE)) TEST.database_users.add(user1) TEST.database_user_dbs.add(user_db1) TEST.database_user_roots.add(user_root1) TEST.datastores = utils.TestDataContainer() TEST.datastores.add(datastore_mongodb) TEST.datastores.add(datastore_redis) TEST.datastores.add(datastore_vertica) TEST.datastores.add(datastore1) TEST.database_flavors.add(flavor1, flavor2, flavor3) TEST.datastore_versions = utils.TestDataContainer() TEST.datastore_versions.add(version_vertica_7_1) TEST.datastore_versions.add(version_redis_3_0) TEST.datastore_versions.add(version_mongodb_2_6) TEST.datastore_versions.add(version1) TEST.datastore_versions.add(version2) TEST.logs = utils.TestDataContainer() TEST.logs.add(log1, log2, log3, log4)