From e6b4c646b35e9db85272f93c6214bf6a94cb3446 Mon Sep 17 00:00:00 2001 From: Rick Harris Date: Fri, 20 Apr 2012 04:09:08 +0000 Subject: Moves `usage_from_instance` into nova.compute.utils. Change-Id: If6ae23847fb6d150f97a538dc37d47279c183243 --- nova/compute/manager.py | 8 ++++---- nova/compute/utils.py | 32 +++++++++++++++++++++++++++++++- nova/tests/api/ec2/test_cloud.py | 5 +++-- nova/tests/api/ec2/test_ec2_validate.py | 3 ++- nova/utils.py | 30 ------------------------------ 5 files changed, 40 insertions(+), 38 deletions(-) diff --git a/nova/compute/manager.py b/nova/compute/manager.py index fd4b18c16..90a458df9 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -606,7 +606,7 @@ class ComputeManager(manager.SchedulerDependentManager): def _notify_about_instance_usage(self, instance, event_suffix, usage_info=None, network_info=None): if not usage_info: - usage_info = utils.usage_from_instance(instance, + usage_info = compute_utils.usage_from_instance(instance, network_info=network_info) notifier.notify('compute.%s' % self.host, 'compute.instance.%s' % event_suffix, @@ -1301,7 +1301,7 @@ class ComputeManager(manager.SchedulerDependentManager): 'migration_id': migration_ref['id'], 'image': image}}) - usage_info = utils.usage_from_instance(instance_ref, + usage_info = compute_utils.usage_from_instance(instance_ref, new_instance_type=new_instance_type['name'], new_instance_type_id=new_instance_type['id']) self._notify_about_instance_usage(instance_ref, "resize.prep.end", @@ -1552,7 +1552,7 @@ class ComputeManager(manager.SchedulerDependentManager): vm_state=vm_states.SUSPENDED, task_state=None) - usage_info = utils.usage_from_instance(instance_ref) + usage_info = compute_utils.usage_from_instance(instance_ref) notifier.notify('compute.%s' % self.host, 'compute.instance.suspend', notifier.INFO, usage_info) @@ -1574,7 +1574,7 @@ class ComputeManager(manager.SchedulerDependentManager): vm_state=vm_states.ACTIVE, task_state=None) - usage_info = utils.usage_from_instance(instance_ref) + usage_info = compute_utils.usage_from_instance(instance_ref) notifier.notify('compute.%s' % self.host, 'compute.instance.resume', notifier.INFO, usage_info) diff --git a/nova/compute/utils.py b/nova/compute/utils.py index 17cfdc660..fd922501c 100644 --- a/nova/compute/utils.py +++ b/nova/compute/utils.py @@ -67,7 +67,7 @@ def notify_usage_exists(instance_ref, current_period=False): break bw[label] = dict(bw_in=b.bw_in, bw_out=b.bw_out) - usage_info = utils.usage_from_instance(instance_ref, + usage_info = usage_from_instance(instance_ref, audit_period_beginning=str(audit_start), audit_period_ending=str(audit_end), bandwidth=bw) @@ -190,3 +190,33 @@ def legacy_network_info(network_model): network_info.append((network_dict, info_dict)) return network_info + + +def usage_from_instance(instance_ref, network_info=None, **kw): + def null_safe_str(s): + return str(s) if s else '' + + image_ref_url = "%s/images/%s" % (utils.generate_glance_url(), + instance_ref['image_ref']) + + usage_info = dict( + tenant_id=instance_ref['project_id'], + user_id=instance_ref['user_id'], + instance_id=instance_ref['uuid'], + instance_type=instance_ref['instance_type']['name'], + instance_type_id=instance_ref['instance_type_id'], + memory_mb=instance_ref['memory_mb'], + disk_gb=instance_ref['root_gb'] + instance_ref['ephemeral_gb'], + display_name=instance_ref['display_name'], + created_at=str(instance_ref['created_at']), + deleted_at=null_safe_str(instance_ref['deleted_at']), + launched_at=null_safe_str(instance_ref['launched_at']), + image_ref_url=image_ref_url, + state=instance_ref['vm_state'], + state_description=null_safe_str(instance_ref['task_state'])) + + if network_info is not None: + usage_info['fixed_ips'] = network_info.fixed_ips() + + usage_info.update(kw) + return usage_info diff --git a/nova/tests/api/ec2/test_cloud.py b/nova/tests/api/ec2/test_cloud.py index 78ca7833c..b37b659ac 100644 --- a/nova/tests/api/ec2/test_cloud.py +++ b/nova/tests/api/ec2/test_cloud.py @@ -29,6 +29,7 @@ from nova.api.ec2 import cloud from nova.api.ec2 import ec2utils from nova.api.ec2 import inst_state from nova.compute import power_state +from nova.compute import utils as compute_utils from nova.compute import vm_states from nova import context from nova import db @@ -94,7 +95,7 @@ class CloudTestCase(test.TestCase): def dumb(*args, **kwargs): pass - self.stubs.Set(utils, 'usage_from_instance', dumb) + self.stubs.Set(compute_utils, 'usage_from_instance', dumb) # set up our cloud self.cloud = cloud.CloudController() self.flags(compute_scheduler_driver='nova.scheduler.' @@ -1559,7 +1560,7 @@ class CloudTestCase(test.TestCase): def dumb(*args, **kwargs): pass - self.stubs.Set(utils, 'usage_from_instance', dumb) + self.stubs.Set(compute_utils, 'usage_from_instance', dumb) # NOTE(comstud): Make 'cast' behave like a 'call' which will # ensure that operations complete self.stubs.Set(rpc, 'cast', rpc.call) diff --git a/nova/tests/api/ec2/test_ec2_validate.py b/nova/tests/api/ec2/test_ec2_validate.py index 93ef7eb74..183ec1d99 100644 --- a/nova/tests/api/ec2/test_ec2_validate.py +++ b/nova/tests/api/ec2/test_ec2_validate.py @@ -22,6 +22,7 @@ from nova.api.ec2 import cloud from nova.api.ec2 import ec2utils from nova.api.ec2 import inst_state from nova.compute import power_state +from nova.compute import utils as compute_utils from nova.compute import vm_states from nova import context from nova import db @@ -46,7 +47,7 @@ class EC2ValidateTestCase(test.TestCase): def dumb(*args, **kwargs): pass - self.stubs.Set(utils, 'usage_from_instance', dumb) + self.stubs.Set(compute_utils, 'usage_from_instance', dumb) # set up our cloud self.cloud = cloud.CloudController() diff --git a/nova/utils.py b/nova/utils.py index d12694be2..309863bd5 100644 --- a/nova/utils.py +++ b/nova/utils.py @@ -457,36 +457,6 @@ def last_completed_audit_period(unit=None): return (begin, end) -def usage_from_instance(instance_ref, network_info=None, **kw): - def null_safe_str(s): - return str(s) if s else '' - - image_ref_url = "%s/images/%s" % (generate_glance_url(), - instance_ref['image_ref']) - - usage_info = dict( - tenant_id=instance_ref['project_id'], - user_id=instance_ref['user_id'], - instance_id=instance_ref['uuid'], - instance_type=instance_ref['instance_type']['name'], - instance_type_id=instance_ref['instance_type_id'], - memory_mb=instance_ref['memory_mb'], - disk_gb=instance_ref['root_gb'] + instance_ref['ephemeral_gb'], - display_name=instance_ref['display_name'], - created_at=str(instance_ref['created_at']), - deleted_at=null_safe_str(instance_ref['deleted_at']), - launched_at=null_safe_str(instance_ref['launched_at']), - image_ref_url=image_ref_url, - state=instance_ref['vm_state'], - state_description=null_safe_str(instance_ref['task_state'])) - - if network_info is not None: - usage_info['fixed_ips'] = network_info.fixed_ips() - - usage_info.update(kw) - return usage_info - - def generate_password(length=20, symbolgroups=DEFAULT_PASSWORD_SYMBOLS): """Generate a random password from the supplied symbol groups. -- cgit