This moves the specs that were completed in Ocata from the 'approved' directory to the 'implemented' directory and updates the redirects file. This also fixes a bug in the move-implemented-specs script such that we filter out completed blueprints which are not implemented, which was the case with blueprint cold-migration-with-target-ocata which was superseded. Change-Id: I476e2e2d4bb089d901b887ce7728fc29c35a0957
219 lines
5.7 KiB
ReStructuredText
219 lines
5.7 KiB
ReStructuredText
..
|
|
This work is licensed under a Creative Commons Attribution 3.0 Unported
|
|
License.
|
|
|
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
|
|
|
==================================
|
|
Notifications on flavor operations
|
|
==================================
|
|
|
|
https://blueprints.launchpad.net/nova/+spec/flavor-notifications
|
|
|
|
Nova currently does not send notifications on flavor create/update/delete
|
|
operations.
|
|
|
|
Flavors have a base set of attributes (id, name, cpus, ram, disk, swap,
|
|
ephemeral, rxtx). Privately accessible flavors also have a set of tenants
|
|
allowed to use them. Finally, they also have additional information
|
|
(accessed through get_keys() from the API but also referred to as extra_specs).
|
|
|
|
It would be useful to receive create, update and delete notifications on
|
|
any of this information changing, and the payload should contain the same
|
|
information for create and update as accessible from the API.
|
|
|
|
Problem description
|
|
===================
|
|
|
|
Use Cases
|
|
---------
|
|
|
|
An external system like Searchlight[1] wants to index the flavors which
|
|
makes the query for large number of flavors faster and efficient. This
|
|
will allow powerful querying as well unified search across openstack
|
|
resources (flavor being one of them).
|
|
|
|
The maintainer wants to get the notifications when there are flavors added,
|
|
updated or destroyed.
|
|
|
|
Proposed change
|
|
===============
|
|
|
|
Versioned notifications will be added for the following actions:
|
|
|
|
* Flavor.create
|
|
* Flavor.save_projects
|
|
* Flavor.add_access
|
|
* Flavor.remove_access
|
|
* Flavor.save_extra_specs
|
|
* Flavor.destroy
|
|
|
|
.. note:: Flavor doesn't have an update API, the updating action for flavor
|
|
is combined with delete and create.
|
|
|
|
Alternatives
|
|
------------
|
|
None
|
|
|
|
Data model impact
|
|
-----------------
|
|
|
|
No database schema change is needed.
|
|
|
|
The following new object will be added to flavor for create, save_projects,
|
|
and save_extra_specs.
|
|
|
|
.. code-block:: python
|
|
|
|
@base.NovaObjectRegistry.register
|
|
class FlavorNotification(notification.NotificationBase):
|
|
# Version 1.0: Initial version
|
|
VERSION = '1.0'
|
|
fields = {
|
|
'payload': fields.ObjectField('FlavorPayload')
|
|
}
|
|
|
|
@base.NovaObjectRegistry.register
|
|
class FlavorPayload(notification.NotificationPayloadBase):
|
|
# Version 1.0: Initial version
|
|
SCHEMA = {
|
|
'id': ('flavor', 'flavorid'),
|
|
'name': ('flavor', 'name'),
|
|
'ram': ('flavor', 'memory_mb'),
|
|
'vcpus': ('flavor', 'vcpus'),
|
|
'disk': ('flavor', 'root_gb'),
|
|
'ephemeral': ('flavor', 'ephemeral_gb'),
|
|
'swap': ('flavor', 'swap'),
|
|
'rxtx_factor': ('flavor', 'rxtx_factor'),
|
|
'vcpu_weight': ('flavor', 'vcpu_weight'),
|
|
'disabled': ('flavor', 'disabled'),
|
|
'is_public': ('flavor', 'is_public'),
|
|
'extra_specs': ('flavor', 'extra_specs'),
|
|
'projects': ('flavor', 'projects'),
|
|
}
|
|
VERSION = '1.0'
|
|
fields = {
|
|
'id': fields.StringField(),
|
|
'name': fields.StringField(nullable=True),
|
|
'ram': fields.IntegerField(),
|
|
'vcpus': fields.IntegerField(),
|
|
'disk': fields.IntegerField(),
|
|
'ephemeral': fields.IntegerField(),
|
|
'swap': fields.IntegerField(),
|
|
'rxtx_factor': fields.FloatField(nullable=True),
|
|
'vcpu_weight': fields.IntegerField(nullable=True),
|
|
'disabled': fields.BooleanField(),
|
|
'is_public': fields.BooleanField(),
|
|
'extra_specs': fields.DictOfStringsField(),
|
|
'projects': fields.ListOfStringsField(),
|
|
}
|
|
def __init__(self, flavor):
|
|
super(FlavorPayload, self).__init__()
|
|
self.populate_schema(flavor=flavor)
|
|
|
|
The following new object will be added to flavor for destroy:
|
|
|
|
.. code-block:: python
|
|
|
|
@base.NovaObjectRegistry.register
|
|
class FlavorDestroyNotification(notification.NotificationBase):
|
|
# Version 1.0: Initial version
|
|
VERSION = '1.0'
|
|
fields = {
|
|
'payload': fields.ObjectField('FlavorDestroyPayload')
|
|
}
|
|
|
|
@base.NovaObjectRegistry.register
|
|
class FlavorDestroyPayload(notification.NotificationPayloadBase):
|
|
# Version 1.0: Initial version
|
|
SCHEMA = {
|
|
'id': ('flavor', 'flavorid'),
|
|
}
|
|
VERSION = '1.0'
|
|
fields = {
|
|
'id': fields.StringField(),
|
|
}
|
|
def __init__(self, flavor):
|
|
super(FlavorDestroyPayload, self).__init__()
|
|
self.populate_schema(flavor=flavor)
|
|
|
|
The definition of NotificationBase can be found [2].
|
|
|
|
REST API impact
|
|
---------------
|
|
None
|
|
|
|
Security impact
|
|
---------------
|
|
None
|
|
|
|
Notifications impact
|
|
--------------------
|
|
|
|
New notifications for flavor different actions will be emitted to a amqp topic
|
|
called 'versioned_notifications'.
|
|
|
|
Other end user impact
|
|
---------------------
|
|
None
|
|
|
|
Performance Impact
|
|
------------------
|
|
|
|
Notifications will be emitted if the versioned notification is enabled.
|
|
|
|
Other deployer impact
|
|
---------------------
|
|
None
|
|
|
|
Developer impact
|
|
----------------
|
|
None
|
|
|
|
Implementation
|
|
==============
|
|
|
|
Assignee(s)
|
|
-----------
|
|
|
|
Primary assignee:
|
|
liyingjun
|
|
|
|
Work Items
|
|
----------
|
|
|
|
* Add versioned notifications for flavor
|
|
|
|
Dependencies
|
|
============
|
|
None
|
|
|
|
Testing
|
|
=======
|
|
|
|
Besides unit test new functional test cases will be added to cover the
|
|
new notifications and the tests will assert the validity of the stored
|
|
notification samples as well.
|
|
|
|
Documentation Impact
|
|
====================
|
|
None
|
|
|
|
References
|
|
==========
|
|
|
|
[1]: Searchlight: http://docs.openstack.org/developer/searchlight/index.html
|
|
|
|
[2]: Versioned notification: http://docs.openstack.org/developer/nova/notifications.html#versioned-notifications
|
|
|
|
History
|
|
=======
|
|
|
|
.. list-table:: Revisions
|
|
:header-rows: 1
|
|
|
|
* - Release Name
|
|
- Description
|
|
* - Ocata
|
|
- Introduced
|