)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d11b53e1c79f6036a1e725756e5d63562a6c0e96","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add notification support for trusted_certs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add the \u0027trusted_image_certificates\u0027 field to InstanceCreatePayload"},{"line_number":10,"context_line":"and InstanceActionRebuildPayload notifications."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib5b50a3889ab15d5aac992f92e9be372a915eeff"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5f7c97a3_a8cd23b8","line":9,"range":{"start_line":9,"start_character":9,"end_line":9,"end_character":35},"updated":"2018-05-24 21:25:29.000000000","message":"Why don\u0027t we call it trusted_certs to match the Instance.trusted_certs field?","commit_id":"84e9268570ff76bd8ec02499a40cd8430c94f165"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f6e687eb90ec514d49b6ff1a9a3ffd59e1e03a37","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add notification support for trusted_certs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add the \u0027trusted_image_certificates\u0027 field to InstanceCreatePayload"},{"line_number":10,"context_line":"and InstanceActionRebuildPayload notifications."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ib5b50a3889ab15d5aac992f92e9be372a915eeff"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5f7c97a3_a842030e","line":9,"range":{"start_line":9,"start_character":9,"end_line":9,"end_character":35},"in_reply_to":"5f7c97a3_a8cd23b8","updated":"2018-05-24 21:28:01.000000000","message":"Nevermind, I see the logic, it\u0027s to match the field in the server resource body:\n\nhttps://review.openstack.org/#/c/486204/100/nova/api/openstack/compute/views/servers.py","commit_id":"84e9268570ff76bd8ec02499a40cd8430c94f165"}],"doc/notification_samples/common_payloads/InstanceActionRebuildPayload.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a65f215f185d9ab19740e5ae4dcea75048e737f0","unresolved":false,"context_lines":[{"line_number":7,"context_line":"        ]"},{"line_number":8,"context_line":"    },"},{"line_number":9,"context_line":"    \"nova_object.name\": \"InstanceActionRebuildPayload\","},{"line_number":10,"context_line":"    \"nova_object.version\": \"1.0\""},{"line_number":11,"context_line":"}"}],"source_content_type":"application/json","patch_set":9,"id":"5f7c97a3_eb0d873e","line":10,"range":{"start_line":10,"start_character":27,"end_line":10,"end_character":32},"updated":"2018-05-08 12:39:55.000000000","message":"This should be 1.7 to signal the change of nova_object.name in case of instance.rebuild.* notifications","commit_id":"f45561cb098794396f428b5e5585c23b36e1e9fe"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1a6f0ecb2129fb06f798a654f6cc2b0413606a98","unresolved":false,"context_lines":[{"line_number":7,"context_line":"        ]"},{"line_number":8,"context_line":"    },"},{"line_number":9,"context_line":"    \"nova_object.name\": \"InstanceActionRebuildPayload\","},{"line_number":10,"context_line":"    \"nova_object.version\": \"1.0\""},{"line_number":11,"context_line":"}"}],"source_content_type":"application/json","patch_set":9,"id":"5f7c97a3_5a9563e3","line":10,"range":{"start_line":10,"start_character":27,"end_line":10,"end_character":32},"in_reply_to":"5f7c97a3_eb0d873e","updated":"2018-05-08 15:56:13.000000000","message":"Done","commit_id":"f45561cb098794396f428b5e5585c23b36e1e9fe"}],"doc/notification_samples/common_payloads/TrustedCertsPayload.json":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"747fb03bd1aad6b214be36ffb4410f1421898dfe","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    \"nova_object.namespace\": \"nova\","},{"line_number":4,"context_line":"    \"nova_object.name\": \"TrustedCertsPayload\","},{"line_number":5,"context_line":"    \"nova_object.data\": {"},{"line_number":6,"context_line":"        \"ids\": null"},{"line_number":7,"context_line":"    }"},{"line_number":8,"context_line":"}"}],"source_content_type":"application/json","patch_set":6,"id":"9f6a8fd7_fedc5947","line":6,"range":{"start_line":6,"start_character":15,"end_line":6,"end_character":19},"updated":"2018-05-02 02:56:58.000000000","message":"IMO, \u0027null\u0027 is not appropriate for notification payload samples. A specific value should be included. (e.g. [\u0027cert-id-1\u0027, \u0027cert-id-2\u0027] )","commit_id":"e6b7504546f3fa7d5100600b9a68d445fe06e13d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"a8fc5363a58516f74c7c0c3b935b4ad3b4fb5f1f","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    \"nova_object.namespace\": \"nova\","},{"line_number":4,"context_line":"    \"nova_object.name\": \"TrustedCertsPayload\","},{"line_number":5,"context_line":"    \"nova_object.data\": {"},{"line_number":6,"context_line":"        \"ids\": null"},{"line_number":7,"context_line":"    }"},{"line_number":8,"context_line":"}"}],"source_content_type":"application/json","patch_set":6,"id":"5f7c97a3_00e23030","line":6,"range":{"start_line":6,"start_character":15,"end_line":6,"end_character":19},"in_reply_to":"5f7c97a3_5eee0489","updated":"2018-05-07 19:24:32.000000000","message":"I\u0027ve updated the image_trusted_certificates to have \"cert-id-1\" and \"cert-id-2\" in both create and rebuild notification payloads.  I agree that it is better to include the non-null values, especially since trusted_certs is no longer being added to every payload (since it\u0027s no longer being added at the InstancePayload level).","commit_id":"e6b7504546f3fa7d5100600b9a68d445fe06e13d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d2fd311f55a6c2de971b523ba9aafec74984cf3c","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    \"nova_object.namespace\": \"nova\","},{"line_number":4,"context_line":"    \"nova_object.name\": \"TrustedCertsPayload\","},{"line_number":5,"context_line":"    \"nova_object.data\": {"},{"line_number":6,"context_line":"        \"ids\": null"},{"line_number":7,"context_line":"    }"},{"line_number":8,"context_line":"}"}],"source_content_type":"application/json","patch_set":6,"id":"5f7c97a3_5eee0489","line":6,"range":{"start_line":6,"start_character":15,"end_line":6,"end_character":19},"in_reply_to":"9f6a8fd7_6aa403ba","updated":"2018-05-03 09:41:14.000000000","message":"I thought about in my last review, I\u0027m not sure about what you guys suggested here, as this sample is referenced by all other samples, currently we only do some replaces in related tests, if we change here to [\u00271\u0027, \u00272\u0027] we are going to change alot of the tests or samples, not sure it worth.","commit_id":"e6b7504546f3fa7d5100600b9a68d445fe06e13d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"56edf8ced10f871f628eb9bd39c5b93d8f511dd4","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    \"nova_object.namespace\": \"nova\","},{"line_number":4,"context_line":"    \"nova_object.name\": \"TrustedCertsPayload\","},{"line_number":5,"context_line":"    \"nova_object.data\": {"},{"line_number":6,"context_line":"        \"ids\": null"},{"line_number":7,"context_line":"    }"},{"line_number":8,"context_line":"}"}],"source_content_type":"application/json","patch_set":6,"id":"9f6a8fd7_6aa403ba","line":6,"range":{"start_line":6,"start_character":15,"end_line":6,"end_character":19},"in_reply_to":"9f6a8fd7_fedc5947","updated":"2018-05-02 09:55:43.000000000","message":"+1, let\u0027s make the sample file as complete as possible","commit_id":"e6b7504546f3fa7d5100600b9a68d445fe06e13d"}],"nova/compute/utils.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"72a70284c9dc34a3e6546233949a8cd328c38ccf","unresolved":false,"context_lines":[{"line_number":716,"context_line":""},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"@rpc.if_notifications_enabled"},{"line_number":719,"context_line":"def notify_about_instance_rebuild(context, instance, host, action, phase\u003dNone,"},{"line_number":720,"context_line":"                                  source\u003dfields.NotificationSource.COMPUTE,"},{"line_number":721,"context_line":"                                  exception\u003dNone, bdms\u003dNone):"},{"line_number":722,"context_line":"    \"\"\"Send versioned notification about instance rebuild"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f7c97a3_fe711edf","line":719,"range":{"start_line":719,"start_character":59,"end_line":719,"end_character":65},"updated":"2018-06-14 12:32:57.000000000","message":"well, the action is always the same, right?","commit_id":"3f7c7e9c3e835b178f371baf01a27cbd5df7ebb8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1eae87c9f03d9c79c9043c55bc3908b469653fed","unresolved":false,"context_lines":[{"line_number":716,"context_line":""},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"@rpc.if_notifications_enabled"},{"line_number":719,"context_line":"def notify_about_instance_rebuild(context, instance, host, action, phase\u003dNone,"},{"line_number":720,"context_line":"                                  source\u003dfields.NotificationSource.COMPUTE,"},{"line_number":721,"context_line":"                                  exception\u003dNone, bdms\u003dNone):"},{"line_number":722,"context_line":"    \"\"\"Send versioned notification about instance rebuild"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f7c97a3_37d019c8","line":719,"range":{"start_line":719,"start_character":59,"end_line":719,"end_character":65},"in_reply_to":"5f7c97a3_5e1a927c","updated":"2018-06-14 14:18:29.000000000","message":"Done","commit_id":"3f7c7e9c3e835b178f371baf01a27cbd5df7ebb8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f281405eed35914c62f4a4e7da67a2c21f82b71c","unresolved":false,"context_lines":[{"line_number":716,"context_line":""},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"@rpc.if_notifications_enabled"},{"line_number":719,"context_line":"def notify_about_instance_rebuild(context, instance, host, action, phase\u003dNone,"},{"line_number":720,"context_line":"                                  source\u003dfields.NotificationSource.COMPUTE,"},{"line_number":721,"context_line":"                                  exception\u003dNone, bdms\u003dNone):"},{"line_number":722,"context_line":"    \"\"\"Send versioned notification about instance rebuild"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f7c97a3_5e1a927c","line":719,"range":{"start_line":719,"start_character":59,"end_line":719,"end_character":65},"in_reply_to":"5f7c97a3_fe711edf","updated":"2018-06-14 12:36:48.000000000","message":"True. Also the source param is never used so that can also be hardcoded below","commit_id":"3f7c7e9c3e835b178f371baf01a27cbd5df7ebb8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6c7476435d4660ecf13a9229cd0191cbba5c0ac2","unresolved":false,"context_lines":[{"line_number":716,"context_line":""},{"line_number":717,"context_line":""},{"line_number":718,"context_line":"@rpc.if_notifications_enabled"},{"line_number":719,"context_line":"def notify_about_instance_rebuild(context, instance, host, phase\u003dNone,"},{"line_number":720,"context_line":"                                  exception\u003dNone, bdms\u003dNone):"},{"line_number":721,"context_line":"    \"\"\"Send versioned notification about instance rebuild"},{"line_number":722,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_7e0665d0","line":719,"updated":"2018-06-14 18:11:59.000000000","message":"It would be nice if we had a private method which was mostly notify_about_instance_action but included overriding the payload so we could DRY some of this up, but once you create the payload there isn\u0027t much overlap that\u0027s left so I guess it\u0027s OK to just leave this as a separate method, until we add more stuff later and have to duplicate it throughout (if that happens).","commit_id":"e8ed9aacf846bfe83938e4e95a2c01ff429dbbed"}],"nova/notifications/objects/instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"56edf8ced10f871f628eb9bd39c5b93d8f511dd4","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        \u0027locked\u0027: fields.BooleanField(),"},{"line_number":110,"context_line":"        \u0027auto_disk_config\u0027: fields.DiskConfigField(),"},{"line_number":111,"context_line":"        \u0027request_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":112,"context_line":"        \u0027trusted_image_certificates\u0027: fields.ObjectField("},{"line_number":113,"context_line":"            \u0027TrustedCertsPayload\u0027, nullable\u003dTrue),"},{"line_number":114,"context_line":"    }"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_2a9ccb5b","line":112,"range":{"start_line":112,"start_character":45,"end_line":112,"end_character":56},"updated":"2018-05-02 09:55:43.000000000","message":"What is the reason for the extra indirection here? Could we just take the list of cert ids from the instance and put it into a ListOfStringField directly? Do we foresee that the TrustedCertsPayload will be extended in the future with extra fields?\n\nAlso the REST API presents the certs as a list of cert ids so I think we should align with that model in the notification too.\n\nSomething like http://paste.openstack.org/show/720214/","commit_id":"e6b7504546f3fa7d5100600b9a68d445fe06e13d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"a8fc5363a58516f74c7c0c3b935b4ad3b4fb5f1f","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        \u0027locked\u0027: fields.BooleanField(),"},{"line_number":110,"context_line":"        \u0027auto_disk_config\u0027: fields.DiskConfigField(),"},{"line_number":111,"context_line":"        \u0027request_id\u0027: fields.StringField(nullable\u003dTrue),"},{"line_number":112,"context_line":"        \u0027trusted_image_certificates\u0027: fields.ObjectField("},{"line_number":113,"context_line":"            \u0027TrustedCertsPayload\u0027, nullable\u003dTrue),"},{"line_number":114,"context_line":"    }"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_a0d25c5b","line":112,"range":{"start_line":112,"start_character":45,"end_line":112,"end_character":56},"in_reply_to":"9f6a8fd7_2a9ccb5b","updated":"2018-05-07 19:24:32.000000000","message":"Thank you for the concrete suggestions!  I initially thought the indirection was needed, since the lazy load is required, but now I realize that the simpler approach works and is better.  I have changed this to a ListOfStringsField for both Create and Rebuild payloads.","commit_id":"e6b7504546f3fa7d5100600b9a68d445fe06e13d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"56edf8ced10f871f628eb9bd39c5b93d8f511dd4","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.ip_addresses \u003d IpPayload.from_network_info(network_info)"},{"line_number":120,"context_line":"        self.flavor \u003d flavor_payload.FlavorPayload(flavor\u003dinstance.flavor)"},{"line_number":121,"context_line":"        self.trusted_image_certificates \u003d TrustedCertsPayload("},{"line_number":122,"context_line":"            trusted_certs\u003dinstance.get(\"trusted_certs\", None)"},{"line_number":123,"context_line":"        )"},{"line_number":124,"context_line":"        if bdms is not None:"},{"line_number":125,"context_line":"            self.block_devices \u003d BlockDevicePayload.from_bdms(bdms)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_35e0acfa","line":122,"range":{"start_line":122,"start_character":40,"end_line":122,"end_character":53},"updated":"2018-05-02 09:55:43.000000000","message":"This will trigger the lazy load of the field which do an extra DB query. As this field is added to every instance notification this extra DB query will be triggered in every case. This is a possible performance impact. \n\nWe had similar cases in the past. \n1) BlockDeviceMapping is also lazy loaded and there we decided to guard the lazy loading with a new nova.conf option.\n2) Keypair is also lazy loaded. There we decided to only add the keypairs to the instance.create notification as it cannot change later.\n3) Flavor.projects field is also lazy loaded. There we make sure that when the flavor is accessed through the instance.flavor field then that flavor is orphaned (flavor._context \u003d\u003d None) and therefore no lazy loading happens and the notification field is set to None if the flavor.projects hasn\u0027t been loaded yet.\n\nAs far as I understand the instance.trusted_cert can only be set during instance create and updated during instance rebuild. So here we might take option 2) to avoid the performance impact.","commit_id":"e6b7504546f3fa7d5100600b9a68d445fe06e13d"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"a8fc5363a58516f74c7c0c3b935b4ad3b4fb5f1f","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.ip_addresses \u003d IpPayload.from_network_info(network_info)"},{"line_number":120,"context_line":"        self.flavor \u003d flavor_payload.FlavorPayload(flavor\u003dinstance.flavor)"},{"line_number":121,"context_line":"        self.trusted_image_certificates \u003d TrustedCertsPayload("},{"line_number":122,"context_line":"            trusted_certs\u003dinstance.get(\"trusted_certs\", None)"},{"line_number":123,"context_line":"        )"},{"line_number":124,"context_line":"        if bdms is not None:"},{"line_number":125,"context_line":"            self.block_devices \u003d BlockDevicePayload.from_bdms(bdms)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_c0d51845","line":122,"range":{"start_line":122,"start_character":40,"end_line":122,"end_character":53},"in_reply_to":"5f7c97a3_7e9420e9","updated":"2018-05-07 19:24:32.000000000","message":"I agree that 2) is the best option, so I have added the trusted_image_certificates to the Rebuild and Create notifications only.","commit_id":"e6b7504546f3fa7d5100600b9a68d445fe06e13d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"69f28d403ef55b1b9bc4f083427321fed5ede0ed","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.ip_addresses \u003d IpPayload.from_network_info(network_info)"},{"line_number":120,"context_line":"        self.flavor \u003d flavor_payload.FlavorPayload(flavor\u003dinstance.flavor)"},{"line_number":121,"context_line":"        self.trusted_image_certificates \u003d TrustedCertsPayload("},{"line_number":122,"context_line":"            trusted_certs\u003dinstance.get(\"trusted_certs\", None)"},{"line_number":123,"context_line":"        )"},{"line_number":124,"context_line":"        if bdms is not None:"},{"line_number":125,"context_line":"            self.block_devices \u003d BlockDevicePayload.from_bdms(bdms)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_d4c5c73d","line":122,"range":{"start_line":122,"start_character":40,"end_line":122,"end_character":53},"in_reply_to":"5f7c97a3_b4a4cbba","updated":"2018-05-08 17:08:11.000000000","message":"Personally I\u0027d follow the bdm config option route (1) since trusted_certs is going to require extra configuration by the operator anyway, including in the policy rules. So by default we just wouldn\u0027t include those in the payload. Anyone that is enabling trusted_certs in the REST API and wants to monitor its usage for some reason via versioned notifications could also optional configure the notifications to get those fields.","commit_id":"e6b7504546f3fa7d5100600b9a68d445fe06e13d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"76a30e7cd59ad1bdc8edebb6659c6a4a63c45765","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.ip_addresses \u003d IpPayload.from_network_info(network_info)"},{"line_number":120,"context_line":"        self.flavor \u003d flavor_payload.FlavorPayload(flavor\u003dinstance.flavor)"},{"line_number":121,"context_line":"        self.trusted_image_certificates \u003d TrustedCertsPayload("},{"line_number":122,"context_line":"            trusted_certs\u003dinstance.get(\"trusted_certs\", None)"},{"line_number":123,"context_line":"        )"},{"line_number":124,"context_line":"        if bdms is not None:"},{"line_number":125,"context_line":"            self.block_devices \u003d BlockDevicePayload.from_bdms(bdms)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_94f0af69","line":122,"range":{"start_line":122,"start_character":40,"end_line":122,"end_character":53},"in_reply_to":"5f7c97a3_d4c5c73d","updated":"2018-05-08 17:22:29.000000000","message":"Discussed this during the notifications meeting today and agreed to just leave this as-is, it\u0027s consistent with one of our inconsistencies at least.","commit_id":"e6b7504546f3fa7d5100600b9a68d445fe06e13d"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"d2fd311f55a6c2de971b523ba9aafec74984cf3c","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.ip_addresses \u003d IpPayload.from_network_info(network_info)"},{"line_number":120,"context_line":"        self.flavor \u003d flavor_payload.FlavorPayload(flavor\u003dinstance.flavor)"},{"line_number":121,"context_line":"        self.trusted_image_certificates \u003d TrustedCertsPayload("},{"line_number":122,"context_line":"            trusted_certs\u003dinstance.get(\"trusted_certs\", None)"},{"line_number":123,"context_line":"        )"},{"line_number":124,"context_line":"        if bdms is not None:"},{"line_number":125,"context_line":"            self.block_devices \u003d BlockDevicePayload.from_bdms(bdms)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_7e9420e9","line":122,"range":{"start_line":122,"start_character":40,"end_line":122,"end_character":53},"in_reply_to":"9f6a8fd7_35e0acfa","updated":"2018-05-03 09:41:14.000000000","message":"+","commit_id":"e6b7504546f3fa7d5100600b9a68d445fe06e13d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"719398ac99925de9b282811e80bd2583c3e0219e","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.ip_addresses \u003d IpPayload.from_network_info(network_info)"},{"line_number":120,"context_line":"        self.flavor \u003d flavor_payload.FlavorPayload(flavor\u003dinstance.flavor)"},{"line_number":121,"context_line":"        self.trusted_image_certificates \u003d TrustedCertsPayload("},{"line_number":122,"context_line":"            trusted_certs\u003dinstance.get(\"trusted_certs\", None)"},{"line_number":123,"context_line":"        )"},{"line_number":124,"context_line":"        if bdms is not None:"},{"line_number":125,"context_line":"            self.block_devices \u003d BlockDevicePayload.from_bdms(bdms)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_b4a4cbba","line":122,"range":{"start_line":122,"start_character":40,"end_line":122,"end_character":53},"in_reply_to":"9f6a8fd7_35e0acfa","updated":"2018-05-08 17:04:58.000000000","message":"\u003e 2) Keypair is also lazy loaded. There we decided to only add the keypairs to the instance.create notification as it cannot change later.\n\nYou can change keypairs during rebuild now with microversion 2.54.","commit_id":"e6b7504546f3fa7d5100600b9a68d445fe06e13d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a65f215f185d9ab19740e5ae4dcea75048e737f0","unresolved":false,"context_lines":[{"line_number":312,"context_line":"    # No SCHEMA as all the additional fields are calculated"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    # Version 1.0: Initial version"},{"line_number":315,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":316,"context_line":"    fields \u003d {"},{"line_number":317,"context_line":"        \u0027trusted_image_certificates\u0027: fields.ListOfStringsField("},{"line_number":318,"context_line":"            nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_0bffa334","line":315,"updated":"2018-05-08 12:39:55.000000000","message":"The new InstanceActionRebuildPayload replaces the InstanceActionPayload in rebuild.start, .end, .error notifications. To keep the version of those notifications increasing please start this version at InstanceActionPayload.VERSION + 1 , which is 1.7 now.\n\nSee the last paragraph of [1] for a bit more description.\n\n[1] https://docs.openstack.org/nova/latest/reference/notifications.html#how-to-add-a-new-versioned-notification","commit_id":"f45561cb098794396f428b5e5585c23b36e1e9fe"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1a6f0ecb2129fb06f798a654f6cc2b0413606a98","unresolved":false,"context_lines":[{"line_number":312,"context_line":"    # No SCHEMA as all the additional fields are calculated"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"    # Version 1.0: Initial version"},{"line_number":315,"context_line":"    VERSION \u003d \u00271.0\u0027"},{"line_number":316,"context_line":"    fields \u003d {"},{"line_number":317,"context_line":"        \u0027trusted_image_certificates\u0027: fields.ListOfStringsField("},{"line_number":318,"context_line":"            nullable\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_7a1dbf71","line":315,"in_reply_to":"5f7c97a3_0bffa334","updated":"2018-05-08 15:56:13.000000000","message":"Done","commit_id":"f45561cb098794396f428b5e5585c23b36e1e9fe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d11b53e1c79f6036a1e725756e5d63562a6c0e96","unresolved":false,"context_lines":[{"line_number":221,"context_line":"    fields \u003d {"},{"line_number":222,"context_line":"        \u0027keypairs\u0027: fields.ListOfObjectsField(\u0027KeypairPayload\u0027),"},{"line_number":223,"context_line":"        \u0027tags\u0027: fields.ListOfStringsField(),"},{"line_number":224,"context_line":"        \u0027trusted_image_certificates\u0027: fields.ListOfStringsField("},{"line_number":225,"context_line":"            nullable\u003dTrue)"},{"line_number":226,"context_line":"    }"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f7c97a3_68c38b8a","line":224,"range":{"start_line":224,"start_character":9,"end_line":224,"end_character":35},"updated":"2018-05-24 21:25:29.000000000","message":"Why isn\u0027t this trusted_certs to match the Instance field?","commit_id":"84e9268570ff76bd8ec02499a40cd8430c94f165"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6c7476435d4660ecf13a9229cd0191cbba5c0ac2","unresolved":false,"context_lines":[{"line_number":203,"context_line":"class InstanceCreatePayload(InstanceActionPayload):"},{"line_number":204,"context_line":"    # No SCHEMA as all the additional fields are calculated"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    # Version 1.2: Initial version. It starts at 1.2 to match with the version"},{"line_number":207,"context_line":"    #              of the InstanceActionPayload at the time when this specific"},{"line_number":208,"context_line":"    #              payload is created as a child of it so that the"},{"line_number":209,"context_line":"    #              instance.create notification using this new payload does not"},{"line_number":210,"context_line":"    #              have decreasing version."},{"line_number":211,"context_line":"    #         1.3: Add keypairs field"},{"line_number":212,"context_line":"    #         1.4: Add key_name field to InstancePayload"},{"line_number":213,"context_line":"    #         1.5: Add BDM related data to InstancePayload"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_fedfd535","line":210,"range":{"start_line":206,"start_character":4,"end_line":210,"end_character":43},"updated":"2018-06-14 18:11:59.000000000","message":"Hmm, this makes it sounds like when we created InstanceCreatePayload we did the initial version the same as InstanceActionPayload, but for InstanceActionRebuildPayload it\u0027s one version higher - is that because InstanceActionRebuildPayload adds a new field and InstanceCreatePayload at 1.2 didn\u0027t?\n\nFrom looking at the change that introduced InstanceCreatePayload at version 1.2, it seems that I\u0027m correct in the logic:\n\nhttps://review.openstack.org/#/c/463001/8//COMMIT_MSG@19","commit_id":"e8ed9aacf846bfe83938e4e95a2c01ff429dbbed"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6c7476435d4660ecf13a9229cd0191cbba5c0ac2","unresolved":false,"context_lines":[{"line_number":236,"context_line":"        self.tags \u003d [instance_tag.tag"},{"line_number":237,"context_line":"                     for instance_tag in instance.tags]"},{"line_number":238,"context_line":"        self.trusted_image_certificates \u003d None"},{"line_number":239,"context_line":"        if instance.get(\"trusted_certs\", None):"},{"line_number":240,"context_line":"            self.trusted_image_certificates \u003d instance.trusted_certs.ids"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_5e2a892f","line":239,"range":{"start_line":239,"start_character":19,"end_line":239,"end_character":47},"updated":"2018-06-14 18:11:59.000000000","message":"nit: this can just be:\n\nif instance.trusted_certs:\n\nBecause that will lazy-load the field if it\u0027s not set, same with instance.get(). The get() format of this is the dict style which we don\u0027t want to propagate, but that can be cleaned up in a follow up.","commit_id":"e8ed9aacf846bfe83938e4e95a2c01ff429dbbed"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6c7476435d4660ecf13a9229cd0191cbba5c0ac2","unresolved":false,"context_lines":[{"line_number":322,"context_line":"            nullable\u003dTrue)"},{"line_number":323,"context_line":"    }"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    def __init__(self, context, instance, fault, bdms):"},{"line_number":326,"context_line":"        super(InstanceActionRebuildPayload, self).__init__("},{"line_number":327,"context_line":"                context\u003dcontext,"},{"line_number":328,"context_line":"                instance\u003dinstance,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_decbf970","line":325,"range":{"start_line":325,"start_character":49,"end_line":325,"end_character":53},"updated":"2018-06-14 18:11:59.000000000","message":"nit: this could be bdms\u003dNone to match InstanceActionPayload.","commit_id":"e8ed9aacf846bfe83938e4e95a2c01ff429dbbed"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6c7476435d4660ecf13a9229cd0191cbba5c0ac2","unresolved":false,"context_lines":[{"line_number":329,"context_line":"                fault\u003dfault,"},{"line_number":330,"context_line":"                bdms\u003dbdms)"},{"line_number":331,"context_line":"        self.trusted_image_certificates \u003d None"},{"line_number":332,"context_line":"        if instance.get(\"trusted_certs\", None):"},{"line_number":333,"context_line":"            self.trusted_image_certificates \u003d instance.trusted_certs.ids"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_bec2bd52","line":332,"range":{"start_line":332,"start_character":19,"end_line":332,"end_character":47},"updated":"2018-06-14 18:11:59.000000000","message":"same: instance.trusted_certs","commit_id":"e8ed9aacf846bfe83938e4e95a2c01ff429dbbed"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a65f215f185d9ab19740e5ae4dcea75048e737f0","unresolved":false,"context_lines":[{"line_number":968,"context_line":"            \u0027rebuild\u0027: {"},{"line_number":969,"context_line":"                \u0027imageRef\u0027: \u0027a2459075-d96c-40d5-893e-577ff92e721c\u0027,"},{"line_number":970,"context_line":"                \u0027metadata\u0027: {},"},{"line_number":971,"context_line":"                \u0027trusted_image_certificates\u0027: fake_trusted_certs,"},{"line_number":972,"context_line":"            }"},{"line_number":973,"context_line":"        }"},{"line_number":974,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_2e0f0de2","line":971,"updated":"2018-05-08 12:39:55.000000000","message":"I would change the trusted certs for rebuild to see that the changed value is used in the rebuild notifications.","commit_id":"f45561cb098794396f428b5e5585c23b36e1e9fe"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1a6f0ecb2129fb06f798a654f6cc2b0413606a98","unresolved":false,"context_lines":[{"line_number":968,"context_line":"            \u0027rebuild\u0027: {"},{"line_number":969,"context_line":"                \u0027imageRef\u0027: \u0027a2459075-d96c-40d5-893e-577ff92e721c\u0027,"},{"line_number":970,"context_line":"                \u0027metadata\u0027: {},"},{"line_number":971,"context_line":"                \u0027trusted_image_certificates\u0027: fake_trusted_certs,"},{"line_number":972,"context_line":"            }"},{"line_number":973,"context_line":"        }"},{"line_number":974,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], post)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_a5b8182a","line":971,"in_reply_to":"5f7c97a3_2e0f0de2","updated":"2018-05-08 15:56:13.000000000","message":"Good call.  Done.","commit_id":"f45561cb098794396f428b5e5585c23b36e1e9fe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a65f215f185d9ab19740e5ae4dcea75048e737f0","unresolved":false,"context_lines":[{"line_number":1041,"context_line":"            replacements\u003d{"},{"line_number":1042,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":1043,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027],"},{"line_number":1044,"context_line":"                \u0027trusted_image_certificates\u0027: None},"},{"line_number":1045,"context_line":"            actual\u003dnotification[0])"},{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"    def _test_restore_server(self, server):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_6eb8a5c7","line":1044,"updated":"2018-05-08 12:39:55.000000000","message":"You can include the two fake cert to the boot request at L1023 and then you don\u0027t have to override the stored sample file.","commit_id":"f45561cb098794396f428b5e5585c23b36e1e9fe"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1a6f0ecb2129fb06f798a654f6cc2b0413606a98","unresolved":false,"context_lines":[{"line_number":1041,"context_line":"            replacements\u003d{"},{"line_number":1042,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":1043,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027],"},{"line_number":1044,"context_line":"                \u0027trusted_image_certificates\u0027: None},"},{"line_number":1045,"context_line":"            actual\u003dnotification[0])"},{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"    def _test_restore_server(self, server):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_85507c0c","line":1044,"in_reply_to":"5f7c97a3_6eb8a5c7","updated":"2018-05-08 15:56:13.000000000","message":"Agreed, I originally planned to set them on L1023.  However, I wanted to test the \"None\" path, to confirm that when no trusted_image_certificates are provided during the create or rebuild call that the notification correctly has \"None\" instead of a list of cert ID\u0027s.","commit_id":"f45561cb098794396f428b5e5585c23b36e1e9fe"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a07aae2557323da5d7b257afdf45d102ee216fe9","unresolved":false,"context_lines":[{"line_number":950,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":951,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"    def test_rebuild_server(self):"},{"line_number":954,"context_line":"        # NOTE(gabor_antal): Rebuild changes the image used by the instance,"},{"line_number":955,"context_line":"        # therefore the actions tested in test_instance_action had to be in"},{"line_number":956,"context_line":"        # specific order. To avoid this problem, rebuild was moved from"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_692812e1","line":953,"range":{"start_line":953,"start_character":8,"end_line":953,"end_character":27},"updated":"2018-06-13 12:40:16.000000000","message":"this appears to be busted.","commit_id":"457c4c22fa54d1dc58d0e8932dc80878eeee48cc"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"b0999b51a35ae8c4554b531a46332064c0171ecd","unresolved":false,"context_lines":[{"line_number":950,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":951,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])"},{"line_number":952,"context_line":""},{"line_number":953,"context_line":"    def test_rebuild_server(self):"},{"line_number":954,"context_line":"        # NOTE(gabor_antal): Rebuild changes the image used by the instance,"},{"line_number":955,"context_line":"        # therefore the actions tested in test_instance_action had to be in"},{"line_number":956,"context_line":"        # specific order. To avoid this problem, rebuild was moved from"}],"source_content_type":"text/x-python","patch_set":24,"id":"5f7c97a3_c576e6a4","line":953,"range":{"start_line":953,"start_character":8,"end_line":953,"end_character":27},"in_reply_to":"5f7c97a3_692812e1","updated":"2018-06-13 15:16:56.000000000","message":"I\u0027ve fixed it in the latest patch.  The minimum compute api service version has to support trusted certs in order for this test to pass.","commit_id":"457c4c22fa54d1dc58d0e8932dc80878eeee48cc"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1958418686d703cef90eb9f39870537f8c4e6198","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"            mock.patch(\u0027nova.objects.Service.get_minimum_version\u0027,"},{"line_number":1017,"context_line":"                       return_value\u003dcompute_api.MIN_COMPUTE_TRUSTED_CERTS)"},{"line_number":1018,"context_line":"        self.mock_min_service_version \u003d patcher.start()"},{"line_number":1019,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"        rebuild_trusted_certs \u003d [\u0027rebuild-cert-id-1\u0027, \u0027rebuild-cert-id-2\u0027]"},{"line_number":1022,"context_line":"        post \u003d {"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f7c97a3_ce1835ce","line":1019,"updated":"2018-06-14 08:11:21.000000000","message":"I\u0027m wondering why only rebuild needs this mock and the boot with trusted cert doesn\u0027t.","commit_id":"3f7c7e9c3e835b178f371baf01a27cbd5df7ebb8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"06c41aa09fd32bd0e1c4f3606a3ea31a94b08558","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"            mock.patch(\u0027nova.objects.Service.get_minimum_version\u0027,"},{"line_number":1017,"context_line":"                       return_value\u003dcompute_api.MIN_COMPUTE_TRUSTED_CERTS)"},{"line_number":1018,"context_line":"        self.mock_min_service_version \u003d patcher.start()"},{"line_number":1019,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"        rebuild_trusted_certs \u003d [\u0027rebuild-cert-id-1\u0027, \u0027rebuild-cert-id-2\u0027]"},{"line_number":1022,"context_line":"        post \u003d {"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f7c97a3_f79dc156","line":1019,"in_reply_to":"5f7c97a3_3eaa3683","updated":"2018-06-14 14:11:32.000000000","message":"Somebody could ask why the test_servcer_create case doesn\u0027t fail in the TestInstanceNotificationSampleOldAttachFlow class as it also uses trusted cert. The answer is that TestInstanceNotificationSampleOldAttachFlow only mocks the service.get_minimum_version() but not the service.get_minimum_version_all_cells() call so that returns the maximum in both test classes. :/","commit_id":"3f7c7e9c3e835b178f371baf01a27cbd5df7ebb8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8618eb09d93566a24ae65ccb0d93b14641c118c0","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"            mock.patch(\u0027nova.objects.Service.get_minimum_version\u0027,"},{"line_number":1017,"context_line":"                       return_value\u003dcompute_api.MIN_COMPUTE_TRUSTED_CERTS)"},{"line_number":1018,"context_line":"        self.mock_min_service_version \u003d patcher.start()"},{"line_number":1019,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"        rebuild_trusted_certs \u003d [\u0027rebuild-cert-id-1\u0027, \u0027rebuild-cert-id-2\u0027]"},{"line_number":1022,"context_line":"        post \u003d {"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f7c97a3_3eaa3683","line":1019,"in_reply_to":"5f7c97a3_ce1835ce","updated":"2018-06-14 12:18:50.000000000","message":"I think I found it out. This test runs twice. Once part of TestInstanceNotificationSample \n and once part of TestInstanceNotificationSampleOldAttachFlow. The second instance of the test case fails but the first passes without any service version mocking. BUT the goal of the whole TestInstanceNotificationSampleOldAttachFlow set is to run the tests with old enough service version that enforces the old cinder attach flow. Of course that old service version is too old for the trusted cert support. So mocking the service version in here defeats the original purpose of TestInstanceNotificationSampleOldAttachFlow. \n\nSo I think we cannot simply add a trusted cert verification here. Maybe the simplest thing is to duplicate the test_rebuild_server. In TestInstanceNotificationSample the test_rebuild_server should be kept as is and the duplicate test_rebuild_with_cert could verify the certification change. Then in TestInstanceNotificationSampleOldAttachFlow override test_rebuild_with_cert with empty test case that only contains a note that this test is not applicable for old service version used in this test class.","commit_id":"3f7c7e9c3e835b178f371baf01a27cbd5df7ebb8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1eae87c9f03d9c79c9043c55bc3908b469653fed","unresolved":false,"context_lines":[{"line_number":1016,"context_line":"            mock.patch(\u0027nova.objects.Service.get_minimum_version\u0027,"},{"line_number":1017,"context_line":"                       return_value\u003dcompute_api.MIN_COMPUTE_TRUSTED_CERTS)"},{"line_number":1018,"context_line":"        self.mock_min_service_version \u003d patcher.start()"},{"line_number":1019,"context_line":"        self.addCleanup(patcher.stop)"},{"line_number":1020,"context_line":""},{"line_number":1021,"context_line":"        rebuild_trusted_certs \u003d [\u0027rebuild-cert-id-1\u0027, \u0027rebuild-cert-id-2\u0027]"},{"line_number":1022,"context_line":"        post \u003d {"}],"source_content_type":"text/x-python","patch_set":26,"id":"5f7c97a3_d7da05e7","line":1019,"in_reply_to":"5f7c97a3_f79dc156","updated":"2018-06-14 14:18:29.000000000","message":"Done","commit_id":"3f7c7e9c3e835b178f371baf01a27cbd5df7ebb8"}],"releasenotes/notes/trusted-certs-microversion-589b75f0180d4d51.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a65f215f185d9ab19740e5ae4dcea75048e737f0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    * ``POST /servers/{server_id}/action (rebuild)``"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    The ``trusted_image_certificates`` parameter has also been added to"},{"line_number":31,"context_line":"    all InstanceCreatePayload and InstanceActionRebuildPayload notifications."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"5f7c97a3_ab80ef8c","line":31,"updated":"2018-05-08 12:39:55.000000000","message":"Please note that instance.rebuild.start .end .error notifications now has a new payload type.\n\nYou can see an example of such change in https://review.openstack.org/#/c/453077/19/releasenotes/notes/image-id-in-snapshot-notification-7e1e10435475a1af.yaml","commit_id":"f45561cb098794396f428b5e5585c23b36e1e9fe"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1a6f0ecb2129fb06f798a654f6cc2b0413606a98","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    * ``POST /servers/{server_id}/action (rebuild)``"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    The ``trusted_image_certificates`` parameter has also been added to"},{"line_number":31,"context_line":"    all InstanceCreatePayload and InstanceActionRebuildPayload notifications."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"5f7c97a3_c571940e","line":31,"in_reply_to":"5f7c97a3_ab80ef8c","updated":"2018-05-08 15:56:13.000000000","message":"Done.  Thank you for the link to the example!","commit_id":"f45561cb098794396f428b5e5585c23b36e1e9fe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6c7476435d4660ecf13a9229cd0191cbba5c0ac2","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    * ``POST /servers/{server_id}/action (rebuild)``"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    The payload of the ``instance.create.start`` and ``instance.create.end``"},{"line_number":33,"context_line":"    and ``instance.create.error`` notifications have been extended with the"},{"line_number":34,"context_line":"    ``trusted_image_certificates`` field that contains the list of trusted"},{"line_number":35,"context_line":"    certificate IDs used when the instance is created."},{"line_number":36,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":27,"id":"5f7c97a3_7eb985c9","line":33,"range":{"start_line":33,"start_character":34,"end_line":33,"end_character":47},"updated":"2018-06-14 18:11:59.000000000","message":"nit: versioned notifications","commit_id":"e8ed9aacf846bfe83938e4e95a2c01ff429dbbed"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6c7476435d4660ecf13a9229cd0191cbba5c0ac2","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    certificate IDs used when the instance is created."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    The payload of the ``instance.rebuild.start`` and ``instance.rebuild.end``"},{"line_number":38,"context_line":"    and ``instance.rebuild.error`` notifications have been extended with the"},{"line_number":39,"context_line":"    ``trusted_image_certificates`` field that contains the list of trusted"},{"line_number":40,"context_line":"    certificate IDs used when the instance is rebuilt. This change also causes"},{"line_number":41,"context_line":"    the type of the payload object to change from ``InstanceActionPayload``"}],"source_content_type":"text/x-yaml","patch_set":27,"id":"5f7c97a3_9ec10133","line":38,"range":{"start_line":38,"start_character":35,"end_line":38,"end_character":48},"updated":"2018-06-14 18:11:59.000000000","message":"versioned notifications","commit_id":"e8ed9aacf846bfe83938e4e95a2c01ff429dbbed"}]}
