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 695e6490bf44..e33c0717f840 100644 --- a/doc/notification_samples/instance-create-end.json +++ b/doc/notification_samples/instance-create-end.json @@ -51,11 +51,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 3bb25aa7b247..846f56ae3d2e 100644 --- a/doc/notification_samples/instance-create-error.json +++ b/doc/notification_samples/instance-create-error.json @@ -48,11 +48,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 c42bd568dfab..9c730f7b2b69 100644 --- a/doc/notification_samples/instance-create-start.json +++ b/doc/notification_samples/instance-create-start.json @@ -38,11 +38,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 55922f0a2928..92cc3e59e461 100644 --- a/doc/notification_samples/instance-delete-end.json +++ b/doc/notification_samples/instance-delete-end.json @@ -38,11 +38,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 345641d9832c..08fb67c73b54 100644 --- a/doc/notification_samples/instance-delete-start.json +++ b/doc/notification_samples/instance-delete-start.json @@ -51,11 +51,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 e0a60fd4b6ce..52323bfe19a4 100644 --- a/doc/notification_samples/instance-pause-end.json +++ b/doc/notification_samples/instance-pause-end.json @@ -51,11 +51,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 51da25564ad9..8af184bbb60e 100644 --- a/doc/notification_samples/instance-pause-start.json +++ b/doc/notification_samples/instance-pause-start.json @@ -51,11 +51,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 a98247db234f..7c5084571eaf 100644 --- a/doc/notification_samples/instance-power_off-end.json +++ b/doc/notification_samples/instance-power_off-end.json @@ -51,11 +51,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 055bdd0b04cd..daa721679e4f 100644 --- a/doc/notification_samples/instance-power_off-start.json +++ b/doc/notification_samples/instance-power_off-start.json @@ -51,11 +51,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 eb6f9d57aaf1..08d46a2208c0 100644 --- a/doc/notification_samples/instance-power_on-end.json +++ b/doc/notification_samples/instance-power_on-end.json @@ -51,11 +51,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 5a5dcae4ff94..ba6e514183e2 100644 --- a/doc/notification_samples/instance-power_on-start.json +++ b/doc/notification_samples/instance-power_on-start.json @@ -51,11 +51,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 8fb047fa665e..27c90fa92339 100644 --- a/doc/notification_samples/instance-resize-end.json +++ b/doc/notification_samples/instance-resize-end.json @@ -51,11 +51,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 bde41faa5919..b56071f97fd6 100644 --- a/doc/notification_samples/instance-resize-start.json +++ b/doc/notification_samples/instance-resize-start.json @@ -51,11 +51,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 9fa6527abfe7..007ee71646aa 100644 --- a/doc/notification_samples/instance-resize_finish-end.json +++ b/doc/notification_samples/instance-resize_finish-end.json @@ -51,11 +51,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 d0417cfc7a1d..1787f20e66cd 100644 --- a/doc/notification_samples/instance-resize_finish-start.json +++ b/doc/notification_samples/instance-resize_finish-start.json @@ -51,11 +51,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 4e741e2e69f3..0c5ca25391dd 100644 --- a/doc/notification_samples/instance-restore-end.json +++ b/doc/notification_samples/instance-restore-end.json @@ -51,11 +51,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 d937b2d8beb3..f0d6e124f239 100644 --- a/doc/notification_samples/instance-restore-start.json +++ b/doc/notification_samples/instance-restore-start.json @@ -51,11 +51,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 3ca6c6e8cbb6..c2589c022720 100644 --- a/doc/notification_samples/instance-resume-end.json +++ b/doc/notification_samples/instance-resume-end.json @@ -51,11 +51,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 01998c6ffbb3..f5efef50120c 100644 --- a/doc/notification_samples/instance-resume-start.json +++ b/doc/notification_samples/instance-resume-start.json @@ -51,11 +51,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 587d62732515..a18b3e1a8a9d 100644 --- a/doc/notification_samples/instance-shelve-end.json +++ b/doc/notification_samples/instance-shelve-end.json @@ -51,11 +51,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 a25b7aad9196..3f0066e17d05 100644 --- a/doc/notification_samples/instance-shelve-start.json +++ b/doc/notification_samples/instance-shelve-start.json @@ -51,11 +51,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 8b038489aa7d..00bf5ddb2a0b 100644 --- a/doc/notification_samples/instance-shelve_offload-end.json +++ b/doc/notification_samples/instance-shelve_offload-end.json @@ -51,11 +51,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 c3b1fc103a66..570ba445fa45 100644 --- a/doc/notification_samples/instance-shelve_offload-start.json +++ b/doc/notification_samples/instance-shelve_offload-start.json @@ -51,11 +51,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 7c1a1aa6b2f4..308b0ac4bbe5 100644 --- a/doc/notification_samples/instance-shutdown-end.json +++ b/doc/notification_samples/instance-shutdown-end.json @@ -51,11 +51,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 931c4af9aab1..2e1c6e8bd648 100644 --- a/doc/notification_samples/instance-shutdown-start.json +++ b/doc/notification_samples/instance-shutdown-start.json @@ -51,11 +51,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 8806df7cf2a3..f93ef7a0f5a7 100644 --- a/doc/notification_samples/instance-snapshot-end.json +++ b/doc/notification_samples/instance-snapshot-end.json @@ -51,11 +51,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 0dfba91da6ed..43f9bf14fb9f 100644 --- a/doc/notification_samples/instance-snapshot-start.json +++ b/doc/notification_samples/instance-snapshot-start.json @@ -51,11 +51,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 1421fc6b2a4a..9fd890efe468 100644 --- a/doc/notification_samples/instance-suspend-end.json +++ b/doc/notification_samples/instance-suspend-end.json @@ -51,11 +51,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 d4b3125364d8..5c9e3f7cf7bc 100644 --- a/doc/notification_samples/instance-suspend-start.json +++ b/doc/notification_samples/instance-suspend-start.json @@ -51,11 +51,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 457674e764b2..a5d2482fed54 100644 --- a/doc/notification_samples/instance-unpause-end.json +++ b/doc/notification_samples/instance-unpause-end.json @@ -51,11 +51,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 2b76895168eb..8f8fb68f17c2 100644 --- a/doc/notification_samples/instance-unpause-start.json +++ b/doc/notification_samples/instance-unpause-start.json @@ -51,11 +51,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 da37eba6eb7a..b2288d0a8772 100644 --- a/doc/notification_samples/instance-unshelve-end.json +++ b/doc/notification_samples/instance-unshelve-end.json @@ -51,11 +51,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 9ad08d63808e..47bceec5f558 100644 --- a/doc/notification_samples/instance-unshelve-start.json +++ b/doc/notification_samples/instance-unshelve-start.json @@ -51,11 +51,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 ddfcd5aa29e8..f3ad7e27d129 100644 --- a/doc/notification_samples/instance-update.json +++ b/doc/notification_samples/instance-update.json @@ -56,11 +56,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 fd02c9d8ac8d..f0358a5c9b2d 100644 --- a/doc/notification_samples/instance-volume_swap-end.json +++ b/doc/notification_samples/instance-volume_swap-end.json @@ -19,13 +19,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 61fc9438f50f..01bc37be7b7f 100644 --- a/doc/notification_samples/instance-volume_swap-error.json +++ b/doc/notification_samples/instance-volume_swap-error.json @@ -29,13 +29,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 2b3e0196cc4f..963f8fe63f19 100644 --- a/doc/notification_samples/instance-volume_swap-start.json +++ b/doc/notification_samples/instance-volume_swap-start.json @@ -19,13 +19,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 6b9ad4f8f7c7..9d43419c9ee8 100644 --- a/nova/tests/unit/notifications/objects/test_notification.py +++ b/nova/tests/unit/notifications/objects/test_notification.py @@ -265,7 +265,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.1-8d12efc3251c606b61b3d479a9da51be', '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