)]}'
{"tempest/common/compute.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b115f5a8b09757f84b922f79d79cb822f2f8872f","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # The test_cross_tenant_traffic scenario test uses 2 tenants and"},{"line_number":52,"context_line":"    # therefore sets up 2 different server client contexts. To avoid"},{"line_number":53,"context_line":"    # messing up with the client manager passed on to this method:"},{"line_number":54,"context_line":"    if \u0027servers_client\u0027 in kwargs:"},{"line_number":55,"context_line":"        servers_client \u003d kwargs.pop(\u0027servers_client\u0027)"},{"line_number":56,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_2346f4bf","line":53,"updated":"2015-12-01 09:50:37.000000000","message":"I fear I don\u0027t get this. The create_test_server already accepts the client manager as input, which include all clients.\nTo create a server for any specific tenant, it should be enough to pass the client manager for that tenant.","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"c37a78cc313b1aaac79b3db01d3a82a1b66863ec","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # The test_cross_tenant_traffic scenario test uses 2 tenants and"},{"line_number":52,"context_line":"    # therefore sets up 2 different server client contexts. To avoid"},{"line_number":53,"context_line":"    # messing up with the client manager passed on to this method:"},{"line_number":54,"context_line":"    if \u0027servers_client\u0027 in kwargs:"},{"line_number":55,"context_line":"        servers_client \u003d kwargs.pop(\u0027servers_client\u0027)"},{"line_number":56,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_732033f8","line":53,"in_reply_to":"9a8ffd7b_2346f4bf","updated":"2015-12-01 15:59:35.000000000","message":"Done","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b115f5a8b09757f84b922f79d79cb822f2f8872f","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    if volume_backed:"},{"line_number":99,"context_line":"        volume_name \u003d data_utils.rand_name(\u0027volume\u0027)"},{"line_number":100,"context_line":"        volumes_client \u003d clients.volumes_v2_client"},{"line_number":101,"context_line":"        if CONF.volume_feature_enabled.api_v1:"},{"line_number":102,"context_line":"            volumes_client \u003d clients.volumes_client"},{"line_number":103,"context_line":"        volume \u003d volumes_client.create_volume("}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_c35fe873","line":100,"updated":"2015-12-01 09:50:37.000000000","message":"This won\u0027t work in the server client for a different tenant is passed, because the volume will be owned by a tenant different from the one we want to use to create the server.","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"c37a78cc313b1aaac79b3db01d3a82a1b66863ec","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    if volume_backed:"},{"line_number":99,"context_line":"        volume_name \u003d data_utils.rand_name(\u0027volume\u0027)"},{"line_number":100,"context_line":"        volumes_client \u003d clients.volumes_v2_client"},{"line_number":101,"context_line":"        if CONF.volume_feature_enabled.api_v1:"},{"line_number":102,"context_line":"            volumes_client \u003d clients.volumes_client"},{"line_number":103,"context_line":"        volume \u003d volumes_client.create_volume("}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_d368ff23","line":100,"in_reply_to":"9a8ffd7b_c35fe873","updated":"2015-12-01 15:59:35.000000000","message":"Done","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"}],"tempest/scenario/manager.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        return body[\u0027keypair\u0027]"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def create_server(self, name\u003dNone, image\u003dNone, flavor\u003dNone,"},{"line_number":160,"context_line":"                      wait_on_boot\u003dTrue, wait_on_delete\u003dTrue,"},{"line_number":161,"context_line":"                      create_kwargs\u003dNone):"},{"line_number":162,"context_line":"        \"\"\"Creates VM instance."},{"line_number":163,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_3624fdad","side":"PARENT","line":160,"updated":"2015-11-16 22:50:27.000000000","message":"Unless I\u0027m missing something, you\u0027re loosing functionality and changing the tests by dropping wait_on_boot","commit_id":"ce4c6f2982a5d0e8715a85777db03811a6bb3fcc"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":202,"context_line":"        # details, necessitating retrieval after it becomes active to"},{"line_number":203,"context_line":"        # ensure correct details."},{"line_number":204,"context_line":"        server \u003d self.servers_client.show_server(server[\u0027id\u0027])[\u0027server\u0027]"},{"line_number":205,"context_line":"        self.assertEqual(server[\u0027name\u0027], name)"},{"line_number":206,"context_line":"        return server"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def create_volume(self, size\u003dNone, name\u003dNone, snapshot_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_d6e6d115","side":"PARENT","line":205,"updated":"2015-11-16 22:50:27.000000000","message":"I guess it\u0027s fine to drop this, this is something more for API tests to verify. I\u0027m still a bit unhappy about dropping an assertion, but it should be fine.","commit_id":"ce4c6f2982a5d0e8715a85777db03811a6bb3fcc"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":1188,"context_line":"            self.ports \u003d ports"},{"line_number":1189,"context_line":""},{"line_number":1190,"context_line":"        return super(NetworkScenarioTest, self).create_server("},{"line_number":1191,"context_line":"            name\u003dname, image\u003dimage, flavor\u003dflavor,"},{"line_number":1192,"context_line":"            wait_on_boot\u003dwait_on_boot, wait_on_delete\u003dwait_on_delete,"},{"line_number":1193,"context_line":"            create_kwargs\u003dcreate_kwargs)"},{"line_number":1194,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_d6d011fa","side":"PARENT","line":1191,"updated":"2015-11-16 22:50:27.000000000","message":"Why do you stop passing image and flavor through?","commit_id":"ce4c6f2982a5d0e8715a85777db03811a6bb3fcc"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":1318,"context_line":"            \u0027key_name\u0027: self.keypair[\u0027name\u0027]"},{"line_number":1319,"context_line":"        }"},{"line_number":1320,"context_line":"        self.instance \u003d self.create_server("},{"line_number":1321,"context_line":"            wait_on_boot\u003dFalse, create_kwargs\u003dcreate_kwargs)"},{"line_number":1322,"context_line":""},{"line_number":1323,"context_line":"        self.wait_node(self.instance[\u0027id\u0027])"},{"line_number":1324,"context_line":"        self.node \u003d self.get_node(instance_id\u003dself.instance[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba8a016a_e617a6eb","side":"PARENT","line":1321,"updated":"2015-11-16 22:50:27.000000000","message":"I\u0027m not sure it\u0027s ok to lose this","commit_id":"ce4c6f2982a5d0e8715a85777db03811a6bb3fcc"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":1372,"context_line":""},{"line_number":1373,"context_line":"    def nova_boot(self):"},{"line_number":1374,"context_line":"        self.keypair \u003d self.create_keypair()"},{"line_number":1375,"context_line":"        create_kwargs \u003d {\u0027key_name\u0027: self.keypair[\u0027name\u0027]}"},{"line_number":1376,"context_line":"        self.server \u003d self.create_server(image\u003dself.image,"},{"line_number":1377,"context_line":"                                         create_kwargs\u003dcreate_kwargs)"},{"line_number":1378,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_96e4c9ac","side":"PARENT","line":1375,"updated":"2015-11-16 22:50:27.000000000","message":"Why stopping to pass the image ref?","commit_id":"ce4c6f2982a5d0e8715a85777db03811a6bb3fcc"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        return body[\u0027keypair\u0027]"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def create_server(self, validatable\u003dFalse, wait_on_delete\u003dTrue,"},{"line_number":160,"context_line":"                      create_kwargs\u003dNone):"},{"line_number":161,"context_line":"        \"\"\"Wrapper utility that returns a test server."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        This wrapper utility calls the common create test server and"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba8a016a_6965c643","line":160,"updated":"2015-11-16 22:50:27.000000000","message":"I think it would be nicer to have the standard **kwargs here, so we don\u0027t need to pre-create a dict of params every time we want to invoke the test,\nI don\u0027t see the advantage of doing that.","commit_id":"70dc1c210af2d3416e53b2e6469431f0ba070a02"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        # servers_client is updated in the test but needs to be updated"},{"line_number":187,"context_line":"        # here as well as the whole client manager needs to be passed"},{"line_number":188,"context_line":"        # on."},{"line_number":189,"context_line":"        self.manager.servers_client \u003d self.servers_client"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        body, servers \u003d compute.create_test_server("},{"line_number":192,"context_line":"            self.manager,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_360ddd37","line":189,"updated":"2015-11-16 22:50:27.000000000","message":"Hacking into the manager is pretty bad, as it might have unforeseen side effects. The create_test_server function already accepts the client manager as a parameter, so the issue is in the test_cross_tenant_traffic that sets the client to be used on the class instead of passing into the create server function.","commit_id":"70dc1c210af2d3416e53b2e6469431f0ba070a02"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        body, servers \u003d compute.create_test_server("},{"line_number":192,"context_line":"            self.manager,"},{"line_number":193,"context_line":"            tenant_network\u003dtenant_network,"},{"line_number":194,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":195,"context_line":"            **create_kwargs)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        if wait_on_delete:"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_16c9b9ac","line":194,"updated":"2015-11-16 22:50:27.000000000","message":"The baremetal scenario tests  use wait_on_boot\u003dFalse, and here you force wait_until ACTIVE. Is there a specific reason for wanting to enforce this?","commit_id":"70dc1c210af2d3416e53b2e6469431f0ba070a02"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":194,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":195,"context_line":"            **create_kwargs)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        if wait_on_delete:"},{"line_number":198,"context_line":"            self.addCleanup(waiters.wait_for_server_termination,"},{"line_number":199,"context_line":"                            self.servers_client,"},{"line_number":200,"context_line":"                            body[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_365e3d77","line":197,"updated":"2015-11-16 22:50:27.000000000","message":"I guess this is fine for a first pass, but eventually it would be good to get this kind of functionality up in the shared create_server rather than hosting it in the wrapper. Ideally the wrapper should not do anything more than setting some values on parameters before invoking the common create server.","commit_id":"70dc1c210af2d3416e53b2e6469431f0ba070a02"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":1130,"context_line":"            subnet.add_to_router(router.id)"},{"line_number":1131,"context_line":"        return network, subnet, router"},{"line_number":1132,"context_line":""},{"line_number":1133,"context_line":"    def create_server(self, name\u003dNone, image\u003dNone, flavor\u003dNone,"},{"line_number":1134,"context_line":"                      wait_on_boot\u003dTrue, wait_on_delete\u003dTrue,"},{"line_number":1135,"context_line":"                      network_client\u003dNone, networks_client\u003dNone,"},{"line_number":1136,"context_line":"                      ports_client\u003dNone, create_kwargs\u003dNone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba8a016a_662bb631","line":1133,"updated":"2015-11-16 22:50:27.000000000","message":"Ditto, I guess in this first pass it\u0027s ok to have a large wrapper, but the idea is to get as much as possible of this into the shared method.","commit_id":"70dc1c210af2d3416e53b2e6469431f0ba070a02"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":1371,"context_line":"        self.status_timeout("},{"line_number":1372,"context_line":"            self.volume_client.volumes, self.volume.id, status)"},{"line_number":1373,"context_line":""},{"line_number":1374,"context_line":"    def nova_boot(self):"},{"line_number":1375,"context_line":"        self.keypair \u003d self.create_keypair()"},{"line_number":1376,"context_line":"        create_kwargs \u003d {\u0027key_name\u0027: self.keypair[\u0027name\u0027]}"},{"line_number":1377,"context_line":"        self.server \u003d self.create_server("}],"source_content_type":"text/x-python","patch_set":11,"id":"ba8a016a_c6c86277","line":1374,"updated":"2015-11-16 22:50:27.000000000","message":"What does this wrapper add to the standard validation approach?","commit_id":"70dc1c210af2d3416e53b2e6469431f0ba070a02"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d0d03d99f4de886b1ed813b6f0d0aa3bdb54dbaa","unresolved":false,"context_lines":[{"line_number":1373,"context_line":"        self.status_timeout("},{"line_number":1374,"context_line":"            self.volume_client.volumes, self.volume.id, status)"},{"line_number":1375,"context_line":""},{"line_number":1376,"context_line":"    def nova_boot(self):"},{"line_number":1377,"context_line":"        self.keypair \u003d self.create_keypair()"},{"line_number":1378,"context_line":"        create_kwargs \u003d {\u0027key_name\u0027: self.keypair[\u0027name\u0027]}"},{"line_number":1379,"context_line":"        self.server \u003d self.create_server(image\u003dself.image,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a8ffd7b_0def4d88","side":"PARENT","line":1376,"updated":"2015-11-25 11:40:59.000000000","message":"I already removed this line https://review.openstack.org/#/c/248136/1/tempest/scenario/manager.py,cm\n\nI am not sure this removal should be done in your patch.","commit_id":"bf19dd1032330713f8cdefc4a32b7a2268b71921"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"5d76fd8fa1afef17c31a64b41ba85bb049fd995b","unresolved":false,"context_lines":[{"line_number":1373,"context_line":"        self.status_timeout("},{"line_number":1374,"context_line":"            self.volume_client.volumes, self.volume.id, status)"},{"line_number":1375,"context_line":""},{"line_number":1376,"context_line":"    def nova_boot(self):"},{"line_number":1377,"context_line":"        self.keypair \u003d self.create_keypair()"},{"line_number":1378,"context_line":"        create_kwargs \u003d {\u0027key_name\u0027: self.keypair[\u0027name\u0027]}"},{"line_number":1379,"context_line":"        self.server \u003d self.create_server(image\u003dself.image,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a8ffd7b_30be26d5","side":"PARENT","line":1376,"in_reply_to":"9a8ffd7b_0def4d88","updated":"2015-11-25 11:53:09.000000000","message":"Yes, I\u0027ve seen your change. But this is part of using a single common method.","commit_id":"bf19dd1032330713f8cdefc4a32b7a2268b71921"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d0d03d99f4de886b1ed813b6f0d0aa3bdb54dbaa","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        tenant_network \u003d self.get_tenant_network()"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        self.manager.servers_client \u003d self.servers_client"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        body, servers \u003d compute.create_test_server("},{"line_number":241,"context_line":"            self.manager,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a8ffd7b_6d1cd9c1","line":238,"range":{"start_line":238,"start_character":16,"end_line":238,"end_character":25},"updated":"2015-11-25 11:40:59.000000000","message":"I don\"t understand this line. It feels tricky with unwanted side effects. Could you try to remove it :) Or leave a code comment.","commit_id":"162872842a22a14ac4272e69ad4d0be1944808cb"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"5d76fd8fa1afef17c31a64b41ba85bb049fd995b","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        tenant_network \u003d self.get_tenant_network()"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"        self.manager.servers_client \u003d self.servers_client"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        body, servers \u003d compute.create_test_server("},{"line_number":241,"context_line":"            self.manager,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a8ffd7b_f0ae5e97","line":238,"range":{"start_line":238,"start_character":16,"end_line":238,"end_character":25},"in_reply_to":"9a8ffd7b_6d1cd9c1","updated":"2015-11-25 11:53:09.000000000","message":"My bad. This should have been removed.","commit_id":"162872842a22a14ac4272e69ad4d0be1944808cb"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"bdf4a3a053c8e57904cb4c55c1ca3f0086038de0","unresolved":false,"context_lines":[{"line_number":240,"context_line":"            tenant_network\u003dtenant_network,"},{"line_number":241,"context_line":"            wait_until\u003dwait_until,"},{"line_number":242,"context_line":"            **kwargs)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        # TODO(jlanoux) Move wait_on_delete in compute.py"},{"line_number":245,"context_line":"        if wait_on_delete:"},{"line_number":246,"context_line":"            self.addCleanup(waiters.wait_for_server_termination,"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a8ffd7b_5b689487","line":243,"updated":"2015-11-25 17:11:00.000000000","message":"We used to log \"Creating a server (name: %s, image: % ...\" Why not anymore ?","commit_id":"3ce8a7a286f52c3c55860ce1ce83566bc4621c3e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b115f5a8b09757f84b922f79d79cb822f2f8872f","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def create_server(self, name\u003dNone, image\u003dNone, flavor\u003dNone,"},{"line_number":161,"context_line":"                      validatable\u003dFalse, wait_until\u003dNone,"},{"line_number":162,"context_line":"                      network_client\u003dNone, networks_client\u003dNone,"},{"line_number":163,"context_line":"                      ports_client\u003dNone, wait_on_delete\u003dTrue,"},{"line_number":164,"context_line":"                      **kwargs):"},{"line_number":165,"context_line":"        \"\"\"Wrapper utility that returns a test server."}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_51f5fe80","line":162,"updated":"2015-12-01 09:50:37.000000000","message":"Do we really need the extra clients here?","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"c37a78cc313b1aaac79b3db01d3a82a1b66863ec","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def create_server(self, name\u003dNone, image\u003dNone, flavor\u003dNone,"},{"line_number":161,"context_line":"                      validatable\u003dFalse, wait_until\u003dNone,"},{"line_number":162,"context_line":"                      network_client\u003dNone, networks_client\u003dNone,"},{"line_number":163,"context_line":"                      ports_client\u003dNone, wait_on_delete\u003dTrue,"},{"line_number":164,"context_line":"                      **kwargs):"},{"line_number":165,"context_line":"        \"\"\"Wrapper utility that returns a test server."}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_86a8f778","line":162,"in_reply_to":"9a8ffd7b_51f5fe80","updated":"2015-12-01 15:59:35.000000000","message":"Done","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b115f5a8b09757f84b922f79d79cb822f2f8872f","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        function."},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # NOTE(jlanoux): ssh checks in the scenario tests need to be"},{"line_number":174,"context_line":"        # run regardless of the run_validation and validatable"},{"line_number":175,"context_line":"        # parameters. The test resources management and IP association"},{"line_number":176,"context_line":"        # are taken care of in the scenario tests. Therefore, the"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_e6a55ab5","line":173,"updated":"2015-12-01 09:50:37.000000000","message":"It seems to me that this misses the point of having a single way of doing server validation. I guess this is ok as an ad-interim step. \n\nThe target eventually is to have all test validation controlled via the run_validation configuration flag. The reason we cannot do that right away is because that flag is False by default, and validation runs today for scenario tests, and we don\u0027t want to turn it off.\n\nThese tests should use the validation mechanism provided by the validation framework, and hardcode run_validation \u003d True until we can switch it True globally.","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"c37a78cc313b1aaac79b3db01d3a82a1b66863ec","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        function."},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # NOTE(jlanoux): ssh checks in the scenario tests need to be"},{"line_number":174,"context_line":"        # run regardless of the run_validation and validatable"},{"line_number":175,"context_line":"        # parameters. The test resources management and IP association"},{"line_number":176,"context_line":"        # are taken care of in the scenario tests. Therefore, the"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_9ab4c435","line":173,"in_reply_to":"9a8ffd7b_e6a55ab5","updated":"2015-12-01 15:59:35.000000000","message":"I agree. This is just a first step. To hardcode run_validation \u003d True would require more work. One example is that we don\u0027t support multiple validatable servers yet and the cross_tenant_traffic test needs that.\n\nI\u0027ll keep that as a TODO.","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b115f5a8b09757f84b922f79d79cb822f2f8872f","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        # In this way create_server just return a standard server and"},{"line_number":179,"context_line":"        # the scenario tests always perform ssh checks."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if network_client is None:"},{"line_number":182,"context_line":"            network_client \u003d self.network_client"},{"line_number":183,"context_line":"        if networks_client is None:"},{"line_number":184,"context_line":"            networks_client \u003d self.networks_client"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_71afe27d","line":181,"updated":"2015-12-01 09:50:37.000000000","message":"The create_server in common/compute already takes the client manager as an input. If these clients all belong to the same set of credentials, we could just have the manager passed in to the wrapper as well, e.g.\n\nif clients not in kwargs:\n   clients \u003d self.manager","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"c37a78cc313b1aaac79b3db01d3a82a1b66863ec","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        # In this way create_server just return a standard server and"},{"line_number":179,"context_line":"        # the scenario tests always perform ssh checks."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        if network_client is None:"},{"line_number":182,"context_line":"            network_client \u003d self.network_client"},{"line_number":183,"context_line":"        if networks_client is None:"},{"line_number":184,"context_line":"            networks_client \u003d self.networks_client"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_26b6ebdc","line":181,"in_reply_to":"9a8ffd7b_71afe27d","updated":"2015-12-01 15:59:35.000000000","message":"Done","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"}],"tempest/scenario/test_minimum_basic.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        waiters.wait_for_server_status(self.servers_client,"},{"line_number":48,"context_line":"                                       server_id, status)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def nova_boot(self, keypair):"},{"line_number":51,"context_line":"        create_kwargs \u003d {\u0027key_name\u0027: keypair[\u0027name\u0027]}"},{"line_number":52,"context_line":"        self.server \u003d self.create_server("},{"line_number":53,"context_line":"            create_kwargs\u003dcreate_kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba8a016a_a68d1e33","line":50,"updated":"2015-11-16 22:50:27.000000000","message":"Do we still need this extra wrapper? I guess the only special thing was perhaps passing self.image - which is not done anymore. Why is it ok to drop self.image?","commit_id":"70dc1c210af2d3416e53b2e6469431f0ba070a02"}],"tempest/scenario/test_network_basic_ops.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d0d03d99f4de886b1ed813b6f0d0aa3bdb54dbaa","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        keypair \u003d self.create_keypair()"},{"line_number":155,"context_line":"        self.keypairs[keypair[\u0027name\u0027]] \u003d keypair"},{"line_number":156,"context_line":"        security_groups \u003d [{\u0027name\u0027: self.security_group[\u0027name\u0027]}]"},{"line_number":157,"context_line":"        if port_id is not None:"},{"line_number":158,"context_line":"            server \u003d self.create_server("},{"line_number":159,"context_line":"                name\u003dname,"},{"line_number":160,"context_line":"                networks\u003d[{\u0027uuid\u0027: network.id, \u0027port\u0027: port_id}],"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a8ffd7b_cd44e575","line":157,"updated":"2015-11-25 11:40:59.000000000","message":"This looked better before your change. There\u0027s no reason to duplicate common arguments.","commit_id":"162872842a22a14ac4272e69ad4d0be1944808cb"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"5d76fd8fa1afef17c31a64b41ba85bb049fd995b","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        keypair \u003d self.create_keypair()"},{"line_number":155,"context_line":"        self.keypairs[keypair[\u0027name\u0027]] \u003d keypair"},{"line_number":156,"context_line":"        security_groups \u003d [{\u0027name\u0027: self.security_group[\u0027name\u0027]}]"},{"line_number":157,"context_line":"        if port_id is not None:"},{"line_number":158,"context_line":"            server \u003d self.create_server("},{"line_number":159,"context_line":"                name\u003dname,"},{"line_number":160,"context_line":"                networks\u003d[{\u0027uuid\u0027: network.id, \u0027port\u0027: port_id}],"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a8ffd7b_1013e2b9","line":157,"in_reply_to":"9a8ffd7b_cd44e575","updated":"2015-11-25 11:53:09.000000000","message":"I agree it was looking better before. But see Andrea\u0027s comment in manager.py in patchset 11. This is done to avoid the pre-creation of a kwargs dictionary.","commit_id":"162872842a22a14ac4272e69ad4d0be1944808cb"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b115f5a8b09757f84b922f79d79cb822f2f8872f","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        keypair \u003d self.create_keypair()"},{"line_number":156,"context_line":"        self.keypairs[keypair[\u0027name\u0027]] \u003d keypair"},{"line_number":157,"context_line":"        security_groups \u003d [{\u0027name\u0027: self.security_group[\u0027name\u0027]}]"},{"line_number":158,"context_line":"        if port_id is not None:"},{"line_number":159,"context_line":"            server \u003d self.create_server("},{"line_number":160,"context_line":"                name\u003dname,"},{"line_number":161,"context_line":"                networks\u003d[{\u0027uuid\u0027: network.id, \u0027port\u0027: port_id}],"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_e64eba95","line":158,"updated":"2015-12-01 09:50:37.000000000","message":"This works, but it would be nicer if you set different networks depending on port_id, and call the create_server only in one place, e..g\n\nnetwork \u003d {\u0027uuid\u0027: network.id}\nif port_id is not None:\n  network[\u0027port\u0027] \u003d port_id\nserver \u003d self.create_server(name\u003dname, networks\u003d[network], ...","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"c37a78cc313b1aaac79b3db01d3a82a1b66863ec","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        keypair \u003d self.create_keypair()"},{"line_number":156,"context_line":"        self.keypairs[keypair[\u0027name\u0027]] \u003d keypair"},{"line_number":157,"context_line":"        security_groups \u003d [{\u0027name\u0027: self.security_group[\u0027name\u0027]}]"},{"line_number":158,"context_line":"        if port_id is not None:"},{"line_number":159,"context_line":"            server \u003d self.create_server("},{"line_number":160,"context_line":"                name\u003dname,"},{"line_number":161,"context_line":"                networks\u003d[{\u0027uuid\u0027: network.id, \u0027port\u0027: port_id}],"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_7fbeb200","line":158,"in_reply_to":"9a8ffd7b_e64eba95","updated":"2015-12-01 15:59:35.000000000","message":"Done","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"}],"tempest/scenario/test_server_basic_ops.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            \u0027config_drive\u0027: CONF.compute_feature_enabled.config_drive,"},{"line_number":83,"context_line":"            \u0027metadata\u0027: self.md"},{"line_number":84,"context_line":"        }"},{"line_number":85,"context_line":"        self.instance \u003d self.create_server("},{"line_number":86,"context_line":"            create_kwargs\u003dcreate_kwargs)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def verify_ssh(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da85f559_e540f537","line":85,"updated":"2015-11-16 22:50:27.000000000","message":"You should not drop these parameters.\nThis test relies on image and flavour being passed here for the test scenario integration to work, this actually breaks it.","commit_id":"70dc1c210af2d3416e53b2e6469431f0ba070a02"}],"tempest/scenario/test_shelve_instance.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"d0d03d99f4de886b1ed813b6f0d0aa3bdb54dbaa","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":69,"context_line":"                \u0027delete_on_termination\u0027: \u00270\u0027}]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"            server \u003d self.create_server("},{"line_number":72,"context_line":"                key_name\u003dkeypair[\u0027name\u0027],"},{"line_number":73,"context_line":"                security_groups\u003dsecurity_groups,"},{"line_number":74,"context_line":"                block_device_mapping\u003dbd_map,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a8ffd7b_104e826f","line":71,"updated":"2015-11-25 11:40:59.000000000","message":"You should define common kwargs outside of the if/else block to avoid duplication.","commit_id":"162872842a22a14ac4272e69ad4d0be1944808cb"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"5d76fd8fa1afef17c31a64b41ba85bb049fd995b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":69,"context_line":"                \u0027delete_on_termination\u0027: \u00270\u0027}]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"            server \u003d self.create_server("},{"line_number":72,"context_line":"                key_name\u003dkeypair[\u0027name\u0027],"},{"line_number":73,"context_line":"                security_groups\u003dsecurity_groups,"},{"line_number":74,"context_line":"                block_device_mapping\u003dbd_map,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a8ffd7b_f0709ede","line":71,"in_reply_to":"9a8ffd7b_104e826f","updated":"2015-11-25 11:53:09.000000000","message":"Ditto tempest/scenario/test_network_basic_ops.py.","commit_id":"162872842a22a14ac4272e69ad4d0be1944808cb"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b115f5a8b09757f84b922f79d79cb822f2f8872f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":69,"context_line":"                \u0027delete_on_termination\u0027: \u00270\u0027}]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"            server \u003d self.create_server("},{"line_number":72,"context_line":"                key_name\u003dkeypair[\u0027name\u0027],"},{"line_number":73,"context_line":"                security_groups\u003dsecurity_groups,"},{"line_number":74,"context_line":"                block_device_mapping\u003dbd_map,"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_5165fede","line":71,"updated":"2015-12-01 09:50:37.000000000","message":"NIT: it would be nicer to have the create_server call only once, but this is inherited from the existing code, so probably not a relevant change here.","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"},{"author":{"_account_id":10016,"name":"Joseph Lanoux","email":"joseph.lanoux@hpe.com","username":"lanoux"},"change_message_id":"c37a78cc313b1aaac79b3db01d3a82a1b66863ec","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                \u0027volume_id\u0027: volume[\u0027id\u0027],"},{"line_number":69,"context_line":"                \u0027delete_on_termination\u0027: \u00270\u0027}]"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"            server \u003d self.create_server("},{"line_number":72,"context_line":"                key_name\u003dkeypair[\u0027name\u0027],"},{"line_number":73,"context_line":"                security_groups\u003dsecurity_groups,"},{"line_number":74,"context_line":"                block_device_mapping\u003dbd_map,"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a8ffd7b_bfa3ba9d","line":71,"in_reply_to":"9a8ffd7b_5165fede","updated":"2015-12-01 15:59:35.000000000","message":"Ok.","commit_id":"87297068b671197aa25467f6b6911a8b36abdbc4"}],"tempest/scenario/test_snapshot_pattern.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    \"\"\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def _boot_image(self, image_id, keypair, security_group):"},{"line_number":40,"context_line":"        security_groups \u003d [{\u0027name\u0027: security_group[\u0027name\u0027]}]"},{"line_number":41,"context_line":"        create_kwargs \u003d {"},{"line_number":42,"context_line":"            \u0027image_id\u0027: image_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba8a016a_499b22ca","line":39,"updated":"2015-11-16 22:50:27.000000000","message":"Do we need this extra wrapper?","commit_id":"70dc1c210af2d3416e53b2e6469431f0ba070a02"}],"tempest/scenario/test_stamp_pattern.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3107dd86c5bc6c288ee3f92c80fef1d6442b95db","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        self.snapshots_client.wait_for_snapshot_status(volume_snapshot[\u0027id\u0027],"},{"line_number":64,"context_line":"                                                       status)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def _boot_image(self, image_id, keypair, security_group):"},{"line_number":67,"context_line":"        security_groups \u003d [{\u0027name\u0027: security_group[\u0027name\u0027]}]"},{"line_number":68,"context_line":"        create_kwargs \u003d {"},{"line_number":69,"context_line":"            \u0027image_id\u0027: image_id,"}],"source_content_type":"text/x-python","patch_set":11,"id":"ba8a016a_69870662","line":66,"updated":"2015-11-16 22:50:27.000000000","message":"Do we need this extra wrapper?","commit_id":"70dc1c210af2d3416e53b2e6469431f0ba070a02"}]}
