)]}'
{"rally/deployment/serverprovider/providers/openstack.py":[{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"b302b236919be1542424a3364bf25215049c66e1","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            region_name\u003dconfig.get(\"region\"))"},{"line_number":145,"context_line":"        clients \u003d osclients.Clients(user_credential)"},{"line_number":146,"context_line":"        self.nova \u003d clients.nova()"},{"line_number":147,"context_line":"        self.sg \u003d None"},{"line_number":148,"context_line":"        try:"},{"line_number":149,"context_line":"            self.glance \u003d clients.glance()"},{"line_number":150,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_2704bc15","line":147,"range":{"start_line":147,"start_character":18,"end_line":147,"end_character":22},"updated":"2015-12-23 15:00:39.000000000","message":"Also is it good decision to store security groups in class variable. As I understand in 237 and 276 lines we can get security group through self.nova","commit_id":"baa49bac40ab30c54a2da0048e383eb3e6c1d694"},{"author":{"_account_id":4428,"name":"Liyingjun","email":"yinjalee@163.com","username":"liyingjun"},"change_message_id":"4de0a8c8cbf45708fd5c4ed367b11975a9eeeb13","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def create_security_group_and_rules(self):"},{"line_number":211,"context_line":"        sec_group_name \u003d self.config.get(\"secgroup_name\","},{"line_number":212,"context_line":"                                         \"rally_secutity_group\")"},{"line_number":213,"context_line":"        rule_params \u003d {"},{"line_number":214,"context_line":"            \"cidr\": \"0.0.0.0\","},{"line_number":215,"context_line":"            \"from_port\": 0,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_92e29ed4","line":212,"range":{"start_line":212,"start_character":41,"end_line":212,"end_character":42},"updated":"2015-12-23 08:24:08.000000000","message":"IMO, you should use generate_random_name() here for sec_group_name.","commit_id":"baa49bac40ab30c54a2da0048e383eb3e6c1d694"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"214b1f305ff7ac212098a549cd2e5469542f4f9d","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def create_security_group_and_rules(self):"},{"line_number":211,"context_line":"        sec_group_name \u003d self.config.get(\"secgroup_name\","},{"line_number":212,"context_line":"                                         \"rally_secutity_group\")"},{"line_number":213,"context_line":"        rule_params \u003d {"},{"line_number":214,"context_line":"            \"cidr\": \"0.0.0.0\","},{"line_number":215,"context_line":"            \"from_port\": 0,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_1d99d26e","line":212,"range":{"start_line":212,"start_character":42,"end_line":212,"end_character":62},"updated":"2015-12-23 14:42:57.000000000","message":"typo here. secutity-\u003e security","commit_id":"baa49bac40ab30c54a2da0048e383eb3e6c1d694"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"e3b82ff22e17dc0b36c09759429a83be367b48b5","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def create_security_group_and_rules(self):"},{"line_number":211,"context_line":"        sec_group_name \u003d self.config.get(\"secgroup_name\","},{"line_number":212,"context_line":"                                         \"rally_secutity_group\")"},{"line_number":213,"context_line":"        rule_params \u003d {"},{"line_number":214,"context_line":"            \"cidr\": \"0.0.0.0\","},{"line_number":215,"context_line":"            \"from_port\": 0,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_dd54aa55","line":212,"range":{"start_line":212,"start_character":41,"end_line":212,"end_character":42},"in_reply_to":"1a7b0d38_92e29ed4","updated":"2015-12-23 13:57:42.000000000","message":"Not sure.\nCause this neither scenario nor context and name has to be comprehensive. This name displayed in Horison and cli.\nAlso, there is ability to set this name in deployment contfig json and there is no automatic cleanups for deployments.","commit_id":"baa49bac40ab30c54a2da0048e383eb3e6c1d694"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"21c2783cd4e84bf3e25868dce9b9b9d3c7df6d34","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                         \"rally_secutity_group\")"},{"line_number":213,"context_line":"        rule_params \u003d {"},{"line_number":214,"context_line":"            \"cidr\": \"0.0.0.0\","},{"line_number":215,"context_line":"            \"from_port\": 0,"},{"line_number":216,"context_line":"            \"to_port\": 0,"},{"line_number":217,"context_line":"            \"ip_protocol\": \"tcp\""},{"line_number":218,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_a75f4c71","line":215,"range":{"start_line":215,"start_character":13,"end_line":215,"end_character":22},"updated":"2015-12-23 14:54:00.000000000","message":"In bug description was wrote that we need to allow 80 port. In this manual http://docs.openstack.org/openstack-ops/content/security_groups.html they use in 215-216 lines 80th port. Does zero here is right value?","commit_id":"baa49bac40ab30c54a2da0048e383eb3e6c1d694"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"6f11f75c82c0e6128a46fe6865123253f7531fad","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                                         \"rally_secutity_group\")"},{"line_number":213,"context_line":"        rule_params \u003d {"},{"line_number":214,"context_line":"            \"cidr\": \"0.0.0.0\","},{"line_number":215,"context_line":"            \"from_port\": 0,"},{"line_number":216,"context_line":"            \"to_port\": 0,"},{"line_number":217,"context_line":"            \"ip_protocol\": \"tcp\""},{"line_number":218,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_aba8f377","line":215,"range":{"start_line":215,"start_character":13,"end_line":215,"end_character":22},"in_reply_to":"1a7b0d38_a75f4c71","updated":"2015-12-29 14:49:22.000000000","message":"Yes. 0 \u003d\u003d right value.\nBecause of running Rally outside of OpenStack (which instance contains Devstack that we going to load) requires to open all\nports of all OpenStack services, SSH and other.\nOnly 80-th port is not enough.","commit_id":"baa49bac40ab30c54a2da0048e383eb3e6c1d694"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"214b1f305ff7ac212098a549cd2e5469542f4f9d","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        }"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        self.sg \u003d self.nova.security_groups.create(sec_group_name,"},{"line_number":221,"context_line":"                                                   sec_group_name)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        self.nova.security_group_rules.create("},{"line_number":224,"context_line":"            self.sg.id, **rule_params)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_9d4e22c0","line":221,"range":{"start_line":221,"start_character":51,"end_line":221,"end_character":65},"updated":"2015-12-23 14:42:57.000000000","message":"Do we need to get description of security group from config?","commit_id":"baa49bac40ab30c54a2da0048e383eb3e6c1d694"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"6f11f75c82c0e6128a46fe6865123253f7531fad","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        }"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"        self.sg \u003d self.nova.security_groups.create(sec_group_name,"},{"line_number":221,"context_line":"                                                   sec_group_name)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"        self.nova.security_group_rules.create("},{"line_number":224,"context_line":"            self.sg.id, **rule_params)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_cbdd3fe1","line":221,"range":{"start_line":221,"start_character":51,"end_line":221,"end_character":65},"in_reply_to":"1a7b0d38_9d4e22c0","updated":"2015-12-29 14:49:22.000000000","message":"because of positional arguments of \u0027create\u0027 method (https://github.com/openstack/python-novaclient/blob/master/novaclient/v2/security_groups.py#L40) we have to provide some description. Do we need to complicate this code with getting description from config... my opinion is \"we don\u0027t\"","commit_id":"baa49bac40ab30c54a2da0048e383eb3e6c1d694"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"214b1f305ff7ac212098a549cd2e5469542f4f9d","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        keypair, public_key_path \u003d self.create_keypair()"},{"line_number":235,"context_line":"        self.create_security_group_and_rules()"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        sg_args \u003d {\"security_groups\": [self.sg.id]} if self.sg else {}"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        os_servers \u003d []"},{"line_number":240,"context_line":"        for i in range(self.config.get(\"amount\", 1)):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_81356047","line":237,"range":{"start_line":237,"start_character":20,"end_line":237,"end_character":35},"updated":"2015-12-23 14:42:57.000000000","message":"Here is write that we need to pass names of the security groups. Therefore raised a question. Are those names should be unique?","commit_id":"baa49bac40ab30c54a2da0048e383eb3e6c1d694"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"6f11f75c82c0e6128a46fe6865123253f7531fad","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        keypair, public_key_path \u003d self.create_keypair()"},{"line_number":235,"context_line":"        self.create_security_group_and_rules()"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"        sg_args \u003d {\"security_groups\": [self.sg.id]} if self.sg else {}"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        os_servers \u003d []"},{"line_number":240,"context_line":"        for i in range(self.config.get(\"amount\", 1)):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_abf79357","line":237,"range":{"start_line":237,"start_character":20,"end_line":237,"end_character":35},"in_reply_to":"1a7b0d38_81356047","updated":"2015-12-29 14:49:22.000000000","message":"yes.","commit_id":"baa49bac40ab30c54a2da0048e383eb3e6c1d694"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"4600645734d618112f68751584c6594d7fd5187c","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            region_name\u003dconfig.get(\"region\"))"},{"line_number":145,"context_line":"        clients \u003d osclients.Clients(user_credential)"},{"line_number":146,"context_line":"        self.nova \u003d clients.nova()"},{"line_number":147,"context_line":"        self.sg \u003d None"},{"line_number":148,"context_line":"        try:"},{"line_number":149,"context_line":"            self.glance \u003d clients.glance()"},{"line_number":150,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_1ef20270","line":147,"updated":"2015-12-24 15:22:34.000000000","message":"You told me that we can\u0027t get security groups through self.nova but we can use list https://github.com/openstack/python-novaclient/blob/master/novaclient/v2/security_groups.py#L83","commit_id":"9c2ab51e6bbed5bb4a860aaf6a2d7b79ad704a6f"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"742e8bd4ee4a6c5e27b0073ed73169cc9ec2df10","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            region_name\u003dconfig.get(\"region\"))"},{"line_number":145,"context_line":"        clients \u003d osclients.Clients(user_credential)"},{"line_number":146,"context_line":"        self.nova \u003d clients.nova()"},{"line_number":147,"context_line":"        self.sg \u003d None"},{"line_number":148,"context_line":"        try:"},{"line_number":149,"context_line":"            self.glance \u003d clients.glance()"},{"line_number":150,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_e13e7bd9","line":147,"in_reply_to":"1a7b0d38_1ef20270","updated":"2015-12-24 15:43:24.000000000","message":"Please, look at L212","commit_id":"9c2ab51e6bbed5bb4a860aaf6a2d7b79ad704a6f"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"4600645734d618112f68751584c6594d7fd5187c","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        return self.config.get(\"nics\", None)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def get_security_group_id(self):"},{"line_number":211,"context_line":"        sg_name \u003d self.config.get(\"secgroup_name\", \"rally_security_group\")"},{"line_number":212,"context_line":"        result \u003d self.nova.security_groups.list(serch_opts\u003d{\"name\": sg_name})"},{"line_number":213,"context_line":"        return result[0].id if result and len(result) \u003d\u003d 1 else None"},{"line_number":214,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_fe885624","line":211,"updated":"2015-12-24 15:22:34.000000000","message":"Its bad to get name of the groups from config inside this function. We need to pass the name through arguments to make this method reusable and reasonable. Why not to make this self._get_security_group_by_name(self, name): ?","commit_id":"9c2ab51e6bbed5bb4a860aaf6a2d7b79ad704a6f"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"742e8bd4ee4a6c5e27b0073ed73169cc9ec2df10","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def get_security_group_id(self):"},{"line_number":211,"context_line":"        sg_name \u003d self.config.get(\"secgroup_name\", \"rally_security_group\")"},{"line_number":212,"context_line":"        result \u003d self.nova.security_groups.list(serch_opts\u003d{\"name\": sg_name})"},{"line_number":213,"context_line":"        return result[0].id if result and len(result) \u003d\u003d 1 else None"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def create_security_group_and_rules(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_34635fde","line":212,"updated":"2015-12-24 15:43:24.000000000","message":"I was going to reimplemet this way.\nBut thanks.","commit_id":"9c2ab51e6bbed5bb4a860aaf6a2d7b79ad704a6f"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"4600645734d618112f68751584c6594d7fd5187c","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def create_security_group_and_rules(self):"},{"line_number":216,"context_line":"        sec_group_name \u003d self.config.get(\"secgroup_name\","},{"line_number":217,"context_line":"                                         \"rally_secutity_group\")"},{"line_number":218,"context_line":"        rule_params \u003d {"},{"line_number":219,"context_line":"            \"cidr\": \"0.0.0.0\","},{"line_number":220,"context_line":"            \"from_port\": 0,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_b14c4b43","line":217,"range":{"start_line":217,"start_character":42,"end_line":217,"end_character":62},"updated":"2015-12-24 15:22:34.000000000","message":"You forgot to fix typo.","commit_id":"9c2ab51e6bbed5bb4a860aaf6a2d7b79ad704a6f"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"742e8bd4ee4a6c5e27b0073ed73169cc9ec2df10","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    def create_security_group_and_rules(self):"},{"line_number":216,"context_line":"        sec_group_name \u003d self.config.get(\"secgroup_name\","},{"line_number":217,"context_line":"                                         \"rally_secutity_group\")"},{"line_number":218,"context_line":"        rule_params \u003d {"},{"line_number":219,"context_line":"            \"cidr\": \"0.0.0.0\","},{"line_number":220,"context_line":"            \"from_port\": 0,"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_a15ab34e","line":217,"range":{"start_line":217,"start_character":42,"end_line":217,"end_character":62},"in_reply_to":"1a7b0d38_b14c4b43","updated":"2015-12-24 15:43:24.000000000","message":"Ok, will do. Thanks.","commit_id":"9c2ab51e6bbed5bb4a860aaf6a2d7b79ad704a6f"},{"author":{"_account_id":12395,"name":"Roman Vasylets","email":"pomeo92@gmail.com","username":"rvasilets"},"change_message_id":"4600645734d618112f68751584c6594d7fd5187c","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        return servers"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def delete_security_group(self):"},{"line_number":281,"context_line":"        sg \u003d self.get_security_group_id()"},{"line_number":282,"context_line":"        if sg is not None:"},{"line_number":283,"context_line":"            self.nova.security_groups.delete(sg.id)"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_9ef592cc","line":281,"updated":"2015-12-24 15:22:34.000000000","message":"Also strange to see this. You call function with name get_security_group_id. So I expect to get id. But in a few lines you take id from id? O_O","commit_id":"9c2ab51e6bbed5bb4a860aaf6a2d7b79ad704a6f"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"742e8bd4ee4a6c5e27b0073ed73169cc9ec2df10","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        return servers"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def delete_security_group(self):"},{"line_number":281,"context_line":"        sg \u003d self.get_security_group_id()"},{"line_number":282,"context_line":"        if sg is not None:"},{"line_number":283,"context_line":"            self.nova.security_groups.delete(sg.id)"},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1a7b0d38_d47f7b64","line":281,"in_reply_to":"1a7b0d38_9ef592cc","updated":"2015-12-24 15:43:24.000000000","message":"My mistake.","commit_id":"9c2ab51e6bbed5bb4a860aaf6a2d7b79ad704a6f"}],"tests/unit/deployment/serverprovider/providers/test_openstack.py":[{"author":{"_account_id":10475,"name":"Alexander Maretskiy","email":"amaretskiy@mirantis.com","username":"maretskiy"},"change_message_id":"a70a3c5b8cb18ee230d7ffe92166da493a43e4c9","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            \"rally-dep-1-0\", \"fake_image_uuid\", \"22\", userdata\u003d\"fake_userdata\","},{"line_number":229,"context_line":"            nics\u003d\"fake_nics\", key_name\u003d\"fake_key_name\", config_drive\u003dFalse,"},{"line_number":230,"context_line":"            security_groups\u003d[provider.sg.id])"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"    @mock.patch(MOD_NAME + \".osclients\")"},{"line_number":233,"context_line":"    def test_get_image_found_by_checksum(self, mock_osclients):"},{"line_number":234,"context_line":"        self._init_mock_clients()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a7b0d38_4adc6de4","line":231,"updated":"2015-12-23 15:22:48.000000000","message":"Please add test_create_security_group_and_rules()","commit_id":"baa49bac40ab30c54a2da0048e383eb3e6c1d694"}]}
