)]}'
{"rally/plugins/openstack/cleanup/resources.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"44a5d37a6a8c3777ef69d1c029cf40db10660b18","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        return []"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"class NeutronBgpvpnMixin(NeutronMixin):"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def list(self):"},{"line_number":352,"context_line":"        if self.supports_extension(\"bgpvpn\"):"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_d50c003d","line":349,"range":{"start_line":349,"start_character":0,"end_line":349,"end_character":39},"updated":"2017-05-03 10:38:48.000000000","message":"The resource class should be wrapped with a decorator base.resource (see L359 for example). It is required thing since some resources should be listed per user, another one should be listed per tenant or using admin user.\n\nPS: we have a check in the gates, you can find a resource via following \"Changes in resources\" link from http://logs.openstack.org/65/460465/6/check/gate-rally-dsvm-neutron-extensions-rally-nv/6532e67/ . This check compares resources before and after rally run and as you can see, bgvpns are there.","commit_id":"730577791e47ea6596c1fd104cbdb3e82b7760a1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b1bee0da30aa6b2d02e9bbd1e24ac4c23f41c0a9","unresolved":false,"context_lines":[{"line_number":368,"context_line":""},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"@base.resource(\"neutron\", \"bgpvpn\", order\u003dnext(_neutron_order),"},{"line_number":371,"context_line":"               tenant_resource\u003dTrue)"},{"line_number":372,"context_line":"class NeutronBgpvpn(NeutronBgpvpnMixin):"},{"line_number":373,"context_line":"    pass"},{"line_number":374,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5ff73747_95d66af1","line":371,"range":{"start_line":371,"start_character":15,"end_line":371,"end_character":36},"updated":"2017-05-03 16:54:59.000000000","message":"based on the proposed code, bgpvpns are created via admin user, they are not tenant resources (if it is not so, please let me know). So you need to specify something like: https://github.com/openstack/rally/blob/master/rally/plugins/openstack/cleanup/resources.py#L134-L135 \n\nAlso, I noted that in utils (https://review.openstack.org/#/c/460465/9/rally/plugins/openstack/scenarios/neutron/utils.py) list_ext and delete_ext are used. NeutronMixin is designed to call another methods - list_\u003cresource_name\u003es (i.e list_bgpvpns) and delete_\u003cresource_name\u003es (i.e delete_bgpvpn). Is it ok? What is the right way?","commit_id":"fbc88542044206a8882b725067bfc66642c2ea40"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"0b4aeed5ba21e99cca5ddf395397d2cbeb1f118a","unresolved":false,"context_lines":[{"line_number":359,"context_line":"        return False"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"class NeutronBgpvpnMixin(NeutronMixin):"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"    def list(self):"},{"line_number":365,"context_line":"        if self.supports_extension(\"bgpvpn\"):"},{"line_number":366,"context_line":"            return super(NeutronBgpvpnMixin, self).list()"},{"line_number":367,"context_line":"        return []"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"@base.resource(\"neutron\", \"bgpvpn\", order\u003dnext(_neutron_order),"},{"line_number":371,"context_line":"               admin_required\u003dTrue)"},{"line_number":372,"context_line":"class NeutronBgpvpn(NeutronBgpvpnMixin):"},{"line_number":373,"context_line":"    pass"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"# NOTE(andreykurilin): There are scenarios which uses unified way for creating"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_87563a29","line":373,"range":{"start_line":362,"start_character":0,"end_line":373,"end_character":8},"updated":"2017-05-05 09:13:28.000000000","message":"as you can see [1], cleanup doesn\u0027t work:( and based on the logs[2] cleanup was executed, but did not even try removing resources. It can be 2 cases:\n\n1) list method returned an empty list (i.e no resources)\n2) method \"name\" returned wrong value, so filtering did not process the resource deletion.\n\nLet\u0027s try to debug that issue, and I\u0027m ok to put temporary `print` statements into list method to see what we have. \n\nMaybe the issue is in the of obtaining resources? I mean osresource module (while are able to list all resources) uses `list_ext` method, the scenario which has a check that new resource is in the list of all resources is also use `list_ext` method. Are you sure that list_bgpvpns are compatible with list_ext ? \n\n\n[1] - http://logs.openstack.org/65/460465/13/check/gate-rally-dsvm-neutron-extensions-rally-nv/ff73f73/rally-plot/resources_diff.txt.gz\n[2] - http://logs.openstack.org/65/460465/13/check/gate-rally-dsvm-neutron-extensions-rally-nv/ff73f73/console.html#_2017-05-05_08_34_22_572807","commit_id":"4dc6d600a7d5ad2ffee0889386ab525293a5b157"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"007da44608cb9b9a65b94aff81d1d6e7a570c37e","unresolved":false,"context_lines":[{"line_number":366,"context_line":"    def list(self):"},{"line_number":367,"context_line":"        if self.supports_extension(\"bgpvpn\"):"},{"line_number":368,"context_line":"            print(\"---List bgpvpns---\")"},{"line_number":369,"context_line":"            print(super(NeutronBgpvpnMixin, self).list())"},{"line_number":370,"context_line":"            return super(NeutronBgpvpnMixin, self).list()"},{"line_number":371,"context_line":"        return []"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3f044301_6a41a039","line":370,"range":{"start_line":369,"start_character":0,"end_line":370,"end_character":56},"updated":"2017-05-06 04:21:33.000000000","message":"It is unnecessary that reduplicates list","commit_id":"cb4827e759e16ae48dea9649d6e6657a4e63b48c"}],"rally/plugins/openstack/scenarios/neutron/bgpvpn.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"acb7829bf25bce1145a025d80e098e2731876a3a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                    name\u003d\"NeutronBGPVPN.create_and_delete_bgpvpns\")"},{"line_number":27,"context_line":"class CreateAndDeleteBgpvpns(utils.NeutronScenario):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def run(self, bgpvpn_create_args\u003dNone):"},{"line_number":30,"context_line":"        \"\"\"Create bgpvpn and delete the bgpvpn."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        Measure the \"neutron bgpvpn-create\" and bgpvpn-delete"}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_7243676d","line":29,"range":{"start_line":29,"start_character":18,"end_line":29,"end_character":41},"updated":"2017-04-28 11:50:06.000000000","message":"the thing which I missed in the previous patch: what is the reason to accept one argument which is actually a collector for others? Let\u0027s specify all possible argument explicitly with proper docstrings. It will allow generating a user-friendly page with plugin references - https://rally.readthedocs.io/en/latest/plugins/plugin_reference.html#scenarios.\n\nIt relates to this and to new scenarios.\n\nAlso, in this case L21 become redundant","commit_id":"d90a47d29dcbab76f48682ba0d8f7952241495de"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"acb7829bf25bce1145a025d80e098e2731876a3a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"@validation.required_neutron_extensions(\"bgpvpn\")"},{"line_number":43,"context_line":"@validation.required_services(consts.Service.NEUTRON)"},{"line_number":44,"context_line":"@validation.add(\"required_platform\", platform\u003d\"openstack\", users\u003dTrue)"},{"line_number":45,"context_line":"@scenario.configure(context\u003d{\"admin_cleanup\": [\"neutron\"]},"},{"line_number":46,"context_line":"                    name\u003d\"NeutronBGPVPN.create_and_list_bgpvpns\")"},{"line_number":47,"context_line":"class CreateAndListBgpvpns(utils.NeutronScenario):"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5ff73747_52162b57","line":45,"range":{"start_line":45,"start_character":28,"end_line":45,"end_character":58},"updated":"2017-04-28 11:50:06.000000000","message":"another two things which I missed relates to cleanup:\n\n1) to make cleanup work, we need specify an interface to list and remove resources. see https://github.com/openstack/rally/blob/master/rally/plugins/openstack/cleanup/resources.py#L278\n\n2) To control that cleanup works well and Rally doesn\u0027t leave resources, we have special script that list resources before and after rally run, then compare them. It should be extended too for listing bgvpn resources - https://github.com/openstack/rally/blob/master/tests/ci/osresources.py#L215","commit_id":"d90a47d29dcbab76f48682ba0d8f7952241495de"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"7770a0dd5979a8c0e786990f830b110f225075d2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                    name\u003d\"NeutronBGPVPN.create_and_delete_bgpvpns\")"},{"line_number":27,"context_line":"class CreateAndDeleteBgpvpns(utils.NeutronScenario):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def run(self, **kwargs):"},{"line_number":30,"context_line":"        \"\"\"Create bgpvpn and delete the bgpvpn."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        Measure the \"neutron bgpvpn-create\" and bgpvpn-delete"},{"line_number":33,"context_line":"        command performance."},{"line_number":34,"context_line":"        :param kwargs: Optional additional arguments for BGP VPN creation"},{"line_number":35,"context_line":"        options"},{"line_number":36,"context_line":"        \"\"\""},{"line_number":37,"context_line":"        bgpvpn \u003d self._create_bgpvpn(**kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ff73747_48d8a1ed","line":34,"range":{"start_line":29,"start_character":4,"end_line":34,"end_character":73},"updated":"2017-04-29 10:51:15.000000000","message":"you misunderstood me. Yes, kwargs is much better, but it doesn\u0027t fix an issue.\n\nIf I\u0027m just a regular user who is asked to launched bgpvpn scenarios, I\u0027ll check to places - samples and plugin reference. At the first place, I\u0027ll find an example of scenario and in the second one I\u0027ll able to find information about what additional arguments are accepted.\n\nWhat I want to see is list of arguments with a docstrings. I suppose it is type, route_target_import_targets, export_targets, route_disingiushers. Since I\u0027m not bgpvpn expert, to find this list I was needed to deep in the code[*] which is not user-friendly.\n\n[*] https://github.com/openstack/python-neutronclient/blob/d32a26957580bb305725d4beafe9b6796135c64a/neutronclient/osc/v2/networking_bgpvpn/bgpvpn.py#L227-L238","commit_id":"8457f30def1643d5a31ec398af22e71cfac96300"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"44a5d37a6a8c3777ef69d1c029cf40db10660b18","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                    name\u003d\"NeutronBGPVPN.create_and_delete_bgpvpns\")"},{"line_number":27,"context_line":"class CreateAndDeleteBgpvpns(utils.NeutronScenario):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def run(self, name\u003dNone, route_targets\u003dNone, import_targets\u003dNone,"},{"line_number":30,"context_line":"            export_targets\u003dNone, route_distinguishers\u003dNone, type\u003d\"l3\"):"},{"line_number":31,"context_line":"        \"\"\"Create bgpvpn and delete the bgpvpn."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        Measure the \"neutron bgpvpn-create\" and bgpvpn-delete"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_4a8e0bd1","line":30,"range":{"start_line":29,"start_character":4,"end_line":30,"end_character":71},"updated":"2017-05-03 10:38:48.000000000","message":"yes, it is what I want to see. Thanks, just small comments:\n\n1) please, do not add \"name\" parameter and remove validator that checks that this parameter is not specified(L21)\n\n2) let\u0027s rename \"type\" argument since it compflicts with python builtin parameter. Maybe vpn_type?","commit_id":"730577791e47ea6596c1fd104cbdb3e82b7760a1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"44a5d37a6a8c3777ef69d1c029cf40db10660b18","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        Measure the \"neutron bgpvpn-update\" command performance."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        :param name: The user meaningful name of the BGP VPN"},{"line_number":102,"context_line":"        :param updated_name: The user updated meaningful name of the BGP VPN"},{"line_number":103,"context_line":"        :param route_targets: Route Targets that will be both imported"},{"line_number":104,"context_line":"        and used for export"},{"line_number":105,"context_line":"        :param updated_route_targets: Updated Route Targets that will be both"}],"source_content_type":"text/x-python","patch_set":6,"id":"5ff73747_2a4bbf87","line":102,"range":{"start_line":102,"start_character":8,"end_line":102,"end_character":76},"updated":"2017-05-03 10:38:48.000000000","message":"In similar scenarios, we use argument \"update_name\" which means that new name will be generated and assigned to a resource.","commit_id":"730577791e47ea6596c1fd104cbdb3e82b7760a1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b1bee0da30aa6b2d02e9bbd1e24ac4c23f41c0a9","unresolved":false,"context_lines":[{"line_number":25,"context_line":"                    name\u003d\"NeutronBGPVPN.create_and_delete_bgpvpns\")"},{"line_number":26,"context_line":"class CreateAndDeleteBgpvpns(utils.NeutronScenario):"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def run(self, name\u003dNone, route_targets\u003dNone, import_targets\u003dNone,"},{"line_number":29,"context_line":"            export_targets\u003dNone, route_distinguishers\u003dNone, type\u003d\"l3\"):"},{"line_number":30,"context_line":"        \"\"\"Create bgpvpn and delete the bgpvpn."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"5ff73747_d5f51285","line":28,"range":{"start_line":28,"start_character":18,"end_line":28,"end_character":29},"updated":"2017-05-03 16:54:59.000000000","message":"as it was commented previously, name argument should not be allowed, so it should be not listed in run method.","commit_id":"fbc88542044206a8882b725067bfc66642c2ea40"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"bf700c5f3c09a1c23dde10851634ace2f2d66597","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                            route_distinguishers\u003droute_distinguishers,"},{"line_number":76,"context_line":"                            type\u003dtype)"},{"line_number":77,"context_line":"        self._list_bgpvpns()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"@validation.add(\"required_neutron_extensions\", extensions\u003d[\"bgpvpn\"])"},{"line_number":81,"context_line":"@validation.required_services(consts.Service.NEUTRON)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f044301_e6a4f60a","line":78,"updated":"2017-05-04 16:46:05.000000000","message":"Assert the created bgpvpn in list of bgpvpns would be better.","commit_id":"5895415c7d4c3db2480b8ae8bb569849a9316a31"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"ee9e6e723165c75b972988fb839c93be76fb9e84","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"@validation.add(\"required_neutron_extensions\", extensions\u003d[\"bgpvpn\"])"},{"line_number":22,"context_line":"@validation.required_services(consts.Service.NEUTRON)"},{"line_number":23,"context_line":"@validation.add(\"required_platform\", platform\u003d\"openstack\", users\u003dTrue)"},{"line_number":24,"context_line":"@scenario.configure(context\u003d{\"admin_cleanup\": [\"neutron\"]},"},{"line_number":25,"context_line":"                    name\u003d\"NeutronBGPVPN.create_and_delete_bgpvpns\")"},{"line_number":26,"context_line":"class CreateAndDeleteBgpvpns(utils.NeutronScenario):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_87e3da33","line":23,"range":{"start_line":23,"start_character":59,"end_line":23,"end_character":69},"updated":"2017-05-05 08:37:19.000000000","message":"As you mentioned, BGPVPNS cannot be created via regular users, so that scenarios doesn\u0027t need them. Please replace users\u003dTrue by `admin\u003dTrue`.\n\nIt relates to all scenarios.","commit_id":"4dc6d600a7d5ad2ffee0889386ab525293a5b157"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"007da44608cb9b9a65b94aff81d1d6e7a570c37e","unresolved":false,"context_lines":[{"line_number":29,"context_line":"            export_targets\u003dNone, route_distinguishers\u003dNone, type\u003d\"l3\"):"},{"line_number":30,"context_line":"        \"\"\"Create bgpvpn and delete the bgpvpn."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"        Measure the \"neutron bgpvpn-create\" and bgpvpn-delete"},{"line_number":33,"context_line":"        command performance."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        :param route_targets: Route Targets that will be both imported and"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f044301_0a469c50","line":32,"updated":"2017-05-06 04:21:33.000000000","message":"and \"neutron bgpvpn-delete\"","commit_id":"cb4827e759e16ae48dea9649d6e6657a4e63b48c"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"007da44608cb9b9a65b94aff81d1d6e7a570c37e","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        Measure the \"neutron bgpvpn-update\" command performance."},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        :param update_name: bool, whether or not to modify BGP VPN name"},{"line_number":98,"context_line":"        :param route_targets: Route Targets that will be both imported"},{"line_number":99,"context_line":"        and used for export"},{"line_number":100,"context_line":"        :param updated_route_targets: Updated Route Targets that will be both"},{"line_number":101,"context_line":"        imported and used for export"},{"line_number":102,"context_line":"        :param import_targets: Additional Route Targets that will be imported"},{"line_number":103,"context_line":"        :param updated_import_targets: Updated additional Route Targets that"},{"line_number":104,"context_line":"        will be imported"},{"line_number":105,"context_line":"        :param export_targets: additional Route Targets that will be used"},{"line_number":106,"context_line":"        for export."},{"line_number":107,"context_line":"        :param updated_export_targets: Updated additional Route Targets that"},{"line_number":108,"context_line":"        will be used for export."},{"line_number":109,"context_line":"        :param route_distinguishers: list of route distinguisher strings"},{"line_number":110,"context_line":"        :param updated_route_distinguishers: Updated list of route"},{"line_number":111,"context_line":"        distinguisher strings"},{"line_number":112,"context_line":"        :param bgpvpn_type: type of VPN and the technology behind it"},{"line_number":113,"context_line":"        \"\"\""},{"line_number":114,"context_line":"        create_bgpvpn_args \u003d {"},{"line_number":115,"context_line":"            \"route_targets\": route_targets,"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f044301_6a9880bf","line":112,"range":{"start_line":97,"start_character":0,"end_line":112,"end_character":68},"updated":"2017-05-06 04:21:33.000000000","message":"could you fix the format of all param comments like this:\nhttps://github.com/openstack/rally/blob/master/rally/plugins/open\nstack/scenarios/glance/images.py#L62","commit_id":"cb4827e759e16ae48dea9649d6e6657a4e63b48c"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"007da44608cb9b9a65b94aff81d1d6e7a570c37e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        }"},{"line_number":129,"context_line":"        if not update_name:"},{"line_number":130,"context_line":"            update_bgpvpn_args.pop(\"update_name\")"},{"line_number":131,"context_line":"        self._update_bgpvpn(bgpvpn, **update_bgpvpn_args)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f044301_aadd6843","line":131,"updated":"2017-05-06 04:21:33.000000000","message":"we could use self._update_bgpvpn(bgpvpn, update_name, **update_bgpvpn_args), and remove lines #123,#129,#120. :)","commit_id":"cb4827e759e16ae48dea9649d6e6657a4e63b48c"}],"rally/plugins/openstack/scenarios/neutron/utils.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"b1bee0da30aa6b2d02e9bbd1e24ac4c23f41c0a9","unresolved":false,"context_lines":[{"line_number":710,"context_line":""},{"line_number":711,"context_line":"        if \"name\" not in kwargs or not kwargs[\"name\"]:"},{"line_number":712,"context_line":"            kwargs[\"name\"] \u003d self.generate_random_name()"},{"line_number":713,"context_line":"        return self.admin_clients(\"neutron\").create_ext("},{"line_number":714,"context_line":"            self.BGPVPNS_PATH, {\"bgpvpn\": kwargs})"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"    @atomic.action_timer(\"neutron.delete_bgpvpn\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"5ff73747_150dba36","line":713,"range":{"start_line":713,"start_character":15,"end_line":713,"end_character":56},"updated":"2017-05-03 16:54:59.000000000","message":"doesn\u0027t regular user can create/list/delete bgpvpns or only admin?","commit_id":"fbc88542044206a8882b725067bfc66642c2ea40"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"bf700c5f3c09a1c23dde10851634ace2f2d66597","unresolved":false,"context_lines":[{"line_number":708,"context_line":"        returns: dict, bgpvpn resource details"},{"line_number":709,"context_line":"        \"\"\""},{"line_number":710,"context_line":""},{"line_number":711,"context_line":"        if \"name\" not in kwargs:"},{"line_number":712,"context_line":"            kwargs[\"name\"] \u003d self.generate_random_name()"},{"line_number":713,"context_line":"        return self.admin_clients(\"neutron\").create_ext("},{"line_number":714,"context_line":"            self.BGPVPNS_PATH, {\"bgpvpn\": kwargs})"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f044301_a6214e50","line":711,"range":{"start_line":711,"start_character":8,"end_line":711,"end_character":32},"updated":"2017-05-04 16:46:05.000000000","message":"name can not be transmitted from kwargs, so we cloud remove it.","commit_id":"5895415c7d4c3db2480b8ae8bb569849a9316a31"},{"author":{"_account_id":21800,"name":"Cedric Savignan","email":"cedric.savignan@orange.com","username":"csavignan"},"change_message_id":"375ca4cd197ee0b422e535dc9dae286c1ca7ea07","unresolved":false,"context_lines":[{"line_number":728,"context_line":"        :param kwargs: dict, POST /bgpvpn/bgpvpns request options"},{"line_number":729,"context_line":"        :returns: bgpvpns list"},{"line_number":730,"context_line":"        \"\"\""},{"line_number":731,"context_line":"        return self.admin_clients(\"neutron\").list_ext("},{"line_number":732,"context_line":"            \"bgpvpns\", self.BGPVPNS_PATH, True, **kwargs)[\"bgpvpns\"]"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"    @atomic.action_timer(\"neutron.update_bgpvpns\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_8cb54134","line":731,"range":{"start_line":731,"start_character":0,"end_line":731,"end_character":54},"updated":"2017-05-05 07:56:27.000000000","message":"I need to call admin_client to see bgpvpns created by user admin.","commit_id":"4dc6d600a7d5ad2ffee0889386ab525293a5b157"},{"author":{"_account_id":21800,"name":"Cedric Savignan","email":"cedric.savignan@orange.com","username":"csavignan"},"change_message_id":"8ea12400025254b0d567c4f6032c2a42a16abb50","unresolved":false,"context_lines":[{"line_number":728,"context_line":"        :param kwargs: dict, POST /bgpvpn/bgpvpns request options"},{"line_number":729,"context_line":"        :returns: bgpvpns list"},{"line_number":730,"context_line":"        \"\"\""},{"line_number":731,"context_line":"        return self.admin_clients(\"neutron\").list_ext("},{"line_number":732,"context_line":"            \"bgpvpns\", self.BGPVPNS_PATH, True, **kwargs)[\"bgpvpns\"]"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"    @atomic.action_timer(\"neutron.update_bgpvpns\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_8c566129","line":731,"range":{"start_line":731,"start_character":0,"end_line":731,"end_character":54},"in_reply_to":"3f044301_8c4541b6","updated":"2017-05-05 08:27:49.000000000","message":"1) No a regular user can\u0027t create or delete.\n2) Yes it should work with the update of requirements.","commit_id":"4dc6d600a7d5ad2ffee0889386ab525293a5b157"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"ee9e6e723165c75b972988fb839c93be76fb9e84","unresolved":false,"context_lines":[{"line_number":728,"context_line":"        :param kwargs: dict, POST /bgpvpn/bgpvpns request options"},{"line_number":729,"context_line":"        :returns: bgpvpns list"},{"line_number":730,"context_line":"        \"\"\""},{"line_number":731,"context_line":"        return self.admin_clients(\"neutron\").list_ext("},{"line_number":732,"context_line":"            \"bgpvpns\", self.BGPVPNS_PATH, True, **kwargs)[\"bgpvpns\"]"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"    @atomic.action_timer(\"neutron.update_bgpvpns\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_a74a5652","line":731,"range":{"start_line":731,"start_character":0,"end_line":731,"end_character":54},"in_reply_to":"3f044301_8c566129","updated":"2017-05-05 08:37:19.000000000","message":"thanks for an explanation.\n\nI prefer to use more unified list_bgpvpns, create_bgpvpns and delete_bgpvpns, since they look more clear and unified.","commit_id":"4dc6d600a7d5ad2ffee0889386ab525293a5b157"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"8e7077a717b7a72aee810562afa422d4c64c1325","unresolved":false,"context_lines":[{"line_number":728,"context_line":"        :param kwargs: dict, POST /bgpvpn/bgpvpns request options"},{"line_number":729,"context_line":"        :returns: bgpvpns list"},{"line_number":730,"context_line":"        \"\"\""},{"line_number":731,"context_line":"        return self.admin_clients(\"neutron\").list_ext("},{"line_number":732,"context_line":"            \"bgpvpns\", self.BGPVPNS_PATH, True, **kwargs)[\"bgpvpns\"]"},{"line_number":733,"context_line":""},{"line_number":734,"context_line":"    @atomic.action_timer(\"neutron.update_bgpvpns\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f044301_8c4541b6","line":731,"range":{"start_line":731,"start_character":0,"end_line":731,"end_character":54},"in_reply_to":"3f044301_8cb54134","updated":"2017-05-05 08:17:59.000000000","message":"1) can we create bgpvpns by regular users? \n\n2) should we use here list_bgpvpns instead?","commit_id":"4dc6d600a7d5ad2ffee0889386ab525293a5b157"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"8380b1c95f0267686114afd07565b08a2cc8ccfc","unresolved":false,"context_lines":[{"line_number":725,"context_line":"        :returns: bgpvpns list"},{"line_number":726,"context_line":"        \"\"\""},{"line_number":727,"context_line":"        return self.admin_clients(\"neutron\").list_bgpvpns("},{"line_number":728,"context_line":"            True, **kwargs)[\"bgpvpns\"]"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    @atomic.action_timer(\"neutron.update_bgpvpns\")"},{"line_number":731,"context_line":"    def _update_bgpvpn(self, bgpvpn, update_name\u003dNone, **kwargs):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f044301_f90da237","line":728,"range":{"start_line":728,"start_character":12,"end_line":728,"end_character":18},"updated":"2017-05-05 09:14:59.000000000","message":"should we transmit \"True\" in the cleanup method? Can it be the issue?","commit_id":"33e36d99c5699a24b9f8a77ddd8587b443920a34"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"007da44608cb9b9a65b94aff81d1d6e7a570c37e","unresolved":false,"context_lines":[{"line_number":717,"context_line":"        return self.admin_clients(\"neutron\").delete_bgpvpn("},{"line_number":718,"context_line":"            bgpvpn[\"bgpvpn\"][\"id\"])"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    @atomic.optional_action_timer(\"neutron.list_bgpvpns\")"},{"line_number":721,"context_line":"    def _list_bgpvpns(self, **kwargs):"},{"line_number":722,"context_line":"        \"\"\"Return bgpvpns list."},{"line_number":723,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3f044301_6a6ac0b3","line":720,"updated":"2017-05-06 04:21:33.000000000","message":"now optional_action_timer is deprecated, we have the new atomic actions format. :)\nPlease use atomic.action_timer.","commit_id":"cb4827e759e16ae48dea9649d6e6657a4e63b48c"},{"author":{"_account_id":22960,"name":"Hai Shi","email":"shihai1992@gmail.com","username":"haishi"},"change_message_id":"928c6a9098b7c9dbe27bad033de708b1d9bbe0ec","unresolved":false,"context_lines":[{"line_number":717,"context_line":"        return self.admin_clients(\"neutron\").delete_bgpvpn("},{"line_number":718,"context_line":"            bgpvpn[\"bgpvpn\"][\"id\"])"},{"line_number":719,"context_line":""},{"line_number":720,"context_line":"    @atomic.optional_action_timer(\"neutron.list_bgpvpns\")"},{"line_number":721,"context_line":"    def _list_bgpvpns(self, **kwargs):"},{"line_number":722,"context_line":"        \"\"\"Return bgpvpns list."},{"line_number":723,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3f044301_a63000ea","line":720,"in_reply_to":"3f044301_6a6ac0b3","updated":"2017-05-06 15:58:58.000000000","message":"But there are no deprecated info in optional_action_timer","commit_id":"cb4827e759e16ae48dea9649d6e6657a4e63b48c"},{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"007da44608cb9b9a65b94aff81d1d6e7a570c37e","unresolved":false,"context_lines":[{"line_number":737,"context_line":"        :param **kwargs: dict, PUT /bgpvpn/bgpvpns update options"},{"line_number":738,"context_line":"        :return dict, updated bgpvpn"},{"line_number":739,"context_line":"        \"\"\""},{"line_number":740,"context_line":"        if update_name:"},{"line_number":741,"context_line":"            kwargs[\"name\"] \u003d self.generate_random_name()"},{"line_number":742,"context_line":"        return self.admin_clients(\"neutron\").update_bgpvpn("},{"line_number":743,"context_line":"            bgpvpn[\"bgpvpn\"][\"id\"], {\"bgpvpn\": kwargs})"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f044301_8a2bcc2e","line":741,"range":{"start_line":740,"start_character":0,"end_line":741,"end_character":56},"updated":"2017-05-06 04:21:33.000000000","message":"why use kwargs ? we have used exactly arguments in scenario.\nIf maybe it would extend arguments in future, here we should remove name argument, otherwise, specify update_name to False, and kwargs[\"name\"] \u003d \"xxx\", the name will be updated.\n\nOr i want we can use\nif update_name or \"name\" in kwargs:\n    kwargs[\"name\"] \u003d self.generate_random_name()","commit_id":"cb4827e759e16ae48dea9649d6e6657a4e63b48c"}],"tests/ci/osresources.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"7770a0dd5979a8c0e786990f830b110f225075d2","unresolved":false,"context_lines":[{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    def list_bgpvpns(self):"},{"line_number":254,"context_line":"        if self.has_extension(\"bgpvpn\"):"},{"line_number":255,"context_line":"            return self.client.list_vips()[\"bgpvpns\"]"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":""},{"line_number":258,"context_line":"class Glance(ResourceManager):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ff73747_28e315a6","line":255,"range":{"start_line":255,"start_character":19,"end_line":255,"end_character":42},"updated":"2017-04-29 10:51:15.000000000","message":"I suppose it should be a call to list_ext(\"bgpvpns\",...)","commit_id":"8457f30def1643d5a31ec398af22e71cfac96300"}],"tests/unit/plugins/openstack/scenarios/neutron/test_bgpvpn.py":[{"author":{"_account_id":21528,"name":"chenhb","email":"chen.haibing1@zte.com.cn","username":"chenhb"},"change_message_id":"007da44608cb9b9a65b94aff81d1d6e7a570c37e","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        bgpvpn_data \u003d {}"},{"line_number":95,"context_line":"        bgpvpn_data.update(bgpvpn_create_data)"},{"line_number":96,"context_line":"        bgpvpn_data.update(bgpvpn_update_data)"},{"line_number":97,"context_line":"        if bgpvpn_data.get(\"update_name\") is False:"},{"line_number":98,"context_line":"            self.bgpvpn_update_data.pop(\"update_name\")"},{"line_number":99,"context_line":"        scenario._create_bgpvpn \u003d mock.Mock()"},{"line_number":100,"context_line":"        scenario._update_bgpvpn \u003d mock.Mock()"},{"line_number":101,"context_line":"        scenario.run(**bgpvpn_data)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3f044301_ea05b0c3","line":98,"range":{"start_line":97,"start_character":0,"end_line":98,"end_character":54},"updated":"2017-05-06 04:21:33.000000000","message":"why remove update_name?\nAlso, here i think it is better to use a method \"_get_bgpvpn_create_data\" instead of self.bgpvpn_create_data, and  self.bgpvpn_update_data is the same.","commit_id":"cb4827e759e16ae48dea9649d6e6657a4e63b48c"}]}
