Refactor InstancePayload creation

The code that filled ip_addresses and flavor fields of the
InstancePayload was duplicated to multiple places. Now it is
refactored to a single place.

Implements: bp versioned-notification-transformation-ocata
Change-Id: I1399d15285677aab4dd79704d21fbaf2bb5e1361
This commit is contained in:
Balazs Gibizer 2016-12-15 15:49:17 +01:00
parent edf51119fa
commit 2066534f57
3 changed files with 20 additions and 48 deletions

View File

@ -36,7 +36,6 @@ from nova import notifications
from nova.notifications.objects import aggregate as aggregate_notification
from nova.notifications.objects import base as notification_base
from nova.notifications.objects import exception as notification_exception
from nova.notifications.objects import flavor as flavor_notification
from nova.notifications.objects import instance as instance_notification
from nova import objects
from nova.objects import fields
@ -328,23 +327,6 @@ def notify_about_instance_usage(notifier, context, instance, event_suffix,
method(context, 'compute.instance.%s' % event_suffix, usage_info)
def _get_instance_ips(instance):
network_info = get_nw_info_for_instance(instance)
ips = []
if network_info is not None:
for vif in network_info:
for ip in vif.fixed_ips():
ips.append(instance_notification.IpPayload(
label=vif["network"]["label"],
mac=vif["address"],
meta=vif["meta"],
port_uuid=vif["id"],
version=ip["version"],
address=ip["address"],
device_name=vif["devname"]))
return ips
def _get_fault_and_priority_from_exc(exception):
fault = None
priority = fields.NotificationPriority.INFO
@ -367,15 +349,10 @@ def notify_about_instance_action(context, instance, host, action, phase=None,
:param binary: the binary emitting the notification
:param exception: the thrown exception (used in error notifications)
"""
ips = _get_instance_ips(instance)
flavor = flavor_notification.FlavorPayload(instance.flavor)
fault, priority = _get_fault_and_priority_from_exc(exception)
payload = instance_notification.InstanceActionPayload(
instance=instance,
fault=fault,
ip_addresses=ips,
flavor=flavor)
fault=fault)
notification = instance_notification.InstanceActionNotification(
context=context,
priority=priority,
@ -403,16 +380,10 @@ def notify_about_volume_swap(context, instance, host, action, phase,
:param new_volume_id: the ID of the volume that is copied to and attached
:param exception: an exception
"""
ips = _get_instance_ips(instance)
flavor = flavor_notification.FlavorPayload(instance.flavor)
fault, priority = _get_fault_and_priority_from_exc(exception)
payload = instance_notification.InstanceActionVolumeSwapPayload(
instance=instance,
fault=fault,
ip_addresses=ips,
flavor=flavor,
old_volume_id=old_volume_id,
new_volume_id=new_volume_id)

View File

@ -34,7 +34,6 @@ from nova.image import glance
from nova import network
from nova.network import model as network_model
from nova.notifications.objects import base as notification_base
from nova.notifications.objects import flavor as flavor_notification
from nova.notifications.objects import instance as instance_notification
from nova import objects
from nova.objects import base as obj_base
@ -280,17 +279,11 @@ def _send_versioned_instance_update(context, instance, payload, host, service):
out_bytes=bw['bw_out'])
for label, bw in payload['bandwidth'].items()]
network_info = instance.info_cache.network_info
flavor = flavor_notification.FlavorPayload(instance.flavor)
versioned_payload = instance_notification.InstanceUpdatePayload(
instance=instance,
state_update=state_update,
audit_period=audit_period,
bandwidth=bandwidth,
ip_addresses=instance_notification.IpPayload.from_network_info(
network_info),
flavor=flavor,
old_display_name=payload.get('old_display_name'))
notification = instance_notification.InstanceUpdateNotification(

View File

@ -11,6 +11,7 @@
# under the License.
from nova.notifications.objects import base
from nova.notifications.objects import flavor as flavor_payload
from nova.objects import base as nova_base
from nova.objects import fields
@ -90,6 +91,20 @@ class InstancePayload(base.NotificationPayloadBase):
def __init__(self, instance, **kwargs):
super(InstancePayload, self).__init__(**kwargs)
# Note(gibi): ugly but needed to avoid cyclic import
from nova.compute import utils
network_info = utils.get_nw_info_for_instance(instance)
ips = IpPayload.from_network_info(network_info)
flavor = flavor_payload.FlavorPayload(flavor=instance.flavor)
super(InstancePayload, self).__init__(
ip_addresses=ips,
flavor=flavor,
**kwargs)
self.populate_schema(instance=instance)
@ -103,12 +118,10 @@ class InstanceActionPayload(InstancePayload):
'fault': fields.ObjectField('ExceptionPayload', nullable=True),
}
def __init__(self, instance, fault, ip_addresses, flavor, **kwargs):
def __init__(self, instance, fault, **kwargs):
super(InstanceActionPayload, self).__init__(
instance=instance,
fault=fault,
ip_addresses=ip_addresses,
flavor=flavor,
**kwargs)
@ -123,13 +136,10 @@ class InstanceActionVolumeSwapPayload(InstanceActionPayload):
'new_volume_id': fields.UUIDField(),
}
def __init__(self, instance, fault, ip_addresses, flavor,
old_volume_id, new_volume_id):
def __init__(self, instance, fault, old_volume_id, new_volume_id):
super(InstanceActionVolumeSwapPayload, self).__init__(
instance=instance,
fault=fault,
ip_addresses=ip_addresses,
flavor=flavor,
old_volume_id=old_volume_id,
new_volume_id=new_volume_id)
@ -146,12 +156,10 @@ class InstanceUpdatePayload(InstancePayload):
'old_display_name': fields.StringField(nullable=True)
}
def __init__(self, instance, flavor, ip_addresses, state_update,
audit_period, bandwidth, old_display_name):
def __init__(self, instance, state_update, audit_period, bandwidth,
old_display_name):
super(InstanceUpdatePayload, self).__init__(
instance=instance,
flavor=flavor,
ip_addresses=ip_addresses,
state_update=state_update,
audit_period=audit_period,
bandwidth=bandwidth,