)]}'
{"openstack/config/cloud_region.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"772d27412190a85a2585723e1eea236dc4a16b83","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from openstack.config import defaults as config_defaults"},{"line_number":29,"context_line":"from openstack import exceptions"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"_service_type_manager \u003d os_service_types.ServiceTypes()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def _make_key(key, service_type):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_87dda471","line":31,"updated":"2018-05-27 10:40:44.000000000","message":"nit: global objects make it hard to mock things in tests. maybe move to CloudRegion.__init__?","commit_id":"9f5af3baac7be0e8aa92e4ace2928b5795cae9b9"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"09b7c15e9d810b7be875772272ad2f590bc13a04","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from openstack.config import defaults as config_defaults"},{"line_number":29,"context_line":"from openstack import exceptions"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"_service_type_manager \u003d os_service_types.ServiceTypes()"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def _make_key(key, service_type):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_877e0417","line":31,"in_reply_to":"5f7c97a3_87dda471","updated":"2018-05-27 13:20:21.000000000","message":"Done","commit_id":"9f5af3baac7be0e8aa92e4ace2928b5795cae9b9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"772d27412190a85a2585723e1eea236dc4a16b83","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    def get_auth_args(self):"},{"line_number":192,"context_line":"        return self.config.get(\u0027auth\u0027, {})"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _get_config(self, key, service_type, unprefixed\u003dFalse):"},{"line_number":195,"context_line":"        for st in _service_type_manager.get_all_types(service_type):"},{"line_number":196,"context_line":"            value \u003d self.config.get(_make_key(key, st))"},{"line_number":197,"context_line":"            if value is not None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_a7da2075","line":194,"updated":"2018-05-27 10:40:44.000000000","message":"nit: s/unprefixed/fallback_to_unprefixed/ or something like this. otherwise it sounds like you just fetch the unprefixed config, which you don\u0027t\n\n/me would not mind a docstring for this method actually :)","commit_id":"9f5af3baac7be0e8aa92e4ace2928b5795cae9b9"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"09b7c15e9d810b7be875772272ad2f590bc13a04","unresolved":false,"context_lines":[{"line_number":191,"context_line":"    def get_auth_args(self):"},{"line_number":192,"context_line":"        return self.config.get(\u0027auth\u0027, {})"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def _get_config(self, key, service_type, unprefixed\u003dFalse):"},{"line_number":195,"context_line":"        for st in _service_type_manager.get_all_types(service_type):"},{"line_number":196,"context_line":"            value \u003d self.config.get(_make_key(key, st))"},{"line_number":197,"context_line":"            if value is not None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_67716844","line":194,"in_reply_to":"5f7c97a3_a7da2075","updated":"2018-05-27 13:20:21.000000000","message":"Good point ... done and done!","commit_id":"9f5af3baac7be0e8aa92e4ace2928b5795cae9b9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"772d27412190a85a2585723e1eea236dc4a16b83","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        # v1 of cinder. If someone actually wants v1, they\u0027ll have api_version"},{"line_number":213,"context_line":"        # set to 1, in which case block-storage will still work properly."},{"line_number":214,"context_line":"        if service_type \u003d\u003d \u0027volume\u0027:"},{"line_number":215,"context_line":"            service_type \u003d \u0027block-storage\u0027"},{"line_number":216,"context_line":"        return self._get_config(\u0027service_type\u0027, service_type) or service_type"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def get_service_name(self, service_type):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_47e30c35","line":215,"updated":"2018-05-27 10:40:44.000000000","message":"side note: I wonder if we should move this logic to os-service-types..","commit_id":"9f5af3baac7be0e8aa92e4ace2928b5795cae9b9"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"09b7c15e9d810b7be875772272ad2f590bc13a04","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        # v1 of cinder. If someone actually wants v1, they\u0027ll have api_version"},{"line_number":213,"context_line":"        # set to 1, in which case block-storage will still work properly."},{"line_number":214,"context_line":"        if service_type \u003d\u003d \u0027volume\u0027:"},{"line_number":215,"context_line":"            service_type \u003d \u0027block-storage\u0027"},{"line_number":216,"context_line":"        return self._get_config(\u0027service_type\u0027, service_type) or service_type"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def get_service_name(self, service_type):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_e79a5860","line":215,"in_reply_to":"5f7c97a3_47e30c35","updated":"2018-05-27 13:20:21.000000000","message":"Yeah. Actually - great point. I think we can actually generalize this too.","commit_id":"9f5af3baac7be0e8aa92e4ace2928b5795cae9b9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"772d27412190a85a2585723e1eea236dc4a16b83","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        # set to 1, in which case block-storage will still work properly."},{"line_number":214,"context_line":"        if service_type \u003d\u003d \u0027volume\u0027:"},{"line_number":215,"context_line":"            service_type \u003d \u0027block-storage\u0027"},{"line_number":216,"context_line":"        return self._get_config(\u0027service_type\u0027, service_type) or service_type"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def get_service_name(self, service_type):"},{"line_number":219,"context_line":"        return self._get_config(\u0027service_name\u0027, service_type)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_67e08827","line":216,"updated":"2018-05-27 10:40:44.000000000","message":"nit: this is probably asking for a \"default\" argument to _get_config","commit_id":"9f5af3baac7be0e8aa92e4ace2928b5795cae9b9"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"09b7c15e9d810b7be875772272ad2f590bc13a04","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        # set to 1, in which case block-storage will still work properly."},{"line_number":214,"context_line":"        if service_type \u003d\u003d \u0027volume\u0027:"},{"line_number":215,"context_line":"            service_type \u003d \u0027block-storage\u0027"},{"line_number":216,"context_line":"        return self._get_config(\u0027service_type\u0027, service_type) or service_type"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def get_service_name(self, service_type):"},{"line_number":219,"context_line":"        return self._get_config(\u0027service_name\u0027, service_type)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_0790b442","line":216,"in_reply_to":"5f7c97a3_67e08827","updated":"2018-05-27 13:20:21.000000000","message":"Yah.","commit_id":"9f5af3baac7be0e8aa92e4ace2928b5795cae9b9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a7117fb91cd2470595edd92dbe8646a7736dc4b7","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        Finds the config value for a key, looking first for it prefixed by"},{"line_number":201,"context_line":"        the given service_type, then by any known aliases of that service_type."},{"line_number":202,"context_line":"        Finally, if fallback_to_unprefixed is given, a value will be looked"},{"line_number":203,"context_line":"        for without a prefix to support the config values where a global"},{"line_number":204,"context_line":"        default makes sense."},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_5f68b01b","line":202,"updated":"2018-05-28 08:46:00.000000000","message":"nit: s/is given/is True/","commit_id":"77ddf25b5deb1067255bb6f132ffa9dc5ecbb643"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"91016f156db576eeaa02f27ef20b6a5362c4844b","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"        Finds the config value for a key, looking first for it prefixed by"},{"line_number":201,"context_line":"        the given service_type, then by any known aliases of that service_type."},{"line_number":202,"context_line":"        Finally, if fallback_to_unprefixed is given, a value will be looked"},{"line_number":203,"context_line":"        for without a prefix to support the config values where a global"},{"line_number":204,"context_line":"        default makes sense."},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_9373ae80","line":202,"in_reply_to":"5f7c97a3_5f68b01b","updated":"2018-06-09 14:01:08.000000000","message":"Done","commit_id":"77ddf25b5deb1067255bb6f132ffa9dc5ecbb643"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"032309fdbe9d1763642d9a69f04fd9bf53304113","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        \u0027\u0027\u0027"},{"line_number":213,"context_line":"        for st in self._service_type_manager.get_all_types(service_type):"},{"line_number":214,"context_line":"            value \u003d self.config.get(_make_key(key, st))"},{"line_number":215,"context_line":"            if value is not None:"},{"line_number":216,"context_line":"                return value"},{"line_number":217,"context_line":"        if fallback_to_unprefixed:"},{"line_number":218,"context_line":"            return self.config.get(key)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_c83ab6cb","line":215,"updated":"2018-06-11 16:00:42.000000000","message":"I wonder if None can ever be a correct value..","commit_id":"dade89b51f89e8fe6ef071e3f6f7670a207a0081"}],"openstack/config/schema.json":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"772d27412190a85a2585723e1eea236dc4a16b83","unresolved":false,"context_lines":[{"line_number":109,"context_line":"  \"required\": ["},{"line_number":110,"context_line":"    \"auth_type\","},{"line_number":111,"context_line":"    \"baremetal_api_version\","},{"line_number":112,"context_line":"    \"block_storage_api_version\","},{"line_number":113,"context_line":"    \"compute_api_version\","},{"line_number":114,"context_line":"    \"database_api_version\","},{"line_number":115,"context_line":"    \"disable_vendor_agent\","}],"source_content_type":"application/json","patch_set":6,"id":"5f7c97a3_07d3d461","line":112,"updated":"2018-05-27 10:40:44.000000000","message":"this is a breaking change for people having only volume_api_version","commit_id":"9f5af3baac7be0e8aa92e4ace2928b5795cae9b9"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"09b7c15e9d810b7be875772272ad2f590bc13a04","unresolved":false,"context_lines":[{"line_number":109,"context_line":"  \"required\": ["},{"line_number":110,"context_line":"    \"auth_type\","},{"line_number":111,"context_line":"    \"baremetal_api_version\","},{"line_number":112,"context_line":"    \"block_storage_api_version\","},{"line_number":113,"context_line":"    \"compute_api_version\","},{"line_number":114,"context_line":"    \"database_api_version\","},{"line_number":115,"context_line":"    \"disable_vendor_agent\","}],"source_content_type":"application/json","patch_set":6,"id":"5f7c97a3_87a3649e","line":112,"in_reply_to":"5f7c97a3_07d3d461","updated":"2018-05-27 13:20:21.000000000","message":"Doh","commit_id":"9f5af3baac7be0e8aa92e4ace2928b5795cae9b9"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a7117fb91cd2470595edd92dbe8646a7736dc4b7","unresolved":false,"context_lines":[{"line_number":109,"context_line":"  \"required\": ["},{"line_number":110,"context_line":"    \"auth_type\","},{"line_number":111,"context_line":"    \"baremetal_api_version\","},{"line_number":112,"context_line":"    \"block_storage_api_version\","},{"line_number":113,"context_line":"    \"compute_api_version\","},{"line_number":114,"context_line":"    \"database_api_version\","},{"line_number":115,"context_line":"    \"disable_vendor_agent\","}],"source_content_type":"application/json","patch_set":8,"id":"5f7c97a3_ff589c8a","line":112,"updated":"2018-05-28 08:46:00.000000000","message":"Just to double-check my understanding: is this schema applied directly to the user\u0027s configuration or are the defaults applied first? If the former, any addition here is a breaking change.","commit_id":"77ddf25b5deb1067255bb6f132ffa9dc5ecbb643"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"91016f156db576eeaa02f27ef20b6a5362c4844b","unresolved":false,"context_lines":[{"line_number":109,"context_line":"  \"required\": ["},{"line_number":110,"context_line":"    \"auth_type\","},{"line_number":111,"context_line":"    \"baremetal_api_version\","},{"line_number":112,"context_line":"    \"block_storage_api_version\","},{"line_number":113,"context_line":"    \"compute_api_version\","},{"line_number":114,"context_line":"    \"database_api_version\","},{"line_number":115,"context_line":"    \"disable_vendor_agent\","}],"source_content_type":"application/json","patch_set":8,"id":"5f7c97a3_3365fab5","line":112,"in_reply_to":"5f7c97a3_ff589c8a","updated":"2018-06-09 14:01:08.000000000","message":"It\u0027s actually not applied anywhere during normal operation - it\u0027s mostly there for documentation and is used in unittests of the defaults file itself. I\u0027m not 100% sure this file existing is useful to anyone tbh.","commit_id":"77ddf25b5deb1067255bb6f132ffa9dc5ecbb643"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a7117fb91cd2470595edd92dbe8646a7736dc4b7","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    \"network_api_version\","},{"line_number":124,"context_line":"    \"object_store_api_version\","},{"line_number":125,"context_line":"    \"secgroup_source\","},{"line_number":126,"context_line":"    \"volume_api_version\""},{"line_number":127,"context_line":"  ]"},{"line_number":128,"context_line":"}"}],"source_content_type":"application/json","patch_set":8,"id":"5f7c97a3_1f5eb875","line":126,"updated":"2018-05-28 08:46:00.000000000","message":"I think it\u0027s safe to remove this from required in any case, as long as we still accept it. My concerns were mostly around adding new requirements. Then we probably can remove it from the defaults as well..","commit_id":"77ddf25b5deb1067255bb6f132ffa9dc5ecbb643"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"91016f156db576eeaa02f27ef20b6a5362c4844b","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    \"network_api_version\","},{"line_number":124,"context_line":"    \"object_store_api_version\","},{"line_number":125,"context_line":"    \"secgroup_source\","},{"line_number":126,"context_line":"    \"volume_api_version\""},{"line_number":127,"context_line":"  ]"},{"line_number":128,"context_line":"}"}],"source_content_type":"application/json","patch_set":8,"id":"5f7c97a3_d355a6c3","line":126,"in_reply_to":"5f7c97a3_1f5eb875","updated":"2018-06-09 14:01:08.000000000","message":"Yah. Good point.","commit_id":"77ddf25b5deb1067255bb6f132ffa9dc5ecbb643"}],"releasenotes/notes/config-aliases-0f6297eafd05c07c.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"772d27412190a85a2585723e1eea236dc4a16b83","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Config values now support service-type aliases. The correct config names"},{"line_number":5,"context_line":"    are based on the official service type, such as"},{"line_number":6,"context_line":"    ``block_storage_api_version``, but with this change, legacy aliases such"},{"line_number":7,"context_line":"    as ``volume_api_version`` are also supported."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_27d85079","line":7,"updated":"2018-05-27 10:40:44.000000000","message":"well.. judging by the schema, block_storage_api_version is required, so this sentence is not quite true","commit_id":"9f5af3baac7be0e8aa92e4ace2928b5795cae9b9"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"09b7c15e9d810b7be875772272ad2f590bc13a04","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Config values now support service-type aliases. The correct config names"},{"line_number":5,"context_line":"    are based on the official service type, such as"},{"line_number":6,"context_line":"    ``block_storage_api_version``, but with this change, legacy aliases such"},{"line_number":7,"context_line":"    as ``volume_api_version`` are also supported."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_47a9cc79","line":7,"in_reply_to":"5f7c97a3_27d85079","updated":"2018-05-27 13:20:21.000000000","message":"It\u0027s required in the schema, but provided by defaults. That said ... we really do need to rework that schema.","commit_id":"9f5af3baac7be0e8aa92e4ace2928b5795cae9b9"}]}
