)]}'
{"etc/ironic/ironic.conf.sample":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"47e30280098113fb9c830b4bc27e2b8ea7795a86","unresolved":false,"context_lines":[{"line_number":203,"context_line":""},{"line_number":204,"context_line":"# Log output to standard error. This option is ignored if"},{"line_number":205,"context_line":"# log_config_append is set. (boolean value)"},{"line_number":206,"context_line":"#use_stderr \u003d true"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"# Format string to use for log messages with context. (string"},{"line_number":209,"context_line":"# value)"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"1a6eadb0_263a5b37","line":206,"range":{"start_line":206,"start_character":0,"end_line":206,"end_character":18},"updated":"2016-12-12 20:16:53.000000000","message":"This seems unrelated....","commit_id":"98f92338f951ce62438c37cbb0c8839e56b4df29"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"47e30280098113fb9c830b4bc27e2b8ea7795a86","unresolved":false,"context_lines":[{"line_number":240,"context_line":"# The format for an instance UUID that is passed with the log"},{"line_number":241,"context_line":"# message. (string value)"},{"line_number":242,"context_line":"#instance_uuid_format \u003d \"[instance: %(uuid)s] \""},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"# Enables or disables fatal status of deprecations. (boolean"},{"line_number":245,"context_line":"# value)"},{"line_number":246,"context_line":"#fatal_deprecations \u003d false"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"1a6eadb0_e616a3a6","line":243,"updated":"2016-12-12 20:16:53.000000000","message":"Hmmmmmmm... Unrelated deletion.","commit_id":"98f92338f951ce62438c37cbb0c8839e56b4df29"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"47e30280098113fb9c830b4bc27e2b8ea7795a86","unresolved":false,"context_lines":[{"line_number":1725,"context_line":"#region_name \u003d \u003cNone\u003e"},{"line_number":1726,"context_line":""},{"line_number":1727,"context_line":"# Directory used to cache files related to PKI tokens. (string"},{"line_number":1728,"context_line":"# value)"},{"line_number":1729,"context_line":"#signing_dir \u003d \u003cNone\u003e"},{"line_number":1730,"context_line":""},{"line_number":1731,"context_line":"# Optionally specify a list of memcached server(s) to use for"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"1a6eadb0_a64bcbaf","line":1728,"updated":"2016-12-12 20:16:53.000000000","message":"Changing of something that was previously flagged as deprecated.  Something does not seem right here.\n\nDid you wipe out or rebuild the virtualenv when generating the config?  I expect the changes in this file would almost exactly match what is in your change.\n\n    tox -egenconfig -r","commit_id":"98f92338f951ce62438c37cbb0c8839e56b4df29"},{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"a260336498b16584a480746b35e747cae4e92bb8","unresolved":false,"context_lines":[{"line_number":1819,"context_line":"# secure one. Once all the old tokens are expired this option"},{"line_number":1820,"context_line":"# should be set to a single value for better performance."},{"line_number":1821,"context_line":"# (list value)"},{"line_number":1822,"context_line":"#hash_algorithms \u003d md5"},{"line_number":1823,"context_line":""},{"line_number":1824,"context_line":"# Authentication type to load (string value)"},{"line_number":1825,"context_line":"# Deprecated group/name - [keystone_authtoken]/auth_plugin"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"1a6eadb0_f4ed6426","line":1822,"updated":"2016-12-12 23:31:42.000000000","message":"Is it going to be deprecated?","commit_id":"98f92338f951ce62438c37cbb0c8839e56b4df29"},{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"a260336498b16584a480746b35e747cae4e92bb8","unresolved":false,"context_lines":[{"line_number":2667,"context_line":"# Reconnecting retry count in case of connectivity problem"},{"line_number":2668,"context_line":"# during sending RPC message, -1 means infinite retry. If"},{"line_number":2669,"context_line":"# actual retry attempts in not 0 the rpc request could be"},{"line_number":2670,"context_line":"# processed more then one time (integer value)"},{"line_number":2671,"context_line":"#default_rpc_retry_attempts \u003d -1"},{"line_number":2672,"context_line":""},{"line_number":2673,"context_line":"# Reconnecting retry delay in case of connectivity problem"}],"source_content_type":"application/octet-stream","patch_set":13,"id":"1a6eadb0_147ca071","line":2670,"updated":"2016-12-12 23:31:42.000000000","message":"a small typo than","commit_id":"98f92338f951ce62438c37cbb0c8839e56b4df29"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"f4392702a18477d30b635430507ae8190c01e01f","unresolved":false,"context_lines":[{"line_number":2301,"context_line":"# Minimum value: 5"},{"line_number":2302,"context_line":"#default_notify_timeout \u003d 30"},{"line_number":2303,"context_line":""},{"line_number":2304,"context_line":"# The duration to schedule a purge of idle sender links."},{"line_number":2305,"context_line":"# Detach link after expiry. (integer value)"},{"line_number":2306,"context_line":"# Minimum value: 1"},{"line_number":2307,"context_line":"#default_sender_link_timeout \u003d 600"}],"source_content_type":"application/octet-stream","patch_set":14,"id":"1a6eadb0_e06e2295","line":2304,"updated":"2016-12-14 15:44:18.000000000","message":"Unrelated, but updated requirements.  WFM","commit_id":"30a4340175f1991517d21226b1b26eaf7bd2234c"}],"ironic/conf/conductor.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5881a85c0caacacfe1ec664970718888a3c31edb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"               default\u003d10,"},{"line_number":30,"context_line":"               help\u003d_(\u0027Seconds between conductor heart beats.\u0027)),"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027api_url\u0027,"},{"line_number":32,"context_line":"               regex\u003d\u0027^http(s?)\\:\\/\\/\u0027,"},{"line_number":33,"context_line":"               help\u003d_(\u0027URL of Ironic API service. If not set ironic can \u0027"},{"line_number":34,"context_line":"                      \u0027get the current value from the keystone service \u0027"},{"line_number":35,"context_line":"                      \u0027catalog.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_31aa691a","line":32,"updated":"2016-12-08 12:26:34.000000000","message":"More correct regex is \u0027^http(s?):\\/\\/.+\u0027","commit_id":"2c16cb958382f3dcc294015a21b1d546c3fb1428"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"49669b01f087f32e4a3f2e53ea6e968cdbcf5c93","unresolved":false,"context_lines":[{"line_number":29,"context_line":"               default\u003d10,"},{"line_number":30,"context_line":"               help\u003d_(\u0027Seconds between conductor heart beats.\u0027)),"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027api_url\u0027,"},{"line_number":32,"context_line":"               regex\u003d\u0027^http(s?)\\:\\/\\/\u0027,"},{"line_number":33,"context_line":"               help\u003d_(\u0027URL of Ironic API service. If not set ironic can \u0027"},{"line_number":34,"context_line":"                      \u0027get the current value from the keystone service \u0027"},{"line_number":35,"context_line":"                      \u0027catalog.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_c7ba576e","line":32,"in_reply_to":"3a71b18c_31aa691a","updated":"2016-12-08 13:22:44.000000000","message":"++","commit_id":"2c16cb958382f3dcc294015a21b1d546c3fb1428"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"22138ca2aa9cffa6ef8158c806d2fee64045dfda","unresolved":false,"context_lines":[{"line_number":29,"context_line":"               default\u003d10,"},{"line_number":30,"context_line":"               help\u003d_(\u0027Seconds between conductor heart beats.\u0027)),"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027api_url\u0027,"},{"line_number":32,"context_line":"               regex\u003d\u0027^http(s?)\\:\\/\\/\u0027,"},{"line_number":33,"context_line":"               help\u003d_(\u0027URL of Ironic API service. If not set ironic can \u0027"},{"line_number":34,"context_line":"                      \u0027get the current value from the keystone service \u0027"},{"line_number":35,"context_line":"                      \u0027catalog.\u0027)),"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a71b18c_05f52782","line":32,"in_reply_to":"3a71b18c_31aa691a","updated":"2016-12-08 13:48:37.000000000","message":"Hmm agreed.\n\nThe \".+\" will make sure we have something else in front of the http(s)://","commit_id":"2c16cb958382f3dcc294015a21b1d546c3fb1428"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"f2eb7fb455c8d0cb9913d2f86b36afd0076c05a6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"               help\u003d_(\u0027Seconds between conductor heart beats.\u0027)),"},{"line_number":31,"context_line":"    cfg.StrOpt(\u0027api_url\u0027,"},{"line_number":32,"context_line":"               regex\u003d\u0027^http(s?):\\/\\/.+\u0027,"},{"line_number":33,"context_line":"               help\u003d_(\u0027URL of Ironic API service. If not set ironic can \u0027"},{"line_number":34,"context_line":"                      \u0027get the current value from the keystone service \u0027"},{"line_number":35,"context_line":"                      \u0027catalog.\u0027)),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027heartbeat_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_022fd63e","line":33,"updated":"2016-12-08 15:38:56.000000000","message":"Oh and does the \"not set\" case still work?","commit_id":"fd4766c02a6c8bb102551a05f45efe6e9660b13b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"09be8ae063edb214fdee61b99d47d10961fbef3e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"               regex\u003d\u0027^http(s?):\\/\\/.+\u0027,"},{"line_number":33,"context_line":"               help\u003d_(\u0027URL of Ironic API service. If not set ironic can \u0027"},{"line_number":34,"context_line":"                      \u0027get the current value from the keystone service \u0027"},{"line_number":35,"context_line":"                      \u0027catalog.\u0027)),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027heartbeat_timeout\u0027,"},{"line_number":37,"context_line":"               default\u003d60,"},{"line_number":38,"context_line":"               help\u003d_(\u0027Maximum time (in seconds) since the last check-in \u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a71b18c_9f77bf01","line":35,"updated":"2016-12-08 15:27:08.000000000","message":"Please add that it must start with https:// or http://","commit_id":"fd4766c02a6c8bb102551a05f45efe6e9660b13b"}],"ironic/drivers/modules/deploy_utils.py":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7634ba4b8dbcf7c008856d3e6425d984cd15365f","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                \"configuration file or keystone catalog. Keystone error: \""},{"line_number":128,"context_line":"                \"%s\") % six.text_type(e))"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    # NOTE: check if protocol for ironic api was provided, otherwise use"},{"line_number":131,"context_line":"    # the default one"},{"line_number":132,"context_line":"    if not any(ironic_api.startswith(p) for p in ALLOWED_API_PROTOCOLS):"},{"line_number":133,"context_line":"        ironic_api \u003d DEFAULT_API_PROTOCOL + ironic_api"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_ba8480b1","line":130,"updated":"2016-11-30 21:55:30.000000000","message":"nit: note format is # NOTE(your-alias): words, more words, etc.","commit_id":"6e53d0721a126d9405c62c6762167a0eabd4883c"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"868086c8be2eb6f2e652308f836d2a6c48431bb5","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    # NOTE(jtaryma): check if protocol for ironic api was provided,"},{"line_number":133,"context_line":"    # otherwise raise exception -"},{"line_number":134,"context_line":"    if not any(ironic_api.startswith(p) for p in ALLOWED_API_PROTOCOLS):"},{"line_number":135,"context_line":"        msg \u003d _(\"Ironic API address provided in configuration file does not \""},{"line_number":136,"context_line":"                \"contain protocol prefix.\")"},{"line_number":137,"context_line":"        LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_6af4c8ce","line":134,"updated":"2016-12-01 06:00:44.000000000","message":"Make ALLOWED_API_PROTOCOLS a Tuple and then.\n\n if not ironic_api.startswith(ALLOWED_API_PROTOCOLS):\n\nExample\n\n \u003e\u003e\u003e a \u003d (\u0027a\u0027, \u0027b\u0027)\n \u003e\u003e\u003e \"abba\".startswith(a)\n True\n \u003e\u003e\u003e \"baab\".startswith(a)\n True\n \u003e\u003e\u003e \"car\".startswith(a)\n False","commit_id":"0dcf15d2d0e2014f0cb05490fa3ed89b7283a89b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"868086c8be2eb6f2e652308f836d2a6c48431bb5","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    # otherwise raise exception -"},{"line_number":134,"context_line":"    if not any(ironic_api.startswith(p) for p in ALLOWED_API_PROTOCOLS):"},{"line_number":135,"context_line":"        msg \u003d _(\"Ironic API address provided in configuration file does not \""},{"line_number":136,"context_line":"                \"contain protocol prefix.\")"},{"line_number":137,"context_line":"        LOG.error(msg)"},{"line_number":138,"context_line":"        raise exception.InvalidParameterValue(msg)"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5a74a57a_2a29f037","line":136,"updated":"2016-12-01 06:00:44.000000000","message":"Output the value of the provided ironic_api also.\n\nI think that saying that it didn\u0027t start with http/https would be good. If I read this message I might not understand what \"protocol prefix\" means. And \u0027ftp://\u0027 would be a protocol, just not what is wanted.","commit_id":"0dcf15d2d0e2014f0cb05490fa3ed89b7283a89b"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"5d40fc0b15a944d6c3f48da5e7bcd6783e561752","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    # otherwise raise exception -"},{"line_number":134,"context_line":"    if not any(ironic_api.startswith(p) for p in ALLOWED_API_PROTOCOLS):"},{"line_number":135,"context_line":"        msg \u003d _(\"Ironic API address provided in configuration file does not \""},{"line_number":136,"context_line":"                \"contain protocol prefix.\")"},{"line_number":137,"context_line":"        LOG.error(msg)"},{"line_number":138,"context_line":"        raise exception.InvalidParameterValue(msg)"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a71b18c_209f9804","line":136,"in_reply_to":"5a74a57a_2a29f037","updated":"2016-12-01 14:39:28.000000000","message":"As there may be log aggregation, I think exposing api address in log may create a security issue... What do you think?\n\nI\u0027ll refactor the message to make it clearer about what is actually missing","commit_id":"0dcf15d2d0e2014f0cb05490fa3ed89b7283a89b"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"3f0d2938f4eb8104f9b33a5f509bedb512975eb2","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    # NOTE(jtaryma): check if protocol for ironic api was provided,"},{"line_number":133,"context_line":"    # otherwise raise exception"},{"line_number":134,"context_line":"    if not ironic_api.startswith(ALLOWED_API_PROTOCOLS):"},{"line_number":135,"context_line":"        msg \u003d _(\"Ironic API address in configuration file or keystone \""},{"line_number":136,"context_line":"                \"catalog does not contain http or https protocol prefix.\")"},{"line_number":137,"context_line":"        LOG.error(msg)"},{"line_number":138,"context_line":"        raise exception.InvalidParameterValue(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_fbaaa718","line":135,"updated":"2016-12-01 17:15:18.000000000","message":"I think printing the value that we have would be good.\n\nI don\u0027t think there is a security issue in exposing the API URL","commit_id":"13b08e8975402997f0d4be5425ed8f1aae323db9"},{"author":{"_account_id":14675,"name":"Hugo Nicodemos","email":"hugo.brito@windriver.com","username":"nicodemos"},"change_message_id":"25f34721ed3885c1b921d9db6e029c5e7ff7351e","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    # NOTE(jtaryma): check if protocol for ironic api was provided,"},{"line_number":133,"context_line":"    # otherwise raise exception"},{"line_number":134,"context_line":"    if not ironic_api.startswith(ALLOWED_API_PROTOCOLS):"},{"line_number":135,"context_line":"        msg \u003d _(\"Ironic API address in configuration file or keystone \""},{"line_number":136,"context_line":"                \"catalog does not contain http or https protocol prefix: \""},{"line_number":137,"context_line":"                \"%s\") % ironic_api"},{"line_number":138,"context_line":"        LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_6d2b3983","line":135,"updated":"2016-12-01 19:05:55.000000000","message":"nit: _LE","commit_id":"c20ad26797180fd00e5d794ec97231b3f2b1bc68"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"b365e229265851712f07fd5b218c5bdd22f2309a","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    # NOTE(jtaryma): check if protocol for ironic api was provided,"},{"line_number":133,"context_line":"    # otherwise raise exception"},{"line_number":134,"context_line":"    if not ironic_api.startswith(ALLOWED_API_PROTOCOLS):"},{"line_number":135,"context_line":"        msg \u003d _(\"Ironic API address in configuration file or keystone \""},{"line_number":136,"context_line":"                \"catalog does not contain http or https protocol prefix: \""},{"line_number":137,"context_line":"                \"%s\") % ironic_api"},{"line_number":138,"context_line":"        LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_d0993670","line":135,"in_reply_to":"3a71b18c_6d2b3983","updated":"2016-12-02 00:07:46.000000000","message":"No. This is the correct way to do it.\n\nSee:\n\nhttp://docs.openstack.org/developer/oslo.i18n/guidelines.html#choosing-a-marker-function","commit_id":"c20ad26797180fd00e5d794ec97231b3f2b1bc68"},{"author":{"_account_id":14675,"name":"Hugo Nicodemos","email":"hugo.brito@windriver.com","username":"nicodemos"},"change_message_id":"35e0197a8f958e6ee6ab7208dc16d908a3fc4f24","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    # NOTE(jtaryma): check if protocol for ironic api was provided,"},{"line_number":133,"context_line":"    # otherwise raise exception"},{"line_number":134,"context_line":"    if not ironic_api.startswith(ALLOWED_API_PROTOCOLS):"},{"line_number":135,"context_line":"        msg \u003d _(\"Ironic API address in configuration file or keystone \""},{"line_number":136,"context_line":"                \"catalog does not contain http or https protocol prefix: \""},{"line_number":137,"context_line":"                \"%s\") % ironic_api"},{"line_number":138,"context_line":"        LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_e92e28f9","line":135,"in_reply_to":"3a71b18c_d0993670","updated":"2016-12-02 16:18:00.000000000","message":"nice! Thanks, John.","commit_id":"c20ad26797180fd00e5d794ec97231b3f2b1bc68"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"5d2a659c34fd65e7fe2ca5d19b8e36b825d3729a","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    # NOTE(jtaryma): check if protocol for ironic api was provided,"},{"line_number":133,"context_line":"    # otherwise raise exception"},{"line_number":134,"context_line":"    if not ironic_api.startswith(ALLOWED_API_PROTOCOLS):"},{"line_number":135,"context_line":"        msg \u003d _(\"Ironic API address in configuration file or keystone \""},{"line_number":136,"context_line":"                \"catalog does not contain http or https protocol prefix: \""},{"line_number":137,"context_line":"                \"%s\") % ironic_api"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_f9dc1a14","line":134,"updated":"2016-12-03 22:00:07.000000000","message":"I think it\u0027s fine that this is here, but would it make more sense to have this error occur on service startup so that the operator can adjust their configuration appropriately?\n\nPlease correct me if this is executed on service startup somewhere.","commit_id":"160a001dd84c41bd7227dc581d1ef2e0541a574b"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"9a01a5749b5768a23cdd80ac9e714694a4bfe1bd","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    # NOTE(jtaryma): check if protocol for ironic api was provided,"},{"line_number":133,"context_line":"    # otherwise raise exception"},{"line_number":134,"context_line":"    if not ironic_api.startswith(ALLOWED_API_PROTOCOLS):"},{"line_number":135,"context_line":"        msg \u003d _(\"Ironic API address in configuration file or keystone \""},{"line_number":136,"context_line":"                \"catalog does not contain http or https protocol prefix: \""},{"line_number":137,"context_line":"                \"%s\") % ironic_api"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_b2cb9752","line":134,"in_reply_to":"3a71b18c_f9dc1a14","updated":"2016-12-04 09:59:42.000000000","message":"This function is executed in \"prepare\" function, that is called by agent deployment functions, that are called by node deployment (conductor.do_node_deploy)","commit_id":"160a001dd84c41bd7227dc581d1ef2e0541a574b"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"af00db652192ac28974a0c2c36873167ac9ccdb5","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    # NOTE(jtaryma): check if protocol for ironic api was provided,"},{"line_number":133,"context_line":"    # otherwise raise exception"},{"line_number":134,"context_line":"    if not ironic_api.startswith(ALLOWED_API_PROTOCOLS):"},{"line_number":135,"context_line":"        msg \u003d _(\"Ironic API address in configuration file or keystone \""},{"line_number":136,"context_line":"                \"catalog does not contain http or https protocol prefix: \""},{"line_number":137,"context_line":"                \"%s\") % ironic_api"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a71b18c_e67a6abc","line":134,"updated":"2016-12-06 10:37:55.000000000","message":"There\u0027s a \"regex\" parameter which the value of a configuration option must match in order to be considered valid [0].\n\nPerhaps we should use that instead of doing the validation by hand here ?\n\n[0] http://docs.openstack.org/developer/oslo.config/opts.html#oslo_config.cfg.StrOpt","commit_id":"f0963bd882fde0cf7789529999b5ddc7797eff4c"}],"ironic/tests/unit/drivers/modules/test_deploy_utils.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"b365e229265851712f07fd5b218c5bdd22f2309a","unresolved":false,"context_lines":[{"line_number":2049,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":2050,"context_line":"                          utils.build_agent_options, self.node)"},{"line_number":2051,"context_line":""},{"line_number":2052,"context_line":""},{"line_number":2053,"context_line":"@mock.patch.object(disk_utils, \u0027is_block_device\u0027, autospec\u003dTrue)"},{"line_number":2054,"context_line":"@mock.patch.object(utils, \u0027login_iscsi\u0027, lambda *_: None)"},{"line_number":2055,"context_line":"@mock.patch.object(utils, \u0027discovery\u0027, lambda *_: None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_f0039271","line":2052,"updated":"2016-12-02 00:07:46.000000000","message":"Please add unit tests which directly test the function get_ironic_api_url()\n\nSee around line 1560","commit_id":"c20ad26797180fd00e5d794ec97231b3f2b1bc68"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"fa2e02c59ab3f6b34548888eb169c72ba7f807d2","unresolved":false,"context_lines":[{"line_number":1592,"context_line":"    def test_get_ironic_api_url_no_protocol(self):"},{"line_number":1593,"context_line":"        self.config(api_url\u003d\u0027api-url\u0027, group\u003d\u0027conductor\u0027)"},{"line_number":1594,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":1595,"context_line":"                          utils.get_ironic_api_url)"},{"line_number":1596,"context_line":""},{"line_number":1597,"context_line":""},{"line_number":1598,"context_line":"class VirtualMediaDeployUtilsTestCase(db_base.DbTestCase):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_00ffa734","line":1595,"updated":"2016-12-02 22:45:22.000000000","message":"And maybe one failure case like \u0027ftp://www.example.com/\u0027 Can be in this same function.\n\nIf added to this function, the function name could be \u0027...invalid_protocol\u0027","commit_id":"fe0eaf54c8ca3b720290580189ae639c01c0e65c"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"fa2e02c59ab3f6b34548888eb169c72ba7f807d2","unresolved":false,"context_lines":[{"line_number":1593,"context_line":"        self.config(api_url\u003d\u0027api-url\u0027, group\u003d\u0027conductor\u0027)"},{"line_number":1594,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":1595,"context_line":"                          utils.get_ironic_api_url)"},{"line_number":1596,"context_line":""},{"line_number":1597,"context_line":""},{"line_number":1598,"context_line":"class VirtualMediaDeployUtilsTestCase(db_base.DbTestCase):"},{"line_number":1599,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_60ef7b87","line":1596,"updated":"2016-12-02 22:45:22.000000000","message":"Please add a valid protocol test too.  For \u0027http\u0027 and \u0027https\u0027\n\nBesides that I think this all looks good.","commit_id":"fe0eaf54c8ca3b720290580189ae639c01c0e65c"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"5d2a659c34fd65e7fe2ca5d19b8e36b825d3729a","unresolved":false,"context_lines":[{"line_number":1590,"context_line":"                          utils.get_ironic_api_url)"},{"line_number":1591,"context_line":""},{"line_number":1592,"context_line":"    def test_get_ironic_api_url_supported_protocol(self):"},{"line_number":1593,"context_line":"        fake_api_url \u003d \u0027http://api-url\u0027"},{"line_number":1594,"context_line":"        self.config(api_url\u003dfake_api_url, group\u003d\u0027conductor\u0027)"},{"line_number":1595,"context_line":"        url \u003d utils.get_ironic_api_url()"},{"line_number":1596,"context_line":"        self.assertEqual(url, fake_api_url)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_99eb26b0","line":1593,"updated":"2016-12-03 22:00:07.000000000","message":"It\u0027d be good to add a test for https, or modify this test for https, too.","commit_id":"160a001dd84c41bd7227dc581d1ef2e0541a574b"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"9a01a5749b5768a23cdd80ac9e714694a4bfe1bd","unresolved":false,"context_lines":[{"line_number":1590,"context_line":"                          utils.get_ironic_api_url)"},{"line_number":1591,"context_line":""},{"line_number":1592,"context_line":"    def test_get_ironic_api_url_supported_protocol(self):"},{"line_number":1593,"context_line":"        fake_api_url \u003d \u0027http://api-url\u0027"},{"line_number":1594,"context_line":"        self.config(api_url\u003dfake_api_url, group\u003d\u0027conductor\u0027)"},{"line_number":1595,"context_line":"        url \u003d utils.get_ironic_api_url()"},{"line_number":1596,"context_line":"        self.assertEqual(url, fake_api_url)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a71b18c_f2c50f3c","line":1593,"in_reply_to":"3a71b18c_99eb26b0","updated":"2016-12-04 09:59:42.000000000","message":"Done","commit_id":"160a001dd84c41bd7227dc581d1ef2e0541a574b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"aa48c2698f66b64f124779a52d24ac9d76024f76","unresolved":false,"context_lines":[{"line_number":2019,"context_line":"        self._test_tear_down_inband_cleaning(manage_boot\u003dFalse)"},{"line_number":2020,"context_line":""},{"line_number":2021,"context_line":"    def test_build_agent_options_conf(self):"},{"line_number":2022,"context_line":"        self.config(api_url\u003d\u0027https://api-url\u0027, group\u003d\u0027conductor\u0027)"},{"line_number":2023,"context_line":"        options \u003d utils.build_agent_options(self.node)"},{"line_number":2024,"context_line":"        self.assertEqual(\u0027https://api-url\u0027, options[\u0027ipa-api-url\u0027])"},{"line_number":2025,"context_line":"        self.assertEqual(0, options[\u0027coreos.configdrive\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_698cd17f","line":2022,"updated":"2016-12-09 08:40:47.000000000","message":"Please add a test that shows other values than http[s] lead to error.","commit_id":"4605acc0eae51e175c46f1f9201feca67325ddf0"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"a9f5b7c6afc5f04ee663d9dd984858a5885d3ff1","unresolved":false,"context_lines":[{"line_number":2019,"context_line":"        self._test_tear_down_inband_cleaning(manage_boot\u003dFalse)"},{"line_number":2020,"context_line":""},{"line_number":2021,"context_line":"    def test_build_agent_options_conf(self):"},{"line_number":2022,"context_line":"        self.config(api_url\u003d\u0027https://api-url\u0027, group\u003d\u0027conductor\u0027)"},{"line_number":2023,"context_line":"        options \u003d utils.build_agent_options(self.node)"},{"line_number":2024,"context_line":"        self.assertEqual(\u0027https://api-url\u0027, options[\u0027ipa-api-url\u0027])"},{"line_number":2025,"context_line":"        self.assertEqual(0, options[\u0027coreos.configdrive\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_48ff6b34","line":2022,"in_reply_to":"3a71b18c_3295c7e3","updated":"2016-12-12 17:25:46.000000000","message":"Exactly. It will fail in oslo.","commit_id":"4605acc0eae51e175c46f1f9201feca67325ddf0"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"3499e509e37f2a9ec1786985e202ffcb6f1303ff","unresolved":false,"context_lines":[{"line_number":2019,"context_line":"        self._test_tear_down_inband_cleaning(manage_boot\u003dFalse)"},{"line_number":2020,"context_line":""},{"line_number":2021,"context_line":"    def test_build_agent_options_conf(self):"},{"line_number":2022,"context_line":"        self.config(api_url\u003d\u0027https://api-url\u0027, group\u003d\u0027conductor\u0027)"},{"line_number":2023,"context_line":"        options \u003d utils.build_agent_options(self.node)"},{"line_number":2024,"context_line":"        self.assertEqual(\u0027https://api-url\u0027, options[\u0027ipa-api-url\u0027])"},{"line_number":2025,"context_line":"        self.assertEqual(0, options[\u0027coreos.configdrive\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a71b18c_3295c7e3","line":2022,"in_reply_to":"3a71b18c_698cd17f","updated":"2016-12-09 17:37:37.000000000","message":"They won\u0027t lead to failure though. As the check is done in the config options check.\n\nI think this change was just done to show that it should be https / http","commit_id":"4605acc0eae51e175c46f1f9201feca67325ddf0"}],"releasenotes/notes/check_protocol_for_ironic_api-32f35c93a140d3ae.yaml":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"64ca530d5236a5edc471d6ab373de5dcde1167cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3a71b18c_def6b9d6","line":7,"updated":"2016-12-01 17:23:20.000000000","message":"If the ``[conductor]/api_url`` value specified does not start with either ``https://`` or ``http://`` an exception will be raised and an error logged.","commit_id":"13b08e8975402997f0d4be5425ed8f1aae323db9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"49669b01f087f32e4a3f2e53ea6e968cdbcf5c93","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - If the ``[conductor]/api_url`` value specified does not start"},{"line_number":4,"context_line":"    with either ``https://`` or ``http://`` an exception will be"},{"line_number":5,"context_line":"    raised and an error logged."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"3a71b18c_ea4aba26","line":5,"range":{"start_line":4,"start_character":44,"end_line":5,"end_character":30},"updated":"2016-12-08 13:22:44.000000000","message":"If we\u0027re noting this behavior to a user, I feel that we should have a test that verifies this behavior is the case moving forward, since otherwise the regex could just be changed in such a way that is unintended reverting the behavior.","commit_id":"2c16cb958382f3dcc294015a21b1d546c3fb1428"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"27bcc239252e28c9cb0c7605dc0d622a96069bfb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - If the ``[conductor]/api_url`` value specified does not start"},{"line_number":4,"context_line":"    with either ``https://`` or ``http://`` an exception will be"},{"line_number":5,"context_line":"    raised and an error logged."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"3a71b18c_a5e713ab","line":5,"range":{"start_line":4,"start_character":44,"end_line":5,"end_character":30},"in_reply_to":"3a71b18c_ea4aba26","updated":"2016-12-08 13:53:25.000000000","message":"Please see the result of setting inbvalid value (log entry + traceback) here:\nhttps://etherpad.openstack.org/p/joanna-api-bug\n\nI am not sure if there\u0027s any good option to test it within ironic. Please let me know if you see any.","commit_id":"2c16cb958382f3dcc294015a21b1d546c3fb1428"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e654ae50f838f9bfec2412ef4bddf6e04ef7b86b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - If the ``[conductor]/api_url`` value specified does not start"},{"line_number":4,"context_line":"    with either ``https://`` or ``http://`` an exception will be"},{"line_number":5,"context_line":"    raised and an error logged."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3a71b18c_7b3bda9c","line":4,"updated":"2016-12-08 14:21:14.000000000","message":"I think this release note needs to be updated. As I think the service will fail to start up.","commit_id":"fd4766c02a6c8bb102551a05f45efe6e9660b13b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"aa48c2698f66b64f124779a52d24ac9d76024f76","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - Ironic-api and ironic-conductor will fail to start if the"},{"line_number":4,"context_line":"    ``[conductor]/api_url`` value specified in the configuration"},{"line_number":5,"context_line":"    file does not start with either ``https://`` or ``http://``."},{"line_number":6,"context_line":"    An exception will be raised and an error about the invalid"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"3a71b18c_89820d51","line":3,"updated":"2016-12-09 08:40:47.000000000","message":"Ironic conductor and API start successfully even when api_url is set to 1.1.1.1:1234 without protocol. The problem occurs on ironic python agent side. Please rephrase release notes.","commit_id":"4605acc0eae51e175c46f1f9201feca67325ddf0"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"e1d5ab82cf8110a43aec30d477c7a93abfeb11d1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - Ironic-api and ironic-conductor will fail to start if the"},{"line_number":4,"context_line":"    ``[conductor]/api_url`` value specified in the configuration"},{"line_number":5,"context_line":"    file does not start with either ``https://`` or ``http://``."},{"line_number":6,"context_line":"    An exception will be raised and an error about the invalid"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"3a71b18c_2dd3ac39","line":3,"in_reply_to":"3a71b18c_892ccd4b","updated":"2016-12-09 17:49:01.000000000","message":"+1 agree this should be changed to a \"fixes:\" since this configuration would\u0027ve never worked before, but simply failed later.","commit_id":"4605acc0eae51e175c46f1f9201feca67325ddf0"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2a99a0e5a77f30c7ec5b01dc779d75ecca9f08e1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - Ironic-api and ironic-conductor will fail to start if the"},{"line_number":4,"context_line":"    ``[conductor]/api_url`` value specified in the configuration"},{"line_number":5,"context_line":"    file does not start with either ``https://`` or ``http://``."},{"line_number":6,"context_line":"    An exception will be raised and an error about the invalid"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"3a71b18c_892ccd4b","line":3,"in_reply_to":"3a71b18c_89820d51","updated":"2016-12-09 08:45:47.000000000","message":"Ah, with this patch indeed conductor will fail to start. What do you think about the following:\n\nfixes:\n - An issue when incorrect ipa_irl was provided for example url that do not contain protocol \u00271.2.3.4:1234\u0027 lead to deployment failure on ironic-python-agent side. This misconfiguration is catched on ironic conductor/api start time.\nupgrade:\n - ....","commit_id":"4605acc0eae51e175c46f1f9201feca67325ddf0"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"c3b62ff365aa587ec64409ad0ae33648a534b386","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Accepting ``[conductor]/api_url`` value specified in the configuration"},{"line_number":4,"context_line":"    file that does not start with either ``https://`` or ``http://``."},{"line_number":5,"context_line":"    Such value leads to deployment failure on ironic-python-agent side."},{"line_number":6,"context_line":"    This misconfiguration will be detected during ironic-conductor"},{"line_number":7,"context_line":"    and ironic-api start. An exception will be raised and an error about"},{"line_number":8,"context_line":"    the invalid value will be logged."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"1a6eadb0_596e0c30","line":8,"range":{"start_line":3,"start_character":4,"end_line":8,"end_character":37},"updated":"2016-12-14 06:27:25.000000000","message":"Looks like too many info. I prefer something like ``https://`` or ``http://`` protocol prefix is mandatory now for ``[conductor]/api_url`` config option. See https://bugs.launchpad.net/ironic/+bug/1630785 for details.\"","commit_id":"30a4340175f1991517d21226b1b26eaf7bd2234c"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"91f1ba480d382065217bc42023a3d00db989598f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Accepting ``[conductor]/api_url`` value specified in the configuration"},{"line_number":4,"context_line":"    file that does not start with either ``https://`` or ``http://``."},{"line_number":5,"context_line":"    Such value leads to deployment failure on ironic-python-agent side."},{"line_number":6,"context_line":"    This misconfiguration will be detected during ironic-conductor"},{"line_number":7,"context_line":"    and ironic-api start. An exception will be raised and an error about"},{"line_number":8,"context_line":"    the invalid value will be logged."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"1a6eadb0_ed6e202e","line":8,"range":{"start_line":3,"start_character":4,"end_line":8,"end_character":37},"in_reply_to":"1a6eadb0_596e0c30","updated":"2016-12-14 14:00:20.000000000","message":"In case of such info, it\u0027d sound more like an upgrade. It was like that before, and I changed it to this after the reviews.","commit_id":"30a4340175f1991517d21226b1b26eaf7bd2234c"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"466b4c741faafa8980318fb8c76e02f3e6bf6ac5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Accepting ``[conductor]/api_url`` value specified in the configuration"},{"line_number":4,"context_line":"    file that does not start with either ``https://`` or ``http://``."},{"line_number":5,"context_line":"    Such value leads to deployment failure on ironic-python-agent side."},{"line_number":6,"context_line":"    This misconfiguration will be detected during ironic-conductor"},{"line_number":7,"context_line":"    and ironic-api start. An exception will be raised and an error about"},{"line_number":8,"context_line":"    the invalid value will be logged."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"1a6eadb0_d1dc9ee6","line":8,"range":{"start_line":3,"start_character":4,"end_line":8,"end_character":37},"in_reply_to":"1a6eadb0_ed6e202e","updated":"2016-12-14 14:21:18.000000000","message":"Ok, if people want more info let it be.","commit_id":"30a4340175f1991517d21226b1b26eaf7bd2234c"}],"releasenotes/notes/default_protocol_for_ironic_api":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"7634ba4b8dbcf7c008856d3e6425d984cd15365f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5a74a57a_9a77c4d3","line":7,"updated":"2016-11-30 21:55:30.000000000","message":"This does not look like the reno command was used to generate the file, at least by file name.  You should likely look at using the reno command.","commit_id":"6e53d0721a126d9405c62c6762167a0eabd4883c"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"d0500c46a8d00e99d7d251c357232da603d60194","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"5a74a57a_ab6350dc","line":7,"in_reply_to":"5a74a57a_9a77c4d3","updated":"2016-11-30 23:31:07.000000000","message":"Ah, yes! I moved the file to change the name, but I forgot about suffix that reno generated... WIP","commit_id":"6e53d0721a126d9405c62c6762167a0eabd4883c"}]}
