)]}'
{"rally-jobs/cinder.yaml":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"13eeda349158abea240f3d0a4d2b2caab9d38b22","unresolved":false,"context_lines":[{"line_number":550,"context_line":"          flavor:"},{"line_number":551,"context_line":"            name: {{flavor_name}}"},{"line_number":552,"context_line":"          servers_per_tenant: 1"},{"line_number":553,"context_line":"        volume_types:"},{"line_number":554,"context_line":"          - \"lvmdriver-1\""},{"line_number":555,"context_line":"      sla:"},{"line_number":556,"context_line":"        failure_rate:"},{"line_number":557,"context_line":"          max: 0"}],"source_content_type":"text/x-yaml","patch_set":17,"id":"df140735_f8633adb","line":554,"range":{"start_line":553,"start_character":7,"end_line":554,"end_character":25},"updated":"2017-05-31 15:42:39.000000000","message":"I suppose that `lvmdriver` is a default one(it is already precreated in the cluster) and that is why context fails. Let\u0027s use custon name for it.","commit_id":"537e1cdfae65f83b638b1a8b40933527d757fde3"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"ac10e7947d7c7c87e5c43ab5bf05462ed1bc92e4","unresolved":false,"context_lines":[{"line_number":532,"context_line":""},{"line_number":533,"context_line":"    -"},{"line_number":534,"context_line":"      args:"},{"line_number":535,"context_line":"        volume_type: \"lvmdriver-1\""},{"line_number":536,"context_line":"        size:"},{"line_number":537,"context_line":"          min: 1"},{"line_number":538,"context_line":"          max: 1"}],"source_content_type":"text/x-yaml","patch_set":19,"id":"df140735_f30f6b85","line":535,"range":{"start_line":535,"start_character":21,"end_line":535,"end_character":34},"updated":"2017-06-05 09:20:40.000000000","message":"it should be \"test\", so we will able to check that it is possible to use volume type created from context (see L553-L554)","commit_id":"189122cd123baf809e8f948bd1230df0fe08569c"}],"rally/plugins/openstack/validators.py":[{"author":{"_account_id":19011,"name":"Anton Studenov","email":"tohin1332@gmail.com","username":"tohin"},"change_message_id":"402757fa243efabffa86a45166c46135e69b8687","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        if config.get(\"args\", {}).get(self.param, False):"},{"line_number":361,"context_line":"            for user in credentials[\"openstack\"][\"users\"]:"},{"line_number":362,"context_line":"                clients \u003d user[\"credential\"].clients()"},{"line_number":363,"context_line":"                if clients.cinder().volume_types.list():"},{"line_number":364,"context_line":"                    return"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"            msg \u003d (\"Must have at least one volume type created when \""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_f232fe5d","line":363,"range":{"start_line":363,"start_character":19,"end_line":363,"end_character":55},"updated":"2017-05-10 19:21:03.000000000","message":"Shouldn\u0027t we add a check here that param value is present in the list of volume types?","commit_id":"56a9077af5b5236e5fd16a6b3fcca677a3c9fa50"},{"author":{"_account_id":23094,"name":"Staroverov Anton","email":"avstaroverov@gmail.com","username":"astaroverov"},"change_message_id":"279bef3175277d06573d183d38a68f6e1852869f","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        if config.get(\"args\", {}).get(self.param, False):"},{"line_number":361,"context_line":"            for user in credentials[\"openstack\"][\"users\"]:"},{"line_number":362,"context_line":"                clients \u003d user[\"credential\"].clients()"},{"line_number":363,"context_line":"                if clients.cinder().volume_types.list():"},{"line_number":364,"context_line":"                    return"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"            msg \u003d (\"Must have at least one volume type created when \""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f044301_3453ab41","line":363,"range":{"start_line":363,"start_character":19,"end_line":363,"end_character":55},"in_reply_to":"3f044301_f232fe5d","updated":"2017-05-11 09:10:47.000000000","message":"Here it\u0027s not necessary - old-style validator worked with \u0027param_name\u0027 parameter, so I just renamed it to \u0027param\u0027.\nWe need checks as you described for validators which worked with \u0027*args\u0027 parameter.","commit_id":"56a9077af5b5236e5fd16a6b3fcca677a3c9fa50"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"5f02c8a7a3503187e5aa80c634d83edd0a6400ed","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        self.param \u003d param"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def validate(self, config, credentials, plugin_cls, plugin_cfg):"},{"line_number":410,"context_line":"        if config.get(\"args\", {}).get(self.param, False):"},{"line_number":411,"context_line":"            for user in credentials[\"openstack\"][\"users\"]:"},{"line_number":412,"context_line":"                clients \u003d user[\"credential\"].clients()"},{"line_number":413,"context_line":"                if clients.cinder().volume_types.list():"},{"line_number":414,"context_line":"                    return"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"            msg \u003d (\"Must have at least one volume type created when \""},{"line_number":417,"context_line":"                   \"specifying use of volume types.\")"},{"line_number":418,"context_line":"            return self.fail(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ff0f0b1f_65f9b14b","line":418,"range":{"start_line":410,"start_character":8,"end_line":418,"end_character":33},"updated":"2017-05-20 07:50:49.000000000","message":"actually, this validator doesn\u0027t check anything helpful. Only the fact that list of volume_types is not empty.\n\nThe logic of validator should be different:\n\n- check that config.get(\"args\", {}) contains self.param\n- list volume types for each user(like it is done now) and check that the value of config.get(\"args\", {})[self.param] is present in the list.","commit_id":"03d4019de33e95f65f5dc8ff3b0a268e2a247433"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"dc4399ef8a660c394d561cd65d79e00230d3ed25","unresolved":false,"context_lines":[{"line_number":541,"context_line":"                clients \u003d user[\"credential\"].clients()"},{"line_number":542,"context_line":"                if volume_type not in [vt.name for vt in"},{"line_number":543,"context_line":"                                       clients.cinder().volume_types.list()]:"},{"line_number":544,"context_line":"                    msg \u003d (\"Specified volume type {} not found for user {}\")"},{"line_number":545,"context_line":"                    return self.fail(msg.format(volume_type, user))"},{"line_number":546,"context_line":"        else:"},{"line_number":547,"context_line":"            for user in credentials[\"openstack\"][\"users\"]:"},{"line_number":548,"context_line":"                clients \u003d user[\"credential\"].clients()"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_d4e028fd","line":545,"range":{"start_line":544,"start_character":0,"end_line":545,"end_character":67},"updated":"2017-06-01 11:33:19.000000000","message":"propose to print all existed volume types in error message.","commit_id":"177eebfce2f4c4484eb132a04808157b0fac8bb1"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"dc4399ef8a660c394d561cd65d79e00230d3ed25","unresolved":false,"context_lines":[{"line_number":544,"context_line":"                    msg \u003d (\"Specified volume type {} not found for user {}\")"},{"line_number":545,"context_line":"                    return self.fail(msg.format(volume_type, user))"},{"line_number":546,"context_line":"        else:"},{"line_number":547,"context_line":"            for user in credentials[\"openstack\"][\"users\"]:"},{"line_number":548,"context_line":"                clients \u003d user[\"credential\"].clients()"},{"line_number":549,"context_line":"                print(clients.cinder().volume_types.list())"},{"line_number":550,"context_line":"            msg \u003d (\"Must have at least one volume type created when \""},{"line_number":551,"context_line":"                   \"specifying use of volume types.\")"},{"line_number":552,"context_line":"            return self.fail(msg)"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_f4b68cfa","line":552,"range":{"start_line":547,"start_character":0,"end_line":552,"end_character":33},"updated":"2017-06-01 11:33:19.000000000","message":"not sure we need this fail, look like it is allowed that volume type equals None in almost all of test cases.","commit_id":"177eebfce2f4c4484eb132a04808157b0fac8bb1"},{"author":{"_account_id":23094,"name":"Staroverov Anton","email":"avstaroverov@gmail.com","username":"astaroverov"},"change_message_id":"2c2817340be1a53b047b5b239c06d9706aa0b2db","unresolved":false,"context_lines":[{"line_number":544,"context_line":"                    msg \u003d (\"Specified volume type {} not found for user {}\")"},{"line_number":545,"context_line":"                    return self.fail(msg.format(volume_type, user))"},{"line_number":546,"context_line":"        else:"},{"line_number":547,"context_line":"            for user in credentials[\"openstack\"][\"users\"]:"},{"line_number":548,"context_line":"                clients \u003d user[\"credential\"].clients()"},{"line_number":549,"context_line":"                print(clients.cinder().volume_types.list())"},{"line_number":550,"context_line":"            msg \u003d (\"Must have at least one volume type created when \""},{"line_number":551,"context_line":"                   \"specifying use of volume types.\")"},{"line_number":552,"context_line":"            return self.fail(msg)"}],"source_content_type":"text/x-python","patch_set":18,"id":"df140735_df84c10e","line":552,"range":{"start_line":547,"start_character":0,"end_line":552,"end_character":33},"in_reply_to":"df140735_f4b68cfa","updated":"2017-06-01 12:24:01.000000000","message":"Well, users may decide to use this validator for most of scenarios or not. But in case when volume type is required for some scenarios, it have to be specified","commit_id":"177eebfce2f4c4484eb132a04808157b0fac8bb1"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"95400a06e1a144b31dcc1eac6a1331f545e55804","unresolved":false,"context_lines":[{"line_number":548,"context_line":"                           \"List of available types: {}\")"},{"line_number":549,"context_line":"                    return self.fail(msg.format(volume_type, user, vt_names))"},{"line_number":550,"context_line":"        else:"},{"line_number":551,"context_line":"            msg \u003d (\"Must have at least one volume type created when \""},{"line_number":552,"context_line":"                   \"specifying use of volume types.\")"},{"line_number":553,"context_line":"            return self.fail(msg)"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f0e0f27_c06c549e","line":552,"range":{"start_line":551,"start_character":3,"end_line":552,"end_character":53},"updated":"2017-06-09 08:56:24.000000000","message":"i want we should fix this message, here looks the reason should be that user did not specify volume_type argument.","commit_id":"02aeb4218b64bc2f046418019aa35a4a328b321c"},{"author":{"_account_id":23094,"name":"Staroverov Anton","email":"avstaroverov@gmail.com","username":"astaroverov"},"change_message_id":"09a57db369ed14244b22048638cae841018e83c1","unresolved":false,"context_lines":[{"line_number":548,"context_line":"                           \"List of available types: {}\")"},{"line_number":549,"context_line":"                    return self.fail(msg.format(volume_type, user, vt_names))"},{"line_number":550,"context_line":"        else:"},{"line_number":551,"context_line":"            msg \u003d (\"Must have at least one volume type created when \""},{"line_number":552,"context_line":"                   \"specifying use of volume types.\")"},{"line_number":553,"context_line":"            return self.fail(msg)"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f0e0f27_c0b44f38","line":552,"range":{"start_line":551,"start_character":3,"end_line":552,"end_character":53},"in_reply_to":"9f0e0f27_c06c549e","updated":"2017-06-09 11:48:23.000000000","message":"What is your proposal?","commit_id":"02aeb4218b64bc2f046418019aa35a4a328b321c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"dc26651962fd1aaa7e5fc23fe1117ff3f78ebc8d","unresolved":false,"context_lines":[{"line_number":548,"context_line":"                           \"List of available types: {}\")"},{"line_number":549,"context_line":"                    return self.fail(msg.format(volume_type, user, vt_names))"},{"line_number":550,"context_line":"        else:"},{"line_number":551,"context_line":"            msg \u003d (\"Must have at least one volume type created when \""},{"line_number":552,"context_line":"                   \"specifying use of volume types.\")"},{"line_number":553,"context_line":"            return self.fail(msg)"}],"source_content_type":"text/x-python","patch_set":28,"id":"9f0e0f27_001ec70b","line":552,"range":{"start_line":551,"start_character":3,"end_line":552,"end_character":53},"in_reply_to":"9f0e0f27_c0b44f38","updated":"2017-06-09 11:55:20.000000000","message":"Let\u0027s write something like \"The parameter \u0027%s\u0027 is required and should not be empty.\"","commit_id":"02aeb4218b64bc2f046418019aa35a4a328b321c"}]}
