)]}'
{"rally-jobs/nova.yaml":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"485319869a5961aa66c421837d1923780637590e","unresolved":false,"context_lines":[{"line_number":898,"context_line":"        volume_args:"},{"line_number":899,"context_line":"            size: 2"},{"line_number":900,"context_line":"        floating_network: \"public\""},{"line_number":901,"context_line":"        floating_ip_address_start: \"192.168.0.10\""},{"line_number":902,"context_line":"        use_floating_ip: true"},{"line_number":903,"context_line":"        command:"},{"line_number":904,"context_line":"          script_file: \"~/.rally/extra/instance_dd_test.sh\""}],"source_content_type":"text/x-yaml","patch_set":13,"id":"da0c15f0_d7d83320","line":901,"updated":"2016-03-25 14:18:30.000000000","message":"This is \"nova\" job, so this argument is not actually in use yet (you\u0027ve added an implementation to NeutronWrapper) :)","commit_id":"a803a0ca8ad4c419e8a21b2e9f39b8ad27588c10"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"23dbcd7b4d5b387fe4a089e2d99e38d61fa32c46","unresolved":false,"context_lines":[{"line_number":898,"context_line":"        volume_args:"},{"line_number":899,"context_line":"            size: 2"},{"line_number":900,"context_line":"        floating_network: \"public\""},{"line_number":901,"context_line":"        floating_ip_address_start: \"192.168.0.10\""},{"line_number":902,"context_line":"        use_floating_ip: true"},{"line_number":903,"context_line":"        command:"},{"line_number":904,"context_line":"          script_file: \"~/.rally/extra/instance_dd_test.sh\""}],"source_content_type":"text/x-yaml","patch_set":13,"id":"ba0121b8_7938fca0","line":901,"in_reply_to":"da0c15f0_d7d83320","updated":"2016-03-30 11:29:29.000000000","message":"Thanks ;) I removed that.","commit_id":"a803a0ca8ad4c419e8a21b2e9f39b8ad27588c10"}],"rally-jobs/rally-neutron.yaml":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"c1c27a4b2d9a1850f40d77f37ef7fa14c8cc029d","unresolved":false,"context_lines":[{"line_number":741,"context_line":"          users_per_tenant: 1"},{"line_number":742,"context_line":"        network: {}"},{"line_number":743,"context_line":""},{"line_number":744,"context_line":"  VMTasks.boot_runcommand_delete:"},{"line_number":745,"context_line":"    -"},{"line_number":746,"context_line":"      args:"},{"line_number":747,"context_line":"        flavor:"}],"source_content_type":"text/x-yaml","patch_set":15,"id":"1a122d0e_9b5a0129","line":744,"updated":"2016-04-19 16:04:46.000000000","message":"This scenario has actually failed on gates:\n\nhttp://logs.openstack.org/04/271704/15/check/gate-rally-dsvm-neutron-rally/616e048/rally-plot/results.html.gz#/VMTasks.boot_runcommand_delete/failures","commit_id":"6413d58a302588675cf35c72c67b551f728757ee"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"c1c27a4b2d9a1850f40d77f37ef7fa14c8cc029d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"1a122d0e_7b01e504","line":767,"updated":"2016-04-19 16:04:46.000000000","message":"please add:\n\n      sla:\n        failure_rate:\n          max: 0","commit_id":"6413d58a302588675cf35c72c67b551f728757ee"}],"rally/plugins/openstack/scenarios/vm/utils.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"cbc040553ff0252ccf96af3e3ed81fa31c0496e6","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @atomic.action_timer(\"vm.attach_floating_ip\")"},{"line_number":169,"context_line":"    def _attach_floating_ip(self, server, floating_network,"},{"line_number":170,"context_line":"                            floating_ip_address):"},{"line_number":171,"context_line":"        internal_network \u003d list(server.networks)[0]"},{"line_number":172,"context_line":"        fixed_ip \u003d server.addresses[internal_network][0][\"addr\"]"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_c840790a","line":170,"updated":"2016-02-03 10:28:05.000000000","message":"This breaks compatibility, use floating_ip_addres\u003dNone to keep this backward-compatible","commit_id":"e58643dc1c96f7c576a2c1225bb7d995a91bf37e"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"032ee639575c535e3a8e35dfe931cf41069ed547","unresolved":false,"context_lines":[{"line_number":167,"context_line":""},{"line_number":168,"context_line":"    @atomic.action_timer(\"vm.attach_floating_ip\")"},{"line_number":169,"context_line":"    def _attach_floating_ip(self, server, floating_network,"},{"line_number":170,"context_line":"                            floating_ip_address):"},{"line_number":171,"context_line":"        internal_network \u003d list(server.networks)[0]"},{"line_number":172,"context_line":"        fixed_ip \u003d server.addresses[internal_network][0][\"addr\"]"},{"line_number":173,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1af94dfe_37661151","line":170,"in_reply_to":"5a5ae5dd_c840790a","updated":"2016-03-18 19:43:20.000000000","message":"Done","commit_id":"e58643dc1c96f7c576a2c1225bb7d995a91bf37e"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"005a73f4da6f10839fedc7ed22d7f0df153d0786","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        return ssh.execute(cmd, stdin\u003dstdin)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def _boot_server_with_fip(self, image, flavor, use_floating_ip\u003dTrue,"},{"line_number":144,"context_line":"                              floating_network\u003dNone, floating_ip_address\u003dNone,"},{"line_number":145,"context_line":"                              **kwargs):"},{"line_number":146,"context_line":"        \"\"\"Boot server prepared for SSH actions.\"\"\""},{"line_number":147,"context_line":"        kwargs[\"auto_assign_nic\"] \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_307e126a","line":144,"updated":"2016-03-19 00:06:44.000000000","message":"We should give a warning if the user has specified use_floating_ip\u003dFalse with a floating_ip_address.","commit_id":"c2fb7908689227439d290a310585b19834c71604"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"695cf7d25a82a6f526443263c4a977047e1df43f","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        return ssh.execute(cmd, stdin\u003dstdin)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    def _boot_server_with_fip(self, image, flavor, use_floating_ip\u003dTrue,"},{"line_number":144,"context_line":"                              floating_network\u003dNone, floating_ip_address\u003dNone,"},{"line_number":145,"context_line":"                              **kwargs):"},{"line_number":146,"context_line":"        \"\"\"Boot server prepared for SSH actions.\"\"\""},{"line_number":147,"context_line":"        kwargs[\"auto_assign_nic\"] \u003d True"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa0719c6_bcf13bd0","line":144,"in_reply_to":"1af94dfe_307e126a","updated":"2016-03-21 09:59:38.000000000","message":"Done","commit_id":"c2fb7908689227439d290a310585b19834c71604"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"113de046e4a1c0033a52aa69943651bd74683c38","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                                           floating_ip_address)"},{"line_number":160,"context_line":"        else:"},{"line_number":161,"context_line":"            if floating_ip_address:"},{"line_number":162,"context_line":"                LOG.warning(\"Floating IP Address %s given, but \""},{"line_number":163,"context_line":"                            \"use_floating_ip is not set\" % floating_ip_address)"},{"line_number":164,"context_line":"            internal_network \u003d list(server.networks)[0]"},{"line_number":165,"context_line":"            fip \u003d {\"ip\": server.addresses[internal_network][0][\"addr\"]}"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_fdbbad73","line":162,"updated":"2016-03-21 11:18:15.000000000","message":"Why not just use floating ip in this case?","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"acbfdeae9e5c955c615e2cdcb17883006568db1f","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                                           floating_ip_address)"},{"line_number":160,"context_line":"        else:"},{"line_number":161,"context_line":"            if floating_ip_address:"},{"line_number":162,"context_line":"                LOG.warning(\"Floating IP Address %s given, but \""},{"line_number":163,"context_line":"                            \"use_floating_ip is not set\" % floating_ip_address)"},{"line_number":164,"context_line":"            internal_network \u003d list(server.networks)[0]"},{"line_number":165,"context_line":"            fip \u003d {\"ip\": server.addresses[internal_network][0][\"addr\"]}"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_03943b35","line":162,"in_reply_to":"fa0719c6_08bbbac5","updated":"2016-03-21 12:28:02.000000000","message":"But IMO if there is a use_floating_ip switch, than this switch should have precedence. If not set it is True by default, but if explicitly set to False, it should not been magically overruled by another attribute. So i think the warning is the better choice, which gets only thrown if someone explicitly sets use_floating_ip\u003dFalse, but has a floating_ip_address in the sample. This will also allow to temporarily disable floating_ip usage, but leave all the other fip related attributes in the sample config and just toggle use_floating_ip.","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"fb9f320016e97ff2f8ac80e124ff8bba3820938a","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                                           floating_ip_address)"},{"line_number":160,"context_line":"        else:"},{"line_number":161,"context_line":"            if floating_ip_address:"},{"line_number":162,"context_line":"                LOG.warning(\"Floating IP Address %s given, but \""},{"line_number":163,"context_line":"                            \"use_floating_ip is not set\" % floating_ip_address)"},{"line_number":164,"context_line":"            internal_network \u003d list(server.networks)[0]"},{"line_number":165,"context_line":"            fip \u003d {\"ip\": server.addresses[internal_network][0][\"addr\"]}"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_08bbbac5","line":162,"in_reply_to":"fa0719c6_fdbbad73","updated":"2016-03-21 12:19:23.000000000","message":"also fine with me; i just followed the proposal from Chris to log a warning. But due to the that use_floating_ip\u003dTrue is the default, we can also set it True if a floating_ip_address is given.","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"}],"rally/plugins/openstack/scenarios/vm/vmtasks.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"20c77e2c9f5d202fea58de448f27dd43f15aa538","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                               command\u003dNone,"},{"line_number":53,"context_line":"                               volume_args\u003dNone,"},{"line_number":54,"context_line":"                               floating_network\u003dNone,"},{"line_number":55,"context_line":"                               floating_ip_address\u003dNone,"},{"line_number":56,"context_line":"                               port\u003d22,"},{"line_number":57,"context_line":"                               use_floating_ip\u003dTrue,"},{"line_number":58,"context_line":"                               force_delete\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_084b3e5a","line":55,"updated":"2016-01-25 05:47:15.000000000","message":"I have one question. \n\nWhat will happen if we run in parallel this scenario with the same floating_ip_address. \n\nI believe it will fail. Am I right?","commit_id":"498e00dac9b8859244b83d34426d259f095a1424"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"358e91ef6c4c999a7f3da72cb8ae684425373e90","unresolved":false,"context_lines":[{"line_number":52,"context_line":"                               command\u003dNone,"},{"line_number":53,"context_line":"                               volume_args\u003dNone,"},{"line_number":54,"context_line":"                               floating_network\u003dNone,"},{"line_number":55,"context_line":"                               floating_ip_address\u003dNone,"},{"line_number":56,"context_line":"                               port\u003d22,"},{"line_number":57,"context_line":"                               use_floating_ip\u003dTrue,"},{"line_number":58,"context_line":"                               force_delete\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a68dd71_fe4d40c4","line":55,"in_reply_to":"9a68dd71_084b3e5a","updated":"2016-01-25 07:45:29.000000000","message":"Yes your are right. It will fail with \u0027IP is in use\u0027.\nThis option is not meant to be used for parallel benchmarking. We use it for functional tests, to verify, the target environment is still working.\n\nI will add that hint to the documentation of that parameter.","commit_id":"498e00dac9b8859244b83d34426d259f095a1424"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"d2c276f424228e911106d6cfa06cc7702390b508","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        :param volume_args: volume args for booting server from volume"},{"line_number":141,"context_line":"        :param floating_network: external network name, for floating ip"},{"line_number":142,"context_line":"        :param floating_ip_address: static address to be used from"},{"line_number":143,"context_line":"            floating_network. This option does not work when using"},{"line_number":144,"context_line":"            parallel (concurrent) benchmark runs."},{"line_number":145,"context_line":"        :param port: ssh port for SSH connection"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_611f7508","line":142,"updated":"2016-01-25 08:02:48.000000000","message":"It\u0027s not enough to add documentation. This change is adding enough flexiblity for end users to shot their legs. \n\nWe should add here validator that checks that this parameter is used only with serial runner.","commit_id":"fb41d4d21743d4b904a411a43ffa6e9cf58cb84d"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"538cc2faa2fb24d70c8a3704c29f9e6e7eea0643","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        :param volume_args: volume args for booting server from volume"},{"line_number":141,"context_line":"        :param floating_network: external network name, for floating ip"},{"line_number":142,"context_line":"        :param floating_ip_address: static address to be used from"},{"line_number":143,"context_line":"            floating_network. This option does not work when using"},{"line_number":144,"context_line":"            parallel (concurrent) benchmark runs."},{"line_number":145,"context_line":"        :param port: ssh port for SSH connection"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a68dd71_51847a09","line":142,"in_reply_to":"9a68dd71_611f7508","updated":"2016-01-25 10:00:12.000000000","message":"Added validation in patchset 3","commit_id":"fb41d4d21743d4b904a411a43ffa6e9cf58cb84d"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"005a73f4da6f10839fedc7ed22d7f0df153d0786","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                       integer_only\u003dTrue)"},{"line_number":45,"context_line":"    @validation.external_network_exists(\"floating_network\")"},{"line_number":46,"context_line":"    @validation.fip_without_concurrency(\"floating_ip_address\")"},{"line_number":47,"context_line":"    @validation.valid_ip_address(\"floating_ip_address\")"},{"line_number":48,"context_line":"    @validation.required_services(consts.Service.NOVA, consts.Service.CINDER)"},{"line_number":49,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":50,"context_line":"    @scenario.configure(context\u003d{\"cleanup\": [\"nova\", \"cinder\"],"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_50f2be06","line":47,"updated":"2016-03-19 00:06:44.000000000","message":"Under what circumstances would we want to use fip_without_concurrency() *without* valid_ip_address()?\n\nI like that you\u0027ve made them separate decorators -- that makes valid_ip_address() more reusable -- but fip_without_concurrency() should imply valid_ip_address() IMO.","commit_id":"c2fb7908689227439d290a310585b19834c71604"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"695cf7d25a82a6f526443263c4a977047e1df43f","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                       integer_only\u003dTrue)"},{"line_number":45,"context_line":"    @validation.external_network_exists(\"floating_network\")"},{"line_number":46,"context_line":"    @validation.fip_without_concurrency(\"floating_ip_address\")"},{"line_number":47,"context_line":"    @validation.valid_ip_address(\"floating_ip_address\")"},{"line_number":48,"context_line":"    @validation.required_services(consts.Service.NOVA, consts.Service.CINDER)"},{"line_number":49,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":50,"context_line":"    @scenario.configure(context\u003d{\"cleanup\": [\"nova\", \"cinder\"],"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa0719c6_1cb947ea","line":47,"in_reply_to":"1af94dfe_50f2be06","updated":"2016-03-21 09:59:38.000000000","message":"Done","commit_id":"c2fb7908689227439d290a310585b19834c71604"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"fc0a5ff83a13b006db9dd4f241aac6ced1ed7358","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @validation.number(\"port\", minval\u003d1, maxval\u003d65535, nullable\u003dTrue,"},{"line_number":44,"context_line":"                       integer_only\u003dTrue)"},{"line_number":45,"context_line":"    @validation.external_network_exists(\"floating_network\")"},{"line_number":46,"context_line":"    @validation.fip_without_concurrency(\"floating_ip_address\")"},{"line_number":47,"context_line":"    @validation.required_services(consts.Service.NOVA, consts.Service.CINDER)"},{"line_number":48,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":49,"context_line":"    @scenario.configure(context\u003d{\"cleanup\": [\"nova\", \"cinder\"],"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_c8eee2eb","line":46,"updated":"2016-03-21 12:56:51.000000000","message":"Limitation of using single iteration looks very unsuitable.\n\nHowever we can actually use concurrency - jus use argument named \"floating_ip_address_start\", so first iteration will take this IP, next will take immediately following IP address and so on.\n\nEach iteration can decide which IP address should be taken basing on balancing by self.context[\"iteration\"] number [1], or using RAMInt [2]\n\n[1] example of balancing: https://github.com/openstack/rally/blob/master/rally/plugins/openstack/scenarios/nova/utils.py#L106\n\n[2] https://github.com/openstack/rally/blob/master/rally/common/utils.py#L102","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"5a2fb8495784e34d9f03b76a68ee18a2144907e0","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @validation.number(\"port\", minval\u003d1, maxval\u003d65535, nullable\u003dTrue,"},{"line_number":44,"context_line":"                       integer_only\u003dTrue)"},{"line_number":45,"context_line":"    @validation.external_network_exists(\"floating_network\")"},{"line_number":46,"context_line":"    @validation.fip_without_concurrency(\"floating_ip_address\")"},{"line_number":47,"context_line":"    @validation.required_services(consts.Service.NOVA, consts.Service.CINDER)"},{"line_number":48,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":49,"context_line":"    @scenario.configure(context\u003d{\"cleanup\": [\"nova\", \"cinder\"],"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_3f522f14","line":46,"in_reply_to":"fa0719c6_169478e0","updated":"2016-03-21 14:15:01.000000000","message":"Some people want this scenario to run with concurrency \u003e 1.\n\nWe can make this options mutually exclusive. (concurrency\u003e1 and floating_ip_address is not None)\n\nPicking next available ip address may be confusing.","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"e7768d6a66fc81196f70b9f2d7462bb767fad976","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @validation.number(\"port\", minval\u003d1, maxval\u003d65535, nullable\u003dTrue,"},{"line_number":44,"context_line":"                       integer_only\u003dTrue)"},{"line_number":45,"context_line":"    @validation.external_network_exists(\"floating_network\")"},{"line_number":46,"context_line":"    @validation.fip_without_concurrency(\"floating_ip_address\")"},{"line_number":47,"context_line":"    @validation.required_services(consts.Service.NOVA, consts.Service.CINDER)"},{"line_number":48,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":49,"context_line":"    @scenario.configure(context\u003d{\"cleanup\": [\"nova\", \"cinder\"],"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_bf511f65","line":46,"in_reply_to":"fa0719c6_3f522f14","updated":"2016-03-21 14:25:04.000000000","message":"Oh, this limit works only if floating_ip_address is not None, so I can\u0027t see any problem here.\n\nWe can add floating_ip_start here, but it\u0027s hard to imagine use case for this.","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"c65eb8d82e35a5b4d409add8d27595fe8d5ae14d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @validation.number(\"port\", minval\u003d1, maxval\u003d65535, nullable\u003dTrue,"},{"line_number":44,"context_line":"                       integer_only\u003dTrue)"},{"line_number":45,"context_line":"    @validation.external_network_exists(\"floating_network\")"},{"line_number":46,"context_line":"    @validation.fip_without_concurrency(\"floating_ip_address\")"},{"line_number":47,"context_line":"    @validation.required_services(consts.Service.NOVA, consts.Service.CINDER)"},{"line_number":48,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":49,"context_line":"    @scenario.configure(context\u003d{\"cleanup\": [\"nova\", \"cinder\"],"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_169478e0","line":46,"in_reply_to":"fa0719c6_b4a7874e","updated":"2016-03-21 13:42:10.000000000","message":"I believe someone else will add an opinion for that.\nThe main reason of my doubt is that we make scenario less flexible","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"f5c4e408ac1d67f65b13893df462f793cbf380dd","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @validation.number(\"port\", minval\u003d1, maxval\u003d65535, nullable\u003dTrue,"},{"line_number":44,"context_line":"                       integer_only\u003dTrue)"},{"line_number":45,"context_line":"    @validation.external_network_exists(\"floating_network\")"},{"line_number":46,"context_line":"    @validation.fip_without_concurrency(\"floating_ip_address\")"},{"line_number":47,"context_line":"    @validation.required_services(consts.Service.NOVA, consts.Service.CINDER)"},{"line_number":48,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":49,"context_line":"    @scenario.configure(context\u003d{\"cleanup\": [\"nova\", \"cinder\"],"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_c537e0e1","line":46,"in_reply_to":"fa0719c6_bf511f65","updated":"2016-03-21 14:44:27.000000000","message":"@Tom, the idea is do not break backward compatibility in future - imagine that we finally decide to use many floating IPs - in this case we have to rename argument to \"floating_ip_address_start\" and break arguments names compatibility.\n\nBut you can use this argument right now, but raise some exception during the validation if like \"this is not implemented yet\" if we have more than 1 iteration.\n\nThis will save your time (no extra implementation required) and reserves argument flexibility for future.\nWhat do you think?","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"ee8c936320764cd841d4d0afd977338134eae1a3","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @validation.number(\"port\", minval\u003d1, maxval\u003d65535, nullable\u003dTrue,"},{"line_number":44,"context_line":"                       integer_only\u003dTrue)"},{"line_number":45,"context_line":"    @validation.external_network_exists(\"floating_network\")"},{"line_number":46,"context_line":"    @validation.fip_without_concurrency(\"floating_ip_address\")"},{"line_number":47,"context_line":"    @validation.required_services(consts.Service.NOVA, consts.Service.CINDER)"},{"line_number":48,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":49,"context_line":"    @scenario.configure(context\u003d{\"cleanup\": [\"nova\", \"cinder\"],"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_f303cbb6","line":46,"in_reply_to":"fa0719c6_c537e0e1","updated":"2016-03-21 16:02:48.000000000","message":"I see the point. So you want me to just rename the paramater for boot_runcommand_delete to \u0027floating_ip_address_start\u0027 and leave the concurrency validator for now, just adjust the error message to sth. \"not yet implemented\" of concurrency \u003e1?","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"882e1dbc135c5dc881addc9fa65ff16b737ce110","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @validation.number(\"port\", minval\u003d1, maxval\u003d65535, nullable\u003dTrue,"},{"line_number":44,"context_line":"                       integer_only\u003dTrue)"},{"line_number":45,"context_line":"    @validation.external_network_exists(\"floating_network\")"},{"line_number":46,"context_line":"    @validation.fip_without_concurrency(\"floating_ip_address\")"},{"line_number":47,"context_line":"    @validation.required_services(consts.Service.NOVA, consts.Service.CINDER)"},{"line_number":48,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":49,"context_line":"    @scenario.configure(context\u003d{\"cleanup\": [\"nova\", \"cinder\"],"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_b4a7874e","line":46,"in_reply_to":"fa0719c6_c8eee2eb","updated":"2016-03-21 13:24:44.000000000","message":"I think it is not that easy. We use that scenario really only as a functional test in our production, to verify if the production is still working. Therefore we do not want/need any concurrency, because we do not want to put load on the production system. To get this scenario working we also have to use the floating_network of the customer, to have the very same access rules, that means we cannot waste as many floating IPs we want, just for our test.\n\nWhen you use a floating_ip_address_start, then you would also need a floating_ip_address_end, otherwise you will consume nearly the whole network, just controlled by you concurrency and with an offset. And when using floating_ip_address_end, you would have to make sure, that this range is large enough for the configured concurrency.\n\nThis static floating_ip_address is really only ment to be used for single functional tests in productive environments, not for benchmarking and/or load tests, that run concurrently in test or verification environments.","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"9491840129b39bcb2aaa591fe5d164098e54d567","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    @validation.number(\"port\", minval\u003d1, maxval\u003d65535, nullable\u003dTrue,"},{"line_number":44,"context_line":"                       integer_only\u003dTrue)"},{"line_number":45,"context_line":"    @validation.external_network_exists(\"floating_network\")"},{"line_number":46,"context_line":"    @validation.fip_without_concurrency(\"floating_ip_address\")"},{"line_number":47,"context_line":"    @validation.required_services(consts.Service.NOVA, consts.Service.CINDER)"},{"line_number":48,"context_line":"    @validation.required_openstack(users\u003dTrue)"},{"line_number":49,"context_line":"    @scenario.configure(context\u003d{\"cleanup\": [\"nova\", \"cinder\"],"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_f61d7967","line":46,"in_reply_to":"fa0719c6_f303cbb6","updated":"2016-03-21 16:09:34.000000000","message":"Yes, I think this would be better","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"}],"rally/plugins/openstack/wrappers/network.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"986669ebfe48c2767be095f86761b68998d3bb46","unresolved":false,"context_lines":[{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def create_floating_ip(self, ext_network\u003dNone,"},{"line_number":401,"context_line":"                           tenant_id\u003dNone, port_id\u003dNone,"},{"line_number":402,"context_line":"                           floating_ip_address\u003dNone, **kwargs):"},{"line_number":403,"context_line":"        \"\"\"Create Neutron floating IP."},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        :param ext_network: floating network name or dict"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_8e1fed08","line":402,"updated":"2016-02-02 15:22:00.000000000","message":"Why is this only added to the Neutron wrapper, not nova-net as well? If there\u0027s a good reason, then the fact that this option only works with Neutron needs to be documented in a couple places, but at a minimum in the boot_runcommand_delete docstring.","commit_id":"e58643dc1c96f7c576a2c1225bb7d995a91bf37e"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"032ee639575c535e3a8e35dfe931cf41069ed547","unresolved":false,"context_lines":[{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    def create_floating_ip(self, ext_network\u003dNone,"},{"line_number":401,"context_line":"                           tenant_id\u003dNone, port_id\u003dNone,"},{"line_number":402,"context_line":"                           floating_ip_address\u003dNone, **kwargs):"},{"line_number":403,"context_line":"        \"\"\"Create Neutron floating IP."},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"        :param ext_network: floating network name or dict"}],"source_content_type":"text/x-python","patch_set":8,"id":"1af94dfe_778539cd","line":402,"in_reply_to":"7a5de9d1_8e1fed08","updated":"2016-03-18 19:43:20.000000000","message":"I\u0027ll add this constraint to the docstring. I cannot verify/test nova-net. Does nova-net provide such a feature to manually predefine an ipaddress for floating ip create?\nI think nova-net is marked as deprecated long long ago, at some point we have to stop supporting every feature for both types. If needed for nova-net this has to be done by someone else within another patch.","commit_id":"e58643dc1c96f7c576a2c1225bb7d995a91bf37e"},{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"113de046e4a1c0033a52aa69943651bd74683c38","unresolved":false,"context_lines":[{"line_number":435,"context_line":"        if port_id:"},{"line_number":436,"context_line":"            kwargs[\"port_id\"] \u003d port_id"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"        fip \u003d self.client.create_floatingip(kwargs)[\"floatingip\"]"},{"line_number":439,"context_line":"        return {\"id\": fip[\"id\"], \"ip\": fip[\"floating_ip_address\"]}"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def delete_floating_ip(self, fip_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_4f0e5c35","line":438,"updated":"2016-03-21 11:18:15.000000000","message":"What if this ip address is already used? Perhaps we need to add a validator","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"fb9f320016e97ff2f8ac80e124ff8bba3820938a","unresolved":false,"context_lines":[{"line_number":435,"context_line":"        if port_id:"},{"line_number":436,"context_line":"            kwargs[\"port_id\"] \u003d port_id"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"        fip \u003d self.client.create_floatingip(kwargs)[\"floatingip\"]"},{"line_number":439,"context_line":"        return {\"id\": fip[\"id\"], \"ip\": fip[\"floating_ip_address\"]}"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def delete_floating_ip(self, fip_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_089a9a14","line":438,"in_reply_to":"fa0719c6_4f0e5c35","updated":"2016-03-21 12:19:23.000000000","message":"Neutron will check that for us. Yes, of course it will fail later if that is the case, but we cannot cover everything by validators. We also do not check if there are free floating IPs in the floating_network at all; or we also do not check if the provided floating_ip_address belongs to the floating_network\u0027s subnet.","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"e3c125a7216315a88930aac99ed6490bbbebd4cf","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        return [self._marshal_network_object(n)"},{"line_number":172,"context_line":"                for n in self.client.networks.list()]"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def create_floating_ip(self, ext_network\u003dNone, **kwargs):"},{"line_number":175,"context_line":"        \"\"\"Allocate a floating ip from the given nova-network pool"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        :param ext_network: name or external network, str"}],"source_content_type":"text/x-python","patch_set":13,"id":"da0c15f0_17790b94","line":174,"updated":"2016-03-25 14:14:09.000000000","message":"Please add compatibility to this method as well - if nova client API allows to set specific floating IP address, then this should be implemented here, otherwise print warning that IP address is specified but not used","commit_id":"a803a0ca8ad4c419e8a21b2e9f39b8ad27588c10"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"23dbcd7b4d5b387fe4a089e2d99e38d61fa32c46","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        return [self._marshal_network_object(n)"},{"line_number":172,"context_line":"                for n in self.client.networks.list()]"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def create_floating_ip(self, ext_network\u003dNone, **kwargs):"},{"line_number":175,"context_line":"        \"\"\"Allocate a floating ip from the given nova-network pool"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        :param ext_network: name or external network, str"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_99451019","line":174,"in_reply_to":"da0c15f0_17790b94","updated":"2016-03-30 11:29:29.000000000","message":"Done","commit_id":"a803a0ca8ad4c419e8a21b2e9f39b8ad27588c10"}],"rally/task/validation.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"32787979b4b2b09592d8d8aa876eb381feb0d2d5","unresolved":false,"context_lines":[{"line_number":412,"context_line":"    \"\"\""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    floating_ip \u003d config.get(\"args\", {}).get(fip)"},{"line_number":415,"context_line":"    concurrency \u003d config.get(\"runner\", {}).get(\"concurrency\") or 1"},{"line_number":416,"context_line":"    if not floating_ip:"},{"line_number":417,"context_line":"        return ValidationResult(True)"},{"line_number":418,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_222cf297","line":415,"updated":"2016-01-25 23:10:44.000000000","message":"nope this won\u0027t work, you should check type of runner. \"concurrency\" is actually parameter of constant runner.","commit_id":"bed90a2ca4c1b44f851aaf81ca11f8ae97154a28"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"984b9bffac38d89f3cf62dcfb64820cf324d2886","unresolved":false,"context_lines":[{"line_number":412,"context_line":"    \"\"\""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    floating_ip \u003d config.get(\"args\", {}).get(fip)"},{"line_number":415,"context_line":"    concurrency \u003d config.get(\"runner\", {}).get(\"concurrency\") or 1"},{"line_number":416,"context_line":"    if not floating_ip:"},{"line_number":417,"context_line":"        return ValidationResult(True)"},{"line_number":418,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_f010d1ad","line":415,"in_reply_to":"9a68dd71_222cf297","updated":"2016-01-26 10:00:27.000000000","message":"Ok. I will only fetch concurrency and proceed with the check if:\n\nif runner_type not in [\u0027constant\u0027,\u0027constant_for_duration\u0027]:\n\ndocumentation says, that constanst_for_duration behaves the same as constant.","commit_id":"bed90a2ca4c1b44f851aaf81ca11f8ae97154a28"},{"author":{"_account_id":8491,"name":"Illia Khudoshyn","email":"ikhudoshyn@mirantis.com","username":"ikhudoshyn"},"change_message_id":"d67555666cde4304224913584feebc9b601b6d2b","unresolved":false,"context_lines":[{"line_number":408,"context_line":"def floating_ip_address_no_concurrency(config, clients, deployment, fip):"},{"line_number":409,"context_line":"    \"\"\"Validator checks that floating_ip_address is not"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"       used with together with concurrency \u003e 1."},{"line_number":412,"context_line":"    \"\"\""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    floating_ip \u003d config.get(\"args\", {}).get(fip)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a68dd71_fa5c28f2","line":411,"range":{"start_line":411,"start_character":12,"end_line":411,"end_character":16},"updated":"2016-01-26 11:45:16.000000000","message":"extra \u0027with\u0027 here","commit_id":"f92499ac9b9f0507d9427fa7af7aa6215bd7da7e"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f6baae5c43bfa73a3e4f3096d0a03a8366e65909","unresolved":false,"context_lines":[{"line_number":405,"context_line":""},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"@validator"},{"line_number":408,"context_line":"def floating_ip_address_no_concurrency(config, clients, deployment, fip):"},{"line_number":409,"context_line":"    \"\"\"Validator checks that floating_ip_address is not"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"       used together with concurrency \u003e 1."}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_e0247eb3","line":408,"updated":"2016-02-02 10:56:04.000000000","message":"I think that better to make the name shorter. For example, fip_without_concurrency.","commit_id":"722dcb64565f3839dea776b8d5883124daf6d960"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"e159b704dfd15eb77c7a0b5bae4bc4829ef47f87","unresolved":false,"context_lines":[{"line_number":405,"context_line":""},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"@validator"},{"line_number":408,"context_line":"def floating_ip_address_no_concurrency(config, clients, deployment, fip):"},{"line_number":409,"context_line":"    \"\"\"Validator checks that floating_ip_address is not"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"       used together with concurrency \u003e 1."}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_bb855b08","line":408,"in_reply_to":"7a5de9d1_e0247eb3","updated":"2016-02-02 13:02:39.000000000","message":"ack","commit_id":"722dcb64565f3839dea776b8d5883124daf6d960"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f6baae5c43bfa73a3e4f3096d0a03a8366e65909","unresolved":false,"context_lines":[{"line_number":407,"context_line":"@validator"},{"line_number":408,"context_line":"def floating_ip_address_no_concurrency(config, clients, deployment, fip):"},{"line_number":409,"context_line":"    \"\"\"Validator checks that floating_ip_address is not"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"       used together with concurrency \u003e 1."},{"line_number":412,"context_line":"    \"\"\""},{"line_number":413,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_7550525f","line":410,"updated":"2016-02-02 10:56:04.000000000","message":"Please remove empty line here","commit_id":"722dcb64565f3839dea776b8d5883124daf6d960"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"e159b704dfd15eb77c7a0b5bae4bc4829ef47f87","unresolved":false,"context_lines":[{"line_number":407,"context_line":"@validator"},{"line_number":408,"context_line":"def floating_ip_address_no_concurrency(config, clients, deployment, fip):"},{"line_number":409,"context_line":"    \"\"\"Validator checks that floating_ip_address is not"},{"line_number":410,"context_line":""},{"line_number":411,"context_line":"       used together with concurrency \u003e 1."},{"line_number":412,"context_line":"    \"\"\""},{"line_number":413,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_617dedb0","line":410,"in_reply_to":"7a5de9d1_7550525f","updated":"2016-02-02 13:02:39.000000000","message":"flake8 is complaining if this newline not there:\n\nH405  multi line docstring summary not separated with an empty line","commit_id":"722dcb64565f3839dea776b8d5883124daf6d960"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f6baae5c43bfa73a3e4f3096d0a03a8366e65909","unresolved":false,"context_lines":[{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    floating_ip \u003d config.get(\"args\", {}).get(fip)"},{"line_number":415,"context_line":"    runner_type \u003d config.get(\"runner\", {}).get(\"type\")"},{"line_number":416,"context_line":"    if runner_type not in [\"constant\", \"constant_for_duration\"]:"},{"line_number":417,"context_line":"        return ValidationResult(True)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    concurrency \u003d config.get(\"runner\", {}).get(\"concurrency\") or 1"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_401c72c1","line":416,"updated":"2016-02-02 10:56:04.000000000","message":"This may cause a problem that someone adding new runner should change validator. This is not good. This is potential bug. We should iterate through runners and check whether they have concurrency attribute or not. Also rps runner could run concurrently too. \nWritting this comment I realized that static fip would be hard to maintain\u003d) Maybe we should notify people that usage of static fip may cause error any way)","commit_id":"722dcb64565f3839dea776b8d5883124daf6d960"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"e159b704dfd15eb77c7a0b5bae4bc4829ef47f87","unresolved":false,"context_lines":[{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    floating_ip \u003d config.get(\"args\", {}).get(fip)"},{"line_number":415,"context_line":"    runner_type \u003d config.get(\"runner\", {}).get(\"type\")"},{"line_number":416,"context_line":"    if runner_type not in [\"constant\", \"constant_for_duration\"]:"},{"line_number":417,"context_line":"        return ValidationResult(True)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    concurrency \u003d config.get(\"runner\", {}).get(\"concurrency\") or 1"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_172a3b7f","line":416,"in_reply_to":"7a5de9d1_401c72c1","updated":"2016-02-02 13:02:39.000000000","message":"Yes, keeping that in mind for new runners is not good.\n\nI will change it to something like:\n\nrunner_conf \u003d config.get(\"runner\", {})\n    if \"concurrency\" in runner_conf:\n\nWhich will only do the further validation if the current runner has a \u0027concurrency\u0027 parameter.","commit_id":"722dcb64565f3839dea776b8d5883124daf6d960"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"f6baae5c43bfa73a3e4f3096d0a03a8366e65909","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    if runner_type not in [\"constant\", \"constant_for_duration\"]:"},{"line_number":417,"context_line":"        return ValidationResult(True)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    concurrency \u003d config.get(\"runner\", {}).get(\"concurrency\") or 1"},{"line_number":420,"context_line":"    if not floating_ip:"},{"line_number":421,"context_line":"        return ValidationResult(True)"},{"line_number":422,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_a00d26ea","line":419,"updated":"2016-02-02 10:56:04.000000000","message":"concurrency \u003d config.get(\"runner\", {}).get(\"concurrency\", 1)","commit_id":"722dcb64565f3839dea776b8d5883124daf6d960"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"e159b704dfd15eb77c7a0b5bae4bc4829ef47f87","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    if runner_type not in [\"constant\", \"constant_for_duration\"]:"},{"line_number":417,"context_line":"        return ValidationResult(True)"},{"line_number":418,"context_line":""},{"line_number":419,"context_line":"    concurrency \u003d config.get(\"runner\", {}).get(\"concurrency\") or 1"},{"line_number":420,"context_line":"    if not floating_ip:"},{"line_number":421,"context_line":"        return ValidationResult(True)"},{"line_number":422,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7a5de9d1_b71ec75d","line":419,"in_reply_to":"7a5de9d1_a00d26ea","updated":"2016-02-02 13:02:39.000000000","message":"ack","commit_id":"722dcb64565f3839dea776b8d5883124daf6d960"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"986669ebfe48c2767be095f86761b68998d3bb46","unresolved":false,"context_lines":[{"line_number":405,"context_line":""},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"@validator"},{"line_number":408,"context_line":"def fip_without_concurrency(config, clients, deployment, fip):"},{"line_number":409,"context_line":"    \"\"\"Checks floating_ip_address is not used together with concurrency.\"\"\""},{"line_number":410,"context_line":"    floating_ip \u003d config.get(\"args\", {}).get(fip)"},{"line_number":411,"context_line":"    runner_conf \u003d config.get(\"runner\", {})"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_8ef7ed8b","line":408,"updated":"2016-02-02 15:22:00.000000000","message":"This should also validate that the fip is a valid IP address, and that it\u0027s valid on the floating network given.","commit_id":"e58643dc1c96f7c576a2c1225bb7d995a91bf37e"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"c1be0dd268d0250b8397cfa4e549c9b5ab86e4cd","unresolved":false,"context_lines":[{"line_number":405,"context_line":""},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"@validator"},{"line_number":408,"context_line":"def fip_without_concurrency(config, clients, deployment, fip):"},{"line_number":409,"context_line":"    \"\"\"Checks floating_ip_address is not used together with concurrency.\"\"\""},{"line_number":410,"context_line":"    floating_ip \u003d config.get(\"args\", {}).get(fip)"},{"line_number":411,"context_line":"    runner_conf \u003d config.get(\"runner\", {})"}],"source_content_type":"text/x-python","patch_set":8,"id":"1af94dfe_b2f6af8c","line":408,"in_reply_to":"1af94dfe_b7498133","updated":"2016-03-18 20:02:48.000000000","message":"That fails late; we should fail early during validation.","commit_id":"e58643dc1c96f7c576a2c1225bb7d995a91bf37e"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"032ee639575c535e3a8e35dfe931cf41069ed547","unresolved":false,"context_lines":[{"line_number":405,"context_line":""},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"@validator"},{"line_number":408,"context_line":"def fip_without_concurrency(config, clients, deployment, fip):"},{"line_number":409,"context_line":"    \"\"\"Checks floating_ip_address is not used together with concurrency.\"\"\""},{"line_number":410,"context_line":"    floating_ip \u003d config.get(\"args\", {}).get(fip)"},{"line_number":411,"context_line":"    runner_conf \u003d config.get(\"runner\", {})"}],"source_content_type":"text/x-python","patch_set":8,"id":"1af94dfe_b7498133","line":408,"in_reply_to":"7a5de9d1_8ef7ed8b","updated":"2016-03-18 19:43:20.000000000","message":"This is already covered by neutron. There you get:\nBadRequest: Invalid input for floating_ip_address. Reason: \u002710.20.30.555\u0027 is not a valid IP address.","commit_id":"e58643dc1c96f7c576a2c1225bb7d995a91bf37e"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"cbc040553ff0252ccf96af3e3ed81fa31c0496e6","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    \"\"\"Checks floating_ip_address is not used together with concurrency.\"\"\""},{"line_number":410,"context_line":"    floating_ip \u003d config.get(\"args\", {}).get(fip)"},{"line_number":411,"context_line":"    runner_conf \u003d config.get(\"runner\", {})"},{"line_number":412,"context_line":"    if \"concurrency\" in runner_conf:"},{"line_number":413,"context_line":"        concurrency \u003d runner_conf.get(\"concurrency\", 1)"},{"line_number":414,"context_line":"        if not floating_ip:"},{"line_number":415,"context_line":"            return ValidationResult(True)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_6dd8771e","line":412,"updated":"2016-02-03 10:28:05.000000000","message":"How about \"rps\" runner? It does not have option \"concurrency\" but uses threads","commit_id":"e58643dc1c96f7c576a2c1225bb7d995a91bf37e"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"032ee639575c535e3a8e35dfe931cf41069ed547","unresolved":false,"context_lines":[{"line_number":409,"context_line":"    \"\"\"Checks floating_ip_address is not used together with concurrency.\"\"\""},{"line_number":410,"context_line":"    floating_ip \u003d config.get(\"args\", {}).get(fip)"},{"line_number":411,"context_line":"    runner_conf \u003d config.get(\"runner\", {})"},{"line_number":412,"context_line":"    if \"concurrency\" in runner_conf:"},{"line_number":413,"context_line":"        concurrency \u003d runner_conf.get(\"concurrency\", 1)"},{"line_number":414,"context_line":"        if not floating_ip:"},{"line_number":415,"context_line":"            return ValidationResult(True)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1af94dfe_d77fed12","line":412,"in_reply_to":"5a5ae5dd_6dd8771e","updated":"2016-03-18 19:43:20.000000000","message":"We can add this conditions to the help of that option.\nThis option only works without concurrency or threads. For us, we verify if our production still works (no benchmarking with concurrency) and do want to use always the very same floating IP address from the shared provider network for that. Without that we could not easily run tasks, that require floating ips.","commit_id":"e58643dc1c96f7c576a2c1225bb7d995a91bf37e"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"005a73f4da6f10839fedc7ed22d7f0df153d0786","unresolved":false,"context_lines":[{"line_number":430,"context_line":""},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"@validator"},{"line_number":433,"context_line":"def valid_ip_address(config, clients, deployment, ip_address):"},{"line_number":434,"context_line":"    \"\"\"Validator checks that given ip is a valid ip address.\"\"\""},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    ipaddr \u003d config.get(\"args\", {}).get(ip_address)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1af94dfe_1b85f758","line":433,"updated":"2016-03-19 00:06:44.000000000","message":"Is it possible or reasonable to import neutron_lib and call this directly instead of copying the code here?","commit_id":"c2fb7908689227439d290a310585b19834c71604"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"695cf7d25a82a6f526443263c4a977047e1df43f","unresolved":false,"context_lines":[{"line_number":430,"context_line":""},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"@validator"},{"line_number":433,"context_line":"def valid_ip_address(config, clients, deployment, ip_address):"},{"line_number":434,"context_line":"    \"\"\"Validator checks that given ip is a valid ip address.\"\"\""},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    ipaddr \u003d config.get(\"args\", {}).get(ip_address)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa0719c6_7c7cc320","line":433,"in_reply_to":"1af94dfe_1b85f758","updated":"2016-03-21 09:59:38.000000000","message":"I also thought about that; but this will not work. This method comes from neutron.api.v2.","commit_id":"c2fb7908689227439d290a310585b19834c71604"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"fc0a5ff83a13b006db9dd4f241aac6ced1ed7358","unresolved":false,"context_lines":[{"line_number":412,"context_line":""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"@validator"},{"line_number":415,"context_line":"def fip_without_concurrency(config, clients, deployment, fip):"},{"line_number":416,"context_line":"    \"\"\"Checks floating_ip_address is not used together with concurrency.\"\"\""},{"line_number":417,"context_line":"    floating_ip \u003d config.get(\"args\", {}).get(fip)"},{"line_number":418,"context_line":"    runner_conf \u003d config.get(\"runner\", {})"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_c8aa6270","line":415,"updated":"2016-03-21 12:56:51.000000000","message":"As I mentioned in vmtasks.py, limitation to use single iteration is very unwanted, I believe we can get rid of this limitation and this validator.","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"e5831ece704ef9315deab01342eb9521e945f5e1","unresolved":false,"context_lines":[{"line_number":451,"context_line":"    try:"},{"line_number":452,"context_line":"        # netaddr.core.ZEROFILL is only applicable to IPv4."},{"line_number":453,"context_line":"        # it will remove leading zeros from IPv4 address octets."},{"line_number":454,"context_line":"        ip \u003d netaddr.IPAddress(ipaddr, flags\u003dnetaddr.core.ZEROFILL)"},{"line_number":455,"context_line":"        # The followings are quick checks for IPv6 (has \u0027:\u0027) and"},{"line_number":456,"context_line":"        # IPv4.  (has 3 periods like \u0027xx.xx.xx.xx\u0027)"},{"line_number":457,"context_line":"        # NOTE(yamamoto): netaddr uses libraries provided by the underlying"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_f909fade","line":454,"updated":"2016-03-21 12:58:37.000000000","message":"Why not simply use netaddr.valid_ipv4() and netaddr.valid_ipv6() ?","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"eb9a2443fe90595da48b8adffa1acb4cc2613537","unresolved":false,"context_lines":[{"line_number":451,"context_line":"    try:"},{"line_number":452,"context_line":"        # netaddr.core.ZEROFILL is only applicable to IPv4."},{"line_number":453,"context_line":"        # it will remove leading zeros from IPv4 address octets."},{"line_number":454,"context_line":"        ip \u003d netaddr.IPAddress(ipaddr, flags\u003dnetaddr.core.ZEROFILL)"},{"line_number":455,"context_line":"        # The followings are quick checks for IPv6 (has \u0027:\u0027) and"},{"line_number":456,"context_line":"        # IPv4.  (has 3 periods like \u0027xx.xx.xx.xx\u0027)"},{"line_number":457,"context_line":"        # NOTE(yamamoto): netaddr uses libraries provided by the underlying"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_331263b5","line":454,"in_reply_to":"fa0719c6_5409cb2b","updated":"2016-03-21 16:03:35.000000000","message":"Done","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"882e1dbc135c5dc881addc9fa65ff16b737ce110","unresolved":false,"context_lines":[{"line_number":451,"context_line":"    try:"},{"line_number":452,"context_line":"        # netaddr.core.ZEROFILL is only applicable to IPv4."},{"line_number":453,"context_line":"        # it will remove leading zeros from IPv4 address octets."},{"line_number":454,"context_line":"        ip \u003d netaddr.IPAddress(ipaddr, flags\u003dnetaddr.core.ZEROFILL)"},{"line_number":455,"context_line":"        # The followings are quick checks for IPv6 (has \u0027:\u0027) and"},{"line_number":456,"context_line":"        # IPv4.  (has 3 periods like \u0027xx.xx.xx.xx\u0027)"},{"line_number":457,"context_line":"        # NOTE(yamamoto): netaddr uses libraries provided by the underlying"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_5409cb2b","line":454,"in_reply_to":"fa0719c6_f909fade","updated":"2016-03-21 13:24:44.000000000","message":"Good question. I was just under the impression, that this trivial task must already be well and best implemented within neutron. But we can also do a simple check with valid_ipv4 and valid_ipv6 and let neutron api do the more advanced check later on.","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"5c3e985f2d7e7180e0a6fa0bf4e67b5bdaf35832","unresolved":false,"context_lines":[{"line_number":437,"context_line":""},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"@validator"},{"line_number":440,"context_line":"def valid_ip_address(config, clients, deployment, ip_address):"},{"line_number":441,"context_line":"    \"\"\"Validator checks that given ip is a valid ip address.\"\"\""},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"    ipaddr \u003d config.get(\"args\", {}).get(ip_address)"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_a1b704d7","line":440,"updated":"2016-03-22 15:34:14.000000000","message":"This validator is not in use\n\nEven if this looks reasonable to have such a validator, we need real usage case, and it should be moved to separate patch","commit_id":"b1345bc56c4e378837bea13e9a2eb17b029710d8"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"5c3e985f2d7e7180e0a6fa0bf4e67b5bdaf35832","unresolved":false,"context_lines":[{"line_number":455,"context_line":"    try:"},{"line_number":456,"context_line":"        is_valid \u003d (netaddr.valid_ipv4(ipaddr, flags\u003dnetaddr.core.INET_PTON) or"},{"line_number":457,"context_line":"                    netaddr.valid_ipv6(ipaddr))"},{"line_number":458,"context_line":"    except Exception:"},{"line_number":459,"context_line":"        is_valid \u003d False"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    return is_valid"}],"source_content_type":"text/x-python","patch_set":12,"id":"fa0719c6_4155481b","line":458,"updated":"2016-03-22 15:34:14.000000000","message":"Catching base Exception type is not a good practice, also this is not actually required, we do not need to catch any exception here, this will be enough:\n\n def _is_valid_ip_address(ipaddr):\n   \"\"\"...\"\"\"\n   if ipaddr:\n     return (netaddr.valid_ipv4(ipaddr, flags\u003dnetaddr.core.INET_PTON)\n             or netaddr.valid_ipv6(ipaddr))\n   return False","commit_id":"b1345bc56c4e378837bea13e9a2eb17b029710d8"}],"samples/tasks/scenarios/vm/boot-runcommand-delete-with-static-fip.json":[{"author":{"_account_id":7369,"name":"Sergey Skripnick","email":"sskripnick@mirantis.com","username":"redixin"},"change_message_id":"113de046e4a1c0033a52aa69943651bd74683c38","unresolved":false,"context_lines":[{"line_number":10,"context_line":"                    \"name\": \"^cirros.*uec$\""},{"line_number":11,"context_line":"                },"},{"line_number":12,"context_line":"                \"floating_network\": \"public\","},{"line_number":13,"context_line":"                \"floating_ip_address\": \"192.168.0.10\","},{"line_number":14,"context_line":"                \"force_delete\": false,"},{"line_number":15,"context_line":"                \"command\": {"},{"line_number":16,"context_line":"                    \"remote_path\": \"samples/tasks/support/instance_dd_test.sh\""}],"source_content_type":"application/json","patch_set":11,"id":"fa0719c6_af957841","line":13,"updated":"2016-03-21 11:18:15.000000000","message":"There is no \"use_floating_ip\" in this sample, so it won\u0027t work with current implementation. IMO it should work without \"use_floating_ip\" in this case.","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"fb9f320016e97ff2f8ac80e124ff8bba3820938a","unresolved":false,"context_lines":[{"line_number":10,"context_line":"                    \"name\": \"^cirros.*uec$\""},{"line_number":11,"context_line":"                },"},{"line_number":12,"context_line":"                \"floating_network\": \"public\","},{"line_number":13,"context_line":"                \"floating_ip_address\": \"192.168.0.10\","},{"line_number":14,"context_line":"                \"force_delete\": false,"},{"line_number":15,"context_line":"                \"command\": {"},{"line_number":16,"context_line":"                    \"remote_path\": \"samples/tasks/support/instance_dd_test.sh\""}],"source_content_type":"application/json","patch_set":11,"id":"fa0719c6_48177251","line":13,"in_reply_to":"fa0719c6_af957841","updated":"2016-03-21 12:19:23.000000000","message":"The default, when not given, is use_floating_ip\u003dTrue. So this sample will work. There will be only a warning when you explicitly set use_floating_ip\u003dFalse and give a floating_ip_address.","commit_id":"c2a5a375cf1367443cd8e13f08e6c27a361feb82"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"e10af36e51feb9e64c8d4e61a7ab68dd84ffb66d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"        {"},{"line_number":5,"context_line":"            \"args\": {"},{"line_number":6,"context_line":"                \"flavor\": {"},{"line_number":7,"context_line":"                    \"name\": \"{{flavor_name}}\""},{"line_number":8,"context_line":"                },"},{"line_number":9,"context_line":"                \"image\": {"},{"line_number":10,"context_line":"                    \"name\": \"^cirros.*uec$\""}],"source_content_type":"application/json","patch_set":14,"id":"7a1b2928_9f0c2644","line":7,"updated":"2016-04-11 12:59:25.000000000","message":"put \"m1.tiny\" here (and delete L1) since this value appears only once","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"ac60dc6896419eb92cc875d56fcfaafddc83bf85","unresolved":false,"context_lines":[{"line_number":4,"context_line":"        {"},{"line_number":5,"context_line":"            \"args\": {"},{"line_number":6,"context_line":"                \"flavor\": {"},{"line_number":7,"context_line":"                    \"name\": \"{{flavor_name}}\""},{"line_number":8,"context_line":"                },"},{"line_number":9,"context_line":"                \"image\": {"},{"line_number":10,"context_line":"                    \"name\": \"^cirros.*uec$\""}],"source_content_type":"application/json","patch_set":14,"id":"1a122d0e_27f52283","line":7,"in_reply_to":"7a1b2928_9f0c2644","updated":"2016-04-15 20:24:50.000000000","message":"Done","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"e10af36e51feb9e64c8d4e61a7ab68dd84ffb66d","unresolved":false,"context_lines":[{"line_number":25,"context_line":"            },"},{"line_number":26,"context_line":"            \"context\": {"},{"line_number":27,"context_line":"                \"users\": {"},{"line_number":28,"context_line":"                    \"tenants\": 3,"},{"line_number":29,"context_line":"                    \"users_per_tenant\": 2"},{"line_number":30,"context_line":"                },"},{"line_number":31,"context_line":"                \"network\": {"}],"source_content_type":"application/json","patch_set":14,"id":"7a1b2928_5a20dc9b","line":28,"updated":"2016-04-11 12:59:25.000000000","message":"why 3 tenants and 2 users per tenant? We have only 1 iteration. Use tenants: 1 users_per_tenant: 1","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"ac60dc6896419eb92cc875d56fcfaafddc83bf85","unresolved":false,"context_lines":[{"line_number":25,"context_line":"            },"},{"line_number":26,"context_line":"            \"context\": {"},{"line_number":27,"context_line":"                \"users\": {"},{"line_number":28,"context_line":"                    \"tenants\": 3,"},{"line_number":29,"context_line":"                    \"users_per_tenant\": 2"},{"line_number":30,"context_line":"                },"},{"line_number":31,"context_line":"                \"network\": {"}],"source_content_type":"application/json","patch_set":14,"id":"1a122d0e_67ef1ab1","line":28,"in_reply_to":"7a1b2928_5a20dc9b","updated":"2016-04-15 20:24:50.000000000","message":"Done","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"}],"samples/tasks/scenarios/vm/boot-runcommand-delete-with-static-fip.yaml":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"e10af36e51feb9e64c8d4e61a7ab68dd84ffb66d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    -"},{"line_number":5,"context_line":"      args:"},{"line_number":6,"context_line":"        flavor:"},{"line_number":7,"context_line":"            name: \"{{flavor_name}}\""},{"line_number":8,"context_line":"        image:"},{"line_number":9,"context_line":"            name: \"^cirros.*uec$\""},{"line_number":10,"context_line":"        floating_network: \"public\""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a1b2928_fa03a80b","line":7,"updated":"2016-04-11 12:59:25.000000000","message":"same here","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"ac60dc6896419eb92cc875d56fcfaafddc83bf85","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    -"},{"line_number":5,"context_line":"      args:"},{"line_number":6,"context_line":"        flavor:"},{"line_number":7,"context_line":"            name: \"{{flavor_name}}\""},{"line_number":8,"context_line":"        image:"},{"line_number":9,"context_line":"            name: \"^cirros.*uec$\""},{"line_number":10,"context_line":"        floating_network: \"public\""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"1a122d0e_e7396a43","line":7,"in_reply_to":"7a1b2928_fa03a80b","updated":"2016-04-15 20:24:50.000000000","message":"Done","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"e10af36e51feb9e64c8d4e61a7ab68dd84ffb66d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"        concurrency: 1"},{"line_number":21,"context_line":"      context:"},{"line_number":22,"context_line":"        users:"},{"line_number":23,"context_line":"          tenants: 3"},{"line_number":24,"context_line":"          users_per_tenant: 2"},{"line_number":25,"context_line":"        network: {}"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a1b2928_ba3130ef","line":23,"updated":"2016-04-11 12:59:25.000000000","message":"1","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"ac60dc6896419eb92cc875d56fcfaafddc83bf85","unresolved":false,"context_lines":[{"line_number":20,"context_line":"        concurrency: 1"},{"line_number":21,"context_line":"      context:"},{"line_number":22,"context_line":"        users:"},{"line_number":23,"context_line":"          tenants: 3"},{"line_number":24,"context_line":"          users_per_tenant: 2"},{"line_number":25,"context_line":"        network: {}"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"1a122d0e_473f7e25","line":23,"in_reply_to":"7a1b2928_ba3130ef","updated":"2016-04-15 20:24:50.000000000","message":"Done","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"e10af36e51feb9e64c8d4e61a7ab68dd84ffb66d","unresolved":false,"context_lines":[{"line_number":21,"context_line":"      context:"},{"line_number":22,"context_line":"        users:"},{"line_number":23,"context_line":"          tenants: 3"},{"line_number":24,"context_line":"          users_per_tenant: 2"},{"line_number":25,"context_line":"        network: {}"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a1b2928_1a4dc472","line":24,"updated":"2016-04-11 12:59:25.000000000","message":"1","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"ac60dc6896419eb92cc875d56fcfaafddc83bf85","unresolved":false,"context_lines":[{"line_number":21,"context_line":"      context:"},{"line_number":22,"context_line":"        users:"},{"line_number":23,"context_line":"          tenants: 3"},{"line_number":24,"context_line":"          users_per_tenant: 2"},{"line_number":25,"context_line":"        network: {}"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"1a122d0e_874996d3","line":24,"in_reply_to":"7a1b2928_1a4dc472","updated":"2016-04-15 20:24:50.000000000","message":"Done","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"}],"tests/unit/plugins/openstack/scenarios/vm/test_utils.py":[{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"986669ebfe48c2767be095f86761b68998d3bb46","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            return_value\u003d{\"id\": \"foo_id\", \"ip\": \"foo_ip\"})"},{"line_number":182,"context_line":"        server, ip \u003d scenario._boot_server_with_fip("},{"line_number":183,"context_line":"            \"foo_image\", \"foo_flavor\", floating_network\u003d\"ext_network\","},{"line_number":184,"context_line":"            floating_ip_address\u003d\"192.168.0.250\","},{"line_number":185,"context_line":"            use_floating_ip\u003dTrue, foo_arg\u003d\"foo_value\")"},{"line_number":186,"context_line":"        self.assertEqual(ip, {\"ip\": \"foo_ip\", \"id\": \"foo_id\","},{"line_number":187,"context_line":"                              \"is_floating\": True})"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_6ee1519a","line":184,"updated":"2016-02-02 15:22:00.000000000","message":"We still need to test _boot_server_with_fip() without a floating_ip_address specified to ensure that it works as well. I.e., this test case should be added, not modified. This is a great use case for DDT.","commit_id":"e58643dc1c96f7c576a2c1225bb7d995a91bf37e"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"032ee639575c535e3a8e35dfe931cf41069ed547","unresolved":false,"context_lines":[{"line_number":181,"context_line":"            return_value\u003d{\"id\": \"foo_id\", \"ip\": \"foo_ip\"})"},{"line_number":182,"context_line":"        server, ip \u003d scenario._boot_server_with_fip("},{"line_number":183,"context_line":"            \"foo_image\", \"foo_flavor\", floating_network\u003d\"ext_network\","},{"line_number":184,"context_line":"            floating_ip_address\u003d\"192.168.0.250\","},{"line_number":185,"context_line":"            use_floating_ip\u003dTrue, foo_arg\u003d\"foo_value\")"},{"line_number":186,"context_line":"        self.assertEqual(ip, {\"ip\": \"foo_ip\", \"id\": \"foo_id\","},{"line_number":187,"context_line":"                              \"is_floating\": True})"}],"source_content_type":"text/x-python","patch_set":8,"id":"1af94dfe_97e725ab","line":184,"in_reply_to":"7a5de9d1_6ee1519a","updated":"2016-03-18 19:43:20.000000000","message":"I can add that.","commit_id":"e58643dc1c96f7c576a2c1225bb7d995a91bf37e"},{"author":{"_account_id":11748,"name":"Chris St. Pierre","email":"cstpierr@cisco.com","username":"stpierre"},"change_message_id":"986669ebfe48c2767be095f86761b68998d3bb46","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        scenario._attach_floating_ip("},{"line_number":222,"context_line":"            server, floating_network\u003d\"bar_network\","},{"line_number":223,"context_line":"            floating_ip_address\u003d\"192.168.0.250\")"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"        mock_wrap.assert_called_once_with(scenario.clients, scenario)"},{"line_number":226,"context_line":"        netwrap.create_floating_ip.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":8,"id":"7a5de9d1_cee645b0","line":223,"updated":"2016-02-02 15:22:00.000000000","message":"Same here.","commit_id":"e58643dc1c96f7c576a2c1225bb7d995a91bf37e"}],"tests/unit/task/test_validation.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"34e31265d6654a789b443e2d12769d0e2119959b","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        result \u003d validator({\"args\": {\"name\": \"custom\"}}, clients, None)"},{"line_number":522,"context_line":"        self.assertTrue(result.is_valid, result.msg)"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    def test_fip_without_concurrency(self):"},{"line_number":525,"context_line":"        validator \u003d self._unwrap_validator("},{"line_number":526,"context_line":"            validation.fip_without_concurrency, \"fip\")"},{"line_number":527,"context_line":"        result \u003d validator({\"args\": {}}, None, None)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a1b2928_3a46c023","line":524,"updated":"2016-04-11 13:03:56.000000000","message":"DDT seems to be the best approach for this test","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"ac60dc6896419eb92cc875d56fcfaafddc83bf85","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        result \u003d validator({\"args\": {\"name\": \"custom\"}}, clients, None)"},{"line_number":522,"context_line":"        self.assertTrue(result.is_valid, result.msg)"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"    def test_fip_without_concurrency(self):"},{"line_number":525,"context_line":"        validator \u003d self._unwrap_validator("},{"line_number":526,"context_line":"            validation.fip_without_concurrency, \"fip\")"},{"line_number":527,"context_line":"        result \u003d validator({\"args\": {}}, None, None)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a122d0e_e29301f9","line":524,"in_reply_to":"7a1b2928_3a46c023","updated":"2016-04-15 20:24:50.000000000","message":"Done","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"},{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"34e31265d6654a789b443e2d12769d0e2119959b","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                                       \"concurrency\": 2}}, None, None)"},{"line_number":541,"context_line":"        self.assertFalse(result.is_valid, result.msg)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def test_is_valid_ip_address(self):"},{"line_number":544,"context_line":"        result \u003d validation._is_valid_ip_address(\"\")"},{"line_number":545,"context_line":"        self.assertFalse(result)"},{"line_number":546,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a1b2928_da034cb7","line":543,"updated":"2016-04-11 13:03:56.000000000","message":"Please consider about DDT. Also please check for _is_valid_ip_address(None)","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"},{"author":{"_account_id":15371,"name":"Tom Patzig","email":"tom.patzig@sap.com","username":"tpatzig"},"change_message_id":"ac60dc6896419eb92cc875d56fcfaafddc83bf85","unresolved":false,"context_lines":[{"line_number":540,"context_line":"                                       \"concurrency\": 2}}, None, None)"},{"line_number":541,"context_line":"        self.assertFalse(result.is_valid, result.msg)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def test_is_valid_ip_address(self):"},{"line_number":544,"context_line":"        result \u003d validation._is_valid_ip_address(\"\")"},{"line_number":545,"context_line":"        self.assertFalse(result)"},{"line_number":546,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1a122d0e_62b6d18b","line":543,"in_reply_to":"7a1b2928_da034cb7","updated":"2016-04-15 20:24:50.000000000","message":"Done","commit_id":"b2a91b4d60b7ff9ddf0abdef198075e8624741c6"}]}
