)]}'
{"rally/env/env_mgr.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"8f4ccd62cebe02e601b772ab49b495af7e152602","unresolved":false,"context_lines":[{"line_number":55,"context_line":"STATUS \u003d _EnvStatus()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"SPEC_SCHEMA \u003d {"},{"line_number":58,"context_line":"    \"type\": \"object\","},{"line_number":59,"context_line":"    \"properties\": {"},{"line_number":60,"context_line":"        \"!version\": {"},{"line_number":61,"context_line":"            \"type\": \"integer\","}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_31032845","line":58,"range":{"start_line":58,"start_character":4,"end_line":58,"end_character":21},"updated":"2018-02-05 13:34:14.000000000","message":"you need to add `\"additionalProperties\": False`","commit_id":"68be626ff3df5c8c06936f7f54a01a6bf83eaf00"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4169dd305d16fcf59b3bb57be10c0df766b4fb9a","unresolved":false,"context_lines":[{"line_number":55,"context_line":"STATUS \u003d _EnvStatus()"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"SPEC_SCHEMA \u003d {"},{"line_number":58,"context_line":"    \"type\": \"object\","},{"line_number":59,"context_line":"    \"properties\": {"},{"line_number":60,"context_line":"        \"!version\": {"},{"line_number":61,"context_line":"            \"type\": \"integer\","}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_0bf354a0","line":58,"range":{"start_line":58,"start_character":4,"end_line":58,"end_character":21},"in_reply_to":"3fa0c359_31032845","updated":"2018-02-05 18:12:46.000000000","message":"fixed","commit_id":"68be626ff3df5c8c06936f7f54a01a6bf83eaf00"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"8f4ccd62cebe02e601b772ab49b495af7e152602","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            },"},{"line_number":87,"context_line":"            \"description\": \"Keys are groups, values are options names\""},{"line_number":88,"context_line":"        },"},{"line_number":89,"context_line":"        \"*\": {"},{"line_number":90,"context_line":"            \"type\": \"object\","},{"line_number":91,"context_line":"            \"description\": ("},{"line_number":92,"context_line":"                \"Key is platform plugin name, values are plugin specs\")"},{"line_number":93,"context_line":"        }"},{"line_number":94,"context_line":"    }"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_512114b4","line":93,"range":{"start_line":89,"start_character":8,"end_line":93,"end_character":9},"updated":"2018-02-05 13:34:14.000000000","message":"1) it should be specified separately via patternProperties.\n2) it would be nice to replace \"*\" with something more strict which doesn\u0027t conflict with \"special\" properties (i.e. \"!version\"). \"^([a-zA-Z0-9_.])+(@[a-zA-Z0-9_]+)*$\" should cover the case","commit_id":"68be626ff3df5c8c06936f7f54a01a6bf83eaf00"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4169dd305d16fcf59b3bb57be10c0df766b4fb9a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"            },"},{"line_number":87,"context_line":"            \"description\": \"Keys are groups, values are options names\""},{"line_number":88,"context_line":"        },"},{"line_number":89,"context_line":"        \"*\": {"},{"line_number":90,"context_line":"            \"type\": \"object\","},{"line_number":91,"context_line":"            \"description\": ("},{"line_number":92,"context_line":"                \"Key is platform plugin name, values are plugin specs\")"},{"line_number":93,"context_line":"        }"},{"line_number":94,"context_line":"    }"},{"line_number":95,"context_line":"}"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_4b271c14","line":93,"range":{"start_line":89,"start_character":8,"end_line":93,"end_character":9},"in_reply_to":"3fa0c359_512114b4","updated":"2018-02-05 18:12:46.000000000","message":"I added some protection for @ (so it can be 0 of 1) and ! can\u0027t be used now as well. \n\nDon\u0027t think that we should validate anything else at this level... probably we just need to add all naming limitations to plugin base it self.","commit_id":"68be626ff3df5c8c06936f7f54a01a6bf83eaf00"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"8f4ccd62cebe02e601b772ab49b495af7e152602","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    @property"},{"line_number":153,"context_line":"    def cached_data(self):"},{"line_number":154,"context_line":"        platforms \u003d []"},{"line_number":155,"context_line":"        for p in self._env[\"platforms\"]:"},{"line_number":156,"context_line":"            p \u003d copy.deepcopy(p)"},{"line_number":157,"context_line":"            for k in [\"created_at\", \"updated_at\"]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_b1197889","line":154,"range":{"start_line":154,"start_character":8,"end_line":154,"end_character":22},"updated":"2018-02-05 13:34:14.000000000","message":"can we use dict here? it should simplify the usage..","commit_id":"68be626ff3df5c8c06936f7f54a01a6bf83eaf00"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"4169dd305d16fcf59b3bb57be10c0df766b4fb9a","unresolved":false,"context_lines":[{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    @property"},{"line_number":153,"context_line":"    def cached_data(self):"},{"line_number":154,"context_line":"        platforms \u003d []"},{"line_number":155,"context_line":"        for p in self._env[\"platforms\"]:"},{"line_number":156,"context_line":"            p \u003d copy.deepcopy(p)"},{"line_number":157,"context_line":"            for k in [\"created_at\", \"updated_at\"]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_2b1e50ba","line":154,"range":{"start_line":154,"start_character":8,"end_line":154,"end_character":22},"in_reply_to":"3fa0c359_b1197889","updated":"2018-02-05 18:12:46.000000000","message":"let\u0027s do this in some other patch, this one is too big already","commit_id":"68be626ff3df5c8c06936f7f54a01a6bf83eaf00"}],"rally/plugins/openstack/platforms/existing.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"f27a2ce683d099b36ebc189220edd47512b867c5","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        \"\"\"Return information about cloud as dict.\"\"\""},{"line_number":176,"context_line":"        active_user \u003d (self.platform_data[\"admin\"] or"},{"line_number":177,"context_line":"                       self.platform_data[\"users\"][0])"},{"line_number":178,"context_line":"        services \u003d osclients.Clients(active_user).keystone().list_services()"},{"line_number":179,"context_line":"        return {"},{"line_number":180,"context_line":"            \"info\": {"},{"line_number":181,"context_line":"                \"services\": services,"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_2aaf0d95","line":178,"range":{"start_line":178,"start_character":49,"end_line":178,"end_character":76},"updated":"2018-01-22 12:32:16.000000000","message":"As far as I remember, it works only for admin user. For regular user, it is not permitted and osclients.Clients(active_user).keystone.service_catalog.get_endpoints() should be used instead.","commit_id":"6edf253a4e8b8418e74b88a169a725cf799225fa"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"afeef5869df8ca94f98a51af41b441d9fe23c0ac","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"    def info(self):"},{"line_number":176,"context_line":"        \"\"\"Return information about cloud as dict.\"\"\""},{"line_number":177,"context_line":"        active_user \u003d (self.platform_data[\"admin\"] or"},{"line_number":178,"context_line":"                       self.platform_data[\"users\"][0])"},{"line_number":179,"context_line":"        services \u003d osclients.Clients(active_user).keystone().list_services()"},{"line_number":180,"context_line":"        return {"},{"line_number":181,"context_line":"            \"info\": {"},{"line_number":182,"context_line":"                \"services\": services"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_cc04907e","line":179,"range":{"start_line":177,"start_character":1,"end_line":179,"end_character":76},"updated":"2018-02-06 10:32:20.000000000","message":"As Andrey said,  this interface only is permitted with Admin user.","commit_id":"e625be6d88652c0713df91b77e09003c10e7b159"}]}
