)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"change_message_id":"c1e43f23ff170adc2a81cbc63507cd4ae608dd4c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Michael Still \u003cmikal@stillhq.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-06-26 06:49:18 +1000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"New style vendordata support."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Work in progress."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3aaa91ec_aa09ea96","line":7,"updated":"2016-06-27 10:39:12.000000000","message":"Please add a *why* . The blueprint is not very useful here because there\u0027s no link to the mailing list discussion.","commit_id":"bde5f04e9dfc8033b0f13783b4c88eede2660e38"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":12,"context_line":"external REST server."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Things still to do:"},{"line_number":15,"context_line":"  - Documentation"},{"line_number":16,"context_line":"  - Support HTTP caching headers"},{"line_number":17,"context_line":"  - Cache vendordata responses"},{"line_number":18,"context_line":"  - Write vendordata documentation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3aaa91ec_9e5d3b18","line":15,"range":{"start_line":15,"start_character":4,"end_line":15,"end_character":17},"updated":"2016-07-01 18:55:08.000000000","message":"To be clear I\u0027m fine with this as a follow on change in Newton if this gets an FFE.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":12,"context_line":"external REST server."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Things still to do:"},{"line_number":15,"context_line":"  - Documentation"},{"line_number":16,"context_line":"  - Support HTTP caching headers"},{"line_number":17,"context_line":"  - Cache vendordata responses"},{"line_number":18,"context_line":"  - Write vendordata documentation"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1aa78d24_8d76b804","line":15,"range":{"start_line":15,"start_character":4,"end_line":15,"end_character":17},"in_reply_to":"3aaa91ec_9e5d3b18","updated":"2016-07-08 03:14:47.000000000","message":"Cool.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":16,"context_line":"  - Support HTTP caching headers"},{"line_number":17,"context_line":"  - Cache vendordata responses"},{"line_number":18,"context_line":"  - Write vendordata documentation"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Blueprint: vendordata-reboot"},{"line_number":21,"context_line":"Change-Id: I19c61a637a640a00f90c6bc8e82c38e7d4084493"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3aaa91ec_5eaab3d3","line":19,"updated":"2016-07-01 18:55:08.000000000","message":"- Functional in-tree test.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":16,"context_line":"  - Support HTTP caching headers"},{"line_number":17,"context_line":"  - Cache vendordata responses"},{"line_number":18,"context_line":"  - Write vendordata documentation"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Blueprint: vendordata-reboot"},{"line_number":21,"context_line":"Change-Id: I19c61a637a640a00f90c6bc8e82c38e7d4084493"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1aa78d24_cd772007","line":19,"in_reply_to":"3aaa91ec_5eaab3d3","updated":"2016-07-08 03:14:47.000000000","message":"Working on that now, but will add it to this list.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"}],"doc/api_samples/os-hypervisors/v2.33/hypervisors-detail-resp.json":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b9e6600068ea96061c70ad32aa08e8a2e1a91d09","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \"running_vms\": 0,"},{"line_number":34,"context_line":"            \"service\": {"},{"line_number":35,"context_line":"                \"host\": \"host1\","},{"line_number":36,"context_line":"                \"id\": 8,"},{"line_number":37,"context_line":"                \"disabled_reason\": null"},{"line_number":38,"context_line":"            },"},{"line_number":39,"context_line":"            \"vcpus\": 1,"}],"source_content_type":"application/json","patch_set":10,"id":"1aa78d24_fdb84a13","line":36,"updated":"2016-07-11 21:26:13.000000000","message":"Why is this in here? Rebase failure?","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \"running_vms\": 0,"},{"line_number":34,"context_line":"            \"service\": {"},{"line_number":35,"context_line":"                \"host\": \"host1\","},{"line_number":36,"context_line":"                \"id\": 8,"},{"line_number":37,"context_line":"                \"disabled_reason\": null"},{"line_number":38,"context_line":"            },"},{"line_number":39,"context_line":"            \"vcpus\": 1,"}],"source_content_type":"application/json","patch_set":10,"id":"1aa78d24_135d4715","line":36,"in_reply_to":"1aa78d24_fdb84a13","updated":"2016-07-21 17:06:23.000000000","message":"No, we\u0027re now running an extra service (metadata) in the test that verifies this.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"82c680e7d448c1d7f3e6c930962e8a5df844b962","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \"running_vms\": 0,"},{"line_number":34,"context_line":"            \"service\": {"},{"line_number":35,"context_line":"                \"host\": \"host1\","},{"line_number":36,"context_line":"                \"id\": 8,"},{"line_number":37,"context_line":"                \"disabled_reason\": null"},{"line_number":38,"context_line":"            },"},{"line_number":39,"context_line":"            \"vcpus\": 1,"}],"source_content_type":"application/json","patch_set":11,"id":"1aa78d24_b7551a51","line":36,"updated":"2016-07-12 13:53:48.000000000","message":"Why is this here?","commit_id":"ae1f869459ce932544564e0fa2be6d9d8a17ba47"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"1a788d1db37151430db1815bca8dea4dbe66a717","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \"running_vms\": 0,"},{"line_number":34,"context_line":"            \"service\": {"},{"line_number":35,"context_line":"                \"host\": \"host1\","},{"line_number":36,"context_line":"                \"id\": 8,"},{"line_number":37,"context_line":"                \"disabled_reason\": null"},{"line_number":38,"context_line":"            },"},{"line_number":39,"context_line":"            \"vcpus\": 1,"}],"source_content_type":"application/json","patch_set":11,"id":"dada55a8_77f25c07","line":36,"in_reply_to":"1aa78d24_b7551a51","updated":"2016-07-21 17:43:34.000000000","message":"So this was in the list of comments I failed to hit publish on, so I thought I\u0027d explained and you (presumably) felt ignored.\n\nThis gets bumped because the number of services changed -- we\u0027re now running metadata server as well, and that increased the ID of this service.","commit_id":"ae1f869459ce932544564e0fa2be6d9d8a17ba47"}],"doc/source/vendordata.rst":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"09c92e47cfc8c82d44b793d8ede9e2765d2cf16c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"TODO mikal"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3aaa91ec_717a8789","line":1,"updated":"2016-06-24 18:41:57.000000000","message":"TODO Before this patch merges, right?","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"30121e841ecd5f551d65e4a5222002754c8e0d9d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"TODO mikal"}],"source_content_type":"text/x-rst","patch_set":6,"id":"3aaa91ec_3bad679b","line":1,"in_reply_to":"3aaa91ec_717a8789","updated":"2016-06-25 20:20:25.000000000","message":"Yes, that was the original intent. I think mriedem was saying that the docs could land after the freeze, but I might have misunderstood him.","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f6569783f495f564f0fcf3f53c5b48c2315255af","unresolved":false,"context_lines":[{"line_number":1,"context_line":"TODO mikal"}],"source_content_type":"text/x-rst","patch_set":15,"id":"dada55a8_f2a670a9","line":1,"updated":"2016-07-27 11:11:48.000000000","message":"In many ways, I would rather we didn\u0027t merge this, but I want to see us move forward.","commit_id":"34b5ea5f4436d0d3376d02fe7336c0702cccbcf8"}],"nova/api/metadata/base.py":[{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"7429eb754ccd82e9e00e52528943361694e1234b","unresolved":false,"context_lines":[{"line_number":432,"context_line":""},{"line_number":433,"context_line":"            for provider in CONF.vendordata_providers:"},{"line_number":434,"context_line":"                if provider \u003d\u003d \u0027StaticJSON\u0027:"},{"line_number":435,"context_line":"                    continue"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"                j.update(self.vendordata_providers[provider].get())"},{"line_number":438,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_badc4d13","line":435,"range":{"start_line":435,"start_character":20,"end_line":435,"end_character":28},"updated":"2016-06-21 06:26:51.000000000","message":"why not add:\n\nj[\u0027static\u0027] \u003d self.vendordata_providers[\u0027StaticJSON\u0027].get()\n\nbefore the continue? That way you can get rid of the if statement above this.","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"30121e841ecd5f551d65e4a5222002754c8e0d9d","unresolved":false,"context_lines":[{"line_number":432,"context_line":""},{"line_number":433,"context_line":"            for provider in CONF.vendordata_providers:"},{"line_number":434,"context_line":"                if provider \u003d\u003d \u0027StaticJSON\u0027:"},{"line_number":435,"context_line":"                    continue"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"                j.update(self.vendordata_providers[provider].get())"},{"line_number":438,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_fb8d9f31","line":435,"range":{"start_line":435,"start_character":20,"end_line":435,"end_character":28},"in_reply_to":"5a9d85d2_badc4d13","updated":"2016-06-25 20:20:25.000000000","message":"Fair point.","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"09c92e47cfc8c82d44b793d8ede9e2765d2cf16c","unresolved":false,"context_lines":[{"line_number":434,"context_line":"                if provider \u003d\u003d \u0027StaticJSON\u0027:"},{"line_number":435,"context_line":"                    continue"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"                j.update(self.vendordata_providers[provider].get())"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"            return jsonutils.dump_as_bytes(j)"},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_5155cbc3","line":437,"updated":"2016-06-24 18:41:57.000000000","message":"This lets the providers update the static section if they want. Intentional?","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"30121e841ecd5f551d65e4a5222002754c8e0d9d","unresolved":false,"context_lines":[{"line_number":434,"context_line":"                if provider \u003d\u003d \u0027StaticJSON\u0027:"},{"line_number":435,"context_line":"                    continue"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"                j.update(self.vendordata_providers[provider].get())"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"            return jsonutils.dump_as_bytes(j)"},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_3b844709","line":437,"in_reply_to":"3aaa91ec_5155cbc3","updated":"2016-06-25 20:20:25.000000000","message":"Not intentional, and a good catch. I shall fix.","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        return path_handler(version, path)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"class VendorDataDriver(object):"},{"line_number":517,"context_line":"    \"\"\"The base VendorData Drivers should inherit from.\"\"\""},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_9efedbac","side":"PARENT","line":516,"range":{"start_line":516,"start_character":6,"end_line":516,"end_character":22},"updated":"2016-07-01 18:55:08.000000000","message":"Does this break anyone\u0027s out of tree vendor data driver? Do we at least need an alias for this?","commit_id":"99b6b0531ee1b7b3e8b0085454dc8863bd122bc6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c21746cacc738d6d5050a89b907c24b7349e844c","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        return path_handler(version, path)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"class VendorDataDriver(object):"},{"line_number":517,"context_line":"    \"\"\"The base VendorData Drivers should inherit from.\"\"\""},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_7a9bc066","side":"PARENT","line":516,"range":{"start_line":516,"start_character":6,"end_line":516,"end_character":22},"in_reply_to":"1aa78d24_4dda10eb","updated":"2016-07-11 21:19:07.000000000","message":"I\u0027d prefer an alias. Seems trivial to add one.","commit_id":"99b6b0531ee1b7b3e8b0085454dc8863bd122bc6"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        return path_handler(version, path)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"class VendorDataDriver(object):"},{"line_number":517,"context_line":"    \"\"\"The base VendorData Drivers should inherit from.\"\"\""},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_4dda10eb","side":"PARENT","line":516,"range":{"start_line":516,"start_character":6,"end_line":516,"end_character":22},"in_reply_to":"3aaa91ec_9efedbac","updated":"2016-07-08 03:14:47.000000000","message":"I obviously can\u0027t answer if it breaks anyone out of tree, although it would be a trivial fix for them. I can see two options -- covering it in the release note, or adding an alias. I think the first option is better than the second, but open to discussion.","commit_id":"99b6b0531ee1b7b3e8b0085454dc8863bd122bc6"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":62,"context_line":"GRIZZLY \u003d \u00272013-04-04\u0027"},{"line_number":63,"context_line":"HAVANA \u003d \u00272013-10-17\u0027"},{"line_number":64,"context_line":"LIBERTY \u003d \u00272015-10-15\u0027"},{"line_number":65,"context_line":"NEWTON \u003d \u00272016-04-30\u0027"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"OPENSTACK_VERSIONS \u003d ["},{"line_number":68,"context_line":"    FOLSOM,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_3e7a4778","line":65,"updated":"2016-07-01 18:55:08.000000000","message":"There is a merge conflict on this now because of the device tagging stuff that went in this week.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":62,"context_line":"GRIZZLY \u003d \u00272013-04-04\u0027"},{"line_number":63,"context_line":"HAVANA \u003d \u00272013-10-17\u0027"},{"line_number":64,"context_line":"LIBERTY \u003d \u00272015-10-15\u0027"},{"line_number":65,"context_line":"NEWTON \u003d \u00272016-04-30\u0027"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"OPENSTACK_VERSIONS \u003d ["},{"line_number":68,"context_line":"    FOLSOM,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_6d738c16","line":65,"in_reply_to":"3aaa91ec_3e7a4778","updated":"2016-07-08 03:14:47.000000000","message":"Fixed.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":431,"context_line":"                if provider \u003d\u003d \u0027StaticJSON\u0027:"},{"line_number":432,"context_line":"                    j[\u0027static\u0027] \u003d self.vendordata_providers[\u0027StaticJSON\u0027].get()"},{"line_number":433,"context_line":"                else:"},{"line_number":434,"context_line":"                    values \u003d self.vendordata_providers[provider].get()"},{"line_number":435,"context_line":"                    for key in list(values):"},{"line_number":436,"context_line":"                        if key in j:"},{"line_number":437,"context_line":"                            LOG.warning(_LW(\u0027Removing duplicate metadata key: \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_3e58878a","line":434,"range":{"start_line":434,"start_character":29,"end_line":434,"end_character":64},"updated":"2016-07-01 18:55:08.000000000","message":"We could have a KeyError here since nothing is enforcing the choices for CONF.vendordata_providers as a ListOpt. Maybe that\u0027s OK re: L423? We should have a unit test for this either way.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":434,"context_line":"                    values \u003d self.vendordata_providers[provider].get()"},{"line_number":435,"context_line":"                    for key in list(values):"},{"line_number":436,"context_line":"                        if key in j:"},{"line_number":437,"context_line":"                            LOG.warning(_LW(\u0027Removing duplicate metadata key: \u0027"},{"line_number":438,"context_line":"                                            \u0027%s\u0027), key, instance\u003dself.instance)"},{"line_number":439,"context_line":"                            del values[key]"},{"line_number":440,"context_line":"                    j.update(values)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_de334312","line":437,"updated":"2016-07-01 18:55:08.000000000","message":"We need a unit test for this case.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                if OPENSTACK_VERSIONS !\u003d versions:"},{"line_number":485,"context_line":"                    LOG.debug(\"future versions %s hidden in version list\","},{"line_number":486,"context_line":"                              [v for v in OPENSTACK_VERSIONS"},{"line_number":487,"context_line":"                               if v not in versions], instance\u003dself.instance)"},{"line_number":488,"context_line":"                versions +\u003d [\"latest\"]"},{"line_number":489,"context_line":"            else:"},{"line_number":490,"context_line":"                versions \u003d VERSIONS + [\"latest\"]"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_3e56c7ce","line":487,"range":{"start_line":487,"start_character":54,"end_line":487,"end_character":76},"updated":"2016-07-01 18:55:08.000000000","message":"unrelated","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c21746cacc738d6d5050a89b907c24b7349e844c","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                if OPENSTACK_VERSIONS !\u003d versions:"},{"line_number":485,"context_line":"                    LOG.debug(\"future versions %s hidden in version list\","},{"line_number":486,"context_line":"                              [v for v in OPENSTACK_VERSIONS"},{"line_number":487,"context_line":"                               if v not in versions], instance\u003dself.instance)"},{"line_number":488,"context_line":"                versions +\u003d [\"latest\"]"},{"line_number":489,"context_line":"            else:"},{"line_number":490,"context_line":"                versions \u003d VERSIONS + [\"latest\"]"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_fa705042","line":487,"range":{"start_line":487,"start_character":54,"end_line":487,"end_character":76},"in_reply_to":"1aa78d24_4d53306d","updated":"2016-07-11 21:19:07.000000000","message":"I noted it since you were going to be doing another patch set anyway.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":484,"context_line":"                if OPENSTACK_VERSIONS !\u003d versions:"},{"line_number":485,"context_line":"                    LOG.debug(\"future versions %s hidden in version list\","},{"line_number":486,"context_line":"                              [v for v in OPENSTACK_VERSIONS"},{"line_number":487,"context_line":"                               if v not in versions], instance\u003dself.instance)"},{"line_number":488,"context_line":"                versions +\u003d [\"latest\"]"},{"line_number":489,"context_line":"            else:"},{"line_number":490,"context_line":"                versions \u003d VERSIONS + [\"latest\"]"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_4d53306d","line":487,"range":{"start_line":487,"start_character":54,"end_line":487,"end_character":76},"in_reply_to":"3aaa91ec_3e56c7ce","updated":"2016-07-08 03:14:47.000000000","message":"True, but minor. Is it really worth another patch for this one?","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d46a2aac52e0ed4fc38b6a3fe7cc54de75b3d325","unresolved":false,"context_lines":[{"line_number":578,"context_line":"        return path_handler(version, path)"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":""},{"line_number":581,"context_line":"class VendorDataDriver(object):"},{"line_number":582,"context_line":"    \"\"\"The base VendorData Drivers should inherit from.\"\"\""},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    def __init__(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_1d91d6f1","side":"PARENT","line":581,"updated":"2016-07-11 21:50:27.000000000","message":"I still think it would be good to alias this, but if not, we need a release note with an upgrade impact.","commit_id":"ddbdabce0a47fbe63d83f7be971c00f5491e2d74"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d46a2aac52e0ed4fc38b6a3fe7cc54de75b3d325","unresolved":false,"context_lines":[{"line_number":63,"context_line":"GRIZZLY \u003d \u00272013-04-04\u0027"},{"line_number":64,"context_line":"HAVANA \u003d \u00272013-10-17\u0027"},{"line_number":65,"context_line":"LIBERTY \u003d \u00272015-10-15\u0027"},{"line_number":66,"context_line":"NEWTON \u003d \u00272016-06-30\u0027"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"OPENSTACK_VERSIONS \u003d ["},{"line_number":69,"context_line":"    FOLSOM,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_5d06bece","line":66,"updated":"2016-07-11 21:50:27.000000000","message":"Don\u0027t we need something new here? This version was really for the device tagging support. This is a new change, so it\u0027d be a different API version. Honestly I don\u0027t know how we\u0027ve handled these in the past and if we\u0027ve just been OK with lumping everything together in a single release, but it seems wrong.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":63,"context_line":"GRIZZLY \u003d \u00272013-04-04\u0027"},{"line_number":64,"context_line":"HAVANA \u003d \u00272013-10-17\u0027"},{"line_number":65,"context_line":"LIBERTY \u003d \u00272015-10-15\u0027"},{"line_number":66,"context_line":"NEWTON \u003d \u00272016-06-30\u0027"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"OPENSTACK_VERSIONS \u003d ["},{"line_number":69,"context_line":"    FOLSOM,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_f3debb6b","line":66,"in_reply_to":"1aa78d24_5d06bece","updated":"2016-07-21 17:06:23.000000000","message":"I don\u0027t think its ever really been discussed before -- we\u0027ve just lumped things per release. I\u0027m pretty sure that\u0027s how amazon (which this is copied off) does it too. The reality is that there are probably zero users for this version at the moment because cloud-init wont have caught up.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9c5a9b5a39bb0fd88f4e0862eb0a4f7cfdb61e54","unresolved":false,"context_lines":[{"line_number":63,"context_line":"GRIZZLY \u003d \u00272013-04-04\u0027"},{"line_number":64,"context_line":"HAVANA \u003d \u00272013-10-17\u0027"},{"line_number":65,"context_line":"LIBERTY \u003d \u00272015-10-15\u0027"},{"line_number":66,"context_line":"NEWTON \u003d \u00272016-06-30\u0027"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"OPENSTACK_VERSIONS \u003d ["},{"line_number":69,"context_line":"    FOLSOM,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_ae1dea63","line":66,"in_reply_to":"1aa78d24_5d06bece","updated":"2016-07-11 22:44:43.000000000","message":"This is effectively \"Latest as of NEWTON\". So yes, we can update this, but we still need to capture the 2016-06-30 revision in something.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9cb7ba33426ac0e5d331c154bc28f70a537a1a85","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                instance\u003dinstance, address\u003daddress,"},{"line_number":197,"context_line":"                extra_md\u003dextra_md, network_info\u003dnetwork_info),"},{"line_number":198,"context_line":"            \u0027DynamicJSON\u0027: vendordata_dynamic.DynamicVendorData("},{"line_number":199,"context_line":"                instance\u003dinstance, address\u003daddress,"},{"line_number":200,"context_line":"                network_info\u003dnetwork_info, context\u003drequest_context)"},{"line_number":201,"context_line":"        }"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def _route_configuration(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_78bbc8e5","line":200,"range":{"start_line":199,"start_character":35,"end_line":200,"end_character":41},"updated":"2016-07-11 21:58:37.000000000","message":"These aren\u0027t used, but should they be?\n\nAlso, why wouldn\u0027t we pass extra_md to the DynamicJSON driver? I\u0027m not even sure what\u0027s in it honestly.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dff93d271d59ed470ac079c16343a9ce0c17eaeb","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                instance\u003dinstance, address\u003daddress,"},{"line_number":197,"context_line":"                extra_md\u003dextra_md, network_info\u003dnetwork_info),"},{"line_number":198,"context_line":"            \u0027DynamicJSON\u0027: vendordata_dynamic.DynamicVendorData("},{"line_number":199,"context_line":"                instance\u003dinstance, address\u003daddress,"},{"line_number":200,"context_line":"                network_info\u003dnetwork_info, context\u003drequest_context)"},{"line_number":201,"context_line":"        }"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def _route_configuration(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_1764eeb6","line":200,"range":{"start_line":199,"start_character":35,"end_line":200,"end_character":41},"in_reply_to":"1aa78d24_588ecc2e","updated":"2016-07-12 13:40:08.000000000","message":"Nevermind, extra_md and network_info are in the openstack metadata route, so if someone needs them they can get them from there.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f8c3ba731ae6f0fc7b2c93c7d763e96518d78416","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                instance\u003dinstance, address\u003daddress,"},{"line_number":197,"context_line":"                extra_md\u003dextra_md, network_info\u003dnetwork_info),"},{"line_number":198,"context_line":"            \u0027DynamicJSON\u0027: vendordata_dynamic.DynamicVendorData("},{"line_number":199,"context_line":"                instance\u003dinstance, address\u003daddress,"},{"line_number":200,"context_line":"                network_info\u003dnetwork_info, context\u003drequest_context)"},{"line_number":201,"context_line":"        }"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def _route_configuration(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_588ecc2e","line":200,"range":{"start_line":199,"start_character":35,"end_line":200,"end_character":41},"in_reply_to":"1aa78d24_78bbc8e5","updated":"2016-07-12 13:31:51.000000000","message":"Looks like extra_md only ever contains \u0027admin_pass\u0027 right now, maybe we should just pass that explicitly if it\u0027s given to us - but then we can version it if we wanted to expose new things to the vendor data driver via what the virt driver is giving us in extra_md.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                instance\u003dinstance, address\u003daddress,"},{"line_number":197,"context_line":"                extra_md\u003dextra_md, network_info\u003dnetwork_info),"},{"line_number":198,"context_line":"            \u0027DynamicJSON\u0027: vendordata_dynamic.DynamicVendorData("},{"line_number":199,"context_line":"                instance\u003dinstance, address\u003daddress,"},{"line_number":200,"context_line":"                network_info\u003dnetwork_info, context\u003drequest_context)"},{"line_number":201,"context_line":"        }"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def _route_configuration(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_d3c29f84","line":200,"range":{"start_line":199,"start_character":35,"end_line":200,"end_character":41},"in_reply_to":"1aa78d24_78bbc8e5","updated":"2016-07-21 17:06:23.000000000","message":"Per the comment above, the admin password is in extra_md. I didn\u0027t want to hand that to an external service.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d46a2aac52e0ed4fc38b6a3fe7cc54de75b3d325","unresolved":false,"context_lines":[{"line_number":486,"context_line":"        raise KeyError(path)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _vendor_data2(self, version, path):"},{"line_number":489,"context_line":"        if self._check_os_version(NEWTON, version):"},{"line_number":490,"context_line":"            self.set_mimetype(MIME_TYPE_APPLICATION_JSON)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"            j \u003d {}"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_fd14cae9","line":489,"range":{"start_line":489,"start_character":34,"end_line":489,"end_character":40},"updated":"2016-07-11 21:50:27.000000000","message":"I think this has to change.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3be74f41a7fc1a5a0e5ba693ad2bb9e717abbac6","unresolved":false,"context_lines":[{"line_number":486,"context_line":"        raise KeyError(path)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _vendor_data2(self, version, path):"},{"line_number":489,"context_line":"        if self._check_os_version(NEWTON, version):"},{"line_number":490,"context_line":"            self.set_mimetype(MIME_TYPE_APPLICATION_JSON)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"            j \u003d {}"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_0ec35e58","line":489,"range":{"start_line":489,"start_character":34,"end_line":489,"end_character":40},"in_reply_to":"1aa78d24_8e590e38","updated":"2016-07-11 22:58:49.000000000","message":"Well, mikal pointed out that we end up with version explosion in this case (for as often as we add things to metadata, which is not very often). This is not a problem, IMHO, except where it comes to configdrive which will emit all possible versions.\n\nHistorically we\u0027ve not bumped this but once per release, so I think he\u0027s doing the conventional thing here. The configdrive thing above is kindof \"our problem\", but we are working in the confines of ec2 metadata here.\n\nSo, meh, let\u0027s do the thing we\u0027ve been doing here and not delay or redesign this at the last minute on this particular thing.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9c5a9b5a39bb0fd88f4e0862eb0a4f7cfdb61e54","unresolved":false,"context_lines":[{"line_number":486,"context_line":"        raise KeyError(path)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _vendor_data2(self, version, path):"},{"line_number":489,"context_line":"        if self._check_os_version(NEWTON, version):"},{"line_number":490,"context_line":"            self.set_mimetype(MIME_TYPE_APPLICATION_JSON)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"            j \u003d {}"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_8e590e38","line":489,"range":{"start_line":489,"start_character":34,"end_line":489,"end_character":40},"in_reply_to":"1aa78d24_fd14cae9","updated":"2016-07-11 22:44:43.000000000","message":"I think _this_ stays the same. I think we need to move NEWTON forward and change the device tagging stuff to check against 2016-06-30, not NEWTON.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":486,"context_line":"        raise KeyError(path)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"    def _vendor_data2(self, version, path):"},{"line_number":489,"context_line":"        if self._check_os_version(NEWTON, version):"},{"line_number":490,"context_line":"            self.set_mimetype(MIME_TYPE_APPLICATION_JSON)"},{"line_number":491,"context_line":""},{"line_number":492,"context_line":"            j \u003d {}"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_d349ff32","line":489,"range":{"start_line":489,"start_character":34,"end_line":489,"end_character":40},"in_reply_to":"1aa78d24_fd14cae9","updated":"2016-07-21 17:06:23.000000000","message":"See my reply above. That\u0027s not how we\u0027ve done it in the past and I think it would probably be confusing to users of metadata. Perhaps we need to discuss that in person, but we\u0027re running out of time.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d46a2aac52e0ed4fc38b6a3fe7cc54de75b3d325","unresolved":false,"context_lines":[{"line_number":497,"context_line":"                    values \u003d self.vendordata_providers[provider].get()"},{"line_number":498,"context_line":"                    for key in list(values):"},{"line_number":499,"context_line":"                        if key in j:"},{"line_number":500,"context_line":"                            LOG.warning(_LW(\u0027Removing duplicate metadata key: \u0027"},{"line_number":501,"context_line":"                                            \u0027%s\u0027), key, instance\u003dself.instance)"},{"line_number":502,"context_line":"                            del values[key]"},{"line_number":503,"context_line":"                    j.update(values)"},{"line_number":504,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_bd524265","line":501,"range":{"start_line":500,"start_character":28,"end_line":501,"end_character":79},"updated":"2016-07-11 21:50:27.000000000","message":"TODO: need a unit test for this.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":497,"context_line":"                    values \u003d self.vendordata_providers[provider].get()"},{"line_number":498,"context_line":"                    for key in list(values):"},{"line_number":499,"context_line":"                        if key in j:"},{"line_number":500,"context_line":"                            LOG.warning(_LW(\u0027Removing duplicate metadata key: \u0027"},{"line_number":501,"context_line":"                                            \u0027%s\u0027), key, instance\u003dself.instance)"},{"line_number":502,"context_line":"                            del values[key]"},{"line_number":503,"context_line":"                    j.update(values)"},{"line_number":504,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_335323e4","line":501,"range":{"start_line":500,"start_character":28,"end_line":501,"end_character":79},"in_reply_to":"1aa78d24_bd524265","updated":"2016-07-21 17:06:23.000000000","message":"Sure, I will add it to the todo list.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d46a2aac52e0ed4fc38b6a3fe7cc54de75b3d325","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                path \u003d \u0027openstack/%s/%s\u0027 % (version, NW_JSON_NAME)"},{"line_number":602,"context_line":"                yield (path, self.lookup(path))"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"            if self._check_version(NEWTON, version, ALL_OPENSTACK_VERSIONS):"},{"line_number":605,"context_line":"                path \u003d \u0027openstack/%s/%s\u0027 % (version, VD2_JSON_NAME)"},{"line_number":606,"context_line":"                yield (path, self.lookup(path))"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_9d578659","line":604,"range":{"start_line":604,"start_character":35,"end_line":604,"end_character":41},"updated":"2016-07-11 21:50:27.000000000","message":"ditto","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":601,"context_line":"                path \u003d \u0027openstack/%s/%s\u0027 % (version, NW_JSON_NAME)"},{"line_number":602,"context_line":"                yield (path, self.lookup(path))"},{"line_number":603,"context_line":""},{"line_number":604,"context_line":"            if self._check_version(NEWTON, version, ALL_OPENSTACK_VERSIONS):"},{"line_number":605,"context_line":"                path \u003d \u0027openstack/%s/%s\u0027 % (version, VD2_JSON_NAME)"},{"line_number":606,"context_line":"                yield (path, self.lookup(path))"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_b35553c3","line":604,"range":{"start_line":604,"start_character":35,"end_line":604,"end_character":41},"in_reply_to":"1aa78d24_9d578659","updated":"2016-07-21 17:06:23.000000000","message":"See above.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"82c680e7d448c1d7f3e6c930962e8a5df844b962","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \u00272009-04-04\u0027,"},{"line_number":60,"context_line":"]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"FOLSOM \u003d \u00272012-08-10\u0027"},{"line_number":63,"context_line":"GRIZZLY \u003d \u00272013-04-04\u0027"},{"line_number":64,"context_line":"HAVANA \u003d \u00272013-10-17\u0027"},{"line_number":65,"context_line":"LIBERTY \u003d \u00272015-10-15\u0027"},{"line_number":66,"context_line":"NEWTON \u003d \u00272016-06-30\u0027"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"OPENSTACK_VERSIONS \u003d ["},{"line_number":69,"context_line":"    FOLSOM,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_3a00ef00","line":66,"range":{"start_line":62,"start_character":0,"end_line":66,"end_character":21},"updated":"2016-07-12 13:53:48.000000000","message":"I think we should change the NEWTON version to 2016-10-06, the other version dates here are release dates for those releases, see:\n\nhttp://releases.openstack.org/\n\nWhich makes more sense if you\u0027re bundling all changes to metadata within a single release into a single version.","commit_id":"ae1f869459ce932544564e0fa2be6d9d8a17ba47"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"1a788d1db37151430db1815bca8dea4dbe66a717","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    \u00272009-04-04\u0027,"},{"line_number":60,"context_line":"]"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"FOLSOM \u003d \u00272012-08-10\u0027"},{"line_number":63,"context_line":"GRIZZLY \u003d \u00272013-04-04\u0027"},{"line_number":64,"context_line":"HAVANA \u003d \u00272013-10-17\u0027"},{"line_number":65,"context_line":"LIBERTY \u003d \u00272015-10-15\u0027"},{"line_number":66,"context_line":"NEWTON \u003d \u00272016-06-30\u0027"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"OPENSTACK_VERSIONS \u003d ["},{"line_number":69,"context_line":"    FOLSOM,"}],"source_content_type":"text/x-python","patch_set":11,"id":"dada55a8_52848609","line":66,"range":{"start_line":62,"start_character":0,"end_line":66,"end_character":21},"in_reply_to":"1aa78d24_3a00ef00","updated":"2016-07-21 17:43:34.000000000","message":"Done","commit_id":"ae1f869459ce932544564e0fa2be6d9d8a17ba47"},{"author":{"_account_id":7662,"name":"Rob Crittenden","email":"rcritten@redhat.com","username":"rcritten"},"change_message_id":"167ce1a2b4f2376a12456f297a16d261fcf471da","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            vdclass \u003d vd_driver"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        self.vddriver \u003d vdclass(instance\u003dinstance, address\u003daddress,"},{"line_number":186,"context_line":"                                extra_md\u003dextra_md, network_info\u003dnetwork_info)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        self.route_configuration \u003d None"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_fc0de33e","line":186,"updated":"2016-07-12 03:32:18.000000000","message":"You pass extra_md here but this isn\u0027t an argument in vendordata_dynamic.py::DynamicVendorData.__init__().","commit_id":"ae1f869459ce932544564e0fa2be6d9d8a17ba47"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"82c680e7d448c1d7f3e6c930962e8a5df844b962","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            vdclass \u003d vd_driver"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        self.vddriver \u003d vdclass(instance\u003dinstance, address\u003daddress,"},{"line_number":186,"context_line":"                                extra_md\u003dextra_md, network_info\u003dnetwork_info)"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"        self.route_configuration \u003d None"},{"line_number":189,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_5a221ba4","line":186,"in_reply_to":"1aa78d24_fc0de33e","updated":"2016-07-12 13:53:48.000000000","message":"This is legacy for the existing vendor data driver.","commit_id":"ae1f869459ce932544564e0fa2be6d9d8a17ba47"}],"nova/api/metadata/vendordata.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2010 United States Government as represented by the"},{"line_number":2,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_ded5031c","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":22},"updated":"2016-07-01 18:55:08.000000000","message":"Do we really need a 2010 copyright from NASA? I\u0027m assuming you\u0027re being a stickler for moving this code that was added under the original copyright, as you\u0027re wont to do. That\u0027s OK then.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2010 United States Government as represented by the"},{"line_number":2,"context_line":"# Administrator of the National Aeronautics and Space Administration."},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_6de1cc9a","line":3,"range":{"start_line":1,"start_character":0,"end_line":3,"end_character":22},"in_reply_to":"3aaa91ec_ded5031c","updated":"2016-07-08 03:14:47.000000000","message":"Yeah, this is just a forklift of the code, so I do think we need to copy the copyright statement.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# NOTE(mikal): the definition of this base object was moved here to resolve"},{"line_number":18,"context_line":"# circular dependancies in the base API."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_beef57e8","line":17,"updated":"2016-07-01 18:55:08.000000000","message":"OK, so back to my question about this in the other module, wouldn\u0027t this break out of tree VD drivers? Maybe it\u0027s not avoidable?","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c21746cacc738d6d5050a89b907c24b7349e844c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# NOTE(mikal): the definition of this base object was moved here to resolve"},{"line_number":18,"context_line":"# circular dependancies in the base API."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_5adec411","line":17,"in_reply_to":"1aa78d24_0de768ad","updated":"2016-07-11 21:19:07.000000000","message":"\"Also, presumably we\u0027re deprecating this interface at some point, right? Shall we start the timer with this move?\"\n\nI don\u0027t have an immediate answer to that. It seems odd to go to all of this trouble to add an API for this just to deprecate it right away.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# NOTE(mikal): the definition of this base object was moved here to resolve"},{"line_number":18,"context_line":"# circular dependancies in the base API."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_0de768ad","line":17,"in_reply_to":"1aa78d24_23aa4c85","updated":"2016-07-08 03:14:47.000000000","message":"So, couldn\u0027t we handle this change in the release notes?","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ce0ac6a4b8e9566e563b935246998d6d3cbdde38","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# NOTE(mikal): the definition of this base object was moved here to resolve"},{"line_number":18,"context_line":"# circular dependancies in the base API."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_23aa4c85","line":17,"in_reply_to":"3aaa91ec_beef57e8","updated":"2016-07-07 18:06:45.000000000","message":"I\u0027m not sure it\u0027s that important, TBH. It\u0027s unfortunate, but if they\u0027re writing code to barf up things into metadata they can probably handle it. I\u0027m not _too_ concerned about it. Also, presumably we\u0027re deprecating this interface at some point, right? Shall we start the timer with this move?","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ce0ac6a4b8e9566e563b935246998d6d3cbdde38","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# NOTE(mikal): the definition of this base object was moved here to resolve"},{"line_number":18,"context_line":"# circular dependancies in the base API."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class VendorDataDriver(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_83006003","line":18,"range":{"start_line":18,"start_character":11,"end_line":18,"end_character":23},"updated":"2016-07-07 18:06:45.000000000","message":"\"dependencies\"","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# NOTE(mikal): the definition of this base object was moved here to resolve"},{"line_number":18,"context_line":"# circular dependancies in the base API."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class VendorDataDriver(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_8dfb5847","line":18,"range":{"start_line":18,"start_character":11,"end_line":18,"end_character":23},"in_reply_to":"1aa78d24_83006003","updated":"2016-07-08 03:14:47.000000000","message":"Fixed.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def get(self):"},{"line_number":29,"context_line":"        \"\"\"Return a dictionary of primitives to be rendered in metadata"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        :return: A dictionary or primitives."},{"line_number":32,"context_line":"        \"\"\""},{"line_number":33,"context_line":"        return self._data"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_feb71ff6","line":31,"range":{"start_line":31,"start_character":30,"end_line":31,"end_character":32},"updated":"2016-07-01 18:55:08.000000000","message":"of - if we\u0027re going to move this anyway.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d46a2aac52e0ed4fc38b6a3fe7cc54de75b3d325","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def get(self):"},{"line_number":29,"context_line":"        \"\"\"Return a dictionary of primitives to be rendered in metadata"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        :return: A dictionary or primitives."},{"line_number":32,"context_line":"        \"\"\""},{"line_number":33,"context_line":"        return self._data"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_3dd93258","line":31,"range":{"start_line":31,"start_character":30,"end_line":31,"end_character":32},"updated":"2016-07-11 21:50:27.000000000","message":"of","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def get(self):"},{"line_number":29,"context_line":"        \"\"\"Return a dictionary of primitives to be rendered in metadata"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        :return: A dictionary or primitives."},{"line_number":32,"context_line":"        \"\"\""},{"line_number":33,"context_line":"        return self._data"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_732dab45","line":31,"range":{"start_line":31,"start_character":30,"end_line":31,"end_character":32},"in_reply_to":"1aa78d24_3dd93258","updated":"2016-07-21 17:06:23.000000000","message":"Done","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"82c680e7d448c1d7f3e6c930962e8a5df844b962","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# NOTE(mikal): the definition of this base object was moved here to resolve"},{"line_number":18,"context_line":"# circular dependencies in the base API."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class VendorDataDriver(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_3aeaaf0f","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":40},"updated":"2016-07-12 13:53:48.000000000","message":"We can probably remove this and just make it a note in the commit message, and if we\u0027re not going to alias it, then add a release note with an upgrade impact.","commit_id":"ae1f869459ce932544564e0fa2be6d9d8a17ba47"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"1a788d1db37151430db1815bca8dea4dbe66a717","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# NOTE(mikal): the definition of this base object was moved here to resolve"},{"line_number":18,"context_line":"# circular dependencies in the base API."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class VendorDataDriver(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"dada55a8_97cc308a","line":18,"range":{"start_line":17,"start_character":0,"end_line":18,"end_character":40},"in_reply_to":"1aa78d24_3aeaaf0f","updated":"2016-07-21 17:43:34.000000000","message":"Done","commit_id":"ae1f869459ce932544564e0fa2be6d9d8a17ba47"}],"nova/api/metadata/vendordata_dynamic.py":[{"author":{"_account_id":7662,"name":"Rob Crittenden","email":"rcritten@redhat.com","username":"rcritten"},"change_message_id":"8a87cbcb9d2ddb4e9733307117c81ea2e6effc26","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            body \u003d {\u0027project-id\u0027: self.instance.project_id,"},{"line_number":54,"context_line":"                    \u0027instance-id\u0027: self.instance.uuid,"},{"line_number":55,"context_line":"                    \u0027image-id\u0027: self.instance.image_ref,"},{"line_number":56,"context_line":"                    \u0027user-data\u0027: base64.b64decode(self.instance.user_data)}"},{"line_number":57,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":58,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":59,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_117bb57c","line":56,"updated":"2016-06-16 16:05:08.000000000","message":"will fail if self.instance.user_data is None\n\nI also need:\n\n+                    \u0027hostname\u0027: self.instance.hostname,\n+                    \u0027metadata\u0027: self.instance.metadata,\n+                    \u0027system_metadata\u0027: self.instance.system_metadata,","commit_id":"62eb3ef1140f3c974765cf49a8e7970e708769db"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"93f7f27725c8440c7b5e69f83e9d97b02032dc11","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            body \u003d {\u0027project-id\u0027: self.instance.project_id,"},{"line_number":54,"context_line":"                    \u0027instance-id\u0027: self.instance.uuid,"},{"line_number":55,"context_line":"                    \u0027image-id\u0027: self.instance.image_ref,"},{"line_number":56,"context_line":"                    \u0027user-data\u0027: base64.b64decode(self.instance.user_data)}"},{"line_number":57,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":58,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":59,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a9d85d2_083f1fd7","line":56,"in_reply_to":"7aa08908_117bb57c","updated":"2016-06-21 02:29:04.000000000","message":"Done","commit_id":"62eb3ef1140f3c974765cf49a8e7970e708769db"},{"author":{"_account_id":7662,"name":"Rob Crittenden","email":"rcritten@redhat.com","username":"rcritten"},"change_message_id":"8a87cbcb9d2ddb4e9733307117c81ea2e6effc26","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            timeout \u003d (CONF.vendordata_dynamic_connect_timeout,"},{"line_number":70,"context_line":"                       CONF.vendordata_dynamic_read_timeout)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            res \u003d requests.request(\u0027POST\u0027, url, data\u003dbody, headers\u003dheaders,"},{"line_number":73,"context_line":"                                   verify\u003dverify, timeout\u003dtimeout)"},{"line_number":74,"context_line":"            if res.status_code in (requests.codes.OK,"},{"line_number":75,"context_line":"                                   requests.codes.CREATED,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_d103edbc","line":72,"updated":"2016-06-16 16:05:08.000000000","message":"You set content-type to application/json but you aren\u0027t sending JSON-encoded data. I think something like this is needed:\n\nbody \u003d jsonutils.dumps(body)","commit_id":"62eb3ef1140f3c974765cf49a8e7970e708769db"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"93f7f27725c8440c7b5e69f83e9d97b02032dc11","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            timeout \u003d (CONF.vendordata_dynamic_connect_timeout,"},{"line_number":70,"context_line":"                       CONF.vendordata_dynamic_read_timeout)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            res \u003d requests.request(\u0027POST\u0027, url, data\u003dbody, headers\u003dheaders,"},{"line_number":73,"context_line":"                                   verify\u003dverify, timeout\u003dtimeout)"},{"line_number":74,"context_line":"            if res.status_code in (requests.codes.OK,"},{"line_number":75,"context_line":"                                   requests.codes.CREATED,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a9d85d2_882b0f94","line":72,"in_reply_to":"7aa08908_d103edbc","updated":"2016-06-21 02:29:04.000000000","message":"Done","commit_id":"62eb3ef1140f3c974765cf49a8e7970e708769db"},{"author":{"_account_id":7662,"name":"Rob Crittenden","email":"rcritten@redhat.com","username":"rcritten"},"change_message_id":"8a87cbcb9d2ddb4e9733307117c81ea2e6effc26","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                # sensible form of caching here."},{"line_number":80,"context_line":"                return jsonutils.loads(res.text)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        except (TypeError, ValueError, requests.exceptions.RequestError,"},{"line_number":83,"context_line":"                requests.exceptions.SSLError) as e:"},{"line_number":84,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":85,"context_line":"                LOG.warning(_LW(\u0027Error from dynamic vendordata service \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"7aa08908_31a991de","line":82,"updated":"2016-06-16 16:05:08.000000000","message":"should be requests.exceptions.RequestException","commit_id":"62eb3ef1140f3c974765cf49a8e7970e708769db"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"93f7f27725c8440c7b5e69f83e9d97b02032dc11","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                # sensible form of caching here."},{"line_number":80,"context_line":"                return jsonutils.loads(res.text)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        except (TypeError, ValueError, requests.exceptions.RequestError,"},{"line_number":83,"context_line":"                requests.exceptions.SSLError) as e:"},{"line_number":84,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":85,"context_line":"                LOG.warning(_LW(\u0027Error from dynamic vendordata service \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a9d85d2_c81b577f","line":82,"in_reply_to":"7aa08908_31a991de","updated":"2016-06-21 02:29:04.000000000","message":"Done","commit_id":"62eb3ef1140f3c974765cf49a8e7970e708769db"},{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"7429eb754ccd82e9e00e52528943361694e1234b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    return {"},{"line_number":34,"context_line":"        \u0027X-Auth-Token\u0027: getattr(context, \u0027auth_token\u0027, None),"},{"line_number":35,"context_line":"        \u0027X-User-Id\u0027: getattr(context, \u0027user\u0027, None),"},{"line_number":36,"context_line":"        \u0027X-Tenant-Id\u0027: getattr(context, \u0027tenant\u0027, None),"},{"line_number":37,"context_line":"        \u0027X-Roles\u0027: \u0027,\u0027.join(getattr(context, \u0027roles\u0027, [])),"},{"line_number":38,"context_line":"        \u0027X-Identity-Status\u0027: status,"},{"line_number":39,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_3aacdd9f","line":36,"range":{"start_line":36,"start_character":9,"end_line":36,"end_character":56},"updated":"2016-06-21 06:26:51.000000000","message":"wouldn\u0027t X-Project-Id be needed here instead?","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"30121e841ecd5f551d65e4a5222002754c8e0d9d","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    return {"},{"line_number":34,"context_line":"        \u0027X-Auth-Token\u0027: getattr(context, \u0027auth_token\u0027, None),"},{"line_number":35,"context_line":"        \u0027X-User-Id\u0027: getattr(context, \u0027user\u0027, None),"},{"line_number":36,"context_line":"        \u0027X-Tenant-Id\u0027: getattr(context, \u0027tenant\u0027, None),"},{"line_number":37,"context_line":"        \u0027X-Roles\u0027: \u0027,\u0027.join(getattr(context, \u0027roles\u0027, [])),"},{"line_number":38,"context_line":"        \u0027X-Identity-Status\u0027: status,"},{"line_number":39,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_1b7cebea","line":36,"range":{"start_line":36,"start_character":9,"end_line":36,"end_character":56},"in_reply_to":"5a9d85d2_3aacdd9f","updated":"2016-06-25 20:20:25.000000000","message":"Done","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"09c92e47cfc8c82d44b793d8ede9e2765d2cf16c","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"            tokens \u003d target.split(\u0027@\u0027)"},{"line_number":106,"context_line":"            name \u003d tokens[0]"},{"line_number":107,"context_line":"            url \u003d \u0027@\u0027.join(tokens[1:])"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"            j[name] \u003d self._do_request(name, url)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_519f8b5e","line":107,"updated":"2016-06-24 18:41:57.000000000","message":"Can you comment your thought process on the (apparent) encoding of this value?","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"30121e841ecd5f551d65e4a5222002754c8e0d9d","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"            tokens \u003d target.split(\u0027@\u0027)"},{"line_number":106,"context_line":"            name \u003d tokens[0]"},{"line_number":107,"context_line":"            url \u003d \u0027@\u0027.join(tokens[1:])"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"            j[name] \u003d self._do_request(name, url)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_fb659f44","line":107,"in_reply_to":"3aaa91ec_519f8b5e","updated":"2016-06-25 20:20:25.000000000","message":"So, this is documented in the spec but I do think its worth a comment here, so I will add one now.","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":7662,"name":"Rob Crittenden","email":"rcritten@redhat.com","username":"rcritten"},"change_message_id":"1f8de156e7ce6456f6cb27a4d2f89f4cf54d0e8c","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":"            tokens \u003d target.split(\u0027@\u0027)"},{"line_number":106,"context_line":"            name \u003d tokens[0]"},{"line_number":107,"context_line":"            url \u003d \u0027@\u0027.join(tokens[1:])"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"            j[name] \u003d self._do_request(name, url)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_9e1c1bc3","line":107,"in_reply_to":"3aaa91ec_fb659f44","updated":"2016-06-27 16:01:58.000000000","message":"Note that @ is already used in this context by the HTTP spec to specify basic authentication for a URL.","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"09c92e47cfc8c82d44b793d8ede9e2765d2cf16c","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            name \u003d tokens[0]"},{"line_number":107,"context_line":"            url \u003d \u0027@\u0027.join(tokens[1:])"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"            j[name] \u003d self._do_request(name, url)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        return j"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_71956731","line":109,"updated":"2016-06-24 18:41:57.000000000","message":"Ah, so I guess they\u0027re mostly confined to their namespace, so, nevermind.","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    return {"},{"line_number":34,"context_line":"        \u0027X-Auth-Token\u0027: getattr(context, \u0027auth_token\u0027, None),"},{"line_number":35,"context_line":"        \u0027X-User-Id\u0027: getattr(context, \u0027user\u0027, None),"},{"line_number":36,"context_line":"        \u0027X-Project-Id\u0027: getattr(context, \u0027tenant\u0027, None),"},{"line_number":37,"context_line":"        \u0027X-Roles\u0027: \u0027,\u0027.join(getattr(context, \u0027roles\u0027, [])),"},{"line_number":38,"context_line":"        \u0027X-Identity-Status\u0027: status,"},{"line_number":39,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_7ec84f57","line":36,"range":{"start_line":36,"start_character":9,"end_line":36,"end_character":21},"updated":"2016-07-01 18:55:08.000000000","message":"Looks like this was just copied from how we create the internal glance client wrapper, but that uses X-Tenant-Id, is there any difference, i.e. keystone v2 vs v3? Or is X-Tenant-Id deprecated and everything should be able to handle X-Project-Id?","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    return {"},{"line_number":34,"context_line":"        \u0027X-Auth-Token\u0027: getattr(context, \u0027auth_token\u0027, None),"},{"line_number":35,"context_line":"        \u0027X-User-Id\u0027: getattr(context, \u0027user\u0027, None),"},{"line_number":36,"context_line":"        \u0027X-Project-Id\u0027: getattr(context, \u0027tenant\u0027, None),"},{"line_number":37,"context_line":"        \u0027X-Roles\u0027: \u0027,\u0027.join(getattr(context, \u0027roles\u0027, [])),"},{"line_number":38,"context_line":"        \u0027X-Identity-Status\u0027: status,"},{"line_number":39,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_6d8f0ccd","line":36,"range":{"start_line":36,"start_character":9,"end_line":36,"end_character":21},"in_reply_to":"3aaa91ec_7ec84f57","updated":"2016-07-08 03:14:47.000000000","message":"It is just a copy. A previous review insisted it should now be X-Project-Id. I don\u0027t actually know for sure which is right. I\u0027d have to ask keystone people...","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                 network_info\u003dNone):"},{"line_number":45,"context_line":"        self.context \u003d context"},{"line_number":46,"context_line":"        self.instance \u003d instance"},{"line_number":47,"context_line":"        self.address \u003d address"},{"line_number":48,"context_line":"        self.network_info \u003d network_info"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _do_request(self, service_name, url):"},{"line_number":51,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_9eed3bba","line":48,"range":{"start_line":47,"start_character":7,"end_line":48,"end_character":40},"updated":"2016-07-01 18:55:08.000000000","message":"These aren\u0027t used.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                 network_info\u003dNone):"},{"line_number":45,"context_line":"        self.context \u003d context"},{"line_number":46,"context_line":"        self.instance \u003d instance"},{"line_number":47,"context_line":"        self.address \u003d address"},{"line_number":48,"context_line":"        self.network_info \u003d network_info"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _do_request(self, service_name, url):"},{"line_number":51,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_0db5a87d","line":48,"range":{"start_line":47,"start_character":7,"end_line":48,"end_character":40},"in_reply_to":"3aaa91ec_9eed3bba","updated":"2016-07-08 03:14:47.000000000","message":"Ok, will tweak.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                    \u0027user-data\u0027: self.instance.user_data,"},{"line_number":56,"context_line":"                    \u0027hostname\u0027: self.instance.hostname,"},{"line_number":57,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":58,"context_line":"                    \u0027system-metadata\u0027: self.instance.system_metadata}"},{"line_number":59,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":60,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":61,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_5e90f34e","line":58,"range":{"start_line":58,"start_character":21,"end_line":58,"end_character":36},"updated":"2016-07-01 18:55:08.000000000","message":"Why do we need to pass system_metadata?","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                    \u0027user-data\u0027: self.instance.user_data,"},{"line_number":56,"context_line":"                    \u0027hostname\u0027: self.instance.hostname,"},{"line_number":57,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":58,"context_line":"                    \u0027system-metadata\u0027: self.instance.system_metadata}"},{"line_number":59,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":60,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":61,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_281fb25c","line":58,"range":{"start_line":58,"start_character":21,"end_line":58,"end_character":36},"in_reply_to":"1aa78d24_e37b24f3","updated":"2016-07-08 03:14:47.000000000","message":"So, this is here because deployers asked for it. I think that\u0027s because the previous thing did have access to internal structures (which is kind of the point of why its being deprecated). So if we don\u0027t do this (which I\u0027d be ok with), we\u0027d need to dig into what exactly they need and how to expose it more reliably.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ce0ac6a4b8e9566e563b935246998d6d3cbdde38","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                    \u0027user-data\u0027: self.instance.user_data,"},{"line_number":56,"context_line":"                    \u0027hostname\u0027: self.instance.hostname,"},{"line_number":57,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":58,"context_line":"                    \u0027system-metadata\u0027: self.instance.system_metadata}"},{"line_number":59,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":60,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":61,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_e37b24f3","line":58,"range":{"start_line":58,"start_character":21,"end_line":58,"end_character":36},"in_reply_to":"3aaa91ec_5e90f34e","updated":"2016-07-07 18:06:45.000000000","message":"I think he\u0027s trying to pass things he thinks are important internals that they will need in order to do their work.\n\nHowever now that you say that, I\u0027m a little concerned we\u0027ll end up with people depending on what is in internal structures like that and be pissed when we change them. If they really need to do that kind of thing and are tracking the internals that closely, instance-id should be enough for them to go look this up themselves.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                headers.update(generate_identity_headers(self.context))"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"            # SSL verification"},{"line_number":67,"context_line":"            verify \u003d CONF.vendordata_dynamic_ssl_verification"},{"line_number":68,"context_line":"            if verify and CONF.vendordata_dynamic_ssl_certfile:"},{"line_number":69,"context_line":"                verify \u003d CONF.vendordata_dynamic_ssl_certfile"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_3e8087f7","line":67,"range":{"start_line":67,"start_character":26,"end_line":67,"end_character":61},"updated":"2016-07-01 18:55:08.000000000","message":"This is yet another set of ssl-related options we have in nova.conf now, there are a bunch already, see:\n\nhttp://lists.openstack.org/pipermail/openstack-dev/2016-April/091167.html\n\nMaybe that\u0027s fine since it\u0027s for a specific use, I just wanted to bring it up.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ce0ac6a4b8e9566e563b935246998d6d3cbdde38","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                headers.update(generate_identity_headers(self.context))"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"            # SSL verification"},{"line_number":67,"context_line":"            verify \u003d CONF.vendordata_dynamic_ssl_verification"},{"line_number":68,"context_line":"            if verify and CONF.vendordata_dynamic_ssl_certfile:"},{"line_number":69,"context_line":"                verify \u003d CONF.vendordata_dynamic_ssl_certfile"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_c3654845","line":67,"range":{"start_line":67,"start_character":26,"end_line":67,"end_character":61},"in_reply_to":"3aaa91ec_3e8087f7","updated":"2016-07-07 18:06:45.000000000","message":"it\u0027s annoying, but if people are using their own CAs for things and they\u0027re not all in the same hierarchy this might be required.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"            # SSL verification"},{"line_number":67,"context_line":"            verify \u003d CONF.vendordata_dynamic_ssl_verification"},{"line_number":68,"context_line":"            if verify and CONF.vendordata_dynamic_ssl_certfile:"},{"line_number":69,"context_line":"                verify \u003d CONF.vendordata_dynamic_ssl_certfile"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"            timeout \u003d (CONF.vendordata_dynamic_connect_timeout,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_5ecc7361","line":68,"updated":"2016-07-01 18:55:08.000000000","message":"Do we only want to do this if the url starts with https:// like in our glanceclient wrapper code?","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"            # SSL verification"},{"line_number":67,"context_line":"            verify \u003d CONF.vendordata_dynamic_ssl_verification"},{"line_number":68,"context_line":"            if verify and CONF.vendordata_dynamic_ssl_certfile:"},{"line_number":69,"context_line":"                verify \u003d CONF.vendordata_dynamic_ssl_certfile"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"            timeout \u003d (CONF.vendordata_dynamic_connect_timeout,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_a833a2f5","line":68,"in_reply_to":"1aa78d24_23e7ecac","updated":"2016-07-08 03:14:47.000000000","message":"Oh, that\u0027s an interesting idea. I prefer that to the flag.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ce0ac6a4b8e9566e563b935246998d6d3cbdde38","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"            # SSL verification"},{"line_number":67,"context_line":"            verify \u003d CONF.vendordata_dynamic_ssl_verification"},{"line_number":68,"context_line":"            if verify and CONF.vendordata_dynamic_ssl_certfile:"},{"line_number":69,"context_line":"                verify \u003d CONF.vendordata_dynamic_ssl_certfile"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"            timeout \u003d (CONF.vendordata_dynamic_connect_timeout,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_23e7ecac","line":68,"in_reply_to":"3aaa91ec_5ecc7361","updated":"2016-07-07 18:06:45.000000000","message":"I think so. I think we could also get away with just saying:\n\n  verify \u003d \u0027https://\u0027 in url\n\nWe can probably assume people that care about HTTPS on their control plane are also going to use verifyable (even if locally-rolled) certificates. At least, I hope so.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3ed385e2c4786444b3f04ba498f50f4fa91e1709","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            res \u003d requests.request(\u0027POST\u0027, url, data\u003djsonutils.dumps(body),"},{"line_number":75,"context_line":"                                   headers\u003dheaders, verify\u003dverify,"},{"line_number":76,"context_line":"                                   timeout\u003dtimeout)"},{"line_number":77,"context_line":"            if res.status_code in (requests.codes.OK,"},{"line_number":78,"context_line":"                                   requests.codes.CREATED,"},{"line_number":79,"context_line":"                                   requests.codes.ACCEPTED,"},{"line_number":80,"context_line":"                                   requests.codes.NO_CONTENT):"},{"line_number":81,"context_line":"                # TODO(mikal): Use the Cache-Control response header to do some"},{"line_number":82,"context_line":"                # sensible form of caching here."},{"line_number":83,"context_line":"                return jsonutils.loads(res.text)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        except (TypeError, ValueError, requests.exceptions.RequestException,"},{"line_number":86,"context_line":"                requests.exceptions.SSLError) as e:"},{"line_number":87,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":88,"context_line":"                LOG.warning(_LW(\u0027Error from dynamic vendordata service \u0027"},{"line_number":89,"context_line":"                                \u0027%(service_name)s at %(url)s: %(error)s\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_81115e56","line":86,"range":{"start_line":77,"start_character":12,"end_line":86,"end_character":51},"updated":"2016-07-01 18:57:22.000000000","message":"We don\u0027t have unit tests for any error handling here.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            res \u003d requests.request(\u0027POST\u0027, url, data\u003djsonutils.dumps(body),"},{"line_number":75,"context_line":"                                   headers\u003dheaders, verify\u003dverify,"},{"line_number":76,"context_line":"                                   timeout\u003dtimeout)"},{"line_number":77,"context_line":"            if res.status_code in (requests.codes.OK,"},{"line_number":78,"context_line":"                                   requests.codes.CREATED,"},{"line_number":79,"context_line":"                                   requests.codes.ACCEPTED,"},{"line_number":80,"context_line":"                                   requests.codes.NO_CONTENT):"},{"line_number":81,"context_line":"                # TODO(mikal): Use the Cache-Control response header to do some"},{"line_number":82,"context_line":"                # sensible form of caching here."},{"line_number":83,"context_line":"                return jsonutils.loads(res.text)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        except (TypeError, ValueError, requests.exceptions.RequestException,"},{"line_number":86,"context_line":"                requests.exceptions.SSLError) as e:"},{"line_number":87,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":88,"context_line":"                LOG.warning(_LW(\u0027Error from dynamic vendordata service \u0027"},{"line_number":89,"context_line":"                                \u0027%(service_name)s at %(url)s: %(error)s\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_4864bee4","line":86,"range":{"start_line":77,"start_character":12,"end_line":86,"end_character":51},"in_reply_to":"3aaa91ec_81115e56","updated":"2016-07-08 03:14:47.000000000","message":"Its true. I suck.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d46a2aac52e0ed4fc38b6a3fe7cc54de75b3d325","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                    \u0027user-data\u0027: self.instance.user_data,"},{"line_number":57,"context_line":"                    \u0027hostname\u0027: self.instance.hostname,"},{"line_number":58,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":59,"context_line":"                    \u0027system-metadata\u0027: self.instance.system_metadata}"},{"line_number":60,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":61,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":62,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_3dc01250","line":59,"range":{"start_line":59,"start_character":20,"end_line":59,"end_character":68},"updated":"2016-07-11 21:50:27.000000000","message":"I think we need to hash this out before going with it because as Dan mentioned earlier in patch set 8 I could see people relying on this and then flaring up when system_metadata changes internally.\n\nIf we didn\u0027t include this now, but asked for operators to be specific about what they needed out of it, we could version that in later maybe?","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                    \u0027user-data\u0027: self.instance.user_data,"},{"line_number":57,"context_line":"                    \u0027hostname\u0027: self.instance.hostname,"},{"line_number":58,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":59,"context_line":"                    \u0027system-metadata\u0027: self.instance.system_metadata}"},{"line_number":60,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":61,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":62,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_b3da7349","line":59,"range":{"start_line":59,"start_character":20,"end_line":59,"end_character":68},"in_reply_to":"1aa78d24_3dc01250","updated":"2016-07-21 17:06:23.000000000","message":"Well, noting that versioning doesn\u0027t really exist here, I\u0027d be ok with that. There\u0027s a thread on openstack-operators we could ask for specifics on, but we\u0027re basically out of time.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"14ffe6ace743f1c27fb35a9178968bf799ebb2cc","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                    \u0027user-data\u0027: self.instance.user_data,"},{"line_number":57,"context_line":"                    \u0027hostname\u0027: self.instance.hostname,"},{"line_number":58,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":59,"context_line":"                    \u0027system-metadata\u0027: self.instance.system_metadata}"},{"line_number":60,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":61,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":62,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_131547e4","line":59,"range":{"start_line":59,"start_character":20,"end_line":59,"end_character":68},"in_reply_to":"1aa78d24_3dc01250","updated":"2016-07-11 22:26:37.000000000","message":"Yeah, I would really prefer we not pass this to the external service. It\u0027s an internal detail that we change frequently. If we\u0027re saying this is a plugin interface it should be stable. If they want to look at internal details and handle tracking changes, then we give them enough info to look it up in the DB themselves.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d46a2aac52e0ed4fc38b6a3fe7cc54de75b3d325","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            res \u003d requests.request(\u0027POST\u0027, url, data\u003djsonutils.dumps(body),"},{"line_number":77,"context_line":"                                   headers\u003dheaders, verify\u003dverify,"},{"line_number":78,"context_line":"                                   timeout\u003dtimeout)"},{"line_number":79,"context_line":"            if res.status_code in (requests.codes.OK,"},{"line_number":80,"context_line":"                                   requests.codes.CREATED,"},{"line_number":81,"context_line":"                                   requests.codes.ACCEPTED,"},{"line_number":82,"context_line":"                                   requests.codes.NO_CONTENT):"},{"line_number":83,"context_line":"                # TODO(mikal): Use the Cache-Control response header to do some"},{"line_number":84,"context_line":"                # sensible form of caching here."},{"line_number":85,"context_line":"                return jsonutils.loads(res.text)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        except (TypeError, ValueError, requests.exceptions.RequestException,"},{"line_number":88,"context_line":"                requests.exceptions.SSLError) as e:"},{"line_number":89,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":90,"context_line":"                LOG.warning(_LW(\u0027Error from dynamic vendordata service \u0027"},{"line_number":91,"context_line":"                                \u0027%(service_name)s at %(url)s: %(error)s\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_fd1a0ac5","line":88,"range":{"start_line":79,"start_character":12,"end_line":88,"end_character":51},"updated":"2016-07-11 21:50:27.000000000","message":"TODO: still need unit tests for error handling.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":76,"context_line":"            res \u003d requests.request(\u0027POST\u0027, url, data\u003djsonutils.dumps(body),"},{"line_number":77,"context_line":"                                   headers\u003dheaders, verify\u003dverify,"},{"line_number":78,"context_line":"                                   timeout\u003dtimeout)"},{"line_number":79,"context_line":"            if res.status_code in (requests.codes.OK,"},{"line_number":80,"context_line":"                                   requests.codes.CREATED,"},{"line_number":81,"context_line":"                                   requests.codes.ACCEPTED,"},{"line_number":82,"context_line":"                                   requests.codes.NO_CONTENT):"},{"line_number":83,"context_line":"                # TODO(mikal): Use the Cache-Control response header to do some"},{"line_number":84,"context_line":"                # sensible form of caching here."},{"line_number":85,"context_line":"                return jsonutils.loads(res.text)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        except (TypeError, ValueError, requests.exceptions.RequestException,"},{"line_number":88,"context_line":"                requests.exceptions.SSLError) as e:"},{"line_number":89,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":90,"context_line":"                LOG.warning(_LW(\u0027Error from dynamic vendordata service \u0027"},{"line_number":91,"context_line":"                                \u0027%(service_name)s at %(url)s: %(error)s\u0027),"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_53c06f50","line":88,"range":{"start_line":79,"start_character":12,"end_line":88,"end_character":51},"in_reply_to":"1aa78d24_fd1a0ac5","updated":"2016-07-21 17:06:23.000000000","message":"Yep, its in the todo list in the commit message. I\u0027ve been spending my time working out the functional testing boiler plate.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"82c680e7d448c1d7f3e6c930962e8a5df844b962","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                    \u0027user-data\u0027: self.instance.user_data,"},{"line_number":57,"context_line":"                    \u0027hostname\u0027: self.instance.hostname,"},{"line_number":58,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":59,"context_line":"                    \u0027system-metadata\u0027: self.instance.system_metadata}"},{"line_number":60,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":61,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":62,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aa78d24_1a3d338f","line":59,"range":{"start_line":59,"start_character":19,"end_line":59,"end_character":69},"updated":"2016-07-12 13:53:48.000000000","message":"Still need to remove this. Rob\u0027s case should be covered with the image-id above. His service can lookup the image metadata via glance given image-id.","commit_id":"ae1f869459ce932544564e0fa2be6d9d8a17ba47"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"1a788d1db37151430db1815bca8dea4dbe66a717","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                    \u0027user-data\u0027: self.instance.user_data,"},{"line_number":57,"context_line":"                    \u0027hostname\u0027: self.instance.hostname,"},{"line_number":58,"context_line":"                    \u0027metadata\u0027: self.instance.metadata,"},{"line_number":59,"context_line":"                    \u0027system-metadata\u0027: self.instance.system_metadata}"},{"line_number":60,"context_line":"            headers \u003d {\u0027Content-Type\u0027: \u0027application/json\u0027,"},{"line_number":61,"context_line":"                       \u0027Accept\u0027: \u0027application/json\u0027,"},{"line_number":62,"context_line":"                       \u0027User-Agent\u0027: \u0027openstack-nova-vendordata\u0027}"}],"source_content_type":"text/x-python","patch_set":11,"id":"dada55a8_770edce5","line":59,"range":{"start_line":59,"start_character":19,"end_line":59,"end_character":69},"in_reply_to":"1aa78d24_1a3d338f","updated":"2016-07-21 17:43:34.000000000","message":"Done","commit_id":"ae1f869459ce932544564e0fa2be6d9d8a17ba47"}],"nova/conf/api.py":[{"author":{"_account_id":10873,"name":"Juan Antonio Osorio Robles","email":"jaosorior@redhat.com","username":"ejuaoso"},"change_message_id":"7429eb754ccd82e9e00e52528943361694e1234b","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    cfg.StrOpt(\u0027vendordata_dynamic_ssl_certfile\u0027,"},{"line_number":191,"context_line":"                default\u003d\u0027\u0027,"},{"line_number":192,"context_line":"                help\u003d\"\"\""},{"line_number":193,"context_line":"Path to an optional certificate file to verify dynamic vendordata REST services"},{"line_number":194,"context_line":"ssl certificates against."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"vendordata_dynamic_ssl_verification must be true for this flag to be used."}],"source_content_type":"text/x-python","patch_set":6,"id":"5a9d85d2_fac7f50f","line":193,"range":{"start_line":193,"start_character":20,"end_line":193,"end_character":36},"updated":"2016-06-21 06:26:51.000000000","message":"this could also be the path to a trusted CA bundle; would it be appropriate to specify that it\u0027s possible?","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"30121e841ecd5f551d65e4a5222002754c8e0d9d","unresolved":false,"context_lines":[{"line_number":190,"context_line":"    cfg.StrOpt(\u0027vendordata_dynamic_ssl_certfile\u0027,"},{"line_number":191,"context_line":"                default\u003d\u0027\u0027,"},{"line_number":192,"context_line":"                help\u003d\"\"\""},{"line_number":193,"context_line":"Path to an optional certificate file to verify dynamic vendordata REST services"},{"line_number":194,"context_line":"ssl certificates against."},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"vendordata_dynamic_ssl_verification must be true for this flag to be used."}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_1bf18b6b","line":193,"range":{"start_line":193,"start_character":20,"end_line":193,"end_character":36},"in_reply_to":"5a9d85d2_fac7f50f","updated":"2016-06-25 20:20:25.000000000","message":"Done","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    vendordata_dynamic_connect_timeout"},{"line_number":162,"context_line":"    vendordata_dynamic_read_timeout"},{"line_number":163,"context_line":"\"\"\"),"},{"line_number":164,"context_line":"    cfg.ListOpt(\u0027vendordata_dynamic_targets\u0027,"},{"line_number":165,"context_line":"                default\u003d[],"},{"line_number":166,"context_line":"                help\u003d\"\"\""},{"line_number":167,"context_line":"A list of targets for the dynamic vendordata provider."}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_3e9d270b","line":164,"updated":"2016-07-01 18:55:08.000000000","message":"The help for this doesn\u0027t explain it\u0027s a name@url format.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    vendordata_dynamic_connect_timeout"},{"line_number":162,"context_line":"    vendordata_dynamic_read_timeout"},{"line_number":163,"context_line":"\"\"\"),"},{"line_number":164,"context_line":"    cfg.ListOpt(\u0027vendordata_dynamic_targets\u0027,"},{"line_number":165,"context_line":"                default\u003d[],"},{"line_number":166,"context_line":"                help\u003d\"\"\""},{"line_number":167,"context_line":"A list of targets for the dynamic vendordata provider."}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_4892fea0","line":164,"in_reply_to":"3aaa91ec_3e9d270b","updated":"2016-07-08 03:14:47.000000000","message":"Fixed.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    vendordata_dynamic_read_timeout"},{"line_number":196,"context_line":"\"\"\"),"},{"line_number":197,"context_line":"    cfg.StrOpt(\u0027vendordata_dynamic_ssl_certfile\u0027,"},{"line_number":198,"context_line":"                default\u003d\u0027\u0027,"},{"line_number":199,"context_line":"                help\u003d\"\"\""},{"line_number":200,"context_line":"Path to an optional certificate file or CA bundle to verify dynamic vendordata"},{"line_number":201,"context_line":"REST services ssl certificates against."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_feb9df7d","line":199,"range":{"start_line":198,"start_character":16,"end_line":199,"end_character":24},"updated":"2016-07-01 18:55:08.000000000","message":"nit: alignment","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    vendordata_dynamic_read_timeout"},{"line_number":196,"context_line":"\"\"\"),"},{"line_number":197,"context_line":"    cfg.StrOpt(\u0027vendordata_dynamic_ssl_certfile\u0027,"},{"line_number":198,"context_line":"                default\u003d\u0027\u0027,"},{"line_number":199,"context_line":"                help\u003d\"\"\""},{"line_number":200,"context_line":"Path to an optional certificate file or CA bundle to verify dynamic vendordata"},{"line_number":201,"context_line":"REST services ssl certificates against."},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_a88f2274","line":199,"range":{"start_line":198,"start_character":16,"end_line":199,"end_character":24},"in_reply_to":"3aaa91ec_feb9df7d","updated":"2016-07-08 03:14:47.000000000","message":"Fixed.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    vendordata_dynamic_read_timeout"},{"line_number":220,"context_line":"\"\"\"),"},{"line_number":221,"context_line":"    cfg.IntOpt(\u0027vendordata_dynamic_connect_timeout\u0027,"},{"line_number":222,"context_line":"                default\u003d5,"},{"line_number":223,"context_line":"                help\u003d\"\"\""},{"line_number":224,"context_line":"Maximum wait time for an external REST service to connect."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"* Possible values:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_3eb40781","line":223,"range":{"start_line":222,"start_character":16,"end_line":223,"end_character":24},"updated":"2016-07-01 18:55:08.000000000","message":"alignment","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    vendordata_dynamic_read_timeout"},{"line_number":220,"context_line":"\"\"\"),"},{"line_number":221,"context_line":"    cfg.IntOpt(\u0027vendordata_dynamic_connect_timeout\u0027,"},{"line_number":222,"context_line":"                default\u003d5,"},{"line_number":223,"context_line":"                help\u003d\"\"\""},{"line_number":224,"context_line":"Maximum wait time for an external REST service to connect."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"* Possible values:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_c8ec2e2c","line":223,"range":{"start_line":222,"start_character":16,"end_line":223,"end_character":24},"in_reply_to":"3aaa91ec_3eb40781","updated":"2016-07-08 03:14:47.000000000","message":"Fixed.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"* Possible values:"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    Any integer with a value greater than three (the TCP packet retransmission"},{"line_number":229,"context_line":"    timeout). Note that instance start is blocked during this wait time,"},{"line_number":230,"context_line":"    so this value should be kept small."},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_7eae8f30","line":228,"range":{"start_line":228,"start_character":4,"end_line":228,"end_character":47},"updated":"2016-07-01 18:55:08.000000000","message":"I think IntOpt has a min floor value or range to assert this.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":225,"context_line":""},{"line_number":226,"context_line":"* Possible values:"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    Any integer with a value greater than three (the TCP packet retransmission"},{"line_number":229,"context_line":"    timeout). Note that instance start is blocked during this wait time,"},{"line_number":230,"context_line":"    so this value should be kept small."},{"line_number":231,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_48d95e83","line":228,"range":{"start_line":228,"start_character":4,"end_line":228,"end_character":47},"in_reply_to":"3aaa91ec_7eae8f30","updated":"2016-07-08 03:14:47.000000000","message":"Huh, that\u0027s news to me but sure.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":226,"context_line":"* Possible values:"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    Any integer with a value greater than three (the TCP packet retransmission"},{"line_number":229,"context_line":"    timeout). Note that instance start is blocked during this wait time,"},{"line_number":230,"context_line":"    so this value should be kept small."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"* Services that use this:"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_de65031e","line":230,"range":{"start_line":229,"start_character":14,"end_line":230,"end_character":39},"updated":"2016-07-01 18:55:08.000000000","message":"Seems we definitely want a max on this, like at least 60 for the default rpc timeout? So maybe even like 30?","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":226,"context_line":"* Possible values:"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    Any integer with a value greater than three (the TCP packet retransmission"},{"line_number":229,"context_line":"    timeout). Note that instance start is blocked during this wait time,"},{"line_number":230,"context_line":"    so this value should be kept small."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"* Services that use this:"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_68c37a8b","line":230,"range":{"start_line":229,"start_character":14,"end_line":230,"end_character":39},"in_reply_to":"1aa78d24_c368a8f7","updated":"2016-07-08 03:14:47.000000000","message":"Tweaked the wording. I think you\u0027re right that only config drive would block us, but cloud init would be blocked by slow metadata server.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"ce0ac6a4b8e9566e563b935246998d6d3cbdde38","unresolved":false,"context_lines":[{"line_number":226,"context_line":"* Possible values:"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    Any integer with a value greater than three (the TCP packet retransmission"},{"line_number":229,"context_line":"    timeout). Note that instance start is blocked during this wait time,"},{"line_number":230,"context_line":"    so this value should be kept small."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"* Services that use this:"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_c368a8f7","line":230,"range":{"start_line":229,"start_character":14,"end_line":230,"end_character":39},"in_reply_to":"3aaa91ec_de65031e","updated":"2016-07-07 18:06:45.000000000","message":"Instance start is only blocked on this for configdrive I think. Maybe change \"is\" to \"may be\"?","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    vendordata_dynamic_read_timeout"},{"line_number":243,"context_line":"\"\"\"),"},{"line_number":244,"context_line":"    cfg.IntOpt(\u0027vendordata_dynamic_read_timeout\u0027,"},{"line_number":245,"context_line":"                default\u003d5,"},{"line_number":246,"context_line":"                help\u003d\"\"\""},{"line_number":247,"context_line":"Maximum wait time for an external REST service to return data once connected."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* Possible values:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_1e702bdc","line":246,"range":{"start_line":245,"start_character":16,"end_line":246,"end_character":24},"updated":"2016-07-01 18:55:08.000000000","message":"alignment","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":242,"context_line":"    vendordata_dynamic_read_timeout"},{"line_number":243,"context_line":"\"\"\"),"},{"line_number":244,"context_line":"    cfg.IntOpt(\u0027vendordata_dynamic_read_timeout\u0027,"},{"line_number":245,"context_line":"                default\u003d5,"},{"line_number":246,"context_line":"                help\u003d\"\"\""},{"line_number":247,"context_line":"Maximum wait time for an external REST service to return data once connected."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* Possible values:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_a8bd6204","line":246,"range":{"start_line":245,"start_character":16,"end_line":246,"end_character":24},"in_reply_to":"3aaa91ec_1e702bdc","updated":"2016-07-08 03:14:47.000000000","message":"Fixed.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"35463f83db885f42ef312ddfaf38f99804d8ec87","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* Possible values:"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    Any integer. Note that instance start is blocked during this wait time,"},{"line_number":252,"context_line":"    so this value should be kept small."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"* Services that use this:"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_5e72b3e4","line":252,"range":{"start_line":251,"start_character":4,"end_line":252,"end_character":39},"updated":"2016-07-01 18:55:08.000000000","message":"We should think about a range for this.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c21746cacc738d6d5050a89b907c24b7349e844c","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* Possible values:"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    Any integer. Note that instance start is blocked during this wait time,"},{"line_number":252,"context_line":"    so this value should be kept small."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"* Services that use this:"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_5d27deb5","line":252,"range":{"start_line":251,"start_character":4,"end_line":252,"end_character":39},"in_reply_to":"1aa78d24_c83a6e98","updated":"2016-07-11 21:19:07.000000000","message":"I don\u0027t, cdent might.","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"34e9625d82bf220f7518d0d43d54acd874c63a72","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"* Possible values:"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    Any integer. Note that instance start is blocked during this wait time,"},{"line_number":252,"context_line":"    so this value should be kept small."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"* Services that use this:"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_c83a6e98","line":252,"range":{"start_line":251,"start_character":4,"end_line":252,"end_character":39},"in_reply_to":"3aaa91ec_5e72b3e4","updated":"2016-07-08 03:14:47.000000000","message":"Yes, do you have a proposal?","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f6569783f495f564f0fcf3f53c5b48c2315255af","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    A list of vendordata providers, with StaticJSON and DynamicJSON being"},{"line_number":150,"context_line":"    current options."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"* Services that use this:"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    ``nova-api``"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"* Related options:"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_d241acaa","line":154,"range":{"start_line":152,"start_character":0,"end_line":154,"end_character":16},"updated":"2016-07-27 11:11:48.000000000","message":"Nit: we should kill this bit now:\nhttps://wiki.openstack.org/wiki/ConfigOptionsConsistency","commit_id":"34b5ea5f4436d0d3376d02fe7336c0702cccbcf8"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"f6569783f495f564f0fcf3f53c5b48c2315255af","unresolved":false,"context_lines":[{"line_number":195,"context_line":"               default\u003d5,"},{"line_number":196,"context_line":"               min\u003d3,"},{"line_number":197,"context_line":"               help\u003d\"\"\""},{"line_number":198,"context_line":"Maximum wait time for an external REST service to connect."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"* Possible values:"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"dada55a8_720d608e","line":198,"updated":"2016-07-27 11:11:48.000000000","message":"Nit: we are missing the units here. Is it seconds?","commit_id":"34b5ea5f4436d0d3376d02fe7336c0702cccbcf8"}],"nova/tests/fixtures.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d46a2aac52e0ed4fc38b6a3fe7cc54de75b3d325","unresolved":false,"context_lines":[{"line_number":453,"context_line":"        self.osapi.start()"},{"line_number":454,"context_line":"        self.addCleanup(self.osapi.stop)"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"        self.metadata \u003d service.WSGIService(\"metadata\")"},{"line_number":457,"context_line":"        self.metadata.start()"},{"line_number":458,"context_line":"        self.addCleanup(self.metadata.stop)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        self.auth_url \u003d \u0027http://%(host)s:%(port)s/%(api_version)s\u0027 % ({"},{"line_number":461,"context_line":"            \u0027host\u0027: self.osapi.host, \u0027port\u0027: self.osapi.port,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_dda46ea7","line":458,"range":{"start_line":456,"start_character":8,"end_line":458,"end_character":43},"updated":"2016-07-11 21:50:27.000000000","message":"nit: I\u0027m wondering if we should have a MetadataAPIFixture that extends OSAPIFixture and does this in the subclass? Or just make it a separate fixture? Then the API samples functional tests and everything else using this fixture doesn\u0027t need to be running this. Although I guess we already have metadata_listen on L438 above.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":453,"context_line":"        self.osapi.start()"},{"line_number":454,"context_line":"        self.addCleanup(self.osapi.stop)"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"        self.metadata \u003d service.WSGIService(\"metadata\")"},{"line_number":457,"context_line":"        self.metadata.start()"},{"line_number":458,"context_line":"        self.addCleanup(self.metadata.stop)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        self.auth_url \u003d \u0027http://%(host)s:%(port)s/%(api_version)s\u0027 % ({"},{"line_number":461,"context_line":"            \u0027host\u0027: self.osapi.host, \u0027port\u0027: self.osapi.port,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_538eaf2e","line":458,"range":{"start_line":456,"start_character":8,"end_line":458,"end_character":43},"in_reply_to":"1aa78d24_dda46ea7","updated":"2016-07-21 17:06:23.000000000","message":"That\u0027s why I added it here -- it feels like this fixture _expected_ to run metadata server, but just didn\u0027t. That said it didn\u0027t use it. I can refactor this if you want, but consider the changes I made to samples and tests to be very minor regardless.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"8c5165d0d9085240b3921fcf62fe7d7a78f51794","unresolved":false,"context_lines":[{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        self.metadata \u003d service.WSGIService(\"metadata\")"},{"line_number":462,"context_line":"        self.metadata.start()"},{"line_number":463,"context_line":"        self.addCleanup(self.metadata.stop)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":"        self.auth_url \u003d \u0027http://%(host)s:%(port)s/%(api_version)s\u0027 % ({"},{"line_number":466,"context_line":"            \u0027host\u0027: self.osapi.host, \u0027port\u0027: self.osapi.port,"}],"source_content_type":"text/x-python","patch_set":13,"id":"dada55a8_57540153","line":463,"updated":"2016-07-25 13:44:11.000000000","message":"so... I think we want a dedicated fixture for this so that we\u0027re not having to manage the metadata server in every samples test.","commit_id":"b916d3d214a156422acbc594186d4b682e156e15"}],"nova/tests/functional/api_sample_tests/api_samples/os-hypervisors/v2.33/hypervisors-detail-resp.json.tpl":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d46a2aac52e0ed4fc38b6a3fe7cc54de75b3d325","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \"running_vms\": 0,"},{"line_number":34,"context_line":"            \"service\": {"},{"line_number":35,"context_line":"                \"host\": \"%(host_name)s\","},{"line_number":36,"context_line":"                \"id\": 8,"},{"line_number":37,"context_line":"                \"disabled_reason\": null"},{"line_number":38,"context_line":"            },"},{"line_number":39,"context_line":"            \"vcpus\": 1,"}],"source_content_type":"text/x-smarty","patch_set":10,"id":"1aa78d24_3dcdb231","line":36,"updated":"2016-07-11 21:50:27.000000000","message":"Must be a rebase fail.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \"running_vms\": 0,"},{"line_number":34,"context_line":"            \"service\": {"},{"line_number":35,"context_line":"                \"host\": \"%(host_name)s\","},{"line_number":36,"context_line":"                \"id\": 8,"},{"line_number":37,"context_line":"                \"disabled_reason\": null"},{"line_number":38,"context_line":"            },"},{"line_number":39,"context_line":"            \"vcpus\": 1,"}],"source_content_type":"text/x-smarty","patch_set":10,"id":"1aa78d24_b37f1316","line":36,"in_reply_to":"1aa78d24_3dcdb231","updated":"2016-07-21 17:06:23.000000000","message":"Nope, see the other one. We changed the number of services being run by adding metadata service.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"82c680e7d448c1d7f3e6c930962e8a5df844b962","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \"running_vms\": 0,"},{"line_number":34,"context_line":"            \"service\": {"},{"line_number":35,"context_line":"                \"host\": \"%(host_name)s\","},{"line_number":36,"context_line":"                \"id\": 8,"},{"line_number":37,"context_line":"                \"disabled_reason\": null"},{"line_number":38,"context_line":"            },"},{"line_number":39,"context_line":"            \"vcpus\": 1,"}],"source_content_type":"text/x-smarty","patch_set":11,"id":"1aa78d24_5a433b13","line":36,"updated":"2016-07-12 13:53:48.000000000","message":"Not needed.","commit_id":"ae1f869459ce932544564e0fa2be6d9d8a17ba47"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"1a788d1db37151430db1815bca8dea4dbe66a717","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            \"running_vms\": 0,"},{"line_number":34,"context_line":"            \"service\": {"},{"line_number":35,"context_line":"                \"host\": \"%(host_name)s\","},{"line_number":36,"context_line":"                \"id\": 8,"},{"line_number":37,"context_line":"                \"disabled_reason\": null"},{"line_number":38,"context_line":"            },"},{"line_number":39,"context_line":"            \"vcpus\": 1,"}],"source_content_type":"text/x-smarty","patch_set":11,"id":"dada55a8_173de08e","line":36,"in_reply_to":"1aa78d24_5a433b13","updated":"2016-07-21 17:43:34.000000000","message":"See the comment on the other one, it is.","commit_id":"ae1f869459ce932544564e0fa2be6d9d8a17ba47"}],"nova/tests/functional/test_metadata.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d46a2aac52e0ed4fc38b6a3fe7cc54de75b3d325","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 Justin Santa Barbara"},{"line_number":2,"context_line":"# Copyright 2016 Rackspace Australia"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_3d0ad28a","line":1,"updated":"2016-07-11 21:50:27.000000000","message":"Why is this 2011 copyright in here?","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 Justin Santa Barbara"},{"line_number":2,"context_line":"# Copyright 2016 Rackspace Australia"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_d3a1ff95","line":1,"in_reply_to":"1aa78d24_3d0ad28a","updated":"2016-07-21 17:06:23.000000000","message":"Done","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d46a2aac52e0ed4fc38b6a3fe7cc54de75b3d325","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class MetadataTest(test.TestCase):"},{"line_number":29,"context_line":"    REQUIRES_LOCKING \u003d True"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def setUp(self):"},{"line_number":32,"context_line":"        super(MetadataTest, self).setUp()"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_fdeccabc","line":29,"updated":"2016-07-11 21:50:27.000000000","message":"Is this really necessary?","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"8a47efa2d92f2aee7333a3f3bd265178eaa8f8dc","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class MetadataTest(test.TestCase):"},{"line_number":29,"context_line":"    REQUIRES_LOCKING \u003d True"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def setUp(self):"},{"line_number":32,"context_line":"        super(MetadataTest, self).setUp()"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aa78d24_93e937ba","line":29,"in_reply_to":"1aa78d24_fdeccabc","updated":"2016-07-21 17:06:23.000000000","message":"Dunno? This is my first functional test and I have basically no idea what I am doing. You\u0027re welcome.","commit_id":"8fa52c2c49a382acb435ab27896eff9eb483d4eb"}],"nova/tests/unit/test_metadata.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"09c92e47cfc8c82d44b793d8ede9e2765d2cf16c","unresolved":false,"context_lines":[{"line_number":744,"context_line":""},{"line_number":745,"context_line":"            # verify that 2013-10-17 has the vendor_data.json file"},{"line_number":746,"context_line":"            vdpath \u003d \"/openstack/2013-10-17/vendor_data.json\""},{"line_number":747,"context_line":"            vd \u003d jsonutils.loads(mdinst.lookup(vdpath))"},{"line_number":748,"context_line":"            self.assertEqual(\u002710.0.0.1\u0027, vd.get(\u0027ldap\u0027))"},{"line_number":749,"context_line":"            self.assertEqual(\u002710.0.0.2\u0027, vd.get(\u0027ad\u0027))"},{"line_number":750,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_d1fd3b6f","line":747,"range":{"start_line":747,"start_character":12,"end_line":747,"end_character":14},"updated":"2016-06-24 18:41:57.000000000","message":"Just want to say I\u0027ve enjoyed the use of \"VD\" throughout this patch.","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"30121e841ecd5f551d65e4a5222002754c8e0d9d","unresolved":false,"context_lines":[{"line_number":744,"context_line":""},{"line_number":745,"context_line":"            # verify that 2013-10-17 has the vendor_data.json file"},{"line_number":746,"context_line":"            vdpath \u003d \"/openstack/2013-10-17/vendor_data.json\""},{"line_number":747,"context_line":"            vd \u003d jsonutils.loads(mdinst.lookup(vdpath))"},{"line_number":748,"context_line":"            self.assertEqual(\u002710.0.0.1\u0027, vd.get(\u0027ldap\u0027))"},{"line_number":749,"context_line":"            self.assertEqual(\u002710.0.0.2\u0027, vd.get(\u0027ad\u0027))"},{"line_number":750,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_bb4837b4","line":747,"range":{"start_line":747,"start_character":12,"end_line":747,"end_character":14},"in_reply_to":"3aaa91ec_d1fd3b6f","updated":"2016-06-25 20:20:25.000000000","message":"You\u0027re welcome?","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"8c5165d0d9085240b3921fcf62fe7d7a78f51794","unresolved":false,"context_lines":[{"line_number":445,"context_line":"            \u0027openstack/2016-10-06/user_data\u0027,"},{"line_number":446,"context_line":"            \u0027openstack/2016-10-06/vendor_data.json\u0027,"},{"line_number":447,"context_line":"            \u0027openstack/2016-10-06/network_data.json\u0027,"},{"line_number":448,"context_line":"            \u0027openstack/2016-10-06/vendor_data2.json\u0027,"},{"line_number":449,"context_line":"            \u0027openstack/latest/meta_data.json\u0027,"},{"line_number":450,"context_line":"            \u0027openstack/latest/user_data\u0027,"},{"line_number":451,"context_line":"            \u0027openstack/latest/vendor_data.json\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"dada55a8_5702413f","line":448,"updated":"2016-07-25 13:44:11.000000000","message":"Is this a concern that we shifted out the old data here? Shouldn\u0027t we be adding a new date not replacing an old one?","commit_id":"b916d3d214a156422acbc594186d4b682e156e15"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"66c553a798fd327e43e2851874b805e89b615ef5","unresolved":false,"context_lines":[{"line_number":445,"context_line":"            \u0027openstack/2016-10-06/user_data\u0027,"},{"line_number":446,"context_line":"            \u0027openstack/2016-10-06/vendor_data.json\u0027,"},{"line_number":447,"context_line":"            \u0027openstack/2016-10-06/network_data.json\u0027,"},{"line_number":448,"context_line":"            \u0027openstack/2016-10-06/vendor_data2.json\u0027,"},{"line_number":449,"context_line":"            \u0027openstack/latest/meta_data.json\u0027,"},{"line_number":450,"context_line":"            \u0027openstack/latest/user_data\u0027,"},{"line_number":451,"context_line":"            \u0027openstack/latest/vendor_data.json\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"dada55a8_1cdc65e3","line":448,"in_reply_to":"dada55a8_5702413f","updated":"2016-07-25 15:44:59.000000000","message":"Oh, we didn\u0027t move the data. Its repeated and I just moved to checking it on the latest version. I can revert that.","commit_id":"b916d3d214a156422acbc594186d4b682e156e15"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"31362eb5264f5098f155ff4c6545808dd744043b","unresolved":false,"context_lines":[{"line_number":2957,"context_line":""},{"line_number":2958,"context_line":"                inst_md \u003d instance_metadata.InstanceMetadata("},{"line_number":2959,"context_line":"                    instance, content\u003dfiles, extra_md\u003dextra_md,"},{"line_number":2960,"context_line":"                    network_info\u003dnetwork_info, request_context\u003dcontext)"},{"line_number":2961,"context_line":""},{"line_number":2962,"context_line":"                cdb \u003d configdrive.ConfigDriveBuilder(instance_md\u003dinst_md)"},{"line_number":2963,"context_line":"                with cdb:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_c7bd08d9","line":2960,"updated":"2016-06-22 14:49:02.000000000","message":"why not update all of the virt drivers with this?","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"30121e841ecd5f551d65e4a5222002754c8e0d9d","unresolved":false,"context_lines":[{"line_number":2957,"context_line":""},{"line_number":2958,"context_line":"                inst_md \u003d instance_metadata.InstanceMetadata("},{"line_number":2959,"context_line":"                    instance, content\u003dfiles, extra_md\u003dextra_md,"},{"line_number":2960,"context_line":"                    network_info\u003dnetwork_info, request_context\u003dcontext)"},{"line_number":2961,"context_line":""},{"line_number":2962,"context_line":"                cdb \u003d configdrive.ConfigDriveBuilder(instance_md\u003dinst_md)"},{"line_number":2963,"context_line":"                with cdb:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3aaa91ec_db4d43c5","line":2960,"in_reply_to":"3aaa91ec_c7bd08d9","updated":"2016-06-25 20:20:25.000000000","message":"I actually had a go at doing that, but it turned out to be non-trivial, especially in the xenapi case. I wasn\u0027t 100% confident that I didn\u0027t break something, so I wanted to leave this to the driver authors so that we were sure it was done right.","commit_id":"bb00e8e7c8f888d6906e4c50fb5786b8c1e8e04d"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e54b56c30d7c350c63ce523105ee6e3e15b33596","unresolved":false,"context_lines":[{"line_number":2970,"context_line":""},{"line_number":2971,"context_line":"                inst_md \u003d instance_metadata.InstanceMetadata("},{"line_number":2972,"context_line":"                    instance, content\u003dfiles, extra_md\u003dextra_md,"},{"line_number":2973,"context_line":"                    network_info\u003dnetwork_info, request_context\u003dcontext)"},{"line_number":2974,"context_line":""},{"line_number":2975,"context_line":"                cdb \u003d configdrive.ConfigDriveBuilder(instance_md\u003dinst_md)"},{"line_number":2976,"context_line":"                with cdb:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_ebe73faa","line":2973,"updated":"2016-06-28 07:57:47.000000000","message":"can you please add this change to all other drivers.\nthat will save N patches on top of this one asnd the feature will land with all drivers supported in the same manner","commit_id":"606be87adf16b50681f8604d92abb6f989e1bafa"}]}
