)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b0c5c7af413426b153f43cca24c51ef50065425c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"REST API for the server create and rebuild commands. The new"},{"line_number":11,"context_line":"parameter may contain an array of strings, each string representing"},{"line_number":12,"context_line":"the ID of a trusted certificate. The set of certificate IDs will be"},{"line_number":13,"context_line":"stored in the trusted_certs field of the instance InstanceExtras"},{"line_number":14,"context_line":"and will be used to verify the validity of the signing certificate"},{"line_number":15,"context_line":"of a signed instance image."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"7f96bb07_8213685c","line":13,"range":{"start_line":13,"start_character":63,"end_line":13,"end_character":64},"updated":"2018-01-15 19:59:27.000000000","message":"InstanceExtra :)","commit_id":"2cffd26feac8faf539eb3772aa6832d212568be2"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"7490d06dedc114bf6ef98f45e0e988bb5ec1d5ba","unresolved":false,"context_lines":[{"line_number":10,"context_line":"REST API for the server create and rebuild commands. The new"},{"line_number":11,"context_line":"parameter may contain an array of strings, each string representing"},{"line_number":12,"context_line":"the ID of a trusted certificate. The set of certificate IDs will be"},{"line_number":13,"context_line":"stored in the trusted_certs field of the instance InstanceExtras"},{"line_number":14,"context_line":"and will be used to verify the validity of the signing certificate"},{"line_number":15,"context_line":"of a signed instance image."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"7f96bb07_d164d624","line":13,"range":{"start_line":13,"start_character":63,"end_line":13,"end_character":64},"in_reply_to":"7f96bb07_8213685c","updated":"2018-01-16 04:03:04.000000000","message":"Dang it. I forgot to update this in the latest patch. There will definitely need to be one more patch, so I\u0027ll update then.","commit_id":"2cffd26feac8faf539eb3772aa6832d212568be2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     ca7d23a3 (Merge \"Do not use nova.test in placement.test_deploy\")"},{"line_number":2,"context_line":"Author:     Brianna Poulos \u003cBrianna.Poulos@jhuapl.edu\u003e"},{"line_number":3,"context_line":"AuthorDate: 2018-06-06 16:43:56 -0400"},{"line_number":4,"context_line":"Commit:     Brianna Poulos \u003cBrianna.Poulos@jhuapl.edu\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":114,"id":"5f7c97a3_c079f4fb","line":1,"updated":"2018-06-13 17:32:43.000000000","message":"very nice commit message","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"105bed3e69bce6d83286eecb64101f3e7de8fed5","unresolved":false,"context_lines":[{"line_number":5196,"context_line":"  min_version: 2.52"},{"line_number":5197,"context_line":"server_trusted_certificates:"},{"line_number":5198,"context_line":"  description: |"},{"line_number":5199,"context_line":"    A list of trusted certificates, which are be used during image"},{"line_number":5200,"context_line":"    signature verification to verify the signing certificate."},{"line_number":5201,"context_line":"  in: body"},{"line_number":5202,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7f515b1d_b5bb87c2","line":5199,"range":{"start_line":5199,"start_character":46,"end_line":5199,"end_character":49},"updated":"2017-09-25 18:21:27.000000000","message":"Remove","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"e28c197ecf7c0f213abbcfe394fd50f5147b60ec","unresolved":false,"context_lines":[{"line_number":5196,"context_line":"  min_version: 2.52"},{"line_number":5197,"context_line":"server_trusted_certificates:"},{"line_number":5198,"context_line":"  description: |"},{"line_number":5199,"context_line":"    A list of trusted certificates, which are be used during image"},{"line_number":5200,"context_line":"    signature verification to verify the signing certificate."},{"line_number":5201,"context_line":"  in: body"},{"line_number":5202,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7f515b1d_5f50e90a","line":5199,"range":{"start_line":5199,"start_character":46,"end_line":5199,"end_character":49},"in_reply_to":"7f515b1d_b5bb87c2","updated":"2017-09-25 20:42:17.000000000","message":"Done","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"78443af78751ecfcc1fbfa2e5c06169afdc613c7","unresolved":false,"context_lines":[{"line_number":445,"context_line":"  in: query"},{"line_number":446,"context_line":"  required: false"},{"line_number":447,"context_line":"  type: string"},{"line_number":448,"context_line":"  min_version: 2.59"},{"line_number":449,"context_line":"changes_since_server:"},{"line_number":450,"context_line":"  description: |"},{"line_number":451,"context_line":"    Filters the response by a date and time stamp when the server last"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"df87a7cf_3f6939f8","line":448,"range":{"start_line":448,"start_character":18,"end_line":448,"end_character":19},"updated":"2017-12-18 19:26:34.000000000","message":"Why was this changed?","commit_id":"c390e127c36f34b35c0934a1e579e684ea1dfe99"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"96f41903203052593cb3c9457c1f60f9df4e52b1","unresolved":false,"context_lines":[{"line_number":445,"context_line":"  in: query"},{"line_number":446,"context_line":"  required: false"},{"line_number":447,"context_line":"  type: string"},{"line_number":448,"context_line":"  min_version: 2.59"},{"line_number":449,"context_line":"changes_since_server:"},{"line_number":450,"context_line":"  description: |"},{"line_number":451,"context_line":"    Filters the response by a date and time stamp when the server last"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"df87a7cf_5f043d18","line":448,"range":{"start_line":448,"start_character":18,"end_line":448,"end_character":19},"in_reply_to":"df87a7cf_3f6939f8","updated":"2018-01-05 19:48:43.000000000","message":"This change was not intentional. Updated in latest patch.","commit_id":"c390e127c36f34b35c0934a1e579e684ea1dfe99"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"78443af78751ecfcc1fbfa2e5c06169afdc613c7","unresolved":false,"context_lines":[{"line_number":5359,"context_line":"  in: body"},{"line_number":5360,"context_line":"  required: false"},{"line_number":5361,"context_line":"  type: array"},{"line_number":5362,"context_line":"  min_version: 2.58"},{"line_number":5363,"context_line":"server_usages:"},{"line_number":5364,"context_line":"  description: |"},{"line_number":5365,"context_line":"    A list of the server usage objects."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"df87a7cf_df692df8","line":5362,"range":{"start_line":5362,"start_character":15,"end_line":5362,"end_character":19},"updated":"2017-12-18 19:26:34.000000000","message":"Should this be 2.59?","commit_id":"c390e127c36f34b35c0934a1e579e684ea1dfe99"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"96f41903203052593cb3c9457c1f60f9df4e52b1","unresolved":false,"context_lines":[{"line_number":5359,"context_line":"  in: body"},{"line_number":5360,"context_line":"  required: false"},{"line_number":5361,"context_line":"  type: array"},{"line_number":5362,"context_line":"  min_version: 2.58"},{"line_number":5363,"context_line":"server_usages:"},{"line_number":5364,"context_line":"  description: |"},{"line_number":5365,"context_line":"    A list of the server usage objects."}],"source_content_type":"text/x-yaml","patch_set":23,"id":"df87a7cf_1f1b1581","line":5362,"range":{"start_line":5362,"start_character":15,"end_line":5362,"end_character":19},"in_reply_to":"df87a7cf_df692df8","updated":"2018-01-05 19:48:43.000000000","message":"Yes, this should be 2.59. Updated in latest patch.","commit_id":"c390e127c36f34b35c0934a1e579e684ea1dfe99"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":5664,"context_line":"  required: false"},{"line_number":5665,"context_line":"  type: array"},{"line_number":5666,"context_line":"  min_version: 2.52"},{"line_number":5667,"context_line":"server_trusted_image_certificates:"},{"line_number":5668,"context_line":"  description: |"},{"line_number":5669,"context_line":"    A list of trusted certificates, which are used during image"},{"line_number":5670,"context_line":"    signature verification to verify the signing certificate."}],"source_content_type":"text/x-yaml","patch_set":85,"id":"9f6a8fd7_3e69bb24","line":5667,"updated":"2018-04-16 15:51:03.000000000","message":"If this is not supported for volume-backed instances, we should make a note of that in the description.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"9bfa9394f162e53840b37f35d4bf9680f488424e","unresolved":false,"context_lines":[{"line_number":5664,"context_line":"  required: false"},{"line_number":5665,"context_line":"  type: array"},{"line_number":5666,"context_line":"  min_version: 2.52"},{"line_number":5667,"context_line":"server_trusted_image_certificates:"},{"line_number":5668,"context_line":"  description: |"},{"line_number":5669,"context_line":"    A list of trusted certificates, which are used during image"},{"line_number":5670,"context_line":"    signature verification to verify the signing certificate."}],"source_content_type":"text/x-yaml","patch_set":85,"id":"9f6a8fd7_0807dc1e","line":5667,"in_reply_to":"9f6a8fd7_3e69bb24","updated":"2018-04-16 17:38:14.000000000","message":"Done","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":5666,"context_line":"  min_version: 2.52"},{"line_number":5667,"context_line":"server_trusted_image_certificates:"},{"line_number":5668,"context_line":"  description: |"},{"line_number":5669,"context_line":"    A list of trusted certificates, which are used during image"},{"line_number":5670,"context_line":"    signature verification to verify the signing certificate."},{"line_number":5671,"context_line":"  in: body"},{"line_number":5672,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":85,"id":"9f6a8fd7_be7dcbe8","line":5669,"range":{"start_line":5669,"start_character":22,"end_line":5669,"end_character":34},"updated":"2018-04-16 15:51:03.000000000","message":"certificate IDs","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"9bfa9394f162e53840b37f35d4bf9680f488424e","unresolved":false,"context_lines":[{"line_number":5666,"context_line":"  min_version: 2.52"},{"line_number":5667,"context_line":"server_trusted_image_certificates:"},{"line_number":5668,"context_line":"  description: |"},{"line_number":5669,"context_line":"    A list of trusted certificates, which are used during image"},{"line_number":5670,"context_line":"    signature verification to verify the signing certificate."},{"line_number":5671,"context_line":"  in: body"},{"line_number":5672,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":85,"id":"9f6a8fd7_680a1827","line":5669,"range":{"start_line":5669,"start_character":22,"end_line":5669,"end_character":34},"in_reply_to":"9f6a8fd7_be7dcbe8","updated":"2018-04-16 17:38:14.000000000","message":"Done","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":5669,"context_line":"    A list of trusted certificates, which are used during image"},{"line_number":5670,"context_line":"    signature verification to verify the signing certificate."},{"line_number":5671,"context_line":"  in: body"},{"line_number":5672,"context_line":"  required: false"},{"line_number":5673,"context_line":"  type: array"},{"line_number":5674,"context_line":"  min_version: 2.62"},{"line_number":5675,"context_line":"server_usages:"}],"source_content_type":"text/x-yaml","patch_set":85,"id":"9f6a8fd7_de4e7fc0","line":5672,"updated":"2018-04-16 15:51:03.000000000","message":"You need a separate parameter for the request and the response, since it\u0027s optional in the request for server create and rebuild but required in the response for GET (show/details), PUT (update) and POST (rebuild) APIs.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6bd4482c079cc6f57c0b41628cf05e8893a18394","unresolved":false,"context_lines":[{"line_number":5669,"context_line":"    A list of trusted certificates, which are used during image"},{"line_number":5670,"context_line":"    signature verification to verify the signing certificate."},{"line_number":5671,"context_line":"  in: body"},{"line_number":5672,"context_line":"  required: false"},{"line_number":5673,"context_line":"  type: array"},{"line_number":5674,"context_line":"  min_version: 2.62"},{"line_number":5675,"context_line":"server_usages:"}],"source_content_type":"text/x-yaml","patch_set":85,"id":"9f6a8fd7_6b47721f","line":5672,"in_reply_to":"9f6a8fd7_480dd43c","updated":"2018-04-16 17:48:19.000000000","message":"_req and _resp should be fine, there are only 2 variants of this parameter in the docs right?","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"9bfa9394f162e53840b37f35d4bf9680f488424e","unresolved":false,"context_lines":[{"line_number":5669,"context_line":"    A list of trusted certificates, which are used during image"},{"line_number":5670,"context_line":"    signature verification to verify the signing certificate."},{"line_number":5671,"context_line":"  in: body"},{"line_number":5672,"context_line":"  required: false"},{"line_number":5673,"context_line":"  type: array"},{"line_number":5674,"context_line":"  min_version: 2.62"},{"line_number":5675,"context_line":"server_usages:"}],"source_content_type":"text/x-yaml","patch_set":85,"id":"9f6a8fd7_480dd43c","line":5672,"in_reply_to":"9f6a8fd7_de4e7fc0","updated":"2018-04-16 17:38:14.000000000","message":"Thanks, I can add that. Should we have two or three separate parameters?\n\nserver_trusted_image_certificates\nserver_trusted_image_certificates_req\nserver_trusted_image_certificates_resp","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":3862,"context_line":"  type: string"},{"line_number":3863,"context_line":"key_name_rebuild_req:"},{"line_number":3864,"context_line":"  description: |"},{"line_number":3865,"context_line":"    Key pair name for rebuild API. If ``null`` is specified,"},{"line_number":3866,"context_line":"    the existing keypair is unset."},{"line_number":3867,"context_line":""},{"line_number":3868,"context_line":"    .. note:: Users within the same project are able to rebuild other"},{"line_number":3869,"context_line":"              user\u0027s instances in that project with a new keypair. Keys"}],"source_content_type":"text/x-yaml","patch_set":114,"id":"5f7c97a3_4b4bc529","line":3866,"range":{"start_line":3865,"start_character":4,"end_line":3866,"end_character":34},"updated":"2018-06-13 17:32:43.000000000","message":"This is what I\u0027m referring to about having a separate request parameter description for the rebuild request parameter.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":5706,"context_line":"  required: false"},{"line_number":5707,"context_line":"  type: array"},{"line_number":5708,"context_line":"  min_version: 2.52"},{"line_number":5709,"context_line":"server_trusted_image_certificates_req:"},{"line_number":5710,"context_line":"  description: |"},{"line_number":5711,"context_line":"    A list of trusted certificate IDs, which are used during image"},{"line_number":5712,"context_line":"    signature verification to verify the signing certificate. The list is"}],"source_content_type":"text/x-yaml","patch_set":114,"id":"5f7c97a3_2bb76923","line":5709,"updated":"2018-06-13 17:32:43.000000000","message":"We might want to consider a separate request parameter description for rebuild, because in the case of rebuild, you can add, change, or unset trusted_certs on the instance, which is probably something worth mentioning in the description, i.e. to unset you\u0027d pass trusted_image_certificates\u003dNone.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":5706,"context_line":"  required: false"},{"line_number":5707,"context_line":"  type: array"},{"line_number":5708,"context_line":"  min_version: 2.52"},{"line_number":5709,"context_line":"server_trusted_image_certificates_req:"},{"line_number":5710,"context_line":"  description: |"},{"line_number":5711,"context_line":"    A list of trusted certificate IDs, which are used during image"},{"line_number":5712,"context_line":"    signature verification to verify the signing certificate. The list is"}],"source_content_type":"text/x-yaml","patch_set":114,"id":"5f7c97a3_9df04269","line":5709,"in_reply_to":"5f7c97a3_2bb76923","updated":"2018-06-13 19:39:26.000000000","message":"Done","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":5721,"context_line":"  description: |"},{"line_number":5722,"context_line":"    A list of trusted certificate IDs, that were used during image signature"},{"line_number":5723,"context_line":"    verification to verify the signing certificate. The list is restricted"},{"line_number":5724,"context_line":"    to a maximum of 50 IDs. This parameter is not supported for"},{"line_number":5725,"context_line":"    volume-backed instances."},{"line_number":5726,"context_line":"  in: body"},{"line_number":5727,"context_line":"  required: true"},{"line_number":5728,"context_line":"  type: array"}],"source_content_type":"text/x-yaml","patch_set":114,"id":"5f7c97a3_e098b01b","line":5725,"range":{"start_line":5724,"start_character":28,"end_line":5725,"end_character":28},"updated":"2018-06-13 17:32:43.000000000","message":"nit: we don\u0027t really need this in the response parameter description since it really only applies to the request","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":5721,"context_line":"  description: |"},{"line_number":5722,"context_line":"    A list of trusted certificate IDs, that were used during image signature"},{"line_number":5723,"context_line":"    verification to verify the signing certificate. The list is restricted"},{"line_number":5724,"context_line":"    to a maximum of 50 IDs. This parameter is not supported for"},{"line_number":5725,"context_line":"    volume-backed instances."},{"line_number":5726,"context_line":"  in: body"},{"line_number":5727,"context_line":"  required: true"},{"line_number":5728,"context_line":"  type: array"}],"source_content_type":"text/x-yaml","patch_set":114,"id":"5f7c97a3_5de62ab2","line":5725,"range":{"start_line":5724,"start_character":28,"end_line":5725,"end_character":28},"in_reply_to":"5f7c97a3_e098b01b","updated":"2018-06-13 19:39:26.000000000","message":"Done","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":6315,"context_line":"user_data_rebuild_req:"},{"line_number":6316,"context_line":"  description: |"},{"line_number":6317,"context_line":"    Configuration information or scripts to use upon rebuild."},{"line_number":6318,"context_line":"    Must be Base64 encoded. If ``null`` is specified, the existing user_data"},{"line_number":6319,"context_line":"    is unset."},{"line_number":6320,"context_line":"  in: body"},{"line_number":6321,"context_line":"  required: false"},{"line_number":6322,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":114,"id":"5f7c97a3_2b4c493d","line":6319,"range":{"start_line":6318,"start_character":28,"end_line":6319,"end_character":13},"updated":"2018-06-13 17:32:43.000000000","message":"same","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"}],"api-ref/source/servers.inc":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f89d76f49ed9d87ff6bb986beb3fec21c8e8a2d4","unresolved":false,"context_lines":[{"line_number":589,"context_line":"  - OS-EXT-SRV-ATTR:ramdisk_id: server_ramdisk_id"},{"line_number":590,"context_line":"  - OS-EXT-SRV-ATTR:root_device_name: server_root_device_name"},{"line_number":591,"context_line":"  - OS-EXT-SRV-ATTR:user_data: server_user_data"},{"line_number":592,"context_line":"  - locked: locked"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"**Example List Servers Detailed (2.47)**"},{"line_number":595,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":53,"id":"bf659307_dd3c82e2","line":592,"updated":"2018-04-03 11:29:08.000000000","message":"Are we missing the trusted certs in here? Not 100% sure.","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"a2b6a12898e8beec0228cd7f049c119a617cc49a","unresolved":false,"context_lines":[{"line_number":589,"context_line":"  - OS-EXT-SRV-ATTR:ramdisk_id: server_ramdisk_id"},{"line_number":590,"context_line":"  - OS-EXT-SRV-ATTR:root_device_name: server_root_device_name"},{"line_number":591,"context_line":"  - OS-EXT-SRV-ATTR:user_data: server_user_data"},{"line_number":592,"context_line":"  - locked: locked"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"**Example List Servers Detailed (2.47)**"},{"line_number":595,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":53,"id":"bf659307_41e87a7a","line":592,"in_reply_to":"bf659307_d64695c0","updated":"2018-04-04 03:58:26.000000000","message":"Done","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"f3a9cca88279f13366d073104b12faa1a5c5419c","unresolved":false,"context_lines":[{"line_number":589,"context_line":"  - OS-EXT-SRV-ATTR:ramdisk_id: server_ramdisk_id"},{"line_number":590,"context_line":"  - OS-EXT-SRV-ATTR:root_device_name: server_root_device_name"},{"line_number":591,"context_line":"  - OS-EXT-SRV-ATTR:user_data: server_user_data"},{"line_number":592,"context_line":"  - locked: locked"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"**Example List Servers Detailed (2.47)**"},{"line_number":595,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":53,"id":"bf659307_d64695c0","line":592,"in_reply_to":"bf659307_dd3c82e2","updated":"2018-04-03 19:24:30.000000000","message":"Yes, good catch. This will be fixed in the next patch.","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f89d76f49ed9d87ff6bb986beb3fec21c8e8a2d4","unresolved":false,"context_lines":[{"line_number":689,"context_line":"  - OS-EXT-SRV-ATTR:ramdisk_id: server_ramdisk_id"},{"line_number":690,"context_line":"  - OS-EXT-SRV-ATTR:root_device_name: server_root_device_name"},{"line_number":691,"context_line":"  - OS-EXT-SRV-ATTR:user_data: server_user_data"},{"line_number":692,"context_line":"  - locked: locked"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"**Example Show Server Details (2.47)**"},{"line_number":695,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":53,"id":"bf659307_1d375a01","line":692,"updated":"2018-04-03 11:29:08.000000000","message":"I think we should be including the trusted certs in here?","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"f3a9cca88279f13366d073104b12faa1a5c5419c","unresolved":false,"context_lines":[{"line_number":689,"context_line":"  - OS-EXT-SRV-ATTR:ramdisk_id: server_ramdisk_id"},{"line_number":690,"context_line":"  - OS-EXT-SRV-ATTR:root_device_name: server_root_device_name"},{"line_number":691,"context_line":"  - OS-EXT-SRV-ATTR:user_data: server_user_data"},{"line_number":692,"context_line":"  - locked: locked"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"**Example Show Server Details (2.47)**"},{"line_number":695,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":53,"id":"bf659307_f64159a7","line":692,"in_reply_to":"bf659307_1d375a01","updated":"2018-04-03 19:24:30.000000000","message":"Yes, good catch. This will be fixed in the next patch.","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"a2b6a12898e8beec0228cd7f049c119a617cc49a","unresolved":false,"context_lines":[{"line_number":689,"context_line":"  - OS-EXT-SRV-ATTR:ramdisk_id: server_ramdisk_id"},{"line_number":690,"context_line":"  - OS-EXT-SRV-ATTR:root_device_name: server_root_device_name"},{"line_number":691,"context_line":"  - OS-EXT-SRV-ATTR:user_data: server_user_data"},{"line_number":692,"context_line":"  - locked: locked"},{"line_number":693,"context_line":""},{"line_number":694,"context_line":"**Example Show Server Details (2.47)**"},{"line_number":695,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":53,"id":"bf659307_61eb3e77","line":692,"in_reply_to":"bf659307_f64159a7","updated":"2018-04-04 03:58:26.000000000","message":"Done","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"5cf3f7337191f265f62f88c1aa95b9a6287f6f7d","unresolved":false,"context_lines":[{"line_number":372,"context_line":"  - tags: server_tags_create"},{"line_number":373,"context_line":"  - trusted_image_certificates: server_trusted_image_certificates"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"**Example Create Server**"},{"line_number":376,"context_line":""},{"line_number":377,"context_line":".. literalinclude:: ../../doc/api_samples/servers/server-create-req.json"},{"line_number":378,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":55,"id":"bf659307_8a9c5e6a","line":375,"updated":"2018-04-04 14:43:55.000000000","message":"Should we include the latest create server example? It doesn\u0027t look like this has been updated in the past","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7e7f4181164487428593cbfd6841517ad98ae7e2","unresolved":false,"context_lines":[{"line_number":592,"context_line":"  - OS-EXT-SRV-ATTR:user_data: server_user_data"},{"line_number":593,"context_line":"  - locked: locked"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"**Example List Servers Detailed (2.47)**"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":".. literalinclude:: /../../doc/api_samples/servers/v2.47/servers-details-resp.json"},{"line_number":598,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":55,"id":"bf659307_28b0c2dc","line":595,"updated":"2018-04-04 09:55:17.000000000","message":"I think we should probably update this sample.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"5cf3f7337191f265f62f88c1aa95b9a6287f6f7d","unresolved":false,"context_lines":[{"line_number":592,"context_line":"  - OS-EXT-SRV-ATTR:user_data: server_user_data"},{"line_number":593,"context_line":"  - locked: locked"},{"line_number":594,"context_line":""},{"line_number":595,"context_line":"**Example List Servers Detailed (2.47)**"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":".. literalinclude:: /../../doc/api_samples/servers/v2.47/servers-details-resp.json"},{"line_number":598,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":55,"id":"bf659307_8a19be22","line":595,"in_reply_to":"bf659307_28b0c2dc","updated":"2018-04-04 14:43:55.000000000","message":"Oops, thanks","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7e7f4181164487428593cbfd6841517ad98ae7e2","unresolved":false,"context_lines":[{"line_number":693,"context_line":"  - OS-EXT-SRV-ATTR:user_data: server_user_data"},{"line_number":694,"context_line":"  - locked: locked"},{"line_number":695,"context_line":""},{"line_number":696,"context_line":"**Example Show Server Details (2.47)**"},{"line_number":697,"context_line":""},{"line_number":698,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.47/server-get-resp.json"},{"line_number":699,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":55,"id":"bf659307_48b3b6e9","line":696,"updated":"2018-04-04 09:55:17.000000000","message":"I think we should update this sample please.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"5cf3f7337191f265f62f88c1aa95b9a6287f6f7d","unresolved":false,"context_lines":[{"line_number":693,"context_line":"  - OS-EXT-SRV-ATTR:user_data: server_user_data"},{"line_number":694,"context_line":"  - locked: locked"},{"line_number":695,"context_line":""},{"line_number":696,"context_line":"**Example Show Server Details (2.47)**"},{"line_number":697,"context_line":""},{"line_number":698,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.47/server-get-resp.json"},{"line_number":699,"context_line":"   :language: javascript"}],"source_content_type":"text/x-c++src","patch_set":55,"id":"bf659307_4ad5e61a","line":696,"in_reply_to":"bf659307_48b3b6e9","updated":"2018-04-04 14:43:55.000000000","message":"Oops, thanks","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b449215945df106f5b23ba7f3374bec80e058230","unresolved":false,"context_lines":[{"line_number":582,"context_line":"  - tenant_id: tenant_id_body"},{"line_number":583,"context_line":"  - updated: updated"},{"line_number":584,"context_line":"  - user_id: user_id"},{"line_number":585,"context_line":"  - trusted_image_certificates: server_trusted_image_certificates"},{"line_number":586,"context_line":"  - OS-EXT-SRV-ATTR:hostname: server_hostname"},{"line_number":587,"context_line":"  - OS-EXT-SRV-ATTR:reservation_id: server_reservation_id"},{"line_number":588,"context_line":"  - OS-EXT-SRV-ATTR:launch_index: server_launch_index"}],"source_content_type":"text/x-c++src","patch_set":68,"id":"bf659307_e5282187","line":585,"range":{"start_line":585,"start_character":0,"end_line":585,"end_character":65},"updated":"2018-04-11 07:00:21.000000000","message":"do we really want this? it seems unnecessary and also not included in the spec:\nhttps://review.openstack.org/#/c/540879/2/specs/rocky/approved/nova-validate-certificates.rst","commit_id":"524ea7a636b8354b630e5f14db4f6009e1105c79"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"b449215945df106f5b23ba7f3374bec80e058230","unresolved":false,"context_lines":[{"line_number":683,"context_line":"  - updated: updated"},{"line_number":684,"context_line":"  - user_id: user_id"},{"line_number":685,"context_line":"  - fault: fault"},{"line_number":686,"context_line":"  - trusted_image_certificates: server_trusted_image_certificates"},{"line_number":687,"context_line":"  - OS-EXT-SRV-ATTR:hostname: server_hostname"},{"line_number":688,"context_line":"  - OS-EXT-SRV-ATTR:reservation_id: server_reservation_id"},{"line_number":689,"context_line":"  - OS-EXT-SRV-ATTR:launch_index: server_launch_index"}],"source_content_type":"text/x-c++src","patch_set":68,"id":"bf659307_e5ffc1fe","line":686,"range":{"start_line":686,"start_character":0,"end_line":686,"end_character":65},"updated":"2018-04-11 07:00:21.000000000","message":"ditto","commit_id":"524ea7a636b8354b630e5f14db4f6009e1105c79"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"63eae0becc2ce5b9cfb2df1c52738f237c7227a5","unresolved":false,"context_lines":[{"line_number":683,"context_line":"  - updated: updated"},{"line_number":684,"context_line":"  - user_id: user_id"},{"line_number":685,"context_line":"  - fault: fault"},{"line_number":686,"context_line":"  - trusted_image_certificates: server_trusted_image_certificates"},{"line_number":687,"context_line":"  - OS-EXT-SRV-ATTR:hostname: server_hostname"},{"line_number":688,"context_line":"  - OS-EXT-SRV-ATTR:reservation_id: server_reservation_id"},{"line_number":689,"context_line":"  - OS-EXT-SRV-ATTR:launch_index: server_launch_index"}],"source_content_type":"text/x-c++src","patch_set":68,"id":"bf659307_ae6761e9","line":686,"range":{"start_line":686,"start_character":0,"end_line":686,"end_character":65},"in_reply_to":"bf659307_e5ffc1fe","updated":"2018-04-11 13:22:38.000000000","message":"This and list servers details were added to conform to the pattern of adding a new schema to Tempest [1]. If this is non-standard, we can review the Tempest patch to remove the calls to show and list.\n\n[1] https://review.openstack.org/#/c/526485/","commit_id":"524ea7a636b8354b630e5f14db4f6009e1105c79"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":598,"context_line":"  - fault.details: fault_details"},{"line_number":599,"context_line":"  - progress: progress"},{"line_number":600,"context_line":"  - servers_links: servers_links"},{"line_number":601,"context_line":"  - trusted_image_certificates: server_trusted_image_certificates"},{"line_number":602,"context_line":"  - OS-EXT-SRV-ATTR:hostname: server_hostname"},{"line_number":603,"context_line":"  - OS-EXT-SRV-ATTR:reservation_id: server_reservation_id"},{"line_number":604,"context_line":"  - OS-EXT-SRV-ATTR:launch_index: server_launch_index"}],"source_content_type":"text/x-c++src","patch_set":85,"id":"9f6a8fd7_9e624716","line":601,"updated":"2018-04-16 15:51:03.000000000","message":"This should be sorted to the bottom since microversions go at the bottom of the list of parameters and then sorted by microversion ascending, see:\n\nhttps://wiki.openstack.org/wiki/NovaAPIRef#Parameter_Verification","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"47ea9773d76c0298c3249e95f52a1c55c2d1739a","unresolved":false,"context_lines":[{"line_number":598,"context_line":"  - fault.details: fault_details"},{"line_number":599,"context_line":"  - progress: progress"},{"line_number":600,"context_line":"  - servers_links: servers_links"},{"line_number":601,"context_line":"  - trusted_image_certificates: server_trusted_image_certificates"},{"line_number":602,"context_line":"  - OS-EXT-SRV-ATTR:hostname: server_hostname"},{"line_number":603,"context_line":"  - OS-EXT-SRV-ATTR:reservation_id: server_reservation_id"},{"line_number":604,"context_line":"  - OS-EXT-SRV-ATTR:launch_index: server_launch_index"}],"source_content_type":"text/x-c++src","patch_set":85,"id":"9f6a8fd7_cb9a3ec4","line":601,"in_reply_to":"9f6a8fd7_9e624716","updated":"2018-04-16 18:37:25.000000000","message":"Done","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":705,"context_line":"  - fault.message: fault_message"},{"line_number":706,"context_line":"  - fault.details: fault_details"},{"line_number":707,"context_line":"  - progress: progress"},{"line_number":708,"context_line":"  - trusted_image_certificates: server_trusted_image_certificates"},{"line_number":709,"context_line":"  - OS-EXT-SRV-ATTR:hostname: server_hostname"},{"line_number":710,"context_line":"  - OS-EXT-SRV-ATTR:reservation_id: server_reservation_id"},{"line_number":711,"context_line":"  - OS-EXT-SRV-ATTR:launch_index: server_launch_index"}],"source_content_type":"text/x-c++src","patch_set":85,"id":"9f6a8fd7_5e6caf07","line":708,"updated":"2018-04-16 15:51:03.000000000","message":"sort to the bottom","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"47ea9773d76c0298c3249e95f52a1c55c2d1739a","unresolved":false,"context_lines":[{"line_number":705,"context_line":"  - fault.message: fault_message"},{"line_number":706,"context_line":"  - fault.details: fault_details"},{"line_number":707,"context_line":"  - progress: progress"},{"line_number":708,"context_line":"  - trusted_image_certificates: server_trusted_image_certificates"},{"line_number":709,"context_line":"  - OS-EXT-SRV-ATTR:hostname: server_hostname"},{"line_number":710,"context_line":"  - OS-EXT-SRV-ATTR:reservation_id: server_reservation_id"},{"line_number":711,"context_line":"  - OS-EXT-SRV-ATTR:launch_index: server_launch_index"}],"source_content_type":"text/x-c++src","patch_set":85,"id":"9f6a8fd7_eb9f02b2","line":708,"in_reply_to":"9f6a8fd7_5e6caf07","updated":"2018-04-16 18:37:25.000000000","message":"Done","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":723,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.62/server-get-resp.json"},{"line_number":724,"context_line":"   :language: javascript"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"Update Server"},{"line_number":727,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":".. rest_method:: PUT /servers/{server_id}"}],"source_content_type":"text/x-c++src","patch_set":85,"id":"9f6a8fd7_be506b34","line":726,"updated":"2018-04-16 15:51:03.000000000","message":"You\u0027re missing the response parameter for this, which will do a show() view builder response:\n\nhttps://github.com/openstack/nova/blob/e285070ec7d1b84f7c7e6e0af0d8557a159c32bf/nova/api/openstack/compute/servers.py#L717","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"47ea9773d76c0298c3249e95f52a1c55c2d1739a","unresolved":false,"context_lines":[{"line_number":723,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.62/server-get-resp.json"},{"line_number":724,"context_line":"   :language: javascript"},{"line_number":725,"context_line":""},{"line_number":726,"context_line":"Update Server"},{"line_number":727,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":728,"context_line":""},{"line_number":729,"context_line":".. rest_method:: PUT /servers/{server_id}"}],"source_content_type":"text/x-c++src","patch_set":85,"id":"9f6a8fd7_6b94528c","line":726,"in_reply_to":"9f6a8fd7_be506b34","updated":"2018-04-16 18:37:25.000000000","message":"Done","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"c6db1fa7a85ce1224945539152bf8dbc20499217","unresolved":false,"context_lines":[{"line_number":383,"context_line":"  - os:scheduler_hints.target_cell: os:scheduler_hints_target_cell"},{"line_number":384,"context_line":"  - trusted_image_certificates: server_trusted_image_certificates_req"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"**Example Create Server**"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":".. literalinclude:: ../../doc/api_samples/servers/server-create-req.json"},{"line_number":389,"context_line":"   :language: javascript"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"**Example Create Server With Automatic Networking (v2.37)**"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.37/server-create-req.json"},{"line_number":394,"context_line":"   :language: javascript"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"Response"},{"line_number":397,"context_line":"--------"}],"source_content_type":"text/x-c++src","patch_set":100,"id":"5f7c97a3_0a6ad0b1","line":394,"range":{"start_line":386,"start_character":0,"end_line":394,"end_character":24},"updated":"2018-05-30 10:21:43.000000000","message":"Should be nicer to have a new example here?","commit_id":"cd04b79ee219e130134e877aa1aeb9f9cc89d461"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"b9cabf94d81b1eb614aa56967274cac03397434f","unresolved":false,"context_lines":[{"line_number":383,"context_line":"  - os:scheduler_hints.target_cell: os:scheduler_hints_target_cell"},{"line_number":384,"context_line":"  - trusted_image_certificates: server_trusted_image_certificates_req"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"**Example Create Server**"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":".. literalinclude:: ../../doc/api_samples/servers/server-create-req.json"},{"line_number":389,"context_line":"   :language: javascript"},{"line_number":390,"context_line":""},{"line_number":391,"context_line":"**Example Create Server With Automatic Networking (v2.37)**"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":".. literalinclude:: ../../doc/api_samples/servers/v2.37/server-create-req.json"},{"line_number":394,"context_line":"   :language: javascript"},{"line_number":395,"context_line":""},{"line_number":396,"context_line":"Response"},{"line_number":397,"context_line":"--------"}],"source_content_type":"text/x-c++src","patch_set":100,"id":"5f7c97a3_41198ad4","line":394,"range":{"start_line":386,"start_character":0,"end_line":394,"end_character":24},"in_reply_to":"5f7c97a3_0a6ad0b1","updated":"2018-05-30 17:33:29.000000000","message":"Done","commit_id":"cd04b79ee219e130134e877aa1aeb9f9cc89d461"}],"doc/api_samples/servers/v2.54/server-action-rebuild-resp.json":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"b03be484649b4c05b12cd61f34245fc8654d7266","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"tags\": [],"},{"line_number":55,"context_line":"        \"tenant_id\": \"6f70656e737461636b20342065766572\","},{"line_number":56,"context_line":"        \"updated\": \"2017-09-05T20:06:32Z\","},{"line_number":57,"context_line":"        \"user_id\": \"fake\""},{"line_number":58,"context_line":"    }"},{"line_number":59,"context_line":"}"}],"source_content_type":"application/json","patch_set":9,"id":"7f515b1d_705f52e5","line":57,"updated":"2017-10-05 19:48:13.000000000","message":"trusted_certificates isn\u0027t in the response?","commit_id":"ecee7d5622eeda74fe0e41eb97d432b3b5746a0e"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"381d24b9f510b11217fdd72a71ac4af9e4fdf4f7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"tags\": [],"},{"line_number":55,"context_line":"        \"tenant_id\": \"6f70656e737461636b20342065766572\","},{"line_number":56,"context_line":"        \"updated\": \"2017-09-05T20:06:32Z\","},{"line_number":57,"context_line":"        \"user_id\": \"fake\""},{"line_number":58,"context_line":"    }"},{"line_number":59,"context_line":"}"}],"source_content_type":"application/json","patch_set":9,"id":"7f515b1d_8b84865f","line":57,"in_reply_to":"7f515b1d_705f52e5","updated":"2017-10-09 21:45:43.000000000","message":"I\u0027ll add it in the next patchset.","commit_id":"ecee7d5622eeda74fe0e41eb97d432b3b5746a0e"}],"doc/api_samples/servers/v2.57/server-create-resp.json":[{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"2f6faed186bbf248531cb912a012cd0bc26e4f7d","unresolved":false,"context_lines":[{"line_number":18,"context_line":"                \"name\": \"default\""},{"line_number":19,"context_line":"            }"},{"line_number":20,"context_line":"        ]"},{"line_number":21,"context_line":"    }"},{"line_number":22,"context_line":"}"}],"source_content_type":"application/json","patch_set":18,"id":"df87a7cf_f4d40b4a","line":21,"updated":"2017-12-11 16:11:25.000000000","message":"We\u0027re including trusted_image_certificates in the server create response [1], so we should include that in the sample API call","commit_id":"b272ccea8c5ba4584a945c5f7c66fa05aa0662d7"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"7750cca048ff1b24b38ebf87ad0e508122c6aa8b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"                \"name\": \"default\""},{"line_number":19,"context_line":"            }"},{"line_number":20,"context_line":"        ]"},{"line_number":21,"context_line":"    }"},{"line_number":22,"context_line":"}"}],"source_content_type":"application/json","patch_set":18,"id":"df87a7cf_4e399bd4","line":21,"in_reply_to":"df87a7cf_2b2769cc","updated":"2017-12-11 20:01:27.000000000","message":"@Brianna: I see. My mistake - please disregard.","commit_id":"b272ccea8c5ba4584a945c5f7c66fa05aa0662d7"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"d59f07a821389becf64146679ac66ad6cb47a9e5","unresolved":false,"context_lines":[{"line_number":18,"context_line":"                \"name\": \"default\""},{"line_number":19,"context_line":"            }"},{"line_number":20,"context_line":"        ]"},{"line_number":21,"context_line":"    }"},{"line_number":22,"context_line":"}"}],"source_content_type":"application/json","patch_set":18,"id":"df87a7cf_2b2769cc","line":21,"in_reply_to":"df87a7cf_e8bd0702","updated":"2017-12-11 19:57:30.000000000","message":"Not a problem.\n\nThe server create response is defined at line 66 of https://review.openstack.org/#/c/486204/18/nova/api/openstack/compute/views/servers.py and is very limited -- the show method is used to display the detail view.\n\nAs a result, trusted_image_certificates should be included in the detail response, but not in the server create response.","commit_id":"b272ccea8c5ba4584a945c5f7c66fa05aa0662d7"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"67511eb7cf3f9b34d7fbfb852f71eafb8b387623","unresolved":false,"context_lines":[{"line_number":18,"context_line":"                \"name\": \"default\""},{"line_number":19,"context_line":"            }"},{"line_number":20,"context_line":"        ]"},{"line_number":21,"context_line":"    }"},{"line_number":22,"context_line":"}"}],"source_content_type":"application/json","patch_set":18,"id":"df87a7cf_e8bd0702","line":21,"in_reply_to":"df87a7cf_f4d40b4a","updated":"2017-12-11 18:44:28.000000000","message":"What was [1] intended to reference?","commit_id":"b272ccea8c5ba4584a945c5f7c66fa05aa0662d7"}],"doc/api_samples/servers/v2.61/server-action-rebuild-resp.json":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f89d76f49ed9d87ff6bb986beb3fec21c8e8a2d4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"user_data\": \"ZWNobyAiaGVsbG8gd29ybGQi\","},{"line_number":62,"context_line":"        \"tenant_id\": \"6f70656e737461636b20342065766572\","},{"line_number":63,"context_line":"        \"trusted_image_certificates\": ["},{"line_number":64,"context_line":"            \"trusted-cert-id-1\","},{"line_number":65,"context_line":"            \"trusted-cert-id-2\""},{"line_number":66,"context_line":"        ],"},{"line_number":67,"context_line":"        \"updated\": \"2017-10-10T16:06:03Z\","}],"source_content_type":"application/json","patch_set":53,"id":"bf659307_fdf2a66f","line":64,"updated":"2018-04-03 11:29:08.000000000","message":"Was expecting uuids in the examples, but this is technically valid input all the same.","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"}],"doc/api_samples/servers/v2.62/server-action-rebuild-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"user_data\": \"ZWNobyAiaGVsbG8gd29ybGQi\","},{"line_number":62,"context_line":"        \"tenant_id\": \"6f70656e737461636b20342065766572\","},{"line_number":63,"context_line":"        \"trusted_image_certificates\": ["},{"line_number":64,"context_line":"            \"trusted-cert-id-1\","},{"line_number":65,"context_line":"            \"trusted-cert-id-2\""},{"line_number":66,"context_line":"        ],"},{"line_number":67,"context_line":"        \"updated\": \"2017-10-10T16:06:03Z\","}],"source_content_type":"application/json","patch_set":85,"id":"9f6a8fd7_3e5c5b4a","line":64,"range":{"start_line":64,"start_character":13,"end_line":64,"end_character":30},"updated":"2018-04-16 15:51:03.000000000","message":"Are these going to be UUIDs in real life from Barbican? If so, let\u0027s use UUIDs in the samples.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"d5b262f172a51c23efbd54eccaf178b881b78e83","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"user_data\": \"ZWNobyAiaGVsbG8gd29ybGQi\","},{"line_number":62,"context_line":"        \"tenant_id\": \"6f70656e737461636b20342065766572\","},{"line_number":63,"context_line":"        \"trusted_image_certificates\": ["},{"line_number":64,"context_line":"            \"trusted-cert-id-1\","},{"line_number":65,"context_line":"            \"trusted-cert-id-2\""},{"line_number":66,"context_line":"        ],"},{"line_number":67,"context_line":"        \"updated\": \"2017-10-10T16:06:03Z\","}],"source_content_type":"application/json","patch_set":85,"id":"9f6a8fd7_8859acff","line":64,"range":{"start_line":64,"start_character":13,"end_line":64,"end_character":30},"in_reply_to":"9f6a8fd7_3e5c5b4a","updated":"2018-04-16 17:11:30.000000000","message":"Yes, they are. I\u0027ll update with real UUIDs.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"20148f4e492fda475a198188c5941ecc1806c650","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"user_data\": \"ZWNobyAiaGVsbG8gd29ybGQi\","},{"line_number":62,"context_line":"        \"tenant_id\": \"6f70656e737461636b20342065766572\","},{"line_number":63,"context_line":"        \"trusted_image_certificates\": ["},{"line_number":64,"context_line":"            \"trusted-cert-id-1\","},{"line_number":65,"context_line":"            \"trusted-cert-id-2\""},{"line_number":66,"context_line":"        ],"},{"line_number":67,"context_line":"        \"updated\": \"2017-10-10T16:06:03Z\","}],"source_content_type":"application/json","patch_set":85,"id":"9f6a8fd7_d4d724bf","line":64,"range":{"start_line":64,"start_character":13,"end_line":64,"end_character":30},"in_reply_to":"9f6a8fd7_869e7d05","updated":"2018-04-17 14:57:18.000000000","message":"OK so if we can\u0027t rely on the cert manager using UUIDs for the cert IDs, then why should we be restricting the length to 50? What if the cert manager decides to construct some other kind of sha that\u0027s \u003e50 characters?","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"7a876fb7cdd10b64f747ab4390dfcefa89c27beb","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \"user_data\": \"ZWNobyAiaGVsbG8gd29ybGQi\","},{"line_number":62,"context_line":"        \"tenant_id\": \"6f70656e737461636b20342065766572\","},{"line_number":63,"context_line":"        \"trusted_image_certificates\": ["},{"line_number":64,"context_line":"            \"trusted-cert-id-1\","},{"line_number":65,"context_line":"            \"trusted-cert-id-2\""},{"line_number":66,"context_line":"        ],"},{"line_number":67,"context_line":"        \"updated\": \"2017-10-10T16:06:03Z\","}],"source_content_type":"application/json","patch_set":85,"id":"9f6a8fd7_869e7d05","line":64,"range":{"start_line":64,"start_character":13,"end_line":64,"end_character":30},"in_reply_to":"9f6a8fd7_8859acff","updated":"2018-04-16 18:53:13.000000000","message":"I said \"yes\" a little too quickly. These will be UUIDs if that\u0027s what is used by the cert manager. We are only limiting each certificate ID to be a 1-50 character string.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"}],"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"176a80210f61e1c545132b9b8ded4de38b4489f4","unresolved":false,"context_lines":[{"line_number":769,"context_line":"2.61"},{"line_number":770,"context_line":"----"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"Adds support for the trusted_image_certificates parameter, which is used to"},{"line_number":773,"context_line":"define a list of trusted certificates (max 50) that can be used during image"},{"line_number":774,"context_line":"signature verification, for both when a server is created or rebuilt."}],"source_content_type":"text/x-rst","patch_set":56,"id":"bf659307_06d018c9","line":772,"range":{"start_line":772,"start_character":48,"end_line":772,"end_character":57},"updated":"2018-04-06 15:21:50.000000000","message":"nit: could add \"to server create and rebuild\" here and remove \", for both...\" at the end.\n\nIf you change it here, change in the other places that use this same wording as well.","commit_id":"6bba797a160cd86a013d5970d0c388581f5c39a9"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"0e00bff7de299974cff6f1e337241cb75d169835","unresolved":false,"context_lines":[{"line_number":769,"context_line":"2.61"},{"line_number":770,"context_line":"----"},{"line_number":771,"context_line":""},{"line_number":772,"context_line":"Adds support for the trusted_image_certificates parameter, which is used to"},{"line_number":773,"context_line":"define a list of trusted certificates (max 50) that can be used during image"},{"line_number":774,"context_line":"signature verification, for both when a server is created or rebuilt."}],"source_content_type":"text/x-rst","patch_set":56,"id":"bf659307_c97c7322","line":772,"range":{"start_line":772,"start_character":48,"end_line":772,"end_character":57},"in_reply_to":"bf659307_06d018c9","updated":"2018-04-06 16:58:22.000000000","message":"Sure, I can update that","commit_id":"6bba797a160cd86a013d5970d0c388581f5c39a9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":784,"context_line":"2.62"},{"line_number":785,"context_line":"----"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"Adds support for the trusted_image_certificates parameter to server create,"},{"line_number":788,"context_line":"rebuild, show, and list. This parameter is used to define a list of trusted"},{"line_number":789,"context_line":"certificate IDs that can be used during image signature verification and"},{"line_number":790,"context_line":"certificate validation. The list is restricted to a maximum of 50 IDs, each"},{"line_number":791,"context_line":"with a maximum length of 50 characters."}],"source_content_type":"text/x-rst","patch_set":85,"id":"9f6a8fd7_1e271715","line":790,"range":{"start_line":787,"start_character":0,"end_line":790,"end_character":23},"updated":"2018-04-16 15:51:03.000000000","message":"This makes it sound like I can pass trusted_image_certificates to list and show (also, let\u0027s please use the actual API routes here instead of the CLI references). This is also missing server update which will return the show() results from the view builder.\n\nSo maybe something like this:\n\nAdds support for passing the ``trusted_image_certificates`` request parameter to server create and rebuild APIs:\n\n* POST /servers\n* POST /servers/{server_id}/action (rebuild)\n\nAnd the ``trusted_image_certificates`` parameter will be in the response for the following APIs:\n\n* GET /servers/detail\n* GET /servers/{server_id}\n* PUT /servers/{server_id}\n* POST /servers/{server_id}/action (rebuild)","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"47ea9773d76c0298c3249e95f52a1c55c2d1739a","unresolved":false,"context_lines":[{"line_number":784,"context_line":"2.62"},{"line_number":785,"context_line":"----"},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"Adds support for the trusted_image_certificates parameter to server create,"},{"line_number":788,"context_line":"rebuild, show, and list. This parameter is used to define a list of trusted"},{"line_number":789,"context_line":"certificate IDs that can be used during image signature verification and"},{"line_number":790,"context_line":"certificate validation. The list is restricted to a maximum of 50 IDs, each"},{"line_number":791,"context_line":"with a maximum length of 50 characters."}],"source_content_type":"text/x-rst","patch_set":85,"id":"9f6a8fd7_4bf94e7e","line":790,"range":{"start_line":787,"start_character":0,"end_line":790,"end_character":23},"in_reply_to":"9f6a8fd7_1e271715","updated":"2018-04-16 18:37:25.000000000","message":"Done","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":792,"context_line":"for the ``events.traceback`` field. If the user is prevented by policy, only"},{"line_number":793,"context_line":"``hostId`` will be displayed."},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"2.63"},{"line_number":796,"context_line":"----"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"Adds support for the ``trusted_image_certificates`` parameter, which is used to"}],"source_content_type":"text/x-rst","patch_set":101,"id":"5f7c97a3_0daffc2b","line":795,"updated":"2018-06-04 13:59:33.000000000","message":"nit: should probably mention that trusted_image_certificates is not supported with volume-backed servers.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":792,"context_line":"for the ``events.traceback`` field. If the user is prevented by policy, only"},{"line_number":793,"context_line":"``hostId`` will be displayed."},{"line_number":794,"context_line":""},{"line_number":795,"context_line":"2.63"},{"line_number":796,"context_line":"----"},{"line_number":797,"context_line":""},{"line_number":798,"context_line":"Adds support for the ``trusted_image_certificates`` parameter, which is used to"}],"source_content_type":"text/x-rst","patch_set":101,"id":"5f7c97a3_504b285e","line":795,"in_reply_to":"5f7c97a3_0daffc2b","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"}],"nova/api/openstack/compute/schemas/servers.py":[{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"dc66185026e999d9cf8c9f93009a99e808ebf4cf","unresolved":false,"context_lines":[{"line_number":169,"context_line":"base_update_v20[\u0027properties\u0027][\u0027server\u0027]["},{"line_number":170,"context_line":"    \u0027properties\u0027][\u0027name\u0027] \u003d parameter_types.name_with_leading_trailing_spaces"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"base_update_v219 \u003d copy.deepcopy(base_update)"},{"line_number":173,"context_line":"base_update_v219[\u0027properties\u0027][\u0027server\u0027]["},{"line_number":174,"context_line":"    \u0027properties\u0027][\u0027description\u0027] \u003d parameter_types.description"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_d9848fd5","line":172,"range":{"start_line":172,"start_character":0,"end_line":172,"end_character":16},"updated":"2017-08-29 17:09:31.000000000","message":"Do we not need to account for updates as well?","commit_id":"59e84b6136bbe130577b42ade4325f29df850ab8"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"a80871fc12e1eba819a3cb7144b7b5ba4d3212ec","unresolved":false,"context_lines":[{"line_number":169,"context_line":"base_update_v20[\u0027properties\u0027][\u0027server\u0027]["},{"line_number":170,"context_line":"    \u0027properties\u0027][\u0027name\u0027] \u003d parameter_types.name_with_leading_trailing_spaces"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"base_update_v219 \u003d copy.deepcopy(base_update)"},{"line_number":173,"context_line":"base_update_v219[\u0027properties\u0027][\u0027server\u0027]["},{"line_number":174,"context_line":"    \u0027properties\u0027][\u0027description\u0027] \u003d parameter_types.description"},{"line_number":175,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_ef787590","line":172,"range":{"start_line":172,"start_character":0,"end_line":172,"end_character":16},"in_reply_to":"7f287b81_d9848fd5","updated":"2017-09-05 21:09:25.000000000","message":"We allow for trusted certs to be defined both when an instance is initially built and if it is rebuilt, since both require using the image, and signature verification is done on the image.  An update to the instance does not trigger signature verification on the image, since the image data is not used during an update.  Thus, there\u0027s no reason to provide the trusted certs during an update.","commit_id":"59e84b6136bbe130577b42ade4325f29df850ab8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":322,"context_line":"# using schema validation, but are considered to be bad values"},{"line_number":323,"context_line":"# and disabled to use. In order to avoid backward incompatibility,"},{"line_number":324,"context_line":"# they are ignored instead of return HTTP 400."},{"line_number":325,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":326,"context_line":"    \u0027architecture\u0027, \u0027cell_name\u0027, \u0027cleaned\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":327,"context_line":"    \u0027default_swap_device\u0027, \u0027deleted\u0027, \u0027deleted_at\u0027, \u0027disable_terminate\u0027,"},{"line_number":328,"context_line":"    \u0027ephemeral_gb\u0027, \u0027ephemeral_key_uuid\u0027, \u0027id\u0027, \u0027key_data\u0027, \u0027launched_on\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_485402ff","line":325,"updated":"2018-06-04 13:59:33.000000000","message":"Unsure if trusted_image_certificates should be in this list, I don\u0027t see tags in this list either. We should ask Alex Xu.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c23b508b9d79d716e5827e91830ae00de196e3d1","unresolved":false,"context_lines":[{"line_number":322,"context_line":"# using schema validation, but are considered to be bad values"},{"line_number":323,"context_line":"# and disabled to use. In order to avoid backward incompatibility,"},{"line_number":324,"context_line":"# they are ignored instead of return HTTP 400."},{"line_number":325,"context_line":"SERVER_LIST_IGNORE_SORT_KEY \u003d ["},{"line_number":326,"context_line":"    \u0027architecture\u0027, \u0027cell_name\u0027, \u0027cleaned\u0027, \u0027default_ephemeral_device\u0027,"},{"line_number":327,"context_line":"    \u0027default_swap_device\u0027, \u0027deleted\u0027, \u0027deleted_at\u0027, \u0027disable_terminate\u0027,"},{"line_number":328,"context_line":"    \u0027ephemeral_gb\u0027, \u0027ephemeral_key_uuid\u0027, \u0027id\u0027, \u0027key_data\u0027, \u0027launched_on\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_e31bb1c7","line":325,"in_reply_to":"5f7c97a3_485402ff","updated":"2018-06-04 14:13:08.000000000","message":"VALID_SORT_KEYS is a whitelist, so we needn\u0027t add it to any list.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        \u0027ip6\u0027: parameter_types.common_query_regex_param,"},{"line_number":403,"context_line":"        \u0027created_at\u0027: parameter_types.common_query_regex_param,"},{"line_number":404,"context_line":"    },"},{"line_number":405,"context_line":"    # For backward-compatible additionalProperties is set to be True here."},{"line_number":406,"context_line":"    # And we will either strip the extra params out or raise HTTP 400"},{"line_number":407,"context_line":"    # according to the params\u0027 value in the later process."},{"line_number":408,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":409,"context_line":"    # Prevent internal-attributes that are started with underscore from"},{"line_number":410,"context_line":"    # being striped out in schema validation, and raise HTTP 400 in API."},{"line_number":411,"context_line":"    \u0027patternProperties\u0027: {\"^_\": parameter_types.common_query_param}"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_280d0635","line":408,"range":{"start_line":405,"start_character":4,"end_line":408,"end_character":33},"updated":"2018-06-04 13:59:33.000000000","message":"Need to figure out what happens if I tried to filter servers by trusted_image_certificates? Is the parameter ignored?","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c23b508b9d79d716e5827e91830ae00de196e3d1","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        \u0027ip6\u0027: parameter_types.common_query_regex_param,"},{"line_number":403,"context_line":"        \u0027created_at\u0027: parameter_types.common_query_regex_param,"},{"line_number":404,"context_line":"    },"},{"line_number":405,"context_line":"    # For backward-compatible additionalProperties is set to be True here."},{"line_number":406,"context_line":"    # And we will either strip the extra params out or raise HTTP 400"},{"line_number":407,"context_line":"    # according to the params\u0027 value in the later process."},{"line_number":408,"context_line":"    \u0027additionalProperties\u0027: True,"},{"line_number":409,"context_line":"    # Prevent internal-attributes that are started with underscore from"},{"line_number":410,"context_line":"    # being striped out in schema validation, and raise HTTP 400 in API."},{"line_number":411,"context_line":"    \u0027patternProperties\u0027: {\"^_\": parameter_types.common_query_param}"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_03258d0a","line":408,"range":{"start_line":405,"start_character":4,"end_line":408,"end_character":33},"in_reply_to":"5f7c97a3_280d0635","updated":"2018-06-04 14:13:08.000000000","message":"it will be stripped out. https://github.com/openstack/nova/blob/master/nova/api/validation/__init__.py#L191. So query_params_v21 is a whitelist.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"}],"nova/api/openstack/compute/servers.py":[{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"270b8f42cd2f9e5ec9bfff92807285cbad195b93","unresolved":false,"context_lines":[{"line_number":689,"context_line":"        else:"},{"line_number":690,"context_line":"            self.compute_api.delete(context, instance)"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"    @extensions.expected_errors(404)"},{"line_number":693,"context_line":"    @validation.schema(schema_server_update_v20, \u00272.0\u0027, \u00272.0\u0027)"},{"line_number":694,"context_line":"    @validation.schema(schema_server_update, \u00272.1\u0027, \u00272.18\u0027)"},{"line_number":695,"context_line":"    @validation.schema(schema_server_update_v219, \u00272.19\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f4e5783_152e09a5","line":692,"updated":"2017-11-16 14:21:20.000000000","message":"Why did \"400\" get removed from the expected errors?","commit_id":"0de22f595704f7868362ab011eb02fe1175ad5d2"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"d31428ab4d2f96cd8fcb0e837e60bd6febfd9df3","unresolved":false,"context_lines":[{"line_number":689,"context_line":"        else:"},{"line_number":690,"context_line":"            self.compute_api.delete(context, instance)"},{"line_number":691,"context_line":""},{"line_number":692,"context_line":"    @extensions.expected_errors(404)"},{"line_number":693,"context_line":"    @validation.schema(schema_server_update_v20, \u00272.0\u0027, \u00272.0\u0027)"},{"line_number":694,"context_line":"    @validation.schema(schema_server_update, \u00272.1\u0027, \u00272.18\u0027)"},{"line_number":695,"context_line":"    @validation.schema(schema_server_update_v219, \u00272.19\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ff82abbf_e842d53d","line":692,"in_reply_to":"5f4e5783_152e09a5","updated":"2017-11-29 21:40:37.000000000","message":"It was removed in https://github.com/openstack/nova/commit/d6eccc0e330dabdfdf380d45066a8a231ecf5865","commit_id":"0de22f595704f7868362ab011eb02fe1175ad5d2"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"6ea60367198470b9b4b333987e39b73b6ea2a964","unresolved":false,"context_lines":[{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.52\u0027):"},{"line_number":480,"context_line":"            create_kwargs[\u0027tags\u0027] \u003d server_dict.get(\u0027tags\u0027)"},{"line_number":481,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.60\u0027):"},{"line_number":482,"context_line":"            create_kwargs[\u0027trusted_certs\u0027] \u003d server_dict.get("},{"line_number":483,"context_line":"                \u0027trusted_image_certificates\u0027)"},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"7f96bb07_bbd89c52","line":481,"updated":"2018-01-18 17:55:06.000000000","message":"It\u0027d be cleaner to also check that server_dict contains trusted_image_certificates","commit_id":"9217134e4691d554e59fd6877f70988a704f8680"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d6eb0196d72acdd6cb7f3d79cc16b8cc7429e91d","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.52\u0027):"},{"line_number":477,"context_line":"            create_kwargs[\u0027tags\u0027] \u003d server_dict.get(\u0027tags\u0027)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        if ((api_version_request.is_supported(req, min_version\u003d\u00272.61\u0027))"},{"line_number":480,"context_line":"                and (\u0027trusted_image_certificates\u0027 in server_dict)):"},{"line_number":481,"context_line":"            create_kwargs[\u0027trusted_certs\u0027] \u003d server_dict.get("},{"line_number":482,"context_line":"                \u0027trusted_image_certificates\u0027)"},{"line_number":483,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"bf659307_75a226fe","line":480,"range":{"start_line":479,"start_character":8,"end_line":480,"end_character":67},"updated":"2018-04-13 20:49:58.000000000","message":"note that you don\u0027t need as many parens in this conditional :)\n\nYou could just do:\n\n if (api_version_request.is_supported(req, min_version\u003d\u00272.61\u0027)\n         and \u0027trusted_image_certifications\u0027 in server_dict):","commit_id":"7e64019f332efe53fd9e949cf8fe7252d7ebf83f"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"6400c8b5245b9263384fb4143f0ea02975db8682","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.52\u0027):"},{"line_number":477,"context_line":"            create_kwargs[\u0027tags\u0027] \u003d server_dict.get(\u0027tags\u0027)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        if ((api_version_request.is_supported(req, min_version\u003d\u00272.61\u0027))"},{"line_number":480,"context_line":"                and (\u0027trusted_image_certificates\u0027 in server_dict)):"},{"line_number":481,"context_line":"            create_kwargs[\u0027trusted_certs\u0027] \u003d server_dict.get("},{"line_number":482,"context_line":"                \u0027trusted_image_certificates\u0027)"},{"line_number":483,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"bf659307_75e466e0","line":480,"range":{"start_line":479,"start_character":8,"end_line":480,"end_character":67},"in_reply_to":"bf659307_75a226fe","updated":"2018-04-13 21:04:44.000000000","message":"Ack. I tend to over-do it on the parentheses, but I\u0027ll fix this if something else in this patch needs to be changed.","commit_id":"7e64019f332efe53fd9e949cf8fe7252d7ebf83f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"d6eb0196d72acdd6cb7f3d79cc16b8cc7429e91d","unresolved":false,"context_lines":[{"line_number":929,"context_line":"        if include_user_data and \u0027user_data\u0027 in rebuild_dict:"},{"line_number":930,"context_line":"            kwargs[\u0027user_data\u0027] \u003d rebuild_dict[\u0027user_data\u0027]"},{"line_number":931,"context_line":""},{"line_number":932,"context_line":"        if ((api_version_request.is_supported(req, min_version\u003d\u00272.61\u0027))"},{"line_number":933,"context_line":"                and (\u0027trusted_image_certificates\u0027 in rebuild_dict)):"},{"line_number":934,"context_line":"            kwargs[\u0027trusted_certs\u0027] \u003d rebuild_dict.get("},{"line_number":935,"context_line":"                \u0027trusted_image_certificates\u0027)"},{"line_number":936,"context_line":""}],"source_content_type":"text/x-python","patch_set":73,"id":"bf659307_35b02e43","line":933,"range":{"start_line":932,"start_character":0,"end_line":933,"end_character":68},"updated":"2018-04-13 20:49:58.000000000","message":"ditto.","commit_id":"7e64019f332efe53fd9e949cf8fe7252d7ebf83f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.52\u0027):"},{"line_number":477,"context_line":"            create_kwargs[\u0027tags\u0027] \u003d server_dict.get(\u0027tags\u0027)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        if ((api_version_request.is_supported(req, min_version\u003d\u00272.62\u0027))"},{"line_number":480,"context_line":"                and (\u0027trusted_image_certificates\u0027 in server_dict)):"},{"line_number":481,"context_line":"            create_kwargs[\u0027trusted_certs\u0027] \u003d server_dict.get("},{"line_number":482,"context_line":"                \u0027trusted_image_certificates\u0027)"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"        helpers.translate_attributes(helpers.CREATE,"},{"line_number":485,"context_line":"                                     server_dict, create_kwargs)"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_deabdf72","line":482,"range":{"start_line":479,"start_character":8,"end_line":482,"end_character":45},"updated":"2018-04-16 15:51:03.000000000","message":"nit: I think this can be simplified to be:\n\ncreate_kwargs[\u0027trusted_certs\u0027] \u003d server_dict.get(\n    \u0027trusted_image_certificates\u0027)\n\nBecause the request body schema is going to fail early if trusted_image_certificates is specified without microversion \u003e\u003d 2.62.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"47ea9773d76c0298c3249e95f52a1c55c2d1739a","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        if api_version_request.is_supported(req, min_version\u003d\u00272.52\u0027):"},{"line_number":477,"context_line":"            create_kwargs[\u0027tags\u0027] \u003d server_dict.get(\u0027tags\u0027)"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        if ((api_version_request.is_supported(req, min_version\u003d\u00272.62\u0027))"},{"line_number":480,"context_line":"                and (\u0027trusted_image_certificates\u0027 in server_dict)):"},{"line_number":481,"context_line":"            create_kwargs[\u0027trusted_certs\u0027] \u003d server_dict.get("},{"line_number":482,"context_line":"                \u0027trusted_image_certificates\u0027)"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"        helpers.translate_attributes(helpers.CREATE,"},{"line_number":485,"context_line":"                                     server_dict, create_kwargs)"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_2b4c1ac6","line":482,"range":{"start_line":479,"start_character":8,"end_line":482,"end_character":45},"in_reply_to":"9f6a8fd7_deabdf72","updated":"2018-04-16 18:37:25.000000000","message":"Done","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f87a4796966de17153768889f30d9ff790bb4283","unresolved":false,"context_lines":[{"line_number":551,"context_line":"                    flavor_id, ctxt\u003dcontext, read_deleted\u003d\"no\")"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"            supports_multiattach \u003d common.supports_multiattach_volume(req)"},{"line_number":554,"context_line":"            (instances, resv_id) \u003d self.compute_api.create(context,"},{"line_number":555,"context_line":"                            inst_type,"},{"line_number":556,"context_line":"                            image_uuid,"},{"line_number":557,"context_line":"                            display_name\u003dname,"}],"source_content_type":"text/x-python","patch_set":92,"id":"9f6a8fd7_eb24a7c8","line":554,"updated":"2018-04-18 16:23:41.000000000","message":"You\u0027re not handling CertificateValidationFailed in the case of boot from volume with trusted_certs, so that would end up being a 500 response from the server when it should really be a 400 response.","commit_id":"fe38fff01ecefa759f14c9a9c69ee3b966058b8a"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"3bb73deab5691225bb391e26867c7f5b7013eaba","unresolved":false,"context_lines":[{"line_number":551,"context_line":"                    flavor_id, ctxt\u003dcontext, read_deleted\u003d\"no\")"},{"line_number":552,"context_line":""},{"line_number":553,"context_line":"            supports_multiattach \u003d common.supports_multiattach_volume(req)"},{"line_number":554,"context_line":"            (instances, resv_id) \u003d self.compute_api.create(context,"},{"line_number":555,"context_line":"                            inst_type,"},{"line_number":556,"context_line":"                            image_uuid,"},{"line_number":557,"context_line":"                            display_name\u003dname,"}],"source_content_type":"text/x-python","patch_set":92,"id":"9f6a8fd7_7a9cde5c","line":554,"in_reply_to":"9f6a8fd7_eb24a7c8","updated":"2018-04-18 18:08:49.000000000","message":"Done","commit_id":"fe38fff01ecefa759f14c9a9c69ee3b966058b8a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        for search_opt in search_opts:"},{"line_number":185,"context_line":"            if (search_opt in"},{"line_number":186,"context_line":"                schema_servers.JOINED_TABLE_QUERY_PARAMS_SERVERS.keys() or"},{"line_number":187,"context_line":"                    search_opt.startswith(\u0027_\u0027)):"},{"line_number":188,"context_line":"                msg \u003d _(\"Invalid filter field: %s.\") % search_opt"},{"line_number":189,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_6d16b058","line":186,"range":{"start_line":186,"start_character":31,"end_line":186,"end_character":64},"updated":"2018-06-04 13:59:33.000000000","message":"We should probably ask Alex Xu, but I\u0027m not sure if trusted_image_certificates should be in here or not. It doesn\u0027t look like we intend to support filtering servers by trusted_image_certificates IDs.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":652,"context_line":"                exception.SnapshotNotFound,"},{"line_number":653,"context_line":"                exception.UnableToAutoAllocateNetwork,"},{"line_number":654,"context_line":"                exception.MultiattachNotSupportedOldMicroversion,"},{"line_number":655,"context_line":"                exception.CertificateValidationFailed) as error:"},{"line_number":656,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derror.format_message())"},{"line_number":657,"context_line":"        except (exception.PortInUse,"},{"line_number":658,"context_line":"                exception.InstanceExists,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_8373ddb4","line":655,"updated":"2018-06-04 13:59:33.000000000","message":"As far as I can tell, you don\u0027t have a test verifying that we handle this type of error instead of leaking a 500 - which is probably why it was missed for rebuild below.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":652,"context_line":"                exception.SnapshotNotFound,"},{"line_number":653,"context_line":"                exception.UnableToAutoAllocateNetwork,"},{"line_number":654,"context_line":"                exception.MultiattachNotSupportedOldMicroversion,"},{"line_number":655,"context_line":"                exception.CertificateValidationFailed) as error:"},{"line_number":656,"context_line":"            raise exc.HTTPBadRequest(explanation\u003derror.format_message())"},{"line_number":657,"context_line":"        except (exception.PortInUse,"},{"line_number":658,"context_line":"                exception.InstanceExists,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_520c7a38","line":655,"in_reply_to":"5f7c97a3_8373ddb4","updated":"2018-06-06 20:32:03.000000000","message":"Good catch.  I\u0027ve added the unit test.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":970,"context_line":"                pass"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"        try:"},{"line_number":973,"context_line":"            self.compute_api.rebuild(context,"},{"line_number":974,"context_line":"                                     instance,"},{"line_number":975,"context_line":"                                     image_href,"},{"line_number":976,"context_line":"                                     password,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_c8c25235","line":973,"range":{"start_line":973,"start_character":29,"end_line":973,"end_character":36},"updated":"2018-06-04 13:59:33.000000000","message":"Don\u0027t we need to handle CertificateValidationFailed somewhere in the except block?","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":970,"context_line":"                pass"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"        try:"},{"line_number":973,"context_line":"            self.compute_api.rebuild(context,"},{"line_number":974,"context_line":"                                     instance,"},{"line_number":975,"context_line":"                                     image_href,"},{"line_number":976,"context_line":"                                     password,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_727c1672","line":973,"range":{"start_line":973,"start_character":29,"end_line":973,"end_character":36},"in_reply_to":"5f7c97a3_c8c25235","updated":"2018-06-06 20:32:03.000000000","message":"You are correct.  I\u0027ve added it to the except block, and also added a unit test for it too.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"34f566cf6f20cda3cc4d5626e0aa1453f9850ec4","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        # Skip policy check for \u0027create:trusted_certs\u0027 if no trusted"},{"line_number":502,"context_line":"        # certificate IDs were provided."},{"line_number":503,"context_line":"        trusted_certs \u003d server_dict.get(\u0027trusted_image_certificates\u0027, None)"},{"line_number":504,"context_line":"        if trusted_certs:"},{"line_number":505,"context_line":"            create_kwargs[\u0027trusted_certs\u0027] \u003d trusted_certs"},{"line_number":506,"context_line":"            context.can(server_policies.SERVERS % \u0027create:trusted_certs\u0027,"},{"line_number":507,"context_line":"                        target\u003dtarget)"}],"source_content_type":"text/x-python","patch_set":113,"id":"5f7c97a3_3b4cb13d","line":504,"updated":"2018-06-12 22:20:58.000000000","message":"The similar check for rebuild on L955 also checks if v2.63 is supported. Do we not need to do that here? Nevermind, it looks like that is taken care of in the next file under views/servers.py","commit_id":"3fd162af2f15c1fd1fa9615717d5789e23c72e65"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":500,"context_line":""},{"line_number":501,"context_line":"        # Skip policy check for \u0027create:trusted_certs\u0027 if no trusted"},{"line_number":502,"context_line":"        # certificate IDs were provided."},{"line_number":503,"context_line":"        trusted_certs \u003d server_dict.get(\u0027trusted_image_certificates\u0027, None)"},{"line_number":504,"context_line":"        if trusted_certs:"},{"line_number":505,"context_line":"            create_kwargs[\u0027trusted_certs\u0027] \u003d trusted_certs"},{"line_number":506,"context_line":"            context.can(server_policies.SERVERS % \u0027create:trusted_certs\u0027,"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_6b3c81be","line":503,"range":{"start_line":503,"start_character":68,"end_line":503,"end_character":74},"updated":"2018-06-13 17:32:43.000000000","message":"nit: this is redundant, get() returns None by default if there is no entry for the key","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":953,"context_line":"        # Skip policy check for \u0027rebuild:trusted_certs\u0027 if no trusted"},{"line_number":954,"context_line":"        # certificate IDs were provided."},{"line_number":955,"context_line":"        if ((api_version_request.is_supported(req, min_version\u003d\u00272.63\u0027))"},{"line_number":956,"context_line":"                and (\u0027trusted_image_certificates\u0027 in rebuild_dict)):"},{"line_number":957,"context_line":"            kwargs[\u0027trusted_certs\u0027] \u003d rebuild_dict.get("},{"line_number":958,"context_line":"                \u0027trusted_image_certificates\u0027)"},{"line_number":959,"context_line":"            context.can(server_policies.SERVERS % \u0027rebuild:trusted_certs\u0027,"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_8bc8fda7","line":956,"range":{"start_line":956,"start_character":16,"end_line":956,"end_character":68},"updated":"2018-06-13 17:32:43.000000000","message":"OK this is different from server create because on rebuild, we allow passing trusted_image_certificates\u003dNone to null out the existing trusted_certs on an existing instance, so we can\u0027t treat it the same as looking for:\n\nif rebuild_dict.get(\u0027trusted_image_certificates\u0027):\n\nSince that would be False if trusted_image_certificates is in rebuild_dict but set to None.\n\nThis is also similar to how key_name and user_data are handled above.\n\nJust making sure I\u0027m understanding.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"}],"nova/api/openstack/compute/views/servers.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"b0c5c7af413426b153f43cca24c51ef50065425c","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\"2.60\"):"},{"line_number":177,"context_line":"            try:"},{"line_number":178,"context_line":"                trusted_certs \u003d instance.get(\"trusted_certs\")"},{"line_number":179,"context_line":"                server[\"server\"][\"trusted_image_certificates\"] \\"},{"line_number":180,"context_line":"                    \u003d trusted_certs.ids"},{"line_number":181,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":28,"id":"7f96bb07_826a88b0","line":178,"range":{"start_line":178,"start_character":32,"end_line":178,"end_character":61},"updated":"2018-01-15 19:59:27.000000000","message":"please use object notation here instead of dict notation. You can do the following:\n\n if api_version_request.is_supported(request, min_version\u003d\"2.60\"):\n     t_certs \u003d []\n     if \u0027trusted_certs\u0027 in instance:\n         t_certs \u003d instance.trusted_certs.ids\n     server[\"server\"][\"trusted_image_certifications\"] \u003d t_certs","commit_id":"2cffd26feac8faf539eb3772aa6832d212568be2"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"7490d06dedc114bf6ef98f45e0e988bb5ec1d5ba","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\"2.60\"):"},{"line_number":177,"context_line":"            try:"},{"line_number":178,"context_line":"                trusted_certs \u003d instance.get(\"trusted_certs\")"},{"line_number":179,"context_line":"                server[\"server\"][\"trusted_image_certificates\"] \\"},{"line_number":180,"context_line":"                    \u003d trusted_certs.ids"},{"line_number":181,"context_line":"            except Exception:"}],"source_content_type":"text/x-python","patch_set":28,"id":"7f96bb07_39a88675","line":178,"range":{"start_line":178,"start_character":32,"end_line":178,"end_character":61},"in_reply_to":"7f96bb07_826a88b0","updated":"2018-01-16 04:03:04.000000000","message":"Done","commit_id":"2cffd26feac8faf539eb3772aa6832d212568be2"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"e9578de04824194cee0a519c24f93f4e0ad00e43","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\"2.60\"):"},{"line_number":177,"context_line":"            trusted_certs \u003d []"},{"line_number":178,"context_line":"            if \u0027trusted_certs\u0027 in instance:"},{"line_number":179,"context_line":"                trusted_certs \u003d instance.trusted_certs.ids"},{"line_number":180,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"7f96bb07_c7eca2bc","line":178,"updated":"2018-01-18 22:03:16.000000000","message":"Should this be updated to \"if instance.trusted_certs:\"?","commit_id":"230ae28a1586112cdc64051cccf0c06002d1925e"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"80cb78bdde4182ab5c4e8eea194e58e000b04646","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\"2.60\"):"},{"line_number":177,"context_line":"            trusted_certs \u003d []"},{"line_number":178,"context_line":"            if \u0027trusted_certs\u0027 in instance:"},{"line_number":179,"context_line":"                trusted_certs \u003d instance.trusted_certs.ids"},{"line_number":180,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"7f96bb07_86499c8c","line":178,"range":{"start_line":178,"start_character":12,"end_line":178,"end_character":43},"updated":"2018-01-20 02:09:16.000000000","message":"This will always return \u0027False\u0027 even if the instance has a trusted_certs value set.  instance.get() needs to be used to retrieve \u0027trusted_certs\u0027 in order to trigger obj_load_attr to be called in nova/objects/instance.py.","commit_id":"4a1183e2cb58317fe7d6269ad4e32f18c28b99f4"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f89d76f49ed9d87ff6bb986beb3fec21c8e8a2d4","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\"2.26\"):"},{"line_number":174,"context_line":"            server[\"server\"][\"tags\"] \u003d [t.tag for t in instance.tags]"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\"2.61\"):"},{"line_number":177,"context_line":"            trusted_certs \u003d []"},{"line_number":178,"context_line":"            try:"},{"line_number":179,"context_line":"                if instance.trusted_certs:"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_bdb66e89","line":176,"updated":"2018-04-03 11:29:08.000000000","message":"I think this is correct, but it appears this is not documented and not in the sample tests.","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"f3a9cca88279f13366d073104b12faa1a5c5419c","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\"2.26\"):"},{"line_number":174,"context_line":"            server[\"server\"][\"tags\"] \u003d [t.tag for t in instance.tags]"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\"2.61\"):"},{"line_number":177,"context_line":"            trusted_certs \u003d []"},{"line_number":178,"context_line":"            try:"},{"line_number":179,"context_line":"                if instance.trusted_certs:"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_560cc592","line":176,"in_reply_to":"bf659307_bdb66e89","updated":"2018-04-03 19:24:30.000000000","message":"Good catch. This will be fixed in the next patch.","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"176a80210f61e1c545132b9b8ded4de38b4489f4","unresolved":false,"context_lines":[{"line_number":178,"context_line":"            try:"},{"line_number":179,"context_line":"                if instance.trusted_certs:"},{"line_number":180,"context_line":"                    trusted_certs \u003d instance.trusted_certs.ids"},{"line_number":181,"context_line":"            except Exception:"},{"line_number":182,"context_line":"                # instance obj_load_attr failed, so leave certs empty"},{"line_number":183,"context_line":"                pass"},{"line_number":184,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"}],"source_content_type":"text/x-python","patch_set":56,"id":"bf659307_867f48aa","line":181,"range":{"start_line":181,"start_character":19,"end_line":181,"end_character":28},"updated":"2018-04-06 15:21:50.000000000","message":"could we catch a more specific exception here? Looking for \"Exception\" is generally discouraged because you can catch more than you bargained for, e.g. an interrupt.","commit_id":"6bba797a160cd86a013d5970d0c388581f5c39a9"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"0e00bff7de299974cff6f1e337241cb75d169835","unresolved":false,"context_lines":[{"line_number":178,"context_line":"            try:"},{"line_number":179,"context_line":"                if instance.trusted_certs:"},{"line_number":180,"context_line":"                    trusted_certs \u003d instance.trusted_certs.ids"},{"line_number":181,"context_line":"            except Exception:"},{"line_number":182,"context_line":"                # instance obj_load_attr failed, so leave certs empty"},{"line_number":183,"context_line":"                pass"},{"line_number":184,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"}],"source_content_type":"text/x-python","patch_set":56,"id":"bf659307_49bb83e4","line":181,"range":{"start_line":181,"start_character":19,"end_line":181,"end_character":28},"in_reply_to":"bf659307_867f48aa","updated":"2018-04-06 16:58:22.000000000","message":"We threw all of this in a try-except because an exception would be thrown if we tried to retrieve a non-existent trusted_certs object from instance. We should be able to remove the try-except by just checking:\n\n  if \u0027trusted_certs\u0027 in instance","commit_id":"6bba797a160cd86a013d5970d0c388581f5c39a9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            },"},{"line_number":92,"context_line":"        }"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def get_show_expected_attrs(self, expected_attrs\u003dNone):"},{"line_number":95,"context_line":"        \"\"\"Returns a list of lazy-loadable expected attributes used by show"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        This should be used when getting the instances from the database so"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_3e91bb53","line":94,"updated":"2018-04-16 15:51:03.000000000","message":"nit: I think this was implemented back when the view builder had a microversion subclass for v2.1 stuff, I\u0027m not sure why it\u0027s not passing a request variable in to determine the microversion, but if the request is \u003e\u003d 2.62 we should include \u0027trusted_certs\u0027 in here so that we join the trusted_certs when loading the instance from the DB so we don\u0027t have to lazy-load it during show(). Like this:\n\nhttps://github.com/openstack/nova/blob/e285070ec7d1b84f7c7e6e0af0d8557a159c32bf/nova/api/openstack/compute/servers.py#L337\n\nand this:\n\nhttps://github.com/openstack/nova/blob/e285070ec7d1b84f7c7e6e0af0d8557a159c32bf/nova/api/openstack/compute/servers.py#L295\n\nI should probably push a separate patch to clean up that usage.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"47ea9773d76c0298c3249e95f52a1c55c2d1739a","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            },"},{"line_number":92,"context_line":"        }"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def get_show_expected_attrs(self, expected_attrs\u003dNone):"},{"line_number":95,"context_line":"        \"\"\"Returns a list of lazy-loadable expected attributes used by show"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        This should be used when getting the instances from the database so"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_86599dff","line":94,"in_reply_to":"9f6a8fd7_3e91bb53","updated":"2018-04-16 18:37:25.000000000","message":"Done","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                if instance.trusted_certs:"},{"line_number":180,"context_line":"                    trusted_certs \u003d instance.trusted_certs.ids"},{"line_number":181,"context_line":"            except AttributeError:"},{"line_number":182,"context_line":"                # instance obj_load_attr failed, so leave certs empty"},{"line_number":183,"context_line":"                pass"},{"line_number":184,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_7ee173fe","line":182,"range":{"start_line":182,"start_character":16,"end_line":182,"end_character":47},"updated":"2018-04-16 15:51:03.000000000","message":"Hmm, why would this fail? It\u0027s probably best to blow up here.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"09beb79f24ca9ab14ce03ff1810fe5c2dbe89dcc","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                if instance.trusted_certs:"},{"line_number":180,"context_line":"                    trusted_certs \u003d instance.trusted_certs.ids"},{"line_number":181,"context_line":"            except AttributeError:"},{"line_number":182,"context_line":"                # instance obj_load_attr failed, so leave certs empty"},{"line_number":183,"context_line":"                pass"},{"line_number":184,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_14a4bc56","line":182,"range":{"start_line":182,"start_character":16,"end_line":182,"end_character":47},"in_reply_to":"9f6a8fd7_660fa92e","updated":"2018-04-17 14:59:44.000000000","message":"It shouldn\u0027t result in an AttributeError, it should call _load_trusted_certs to lazy-load the trusted_certs from instance_extra and if the instance was created without trusted_certs, then this is just None.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"47ea9773d76c0298c3249e95f52a1c55c2d1739a","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                if instance.trusted_certs:"},{"line_number":180,"context_line":"                    trusted_certs \u003d instance.trusted_certs.ids"},{"line_number":181,"context_line":"            except AttributeError:"},{"line_number":182,"context_line":"                # instance obj_load_attr failed, so leave certs empty"},{"line_number":183,"context_line":"                pass"},{"line_number":184,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"},{"line_number":185,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_660fa92e","line":182,"range":{"start_line":182,"start_character":16,"end_line":182,"end_character":47},"in_reply_to":"9f6a8fd7_7ee173fe","updated":"2018-04-16 18:37:25.000000000","message":"Calling ``instance.trusted_certs`` will call obj_load_attr to try to retrieve the TrustedCerts object. This would fail if instance doesn\u0027t actually contain a TrustedCerts object.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1a4262ea5a44a96cafcf881cd2b64253f1da1f72","unresolved":false,"context_lines":[{"line_number":178,"context_line":"            try:"},{"line_number":179,"context_line":"                if instance.trusted_certs:"},{"line_number":180,"context_line":"                    trusted_certs \u003d instance.trusted_certs.ids"},{"line_number":181,"context_line":"            except AttributeError:"},{"line_number":182,"context_line":"                # instance obj_load_attr failed, so leave certs empty"},{"line_number":183,"context_line":"                pass"},{"line_number":184,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"}],"source_content_type":"text/x-python","patch_set":91,"id":"9f6a8fd7_3463001d","line":181,"updated":"2018-04-17 15:01:56.000000000","message":"See my reply on this - this shouldn\u0027t happen, that\u0027s why we lazy-load trusted_certs in the instance object.","commit_id":"18514a745c0891cf1abd757a4c5bb1c23bd7bd50"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"9bb64b073d0160ae0ce5938ccfa1ce6d99264693","unresolved":false,"context_lines":[{"line_number":178,"context_line":"            try:"},{"line_number":179,"context_line":"                if instance.trusted_certs:"},{"line_number":180,"context_line":"                    trusted_certs \u003d instance.trusted_certs.ids"},{"line_number":181,"context_line":"            except AttributeError:"},{"line_number":182,"context_line":"                # instance obj_load_attr failed, so leave certs empty"},{"line_number":183,"context_line":"                pass"},{"line_number":184,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"}],"source_content_type":"text/x-python","patch_set":91,"id":"9f6a8fd7_1d285884","line":181,"in_reply_to":"9f6a8fd7_3463001d","updated":"2018-04-17 20:00:53.000000000","message":"Done","commit_id":"18514a745c0891cf1abd757a4c5bb1c23bd7bd50"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"263d6d1b3bbfe9b192c226017fae154b96f5992d","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            except AttributeError:"},{"line_number":182,"context_line":"                # instance obj_load_attr failed, so leave certs empty"},{"line_number":183,"context_line":"                pass"},{"line_number":184,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        return server"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":91,"id":"9f6a8fd7_dc4bd884","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":74},"updated":"2018-04-17 07:25:07.000000000","message":"do not we need policy rule checks for rbac. This seems secure certificate and should be controlled via policy permission for security purpose.\n\nplease update me if that has already been discussed but i did not find it anywhere.","commit_id":"18514a745c0891cf1abd757a4c5bb1c23bd7bd50"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"787fb66ff5f5433688f6a34e25160cf41f72a269","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            except AttributeError:"},{"line_number":182,"context_line":"                # instance obj_load_attr failed, so leave certs empty"},{"line_number":183,"context_line":"                pass"},{"line_number":184,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        return server"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":91,"id":"9f6a8fd7_c57bd4bb","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":74},"in_reply_to":"9f6a8fd7_886dfe05","updated":"2018-04-18 15:17:44.000000000","message":"Knowing the certificate IDs alone would not be very useful for an attacker. They would need access to the key manager and the certificates/keys corresponding to the trusted image certificate IDs in order to do anything malicious.","commit_id":"18514a745c0891cf1abd757a4c5bb1c23bd7bd50"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"833c21c5a62f90a10269a76b0e8a15ce3b51c33d","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            except AttributeError:"},{"line_number":182,"context_line":"                # instance obj_load_attr failed, so leave certs empty"},{"line_number":183,"context_line":"                pass"},{"line_number":184,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        return server"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":91,"id":"9f6a8fd7_ff27a163","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":74},"in_reply_to":"9f6a8fd7_dc4bd884","updated":"2018-04-17 15:13:02.000000000","message":"There is no specific policy rule for creating or rebuilding a server with trusted cert IDs, so by default it\u0027s going to be admin_or_owner most likely simply based on the same rules for creating a server:\n\nos_compute_api:servers:create\n\nI don\u0027t know in which scenario we need a separate policy rule for this, since you could also say that we should have a policy rule for volume-backed instances, or adding tags to instances, etc, which really seems like the old-school way that policy rules were added for legacy v2 extensions.\n\nIf we wanted/needed to add a policy rule for this later, that\u0027s possible and we\u0027d just default to admin_or_owner like os_compute_api:servers:create.","commit_id":"18514a745c0891cf1abd757a4c5bb1c23bd7bd50"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"cf70659e761eb940df6b1178d4126017dfe0ee42","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            except AttributeError:"},{"line_number":182,"context_line":"                # instance obj_load_attr failed, so leave certs empty"},{"line_number":183,"context_line":"                pass"},{"line_number":184,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        return server"},{"line_number":187,"context_line":""}],"source_content_type":"text/x-python","patch_set":91,"id":"9f6a8fd7_886dfe05","line":184,"range":{"start_line":184,"start_character":0,"end_line":184,"end_character":74},"in_reply_to":"9f6a8fd7_ff27a163","updated":"2018-04-18 07:31:15.000000000","message":"yea for create and rebuild we can leave without policy rule and exiting rule works. \n\nI am more concern about showing the cert IDs in GET APIs response. That can be potentially security leak if someone have access to your VM. But I am not sure how and where all those cert IDs can be misused? \n\nI agree on not to go with legacy way but this got triggered in my mind as this is certification info we are showing in GET APIs.","commit_id":"18514a745c0891cf1abd757a4c5bb1c23bd7bd50"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\"2.63\"):"},{"line_number":175,"context_line":"            trusted_certs \u003d None"},{"line_number":176,"context_line":"            if instance.get(\"trusted_certs\", None):"},{"line_number":177,"context_line":"                trusted_certs \u003d instance.trusted_certs.ids"},{"line_number":178,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_e85dce15","line":176,"range":{"start_line":176,"start_character":24,"end_line":176,"end_character":27},"updated":"2018-06-04 13:59:33.000000000","message":"nit: we probably don\u0027t need the get dict syntax here. If instance.trusted_certs is set, we\u0027ll check the value which will either be an empty list or None. If the field isn\u0027t set, we\u0027ll lazy-load it.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\"2.63\"):"},{"line_number":175,"context_line":"            trusted_certs \u003d None"},{"line_number":176,"context_line":"            if instance.get(\"trusted_certs\", None):"},{"line_number":177,"context_line":"                trusted_certs \u003d instance.trusted_certs.ids"},{"line_number":178,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_2b6529af","line":176,"range":{"start_line":176,"start_character":15,"end_line":176,"end_character":51},"updated":"2018-06-13 17:32:43.000000000","message":"nit: this can just be:\n\nif instance.trusted_certs:\n\nBecause the field should be None if trusted_certs aren\u0027t set (and that includes if there are no \u0027ids\u0027 in the TrustedCerts object).\n\nAlso, instance.get() and instance.trusted_certs will both lazy-load the field if necessary.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\"2.63\"):"},{"line_number":175,"context_line":"            trusted_certs \u003d None"},{"line_number":176,"context_line":"            if instance.get(\"trusted_certs\", None):"},{"line_number":177,"context_line":"                trusted_certs \u003d instance.trusted_certs.ids"},{"line_number":178,"context_line":"            server[\"server\"][\"trusted_image_certificates\"] \u003d trusted_certs"},{"line_number":179,"context_line":""}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_5d9b8a15","line":176,"range":{"start_line":176,"start_character":15,"end_line":176,"end_character":51},"in_reply_to":"5f7c97a3_2b6529af","updated":"2018-06-13 19:39:26.000000000","message":"Done","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"}],"nova/api/validation/parameter_types.py":[{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"dc66185026e999d9cf8c9f93009a99e808ebf4cf","unresolved":false,"context_lines":[{"line_number":439,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":440,"context_line":"}"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"trusted_certificates \u003d {"},{"line_number":443,"context_line":"    \"type\": \"array\","},{"line_number":444,"context_line":"    \"minItems\": 1,"},{"line_number":445,"context_line":"    \"maxItems\": 50,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_995de748","line":442,"range":{"start_line":442,"start_character":0,"end_line":442,"end_character":20},"updated":"2017-08-29 17:09:31.000000000","message":"We use the term \"trusted_certs\" in nova.objects and nova.db. It would probably be best to stay consistent and use \"trusted_certs\" here as well.","commit_id":"59e84b6136bbe130577b42ade4325f29df850ab8"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"a80871fc12e1eba819a3cb7144b7b5ba4d3212ec","unresolved":false,"context_lines":[{"line_number":439,"context_line":"    \u0027marker\u0027: multi_params({\u0027type\u0027: \u0027string\u0027})"},{"line_number":440,"context_line":"}"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"trusted_certificates \u003d {"},{"line_number":443,"context_line":"    \"type\": \"array\","},{"line_number":444,"context_line":"    \"minItems\": 1,"},{"line_number":445,"context_line":"    \"maxItems\": 50,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_8f7fb164","line":442,"range":{"start_line":442,"start_character":0,"end_line":442,"end_character":20},"in_reply_to":"7f287b81_995de748","updated":"2017-09-05 21:09:25.000000000","message":"I\u0027ve changed it from trusted_certificates to trusted_certs except for when the user provides it in the API call.","commit_id":"59e84b6136bbe130577b42ade4325f29df850ab8"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"dc66185026e999d9cf8c9f93009a99e808ebf4cf","unresolved":false,"context_lines":[{"line_number":446,"context_line":"    \"uniqueItems\": True,"},{"line_number":447,"context_line":"    \"items\": {"},{"line_number":448,"context_line":"        \"type\": \"string\""},{"line_number":449,"context_line":"    }"},{"line_number":450,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_f9398bf1","line":449,"updated":"2017-08-29 17:09:31.000000000","message":"Certificate UUIDs technically have a specific length and pattern. Should we specify those here?","commit_id":"59e84b6136bbe130577b42ade4325f29df850ab8"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"a80871fc12e1eba819a3cb7144b7b5ba4d3212ec","unresolved":false,"context_lines":[{"line_number":446,"context_line":"    \"uniqueItems\": True,"},{"line_number":447,"context_line":"    \"items\": {"},{"line_number":448,"context_line":"        \"type\": \"string\""},{"line_number":449,"context_line":"    }"},{"line_number":450,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_2fb79d3c","line":449,"in_reply_to":"7f287b81_f9398bf1","updated":"2017-09-05 21:09:25.000000000","message":"We have decided elsewhere not to enforce UUID patterns for certificate ID\u0027s, since the id used to retrieve a certificate from a key manager might not follow the UUID pattern (although it usually does).","commit_id":"59e84b6136bbe130577b42ade4325f29df850ab8"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f64b96361434a79fff1576e0caf09cff9088454f","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"trusted_certs \u003d {"},{"line_number":481,"context_line":"    \"type\": \"array\","},{"line_number":482,"context_line":"    \"minItems\": 1,"},{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\""},{"line_number":487,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff82abbf_f1c87d55","line":484,"range":{"start_line":482,"start_character":3,"end_line":484,"end_character":23},"updated":"2017-11-30 03:36:35.000000000","message":"maybe we need add this into document about the restriction?","commit_id":"5ebb9f16b19d821c62d1312de5adba05a08d323f"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"7b1e6a28a5b537f2aa0c7a873646f14656d2022b","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"trusted_certs \u003d {"},{"line_number":481,"context_line":"    \"type\": \"array\","},{"line_number":482,"context_line":"    \"minItems\": 1,"},{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\""},{"line_number":487,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":17,"id":"df87a7cf_f6b0668e","line":484,"range":{"start_line":482,"start_character":3,"end_line":484,"end_character":23},"in_reply_to":"ff82abbf_f1c87d55","updated":"2017-12-01 19:16:30.000000000","message":"I added this to the rest API version history, and to the release note.\n\nThis is also in the spec for the feature (at http://specs.openstack.org/openstack/nova-specs/specs/queens/approved/nova-validate-certificates.html ) and will be added to the documentation for the feature.\n\nIs there anywhere else you think this should be added?","commit_id":"5ebb9f16b19d821c62d1312de5adba05a08d323f"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f89d76f49ed9d87ff6bb986beb3fec21c8e8a2d4","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\""},{"line_number":487,"context_line":"    }"},{"line_number":488,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_1d699af7","line":486,"updated":"2018-04-03 11:29:08.000000000","message":"Don\u0027t these strings also have a maxLength of 50? Now the spec doesn\u0027t say that, but the idea here is to limit the max input to the API, so we must set some limit here.\n\nIdeally I would love to see a unit test to make sure this does what we expected, maybe in here: https://github.com/openstack/nova/blob/master/nova/tests/unit/test_api_validation.py","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"a2b6a12898e8beec0228cd7f049c119a617cc49a","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\""},{"line_number":487,"context_line":"    }"},{"line_number":488,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_c1fb2a44","line":486,"in_reply_to":"bf659307_162acdd9","updated":"2018-04-04 03:58:26.000000000","message":"Specified maxLength of 50. I did not add a test to test_api_validation.py because it didn\u0027t seem like the right place to add such a test, but I could be wrong. The api validation should take care of validating field restrictions. Let me know if you think we should definitely add a test to test_api_validation.py and I can do that.","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"f3a9cca88279f13366d073104b12faa1a5c5419c","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\""},{"line_number":487,"context_line":"    }"},{"line_number":488,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_162acdd9","line":486,"in_reply_to":"bf659307_1d699af7","updated":"2018-04-03 19:24:30.000000000","message":"Yes, we should set the maxLength to 50. This will be fixed in the next patch. I\u0027ll also be sure to add a corresponding test to test_api_validation.py","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7e7f4181164487428593cbfd6841517ad98ae7e2","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"trusted_certs \u003d {"},{"line_number":481,"context_line":"    \"type\": \"array\","},{"line_number":482,"context_line":"    \"minItems\": 1,"},{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_e8788ac4","line":482,"updated":"2018-04-04 09:55:17.000000000","message":"Is that correct? An empty array seems like valid input to this optional parameter. I could go either way on that though.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"5cf3f7337191f265f62f88c1aa95b9a6287f6f7d","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"trusted_certs \u003d {"},{"line_number":481,"context_line":"    \"type\": \"array\","},{"line_number":482,"context_line":"    \"minItems\": 1,"},{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_8f579026","line":482,"in_reply_to":"bf659307_e8788ac4","updated":"2018-04-04 14:43:55.000000000","message":"Yes. No trusted_certs should be represented as a None.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7e7f4181164487428593cbfd6841517ad98ae7e2","unresolved":false,"context_lines":[{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\","},{"line_number":487,"context_line":"        \"maxLength\": 50"},{"line_number":488,"context_line":"    }"},{"line_number":489,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_c8a4a64d","line":487,"updated":"2018-04-04 09:55:17.000000000","message":"Thanks for adding this bit, but I am not sure I see a test to make sure we check the number of array items, etc.\n\nThinking about it, we should probably have minLength \u003d 1 here too.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"b8be0aa1366aaf47099c44e319bf359ddefee34f","unresolved":false,"context_lines":[{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\","},{"line_number":487,"context_line":"        \"maxLength\": 50"},{"line_number":488,"context_line":"    }"},{"line_number":489,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_9be26fa0","line":487,"in_reply_to":"bf659307_8a753e34","updated":"2018-04-04 16:03:24.000000000","message":"Actually, shouldn\u0027t the tests in test_serversV21 cover these limitations? We can just add a few more tests to check the number of array items.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"5cf3f7337191f265f62f88c1aa95b9a6287f6f7d","unresolved":false,"context_lines":[{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\","},{"line_number":487,"context_line":"        \"maxLength\": 50"},{"line_number":488,"context_line":"    }"},{"line_number":489,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_8a753e34","line":487,"in_reply_to":"bf659307_c8a4a64d","updated":"2018-04-04 14:43:55.000000000","message":"Good call. I\u0027ll add the minLength as well as the tests.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"trusted_certs \u003d {"},{"line_number":481,"context_line":"    \"type\": [\"array\", \"null\"],"},{"line_number":482,"context_line":"    \"minItems\": 1,"},{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\","}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_5212635a","line":483,"range":{"start_line":482,"start_character":4,"end_line":483,"end_character":19},"updated":"2018-04-16 15:51:03.000000000","message":"Are these min and max items even valid here? I think this is saying I can specify the parameter up to 50 times? But that\u0027s not right - the maxItems here should be for the items in the single request parameter, right? Or is one restricting the number of items in the list and the other is restricting the size of each item in that list? If so, please leave comments in here. Also, it seems weird that we can dictate the max length of each item in the list. If they are UUIDs, then maxLength would be 36 and enforced via the uuid type:\n\nhttps://github.com/openstack/nova/blob/e285070ec7d1b84f7c7e6e0af0d8557a159c32bf/nova/api/validation/validators.py#L86","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":480,"context_line":"trusted_certs \u003d {"},{"line_number":481,"context_line":"    \"type\": [\"array\", \"null\"],"},{"line_number":482,"context_line":"    \"minItems\": 1,"},{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\","}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_5e3a6fe7","line":483,"updated":"2018-04-16 15:51:03.000000000","message":"This restriction should be mentioned in the API reference parameter description.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"09beb79f24ca9ab14ce03ff1810fe5c2dbe89dcc","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"trusted_certs \u003d {"},{"line_number":481,"context_line":"    \"type\": [\"array\", \"null\"],"},{"line_number":482,"context_line":"    \"minItems\": 1,"},{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\","}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_d485e4ae","line":483,"range":{"start_line":482,"start_character":4,"end_line":483,"end_character":19},"in_reply_to":"9f6a8fd7_06910d9a","updated":"2018-04-17 14:59:44.000000000","message":"\u003e The certificate IDs are not _definitely_ going to be UUIDs. They are with barbican, but another cert manager may not use UUIDs, so we\u0027re just generalizing to strings\n\nThen why are we restricting the length on the cert IDs if we can\u0027t reliably say they are going to be \u003c\u003d50 characters in length?","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"47ea9773d76c0298c3249e95f52a1c55c2d1739a","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"trusted_certs \u003d {"},{"line_number":481,"context_line":"    \"type\": [\"array\", \"null\"],"},{"line_number":482,"context_line":"    \"minItems\": 1,"},{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\","}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_06910d9a","line":483,"range":{"start_line":482,"start_character":4,"end_line":483,"end_character":19},"in_reply_to":"9f6a8fd7_5212635a","updated":"2018-04-16 18:37:25.000000000","message":"\u003e Or is one restricting the number of items in the list and the other is restricting the size of each item in that list?\n\nThis. I\u0027ll leave comments. The certificate IDs are not _definitely_ going to be UUIDs. They are with barbican, but another cert manager may not use UUIDs, so we\u0027re just generalizing to strings","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"47ea9773d76c0298c3249e95f52a1c55c2d1739a","unresolved":false,"context_lines":[{"line_number":480,"context_line":"trusted_certs \u003d {"},{"line_number":481,"context_line":"    \"type\": [\"array\", \"null\"],"},{"line_number":482,"context_line":"    \"minItems\": 1,"},{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\","}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_c62795b6","line":483,"in_reply_to":"9f6a8fd7_5e3a6fe7","updated":"2018-04-16 18:37:25.000000000","message":"Done","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\","},{"line_number":487,"context_line":"        \"minLength\": 1,"},{"line_number":488,"context_line":"        \"maxLength\": 50"},{"line_number":489,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_de2d1fa9","line":486,"range":{"start_line":486,"start_character":17,"end_line":486,"end_character":23},"updated":"2018-04-16 15:51:03.000000000","message":"Are they strings or uuids? Or does it depend on the cert manager backend for castellan?","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"47ea9773d76c0298c3249e95f52a1c55c2d1739a","unresolved":false,"context_lines":[{"line_number":483,"context_line":"    \"maxItems\": 50,"},{"line_number":484,"context_line":"    \"uniqueItems\": True,"},{"line_number":485,"context_line":"    \"items\": {"},{"line_number":486,"context_line":"        \"type\": \"string\","},{"line_number":487,"context_line":"        \"minLength\": 1,"},{"line_number":488,"context_line":"        \"maxLength\": 50"},{"line_number":489,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_6666c9f0","line":486,"range":{"start_line":486,"start_character":17,"end_line":486,"end_character":23},"in_reply_to":"9f6a8fd7_de2d1fa9","updated":"2018-04-16 18:37:25.000000000","message":"Depends on the cert manager backend for castellan","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1a4262ea5a44a96cafcf881cd2b64253f1da1f72","unresolved":false,"context_lines":[{"line_number":487,"context_line":"    \"items\": {"},{"line_number":488,"context_line":"        \"type\": \"string\","},{"line_number":489,"context_line":"        \"minLength\": 1,"},{"line_number":490,"context_line":"        \"maxLength\": 50"},{"line_number":491,"context_line":"    }"},{"line_number":492,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":91,"id":"9f6a8fd7_5468f4f3","line":490,"updated":"2018-04-17 15:01:56.000000000","message":"If we can\u0027t rely on knowing that the cert manager is going to use UUIDs, then why are we arbitrarily restricting the length of the cert ID? I don\u0027t think that makes sense, and could just lead to us changing this down the line when someone complains that they can\u0027t use nova with their cert manager backend implementation. So either nova shouldn\u0027t restrict this, or we should make sure that castellan has an actual upper limit on cert ID length and we reflect that here.","commit_id":"18514a745c0891cf1abd757a4c5bb1c23bd7bd50"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"4fe38aa0705826e9395d47d058450ea5a1f57213","unresolved":false,"context_lines":[{"line_number":487,"context_line":"    \"items\": {"},{"line_number":488,"context_line":"        \"type\": \"string\","},{"line_number":489,"context_line":"        \"minLength\": 1,"},{"line_number":490,"context_line":"        \"maxLength\": 50"},{"line_number":491,"context_line":"    }"},{"line_number":492,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":91,"id":"9f6a8fd7_242bcdeb","line":490,"in_reply_to":"9f6a8fd7_5468f4f3","updated":"2018-04-17 17:36:55.000000000","message":"Good point, Matt. We added the maxLength restriction per a previous comment [1], but you make a really good point that this restriction could cause issues in the future. I can change in the next patch.\n\n[1] https://review.openstack.org/#/c/486204/53/nova/api/validation/parameter_types.py","commit_id":"18514a745c0891cf1abd757a4c5bb1c23bd7bd50"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"76d8e8c325ad64eb35eda4718c58be144dee62b7","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"# The trusted_certs list is restricted to a maximum of 50 IDs"},{"line_number":481,"context_line":"trusted_certs \u003d {"},{"line_number":482,"context_line":"    \"type\": [\"array\", \"null\"],"},{"line_number":483,"context_line":"    \"minItems\": 1,"},{"line_number":484,"context_line":"    \"maxItems\": 50,"},{"line_number":485,"context_line":"    \"uniqueItems\": True,"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_863794fe","line":482,"range":{"start_line":482,"start_character":22,"end_line":482,"end_character":28},"updated":"2018-06-13 18:15:29.000000000","message":"This shows the intent to be able to null out trusted_certs during a rebuild.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":479,"context_line":""},{"line_number":480,"context_line":"# The trusted_certs list is restricted to a maximum of 50 IDs"},{"line_number":481,"context_line":"trusted_certs \u003d {"},{"line_number":482,"context_line":"    \"type\": [\"array\", \"null\"],"},{"line_number":483,"context_line":"    \"minItems\": 1,"},{"line_number":484,"context_line":"    \"maxItems\": 50,"},{"line_number":485,"context_line":"    \"uniqueItems\": True,"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_dd8ebacf","line":482,"range":{"start_line":482,"start_character":22,"end_line":482,"end_character":28},"in_reply_to":"5f7c97a3_863794fe","updated":"2018-06-13 19:39:26.000000000","message":"Added a comment.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"}],"nova/compute/api.py":[{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"105bed3e69bce6d83286eecb64101f3e7de8fed5","unresolved":false,"context_lines":[{"line_number":923,"context_line":"                    if trusted_certs:"},{"line_number":924,"context_line":"                        instance.trusted_certs \u003d objects.TrustedCerts("},{"line_number":925,"context_line":"                            uuids\u003dtrusted_certs)"},{"line_number":926,"context_line":"                    else:"},{"line_number":927,"context_line":"                        instance.trusted_certs \u003d objects.TrustedCerts("},{"line_number":928,"context_line":"                            uuids\u003dCONF.glance.default_trusted_certificate_ids)"},{"line_number":929,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_c9654a47","line":926,"updated":"2017-09-25 18:21:27.000000000","message":"Should we check that default_trusted_certificate_ids is specified in the configurations before trying to create a TrustedCerts object with it?","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"e28c197ecf7c0f213abbcfe394fd50f5147b60ec","unresolved":false,"context_lines":[{"line_number":923,"context_line":"                    if trusted_certs:"},{"line_number":924,"context_line":"                        instance.trusted_certs \u003d objects.TrustedCerts("},{"line_number":925,"context_line":"                            uuids\u003dtrusted_certs)"},{"line_number":926,"context_line":"                    else:"},{"line_number":927,"context_line":"                        instance.trusted_certs \u003d objects.TrustedCerts("},{"line_number":928,"context_line":"                            uuids\u003dCONF.glance.default_trusted_certificate_ids)"},{"line_number":929,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_5f9ea9b8","line":926,"in_reply_to":"7f515b1d_c9654a47","updated":"2017-09-25 20:42:17.000000000","message":"I don\u0027t think we need to.  If it\u0027s not specified, it will default to an empty list (see http://git.openstack.org/cgit/openstack/nova/tree/nova/conf/glance.py#n110 ).","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"105bed3e69bce6d83286eecb64101f3e7de8fed5","unresolved":false,"context_lines":[{"line_number":2976,"context_line":"            if trusted_certs:"},{"line_number":2977,"context_line":"                kwargs[\u0027trusted_certs\u0027] \u003d objects.TrustedCerts("},{"line_number":2978,"context_line":"                    uuids\u003dtrusted_certs)"},{"line_number":2979,"context_line":"            else:"},{"line_number":2980,"context_line":"                kwargs[\u0027trusted_certs\u0027] \u003d objects.TrustedCerts("},{"line_number":2981,"context_line":"                uuids\u003dCONF.glance.default_trusted_certificate_ids)"},{"line_number":2982,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_49515a62","line":2979,"updated":"2017-09-25 18:21:27.000000000","message":"Should we check that default_trusted_certificate_ids is specified in the configurations before trying to create a TrustedCerts object with it?","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"e28c197ecf7c0f213abbcfe394fd50f5147b60ec","unresolved":false,"context_lines":[{"line_number":2976,"context_line":"            if trusted_certs:"},{"line_number":2977,"context_line":"                kwargs[\u0027trusted_certs\u0027] \u003d objects.TrustedCerts("},{"line_number":2978,"context_line":"                    uuids\u003dtrusted_certs)"},{"line_number":2979,"context_line":"            else:"},{"line_number":2980,"context_line":"                kwargs[\u0027trusted_certs\u0027] \u003d objects.TrustedCerts("},{"line_number":2981,"context_line":"                uuids\u003dCONF.glance.default_trusted_certificate_ids)"},{"line_number":2982,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_dfa979dd","line":2979,"in_reply_to":"7f515b1d_49515a62","updated":"2017-09-25 20:42:17.000000000","message":"I don\u0027t think we need to.  If it\u0027s not specified, it will default to an empty list (see http://git.openstack.org/cgit/openstack/nova/tree/nova/conf/glance.py#n110 ).","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"529a9a0281050dc9f44bae15244c4c77c4f63fc4","unresolved":false,"context_lines":[{"line_number":2989,"context_line":"        # Retrieve trusted certs if provided or if signature verification"},{"line_number":2990,"context_line":"        # and certificate validation are enabled"},{"line_number":2991,"context_line":"        trusted_certs \u003d kwargs.get(\"trusted_certs\", None)"},{"line_number":2992,"context_line":"        if trusted_certs:"},{"line_number":2993,"context_line":"            kwargs[\u0027trusted_certs\u0027] \u003d objects.TrustedCerts("},{"line_number":2994,"context_line":"                ids\u003dtrusted_certs)"},{"line_number":2995,"context_line":"        else:"},{"line_number":2996,"context_line":"            if (CONF.glance.verify_glance_signatures and"},{"line_number":2997,"context_line":"                    CONF.glance.enable_certificate_validation):"},{"line_number":2998,"context_line":"                kwargs[\u0027trusted_certs\u0027] \u003d objects.TrustedCerts("},{"line_number":2999,"context_line":"                    ids\u003dCONF.glance.default_trusted_certificate_ids)"},{"line_number":3000,"context_line":""},{"line_number":3001,"context_line":"        instance.task_state \u003d task_states.REBUILDING"},{"line_number":3002,"context_line":"        # An empty instance.image_ref is currently used as an indication"}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_46aa0a19","line":2999,"range":{"start_line":2992,"start_character":2,"end_line":2999,"end_character":68},"updated":"2018-01-17 16:02:39.000000000","message":"note you could de-duplicate this code and the above code on lines 912-919 in a little util function somewhere...","commit_id":"cbb0f46e9e5669d4a8e21d41b6eb8723a872cc36"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"504adffa61efb603b1001da6756c64b758b57235","unresolved":false,"context_lines":[{"line_number":2989,"context_line":"        # Retrieve trusted certs if provided or if signature verification"},{"line_number":2990,"context_line":"        # and certificate validation are enabled"},{"line_number":2991,"context_line":"        trusted_certs \u003d kwargs.get(\"trusted_certs\", None)"},{"line_number":2992,"context_line":"        if trusted_certs:"},{"line_number":2993,"context_line":"            kwargs[\u0027trusted_certs\u0027] \u003d objects.TrustedCerts("},{"line_number":2994,"context_line":"                ids\u003dtrusted_certs)"},{"line_number":2995,"context_line":"        else:"},{"line_number":2996,"context_line":"            if (CONF.glance.verify_glance_signatures and"},{"line_number":2997,"context_line":"                    CONF.glance.enable_certificate_validation):"},{"line_number":2998,"context_line":"                kwargs[\u0027trusted_certs\u0027] \u003d objects.TrustedCerts("},{"line_number":2999,"context_line":"                    ids\u003dCONF.glance.default_trusted_certificate_ids)"},{"line_number":3000,"context_line":""},{"line_number":3001,"context_line":"        instance.task_state \u003d task_states.REBUILDING"},{"line_number":3002,"context_line":"        # An empty instance.image_ref is currently used as an indication"}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_3ac4b1f4","line":2999,"range":{"start_line":2992,"start_character":2,"end_line":2999,"end_character":68},"in_reply_to":"7f96bb07_46aa0a19","updated":"2018-01-17 18:02:09.000000000","message":"Thanks for the tip! Done","commit_id":"cbb0f46e9e5669d4a8e21d41b6eb8723a872cc36"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"6ea60367198470b9b4b333987e39b73b6ea2a964","unresolved":false,"context_lines":[{"line_number":907,"context_line":"                if key_pair:"},{"line_number":908,"context_line":"                    instance.keypairs.objects.append(key_pair)"},{"line_number":909,"context_line":""},{"line_number":910,"context_line":"                instance.trusted_certs \u003d self._retrieve_trusted_certs("},{"line_number":911,"context_line":"                    trusted_certs)"},{"line_number":912,"context_line":""},{"line_number":913,"context_line":"                instance \u003d self.create_db_entry_for_new_instance(context,"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f96bb07_5b26386a","line":910,"updated":"2018-01-18 17:55:06.000000000","message":"This will be set regardless of the result of _retrieve_trusted_certs (hence the ComputeAPIUnitTestCase failures). This will be fixed in the next patch.","commit_id":"9217134e4691d554e59fd6877f70988a704f8680"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"6ea60367198470b9b4b333987e39b73b6ea2a964","unresolved":false,"context_lines":[{"line_number":2990,"context_line":"                image, auto_disk_config)"},{"line_number":2991,"context_line":"        instance.update(options_from_image)"},{"line_number":2992,"context_line":""},{"line_number":2993,"context_line":"        kwargs[\u0027trusted_certs\u0027] \u003d self._retrieve_trusted_certs("},{"line_number":2994,"context_line":"            kwargs.get(\"trusted_certs\", None))"},{"line_number":2995,"context_line":""},{"line_number":2996,"context_line":"        instance.task_state \u003d task_states.REBUILDING"}],"source_content_type":"text/x-python","patch_set":32,"id":"7f96bb07_7b29b434","line":2993,"updated":"2018-01-18 17:55:06.000000000","message":"This will be set regardless of the result of _retrieve_trusted_certs (hence the ComputeAPIUnitTestCase failures). This will be fixed in the next patch.","commit_id":"9217134e4691d554e59fd6877f70988a704f8680"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f89d76f49ed9d87ff6bb986beb3fec21c8e8a2d4","unresolved":false,"context_lines":[{"line_number":908,"context_line":"                if key_pair:"},{"line_number":909,"context_line":"                    instance.keypairs.objects.append(key_pair)"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"                retrieved_certs \u003d self._retrieve_trusted_certs(trusted_certs)"},{"line_number":912,"context_line":"                if retrieved_certs:"},{"line_number":913,"context_line":"                    instance.trusted_certs \u003d retrieved_certs"},{"line_number":914,"context_line":""},{"line_number":915,"context_line":"                instance \u003d self.create_db_entry_for_new_instance(context,"},{"line_number":916,"context_line":"                        instance_type, boot_meta, instance, security_groups,"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_1853e818","line":913,"range":{"start_line":911,"start_character":0,"end_line":913,"end_character":60},"updated":"2018-04-03 11:29:08.000000000","message":"I don\u0027t see any unit tests for all this?","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"f3a9cca88279f13366d073104b12faa1a5c5419c","unresolved":false,"context_lines":[{"line_number":908,"context_line":"                if key_pair:"},{"line_number":909,"context_line":"                    instance.keypairs.objects.append(key_pair)"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"                retrieved_certs \u003d self._retrieve_trusted_certs(trusted_certs)"},{"line_number":912,"context_line":"                if retrieved_certs:"},{"line_number":913,"context_line":"                    instance.trusted_certs \u003d retrieved_certs"},{"line_number":914,"context_line":""},{"line_number":915,"context_line":"                instance \u003d self.create_db_entry_for_new_instance(context,"},{"line_number":916,"context_line":"                        instance_type, boot_meta, instance, security_groups,"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_d61f75b4","line":913,"range":{"start_line":911,"start_character":0,"end_line":913,"end_character":60},"in_reply_to":"bf659307_1853e818","updated":"2018-04-03 19:24:30.000000000","message":"This will be fixed in the next patch.","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"a2b6a12898e8beec0228cd7f049c119a617cc49a","unresolved":false,"context_lines":[{"line_number":908,"context_line":"                if key_pair:"},{"line_number":909,"context_line":"                    instance.keypairs.objects.append(key_pair)"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"                retrieved_certs \u003d self._retrieve_trusted_certs(trusted_certs)"},{"line_number":912,"context_line":"                if retrieved_certs:"},{"line_number":913,"context_line":"                    instance.trusted_certs \u003d retrieved_certs"},{"line_number":914,"context_line":""},{"line_number":915,"context_line":"                instance \u003d self.create_db_entry_for_new_instance(context,"},{"line_number":916,"context_line":"                        instance_type, boot_meta, instance, security_groups,"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_e1f66e5d","line":913,"range":{"start_line":911,"start_character":0,"end_line":913,"end_character":60},"in_reply_to":"bf659307_d61f75b4","updated":"2018-04-04 03:58:26.000000000","message":"test_retrieve_trusted_certs* and test_provision_instances_with_trusted_certs* added to test_compute_api.py","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f89d76f49ed9d87ff6bb986beb3fec21c8e8a2d4","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        return instances_to_build"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    @staticmethod"},{"line_number":990,"context_line":"    def _retrieve_trusted_certs(trusted_certs):"},{"line_number":991,"context_line":"        # Retrieve trusted_certs parameter, or use CONF value if certificate"},{"line_number":992,"context_line":"        # validation is enabled"},{"line_number":993,"context_line":"        if trusted_certs:"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_78430443","line":990,"updated":"2018-04-03 11:29:08.000000000","message":"I don\u0027t see any unit tests for all this, did I miss them?","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"f3a9cca88279f13366d073104b12faa1a5c5419c","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        return instances_to_build"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    @staticmethod"},{"line_number":990,"context_line":"    def _retrieve_trusted_certs(trusted_certs):"},{"line_number":991,"context_line":"        # Retrieve trusted_certs parameter, or use CONF value if certificate"},{"line_number":992,"context_line":"        # validation is enabled"},{"line_number":993,"context_line":"        if trusted_certs:"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_f61ab9c3","line":990,"in_reply_to":"bf659307_78430443","updated":"2018-04-03 19:24:30.000000000","message":"This will be fixed in the next patch.","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"a2b6a12898e8beec0228cd7f049c119a617cc49a","unresolved":false,"context_lines":[{"line_number":987,"context_line":"        return instances_to_build"},{"line_number":988,"context_line":""},{"line_number":989,"context_line":"    @staticmethod"},{"line_number":990,"context_line":"    def _retrieve_trusted_certs(trusted_certs):"},{"line_number":991,"context_line":"        # Retrieve trusted_certs parameter, or use CONF value if certificate"},{"line_number":992,"context_line":"        # validation is enabled"},{"line_number":993,"context_line":"        if trusted_certs:"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_18b19647","line":990,"in_reply_to":"bf659307_f61ab9c3","updated":"2018-04-04 03:58:26.000000000","message":"test_retrieve_trusted_certs* added to test_compute_api.py","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"176a80210f61e1c545132b9b8ded4de38b4489f4","unresolved":false,"context_lines":[{"line_number":991,"context_line":"        # validation is enabled"},{"line_number":992,"context_line":"        if trusted_certs:"},{"line_number":993,"context_line":"            return objects.TrustedCerts(ids\u003dtrusted_certs)"},{"line_number":994,"context_line":"        else:"},{"line_number":995,"context_line":"            if (CONF.glance.verify_glance_signatures and"},{"line_number":996,"context_line":"                    CONF.glance.enable_certificate_validation):"},{"line_number":997,"context_line":"                return objects.TrustedCerts("},{"line_number":998,"context_line":"                            ids\u003dCONF.glance.default_trusted_certificate_ids)"}],"source_content_type":"text/x-python","patch_set":56,"id":"bf659307_06e6d8e9","line":995,"range":{"start_line":994,"start_character":8,"end_line":995,"end_character":14},"updated":"2018-04-06 15:21:50.000000000","message":"nit: could make this an elif and have one less layer of indentation","commit_id":"6bba797a160cd86a013d5970d0c388581f5c39a9"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"0e00bff7de299974cff6f1e337241cb75d169835","unresolved":false,"context_lines":[{"line_number":991,"context_line":"        # validation is enabled"},{"line_number":992,"context_line":"        if trusted_certs:"},{"line_number":993,"context_line":"            return objects.TrustedCerts(ids\u003dtrusted_certs)"},{"line_number":994,"context_line":"        else:"},{"line_number":995,"context_line":"            if (CONF.glance.verify_glance_signatures and"},{"line_number":996,"context_line":"                    CONF.glance.enable_certificate_validation):"},{"line_number":997,"context_line":"                return objects.TrustedCerts("},{"line_number":998,"context_line":"                            ids\u003dCONF.glance.default_trusted_certificate_ids)"}],"source_content_type":"text/x-python","patch_set":56,"id":"bf659307_49894324","line":995,"range":{"start_line":994,"start_character":8,"end_line":995,"end_character":14},"in_reply_to":"bf659307_06e6d8e9","updated":"2018-04-06 16:58:22.000000000","message":"Good catch.","commit_id":"6bba797a160cd86a013d5970d0c388581f5c39a9"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5f28f6243c4d1b9d77955ae9a2935de7d4412a9a","unresolved":false,"context_lines":[{"line_number":985,"context_line":"        return instances_to_build"},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"    @staticmethod"},{"line_number":988,"context_line":"    def _retrieve_trusted_certs(trusted_certs):"},{"line_number":989,"context_line":"        # Retrieve trusted_certs parameter, or use CONF value if certificate"},{"line_number":990,"context_line":"        # validation is enabled"},{"line_number":991,"context_line":"        if trusted_certs:"}],"source_content_type":"text/x-python","patch_set":73,"id":"bf659307_f58f16ca","line":988,"range":{"start_line":988,"start_character":8,"end_line":988,"end_character":31},"updated":"2018-04-13 21:38:08.000000000","message":"Nit: I think this would be better named \"_retrieve_trusted_certs_object\" so it\u0027s clear that it does something more than just hand you back the trusted_certs you passed in the case where you passed some. It creates a TrustedCerts object constructed from either the passed in trusted_certs or the default certs, if cert validation is enabled etc. But, it also returns None, so maybe the existing name is better.\n\nFor whatever reason, the behavior of this and its call site were confusing to me.","commit_id":"7e64019f332efe53fd9e949cf8fe7252d7ebf83f"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"45a6c66b103417fdd85c22bf27f257bfaec2f8c5","unresolved":false,"context_lines":[{"line_number":985,"context_line":"        return instances_to_build"},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"    @staticmethod"},{"line_number":988,"context_line":"    def _retrieve_trusted_certs(trusted_certs):"},{"line_number":989,"context_line":"        # Retrieve trusted_certs parameter, or use CONF value if certificate"},{"line_number":990,"context_line":"        # validation is enabled"},{"line_number":991,"context_line":"        if trusted_certs:"}],"source_content_type":"text/x-python","patch_set":73,"id":"bf659307_66f59eca","line":988,"range":{"start_line":988,"start_character":8,"end_line":988,"end_character":31},"in_reply_to":"bf659307_f58f16ca","updated":"2018-04-14 01:25:59.000000000","message":"I\u0027m okay with renaming to \"_retrieve_trusted_certs_object\"","commit_id":"7e64019f332efe53fd9e949cf8fe7252d7ebf83f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5f28f6243c4d1b9d77955ae9a2935de7d4412a9a","unresolved":false,"context_lines":[{"line_number":3086,"context_line":"        retrieved_certs \u003d self._retrieve_trusted_certs("},{"line_number":3087,"context_line":"            kwargs.get(\u0027trusted_certs\u0027, None))"},{"line_number":3088,"context_line":"        if retrieved_certs:"},{"line_number":3089,"context_line":"            kwargs[\u0027trusted_certs\u0027] \u003d retrieved_certs"},{"line_number":3090,"context_line":""},{"line_number":3091,"context_line":"        instance.task_state \u003d task_states.REBUILDING"},{"line_number":3092,"context_line":"        # An empty instance.image_ref is currently used as an indication"}],"source_content_type":"text/x-python","patch_set":73,"id":"bf659307_7559c68b","line":3089,"updated":"2018-04-13 21:38:08.000000000","message":"Note to self: this is pulling the passed in certs from kwargs for rebuild.\n\nThis is a bit weird in that it will overwrite kwargs[\u0027trusted_certs\u0027] with (seemingly) itself if trusted_certs were passed in to rebuild. But looking again I see that _retrieve_trusted_certs aims to return a TrustedCerts object or None, so this is replacing the list of IDs with a TrustedCerts object in kwargs. A bit confusing, at least to me, in the absence of a comment.","commit_id":"7e64019f332efe53fd9e949cf8fe7252d7ebf83f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d70d753683797e3fbf339360ff4952ffa6b27019","unresolved":false,"context_lines":[{"line_number":3086,"context_line":"        retrieved_certs \u003d self._retrieve_trusted_certs("},{"line_number":3087,"context_line":"            kwargs.get(\u0027trusted_certs\u0027, None))"},{"line_number":3088,"context_line":"        if retrieved_certs:"},{"line_number":3089,"context_line":"            kwargs[\u0027trusted_certs\u0027] \u003d retrieved_certs"},{"line_number":3090,"context_line":""},{"line_number":3091,"context_line":"        instance.task_state \u003d task_states.REBUILDING"},{"line_number":3092,"context_line":"        # An empty instance.image_ref is currently used as an indication"}],"source_content_type":"text/x-python","patch_set":73,"id":"9f6a8fd7_d25f53e3","line":3089,"in_reply_to":"bf659307_7559c68b","updated":"2018-04-16 15:52:36.000000000","message":"I totally stumbled over this too in a later patch set, so something definitely needs to change here.","commit_id":"7e64019f332efe53fd9e949cf8fe7252d7ebf83f"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"45a6c66b103417fdd85c22bf27f257bfaec2f8c5","unresolved":false,"context_lines":[{"line_number":3086,"context_line":"        retrieved_certs \u003d self._retrieve_trusted_certs("},{"line_number":3087,"context_line":"            kwargs.get(\u0027trusted_certs\u0027, None))"},{"line_number":3088,"context_line":"        if retrieved_certs:"},{"line_number":3089,"context_line":"            kwargs[\u0027trusted_certs\u0027] \u003d retrieved_certs"},{"line_number":3090,"context_line":""},{"line_number":3091,"context_line":"        instance.task_state \u003d task_states.REBUILDING"},{"line_number":3092,"context_line":"        # An empty instance.image_ref is currently used as an indication"}],"source_content_type":"text/x-python","patch_set":73,"id":"bf659307_c68b4a1c","line":3089,"in_reply_to":"bf659307_7559c68b","updated":"2018-04-14 01:25:59.000000000","message":"I\u0027ll add a comment since this needs to be rebased anyway","commit_id":"7e64019f332efe53fd9e949cf8fe7252d7ebf83f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01ec2d232c62a6ff5ce8f8d9560bab5e111db735","unresolved":false,"context_lines":[{"line_number":888,"context_line":"                # RequestSpec before the instance is created."},{"line_number":889,"context_line":"                instance_uuid \u003d uuidutils.generate_uuid()"},{"line_number":890,"context_line":"                # Store the RequestSpec that will be used for scheduling."},{"line_number":891,"context_line":"                req_spec \u003d objects.RequestSpec.from_components(context,"},{"line_number":892,"context_line":"                        instance_uuid, boot_meta, instance_type,"},{"line_number":893,"context_line":"                        base_options[\u0027numa_topology\u0027],"},{"line_number":894,"context_line":"                        base_options[\u0027pci_requests\u0027], filter_properties,"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_e362d0d8","line":891,"updated":"2018-04-16 15:07:02.000000000","message":"Do we not care about storing the trusted cert IDs in the request spec? For example, the spec says that we can provide trusted certs to rebuild, at which point we\u0027d update the instance.trusted_certs and lose whatever tracking we had of the original cert IDs - does that matter?","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6bd4482c079cc6f57c0b41628cf05e8893a18394","unresolved":false,"context_lines":[{"line_number":888,"context_line":"                # RequestSpec before the instance is created."},{"line_number":889,"context_line":"                instance_uuid \u003d uuidutils.generate_uuid()"},{"line_number":890,"context_line":"                # Store the RequestSpec that will be used for scheduling."},{"line_number":891,"context_line":"                req_spec \u003d objects.RequestSpec.from_components(context,"},{"line_number":892,"context_line":"                        instance_uuid, boot_meta, instance_type,"},{"line_number":893,"context_line":"                        base_options[\u0027numa_topology\u0027],"},{"line_number":894,"context_line":"                        base_options[\u0027pci_requests\u0027], filter_properties,"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_2bbc1a04","line":891,"in_reply_to":"9f6a8fd7_28c66069","updated":"2018-04-16 17:48:19.000000000","message":"\u003e If we do want to add trusted_certs to the request spec, it should probably be done in a separate patch, since it will also require updating the RequestSpec object.\n\nI talked to Dan about this and we can\u0027t think of any reason why we need to store the original trusted certs used to create the instance in the request spec, since you can\u0027t change them on something like resize.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"7a876fb7cdd10b64f747ab4390dfcefa89c27beb","unresolved":false,"context_lines":[{"line_number":888,"context_line":"                # RequestSpec before the instance is created."},{"line_number":889,"context_line":"                instance_uuid \u003d uuidutils.generate_uuid()"},{"line_number":890,"context_line":"                # Store the RequestSpec that will be used for scheduling."},{"line_number":891,"context_line":"                req_spec \u003d objects.RequestSpec.from_components(context,"},{"line_number":892,"context_line":"                        instance_uuid, boot_meta, instance_type,"},{"line_number":893,"context_line":"                        base_options[\u0027numa_topology\u0027],"},{"line_number":894,"context_line":"                        base_options[\u0027pci_requests\u0027], filter_properties,"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_e6665952","line":891,"in_reply_to":"9f6a8fd7_2bbc1a04","updated":"2018-04-16 18:53:13.000000000","message":"\u003e Is Cinder also going to have a trusted_certs addition to its API for validating images in the created volume? Otherwise I as a user can bypass all of the trusted certs stuff by simply booting from volume.\n\nCinder currently has a spec to support signature verification (with plans to eventually add trusted certs once it\u0027s supported in Nova).  See patch at: https://review.openstack.org/#/c/384143/","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"d5b262f172a51c23efbd54eccaf178b881b78e83","unresolved":false,"context_lines":[{"line_number":888,"context_line":"                # RequestSpec before the instance is created."},{"line_number":889,"context_line":"                instance_uuid \u003d uuidutils.generate_uuid()"},{"line_number":890,"context_line":"                # Store the RequestSpec that will be used for scheduling."},{"line_number":891,"context_line":"                req_spec \u003d objects.RequestSpec.from_components(context,"},{"line_number":892,"context_line":"                        instance_uuid, boot_meta, instance_type,"},{"line_number":893,"context_line":"                        base_options[\u0027numa_topology\u0027],"},{"line_number":894,"context_line":"                        base_options[\u0027pci_requests\u0027], filter_properties,"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_28c66069","line":891,"in_reply_to":"9f6a8fd7_e362d0d8","updated":"2018-04-16 17:11:30.000000000","message":"If we rebuild with new trusted_certs, it should be okay to lose tracking of the original trusted_certs for the new instance. As long as rebuilding with the same trusted_certs (or not specifying new trusted_certs during rebuild) does not remove the current trusted_certs for the new instance.\n\nIf we do want to add trusted_certs to the request spec, it should probably be done in a separate patch, since it will also require updating the RequestSpec object.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"33d8978795886a750ce09ee0f4414881c5f89b0f","unresolved":false,"context_lines":[{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"            bdm.update_or_create()"},{"line_number":1305,"context_line":""},{"line_number":1306,"context_line":"    def _validate_bdm(self, context, instance, instance_type,"},{"line_number":1307,"context_line":"                      block_device_mappings, supports_multiattach\u003dFalse):"},{"line_number":1308,"context_line":"        # Make sure that the boot indexes make sense."},{"line_number":1309,"context_line":"        # Setting a negative value or None indicates that the device should not"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_be64ebba","line":1306,"updated":"2018-04-16 15:26:49.000000000","message":"So far as I can tell, nothing about this new flow supports volume-backed instances in the case that nova creates the root volume in the compute service, i.e. bdm with source_type in \"image\" or \"snapshot\". Is Cinder also going to have a trusted_certs addition to its API for validating images in the created volume? Otherwise I as a user can bypass all of the trusted certs stuff by simply booting from volume.\n\nIf we aren\u0027t going to support boot from volume where nova creates the root volume, we should probably fail in the API if trusted_certs is requested since it\u0027s not supported and would require a later microversion to indicate that support.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"9347c78e30956bbe3d9741af5eec374e361d31ca","unresolved":false,"context_lines":[{"line_number":1303,"context_line":""},{"line_number":1304,"context_line":"            bdm.update_or_create()"},{"line_number":1305,"context_line":""},{"line_number":1306,"context_line":"    def _validate_bdm(self, context, instance, instance_type,"},{"line_number":1307,"context_line":"                      block_device_mappings, supports_multiattach\u003dFalse):"},{"line_number":1308,"context_line":"        # Make sure that the boot indexes make sense."},{"line_number":1309,"context_line":"        # Setting a negative value or None indicates that the device should not"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_5527ad13","line":1306,"in_reply_to":"9f6a8fd7_be64ebba","updated":"2018-04-16 16:42:20.000000000","message":"The spec does not include any plans to support trusted_certs when booting from volume. I\u0027ll add a fail if trusted_certs are provided when booting from volume.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01ec2d232c62a6ff5ce8f8d9560bab5e111db735","unresolved":false,"context_lines":[{"line_number":3086,"context_line":""},{"line_number":3087,"context_line":"        # Use trusted_certs value from kwargs to create TrustedCerts object"},{"line_number":3088,"context_line":"        retrieved_certs \u003d self._retrieve_trusted_certs_object("},{"line_number":3089,"context_line":"            kwargs.get(\u0027trusted_certs\u0027, None))"},{"line_number":3090,"context_line":"        if retrieved_certs:"},{"line_number":3091,"context_line":"            kwargs[\u0027trusted_certs\u0027] \u003d retrieved_certs"},{"line_number":3092,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_63400009","line":3089,"range":{"start_line":3089,"start_character":38,"end_line":3089,"end_character":44},"updated":"2018-04-16 15:07:02.000000000","message":"nit: this is redundant since kwargs.get() will return None if \u0027trusted_certs\u0027 isn\u0027t in the dict","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"c9f4aec3e2a8f8da8d4e36753c456baab06f63bd","unresolved":false,"context_lines":[{"line_number":3086,"context_line":""},{"line_number":3087,"context_line":"        # Use trusted_certs value from kwargs to create TrustedCerts object"},{"line_number":3088,"context_line":"        retrieved_certs \u003d self._retrieve_trusted_certs_object("},{"line_number":3089,"context_line":"            kwargs.get(\u0027trusted_certs\u0027, None))"},{"line_number":3090,"context_line":"        if retrieved_certs:"},{"line_number":3091,"context_line":"            kwargs[\u0027trusted_certs\u0027] \u003d retrieved_certs"},{"line_number":3092,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_d29433eb","line":3089,"range":{"start_line":3089,"start_character":38,"end_line":3089,"end_character":44},"in_reply_to":"9f6a8fd7_63400009","updated":"2018-04-16 16:26:44.000000000","message":"Done","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01ec2d232c62a6ff5ce8f8d9560bab5e111db735","unresolved":false,"context_lines":[{"line_number":3098,"context_line":"        instance.kernel_id \u003d kernel_id or \"\""},{"line_number":3099,"context_line":"        instance.ramdisk_id \u003d ramdisk_id or \"\""},{"line_number":3100,"context_line":"        instance.progress \u003d 0"},{"line_number":3101,"context_line":"        instance.update(kwargs)"},{"line_number":3102,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3103,"context_line":""},{"line_number":3104,"context_line":"        # On a rebuild, since we\u0027re potentially changing images, we need to"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_a304d8c7","line":3101,"range":{"start_line":3101,"start_character":8,"end_line":3101,"end_character":31},"updated":"2018-04-16 15:07:02.000000000","message":"This will be whatever is in kwargs for trusted_certs, which is the list of IDs or the default from config, right? But what it should be is the object form of trusted_certs, yes?","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3d63a751e965c75c839c3789cd8acd71161f96dd","unresolved":false,"context_lines":[{"line_number":3098,"context_line":"        instance.kernel_id \u003d kernel_id or \"\""},{"line_number":3099,"context_line":"        instance.ramdisk_id \u003d ramdisk_id or \"\""},{"line_number":3100,"context_line":"        instance.progress \u003d 0"},{"line_number":3101,"context_line":"        instance.update(kwargs)"},{"line_number":3102,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3103,"context_line":""},{"line_number":3104,"context_line":"        # On a rebuild, since we\u0027re potentially changing images, we need to"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_f5660152","line":3101,"range":{"start_line":3101,"start_character":8,"end_line":3101,"end_character":31},"in_reply_to":"9f6a8fd7_7547511f","updated":"2018-04-16 16:39:29.000000000","message":"\u003e The current implementation of this will only include trusted_certs if it is in kwargs. If it\u0027s not in kwargs, then _retrieve_certs_object will return None, and kwargs[\u0027trusted_certs\u0027] will never be loaded.\n\nI don\u0027t think that\u0027s correct. You\u0027re passing None to _retrieve_trusted_certs_object if \u0027trusted_certs\u0027 is not in kwargs, and looking at _retrieve_trusted_certs_object, if you pass in None, it\u0027s going to return the defaults based on config, which is why I said, if I created my server with non-default certs and then rebuild without specifying certs, this would then change my server to use default certs, which is confusing.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c6fd62d2a87b7794f8c7f04a6d6830be302b0260","unresolved":false,"context_lines":[{"line_number":3098,"context_line":"        instance.kernel_id \u003d kernel_id or \"\""},{"line_number":3099,"context_line":"        instance.ramdisk_id \u003d ramdisk_id or \"\""},{"line_number":3100,"context_line":"        instance.progress \u003d 0"},{"line_number":3101,"context_line":"        instance.update(kwargs)"},{"line_number":3102,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3103,"context_line":""},{"line_number":3104,"context_line":"        # On a rebuild, since we\u0027re potentially changing images, we need to"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_83d514bc","line":3101,"range":{"start_line":3101,"start_character":8,"end_line":3101,"end_character":31},"in_reply_to":"9f6a8fd7_83399442","updated":"2018-04-16 15:17:52.000000000","message":"Although even that might be wrong - let\u0027s say I created my server with specific requested trusted certs, then on rebuild I don\u0027t specify trusted_certs, but there is a default configured, I\u0027m now going to get my server rebuilt with the config-based defaults rather than what was stored in the instance when I created the server, right? Wouldn\u0027t that be a confusing behavior change?\n\nI wonder if we should handle this similar to key_name above, in that we only do anything with this if trusted_certs is actually in kwargs, otherwise the user didn\u0027t specify anything and they don\u0027t want anything to change. If they want to reset the trusted certs on rebuild (or get the defaults from config), then they can pass None specifically to rebuild, which is how it works for resetting the key.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"c9f4aec3e2a8f8da8d4e36753c456baab06f63bd","unresolved":false,"context_lines":[{"line_number":3098,"context_line":"        instance.kernel_id \u003d kernel_id or \"\""},{"line_number":3099,"context_line":"        instance.ramdisk_id \u003d ramdisk_id or \"\""},{"line_number":3100,"context_line":"        instance.progress \u003d 0"},{"line_number":3101,"context_line":"        instance.update(kwargs)"},{"line_number":3102,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3103,"context_line":""},{"line_number":3104,"context_line":"        # On a rebuild, since we\u0027re potentially changing images, we need to"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_7547511f","line":3101,"range":{"start_line":3101,"start_character":8,"end_line":3101,"end_character":31},"in_reply_to":"9f6a8fd7_83d514bc","updated":"2018-04-16 16:26:44.000000000","message":"The current implementation of this will only include trusted_certs if it is in kwargs. If it\u0027s not in kwargs, then _retrieve_certs_object will return None, and kwargs[\u0027trusted_certs\u0027] will never be loaded.\n\nSince this was a bit confusing, we can re-write to match key_name\u0027s implementation.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f564d94a51134f8427aa207f6d5494e465115f5d","unresolved":false,"context_lines":[{"line_number":3098,"context_line":"        instance.kernel_id \u003d kernel_id or \"\""},{"line_number":3099,"context_line":"        instance.ramdisk_id \u003d ramdisk_id or \"\""},{"line_number":3100,"context_line":"        instance.progress \u003d 0"},{"line_number":3101,"context_line":"        instance.update(kwargs)"},{"line_number":3102,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3103,"context_line":""},{"line_number":3104,"context_line":"        # On a rebuild, since we\u0027re potentially changing images, we need to"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_83399442","line":3101,"range":{"start_line":3101,"start_character":8,"end_line":3101,"end_character":31},"in_reply_to":"9f6a8fd7_a304d8c7","updated":"2018-04-16 15:14:11.000000000","message":"Oh I see my mistake, you\u0027ve changed kwargs[\u0027trusted_certs\u0027] to the object form on L3091 above. That is not obvious. I would instead do something like this:\n\ntrusted_certs \u003d self._retrieve_trusted_certs_object(\n            kwargs.pop(\u0027trusted_certs\u0027, None))\ninstance.trusted_certs \u003d trusted_certs","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"9347c78e30956bbe3d9741af5eec374e361d31ca","unresolved":false,"context_lines":[{"line_number":3098,"context_line":"        instance.kernel_id \u003d kernel_id or \"\""},{"line_number":3099,"context_line":"        instance.ramdisk_id \u003d ramdisk_id or \"\""},{"line_number":3100,"context_line":"        instance.progress \u003d 0"},{"line_number":3101,"context_line":"        instance.update(kwargs)"},{"line_number":3102,"context_line":"        instance.save(expected_task_state\u003d[None])"},{"line_number":3103,"context_line":""},{"line_number":3104,"context_line":"        # On a rebuild, since we\u0027re potentially changing images, we need to"}],"source_content_type":"text/x-python","patch_set":85,"id":"9f6a8fd7_35fa3942","line":3101,"range":{"start_line":3101,"start_character":8,"end_line":3101,"end_character":31},"in_reply_to":"9f6a8fd7_f5660152","updated":"2018-04-16 16:42:20.000000000","message":"\u003e which is why I said, if I created my server with non-default certs and then rebuild without specifying certs, this would then change my server to use default certs, which is confusing.\n\nYou\u0027re right. Sorry, I overlooked that part. Updating this to check for trusted_certs in kwargs before trying retrieve trusted_certs.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"3bb73deab5691225bb391e26867c7f5b7013eaba","unresolved":false,"context_lines":[{"line_number":1086,"context_line":""},{"line_number":1087,"context_line":"        if image_href:"},{"line_number":1088,"context_line":"            image_id, boot_meta \u003d self._get_image(context, image_href)"},{"line_number":1089,"context_line":"        else:"},{"line_number":1090,"context_line":"            image_id \u003d None"},{"line_number":1091,"context_line":"            boot_meta \u003d self._get_bdm_image_metadata("},{"line_number":1092,"context_line":"                context, block_device_mapping, legacy_bdm)"}],"source_content_type":"text/x-python","patch_set":92,"id":"9f6a8fd7_fd16a8f1","line":1089,"updated":"2018-04-18 18:08:49.000000000","message":"This seems like a better suited place to add the certificate validation support check","commit_id":"fe38fff01ecefa759f14c9a9c69ee3b966058b8a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa10960c17bf2aacb7b30a6eb1413e0f1ea65f1f","unresolved":false,"context_lines":[{"line_number":1342,"context_line":"                        \"destination_type \u0027volume\u0027 need to have a non-zero \""},{"line_number":1343,"context_line":"                        \"size specified\"))"},{"line_number":1344,"context_line":"            elif volume_id is not None:"},{"line_number":1345,"context_line":"                if instance.get(\u0027trusted_certs\u0027, None) and \\"},{"line_number":1346,"context_line":"                        CONF.glance.enable_certificate_validation:"},{"line_number":1347,"context_line":"                    msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":1348,"context_line":"                            \"when booting from volume\")"}],"source_content_type":"text/x-python","patch_set":92,"id":"9f6a8fd7_0b723be4","line":1345,"updated":"2018-04-18 16:19:45.000000000","message":"This isn\u0027t the only boot from volume case, you can also boot from volume where source_type is \u0027image\u0027 so the conditional block above where image_is is not None or via volume snapshot which is the conditional block below where snapshot_id is not None - in both of those cases nova-compute will create a volume from either the image or volume snapshot and we won\u0027t have done image validation with the trusted_certs. Also, I think the validation would only apply to the root BDM since that\u0027s the one with the guest image in it - see BlockDeviceMappingList.root_bdm or BlockDeviceMapping.is_root.","commit_id":"fe38fff01ecefa759f14c9a9c69ee3b966058b8a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cc37cb12a45f37193d7f2128a70d0b1d66dbe06f","unresolved":false,"context_lines":[{"line_number":1342,"context_line":"                        \"destination_type \u0027volume\u0027 need to have a non-zero \""},{"line_number":1343,"context_line":"                        \"size specified\"))"},{"line_number":1344,"context_line":"            elif volume_id is not None:"},{"line_number":1345,"context_line":"                if instance.get(\u0027trusted_certs\u0027, None) and \\"},{"line_number":1346,"context_line":"                        CONF.glance.enable_certificate_validation:"},{"line_number":1347,"context_line":"                    msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":1348,"context_line":"                            \"when booting from volume\")"}],"source_content_type":"text/x-python","patch_set":92,"id":"9f6a8fd7_66144ea1","line":1345,"in_reply_to":"9f6a8fd7_0b723be4","updated":"2018-04-18 16:43:09.000000000","message":"I\u0027ve started a mailing list thread about my concerns with trusted_certs support and not supporting boot from volume:\n\nhttp://lists.openstack.org/pipermail/openstack-dev/2018-April/129494.html\n\nOver the years we\u0027ve added a lot of technical debt to nova by adding new features which don\u0027t consider boot from volume (backup, rebuild, rescue, etc) and then we have to retrofit that support later which is painful, so I\u0027d like us to at least slow down and consider this first and get broader input.","commit_id":"fe38fff01ecefa759f14c9a9c69ee3b966058b8a"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"3bb73deab5691225bb391e26867c7f5b7013eaba","unresolved":false,"context_lines":[{"line_number":1342,"context_line":"                        \"destination_type \u0027volume\u0027 need to have a non-zero \""},{"line_number":1343,"context_line":"                        \"size specified\"))"},{"line_number":1344,"context_line":"            elif volume_id is not None:"},{"line_number":1345,"context_line":"                if instance.get(\u0027trusted_certs\u0027, None) and \\"},{"line_number":1346,"context_line":"                        CONF.glance.enable_certificate_validation:"},{"line_number":1347,"context_line":"                    msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":1348,"context_line":"                            \"when booting from volume\")"}],"source_content_type":"text/x-python","patch_set":92,"id":"9f6a8fd7_ddf084cc","line":1345,"in_reply_to":"9f6a8fd7_0b723be4","updated":"2018-04-18 18:08:49.000000000","message":"Thanks for pointing that out. It looks like L1089 may be a better place to put this check.","commit_id":"fe38fff01ecefa759f14c9a9c69ee3b966058b8a"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"3bb73deab5691225bb391e26867c7f5b7013eaba","unresolved":false,"context_lines":[{"line_number":1342,"context_line":"                        \"destination_type \u0027volume\u0027 need to have a non-zero \""},{"line_number":1343,"context_line":"                        \"size specified\"))"},{"line_number":1344,"context_line":"            elif volume_id is not None:"},{"line_number":1345,"context_line":"                if instance.get(\u0027trusted_certs\u0027, None) and \\"},{"line_number":1346,"context_line":"                        CONF.glance.enable_certificate_validation:"},{"line_number":1347,"context_line":"                    msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":1348,"context_line":"                            \"when booting from volume\")"}],"source_content_type":"text/x-python","patch_set":92,"id":"9f6a8fd7_7db938e7","line":1345,"in_reply_to":"9f6a8fd7_66144ea1","updated":"2018-04-18 18:08:49.000000000","message":"Thanks, Matt. I\u0027ll keep an eye on the thread. For now, I\u0027ll just add checks where volume-backed instances are being created/rebuilt.","commit_id":"fe38fff01ecefa759f14c9a9c69ee3b966058b8a"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"eb11b560c5b4dd9ae5406fbabac64823d9ad949f","unresolved":false,"context_lines":[{"line_number":1342,"context_line":"                        \"destination_type \u0027volume\u0027 need to have a non-zero \""},{"line_number":1343,"context_line":"                        \"size specified\"))"},{"line_number":1344,"context_line":"            elif volume_id is not None:"},{"line_number":1345,"context_line":"                if instance.get(\u0027trusted_certs\u0027, None) and \\"},{"line_number":1346,"context_line":"                        CONF.glance.enable_certificate_validation:"},{"line_number":1347,"context_line":"                    msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":1348,"context_line":"                            \"when booting from volume\")"}],"source_content_type":"text/x-python","patch_set":92,"id":"9f6a8fd7_0273c2b2","line":1345,"in_reply_to":"9f6a8fd7_7db938e7","updated":"2018-04-20 15:39:47.000000000","message":"I\u0027ve added the following policy rules with the latest patch set:\n* os_compute_api:servers:create:trusted_certs\n* os_compute_api:servers:rebuild:trusted_certs\n\nWe skip the policy check if no trusted_certs were provided to server create or server rebuild.\n\nSpecific policy changes:\nhttps://review.openstack.org/#/c/486204/94..95","commit_id":"fe38fff01ecefa759f14c9a9c69ee3b966058b8a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f87a4796966de17153768889f30d9ff790bb4283","unresolved":false,"context_lines":[{"line_number":3023,"context_line":"        # root disk of a volume-backed server, so we need to just fail fast."},{"line_number":3024,"context_line":"        is_volume_backed \u003d compute_utils.is_volume_backed_instance("},{"line_number":3025,"context_line":"            context, instance, bdms)"},{"line_number":3026,"context_line":"        if is_volume_backed:"},{"line_number":3027,"context_line":"            # For boot from volume, instance.image_ref is empty, so we need to"},{"line_number":3028,"context_line":"            # query the image from the volume."},{"line_number":3029,"context_line":"            if root_bdm is None:"}],"source_content_type":"text/x-python","patch_set":92,"id":"9f6a8fd7_c6175a45","line":3026,"updated":"2018-04-18 16:23:41.000000000","message":"As you can see in this block, it is possible to rebuild a volume-backed server as long as the underlying image doesn\u0027t change. This means that if the user is rebuilding a volume-backed server and the image isn\u0027t changing, but the user passed in some new trusted_certs, it needs to be rejected in the same way as server create for boot from volume with trusted certs since we\u0027re not going to validate those in the compute service.","commit_id":"fe38fff01ecefa759f14c9a9c69ee3b966058b8a"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"3bb73deab5691225bb391e26867c7f5b7013eaba","unresolved":false,"context_lines":[{"line_number":3023,"context_line":"        # root disk of a volume-backed server, so we need to just fail fast."},{"line_number":3024,"context_line":"        is_volume_backed \u003d compute_utils.is_volume_backed_instance("},{"line_number":3025,"context_line":"            context, instance, bdms)"},{"line_number":3026,"context_line":"        if is_volume_backed:"},{"line_number":3027,"context_line":"            # For boot from volume, instance.image_ref is empty, so we need to"},{"line_number":3028,"context_line":"            # query the image from the volume."},{"line_number":3029,"context_line":"            if root_bdm is None:"}],"source_content_type":"text/x-python","patch_set":92,"id":"9f6a8fd7_9da1acac","line":3026,"in_reply_to":"9f6a8fd7_c6175a45","updated":"2018-04-18 18:08:49.000000000","message":"Yes, good catch. I\u0027ll add a check here, too.","commit_id":"fe38fff01ecefa759f14c9a9c69ee3b966058b8a"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"c6db1fa7a85ce1224945539152bf8dbc20499217","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"            if trusted_certs or CONF.glance.enable_certificate_validation:"},{"line_number":1071,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":1072,"context_line":"                        \"when booting from volume\")"},{"line_number":1073,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"},{"line_number":1074,"context_line":"            image_id \u003d None"},{"line_number":1075,"context_line":"            boot_meta \u003d self._get_bdm_image_metadata("},{"line_number":1076,"context_line":"                context, block_device_mapping, legacy_bdm)"}],"source_content_type":"text/x-python","patch_set":100,"id":"5f7c97a3_0a4bb02a","line":1073,"range":{"start_line":1073,"start_character":32,"end_line":1073,"end_character":59},"updated":"2018-05-30 10:21:43.000000000","message":"could this be a separate exception? like CertificateValidationNotSupported, could be more acurate, but just IMO, seems the messages are clear.","commit_id":"cd04b79ee219e130134e877aa1aeb9f9cc89d461"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"b9cabf94d81b1eb614aa56967274cac03397434f","unresolved":false,"context_lines":[{"line_number":1070,"context_line":"            if trusted_certs or CONF.glance.enable_certificate_validation:"},{"line_number":1071,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":1072,"context_line":"                        \"when booting from volume\")"},{"line_number":1073,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"},{"line_number":1074,"context_line":"            image_id \u003d None"},{"line_number":1075,"context_line":"            boot_meta \u003d self._get_bdm_image_metadata("},{"line_number":1076,"context_line":"                context, block_device_mapping, legacy_bdm)"}],"source_content_type":"text/x-python","patch_set":100,"id":"5f7c97a3_21beced4","line":1073,"range":{"start_line":1073,"start_character":32,"end_line":1073,"end_character":59},"in_reply_to":"5f7c97a3_0a4bb02a","updated":"2018-05-30 17:33:29.000000000","message":"I think it\u0027s a bit cleaner to use the same exception for all the cert validation errors, so I\u0027m going to leave this as is (unless others disagree).","commit_id":"cd04b79ee219e130134e877aa1aeb9f9cc89d461"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":868,"context_line":"                # RequestSpec before the instance is created."},{"line_number":869,"context_line":"                instance_uuid \u003d uuidutils.generate_uuid()"},{"line_number":870,"context_line":"                # Store the RequestSpec that will be used for scheduling."},{"line_number":871,"context_line":"                req_spec \u003d objects.RequestSpec.from_components(context,"},{"line_number":872,"context_line":"                        instance_uuid, boot_meta, instance_type,"},{"line_number":873,"context_line":"                        base_options[\u0027numa_topology\u0027],"},{"line_number":874,"context_line":"                        base_options[\u0027pci_requests\u0027], filter_properties,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_c8bc9208","line":871,"range":{"start_line":871,"start_character":16,"end_line":871,"end_character":24},"updated":"2018-06-04 13:59:33.000000000","message":"Note to self: in a future where the compute driver capabilities are reported as traits in placement, I could see a need for putting something on the RequestSpec when trusted_image_certificates is requested in order to find a compute host during scheduling that actually supports the feature, since today it\u0027s just the libvirt driver that honors this type of request.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":3047,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3048,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3049,"context_line":"                        \"when booting from volume\")"},{"line_number":3050,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"},{"line_number":3051,"context_line":""},{"line_number":3052,"context_line":"            # For boot from volume, instance.image_ref is empty, so we need to"},{"line_number":3053,"context_line":"            # query the image from the volume."}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_e8d4eeeb","line":3050,"updated":"2018-06-04 13:59:33.000000000","message":"This will result in a 500 since you\u0027re not handling it in the wsgi controller code.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":3047,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3048,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3049,"context_line":"                        \"when booting from volume\")"},{"line_number":3050,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"},{"line_number":3051,"context_line":""},{"line_number":3052,"context_line":"            # For boot from volume, instance.image_ref is empty, so we need to"},{"line_number":3053,"context_line":"            # query the image from the volume."}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_52fd5a39","line":3050,"in_reply_to":"5f7c97a3_e8d4eeeb","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4690711fc94dcbe82a579fa3225bcbc9feda6cf6","unresolved":false,"context_lines":[{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        # Confirm trusted_certs are supported by the minimum nova"},{"line_number":984,"context_line":"        # compute service version"},{"line_number":985,"context_line":"        min_compute_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":986,"context_line":"            context, [\u0027nova-compute\u0027])"},{"line_number":987,"context_line":""},{"line_number":988,"context_line":"        if min_compute_version \u003c MIN_COMPUTE_TRUSTED_CERTS:"}],"source_content_type":"text/x-python","patch_set":109,"id":"5f7c97a3_f66f3ec1","line":985,"range":{"start_line":985,"start_character":46,"end_line":985,"end_character":75},"updated":"2018-06-12 13:46:41.000000000","message":"This is the correct thing to check when we\u0027re creating a new server because we don\u0027t know which cell it\u0027s going to get scheduled to, but it\u0027s not correct for rebuilding an existing instance that is already in a cell. In that case, we want to just use this:\n\nmin_compute_version \u003d objects.Service.get_minimum_version(\n                context, \u0027nova-compute\u0027)\n\nSee _check_attach_and_reserve_volume for an example.","commit_id":"168859abdc79c64bf72333a5652a26aed5a659d0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"88759ceef9c30eebf2eddcb6e891b3b1e95fa761","unresolved":false,"context_lines":[{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        # Confirm trusted_certs are supported by the minimum nova"},{"line_number":984,"context_line":"        # compute service version"},{"line_number":985,"context_line":"        min_compute_version \u003d objects.service.get_minimum_version_all_cells("},{"line_number":986,"context_line":"            context, [\u0027nova-compute\u0027])"},{"line_number":987,"context_line":""},{"line_number":988,"context_line":"        if min_compute_version \u003c MIN_COMPUTE_TRUSTED_CERTS:"}],"source_content_type":"text/x-python","patch_set":109,"id":"5f7c97a3_e26c54d1","line":985,"range":{"start_line":985,"start_character":46,"end_line":985,"end_character":75},"in_reply_to":"5f7c97a3_f66f3ec1","updated":"2018-06-12 16:11:29.000000000","message":"Done","commit_id":"168859abdc79c64bf72333a5652a26aed5a659d0"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"34f566cf6f20cda3cc4d5626e0aa1453f9850ec4","unresolved":false,"context_lines":[{"line_number":1087,"context_line":"        if image_href:"},{"line_number":1088,"context_line":"            image_id, boot_meta \u003d self._get_image(context, image_href)"},{"line_number":1089,"context_line":"        else:"},{"line_number":1090,"context_line":"            if trusted_certs or CONF.glance.enable_certificate_validation:"},{"line_number":1091,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":1092,"context_line":"                        \"when booting from volume\")"},{"line_number":1093,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":113,"id":"5f7c97a3_5b7e4d19","line":1090,"range":{"start_line":1090,"start_character":29,"end_line":1090,"end_character":73},"updated":"2018-06-12 22:20:58.000000000","message":"Shouldn\u0027t this be the same as the check on L975-977 to check all 3 glance conf options instead of only this one? We\u0027re not going to return a certs object unless enable_certificate_validation + verify_glance_signatures + default_trusted_certificate_ids and therefore won\u0027t attempt cert validation if any 1 of the 3 are false.","commit_id":"3fd162af2f15c1fd1fa9615717d5789e23c72e65"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"696943768dadd4d9d46df43c522f0164d0ccf27c","unresolved":false,"context_lines":[{"line_number":1087,"context_line":"        if image_href:"},{"line_number":1088,"context_line":"            image_id, boot_meta \u003d self._get_image(context, image_href)"},{"line_number":1089,"context_line":"        else:"},{"line_number":1090,"context_line":"            if trusted_certs or CONF.glance.enable_certificate_validation:"},{"line_number":1091,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":1092,"context_line":"                        \"when booting from volume\")"},{"line_number":1093,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":113,"id":"5f7c97a3_b7068485","line":1090,"range":{"start_line":1090,"start_character":29,"end_line":1090,"end_character":73},"in_reply_to":"5f7c97a3_5b7e4d19","updated":"2018-06-13 15:16:42.000000000","message":"Agreed.  Fixed.","commit_id":"3fd162af2f15c1fd1fa9615717d5789e23c72e65"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":104,"context_line":"BFV_RESERVE_MIN_COMPUTE_VERSION \u003d 17"},{"line_number":105,"context_line":"CINDER_V3_ATTACH_MIN_COMPUTE_VERSION \u003d 24"},{"line_number":106,"context_line":"MIN_COMPUTE_MULTIATTACH \u003d 27"},{"line_number":107,"context_line":"MIN_COMPUTE_TRUSTED_CERTS \u003d 31"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"# FIXME(danms): Keep a global cache of the cells we find the"},{"line_number":110,"context_line":"# first time we look. This needs to be refreshed on a timer or"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_4bf985c5","line":107,"updated":"2018-06-13 17:32:43.000000000","message":"Yup: https://review.openstack.org/#/c/561262/28/nova/objects/service.py","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":967,"context_line":"        return instances_to_build"},{"line_number":968,"context_line":""},{"line_number":969,"context_line":"    @staticmethod"},{"line_number":970,"context_line":"    def _retrieve_trusted_certs_object(context, trusted_certs, rebuild\u003dFalse):"},{"line_number":971,"context_line":"        # Retrieve trusted_certs parameter, or use CONF value if certificate"},{"line_number":972,"context_line":"        # validation is enabled"},{"line_number":973,"context_line":"        if trusted_certs:"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_cbd35537","line":970,"range":{"start_line":970,"start_character":39,"end_line":970,"end_character":76},"updated":"2018-06-13 17:32:43.000000000","message":"nit: describing these parameters in a docstring could be nice, since instance.trusted_certs is a TrustedCerts object, but trusted_certs here is a list of cert ID strings.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":967,"context_line":"        return instances_to_build"},{"line_number":968,"context_line":""},{"line_number":969,"context_line":"    @staticmethod"},{"line_number":970,"context_line":"    def _retrieve_trusted_certs_object(context, trusted_certs, rebuild\u003dFalse):"},{"line_number":971,"context_line":"        # Retrieve trusted_certs parameter, or use CONF value if certificate"},{"line_number":972,"context_line":"        # validation is enabled"},{"line_number":973,"context_line":"        if trusted_certs:"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_5d7aaa76","line":970,"range":{"start_line":970,"start_character":39,"end_line":970,"end_character":76},"in_reply_to":"5f7c97a3_cbd35537","updated":"2018-06-13 19:39:26.000000000","message":"Done","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":990,"context_line":"        else:"},{"line_number":991,"context_line":"            # we don\u0027t know which cell it\u0027s going to get scheduled"},{"line_number":992,"context_line":"            # to, so check all cells"},{"line_number":993,"context_line":"            min_compute_version \u003d \\"},{"line_number":994,"context_line":"                objects.service.get_minimum_version_all_cells("},{"line_number":995,"context_line":"                    context, [\u0027nova-compute\u0027])"},{"line_number":996,"context_line":""}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_9d05a2c4","line":993,"updated":"2018-06-13 19:39:26.000000000","message":"I just realized that we\u0027re going to hit this uncached query for every instance in a multi-create server create scenario - we could likely optimize that by just doing it in _provision_instances.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":980,"context_line":"        else:"},{"line_number":981,"context_line":"            return None"},{"line_number":982,"context_line":""},{"line_number":983,"context_line":"        # Confirm trusted_certs are supported by the minimum nova"},{"line_number":984,"context_line":"        # compute service version"},{"line_number":985,"context_line":"        if rebuild:"},{"line_number":986,"context_line":"            # we only care about the current cell since this is"},{"line_number":987,"context_line":"            # a rebuild"},{"line_number":988,"context_line":"            min_compute_version \u003d objects.Service.get_minimum_version("},{"line_number":989,"context_line":"                context, \u0027nova-compute\u0027)"},{"line_number":990,"context_line":"        else:"},{"line_number":991,"context_line":"            # we don\u0027t know which cell it\u0027s going to get scheduled"},{"line_number":992,"context_line":"            # to, so check all cells"},{"line_number":993,"context_line":"            min_compute_version \u003d \\"},{"line_number":994,"context_line":"                objects.service.get_minimum_version_all_cells("},{"line_number":995,"context_line":"                    context, [\u0027nova-compute\u0027])"},{"line_number":996,"context_line":""},{"line_number":997,"context_line":"        if min_compute_version \u003c MIN_COMPUTE_TRUSTED_CERTS:"},{"line_number":998,"context_line":"            raise exception.CertificateValidationNotYetAvailable()"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_0bedcdee","line":995,"range":{"start_line":983,"start_character":8,"end_line":995,"end_character":46},"updated":"2018-06-13 17:32:43.000000000","message":"perfect","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":1088,"context_line":"            image_id, boot_meta \u003d self._get_image(context, image_href)"},{"line_number":1089,"context_line":"        else:"},{"line_number":1090,"context_line":"            if (trusted_certs or"},{"line_number":1091,"context_line":"                (CONF.glance.verify_glance_signatures and"},{"line_number":1092,"context_line":"                 CONF.glance.enable_certificate_validation and"},{"line_number":1093,"context_line":"                 CONF.glance.default_trusted_certificate_ids)):"},{"line_number":1094,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":1095,"context_line":"                        \"when booting from volume\")"},{"line_number":1096,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_8ba79dbc","line":1093,"range":{"start_line":1091,"start_character":16,"end_line":1093,"end_character":61},"updated":"2018-06-13 17:32:43.000000000","message":"nit: could leave a comment saying something like, \"This is similar to the logic in _retrieve_trusted_certs_object.\"","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":1088,"context_line":"            image_id, boot_meta \u003d self._get_image(context, image_href)"},{"line_number":1089,"context_line":"        else:"},{"line_number":1090,"context_line":"            if (trusted_certs or"},{"line_number":1091,"context_line":"                (CONF.glance.verify_glance_signatures and"},{"line_number":1092,"context_line":"                 CONF.glance.enable_certificate_validation and"},{"line_number":1093,"context_line":"                 CONF.glance.default_trusted_certificate_ids)):"},{"line_number":1094,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":1095,"context_line":"                        \"when booting from volume\")"},{"line_number":1096,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_ddb47a38","line":1093,"range":{"start_line":1091,"start_character":16,"end_line":1093,"end_character":61},"in_reply_to":"5f7c97a3_8ba79dbc","updated":"2018-06-13 19:39:26.000000000","message":"Done","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":3059,"context_line":"        is_volume_backed \u003d compute_utils.is_volume_backed_instance("},{"line_number":3060,"context_line":"            context, instance, bdms)"},{"line_number":3061,"context_line":"        if is_volume_backed:"},{"line_number":3062,"context_line":"            if \u0027trusted_certs\u0027 in kwargs or \\"},{"line_number":3063,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3064,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3065,"context_line":"                        \"when booting from volume\")"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_2bebe9a3","line":3062,"updated":"2018-06-13 17:32:43.000000000","message":"Thinking through this, if I specified trusted_image_certificates\u003dNone in the rebuild request, this would still equate to True - which is likely not something we want to fail on for a volume-backed instance.\n\nSo this is probably better as:\n\nif kwargs.get(\u0027trusted_certs\u0027):\n\nRight? So if the user specifies trusted certs during rebuild for a volume-backed instance, we always fail.\n\nWe also can\u0027t get into a scenario where the user created the server with trusted certs and then is unsetting them in this case since you can\u0027t create a volume-backed server with trusted certs in the first place.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"76d8e8c325ad64eb35eda4718c58be144dee62b7","unresolved":false,"context_lines":[{"line_number":3059,"context_line":"        is_volume_backed \u003d compute_utils.is_volume_backed_instance("},{"line_number":3060,"context_line":"            context, instance, bdms)"},{"line_number":3061,"context_line":"        if is_volume_backed:"},{"line_number":3062,"context_line":"            if \u0027trusted_certs\u0027 in kwargs or \\"},{"line_number":3063,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3064,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3065,"context_line":"                        \"when booting from volume\")"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_9a7608a4","line":3062,"in_reply_to":"5f7c97a3_2bebe9a3","updated":"2018-06-13 18:15:29.000000000","message":"Why wouldn\u0027t we want to fail on an attempt to reset trusted_certs during a rebuild for volume-backed? Trusted certs aren\u0027t supported at all for volume-backed so I would expect an attempt to use them or null them out to fail. Right?","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":3059,"context_line":"        is_volume_backed \u003d compute_utils.is_volume_backed_instance("},{"line_number":3060,"context_line":"            context, instance, bdms)"},{"line_number":3061,"context_line":"        if is_volume_backed:"},{"line_number":3062,"context_line":"            if \u0027trusted_certs\u0027 in kwargs or \\"},{"line_number":3063,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3064,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3065,"context_line":"                        \"when booting from volume\")"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_3daa4ed1","line":3062,"in_reply_to":"5f7c97a3_7a0e8ce4","updated":"2018-06-13 19:39:26.000000000","message":"Done","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"695a1a550b13f5a444cd813d8bb8dcf54557bc3d","unresolved":false,"context_lines":[{"line_number":3059,"context_line":"        is_volume_backed \u003d compute_utils.is_volume_backed_instance("},{"line_number":3060,"context_line":"            context, instance, bdms)"},{"line_number":3061,"context_line":"        if is_volume_backed:"},{"line_number":3062,"context_line":"            if \u0027trusted_certs\u0027 in kwargs or \\"},{"line_number":3063,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3064,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3065,"context_line":"                        \"when booting from volume\")"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_7a0e8ce4","line":3062,"in_reply_to":"5f7c97a3_9a7608a4","updated":"2018-06-13 18:26:07.000000000","message":"I read this before I noticed below that we\u0027ll reset to defaults rather than unset trusted_certs, so maybe why that is here? Although if that\u0027s the reason, it\u0027s not really obvious. I probably would have done the unset/reset logic before getting to this point.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":3060,"context_line":"            context, instance, bdms)"},{"line_number":3061,"context_line":"        if is_volume_backed:"},{"line_number":3062,"context_line":"            if \u0027trusted_certs\u0027 in kwargs or \\"},{"line_number":3063,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3064,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3065,"context_line":"                        \"when booting from volume\")"},{"line_number":3066,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_4b28a5e0","line":3063,"range":{"start_line":3063,"start_character":20,"end_line":3063,"end_character":61},"updated":"2018-06-13 17:32:43.000000000","message":"I don\u0027t think this is really needed is it? Cert validation is likely per-compute and really only matters if trusted certs weren\u0027t provided and there are no defaults, but I don\u0027t think it\u0027s something we need to check in this block for volume-backed server rebuild - we just want to make sure the user didn\u0027t provide trusted_certs.\n\nI was thinking maybe I was missing something in the glance API download() code where it will use the default trusted certs from config if the trusted certs aren\u0027t specified by the user, but we won\u0027t hit that case for volume-backed rebuild b/c we won\u0027t be downloading any root disk image (since the image is in the volume which is the root disk).","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"76d8e8c325ad64eb35eda4718c58be144dee62b7","unresolved":false,"context_lines":[{"line_number":3060,"context_line":"            context, instance, bdms)"},{"line_number":3061,"context_line":"        if is_volume_backed:"},{"line_number":3062,"context_line":"            if \u0027trusted_certs\u0027 in kwargs or \\"},{"line_number":3063,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3064,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3065,"context_line":"                        \"when booting from volume\")"},{"line_number":3066,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_7aa44c07","line":3063,"range":{"start_line":3063,"start_character":20,"end_line":3063,"end_character":61},"in_reply_to":"5f7c97a3_4b28a5e0","updated":"2018-06-13 18:15:29.000000000","message":"I guess if a deployment has set this on the controllers (api hosts), we could fail fast if the deployment as a whole does not support cert validation, instead of waiting until the request lands on a compute host and fails and goes to ERROR state?","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":3060,"context_line":"            context, instance, bdms)"},{"line_number":3061,"context_line":"        if is_volume_backed:"},{"line_number":3062,"context_line":"            if \u0027trusted_certs\u0027 in kwargs or \\"},{"line_number":3063,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3064,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3065,"context_line":"                        \"when booting from volume\")"},{"line_number":3066,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_7da44607","line":3063,"range":{"start_line":3063,"start_character":20,"end_line":3063,"end_character":61},"in_reply_to":"5f7c97a3_7a98cc67","updated":"2018-06-13 19:39:26.000000000","message":"Done","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"695a1a550b13f5a444cd813d8bb8dcf54557bc3d","unresolved":false,"context_lines":[{"line_number":3060,"context_line":"            context, instance, bdms)"},{"line_number":3061,"context_line":"        if is_volume_backed:"},{"line_number":3062,"context_line":"            if \u0027trusted_certs\u0027 in kwargs or \\"},{"line_number":3063,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3064,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3065,"context_line":"                        \"when booting from volume\")"},{"line_number":3066,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_9abcc8dc","line":3063,"range":{"start_line":3063,"start_character":20,"end_line":3063,"end_character":61},"in_reply_to":"5f7c97a3_7aa44c07","updated":"2018-06-13 18:26:07.000000000","message":"\u003e on a compute host\n\nIt\u0027s not really on any old compute host, it\u0027s on the same host the instance is already running on since this is rebuild (not evacuate).\n\nI still don\u0027t fully understand the reason for the enable_certificate_validation check here though. As I said, if I have a volume-backed server, I couldn\u0027t have created it with trusted certs. I can\u0027t rebuild it with trusted certs either, but that\u0027s the check above. So if I\u0027m rebuilding a volume-backed server w/o trusted certs, but enable_certificate_validation\u003dTrue, it will fail even though enable_certificate_validation is used in the compute via the glance image API download() method which isn\u0027t used for volume-backed servers b/c we\u0027re not downloading a root image in nova - it\u0027s in cinder. Given that, even checking enable_certificate_validation here for that scenario I just described is likely a regression.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0b0af1c03c41d67af76e4702d20b1945ceb00058","unresolved":false,"context_lines":[{"line_number":3060,"context_line":"            context, instance, bdms)"},{"line_number":3061,"context_line":"        if is_volume_backed:"},{"line_number":3062,"context_line":"            if \u0027trusted_certs\u0027 in kwargs or \\"},{"line_number":3063,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3064,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3065,"context_line":"                        \"when booting from volume\")"},{"line_number":3066,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_7a98cc67","line":3063,"range":{"start_line":3063,"start_character":20,"end_line":3063,"end_character":61},"in_reply_to":"5f7c97a3_9abcc8dc","updated":"2018-06-13 18:28:23.000000000","message":"Or is this another side effect of unsetting trusted certs below to the defaults (if configured)? This would probably all be simpler if we just moved the trusted certs check above this logic.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":3062,"context_line":"            if \u0027trusted_certs\u0027 in kwargs or \\"},{"line_number":3063,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3064,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3065,"context_line":"                        \"when booting from volume\")"},{"line_number":3066,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"},{"line_number":3067,"context_line":""},{"line_number":3068,"context_line":"            # For boot from volume, instance.image_ref is empty, so we need to"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_ebbbb1c0","line":3065,"range":{"start_line":3065,"start_character":25,"end_line":3065,"end_character":49},"updated":"2018-06-13 17:32:43.000000000","message":"nit: in this case we aren\u0027t booting from volume, so it would be better to say, \"not supported for volume-backed instances\".","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":3062,"context_line":"            if \u0027trusted_certs\u0027 in kwargs or \\"},{"line_number":3063,"context_line":"                    CONF.glance.enable_certificate_validation:"},{"line_number":3064,"context_line":"                msg \u003d _(\"Image certificate validation is not supported \""},{"line_number":3065,"context_line":"                        \"when booting from volume\")"},{"line_number":3066,"context_line":"                raise exception.CertificateValidationFailed(message\u003dmsg)"},{"line_number":3067,"context_line":""},{"line_number":3068,"context_line":"            # For boot from volume, instance.image_ref is empty, so we need to"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_fd5a961b","line":3065,"range":{"start_line":3065,"start_character":25,"end_line":3065,"end_character":49},"in_reply_to":"5f7c97a3_ebbbb1c0","updated":"2018-06-13 19:39:26.000000000","message":"Done","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":3134,"context_line":"        # Use trusted_certs value from kwargs to create TrustedCerts object"},{"line_number":3135,"context_line":"        if \u0027trusted_certs\u0027 in kwargs:"},{"line_number":3136,"context_line":"            trusted_certs \u003d kwargs.pop(\u0027trusted_certs\u0027)"},{"line_number":3137,"context_line":"            instance.trusted_certs \u003d self._retrieve_trusted_certs_object("},{"line_number":3138,"context_line":"                context, trusted_certs, rebuild\u003dTrue)"},{"line_number":3139,"context_line":""},{"line_number":3140,"context_line":"        instance.task_state \u003d task_states.REBUILDING"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_4b6d0530","line":3137,"range":{"start_line":3137,"start_character":42,"end_line":3137,"end_character":72},"updated":"2018-06-13 17:32:43.000000000","message":"Hmm, if I\u0027m trying to unset the trusted_certs on my instance and pass trusted_image_certificates\u003dNone to the rebuild request, but this is true:\n\nelif (CONF.glance.verify_glance_signatures and\n              CONF.glance.enable_certificate_validation and\n              CONF.glance.default_trusted_certificate_ids):\n\nThen rather than unset the trusted certs, I\u0027ll get the defaults. Is that intentional? I think it\u0027s probably OK given it\u0027s what happens if you don\u0027t specify trusted certs during server create...but I wanted to ask.\n\nHaving said this, I don\u0027t think we have a unit test for this scenario (unesetting/resetting trusted certs on an instance).","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":3134,"context_line":"        # Use trusted_certs value from kwargs to create TrustedCerts object"},{"line_number":3135,"context_line":"        if \u0027trusted_certs\u0027 in kwargs:"},{"line_number":3136,"context_line":"            trusted_certs \u003d kwargs.pop(\u0027trusted_certs\u0027)"},{"line_number":3137,"context_line":"            instance.trusted_certs \u003d self._retrieve_trusted_certs_object("},{"line_number":3138,"context_line":"                context, trusted_certs, rebuild\u003dTrue)"},{"line_number":3139,"context_line":""},{"line_number":3140,"context_line":"        instance.task_state \u003d task_states.REBUILDING"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_3d656ee1","line":3137,"range":{"start_line":3137,"start_character":42,"end_line":3137,"end_character":72},"in_reply_to":"5f7c97a3_1a7e7818","updated":"2018-06-13 19:39:26.000000000","message":"Done","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"d8b0d176c6143d11cb20f839e877a85206ccfb55","unresolved":false,"context_lines":[{"line_number":3134,"context_line":"        # Use trusted_certs value from kwargs to create TrustedCerts object"},{"line_number":3135,"context_line":"        if \u0027trusted_certs\u0027 in kwargs:"},{"line_number":3136,"context_line":"            trusted_certs \u003d kwargs.pop(\u0027trusted_certs\u0027)"},{"line_number":3137,"context_line":"            instance.trusted_certs \u003d self._retrieve_trusted_certs_object("},{"line_number":3138,"context_line":"                context, trusted_certs, rebuild\u003dTrue)"},{"line_number":3139,"context_line":""},{"line_number":3140,"context_line":"        instance.task_state \u003d task_states.REBUILDING"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_1a7e7818","line":3137,"range":{"start_line":3137,"start_character":42,"end_line":3137,"end_character":72},"in_reply_to":"5f7c97a3_3a1d740e","updated":"2018-06-13 18:27:30.000000000","message":"Agreed.  The intent is that if you set the trusted certs to None or don\u0027t provide them, and the config options are set, then the config options are used.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"76d8e8c325ad64eb35eda4718c58be144dee62b7","unresolved":false,"context_lines":[{"line_number":3134,"context_line":"        # Use trusted_certs value from kwargs to create TrustedCerts object"},{"line_number":3135,"context_line":"        if \u0027trusted_certs\u0027 in kwargs:"},{"line_number":3136,"context_line":"            trusted_certs \u003d kwargs.pop(\u0027trusted_certs\u0027)"},{"line_number":3137,"context_line":"            instance.trusted_certs \u003d self._retrieve_trusted_certs_object("},{"line_number":3138,"context_line":"                context, trusted_certs, rebuild\u003dTrue)"},{"line_number":3139,"context_line":""},{"line_number":3140,"context_line":"        instance.task_state \u003d task_states.REBUILDING"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_da8d607c","line":3137,"range":{"start_line":3137,"start_character":42,"end_line":3137,"end_character":72},"in_reply_to":"5f7c97a3_4b6d0530","updated":"2018-06-13 18:15:29.000000000","message":"That\u0027s a good question. Does the intention of unsetting trusted certs mean null them out ultimately or set them back to defaults if there are defaults? I could see it going either way.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d5c831b982d7b7dda0a5d0dc5e2ae06b9342ecf3","unresolved":false,"context_lines":[{"line_number":3134,"context_line":"        # Use trusted_certs value from kwargs to create TrustedCerts object"},{"line_number":3135,"context_line":"        if \u0027trusted_certs\u0027 in kwargs:"},{"line_number":3136,"context_line":"            trusted_certs \u003d kwargs.pop(\u0027trusted_certs\u0027)"},{"line_number":3137,"context_line":"            instance.trusted_certs \u003d self._retrieve_trusted_certs_object("},{"line_number":3138,"context_line":"                context, trusted_certs, rebuild\u003dTrue)"},{"line_number":3139,"context_line":""},{"line_number":3140,"context_line":"        instance.task_state \u003d task_states.REBUILDING"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_fab61c25","line":3137,"range":{"start_line":3137,"start_character":42,"end_line":3137,"end_character":72},"in_reply_to":"5f7c97a3_da8d607c","updated":"2018-06-13 18:18:57.000000000","message":"In thinking about server create, if you specify None, you\u0027ll get defaults, and if you don\u0027t specify anything, you\u0027ll get the defaults, so this would be consistent with server create.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"869555293334a6a1b9a57a1cbe67439b63e7b6f2","unresolved":false,"context_lines":[{"line_number":3134,"context_line":"        # Use trusted_certs value from kwargs to create TrustedCerts object"},{"line_number":3135,"context_line":"        if \u0027trusted_certs\u0027 in kwargs:"},{"line_number":3136,"context_line":"            trusted_certs \u003d kwargs.pop(\u0027trusted_certs\u0027)"},{"line_number":3137,"context_line":"            instance.trusted_certs \u003d self._retrieve_trusted_certs_object("},{"line_number":3138,"context_line":"                context, trusted_certs, rebuild\u003dTrue)"},{"line_number":3139,"context_line":""},{"line_number":3140,"context_line":"        instance.task_state \u003d task_states.REBUILDING"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_3a1d740e","line":3137,"range":{"start_line":3137,"start_character":42,"end_line":3137,"end_character":72},"in_reply_to":"5f7c97a3_fab61c25","updated":"2018-06-13 18:24:05.000000000","message":"Yeah, good point. That makes sense.","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"}],"nova/tests/functional/api_sample_tests/test_servers.py":[{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"1a1161af7d91bf1e6432f3ce0d130343dded6dff","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    common_req_names \u003d ["},{"line_number":38,"context_line":"        (None, \u00272.36\u0027, \u0027server-create-req\u0027),"},{"line_number":39,"context_line":"        (\u00272.37\u0027, \u00272.56\u0027, \u0027server-create-req-v237\u0027),"},{"line_number":40,"context_line":"        (\u00272.57\u0027, None, \u0027server-create-req-v257\u0027)"},{"line_number":41,"context_line":"    ]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _get_request_name(self, use_common):"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f96bb07_40093c2f","line":40,"updated":"2018-01-19 20:30:59.000000000","message":"Do we need to create a server-create-req-v260 and point to it?","commit_id":"4a1183e2cb58317fe7d6269ad4e32f18c28b99f4"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"80cb78bdde4182ab5c4e8eea194e58e000b04646","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    common_req_names \u003d ["},{"line_number":38,"context_line":"        (None, \u00272.36\u0027, \u0027server-create-req\u0027),"},{"line_number":39,"context_line":"        (\u00272.37\u0027, \u00272.56\u0027, \u0027server-create-req-v237\u0027),"},{"line_number":40,"context_line":"        (\u00272.57\u0027, None, \u0027server-create-req-v257\u0027)"},{"line_number":41,"context_line":"    ]"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def _get_request_name(self, use_common):"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f96bb07_c9e7b446","line":40,"in_reply_to":"7f96bb07_40093c2f","updated":"2018-01-20 02:09:16.000000000","message":"I don\u0027t think so.","commit_id":"4a1183e2cb58317fe7d6269ad4e32f18c28b99f4"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"1a1161af7d91bf1e6432f3ce0d130343dded6dff","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        # Default is True which means _get_sample_path method will fetch the"},{"line_number":57,"context_line":"        # common server sample files from \u0027servers\u0027 directory."},{"line_number":58,"context_line":"        # Set False if tests need to use extension specific sample files"},{"line_number":59,"context_line":"        subs \u003d {"},{"line_number":60,"context_line":"            \u0027image_id\u0027: fake.get_valid_image_id(),"},{"line_number":61,"context_line":"            \u0027host\u0027: self._get_host(),"},{"line_number":62,"context_line":"            \u0027compute_endpoint\u0027: self._get_compute_endpoint(),"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f96bb07_00033411","line":59,"updated":"2018-01-19 20:30:59.000000000","message":"Do we need to add trusted_image_certificates to this?","commit_id":"4a1183e2cb58317fe7d6269ad4e32f18c28b99f4"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"80cb78bdde4182ab5c4e8eea194e58e000b04646","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        # Default is True which means _get_sample_path method will fetch the"},{"line_number":57,"context_line":"        # common server sample files from \u0027servers\u0027 directory."},{"line_number":58,"context_line":"        # Set False if tests need to use extension specific sample files"},{"line_number":59,"context_line":"        subs \u003d {"},{"line_number":60,"context_line":"            \u0027image_id\u0027: fake.get_valid_image_id(),"},{"line_number":61,"context_line":"            \u0027host\u0027: self._get_host(),"},{"line_number":62,"context_line":"            \u0027compute_endpoint\u0027: self._get_compute_endpoint(),"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f96bb07_e9ecf02a","line":59,"in_reply_to":"7f96bb07_00033411","updated":"2018-01-20 02:09:16.000000000","message":"I don\u0027t think so.","commit_id":"4a1183e2cb58317fe7d6269ad4e32f18c28b99f4"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"30d4e0c94911164c765d4cd2778f8b05ccc2e6fd","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def test_server_rebuild(self):"},{"line_number":251,"context_line":"        uuid \u003d self._post_server(use_common_server_api_samples\u003dFalse)"},{"line_number":252,"context_line":"        fakes.stub_out_key_pair_funcs(self)"},{"line_number":253,"context_line":"        image \u003d fake.get_valid_image_id()"},{"line_number":254,"context_line":"        CONF.set_override(\u0027verify_glance_signatures\u0027, True,"},{"line_number":255,"context_line":"                          group\u003d\u0027glance\u0027)"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f96bb07_db61c1d5","line":252,"updated":"2018-01-19 20:34:38.000000000","message":"We\u0027ll need to stub out trusted_certs as well. We can do what stub_out_key_pair_funcs does and use [\u0027trusted-cert-id-1\u0027, \u0027trusted-cert-id-2\u0027] as our default trusted_certs (if they\u0027re not provided)","commit_id":"4a1183e2cb58317fe7d6269ad4e32f18c28b99f4"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"80cb78bdde4182ab5c4e8eea194e58e000b04646","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def test_server_rebuild(self):"},{"line_number":251,"context_line":"        uuid \u003d self._post_server(use_common_server_api_samples\u003dFalse)"},{"line_number":252,"context_line":"        fakes.stub_out_key_pair_funcs(self)"},{"line_number":253,"context_line":"        image \u003d fake.get_valid_image_id()"},{"line_number":254,"context_line":"        CONF.set_override(\u0027verify_glance_signatures\u0027, True,"},{"line_number":255,"context_line":"                          group\u003d\u0027glance\u0027)"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f96bb07_89f1ac04","line":252,"in_reply_to":"7f96bb07_db61c1d5","updated":"2018-01-20 02:09:16.000000000","message":"Done","commit_id":"4a1183e2cb58317fe7d6269ad4e32f18c28b99f4"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5f28f6243c4d1b9d77955ae9a2935de7d4412a9a","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        fakes.stub_out_trusted_certs(self, certs\u003d[\u0027trusted-cert-id-1\u0027,"},{"line_number":284,"context_line":"                                                  \u0027trusted-cert-id-2\u0027])"},{"line_number":285,"context_line":"        uuid \u003d self._post_server(use_common_server_api_samples\u003dFalse)"},{"line_number":286,"context_line":"        response \u003d self._do_get(\u0027servers/detail\u0027)"},{"line_number":287,"context_line":"        subs \u003d {}"},{"line_number":288,"context_line":"        subs[\u0027hostid\u0027] \u003d \u0027[a-f0-9]+\u0027"},{"line_number":289,"context_line":"        subs[\u0027id\u0027] \u003d uuid"}],"source_content_type":"text/x-python","patch_set":73,"id":"bf659307_15008a01","line":286,"updated":"2018-04-13 21:38:08.000000000","message":"Do we also need a test where we:\n\n response \u003d self._do_get(\u0027servers\u0027)\n\nto cover the server list case with \u0027server-get-resp\u0027?","commit_id":"7e64019f332efe53fd9e949cf8fe7252d7ebf83f"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"45a6c66b103417fdd85c22bf27f257bfaec2f8c5","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        fakes.stub_out_trusted_certs(self, certs\u003d[\u0027trusted-cert-id-1\u0027,"},{"line_number":284,"context_line":"                                                  \u0027trusted-cert-id-2\u0027])"},{"line_number":285,"context_line":"        uuid \u003d self._post_server(use_common_server_api_samples\u003dFalse)"},{"line_number":286,"context_line":"        response \u003d self._do_get(\u0027servers/detail\u0027)"},{"line_number":287,"context_line":"        subs \u003d {}"},{"line_number":288,"context_line":"        subs[\u0027hostid\u0027] \u003d \u0027[a-f0-9]+\u0027"},{"line_number":289,"context_line":"        subs[\u0027id\u0027] \u003d uuid"}],"source_content_type":"text/x-python","patch_set":73,"id":"bf659307_a65c167d","line":286,"in_reply_to":"bf659307_15008a01","updated":"2018-04-14 01:25:59.000000000","message":"Yes, I\u0027ll add that","commit_id":"7e64019f332efe53fd9e949cf8fe7252d7ebf83f"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"c6db1fa7a85ce1224945539152bf8dbc20499217","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                         \u0027674736e3-f25c-405c-8362-bbf991e0ce0a\u0027])"},{"line_number":288,"context_line":"        uuid \u003d self._post_server(use_common_server_api_samples\u003dFalse)"},{"line_number":289,"context_line":"        response \u003d self._do_get(\u0027servers/detail\u0027)"},{"line_number":290,"context_line":"        subs \u003d {}"},{"line_number":291,"context_line":"        subs[\u0027hostid\u0027] \u003d \u0027[a-f0-9]+\u0027"},{"line_number":292,"context_line":"        subs[\u0027id\u0027] \u003d uuid"},{"line_number":293,"context_line":"        subs[\u0027instance_name\u0027] \u003d \u0027instance-\\d{8}\u0027"},{"line_number":294,"context_line":"        subs[\u0027hypervisor_hostname\u0027] \u003d r\u0027[\\w\\.\\-]+\u0027"},{"line_number":295,"context_line":"        subs[\u0027hostname\u0027] \u003d r\u0027[\\w\\.\\-]+\u0027"},{"line_number":296,"context_line":"        subs[\u0027mac_addr\u0027] \u003d \u0027(?:[a-f0-9]{2}:){5}[a-f0-9]{2}\u0027"},{"line_number":297,"context_line":"        subs[\u0027access_ip_v4\u0027] \u003d \u00271.2.3.4\u0027"},{"line_number":298,"context_line":"        subs[\u0027access_ip_v6\u0027] \u003d \u002780fe::\u0027"},{"line_number":299,"context_line":"        subs[\u0027user_data\u0027] \u003d (self.user_data if six.PY2"},{"line_number":300,"context_line":"                             else self.user_data.decode(\u0027utf-8\u0027))"},{"line_number":301,"context_line":"        subs[\u0027trusted_image_certificates\u0027] \u003d ("},{"line_number":302,"context_line":"            \"[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8, \""},{"line_number":303,"context_line":"            \"674736e3-f25c-405c-8362-bbf991e0ce0a\u0027]\")"},{"line_number":304,"context_line":"        # config drive can be a string for True or empty value for False"},{"line_number":305,"context_line":"        subs[\u0027cdrive\u0027] \u003d \u0027.*\u0027"},{"line_number":306,"context_line":"        self._verify_response(\u0027servers-details-resp\u0027, subs, response, 200)"}],"source_content_type":"text/x-python","patch_set":100,"id":"5f7c97a3_2af6acd8","line":303,"range":{"start_line":290,"start_character":0,"end_line":303,"end_character":53},"updated":"2018-05-30 10:21:43.000000000","message":"maybe we can make this a common field for the class, to avoid all the copy and paste.","commit_id":"cd04b79ee219e130134e877aa1aeb9f9cc89d461"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"b9cabf94d81b1eb614aa56967274cac03397434f","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                         \u0027674736e3-f25c-405c-8362-bbf991e0ce0a\u0027])"},{"line_number":288,"context_line":"        uuid \u003d self._post_server(use_common_server_api_samples\u003dFalse)"},{"line_number":289,"context_line":"        response \u003d self._do_get(\u0027servers/detail\u0027)"},{"line_number":290,"context_line":"        subs \u003d {}"},{"line_number":291,"context_line":"        subs[\u0027hostid\u0027] \u003d \u0027[a-f0-9]+\u0027"},{"line_number":292,"context_line":"        subs[\u0027id\u0027] \u003d uuid"},{"line_number":293,"context_line":"        subs[\u0027instance_name\u0027] \u003d \u0027instance-\\d{8}\u0027"},{"line_number":294,"context_line":"        subs[\u0027hypervisor_hostname\u0027] \u003d r\u0027[\\w\\.\\-]+\u0027"},{"line_number":295,"context_line":"        subs[\u0027hostname\u0027] \u003d r\u0027[\\w\\.\\-]+\u0027"},{"line_number":296,"context_line":"        subs[\u0027mac_addr\u0027] \u003d \u0027(?:[a-f0-9]{2}:){5}[a-f0-9]{2}\u0027"},{"line_number":297,"context_line":"        subs[\u0027access_ip_v4\u0027] \u003d \u00271.2.3.4\u0027"},{"line_number":298,"context_line":"        subs[\u0027access_ip_v6\u0027] \u003d \u002780fe::\u0027"},{"line_number":299,"context_line":"        subs[\u0027user_data\u0027] \u003d (self.user_data if six.PY2"},{"line_number":300,"context_line":"                             else self.user_data.decode(\u0027utf-8\u0027))"},{"line_number":301,"context_line":"        subs[\u0027trusted_image_certificates\u0027] \u003d ("},{"line_number":302,"context_line":"            \"[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8, \""},{"line_number":303,"context_line":"            \"674736e3-f25c-405c-8362-bbf991e0ce0a\u0027]\")"},{"line_number":304,"context_line":"        # config drive can be a string for True or empty value for False"},{"line_number":305,"context_line":"        subs[\u0027cdrive\u0027] \u003d \u0027.*\u0027"},{"line_number":306,"context_line":"        self._verify_response(\u0027servers-details-resp\u0027, subs, response, 200)"}],"source_content_type":"text/x-python","patch_set":100,"id":"5f7c97a3_1c869967","line":303,"range":{"start_line":290,"start_character":0,"end_line":303,"end_character":53},"in_reply_to":"5f7c97a3_2af6acd8","updated":"2018-05-30 17:33:29.000000000","message":"Done","commit_id":"cd04b79ee219e130134e877aa1aeb9f9cc89d461"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    def setUp(self):"},{"line_number":248,"context_line":"        super(ServersSampleJson263Test, self).setUp()"},{"line_number":249,"context_line":"        self.common_subs \u003d {"},{"line_number":250,"context_line":"            \u0027hostid\u0027: \u0027[a-f0-9]+\u0027,"},{"line_number":251,"context_line":"            \u0027instance_name\u0027: \u0027instance-\\d{8}\u0027,"},{"line_number":252,"context_line":"            \u0027hypervisor_hostname\u0027: r\u0027[\\w\\.\\-]+\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_28674654","line":249,"updated":"2018-06-04 13:59:33.000000000","message":"This looks wrong. These are regexes for common fields. If you want to substitute trusted_image_certificates for the response validation, you do that per call with the \"subs\" parameter. However, since the request and response samples are using the same hard-coded parameter values, I don\u0027t see why you\u0027d even need to pass subs - those are really only needed for variables generated at runtime of the test, not static stuff hard-coded into the samples and tpl files.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    def setUp(self):"},{"line_number":248,"context_line":"        super(ServersSampleJson263Test, self).setUp()"},{"line_number":249,"context_line":"        self.common_subs \u003d {"},{"line_number":250,"context_line":"            \u0027hostid\u0027: \u0027[a-f0-9]+\u0027,"},{"line_number":251,"context_line":"            \u0027instance_name\u0027: \u0027instance-\\d{8}\u0027,"},{"line_number":252,"context_line":"            \u0027hypervisor_hostname\u0027: r\u0027[\\w\\.\\-]+\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_b72ce04a","line":249,"in_reply_to":"5f7c97a3_28674654","updated":"2018-06-06 20:32:03.000000000","message":"The responses expect some substitutions in order to populate the template.  Otherwise, I get the following errors:\n\n    Traceback (most recent call last):\n      File \"nova/tests/functional/api_sample_tests/test_servers.py\", line 293, in test_servers_details\n        self._verify_response(\u0027servers-details-resp\u0027, subs, response, 200)\n      File \"nova/tests/functional/api_samples_test_base.py\", line 372, in _verify_response\n        response_data, \"Response\")\n      File \"nova/tests/functional/api_samples_test_base.py\", line 181, in _compare_result\n        result_str)\n      File \"nova/tests/functional/api_samples_test_base.py\", line 196, in _compare_result\n        return self._compare_result(expected[0], result[0], result_str)\n      File \"nova/tests/functional/api_samples_test_base.py\", line 181, in _compare_result\n        result_str)\n      File \"nova/tests/functional/api_samples_test_base.py\", line 247, in _compare_result\n        expected \u003d expected % self.subs\n    KeyError: u\u0027cdrive\u0027\n\n\nI have updated this list to only need the ones the response templates expect.\n\nYou are correct that trusted_image_certificates isn\u0027t required because it is hardcoded. I have removed it from this list.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        CONF.set_override(\u0027enable_certificate_validation\u0027, True,"},{"line_number":278,"context_line":"                          group\u003d\u0027glance\u0027)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        params \u003d {"},{"line_number":281,"context_line":"            \u0027uuid\u0027: image,"},{"line_number":282,"context_line":"            \u0027name\u0027: \u0027foobar\u0027,"},{"line_number":283,"context_line":"            \u0027key_name\u0027: \u0027new-key\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_68ec5e8f","line":280,"updated":"2018-06-04 13:59:33.000000000","message":"You shouldn\u0027t need this at all since everything is hard-coded into the samples and template files.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":277,"context_line":"        CONF.set_override(\u0027enable_certificate_validation\u0027, True,"},{"line_number":278,"context_line":"                          group\u003d\u0027glance\u0027)"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        params \u003d {"},{"line_number":281,"context_line":"            \u0027uuid\u0027: image,"},{"line_number":282,"context_line":"            \u0027name\u0027: \u0027foobar\u0027,"},{"line_number":283,"context_line":"            \u0027key_name\u0027: \u0027new-key\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_4c35bfda","line":280,"in_reply_to":"5f7c97a3_68ec5e8f","updated":"2018-06-06 20:32:03.000000000","message":"It looks like the sample file at https://review.openstack.org/#/c/486204/101/nova/tests/functional/api_sample_tests/api_samples/servers/v2.63/server-action-rebuild.json.tpl expects to have these values in order to substitute.  For the simple post test, the self._post_server method takes care of providing these values (with \"subs\" on line 59), but since this is a rebuild, I think these need to be defined.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            \u0027name\u0027: \u0027foobar\u0027,"},{"line_number":283,"context_line":"            \u0027key_name\u0027: \u0027new-key\u0027,"},{"line_number":284,"context_line":"            \u0027description\u0027: \u0027description of foobar\u0027,"},{"line_number":285,"context_line":"            \u0027pass\u0027: \u0027seekr3t\u0027,"},{"line_number":286,"context_line":"            \u0027hostid\u0027: \u0027[a-f0-9]+\u0027,"},{"line_number":287,"context_line":"            \u0027access_ip_v4\u0027: \u00271.2.3.4\u0027,"},{"line_number":288,"context_line":"            \u0027access_ip_v6\u0027: \u002780fe::\u0027,"},{"line_number":289,"context_line":"            \u0027trusted_image_certificates\u0027: ("},{"line_number":290,"context_line":"                \"[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8,\""},{"line_number":291,"context_line":"                \"674736e3-f25c-405c-8362-bbf991e0ce0a\u0027]\"),"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_a8f2766e","line":288,"range":{"start_line":285,"start_character":12,"end_line":288,"end_character":37},"updated":"2018-06-04 13:59:33.000000000","message":"This looks wrong...you shouldn\u0027t need to do this.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            \u0027name\u0027: \u0027foobar\u0027,"},{"line_number":283,"context_line":"            \u0027key_name\u0027: \u0027new-key\u0027,"},{"line_number":284,"context_line":"            \u0027description\u0027: \u0027description of foobar\u0027,"},{"line_number":285,"context_line":"            \u0027pass\u0027: \u0027seekr3t\u0027,"},{"line_number":286,"context_line":"            \u0027hostid\u0027: \u0027[a-f0-9]+\u0027,"},{"line_number":287,"context_line":"            \u0027access_ip_v4\u0027: \u00271.2.3.4\u0027,"},{"line_number":288,"context_line":"            \u0027access_ip_v6\u0027: \u002780fe::\u0027,"},{"line_number":289,"context_line":"            \u0027trusted_image_certificates\u0027: ("},{"line_number":290,"context_line":"                \"[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8,\""},{"line_number":291,"context_line":"                \"674736e3-f25c-405c-8362-bbf991e0ce0a\u0027]\"),"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_9115344c","line":288,"range":{"start_line":285,"start_character":12,"end_line":288,"end_character":37},"in_reply_to":"5f7c97a3_a8f2766e","updated":"2018-06-06 20:32:03.000000000","message":"If I don\u0027t provide these values, I get the following error:\n\n    Traceback (most recent call last):\n      File \"nova/tests/functional/api_sample_tests/test_servers.py\", line 283, in test_server_rebuild\n        \u0027server-action-rebuild\u0027, params)\n      File \"nova/tests/functional/api_samples_test_base.py\", line 500, in _do_post\n        body \u003d self._read_template(name) % self.subs\n    KeyError: \u0027access_ip_v4\u0027","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            \u0027access_ip_v4\u0027: \u00271.2.3.4\u0027,"},{"line_number":288,"context_line":"            \u0027access_ip_v6\u0027: \u002780fe::\u0027,"},{"line_number":289,"context_line":"            \u0027trusted_image_certificates\u0027: ("},{"line_number":290,"context_line":"                \"[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8,\""},{"line_number":291,"context_line":"                \"674736e3-f25c-405c-8362-bbf991e0ce0a\u0027]\"),"},{"line_number":292,"context_line":"        }"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        resp \u003d self._do_post(\u0027servers/%s/action\u0027 % uuid,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_48ce422e","line":291,"range":{"start_line":290,"start_character":16,"end_line":291,"end_character":56},"updated":"2018-06-04 13:59:33.000000000","message":"Why is this a serialized json string rather than just a list? I expect that might be part of why you\u0027re having issues with the substitute validation above.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":287,"context_line":"            \u0027access_ip_v4\u0027: \u00271.2.3.4\u0027,"},{"line_number":288,"context_line":"            \u0027access_ip_v6\u0027: \u002780fe::\u0027,"},{"line_number":289,"context_line":"            \u0027trusted_image_certificates\u0027: ("},{"line_number":290,"context_line":"                \"[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8,\""},{"line_number":291,"context_line":"                \"674736e3-f25c-405c-8362-bbf991e0ce0a\u0027]\"),"},{"line_number":292,"context_line":"        }"},{"line_number":293,"context_line":""},{"line_number":294,"context_line":"        resp \u003d self._do_post(\u0027servers/%s/action\u0027 % uuid,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_2c964396","line":291,"range":{"start_line":290,"start_character":16,"end_line":291,"end_character":56},"in_reply_to":"5f7c97a3_48ce422e","updated":"2018-06-06 20:32:03.000000000","message":"I realize this wasn\u0027t needed because the trusted_image_certificates are hard-coded in https://review.openstack.org/#/c/486204/101/nova/tests/functional/api_sample_tests/api_samples/servers/v2.63/server-action-rebuild-resp.json.tpl and https://review.openstack.org/#/c/486204/101/nova/tests/functional/api_sample_tests/api_samples/servers/v2.63/server-action-rebuild.json.tpl","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        self._verify_response(\u0027server-action-rebuild-resp\u0027, subs, resp, 202)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def test_servers_details(self):"},{"line_number":301,"context_line":"        self.stub_out(\u0027nova.db.block_device_mapping_get_all_by_instance_uuids\u0027,"},{"line_number":302,"context_line":"                      fakes.stub_bdm_get_all_by_instance_uuids)"},{"line_number":303,"context_line":"        fakes.stub_out_trusted_certs("},{"line_number":304,"context_line":"            self, certs\u003d[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"},{"line_number":305,"context_line":"                         \u0027674736e3-f25c-405c-8362-bbf991e0ce0a\u0027])"},{"line_number":306,"context_line":"        uuid \u003d self._post_server(use_common_server_api_samples\u003dFalse)"},{"line_number":307,"context_line":"        response \u003d self._do_get(\u0027servers/detail\u0027)"},{"line_number":308,"context_line":"        subs \u003d self.common_subs.copy()"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_88921afc","line":305,"range":{"start_line":301,"start_character":8,"end_line":305,"end_character":65},"updated":"2018-06-04 13:59:33.000000000","message":"You shouldn\u0027t need to stub this stuff out.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        self._verify_response(\u0027server-action-rebuild-resp\u0027, subs, resp, 202)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def test_servers_details(self):"},{"line_number":301,"context_line":"        self.stub_out(\u0027nova.db.block_device_mapping_get_all_by_instance_uuids\u0027,"},{"line_number":302,"context_line":"                      fakes.stub_bdm_get_all_by_instance_uuids)"},{"line_number":303,"context_line":"        fakes.stub_out_trusted_certs("},{"line_number":304,"context_line":"            self, certs\u003d[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"},{"line_number":305,"context_line":"                         \u0027674736e3-f25c-405c-8362-bbf991e0ce0a\u0027])"},{"line_number":306,"context_line":"        uuid \u003d self._post_server(use_common_server_api_samples\u003dFalse)"},{"line_number":307,"context_line":"        response \u003d self._do_get(\u0027servers/detail\u0027)"},{"line_number":308,"context_line":"        subs \u003d self.common_subs.copy()"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_ec904bf0","line":305,"range":{"start_line":301,"start_character":8,"end_line":305,"end_character":65},"in_reply_to":"5f7c97a3_88921afc","updated":"2018-06-06 20:32:03.000000000","message":"I updated the templates to make os-extended-volumes:volumes_attached empty, and was able to remove these.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        self._verify_response(\u0027servers-details-resp\u0027, subs, response, 200)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def test_server_get(self):"},{"line_number":313,"context_line":"        self.stub_out(\u0027nova.db.block_device_mapping_get_all_by_instance_uuids\u0027,"},{"line_number":314,"context_line":"                      fakes.stub_bdm_get_all_by_instance_uuids)"},{"line_number":315,"context_line":"        fakes.stub_out_trusted_certs("},{"line_number":316,"context_line":"            self, certs\u003d[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_a897d6eb","line":313,"updated":"2018-06-04 13:59:33.000000000","message":"same","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        self._verify_response(\u0027servers-details-resp\u0027, subs, response, 200)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def test_server_get(self):"},{"line_number":313,"context_line":"        self.stub_out(\u0027nova.db.block_device_mapping_get_all_by_instance_uuids\u0027,"},{"line_number":314,"context_line":"                      fakes.stub_bdm_get_all_by_instance_uuids)"},{"line_number":315,"context_line":"        fakes.stub_out_trusted_certs("},{"line_number":316,"context_line":"            self, certs\u003d[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_9771a4ab","line":313,"in_reply_to":"5f7c97a3_a897d6eb","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        self._verify_response(\u0027server-get-resp\u0027, subs, response, 200)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def test_server_update(self):"},{"line_number":325,"context_line":"        self.stub_out(\u0027nova.db.block_device_mapping_get_all_by_instance_uuids\u0027,"},{"line_number":326,"context_line":"                      fakes.stub_bdm_get_all_by_instance_uuids)"},{"line_number":327,"context_line":"        fakes.stub_out_trusted_certs("},{"line_number":328,"context_line":"            self, certs\u003d[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_489c020e","line":325,"updated":"2018-06-04 13:59:33.000000000","message":"same","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        self._verify_response(\u0027server-get-resp\u0027, subs, response, 200)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def test_server_update(self):"},{"line_number":325,"context_line":"        self.stub_out(\u0027nova.db.block_device_mapping_get_all_by_instance_uuids\u0027,"},{"line_number":326,"context_line":"                      fakes.stub_bdm_get_all_by_instance_uuids)"},{"line_number":327,"context_line":"        fakes.stub_out_trusted_certs("},{"line_number":328,"context_line":"            self, certs\u003d[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_3768d0b8","line":325,"in_reply_to":"5f7c97a3_489c020e","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    def setUp(self):"},{"line_number":248,"context_line":"        super(ServersSampleJson263Test, self).setUp()"},{"line_number":249,"context_line":"        self.common_subs \u003d {"},{"line_number":250,"context_line":"            \u0027hostid\u0027: \u0027[a-f0-9]+\u0027,"},{"line_number":251,"context_line":"            \u0027instance_name\u0027: \u0027instance-\\d{8}\u0027,"},{"line_number":252,"context_line":"            \u0027hypervisor_hostname\u0027: r\u0027[\\w\\.\\-]+\u0027,"},{"line_number":253,"context_line":"            \u0027hostname\u0027: r\u0027[\\w\\.\\-]+\u0027,"},{"line_number":254,"context_line":"            \u0027access_ip_v4\u0027: \u00271.2.3.4\u0027,"},{"line_number":255,"context_line":"            \u0027access_ip_v6\u0027: \u002780fe::\u0027,"},{"line_number":256,"context_line":"            \u0027user_data\u0027: (self.user_data if six.PY2"},{"line_number":257,"context_line":"                          else self.user_data.decode(\u0027utf-8\u0027)),"},{"line_number":258,"context_line":"            \u0027cdrive\u0027: \u0027.*\u0027,"},{"line_number":259,"context_line":"        }"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"    def test_servers_post(self):"},{"line_number":262,"context_line":"        self._post_server(use_common_server_api_samples\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_4b04254a","line":259,"range":{"start_line":249,"start_character":8,"end_line":259,"end_character":9},"updated":"2018-06-13 17:32:43.000000000","message":"I\u0027m not entirely sure why this is needed. If you extended ServersSampleJsonTest then you might not need this, and then just overwrite the test methods from that class. Maybe I\u0027ll tinker with this locally (or in a follow up).","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"}],"nova/tests/unit/api/openstack/compute/test_serversV21.py":[{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"105bed3e69bce6d83286eecb64101f3e7de8fed5","unresolved":false,"context_lines":[{"line_number":2225,"context_line":"            \u0027trusted-cert-uuid-2\u0027])"},{"line_number":2226,"context_line":""},{"line_number":2227,"context_line":"    @mock.patch(\u0027nova.db.instance_tag_get_by_instance_uuid\u0027)"},{"line_number":2228,"context_line":"    def test_rebuild_server_empty_list(self, mock_db_get_inst_tags):"},{"line_number":2229,"context_line":"        self._rebuild_server(True, [\u0027\u0027])"},{"line_number":2230,"context_line":""},{"line_number":2231,"context_line":"    @mock.patch(\u0027nova.db.instance_tag_get_by_instance_uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_c91d4a74","line":2228,"updated":"2017-09-25 18:21:27.000000000","message":"NIT: This name is a bit vague. Perhaps \"test_rebuild_server_with_empty_trusted_certs\"?","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"e28c197ecf7c0f213abbcfe394fd50f5147b60ec","unresolved":false,"context_lines":[{"line_number":2225,"context_line":"            \u0027trusted-cert-uuid-2\u0027])"},{"line_number":2226,"context_line":""},{"line_number":2227,"context_line":"    @mock.patch(\u0027nova.db.instance_tag_get_by_instance_uuid\u0027)"},{"line_number":2228,"context_line":"    def test_rebuild_server_empty_list(self, mock_db_get_inst_tags):"},{"line_number":2229,"context_line":"        self._rebuild_server(True, [\u0027\u0027])"},{"line_number":2230,"context_line":""},{"line_number":2231,"context_line":"    @mock.patch(\u0027nova.db.instance_tag_get_by_instance_uuid\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_bfbfddf9","line":2228,"in_reply_to":"7f515b1d_c91d4a74","updated":"2017-09-25 20:42:17.000000000","message":"Done","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"105bed3e69bce6d83286eecb64101f3e7de8fed5","unresolved":false,"context_lines":[{"line_number":2233,"context_line":"        self._rebuild_server(False, None)"},{"line_number":2234,"context_line":""},{"line_number":2235,"context_line":"    @mock.patch(\u0027nova.db.instance_tag_get_by_instance_uuid\u0027)"},{"line_number":2236,"context_line":"    def test_rebuild_server_trusted_certs_invalid(self, mock_db_get_inst_tags):"},{"line_number":2237,"context_line":"        # Invalid non-printable control char in the desc."},{"line_number":2238,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_certificates\u0027] \u003d \"not-an-array\""},{"line_number":2239,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_e4ff0bff","line":2236,"updated":"2017-09-25 18:21:27.000000000","message":"NIT: For naming consistency: \"test_rebuild_server_with_invalid_trusted_certs\"","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"e28c197ecf7c0f213abbcfe394fd50f5147b60ec","unresolved":false,"context_lines":[{"line_number":2233,"context_line":"        self._rebuild_server(False, None)"},{"line_number":2234,"context_line":""},{"line_number":2235,"context_line":"    @mock.patch(\u0027nova.db.instance_tag_get_by_instance_uuid\u0027)"},{"line_number":2236,"context_line":"    def test_rebuild_server_trusted_certs_invalid(self, mock_db_get_inst_tags):"},{"line_number":2237,"context_line":"        # Invalid non-printable control char in the desc."},{"line_number":2238,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_certificates\u0027] \u003d \"not-an-array\""},{"line_number":2239,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_3f41ad0c","line":2236,"in_reply_to":"7f515b1d_e4ff0bff","updated":"2017-09-25 20:42:17.000000000","message":"Done","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"105bed3e69bce6d83286eecb64101f3e7de8fed5","unresolved":false,"context_lines":[{"line_number":4008,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":4009,"context_line":"            api_version_request.APIVersionRequest(\u00272.54\u0027)"},{"line_number":4010,"context_line":""},{"line_number":4011,"context_line":"    def test_create_instance_with_description(self):"},{"line_number":4012,"context_line":"        self._create_instance_req(True, [\u0027trusted-cert-uuid-1\u0027,"},{"line_number":4013,"context_line":"            \u0027trusted-cert-uuid-2\u0027])"},{"line_number":4014,"context_line":"        # The fact that the action doesn\u0027t raise is enough validation"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_243643e8","line":4011,"updated":"2017-09-25 18:21:27.000000000","message":"Should this be \"test_create_instance_with_trusted_certs\"?","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"e28c197ecf7c0f213abbcfe394fd50f5147b60ec","unresolved":false,"context_lines":[{"line_number":4008,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":4009,"context_line":"            api_version_request.APIVersionRequest(\u00272.54\u0027)"},{"line_number":4010,"context_line":""},{"line_number":4011,"context_line":"    def test_create_instance_with_description(self):"},{"line_number":4012,"context_line":"        self._create_instance_req(True, [\u0027trusted-cert-uuid-1\u0027,"},{"line_number":4013,"context_line":"            \u0027trusted-cert-uuid-2\u0027])"},{"line_number":4014,"context_line":"        # The fact that the action doesn\u0027t raise is enough validation"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_ff4af524","line":4011,"in_reply_to":"7f515b1d_243643e8","updated":"2017-09-25 20:42:17.000000000","message":"Yep! Good catch. Done.","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"105bed3e69bce6d83286eecb64101f3e7de8fed5","unresolved":false,"context_lines":[{"line_number":4014,"context_line":"        # The fact that the action doesn\u0027t raise is enough validation"},{"line_number":4015,"context_line":"        self.controller.create(self.req, body\u003dself.body).obj"},{"line_number":4016,"context_line":""},{"line_number":4017,"context_line":"    def test_create_instance_with_empty_list(self):"},{"line_number":4018,"context_line":"        self._create_instance_req(True, [\u0027\u0027])"},{"line_number":4019,"context_line":"        # The fact that the action doesn\u0027t raise is enough validation"},{"line_number":4020,"context_line":"        self.controller.create(self.req, body\u003dself.body).obj"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_e44dcb72","line":4017,"updated":"2017-09-25 18:21:27.000000000","message":"NIT: This name is a bit vague. Perhaps \"test_rebuild_server_with_empty_trusted_certs\"?","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"e28c197ecf7c0f213abbcfe394fd50f5147b60ec","unresolved":false,"context_lines":[{"line_number":4014,"context_line":"        # The fact that the action doesn\u0027t raise is enough validation"},{"line_number":4015,"context_line":"        self.controller.create(self.req, body\u003dself.body).obj"},{"line_number":4016,"context_line":""},{"line_number":4017,"context_line":"    def test_create_instance_with_empty_list(self):"},{"line_number":4018,"context_line":"        self._create_instance_req(True, [\u0027\u0027])"},{"line_number":4019,"context_line":"        # The fact that the action doesn\u0027t raise is enough validation"},{"line_number":4020,"context_line":"        self.controller.create(self.req, body\u003dself.body).obj"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_ff73157f","line":4017,"in_reply_to":"7f515b1d_e44dcb72","updated":"2017-09-25 20:42:17.000000000","message":"I\u0027ve changed it to test_create_instance_with_empty_trusted_certs","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"105bed3e69bce6d83286eecb64101f3e7de8fed5","unresolved":false,"context_lines":[{"line_number":4033,"context_line":"            exception.ValidationError, self.controller.create, self.req,"},{"line_number":4034,"context_line":"            body\u003dself.body)"},{"line_number":4035,"context_line":""},{"line_number":4036,"context_line":"    def test_create_instance_trusted_certs_invalid(self):"},{"line_number":4037,"context_line":"        self._create_instance_req(True, \"not-a-trusted-certs-list\")"},{"line_number":4038,"context_line":"        self.assertRaises(exception.ValidationError, self.controller.create,"},{"line_number":4039,"context_line":"                          self.req, body\u003dself.body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_244be359","line":4036,"updated":"2017-09-25 18:21:27.000000000","message":"NIT: For naming consistency: \"test_rebuild_server_with_invalid_trusted_certs\"","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"e28c197ecf7c0f213abbcfe394fd50f5147b60ec","unresolved":false,"context_lines":[{"line_number":4033,"context_line":"            exception.ValidationError, self.controller.create, self.req,"},{"line_number":4034,"context_line":"            body\u003dself.body)"},{"line_number":4035,"context_line":""},{"line_number":4036,"context_line":"    def test_create_instance_trusted_certs_invalid(self):"},{"line_number":4037,"context_line":"        self._create_instance_req(True, \"not-a-trusted-certs-list\")"},{"line_number":4038,"context_line":"        self.assertRaises(exception.ValidationError, self.controller.create,"},{"line_number":4039,"context_line":"                          self.req, body\u003dself.body)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f515b1d_1f12710a","line":4036,"in_reply_to":"7f515b1d_244be359","updated":"2017-09-25 20:42:17.000000000","message":"I\u0027ve changed it to test_create_instance_with_invalid_trusted_certs","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2638da9895d236a89e5c92e1014b42146c1506cf","unresolved":false,"context_lines":[{"line_number":3860,"context_line":""},{"line_number":3861,"context_line":"    def test_create_instance_without_personality_should_get_empty_list(self):"},{"line_number":3862,"context_line":"        old_create \u003d compute_api.API.create"},{"line_number":3863,"context_line":"        del self.body[\u0027server\u0027][\u0027personality\u0027]"},{"line_number":3864,"context_line":""},{"line_number":3865,"context_line":"        def create(*args, **kwargs):"},{"line_number":3866,"context_line":"            self.assertEqual([], kwargs[\u0027injected_files\u0027])"}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_e6b316e8","side":"PARENT","line":3863,"updated":"2018-01-17 15:53:49.000000000","message":"unrelated to this patch...","commit_id":"3875eaae73eaf77186d6d3d0718e61310049336b"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2638da9895d236a89e5c92e1014b42146c1506cf","unresolved":false,"context_lines":[{"line_number":2055,"context_line":"                              self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2056,"context_line":""},{"line_number":2057,"context_line":"    def test_rebuild_bad_personality(self):"},{"line_number":2058,"context_line":"        # Personality files have been deprecated as of v2.57"},{"line_number":2059,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":2060,"context_line":"            api_version_request.APIVersionRequest(\u00272.56\u0027)"},{"line_number":2061,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_862a52d8","line":2058,"updated":"2018-01-17 15:53:49.000000000","message":"this seems like an unrelated (to this patch) change... if it\u0027s necessary for your trusted certs functionality, please add these changes to a dependent patch to isolate the personality-deprecation changes outside of this patch.","commit_id":"cbb0f46e9e5669d4a8e21d41b6eb8723a872cc36"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"504adffa61efb603b1001da6756c64b758b57235","unresolved":false,"context_lines":[{"line_number":2055,"context_line":"                              self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2056,"context_line":""},{"line_number":2057,"context_line":"    def test_rebuild_bad_personality(self):"},{"line_number":2058,"context_line":"        # Personality files have been deprecated as of v2.57"},{"line_number":2059,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":2060,"context_line":"            api_version_request.APIVersionRequest(\u00272.56\u0027)"},{"line_number":2061,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_1ad69529","line":2058,"in_reply_to":"7f96bb07_862a52d8","updated":"2018-01-17 18:02:09.000000000","message":"Moved to separate patch:\nhttps://review.openstack.org/534849","commit_id":"cbb0f46e9e5669d4a8e21d41b6eb8723a872cc36"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2638da9895d236a89e5c92e1014b42146c1506cf","unresolved":false,"context_lines":[{"line_number":2459,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":2460,"context_line":"            api_version_request.APIVersionRequest(\u00272.60\u0027)"},{"line_number":2461,"context_line":""},{"line_number":2462,"context_line":"    def _rebuild_server(self, set_trusted_certs, certs, conf_enabled\u003dTrue,"},{"line_number":2463,"context_line":"                        conf_default\u003dNone):"},{"line_number":2464,"context_line":"        fake_get \u003d fakes.fake_compute_get(vm_state\u003dvm_states.ACTIVE,"},{"line_number":2465,"context_line":"                                          project_id\u003dself.req_project_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_66714644","line":2462,"range":{"start_line":2462,"start_character":30,"end_line":2462,"end_character":55},"updated":"2018-01-17 15:53:49.000000000","message":"just a hint.. you can consolidate this to just the \"certs\" parameter. There\u0027s no need for a separate set_trusted_certs parameter, since you can just check:\n\n if certs:\n\ninstead of a separate set_trusted_certs param.","commit_id":"cbb0f46e9e5669d4a8e21d41b6eb8723a872cc36"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"504adffa61efb603b1001da6756c64b758b57235","unresolved":false,"context_lines":[{"line_number":2459,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":2460,"context_line":"            api_version_request.APIVersionRequest(\u00272.60\u0027)"},{"line_number":2461,"context_line":""},{"line_number":2462,"context_line":"    def _rebuild_server(self, set_trusted_certs, certs, conf_enabled\u003dTrue,"},{"line_number":2463,"context_line":"                        conf_default\u003dNone):"},{"line_number":2464,"context_line":"        fake_get \u003d fakes.fake_compute_get(vm_state\u003dvm_states.ACTIVE,"},{"line_number":2465,"context_line":"                                          project_id\u003dself.req_project_id,"}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_aff7218b","line":2462,"range":{"start_line":2462,"start_character":30,"end_line":2462,"end_character":55},"in_reply_to":"7f96bb07_66714644","updated":"2018-01-17 18:02:09.000000000","message":"Done","commit_id":"cbb0f46e9e5669d4a8e21d41b6eb8723a872cc36"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"7490d06dedc114bf6ef98f45e0e988bb5ec1d5ba","unresolved":false,"context_lines":[{"line_number":2485,"context_line":""},{"line_number":2486,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2487,"context_line":""},{"line_number":2488,"context_line":"        server \u003d self.controller._action_rebuild(self.req, FAKE_UUID,"},{"line_number":2489,"context_line":"                                             body\u003dself.body).obj[\u0027server\u0027]"},{"line_number":2490,"context_line":"        self.assertEqual(server[\u0027id\u0027], FAKE_UUID)"},{"line_number":2491,"context_line":""},{"line_number":2492,"context_line":"        if set_trusted_certs:"}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_318dfad2","line":2489,"range":{"start_line":2488,"start_character":0,"end_line":2489,"end_character":74},"updated":"2018-01-16 04:03:04.000000000","message":"I believe we will need to mock the TrustedCerts object DB accesses before we can call this. Just not quite sure how to do that...","commit_id":"cbb0f46e9e5669d4a8e21d41b6eb8723a872cc36"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"ecd2e1750cd0ed7d31c9da6d674e79aff3feac31","unresolved":false,"context_lines":[{"line_number":2485,"context_line":""},{"line_number":2486,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2487,"context_line":""},{"line_number":2488,"context_line":"        server \u003d self.controller._action_rebuild(self.req, FAKE_UUID,"},{"line_number":2489,"context_line":"                                             body\u003dself.body).obj[\u0027server\u0027]"},{"line_number":2490,"context_line":"        self.assertEqual(server[\u0027id\u0027], FAKE_UUID)"},{"line_number":2491,"context_line":""},{"line_number":2492,"context_line":"        if set_trusted_certs:"}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_f906821c","line":2489,"range":{"start_line":2488,"start_character":0,"end_line":2489,"end_character":74},"in_reply_to":"7f96bb07_318dfad2","updated":"2018-01-16 16:18:06.000000000","message":"yup! it\u0027s a lot simpler than you think :)\n\nyou should be able to just do this:\n\n @mock.patch(\u0027nova.objects.TrustedCerts.get_by_instance_uuid\u0027)\n def _rebuild_server(self, mock_tc_get, set_trusted_certs, certs, conf_enabled\u003dTrue,\n                     conf_default\u003dNone):\n     mock_tc_get.return_value \u003d objects.TrustedCerts(ids\u003dcerts)\n     ...","commit_id":"cbb0f46e9e5669d4a8e21d41b6eb8723a872cc36"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2638da9895d236a89e5c92e1014b42146c1506cf","unresolved":false,"context_lines":[{"line_number":2995,"context_line":"                    \u0027hello\u0027: \u0027world\u0027,"},{"line_number":2996,"context_line":"                    \u0027open\u0027: \u0027stack\u0027,"},{"line_number":2997,"context_line":"                },"},{"line_number":2998,"context_line":"                \u0027networks\u0027: [{"},{"line_number":2999,"context_line":"                    \u0027uuid\u0027: \u0027ff608d40-75e9-48cb-b745-77bb55b5eaf2\u0027"},{"line_number":3000,"context_line":"                }],"},{"line_number":3001,"context_line":"            },"},{"line_number":3002,"context_line":"        }"},{"line_number":3003,"context_line":"        self.bdm \u003d [{\u0027delete_on_termination\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_26bedeb3","line":3000,"range":{"start_line":2998,"start_character":1,"end_line":3000,"end_character":19},"updated":"2018-01-17 15:53:49.000000000","message":"this seems unrelated to this particular patch?","commit_id":"cbb0f46e9e5669d4a8e21d41b6eb8723a872cc36"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"504adffa61efb603b1001da6756c64b758b57235","unresolved":false,"context_lines":[{"line_number":2995,"context_line":"                    \u0027hello\u0027: \u0027world\u0027,"},{"line_number":2996,"context_line":"                    \u0027open\u0027: \u0027stack\u0027,"},{"line_number":2997,"context_line":"                },"},{"line_number":2998,"context_line":"                \u0027networks\u0027: [{"},{"line_number":2999,"context_line":"                    \u0027uuid\u0027: \u0027ff608d40-75e9-48cb-b745-77bb55b5eaf2\u0027"},{"line_number":3000,"context_line":"                }],"},{"line_number":3001,"context_line":"            },"},{"line_number":3002,"context_line":"        }"},{"line_number":3003,"context_line":"        self.bdm \u003d [{\u0027delete_on_termination\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_fa296936","line":3000,"range":{"start_line":2998,"start_character":1,"end_line":3000,"end_character":19},"in_reply_to":"7f96bb07_26bedeb3","updated":"2018-01-17 18:02:09.000000000","message":"Moved to separate patch:\nhttps://review.openstack.org/534849","commit_id":"cbb0f46e9e5669d4a8e21d41b6eb8723a872cc36"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"2638da9895d236a89e5c92e1014b42146c1506cf","unresolved":false,"context_lines":[{"line_number":4318,"context_line":""},{"line_number":4319,"context_line":""},{"line_number":4320,"context_line":"class ServersControllerCreateTestV260(ServersControllerCreateTest):"},{"line_number":4321,"context_line":"    def _create_instance_req(self, set_trusted_certs, certs\u003dNone):"},{"line_number":4322,"context_line":"        if set_trusted_certs:"},{"line_number":4323,"context_line":"            self.body[\u0027server\u0027][\u0027trusted_image_certificates\u0027] \u003d certs"},{"line_number":4324,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_46d9aa1f","line":4321,"range":{"start_line":4321,"start_character":35,"end_line":4321,"end_character":59},"updated":"2018-01-17 15:53:49.000000000","message":"same comment about unnecessary set_trusted_certs param...","commit_id":"cbb0f46e9e5669d4a8e21d41b6eb8723a872cc36"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"504adffa61efb603b1001da6756c64b758b57235","unresolved":false,"context_lines":[{"line_number":4318,"context_line":""},{"line_number":4319,"context_line":""},{"line_number":4320,"context_line":"class ServersControllerCreateTestV260(ServersControllerCreateTest):"},{"line_number":4321,"context_line":"    def _create_instance_req(self, set_trusted_certs, certs\u003dNone):"},{"line_number":4322,"context_line":"        if set_trusted_certs:"},{"line_number":4323,"context_line":"            self.body[\u0027server\u0027][\u0027trusted_image_certificates\u0027] \u003d certs"},{"line_number":4324,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"7f96bb07_0f2e55fa","line":4321,"range":{"start_line":4321,"start_character":35,"end_line":4321,"end_character":59},"in_reply_to":"7f96bb07_46d9aa1f","updated":"2018-01-17 18:02:09.000000000","message":"Done","commit_id":"cbb0f46e9e5669d4a8e21d41b6eb8723a872cc36"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"7d42b689fdd086b71a15deb09c44dbafbe299994","unresolved":false,"context_lines":[{"line_number":3860,"context_line":""},{"line_number":3861,"context_line":"    def test_create_instance_without_personality_should_get_empty_list(self):"},{"line_number":3862,"context_line":"        old_create \u003d compute_api.API.create"},{"line_number":3863,"context_line":"        del self.body[\u0027server\u0027][\u0027personality\u0027]"},{"line_number":3864,"context_line":""},{"line_number":3865,"context_line":"        def create(*args, **kwargs):"},{"line_number":3866,"context_line":"            self.assertEqual([], kwargs[\u0027injected_files\u0027])"}],"source_content_type":"text/x-python","patch_set":31,"id":"7f96bb07_55e38ea4","side":"PARENT","line":3863,"updated":"2018-01-17 18:28:48.000000000","message":"Forgot to take this out. It\u0027s addressed in https://review.openstack.org/#/c/534849/. This will be fixed in the next patch.","commit_id":"4f26e91a0b2ac7ff550e106edada3fd82ba58d90"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"4abeecdfdf84cd8e3c14fb60bcf447572cd7f74c","unresolved":false,"context_lines":[{"line_number":2468,"context_line":"                                          trusted_certs\u003dcerts,"},{"line_number":2469,"context_line":"                                          project_id\u003dself.req_project_id,"},{"line_number":2470,"context_line":"                                          user_id\u003dself.req_user_id)"},{"line_number":2471,"context_line":"        with mock.patch.object(compute_api.API, \u0027get\u0027, side_effect\u003dfake_get):"},{"line_number":2472,"context_line":"            if certs:"},{"line_number":2473,"context_line":"                self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d certs"},{"line_number":2474,"context_line":"            self.req.body \u003d jsonutils.dump_as_bytes(self.body)"}],"source_content_type":"text/x-python","patch_set":31,"id":"7f96bb07_86b9e715","line":2471,"updated":"2018-01-17 22:12:19.000000000","message":"We should be mocking nova.api.openstack.compute.servers.ServersController._get_instance","commit_id":"c65546b4c8a047d7b3cec3daecdea5bb81ac08ec"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7e7f4181164487428593cbfd6841517ad98ae7e2","unresolved":false,"context_lines":[{"line_number":2538,"context_line":"        self._rebuild_server(conf_enabled\u003dTrue, conf_certs\u003d[\u0027conf-id\u0027])"},{"line_number":2539,"context_line":""},{"line_number":2540,"context_line":"    def test_rebuild_server_with_invalid_trusted_certs(self):"},{"line_number":2541,"context_line":"        # Invalid non-printable control char in the desc."},{"line_number":2542,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d \"not-an-array\""},{"line_number":2543,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2544,"context_line":"        self.assertRaises(exception.ValidationError,"}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_48017669","line":2541,"updated":"2018-04-04 09:55:17.000000000","message":"Might have a cut and paste error in this comment?","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"5cf3f7337191f265f62f88c1aa95b9a6287f6f7d","unresolved":false,"context_lines":[{"line_number":2538,"context_line":"        self._rebuild_server(conf_enabled\u003dTrue, conf_certs\u003d[\u0027conf-id\u0027])"},{"line_number":2539,"context_line":""},{"line_number":2540,"context_line":"    def test_rebuild_server_with_invalid_trusted_certs(self):"},{"line_number":2541,"context_line":"        # Invalid non-printable control char in the desc."},{"line_number":2542,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d \"not-an-array\""},{"line_number":2543,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2544,"context_line":"        self.assertRaises(exception.ValidationError,"}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_aa704241","line":2541,"in_reply_to":"bf659307_48017669","updated":"2018-04-04 14:43:55.000000000","message":"Yeah, not sure what that\u0027s about. Thanks for the catch.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"5f28f6243c4d1b9d77955ae9a2935de7d4412a9a","unresolved":false,"context_lines":[{"line_number":2600,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2601,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2602,"context_line":""},{"line_number":2603,"context_line":""},{"line_number":2604,"context_line":"class ServersControllerUpdateTest(ControllerTest):"},{"line_number":2605,"context_line":""},{"line_number":2606,"context_line":"    def _get_request(self, body\u003dNone):"}],"source_content_type":"text/x-python","patch_set":73,"id":"bf659307_80545aff","line":2603,"updated":"2018-04-13 21:38:08.000000000","message":"Excellent tests in here.","commit_id":"7e64019f332efe53fd9e949cf8fe7252d7ebf83f"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"45a6c66b103417fdd85c22bf27f257bfaec2f8c5","unresolved":false,"context_lines":[{"line_number":2600,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2601,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2602,"context_line":""},{"line_number":2603,"context_line":""},{"line_number":2604,"context_line":"class ServersControllerUpdateTest(ControllerTest):"},{"line_number":2605,"context_line":""},{"line_number":2606,"context_line":"    def _get_request(self, body\u003dNone):"}],"source_content_type":"text/x-python","patch_set":73,"id":"bf659307_86ceb22a","line":2603,"in_reply_to":"bf659307_80545aff","updated":"2018-04-14 01:25:59.000000000","message":"Thanks!","commit_id":"7e64019f332efe53fd9e949cf8fe7252d7ebf83f"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":2419,"context_line":"        self.req.headers[\"content-type\"] \u003d \"application/json\""},{"line_number":2420,"context_line":"        self.req_user_id \u003d self.req.environ[\u0027nova.context\u0027].user_id"},{"line_number":2421,"context_line":"        self.req_project_id \u003d self.req.environ[\u0027nova.context\u0027].project_id"},{"line_number":2422,"context_line":"        self.useFixture(nova_fixtures.SingleCellSimple())"},{"line_number":2423,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":2424,"context_line":"            api_version_request.APIVersionRequest(\u00272.63\u0027)"},{"line_number":2425,"context_line":"        self.body \u003d {"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_c8a81222","line":2422,"range":{"start_line":2422,"start_character":8,"end_line":2422,"end_character":57},"updated":"2018-06-04 13:59:33.000000000","message":"I doubt this is needed.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":2419,"context_line":"        self.req.headers[\"content-type\"] \u003d \"application/json\""},{"line_number":2420,"context_line":"        self.req_user_id \u003d self.req.environ[\u0027nova.context\u0027].user_id"},{"line_number":2421,"context_line":"        self.req_project_id \u003d self.req.environ[\u0027nova.context\u0027].project_id"},{"line_number":2422,"context_line":"        self.useFixture(nova_fixtures.SingleCellSimple())"},{"line_number":2423,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":2424,"context_line":"            api_version_request.APIVersionRequest(\u00272.63\u0027)"},{"line_number":2425,"context_line":"        self.body \u003d {"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_d025f80b","line":2422,"range":{"start_line":2422,"start_character":8,"end_line":2422,"end_character":57},"in_reply_to":"5f7c97a3_c8a81222","updated":"2018-06-06 20:32:03.000000000","message":"You are correct.  Removed.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":2494,"context_line":"        \"\"\"Make sure that we can\u0027t rebuild with an empty certificate ID\"\"\""},{"line_number":2495,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d [\u0027\u0027]"},{"line_number":2496,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2497,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2498,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2499,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2500,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_e8286e98","line":2497,"updated":"2018-06-04 13:59:33.000000000","message":"nit: it would be good to assert something about the validation error to make sure it\u0027s failing on what you expect it to fail on, which you can do using the error message, e.g.:\n\nex \u003d self.assertRaises(exception.ValidationError, ...)\nself.assertIn(\u0027something in the error message\u0027, six.text_type(ex))\n\nI\u0027ve seen too many cases of people thinking they are validating one thing but the test is failing on something else.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":2494,"context_line":"        \"\"\"Make sure that we can\u0027t rebuild with an empty certificate ID\"\"\""},{"line_number":2495,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d [\u0027\u0027]"},{"line_number":2496,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2497,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2498,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2499,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2500,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_1b0cf139","line":2497,"in_reply_to":"5f7c97a3_e8286e98","updated":"2018-06-06 20:32:03.000000000","message":"Good point. Thank you for the example. Done.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":2502,"context_line":"        \"\"\"Make sure that we can\u0027t rebuild with an empty array of IDs\"\"\""},{"line_number":2503,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d []"},{"line_number":2504,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2505,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2506,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2507,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2508,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_c804921b","line":2505,"updated":"2018-06-04 13:59:33.000000000","message":"same","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":2502,"context_line":"        \"\"\"Make sure that we can\u0027t rebuild with an empty array of IDs\"\"\""},{"line_number":2503,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d []"},{"line_number":2504,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2505,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2506,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2507,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2508,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_3bfd2d08","line":2505,"in_reply_to":"5f7c97a3_c804921b","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":2511,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d ["},{"line_number":2512,"context_line":"            \u0027cert{}\u0027.format(i) for i in range(51)]"},{"line_number":2513,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2514,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2515,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2516,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2517,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_e8014e08","line":2514,"updated":"2018-06-04 13:59:33.000000000","message":"same","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":2511,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d ["},{"line_number":2512,"context_line":"            \u0027cert{}\u0027.format(i) for i in range(51)]"},{"line_number":2513,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2514,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2515,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2516,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2517,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_b002bc0a","line":2514,"in_reply_to":"5f7c97a3_e8014e08","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":2519,"context_line":"        \"\"\"Make sure that we can\u0027t rebuild with a non-unique array of IDs\"\"\""},{"line_number":2520,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d [\u0027cert\u0027, \u0027cert\u0027]"},{"line_number":2521,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2522,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2523,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2524,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2525,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_83fc3d0d","line":2522,"updated":"2018-06-04 13:59:33.000000000","message":"same","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":2519,"context_line":"        \"\"\"Make sure that we can\u0027t rebuild with a non-unique array of IDs\"\"\""},{"line_number":2520,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d [\u0027cert\u0027, \u0027cert\u0027]"},{"line_number":2521,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2522,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2523,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2524,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2525,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_d00bb828","line":2522,"in_reply_to":"5f7c97a3_83fc3d0d","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":2527,"context_line":"        \"\"\"Make sure that we can\u0027t rebuild with non-string certificate IDs\"\"\""},{"line_number":2528,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d [1, 2]"},{"line_number":2529,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2530,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2531,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2532,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2533,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_4306251f","line":2530,"updated":"2018-06-04 13:59:33.000000000","message":"same","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":2527,"context_line":"        \"\"\"Make sure that we can\u0027t rebuild with non-string certificate IDs\"\"\""},{"line_number":2528,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d [1, 2]"},{"line_number":2529,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2530,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2531,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2532,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2533,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_30178c54","line":2530,"in_reply_to":"5f7c97a3_4306251f","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":2535,"context_line":"        \"\"\"Make sure that we can\u0027t rebuild with certificates in a non-array\"\"\""},{"line_number":2536,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d \"not-an-array\""},{"line_number":2537,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2538,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2539,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2540,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2541,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_630b2124","line":2538,"updated":"2018-06-04 13:59:33.000000000","message":"same","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":2535,"context_line":"        \"\"\"Make sure that we can\u0027t rebuild with certificates in a non-array\"\"\""},{"line_number":2536,"context_line":"        self.body[\u0027rebuild\u0027][\u0027trusted_image_certificates\u0027] \u003d \"not-an-array\""},{"line_number":2537,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(self.body)"},{"line_number":2538,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2539,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2540,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2541,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_10129063","line":2538,"in_reply_to":"5f7c97a3_630b2124","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":2544,"context_line":"        self._rebuild_server(certs\u003d[\u0027trusted-cert-id\u0027])"},{"line_number":2545,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":2546,"context_line":"            api_version_request.APIVersionRequest(\u00272.62\u0027)"},{"line_number":2547,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2548,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2549,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2550,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_e316514a","line":2547,"updated":"2018-06-04 13:59:33.000000000","message":"same","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":2544,"context_line":"        self._rebuild_server(certs\u003d[\u0027trusted-cert-id\u0027])"},{"line_number":2545,"context_line":"        self.req.api_version_request \u003d \\"},{"line_number":2546,"context_line":"            api_version_request.APIVersionRequest(\u00272.62\u0027)"},{"line_number":2547,"context_line":"        self.assertRaises(exception.ValidationError,"},{"line_number":2548,"context_line":"                          self.controller._action_rebuild,"},{"line_number":2549,"context_line":"                          self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2550,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_701d0472","line":2547,"in_reply_to":"5f7c97a3_e316514a","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":4398,"context_line":"    def test_create_instance_with_empty_trusted_cert_id(self):"},{"line_number":4399,"context_line":"        \"\"\"Make sure we can\u0027t create with an empty certificate ID\"\"\""},{"line_number":4400,"context_line":"        self._create_instance_req([\u0027\u0027])"},{"line_number":4401,"context_line":"        self.assertRaises("},{"line_number":4402,"context_line":"            exception.ValidationError, self.controller.create, self.req,"},{"line_number":4403,"context_line":"            body\u003dself.body)"},{"line_number":4404,"context_line":""},{"line_number":4405,"context_line":"    def test_create_instance_with_empty_trusted_certs(self):"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_03390dd7","line":4402,"range":{"start_line":4401,"start_character":8,"end_line":4402,"end_character":37},"updated":"2018-06-04 13:59:33.000000000","message":"same as above for here and below","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":4398,"context_line":"    def test_create_instance_with_empty_trusted_cert_id(self):"},{"line_number":4399,"context_line":"        \"\"\"Make sure we can\u0027t create with an empty certificate ID\"\"\""},{"line_number":4400,"context_line":"        self._create_instance_req([\u0027\u0027])"},{"line_number":4401,"context_line":"        self.assertRaises("},{"line_number":4402,"context_line":"            exception.ValidationError, self.controller.create, self.req,"},{"line_number":4403,"context_line":"            body\u003dself.body)"},{"line_number":4404,"context_line":""},{"line_number":4405,"context_line":"    def test_create_instance_with_empty_trusted_certs(self):"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_9b3001eb","line":4402,"range":{"start_line":4401,"start_character":8,"end_line":4402,"end_character":37},"in_reply_to":"5f7c97a3_03390dd7","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":2521,"context_line":"        ex \u003d self.assertRaises(exception.ValidationError,"},{"line_number":2522,"context_line":"                               self.controller._action_rebuild,"},{"line_number":2523,"context_line":"                               self.req, FAKE_UUID, body\u003dself.body)"},{"line_number":2524,"context_line":"        self.assertIn(\u0027is too long\u0027, six.text_type(ex))"},{"line_number":2525,"context_line":""},{"line_number":2526,"context_line":"    def test_rebuild_server_with_nonunique_trusted_certs(self):"},{"line_number":2527,"context_line":"        \"\"\"Make sure that we can\u0027t rebuild with a non-unique array of IDs\"\"\""}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_46ddfc6d","line":2524,"range":{"start_line":2524,"start_character":8,"end_line":2524,"end_character":55},"updated":"2018-06-13 17:32:43.000000000","message":"awesome, thank you very much for asserting the actual errors in these negative tests","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"}],"nova/tests/unit/api/openstack/fakes.py":[{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"4abeecdfdf84cd8e3c14fb60bcf447572cd7f74c","unresolved":false,"context_lines":[{"line_number":415,"context_line":"    return _return_servers_objs"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"def stub_instance(id\u003d1, user_id\u003dNone, project_id\u003dNone, host\u003dNone,"},{"line_number":419,"context_line":"                  node\u003dNone, vm_state\u003dNone, task_state\u003dNone,"},{"line_number":420,"context_line":"                  reservation_id\u003d\"\", uuid\u003dFAKE_UUID, image_ref\u003d\"10\","},{"line_number":421,"context_line":"                  flavor_id\u003d\"1\", name\u003dNone, key_name\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":31,"id":"7f96bb07_66761b41","line":418,"updated":"2018-01-17 22:12:19.000000000","message":"This is called FIVE times when running a single test (e.g., test_rebuild_server_with_trusted_certs). Why??","commit_id":"c65546b4c8a047d7b3cec3daecdea5bb81ac08ec"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"e9578de04824194cee0a519c24f93f4e0ad00e43","unresolved":false,"context_lines":[{"line_number":567,"context_line":""},{"line_number":568,"context_line":"def stub_instance_obj(ctxt, *args, **kwargs):"},{"line_number":569,"context_line":"    db_inst \u003d stub_instance(*args, **kwargs)"},{"line_number":570,"context_line":"    expected \u003d [\u0027metadata\u0027, \u0027system_metadata\u0027, \u0027flavor\u0027,"},{"line_number":571,"context_line":"                \u0027info_cache\u0027, \u0027security_groups\u0027, \u0027tags\u0027]"},{"line_number":572,"context_line":"    inst \u003d objects.Instance._from_db_object(ctxt, objects.Instance(),"},{"line_number":573,"context_line":"                                            db_inst,"}],"source_content_type":"text/x-python","patch_set":33,"id":"7f96bb07_47017269","line":570,"updated":"2018-01-18 22:03:16.000000000","message":"Should \u0027trusted_certs\u0027 be included in this list?","commit_id":"230ae28a1586112cdc64051cccf0c06002d1925e"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"30d4e0c94911164c765d4cd2778f8b05ccc2e6fd","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        testcase.stub_out(\u0027nova.db.key_pair_get_all_by_user\u0027, no_key_pair)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def stub_out_trusted_certs(test, certs):"},{"line_number":110,"context_line":"    def fake_trusted_certs():"},{"line_number":111,"context_line":"        return objects.TrustedCerts(ids\u003dcerts)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"7f96bb07_bb871562","line":109,"updated":"2018-01-19 20:34:38.000000000","message":"Suggested change (hopefully next patch):\n\ndef stub_out_trusted_certs(test, certs\u003dNone):\n    def fake_trusted_certs(cls, context, instance_uuid):\n        return objects.TrustedCerts(ids\u003dtrusted_certs)\n\n    def fake_instance_extra(context, instance_uuid, columns):\n        if columns is [\u0027trusted_certs\u0027]:\n            return {\u0027trusted_certs\u0027: trusted_certs}\n        else:\n            return {\u0027numa_topology\u0027: None,\n                    \u0027pci_requests\u0027: None,\n                    \u0027flavor\u0027: None,\n                    \u0027vcpu_model\u0027: None,\n                    \u0027trusted_certs\u0027: trusted_certs,\n                    \u0027migration_context\u0027: None}\n\n    trusted_certs \u003d [\u0027trusted-cert-id-1\u0027, \u0027trusted-cert-id-2\u0027]\n    if certs:\n        trusted_certs \u003d certs\n    test.stub_out(\u0027nova.objects.TrustedCerts.get_by_instance_uuid\u0027,\n                  fake_trusted_certs)\n    test.stub_out(\u0027nova.db.instance_extra_get_by_instance_uuid\u0027,\n                  fake_instance_extra)","commit_id":"4a1183e2cb58317fe7d6269ad4e32f18c28b99f4"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"80cb78bdde4182ab5c4e8eea194e58e000b04646","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        testcase.stub_out(\u0027nova.db.key_pair_get_all_by_user\u0027, no_key_pair)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"def stub_out_trusted_certs(test, certs):"},{"line_number":110,"context_line":"    def fake_trusted_certs():"},{"line_number":111,"context_line":"        return objects.TrustedCerts(ids\u003dcerts)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":34,"id":"7f96bb07_a9f6e8f8","line":109,"in_reply_to":"7f96bb07_bb871562","updated":"2018-01-20 02:09:16.000000000","message":"Done","commit_id":"4a1183e2cb58317fe7d6269ad4e32f18c28b99f4"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"30d4e0c94911164c765d4cd2778f8b05ccc2e6fd","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        return objects.TrustedCerts(ids\u003dcerts)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def fake_instance_extra():"},{"line_number":114,"context_line":"        return {\u0027trusted_certs\u0027: certs}"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    test.stub_out(\u0027nova.objects.TrustedCerts.get_by_instance_uuid\u0027,"},{"line_number":117,"context_line":"                  fake_trusted_certs())"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f96bb07_dbb6a13f","line":114,"updated":"2018-01-19 20:34:38.000000000","message":"This should only be returned when the trusted_certs column is specified","commit_id":"4a1183e2cb58317fe7d6269ad4e32f18c28b99f4"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"80cb78bdde4182ab5c4e8eea194e58e000b04646","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        return objects.TrustedCerts(ids\u003dcerts)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def fake_instance_extra():"},{"line_number":114,"context_line":"        return {\u0027trusted_certs\u0027: certs}"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    test.stub_out(\u0027nova.objects.TrustedCerts.get_by_instance_uuid\u0027,"},{"line_number":117,"context_line":"                  fake_trusted_certs())"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f96bb07_49dba47c","line":114,"in_reply_to":"7f96bb07_dbb6a13f","updated":"2018-01-20 02:09:16.000000000","message":"Done","commit_id":"4a1183e2cb58317fe7d6269ad4e32f18c28b99f4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        return objects.TrustedCerts(ids\u003dtrusted_certs)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def fake_instance_extra(context, instance_uuid, columns):"},{"line_number":113,"context_line":"        if columns is [\u0027trusted_certs\u0027]:"},{"line_number":114,"context_line":"            return {\u0027trusted_certs\u0027: trusted_certs}"},{"line_number":115,"context_line":"        else:"},{"line_number":116,"context_line":"            return {\u0027numa_topology\u0027: None,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_03acadec","line":113,"range":{"start_line":113,"start_character":19,"end_line":113,"end_character":21},"updated":"2018-06-04 13:59:33.000000000","message":"This looks a bit odd, not really sure if it\u0027s necessary, but I guess it works.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"}],"nova/tests/unit/compute/test_compute_api.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f89d76f49ed9d87ff6bb986beb3fec21c8e8a2d4","unresolved":false,"context_lines":[{"line_number":4754,"context_line":"                                                  mock.MagicMock(), None, None,"},{"line_number":4755,"context_line":"                                                  [], None, None, None, None,"},{"line_number":4756,"context_line":"                                                  None, objects.TagList(),"},{"line_number":4757,"context_line":"                                                  None)"},{"line_number":4758,"context_line":"            secgroups \u003d mock_secgroup.populate_security_groups.return_value"},{"line_number":4759,"context_line":"            mock_objects.RequestSpec.from_components.assert_called_once_with("},{"line_number":4760,"context_line":"                mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY,"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_58e08026","line":4757,"updated":"2018-04-03 11:29:08.000000000","message":"We really must have at least one test where this is not None.\n\nSeems there are quite a few edge cases that need testing once you include the config changes, etc.","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"f3a9cca88279f13366d073104b12faa1a5c5419c","unresolved":false,"context_lines":[{"line_number":4754,"context_line":"                                                  mock.MagicMock(), None, None,"},{"line_number":4755,"context_line":"                                                  [], None, None, None, None,"},{"line_number":4756,"context_line":"                                                  None, objects.TagList(),"},{"line_number":4757,"context_line":"                                                  None)"},{"line_number":4758,"context_line":"            secgroups \u003d mock_secgroup.populate_security_groups.return_value"},{"line_number":4759,"context_line":"            mock_objects.RequestSpec.from_components.assert_called_once_with("},{"line_number":4760,"context_line":"                mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY,"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_967b3df3","line":4757,"in_reply_to":"bf659307_58e08026","updated":"2018-04-03 19:24:30.000000000","message":"This will be fixed in the next patch.","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"a2b6a12898e8beec0228cd7f049c119a617cc49a","unresolved":false,"context_lines":[{"line_number":4754,"context_line":"                                                  mock.MagicMock(), None, None,"},{"line_number":4755,"context_line":"                                                  [], None, None, None, None,"},{"line_number":4756,"context_line":"                                                  None, objects.TagList(),"},{"line_number":4757,"context_line":"                                                  None)"},{"line_number":4758,"context_line":"            secgroups \u003d mock_secgroup.populate_security_groups.return_value"},{"line_number":4759,"context_line":"            mock_objects.RequestSpec.from_components.assert_called_once_with("},{"line_number":4760,"context_line":"                mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY, mock.ANY,"}],"source_content_type":"text/x-python","patch_set":53,"id":"bf659307_c1900af0","line":4757,"in_reply_to":"bf659307_967b3df3","updated":"2018-04-04 03:58:26.000000000","message":"test_provision_instances_with_trusted_certs added to address this","commit_id":"f9fe2d5c69193a2f7bd48ce0207909e1edaa11ab"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7e7f4181164487428593cbfd6841517ad98ae7e2","unresolved":false,"context_lines":[{"line_number":4416,"context_line":"        @mock.patch.object(self.compute_api, \u0027_create_block_device_mapping\u0027)"},{"line_number":4417,"context_line":"        def do_test(mock_cbdm, mock_bdm_v, mock_cdb, mock_sg, mock_cniq):"},{"line_number":4418,"context_line":"            mock_cniq.return_value \u003d 1"},{"line_number":4419,"context_line":"            CONF.set_default(\u0027verify_glance_signatures\u0027, True, group\u003d\u0027glance\u0027)"},{"line_number":4420,"context_line":"            CONF.set_default(\u0027enable_certificate_validation\u0027, True,"},{"line_number":4421,"context_line":"                             group\u003d\u0027glance\u0027)"},{"line_number":4422,"context_line":"            CONF.set_default(\u0027default_trusted_certificate_ids\u0027,"}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_48d2d6d2","line":4419,"updated":"2018-04-04 09:55:17.000000000","message":"So we should use self.flags here, so the values are correctly unset after the test.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"5cf3f7337191f265f62f88c1aa95b9a6287f6f7d","unresolved":false,"context_lines":[{"line_number":4416,"context_line":"        @mock.patch.object(self.compute_api, \u0027_create_block_device_mapping\u0027)"},{"line_number":4417,"context_line":"        def do_test(mock_cbdm, mock_bdm_v, mock_cdb, mock_sg, mock_cniq):"},{"line_number":4418,"context_line":"            mock_cniq.return_value \u003d 1"},{"line_number":4419,"context_line":"            CONF.set_default(\u0027verify_glance_signatures\u0027, True, group\u003d\u0027glance\u0027)"},{"line_number":4420,"context_line":"            CONF.set_default(\u0027enable_certificate_validation\u0027, True,"},{"line_number":4421,"context_line":"                             group\u003d\u0027glance\u0027)"},{"line_number":4422,"context_line":"            CONF.set_default(\u0027default_trusted_certificate_ids\u0027,"}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_8af1be97","line":4419,"in_reply_to":"bf659307_48d2d6d2","updated":"2018-04-04 14:43:55.000000000","message":"Yes, that would be a better move. Thanks.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7e7f4181164487428593cbfd6841517ad98ae7e2","unresolved":false,"context_lines":[{"line_number":4459,"context_line":"                                                  None, None, None, {}, None,"},{"line_number":4460,"context_line":"                                                  None, objects.TagList(),"},{"line_number":4461,"context_line":"                                                  None)"},{"line_number":4462,"context_line":"            self.assertIsNone(mock_instance.return_value.trusted_certs)"},{"line_number":4463,"context_line":""},{"line_number":4464,"context_line":"        do_test()"},{"line_number":4465,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_68c0fae1","line":4462,"updated":"2018-04-04 09:55:17.000000000","message":"Given you test _retrieve_trusted_certs nicely below, I would personally just have one test here that makes sure we pass that function the correct things.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"5cf3f7337191f265f62f88c1aa95b9a6287f6f7d","unresolved":false,"context_lines":[{"line_number":4459,"context_line":"                                                  None, None, None, {}, None,"},{"line_number":4460,"context_line":"                                                  None, objects.TagList(),"},{"line_number":4461,"context_line":"                                                  None)"},{"line_number":4462,"context_line":"            self.assertIsNone(mock_instance.return_value.trusted_certs)"},{"line_number":4463,"context_line":""},{"line_number":4464,"context_line":"        do_test()"},{"line_number":4465,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_4a2de6fb","line":4462,"in_reply_to":"bf659307_68c0fae1","updated":"2018-04-04 14:43:55.000000000","message":"Sounds good. I\u0027ll update in the next patch.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7e7f4181164487428593cbfd6841517ad98ae7e2","unresolved":false,"context_lines":[{"line_number":5811,"context_line":"        fake_conf_trusted_certs \u003d objects.TrustedCerts("},{"line_number":5812,"context_line":"            ids\u003d[\u0027conf-trusted-cert-1\u0027, \u0027conf-trusted-cert-2\u0027])"},{"line_number":5813,"context_line":""},{"line_number":5814,"context_line":"        CONF.set_default(\u0027verify_glance_signatures\u0027, True, group\u003d\u0027glance\u0027)"},{"line_number":5815,"context_line":"        CONF.set_default(\u0027enable_certificate_validation\u0027, True, group\u003d\u0027glance\u0027)"},{"line_number":5816,"context_line":"        CONF.set_default(\u0027default_trusted_certificate_ids\u0027,"},{"line_number":5817,"context_line":"                         \u0027conf-trusted-cert-1, conf-trusted-cert-2\u0027,"}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_289d2209","line":5814,"updated":"2018-04-04 09:55:17.000000000","message":"As above, need to be careful about test run orders, etc.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"7e7f4181164487428593cbfd6841517ad98ae7e2","unresolved":false,"context_lines":[{"line_number":6379,"context_line":"                                    test.NoDBTestCase):"},{"line_number":6380,"context_line":"    def setUp(self):"},{"line_number":6381,"context_line":"        super(ComputeAPIAPICellUnitTestCase, self).setUp()"},{"line_number":6382,"context_line":"        self.flags(cell_type\u003d\u0027api\u0027, enable\u003dTrue, group\u003d\u0027cells\u0027)"},{"line_number":6383,"context_line":"        self.compute_api \u003d compute_cells_api.ComputeCellsAPI()"},{"line_number":6384,"context_line":"        self.cell_type \u003d \u0027api\u0027"},{"line_number":6385,"context_line":""}],"source_content_type":"text/x-python","patch_set":55,"id":"bf659307_08013e38","line":6382,"updated":"2018-04-04 09:55:17.000000000","message":"Here is an example of using self.flags.","commit_id":"4aaba1ba1e91362524cd6635dd36cf942c293058"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":3838,"context_line":"            image\u003dimage, trusted_certs\u003dnew_trusted_certs)"},{"line_number":3839,"context_line":"        _checks_for_create_and_rebuild.assert_called_once_with("},{"line_number":3840,"context_line":"            self.context, None, image, flavor, {}, [], None)"},{"line_number":3841,"context_line":"        self.assertNotEqual(orig_trusted_certs, instance.trusted_certs.ids)"},{"line_number":3842,"context_line":""},{"line_number":3843,"context_line":"    @mock.patch.object(compute_utils, \u0027is_volume_backed_instance\u0027,"},{"line_number":3844,"context_line":"                       return_value\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_43f065fe","line":3841,"range":{"start_line":3841,"start_character":8,"end_line":3841,"end_character":75},"updated":"2018-06-04 13:59:33.000000000","message":"Shouldn\u0027t this just be:\n\nself.assertEqual(new_trusted_certs, instance.trusted_certs.ids)\n\n?","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":3838,"context_line":"            image\u003dimage, trusted_certs\u003dnew_trusted_certs)"},{"line_number":3839,"context_line":"        _checks_for_create_and_rebuild.assert_called_once_with("},{"line_number":3840,"context_line":"            self.context, None, image, flavor, {}, [], None)"},{"line_number":3841,"context_line":"        self.assertNotEqual(orig_trusted_certs, instance.trusted_certs.ids)"},{"line_number":3842,"context_line":""},{"line_number":3843,"context_line":"    @mock.patch.object(compute_utils, \u0027is_volume_backed_instance\u0027,"},{"line_number":3844,"context_line":"                       return_value\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_509fa864","line":3841,"range":{"start_line":3841,"start_character":8,"end_line":3841,"end_character":75},"in_reply_to":"5f7c97a3_43f065fe","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":3872,"context_line":"                           \u0027vm_mode\u0027: \u0027hvm\u0027}}"},{"line_number":3873,"context_line":"        admin_pass \u003d \u0027\u0027"},{"line_number":3874,"context_line":"        files_to_inject \u003d []"},{"line_number":3875,"context_line":"        bdms \u003d objects.BlockDeviceMappingList()"},{"line_number":3876,"context_line":""},{"line_number":3877,"context_line":"        _get_image.return_value \u003d (None, image)"},{"line_number":3878,"context_line":"        bdm_get_by_instance_uuid.return_value \u003d bdms"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_23c0c97c","line":3875,"range":{"start_line":3875,"start_character":8,"end_line":3875,"end_character":47},"updated":"2018-06-04 13:59:33.000000000","message":"nit: it doesn\u0027t really make sense that we\u0027d have a volume-backed server with no bdms, but I realize the test doesn\u0027t care because is_volume_backed_instance is mocked out, but it\u0027ll just bother me (you don\u0027t really need to change this I guess, if you did, you could just use a sentinel: mock.sentinel.bdms).","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":4468,"context_line":"    @mock.patch(\u0027nova.objects.BuildRequest\u0027)"},{"line_number":4469,"context_line":"    @mock.patch(\u0027nova.objects.Instance\u0027)"},{"line_number":4470,"context_line":"    @mock.patch(\u0027nova.objects.InstanceMapping.create\u0027)"},{"line_number":4471,"context_line":"    def test_provision_instances_with_trusted_certs(self, mock_im,"},{"line_number":4472,"context_line":"                                                    mock_instance,"},{"line_number":4473,"context_line":"                                                    mock_br, mock_rs):"},{"line_number":4474,"context_line":"        trusted_certs \u003d [\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_433e258c","line":4471,"updated":"2018-06-04 13:59:33.000000000","message":"nit: we shouldn\u0027t really need an additional unit test for this since the functional API sample test should already be testing this path.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":4468,"context_line":"    @mock.patch(\u0027nova.objects.BuildRequest\u0027)"},{"line_number":4469,"context_line":"    @mock.patch(\u0027nova.objects.Instance\u0027)"},{"line_number":4470,"context_line":"    @mock.patch(\u0027nova.objects.InstanceMapping.create\u0027)"},{"line_number":4471,"context_line":"    def test_provision_instances_with_trusted_certs(self, mock_im,"},{"line_number":4472,"context_line":"                                                    mock_instance,"},{"line_number":4473,"context_line":"                                                    mock_br, mock_rs):"},{"line_number":4474,"context_line":"        trusted_certs \u003d [\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_d07bb826","line":4471,"in_reply_to":"5f7c97a3_433e258c","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":5834,"context_line":"        self.assertEqual(0, len(instance.security_groups))"},{"line_number":5835,"context_line":""},{"line_number":5836,"context_line":"    def test_retrieve_trusted_certs_object(self):"},{"line_number":5837,"context_line":"        fake_trusted_certs \u003d objects.TrustedCerts("},{"line_number":5838,"context_line":"            ids\u003d[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"},{"line_number":5839,"context_line":"                 \u0027674736e3-f25c-405c-8362-bbf991e0ce0a\u0027])"},{"line_number":5840,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_a36299ac","line":5837,"range":{"start_line":5837,"start_character":8,"end_line":5837,"end_character":50},"updated":"2018-06-04 13:59:33.000000000","message":"You don\u0027t need this object, you\u0027re just comparing the ids.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":5834,"context_line":"        self.assertEqual(0, len(instance.security_groups))"},{"line_number":5835,"context_line":""},{"line_number":5836,"context_line":"    def test_retrieve_trusted_certs_object(self):"},{"line_number":5837,"context_line":"        fake_trusted_certs \u003d objects.TrustedCerts("},{"line_number":5838,"context_line":"            ids\u003d[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"},{"line_number":5839,"context_line":"                 \u0027674736e3-f25c-405c-8362-bbf991e0ce0a\u0027])"},{"line_number":5840,"context_line":""}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_f09d9457","line":5837,"range":{"start_line":5837,"start_character":8,"end_line":5837,"end_character":50},"in_reply_to":"5f7c97a3_a36299ac","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":5844,"context_line":"        self.assertEqual(fake_trusted_certs.ids, retrieved_certs.ids)"},{"line_number":5845,"context_line":""},{"line_number":5846,"context_line":"    def test_retrieve_trusted_certs_object_conf(self):"},{"line_number":5847,"context_line":"        fake_conf_trusted_certs \u003d objects.TrustedCerts("},{"line_number":5848,"context_line":"            ids\u003d[\u0027conf-trusted-cert-1\u0027, \u0027conf-trusted-cert-2\u0027])"},{"line_number":5849,"context_line":""},{"line_number":5850,"context_line":"        self.flags(verify_glance_signatures\u003dTrue, group\u003d\u0027glance\u0027)"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_435705cc","line":5847,"updated":"2018-06-04 13:59:33.000000000","message":"same - you don\u0027t need the object","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":5844,"context_line":"        self.assertEqual(fake_trusted_certs.ids, retrieved_certs.ids)"},{"line_number":5845,"context_line":""},{"line_number":5846,"context_line":"    def test_retrieve_trusted_certs_object_conf(self):"},{"line_number":5847,"context_line":"        fake_conf_trusted_certs \u003d objects.TrustedCerts("},{"line_number":5848,"context_line":"            ids\u003d[\u0027conf-trusted-cert-1\u0027, \u0027conf-trusted-cert-2\u0027])"},{"line_number":5849,"context_line":""},{"line_number":5850,"context_line":"        self.flags(verify_glance_signatures\u003dTrue, group\u003d\u0027glance\u0027)"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_90aa206f","line":5847,"in_reply_to":"5f7c97a3_435705cc","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":3889,"context_line":"            get_flavor, instance_save, req_spec_get_by_inst_uuid,"},{"line_number":3890,"context_line":"            instance_is_volume_backed):"},{"line_number":3891,"context_line":"        orig_system_metadata \u003d {}"},{"line_number":3892,"context_line":"        orig_trusted_certs \u003d [\u0027orig-trusted-cert-1\u0027, \u0027orig-trusted-cert-2\u0027]"},{"line_number":3893,"context_line":"        new_trusted_certs \u003d [\u0027new-trusted-cert-1\u0027, \u0027new-trusted-cert-2\u0027]"},{"line_number":3894,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":3895,"context_line":"            self.context, vm_state\u003dvm_states.ACTIVE, cell_name\u003d\u0027fake-cell\u0027,"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_a65970fd","line":3892,"range":{"start_line":3892,"start_character":8,"end_line":3892,"end_character":75},"updated":"2018-06-13 17:32:43.000000000","message":"nit: this doesn\u0027t really make sense since you can\u0027t create a volume-backed server with trusted certs, so you can\u0027t rebuild one either","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":3889,"context_line":"            get_flavor, instance_save, req_spec_get_by_inst_uuid,"},{"line_number":3890,"context_line":"            instance_is_volume_backed):"},{"line_number":3891,"context_line":"        orig_system_metadata \u003d {}"},{"line_number":3892,"context_line":"        orig_trusted_certs \u003d [\u0027orig-trusted-cert-1\u0027, \u0027orig-trusted-cert-2\u0027]"},{"line_number":3893,"context_line":"        new_trusted_certs \u003d [\u0027new-trusted-cert-1\u0027, \u0027new-trusted-cert-2\u0027]"},{"line_number":3894,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":3895,"context_line":"            self.context, vm_state\u003dvm_states.ACTIVE, cell_name\u003d\u0027fake-cell\u0027,"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_9dbcc2dc","line":3892,"range":{"start_line":3892,"start_character":8,"end_line":3892,"end_character":75},"in_reply_to":"5f7c97a3_a65970fd","updated":"2018-06-13 19:39:26.000000000","message":"Done","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":3894,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":3895,"context_line":"            self.context, vm_state\u003dvm_states.ACTIVE, cell_name\u003d\u0027fake-cell\u0027,"},{"line_number":3896,"context_line":"            launched_at\u003dtimeutils.utcnow(),"},{"line_number":3897,"context_line":"            system_metadata\u003dorig_system_metadata, image_ref\u003d\u0027foo\u0027,"},{"line_number":3898,"context_line":"            expected_attrs\u003d[\u0027system_metadata\u0027],"},{"line_number":3899,"context_line":"            trusted_certs\u003dorig_trusted_certs)"},{"line_number":3900,"context_line":"        get_flavor.return_value \u003d test_flavor.fake_flavor"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_860b14d3","line":3897,"range":{"start_line":3897,"start_character":50,"end_line":3897,"end_character":65},"updated":"2018-06-13 17:32:43.000000000","message":"nit: this would be None for a volume-backed instance","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":3894,"context_line":"        instance \u003d fake_instance.fake_instance_obj("},{"line_number":3895,"context_line":"            self.context, vm_state\u003dvm_states.ACTIVE, cell_name\u003d\u0027fake-cell\u0027,"},{"line_number":3896,"context_line":"            launched_at\u003dtimeutils.utcnow(),"},{"line_number":3897,"context_line":"            system_metadata\u003dorig_system_metadata, image_ref\u003d\u0027foo\u0027,"},{"line_number":3898,"context_line":"            expected_attrs\u003d[\u0027system_metadata\u0027],"},{"line_number":3899,"context_line":"            trusted_certs\u003dorig_trusted_certs)"},{"line_number":3900,"context_line":"        get_flavor.return_value \u003d test_flavor.fake_flavor"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_bdbf3ece","line":3897,"range":{"start_line":3897,"start_character":50,"end_line":3897,"end_character":65},"in_reply_to":"5f7c97a3_860b14d3","updated":"2018-06-13 19:39:26.000000000","message":"Done","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"0effdfbcc4537ba039f9875adf0e7ee569b6cb44","unresolved":false,"context_lines":[{"line_number":5845,"context_line":"            self.context, ids)"},{"line_number":5846,"context_line":"        self.assertEqual(ids, retrieved_certs.ids)"},{"line_number":5847,"context_line":""},{"line_number":5848,"context_line":"    @mock.patch(\u0027nova.objects.service.get_minimum_version_all_cells\u0027,"},{"line_number":5849,"context_line":"                return_value\u003dcompute_api.MIN_COMPUTE_TRUSTED_CERTS - 1)"},{"line_number":5850,"context_line":"    def test_retrieve_trusted_certs_object_old_compute(self, get_min_version):"},{"line_number":5851,"context_line":"        ids \u003d [\u0027trusted-cert-id\u0027]"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_a6273063","line":5848,"updated":"2018-06-13 17:32:43.000000000","message":"nit: probably need a similar test for rebuild where the compute is old","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"178e564bf66aa44af45bad1690c3d9c87c7aa66c","unresolved":false,"context_lines":[{"line_number":5845,"context_line":"            self.context, ids)"},{"line_number":5846,"context_line":"        self.assertEqual(ids, retrieved_certs.ids)"},{"line_number":5847,"context_line":""},{"line_number":5848,"context_line":"    @mock.patch(\u0027nova.objects.service.get_minimum_version_all_cells\u0027,"},{"line_number":5849,"context_line":"                return_value\u003dcompute_api.MIN_COMPUTE_TRUSTED_CERTS - 1)"},{"line_number":5850,"context_line":"    def test_retrieve_trusted_certs_object_old_compute(self, get_min_version):"},{"line_number":5851,"context_line":"        ids \u003d [\u0027trusted-cert-id\u0027]"}],"source_content_type":"text/x-python","patch_set":114,"id":"5f7c97a3_9ddda215","line":5848,"in_reply_to":"5f7c97a3_a6273063","updated":"2018-06-13 19:39:26.000000000","message":"Done","commit_id":"d849bc4a10b5115ce77f6227569653a9d61c0550"}],"nova/tests/unit/test_policy.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":376,"context_line":"\"os_compute_api:os-config-drive\","},{"line_number":377,"context_line":"\"os_compute_api:servers:confirm_resize\","},{"line_number":378,"context_line":"\"os_compute_api:servers:create\","},{"line_number":379,"context_line":"\"os_compute_api:servers:create:attach_network\","},{"line_number":380,"context_line":"\"os_compute_api:servers:create:attach_volume\","},{"line_number":381,"context_line":"\"os_compute_api:servers:create_image\","},{"line_number":382,"context_line":"\"os_compute_api:servers:delete\","},{"line_number":383,"context_line":"\"os_compute_api:servers:detail\","}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_832bdd31","line":380,"range":{"start_line":379,"start_character":0,"end_line":380,"end_character":46},"updated":"2018-06-04 13:59:33.000000000","message":"Put the create:trusted_certs one here.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":376,"context_line":"\"os_compute_api:os-config-drive\","},{"line_number":377,"context_line":"\"os_compute_api:servers:confirm_resize\","},{"line_number":378,"context_line":"\"os_compute_api:servers:create\","},{"line_number":379,"context_line":"\"os_compute_api:servers:create:attach_network\","},{"line_number":380,"context_line":"\"os_compute_api:servers:create:attach_volume\","},{"line_number":381,"context_line":"\"os_compute_api:servers:create_image\","},{"line_number":382,"context_line":"\"os_compute_api:servers:delete\","},{"line_number":383,"context_line":"\"os_compute_api:servers:detail\","}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_5099e8cd","line":380,"range":{"start_line":379,"start_character":0,"end_line":380,"end_character":46},"in_reply_to":"5f7c97a3_832bdd31","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":383,"context_line":"\"os_compute_api:servers:detail\","},{"line_number":384,"context_line":"\"os_compute_api:servers:index\","},{"line_number":385,"context_line":"\"os_compute_api:servers:reboot\","},{"line_number":386,"context_line":"\"os_compute_api:servers:rebuild\","},{"line_number":387,"context_line":"\"os_compute_api:servers:resize\","},{"line_number":388,"context_line":"\"os_compute_api:servers:revert_resize\","},{"line_number":389,"context_line":"\"os_compute_api:servers:show\","}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_4325c55b","line":386,"updated":"2018-06-04 13:59:33.000000000","message":"Put the rebuild:trusted_certs one here.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":383,"context_line":"\"os_compute_api:servers:detail\","},{"line_number":384,"context_line":"\"os_compute_api:servers:index\","},{"line_number":385,"context_line":"\"os_compute_api:servers:reboot\","},{"line_number":386,"context_line":"\"os_compute_api:servers:rebuild\","},{"line_number":387,"context_line":"\"os_compute_api:servers:resize\","},{"line_number":388,"context_line":"\"os_compute_api:servers:revert_resize\","},{"line_number":389,"context_line":"\"os_compute_api:servers:show\","}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_709e64b9","line":386,"in_reply_to":"5f7c97a3_4325c55b","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"}],"nova/tests/unit/virt/libvirt/test_driver.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":11000,"context_line":""},{"line_number":11001,"context_line":"        base_dir \u003d os.path.join(CONF.instances_path,"},{"line_number":11002,"context_line":"                                CONF.image_cache_subdirectory_name)"},{"line_number":11003,"context_line":"        trusted_certs \u003d objects.TrustedCerts("},{"line_number":11004,"context_line":"            ids\u003d[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"},{"line_number":11005,"context_line":"                 \u0027674736e3-f25c-405c-8362-bbf991e0ce0a\u0027])"},{"line_number":11006,"context_line":"        self.test_instance.update({\u0027user_id\u0027: \u0027fake-user\u0027,"},{"line_number":11007,"context_line":"                                   \u0027os_type\u0027: None,"},{"line_number":11008,"context_line":"                                   \u0027trusted_certs\u0027: trusted_certs,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_031fcd09","line":11005,"range":{"start_line":11003,"start_character":8,"end_line":11005,"end_character":57},"updated":"2018-06-04 13:59:33.000000000","message":"Is this a bad rebase? The libvirt test_driver module shouldn\u0027t be changing in the API patch.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":11000,"context_line":""},{"line_number":11001,"context_line":"        base_dir \u003d os.path.join(CONF.instances_path,"},{"line_number":11002,"context_line":"                                CONF.image_cache_subdirectory_name)"},{"line_number":11003,"context_line":"        trusted_certs \u003d objects.TrustedCerts("},{"line_number":11004,"context_line":"            ids\u003d[\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"},{"line_number":11005,"context_line":"                 \u0027674736e3-f25c-405c-8362-bbf991e0ce0a\u0027])"},{"line_number":11006,"context_line":"        self.test_instance.update({\u0027user_id\u0027: \u0027fake-user\u0027,"},{"line_number":11007,"context_line":"                                   \u0027os_type\u0027: None,"},{"line_number":11008,"context_line":"                                   \u0027trusted_certs\u0027: trusted_certs,"}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_72a7680d","line":11005,"range":{"start_line":11003,"start_character":8,"end_line":11005,"end_character":57},"in_reply_to":"5f7c97a3_031fcd09","updated":"2018-06-06 20:32:03.000000000","message":"I\u0027ve removed these changed from this patch, and put them in the libvirt patch instead.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"}],"nova/tests/unit/virt/libvirt/test_utils.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":613,"context_line":"        context \u003d \u0027opaque context\u0027"},{"line_number":614,"context_line":"        target \u003d \u0027/tmp/targetfile\u0027"},{"line_number":615,"context_line":"        image_id \u003d \u00274\u0027"},{"line_number":616,"context_line":"        trusted_certs \u003d [\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"},{"line_number":617,"context_line":"                         \u0027674736e3-f25c-405c-8362-bbf991e0ce0a\u0027]"},{"line_number":618,"context_line":"        libvirt_utils.fetch_image(context, target, image_id, trusted_certs)"},{"line_number":619,"context_line":"        mock_images.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_c318f51f","line":616,"updated":"2018-06-04 13:59:33.000000000","message":"same - why is this changing in this patch?","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":613,"context_line":"        context \u003d \u0027opaque context\u0027"},{"line_number":614,"context_line":"        target \u003d \u0027/tmp/targetfile\u0027"},{"line_number":615,"context_line":"        image_id \u003d \u00274\u0027"},{"line_number":616,"context_line":"        trusted_certs \u003d [\u00270b5d2c72-12cc-4ba6-a8d7-3ff5cc1d8cb8\u0027,"},{"line_number":617,"context_line":"                         \u0027674736e3-f25c-405c-8362-bbf991e0ce0a\u0027]"},{"line_number":618,"context_line":"        libvirt_utils.fetch_image(context, target, image_id, trusted_certs)"},{"line_number":619,"context_line":"        mock_images.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":101,"id":"5f7c97a3_929804cd","line":616,"in_reply_to":"5f7c97a3_c318f51f","updated":"2018-06-06 20:32:03.000000000","message":"I\u0027ve removed these changed from this patch, and put them in the libvirt patch instead.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"}],"releasenotes/notes/trusted-certs-microversion-589b75f0180d4d51.yaml":[{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"105bed3e69bce6d83286eecb64101f3e7de8fed5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.54 microversion adds support for the trusted_certificates"},{"line_number":5,"context_line":"    parameter, which is used to define a list of trusted certificates,"},{"line_number":6,"context_line":"    used during image signature verification both when a server is"},{"line_number":7,"context_line":"    created or rebuilt."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7f515b1d_44aa5fd2","line":7,"range":{"start_line":4,"start_character":26,"end_line":7,"end_character":23},"updated":"2017-09-25 18:21:27.000000000","message":"For consistency, match text in rest_api_version_history.rst:\n\n\"Adds support for the trusted_certificates parameter, which is used to define a list of trusted certificates that can be used during image signature verification, for both when a server is created or rebuilt.\"","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"e28c197ecf7c0f213abbcfe394fd50f5147b60ec","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.54 microversion adds support for the trusted_certificates"},{"line_number":5,"context_line":"    parameter, which is used to define a list of trusted certificates,"},{"line_number":6,"context_line":"    used during image signature verification both when a server is"},{"line_number":7,"context_line":"    created or rebuilt."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7f515b1d_5fbfc9cf","line":7,"range":{"start_line":4,"start_character":26,"end_line":7,"end_character":23},"in_reply_to":"7f515b1d_44aa5fd2","updated":"2017-09-25 20:42:17.000000000","message":"Done","commit_id":"fa50fe2494a9bec7b7c554e7344bc58a929bbf40"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"aa07dec3be7581cd091bdeb826ca84694dcd3e7e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.62 microversion adds support for the trusted_image_certificates"},{"line_number":5,"context_line":"    parameter to server create, rebuild, show, and list. This parameter is"},{"line_number":6,"context_line":"    used to define a list of trusted certificate IDs that can be used during"},{"line_number":7,"context_line":"    image signature verification and certificate validation. The list is"}],"source_content_type":"text/x-yaml","patch_set":85,"id":"9f6a8fd7_72d9a781","line":4,"updated":"2018-04-16 15:51:03.000000000","message":"Same comments as in the REST API version history doc changes.","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":24711,"name":"Jackie Truong","email":"jacklyn.truong@jhuapl.edu","username":"jackie-truong"},"change_message_id":"47ea9773d76c0298c3249e95f52a1c55c2d1739a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.62 microversion adds support for the trusted_image_certificates"},{"line_number":5,"context_line":"    parameter to server create, rebuild, show, and list. This parameter is"},{"line_number":6,"context_line":"    used to define a list of trusted certificate IDs that can be used during"},{"line_number":7,"context_line":"    image signature verification and certificate validation. The list is"}],"source_content_type":"text/x-yaml","patch_set":85,"id":"9f6a8fd7_8640bd09","line":4,"in_reply_to":"9f6a8fd7_72d9a781","updated":"2018-04-16 18:37:25.000000000","message":"Done","commit_id":"9aba91dd87134c8dd8411edab80f4a7d47ccdba5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.63 microversion adds support for the ``trusted_image_certificates``"},{"line_number":5,"context_line":"    parameter, which is used to define a list of trusted certificate IDs"}],"source_content_type":"text/x-yaml","patch_set":101,"id":"5f7c97a3_63dfa13a","line":2,"updated":"2018-06-04 13:59:33.000000000","message":"Should mention somewhere in here that this isn\u0027t supported with volume-backed servers.","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.63 microversion adds support for the ``trusted_image_certificates``"},{"line_number":5,"context_line":"    parameter, which is used to define a list of trusted certificate IDs"}],"source_content_type":"text/x-yaml","patch_set":101,"id":"5f7c97a3_72cf3629","line":2,"in_reply_to":"5f7c97a3_63dfa13a","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6911f79f655a84ed02f244d05622a5c38deda900","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.63 microversion adds support for the ``trusted_image_certificates``"},{"line_number":5,"context_line":"    parameter, which is used to define a list of trusted certificate IDs"},{"line_number":6,"context_line":"    that can be used during image signature verification and certificate"},{"line_number":7,"context_line":"    validation. The list is restricted to a maximum of 50 IDs."}],"source_content_type":"text/x-yaml","patch_set":101,"id":"5f7c97a3_e315f1e6","line":4,"range":{"start_line":4,"start_character":13,"end_line":4,"end_character":25},"updated":"2018-06-04 13:59:33.000000000","message":"nit: compute REST API microversion","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"1c953ab358682cb847718bcaf0dcd70ebd98507b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The 2.63 microversion adds support for the ``trusted_image_certificates``"},{"line_number":5,"context_line":"    parameter, which is used to define a list of trusted certificate IDs"},{"line_number":6,"context_line":"    that can be used during image signature verification and certificate"},{"line_number":7,"context_line":"    validation. The list is restricted to a maximum of 50 IDs."}],"source_content_type":"text/x-yaml","patch_set":101,"id":"5f7c97a3_d2c88a22","line":4,"range":{"start_line":4,"start_character":13,"end_line":4,"end_character":25},"in_reply_to":"5f7c97a3_e315f1e6","updated":"2018-06-06 20:32:03.000000000","message":"Done","commit_id":"9160580ac75e89299248425ffa27e116807ff5b0"}]}
