diff --git a/doc/notification_samples/flavor-create.json b/doc/notification_samples/flavor-create.json index 280b25b56e20..556a30503b73 100644 --- a/doc/notification_samples/flavor-create.json +++ b/doc/notification_samples/flavor-create.json @@ -2,7 +2,7 @@ "priority": "INFO", "payload": { "nova_object.namespace": "nova", - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.name": "FlavorPayload", "nova_object.data": { "name": "test_flavor", diff --git a/doc/notification_samples/flavor-delete.json b/doc/notification_samples/flavor-delete.json index 794e5c137e9e..f3b925408b14 100644 --- a/doc/notification_samples/flavor-delete.json +++ b/doc/notification_samples/flavor-delete.json @@ -2,7 +2,7 @@ "priority": "INFO", "payload": { "nova_object.namespace": "nova", - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.name": "FlavorPayload", "nova_object.data": { "name": "test_flavor", diff --git a/doc/notification_samples/flavor-update.json b/doc/notification_samples/flavor-update.json new file mode 100644 index 000000000000..0cc4ddf71fb7 --- /dev/null +++ b/doc/notification_samples/flavor-update.json @@ -0,0 +1,28 @@ +{ + "priority": "INFO", + "payload": { + "nova_object.namespace": "nova", + "nova_object.version": "1.2", + "nova_object.name": "FlavorPayload", + "nova_object.data": { + "name": "test_flavor", + "memory_mb": 1024, + "ephemeral_gb": 0, + "disabled": false, + "vcpus": 2, + "extra_specs": { + "key1": "value1", + "key2": "value2" + }, + "projects": ["fake_tenant"], + "swap": 0, + "rxtx_factor": 2.0, + "is_public": false, + "root_gb": 10, + "vcpu_weight": 0, + "flavorid": "a22d5517-147c-4147-a0d1-e698df5cd4e3" + } + }, + "event_type": "flavor.update", + "publisher_id": "nova-api:fake-mini" +} diff --git a/doc/notification_samples/instance-create-end.json b/doc/notification_samples/instance-create-end.json index 3478dd19d9b6..68dcbb1893bc 100644 --- a/doc/notification_samples/instance-create-end.json +++ b/doc/notification_samples/instance-create-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-create-error.json b/doc/notification_samples/instance-create-error.json index cfdbc3a785d0..35be7f9347be 100644 --- a/doc/notification_samples/instance-create-error.json +++ b/doc/notification_samples/instance-create-error.json @@ -46,11 +46,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-create-start.json b/doc/notification_samples/instance-create-start.json index 7d674c1b577a..e6ffc16a0fe9 100644 --- a/doc/notification_samples/instance-create-start.json +++ b/doc/notification_samples/instance-create-start.json @@ -36,11 +36,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-delete-end.json b/doc/notification_samples/instance-delete-end.json index 6e36ad103a63..b99b578f99f8 100644 --- a/doc/notification_samples/instance-delete-end.json +++ b/doc/notification_samples/instance-delete-end.json @@ -36,11 +36,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-delete-start.json b/doc/notification_samples/instance-delete-start.json index e7aa19f7a3d6..c2fc55a6664e 100644 --- a/doc/notification_samples/instance-delete-start.json +++ b/doc/notification_samples/instance-delete-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-pause-end.json b/doc/notification_samples/instance-pause-end.json index 4b546c5931ab..41bc506104e9 100644 --- a/doc/notification_samples/instance-pause-end.json +++ b/doc/notification_samples/instance-pause-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-pause-start.json b/doc/notification_samples/instance-pause-start.json index df197d59e143..4097560b172b 100644 --- a/doc/notification_samples/instance-pause-start.json +++ b/doc/notification_samples/instance-pause-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-power_off-end.json b/doc/notification_samples/instance-power_off-end.json index d93509ab2b14..84b427ed2c16 100644 --- a/doc/notification_samples/instance-power_off-end.json +++ b/doc/notification_samples/instance-power_off-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-power_off-start.json b/doc/notification_samples/instance-power_off-start.json index 2c94077a88c8..33d152d35356 100644 --- a/doc/notification_samples/instance-power_off-start.json +++ b/doc/notification_samples/instance-power_off-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-power_on-end.json b/doc/notification_samples/instance-power_on-end.json index a27dda420173..8a1fafb0deac 100644 --- a/doc/notification_samples/instance-power_on-end.json +++ b/doc/notification_samples/instance-power_on-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-power_on-start.json b/doc/notification_samples/instance-power_on-start.json index f2665c3c63a1..4df3d83e7ccf 100644 --- a/doc/notification_samples/instance-power_on-start.json +++ b/doc/notification_samples/instance-power_on-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-resize-end.json b/doc/notification_samples/instance-resize-end.json index 66ec5dc577e8..05f9e7a3dabc 100644 --- a/doc/notification_samples/instance-resize-end.json +++ b/doc/notification_samples/instance-resize-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-resize-start.json b/doc/notification_samples/instance-resize-start.json index 0d54317d7277..f0db6b99718c 100644 --- a/doc/notification_samples/instance-resize-start.json +++ b/doc/notification_samples/instance-resize-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-resize_finish-end.json b/doc/notification_samples/instance-resize_finish-end.json index 5c0f7cb86e43..83b47dc270eb 100644 --- a/doc/notification_samples/instance-resize_finish-end.json +++ b/doc/notification_samples/instance-resize_finish-end.json @@ -49,11 +49,12 @@ "memory_mb": 256, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-resize_finish-start.json b/doc/notification_samples/instance-resize_finish-start.json index 8c675b9cc153..813f70f735d5 100644 --- a/doc/notification_samples/instance-resize_finish-start.json +++ b/doc/notification_samples/instance-resize_finish-start.json @@ -49,11 +49,12 @@ "memory_mb": 256, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-restore-end.json b/doc/notification_samples/instance-restore-end.json index 60a87058666c..804408f2e54c 100644 --- a/doc/notification_samples/instance-restore-end.json +++ b/doc/notification_samples/instance-restore-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-restore-start.json b/doc/notification_samples/instance-restore-start.json index 8a4df45dfb8e..a2243df4a120 100644 --- a/doc/notification_samples/instance-restore-start.json +++ b/doc/notification_samples/instance-restore-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-resume-end.json b/doc/notification_samples/instance-resume-end.json index d2f8aaeaa28d..60a853aa7f10 100644 --- a/doc/notification_samples/instance-resume-end.json +++ b/doc/notification_samples/instance-resume-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-resume-start.json b/doc/notification_samples/instance-resume-start.json index 55097b89cb3a..8f5c2942338a 100644 --- a/doc/notification_samples/instance-resume-start.json +++ b/doc/notification_samples/instance-resume-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-shelve-end.json b/doc/notification_samples/instance-shelve-end.json index 204cf7933880..b80cb9366aab 100644 --- a/doc/notification_samples/instance-shelve-end.json +++ b/doc/notification_samples/instance-shelve-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-shelve-start.json b/doc/notification_samples/instance-shelve-start.json index c2cca457c332..dfdfe428d426 100644 --- a/doc/notification_samples/instance-shelve-start.json +++ b/doc/notification_samples/instance-shelve-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-shelve_offload-end.json b/doc/notification_samples/instance-shelve_offload-end.json index 262514bda83c..9270dbd1628b 100644 --- a/doc/notification_samples/instance-shelve_offload-end.json +++ b/doc/notification_samples/instance-shelve_offload-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-shelve_offload-start.json b/doc/notification_samples/instance-shelve_offload-start.json index 4e4f7204a4af..6b1a4c11e7d5 100644 --- a/doc/notification_samples/instance-shelve_offload-start.json +++ b/doc/notification_samples/instance-shelve_offload-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-shutdown-end.json b/doc/notification_samples/instance-shutdown-end.json index a9f814c8b909..bd070d39c6fe 100644 --- a/doc/notification_samples/instance-shutdown-end.json +++ b/doc/notification_samples/instance-shutdown-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-shutdown-start.json b/doc/notification_samples/instance-shutdown-start.json index cf5507cb1c1a..5b2c075e98e8 100644 --- a/doc/notification_samples/instance-shutdown-start.json +++ b/doc/notification_samples/instance-shutdown-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-snapshot-end.json b/doc/notification_samples/instance-snapshot-end.json index 093d449c7fed..8c20b13d936b 100644 --- a/doc/notification_samples/instance-snapshot-end.json +++ b/doc/notification_samples/instance-snapshot-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-snapshot-start.json b/doc/notification_samples/instance-snapshot-start.json index 46afcb0dbf67..b6200721b23a 100644 --- a/doc/notification_samples/instance-snapshot-start.json +++ b/doc/notification_samples/instance-snapshot-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-suspend-end.json b/doc/notification_samples/instance-suspend-end.json index 2f9cb0b21d8b..42d7f723351d 100644 --- a/doc/notification_samples/instance-suspend-end.json +++ b/doc/notification_samples/instance-suspend-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-suspend-start.json b/doc/notification_samples/instance-suspend-start.json index 11f23c2d9f57..e1619336f81c 100644 --- a/doc/notification_samples/instance-suspend-start.json +++ b/doc/notification_samples/instance-suspend-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-unpause-end.json b/doc/notification_samples/instance-unpause-end.json index b41b831eeb0f..39327369dbe9 100644 --- a/doc/notification_samples/instance-unpause-end.json +++ b/doc/notification_samples/instance-unpause-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-unpause-start.json b/doc/notification_samples/instance-unpause-start.json index e7777bc732d1..cd419b8fa7fe 100644 --- a/doc/notification_samples/instance-unpause-start.json +++ b/doc/notification_samples/instance-unpause-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-unshelve-end.json b/doc/notification_samples/instance-unshelve-end.json index 492ab15ee6d1..77201fc03935 100644 --- a/doc/notification_samples/instance-unshelve-end.json +++ b/doc/notification_samples/instance-unshelve-end.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-unshelve-start.json b/doc/notification_samples/instance-unshelve-start.json index c8fa1ff0d111..8becf079996f 100644 --- a/doc/notification_samples/instance-unshelve-start.json +++ b/doc/notification_samples/instance-unshelve-start.json @@ -49,11 +49,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id":"fake", diff --git a/doc/notification_samples/instance-update.json b/doc/notification_samples/instance-update.json index 3a5180443613..ec4dd5839f0c 100644 --- a/doc/notification_samples/instance-update.json +++ b/doc/notification_samples/instance-update.json @@ -54,11 +54,12 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, - "nova_object.version": "1.1", + "nova_object.version": "1.2", "nova_object.namespace": "nova" }, "user_id": "fake", diff --git a/doc/notification_samples/instance-volume_swap-end.json b/doc/notification_samples/instance-volume_swap-end.json index 09ed3dbf0041..10b4ea798d7c 100644 --- a/doc/notification_samples/instance-volume_swap-end.json +++ b/doc/notification_samples/instance-volume_swap-end.json @@ -18,13 +18,14 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, "nova_object.name": "FlavorPayload", "nova_object.namespace": "nova", - "nova_object.version": "1.1" + "nova_object.version": "1.2" }, "host": "compute", "host_name": "some-server", diff --git a/doc/notification_samples/instance-volume_swap-error.json b/doc/notification_samples/instance-volume_swap-error.json index ab308770cc97..33e706fa2701 100644 --- a/doc/notification_samples/instance-volume_swap-error.json +++ b/doc/notification_samples/instance-volume_swap-error.json @@ -28,13 +28,14 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, "nova_object.name": "FlavorPayload", "nova_object.namespace": "nova", - "nova_object.version": "1.1" + "nova_object.version": "1.2" }, "host": "compute", "host_name": "some-server", diff --git a/doc/notification_samples/instance-volume_swap-start.json b/doc/notification_samples/instance-volume_swap-start.json index b0ab184d2332..38ff0ce4877b 100644 --- a/doc/notification_samples/instance-volume_swap-start.json +++ b/doc/notification_samples/instance-volume_swap-start.json @@ -18,13 +18,14 @@ "memory_mb": 512, "disabled": false, "rxtx_factor": 1.0, + "extra_specs": {}, "swap": 0, "is_public": true, "vcpu_weight": 0 }, "nova_object.name": "FlavorPayload", "nova_object.namespace": "nova", - "nova_object.version": "1.1" + "nova_object.version": "1.2" }, "host": "compute", "host_name": "some-server", diff --git a/nova/notifications/objects/flavor.py b/nova/notifications/objects/flavor.py index 8647c86b27a8..ed004f5e1d05 100644 --- a/nova/notifications/objects/flavor.py +++ b/nova/notifications/objects/flavor.py @@ -18,6 +18,7 @@ from nova.objects import fields @base.notification_sample('flavor-create.json') +@base.notification_sample('flavor-update.json') @base.notification_sample('flavor-delete.json') @nova_base.NovaObjectRegistry.register_notification class FlavorNotification(base.NotificationBase): @@ -33,7 +34,8 @@ class FlavorNotification(base.NotificationBase): class FlavorPayload(base.NotificationPayloadBase): # Version 1.0: Initial version # Version 1.1: Add other fields for Flavor - VERSION = '1.1' + # Version 1.2: Add extra_specs and projects fields + VERSION = '1.2' # NOTE: if we'd want to rename some fields(memory_mb->ram, root_gb->disk, # ephemeral_gb: ephemeral), bumping to payload version 2.0 will be needed. @@ -49,6 +51,8 @@ class FlavorPayload(base.NotificationPayloadBase): 'vcpu_weight': ('flavor', 'vcpu_weight'), 'disabled': ('flavor', 'disabled'), 'is_public': ('flavor', 'is_public'), + 'extra_specs': ('flavor', 'extra_specs'), + 'projects': ('flavor', 'projects'), } fields = { @@ -63,6 +67,8 @@ class FlavorPayload(base.NotificationPayloadBase): 'vcpu_weight': fields.IntegerField(nullable=True), 'disabled': fields.BooleanField(), 'is_public': fields.BooleanField(), + 'extra_specs': fields.DictOfStringsField(), + 'projects': fields.ListOfStringsField(), } def __init__(self, flavor, **kwargs): @@ -80,3 +86,6 @@ class FlavorPayload(base.NotificationPayloadBase): primitive.pop('vcpu_weight', None) primitive.pop('disabled', None) primitive.pop('is_public', None) + if target_version < (1, 2): + primitive.pop('extra_specs', None) + primitive.pop('projects', None) diff --git a/nova/objects/flavor.py b/nova/objects/flavor.py index 29e3e0aa9cc6..a46acf768e8a 100644 --- a/nova/objects/flavor.py +++ b/nova/objects/flavor.py @@ -448,6 +448,7 @@ class Flavor(base.NovaPersistentObject, base.NovaObject, reason='projects modified') self._add_access(project_id) self._load_projects() + self._send_notification(fields.NotificationAction.UPDATE) def _remove_access(self, project_id): if self.in_api: @@ -462,6 +463,7 @@ class Flavor(base.NovaPersistentObject, base.NovaObject, reason='projects modified') self._remove_access(project_id) self._load_projects() + self._send_notification(fields.NotificationAction.UPDATE) @staticmethod def _flavor_create(context, updates): @@ -579,6 +581,9 @@ class Flavor(base.NovaPersistentObject, base.NovaObject, if added_projects or deleted_projects: self.save_projects(added_projects, deleted_projects) + if added_keys or deleted_keys or added_projects or deleted_projects: + self._send_notification(fields.NotificationAction.UPDATE) + @staticmethod def _flavor_destroy(context, flavor_id=None, flavorid=None): return _flavor_destroy(context, flavor_id=flavor_id, flavorid=flavorid) diff --git a/nova/tests/functional/notification_sample_tests/test_flavor.py b/nova/tests/functional/notification_sample_tests/test_flavor.py index 85e4b51c5c3e..b4011fa6b77e 100644 --- a/nova/tests/functional/notification_sample_tests/test_flavor.py +++ b/nova/tests/functional/notification_sample_tests/test_flavor.py @@ -49,3 +49,40 @@ class TestFlavorNotificationSample( 'flavors/a22d5517-147c-4147-a0d1-e698df5cd4e3') self._verify_notification( 'flavor-delete', actual=fake_notifier.VERSIONED_NOTIFICATIONS[1]) + + def test_flavor_update(self): + body = { + "flavor": { + "name": "test_flavor", + "ram": 1024, + "vcpus": 2, + "disk": 10, + "id": "a22d5517-147c-4147-a0d1-e698df5cd4e3", + "os-flavor-access:is_public": False, + "rxtx_factor": 2.0 + } + } + # Create a flavor. + self.admin_api.api_post('flavors', body) + + body = { + "extra_specs": { + "key1": "value1", + "key2": "value2" + } + } + self.admin_api.api_post( + 'flavors/a22d5517-147c-4147-a0d1-e698df5cd4e3/os-extra_specs', + body) + + body = { + "addTenantAccess": { + "tenant": "fake_tenant" + } + } + self.admin_api.api_post( + 'flavors/a22d5517-147c-4147-a0d1-e698df5cd4e3/action', + body) + + self._verify_notification( + 'flavor-update', actual=fake_notifier.VERSIONED_NOTIFICATIONS[2]) diff --git a/nova/tests/unit/notifications/objects/test_flavor.py b/nova/tests/unit/notifications/objects/test_flavor.py index f01c2774ab43..10a044ff86c9 100644 --- a/nova/tests/unit/notifications/objects/test_flavor.py +++ b/nova/tests/unit/notifications/objects/test_flavor.py @@ -28,14 +28,20 @@ class TestFlavorNotification(test.TestCase): @mock.patch('nova.notifications.objects.flavor.FlavorNotification') def _verify_notification(self, flavor_obj, flavor, action, - mock_notification): + mock_notification, project_id=None): notification = mock_notification if action == "CREATE": flavor_obj.create() elif action == "DELETE": flavor_obj.destroy() + elif action == "ADD_ACCESS": + action = "UPDATE" + flavor_obj.add_access(project_id) + elif action == "REMOVE_ACCESS": + action = "UPDATE" + flavor_obj.remove_access(project_id) else: - raise Exception('Unsupported action: %s' % action) + flavor_obj.save() self.assertTrue(notification.called) @@ -68,6 +74,39 @@ class TestFlavorNotification(test.TestCase): mock_create.return_value = flavor self._verify_notification(flavor_obj, flavor, 'CREATE') + @mock.patch('nova.objects.Flavor._flavor_extra_specs_del') + def test_flavor_update_with_notification(self, mock_delete): + flavor = copy.deepcopy(fake_flavor) + flavorid = '1' + flavor['flavorid'] = flavorid + flavor['id'] = flavorid + flavor_obj = objects.Flavor(context=self.ctxt, **flavor) + flavor_obj.obj_reset_changes() + + del flavor_obj.extra_specs['foo'] + del flavor['extra_specs']['foo'] + self._verify_notification(flavor_obj, flavor, "UPDATE") + + projects = ['project-1', 'project-2'] + flavor_obj.projects = projects + flavor['projects'] = projects + self._verify_notification(flavor_obj, flavor, "UPDATE") + + @mock.patch('nova.objects.Flavor._add_access') + @mock.patch('nova.objects.Flavor._remove_access') + def test_flavor_access_with_notification(self, mock_remove_access, + mock_add_access): + flavor = copy.deepcopy(fake_flavor) + flavorid = '1' + flavor['flavorid'] = flavorid + flavor['id'] = flavorid + flavor_obj = objects.Flavor(context=self.ctxt, **flavor) + flavor_obj.obj_reset_changes() + self._verify_notification(flavor_obj, flavor, "ADD_ACCESS", + project_id="project1") + self._verify_notification(flavor_obj, flavor, "REMOVE_ACCESS", + project_id="project1") + @mock.patch('nova.objects.Flavor._flavor_destroy') def test_flavor_destroy_with_notification(self, mock_destroy): flavor = copy.deepcopy(fake_flavor) diff --git a/nova/tests/unit/notifications/objects/test_notification.py b/nova/tests/unit/notifications/objects/test_notification.py index 7b8edd365944..535c5ae2b0c8 100644 --- a/nova/tests/unit/notifications/objects/test_notification.py +++ b/nova/tests/unit/notifications/objects/test_notification.py @@ -263,7 +263,7 @@ notification_object_data = { 'ExceptionNotification': '1.0-a73147b93b520ff0061865849d3dfa56', 'ExceptionPayload': '1.0-27db46ee34cd97e39f2643ed92ad0cc5', 'FlavorNotification': '1.0-a73147b93b520ff0061865849d3dfa56', - 'FlavorPayload': '1.1-e3892169e2c946f6784fe130deaeae4f', + 'FlavorPayload': '1.2-6f73fa3dc2d5f7abff1a27aac70b8759', 'InstanceActionNotification': '1.0-a73147b93b520ff0061865849d3dfa56', 'InstanceActionPayload': '1.0-3145ac549217f46e88173c437917ca7a', 'InstanceActionVolumeSwapNotification': diff --git a/releasenotes/notes/bp-flavor-notifications-7b3a56509c3f138d.yaml b/releasenotes/notes/bp-flavor-notifications-7b3a56509c3f138d.yaml index 67dd27787d2d..f7256d20a3be 100644 --- a/releasenotes/notes/bp-flavor-notifications-7b3a56509c3f138d.yaml +++ b/releasenotes/notes/bp-flavor-notifications-7b3a56509c3f138d.yaml @@ -1,4 +1,11 @@ --- features: - - Support versioned notifications for flavor operations like create and - delete. + - Support versioned notifications for flavor operations like create, delete, + update access and update extra_specs. +issues: + - | + Flavor.projects (access) will not be present in the instance versioned + notifications since notifications currently do not lazy-load fields. This + limitation is being tracked with `bug 1653221`_. + + .. _bug 1653221: https://bugs.launchpad.net/nova/+bug/1653221