)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"a460e5b894e1b0eff0463c4bcd55b0678610bd4c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rohan Kanade \u003crohan.kanade@izeltech.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-12-10 21:06:03 +0530"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow setting default network for instance spwan"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"* Allow to configure default network uuid used to spawn instances on"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAATn%2F9inc%3D","line":7,"updated":"2013-12-10 12:55:45.000000000","message":"typo: spawn","commit_id":"2b9a88e108c0b966579f91bbb777d7658f226f34"}],"etc/tempest.conf.sample":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"3b9be14aa218b6707e7b0ed44d862bc589ea271c","unresolved":false,"context_lines":[{"line_number":355,"context_line":""},{"line_number":356,"context_line":"# Spawn instances using this neutron network (UUID) only"},{"line_number":357,"context_line":"# (string value)"},{"line_number":358,"context_line":"#default_network\u003d\u003cNone\u003e"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"[boto]"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"AAAATn%2F800E%3D","line":358,"updated":"2013-12-19 21:54:34.000000000","message":"is it possible to specify this in cidr format, then go and look it up on neutron side? This is a pretty user unfriendly setup.","commit_id":"55cf7f510bd40a295ec35a9cd6303050d12627cd"},{"author":{"_account_id":6124,"name":"Rohan Kanade","email":"openstack@rohankanade.com","username":"kanaderohan"},"change_message_id":"9c4cf50681da49c50501c4541c4f26df3b3f48cd","unresolved":false,"context_lines":[{"line_number":355,"context_line":""},{"line_number":356,"context_line":"# Spawn instances using this neutron network (UUID) only"},{"line_number":357,"context_line":"# (string value)"},{"line_number":358,"context_line":"#default_network\u003d\u003cNone\u003e"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"[boto]"}],"source_content_type":"application/octet-stream","patch_set":5,"id":"AAAATn%2F8yCI%3D","line":358,"in_reply_to":"AAAATn%2F800E%3D","updated":"2013-12-20 11:40:26.000000000","message":"Done, User will have to specify the subnet cidr and that subnet\u0027s network uuid will be used to spawn the instance.","commit_id":"55cf7f510bd40a295ec35a9cd6303050d12627cd"}],"tempest/api/compute/admin/test_servers.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"9df9d8d1f146382f187fbd5d7d9cfc85a67b6a49","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        image_id \u003d self.image_ref"},{"line_number":99,"context_line":"        resp, test_server \u003d self.create_server(name\u003dname,"},{"line_number":100,"context_line":"                                               image_id\u003dimage_id,"},{"line_number":101,"context_line":"                                               flavor\u003dflavor,"},{"line_number":102,"context_line":"                                               client\u003dself.client)"},{"line_number":103,"context_line":"        self.assertEqual(\u0027202\u0027, resp[\u0027status\u0027])"},{"line_number":104,"context_line":"        self.addCleanup(self.client.delete_server, test_server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":27,"id":"3ae8d1ca_280d1291","line":101,"updated":"2014-05-28 13:06:55.000000000","message":"You don\u0027t need to pass self.flavor_ref nor self.image_ref, it\u0027s now the default value.","commit_id":"8668322b1835af485483e9d5ad1d40cd331b7f29"}],"tempest/api/compute/base.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"06c4c2b84f09efea6dd9e7405f09bdf86426edaa","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        flavor \u003d kwargs.get(\u0027flavor\u0027, cls.flavor_ref)"},{"line_number":101,"context_line":"        image_id \u003d kwargs.get(\u0027image_id\u0027, cls.image_ref)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        if cls.default_network is not None:"},{"line_number":104,"context_line":"            networks \u003d {\u0027uuid\u0027: cls.default_network}"},{"line_number":105,"context_line":"            resp, body \u003d cls.servers_client.create_server("},{"line_number":106,"context_line":"                name, image_id, flavor, networks\u003d[networks], **kwargs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F89UE%3D","line":103,"updated":"2013-12-18 12:04:27.000000000","message":"please just us this to add to kwargs instead of duping the call","commit_id":"1a532549b5e9ce14592439e0a87751ea7f7447b5"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"dca6ef87f7762b7621b9bc1af690de4f19b53d7b","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        flavor \u003d kwargs.get(\u0027flavor\u0027, cls.flavor_ref)"},{"line_number":123,"context_line":"        image_id \u003d kwargs.get(\u0027image_id\u0027, cls.image_ref)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        if cls.default_network is not None:"},{"line_number":126,"context_line":"            networks \u003d {\u0027uuid\u0027: cls.default_network}"},{"line_number":127,"context_line":"            kwargs.update({\"networks\": [networks]})"},{"line_number":128,"context_line":"        resp, body \u003d cls.servers_client.create_server(name, image_id, flavor,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F86bA%3D","line":125,"updated":"2013-12-18 21:57:17.000000000","message":"I had to add a \"\u0027networks\u0027 not in kwargs\" check to this so it doesn\u0027t overwrite the value passed in from tests.","commit_id":"55cf7f510bd40a295ec35a9cd6303050d12627cd"},{"author":{"_account_id":6593,"name":"Dirk Mueller","email":"dirk@dmllr.de","username":"dmllr"},"change_message_id":"146b3cdb3e39f8f8a3dacc7ae0ebbe14508d0b21","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                    kwargs.update({\"networks\": [networks]})"},{"line_number":138,"context_line":"            except (exceptions.NotFound, exceptions.EndpointNotFound):"},{"line_number":139,"context_line":"                # For various reasons we may not be able to get the specified"},{"line_number":140,"context_line":"                # network, so behave as if it were not set."},{"line_number":141,"context_line":"                pass"},{"line_number":142,"context_line":"        resp, body \u003d cls.servers_client.create_server(name, image_id, flavor,"},{"line_number":143,"context_line":"                                                      **kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FTOw%3D","line":140,"updated":"2014-01-15 10:13:08.000000000","message":"I think ignoring a configuration error here is really bad. this should be imho even fatal.","commit_id":"12839b5dca7f82b95b835cba1c85d8c771977835"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"f4a18febc66902bcad949345a9cda0c55fe7dd62","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            except (exceptions.NotFound, exceptions.EndpointNotFound):"},{"line_number":139,"context_line":"                # For various reasons we may not be able to get the specified"},{"line_number":140,"context_line":"                # network, so behave as if it were not set."},{"line_number":141,"context_line":"                pass"},{"line_number":142,"context_line":"        resp, body \u003d cls.servers_client.create_server(name, image_id, flavor,"},{"line_number":143,"context_line":"                                                      **kwargs)"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FTiw%3D","line":141,"updated":"2014-01-15 08:56:32.000000000","message":"A log message would be nice","commit_id":"12839b5dca7f82b95b835cba1c85d8c771977835"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"cf5dcccc2803adc66f7089f15f19799d21ac11c0","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        if \u0027networks\u0027 not in kwargs and cls.fixed_network_name:"},{"line_number":133,"context_line":"            try:"},{"line_number":134,"context_line":"                network_uuid \u003d cls.get_network_uuid_from_name("},{"line_number":135,"context_line":"                    name\u003dcls.fixed_network_name)"},{"line_number":136,"context_line":"                if network_uuid:"},{"line_number":137,"context_line":"                    networks \u003d {\u0027uuid\u0027: network_uuid}"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2BxjQ%3D","line":134,"updated":"2014-01-22 09:24:07.000000000","message":"Could you inline the function get_network_uuid_from_name ? I mean at the moment, there is no need to create a 3 lines function since create_test_server() is the only caller. With a dedicated function, I have to scroll up and down to fully understand create_test_server()","commit_id":"e5e2e7923677122aab4730d0856be7ce13603f7d"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"5706f7c861ae42d656f0b92c3f9bae0931acb5fe","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        if \u0027networks\u0027 not in kwargs and cls.fixed_network_name:"},{"line_number":133,"context_line":"            try:"},{"line_number":134,"context_line":"                network_uuid \u003d cls.get_network_uuid_from_name("},{"line_number":135,"context_line":"                    name\u003dcls.fixed_network_name)"},{"line_number":136,"context_line":"                if network_uuid:"},{"line_number":137,"context_line":"                    networks \u003d {\u0027uuid\u0027: network_uuid}"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2Buq0%3D","line":134,"in_reply_to":"AAAAUH%2F%2BxjQ%3D","updated":"2014-01-22 18:30:01.000000000","message":"Sure.  It\u0027s a simple function and we can always factor it out if we find a need for it other places.","commit_id":"e5e2e7923677122aab4730d0856be7ce13603f7d"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"cf5dcccc2803adc66f7089f15f19799d21ac11c0","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        cls.hypervisor_client \u003d cls.os.hypervisor_client"},{"line_number":225,"context_line":"        cls.servers_client_v3_auth \u003d cls.os.servers_client_v3_auth"},{"line_number":226,"context_line":"        cls.certificates_client \u003d cls.os.certificates_client"},{"line_number":227,"context_line":"        cls.networks_client \u003d cls.os.network_client"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    @classmethod"},{"line_number":230,"context_line":"    def create_image_from_server(cls, server_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2Bxl0%3D","line":227,"updated":"2014-01-22 09:24:07.000000000","message":"Could you put this line in BaseComputeTest ? This would avoid a duplicate line maybe.","commit_id":"e5e2e7923677122aab4730d0856be7ce13603f7d"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"5706f7c861ae42d656f0b92c3f9bae0931acb5fe","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        cls.hypervisor_client \u003d cls.os.hypervisor_client"},{"line_number":225,"context_line":"        cls.servers_client_v3_auth \u003d cls.os.servers_client_v3_auth"},{"line_number":226,"context_line":"        cls.certificates_client \u003d cls.os.certificates_client"},{"line_number":227,"context_line":"        cls.networks_client \u003d cls.os.network_client"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"    @classmethod"},{"line_number":230,"context_line":"    def create_image_from_server(cls, server_id, **kwargs):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAUH%2F%2Buqc%3D","line":227,"in_reply_to":"AAAAUH%2F%2Bxl0%3D","updated":"2014-01-22 18:30:01.000000000","message":"Whoops, yeah that should work.  I worked on the v2 and v3 test cases separately so I didn\u0027t even notice I added the same thing to both classes. :-)","commit_id":"e5e2e7923677122aab4730d0856be7ce13603f7d"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"651773e496ae139d8e4f398367a9f771d7759277","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        if \u0027networks\u0027 not in kwargs and cls.fixed_network_name:"},{"line_number":126,"context_line":"            try:"},{"line_number":127,"context_line":"                networks \u003d cls.networks_client.list_networks("},{"line_number":128,"context_line":"                    name\u003dname)[1].get(\u0027networks\u0027)"},{"line_number":129,"context_line":"                if networks:"},{"line_number":130,"context_line":"                    network \u003d {\u0027uuid\u0027: networks[0][\u0027id\u0027]}"},{"line_number":131,"context_line":"                    kwargs.update({\"networks\": [network]})"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BkjY%3D","line":128,"updated":"2014-01-24 09:33:42.000000000","message":"this must be name\u003dcls.fixed_network_name","commit_id":"c7694cb63d6264f5a1e747e0f26afcfe411cbde5"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"3bc1d083e99acc0575928af1429a2e2bb01825a8","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        if \u0027networks\u0027 not in kwargs and cls.fixed_network_name:"},{"line_number":126,"context_line":"            try:"},{"line_number":127,"context_line":"                networks \u003d cls.networks_client.list_networks("},{"line_number":128,"context_line":"                    name\u003dname)[1].get(\u0027networks\u0027)"},{"line_number":129,"context_line":"                if networks:"},{"line_number":130,"context_line":"                    network \u003d {\u0027uuid\u0027: networks[0][\u0027id\u0027]}"},{"line_number":131,"context_line":"                    kwargs.update({\"networks\": [network]})"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2BiMA%3D","line":128,"in_reply_to":"AAAAUH%2F%2BkjY%3D","updated":"2014-01-24 16:57:12.000000000","message":"Oops!  Fixed.","commit_id":"c7694cb63d6264f5a1e747e0f26afcfe411cbde5"},{"author":{"_account_id":4460,"name":"Vincent Untz","email":"vuntz@opensuse.org","username":"vuntz"},"change_message_id":"37ea4bfc5c83380fa80d6e8bc6140eb2c91eabec","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                # not without adding a Tempest client to retrieve it from"},{"line_number":142,"context_line":"                # nova.  This means Tempest won\u0027t be able to run against"},{"line_number":143,"context_line":"                # nova-network with multiple networks available."},{"line_number":144,"context_line":"                pass"},{"line_number":145,"context_line":"        resp, body \u003d cls.servers_client.create_server(name, image_id, flavor,"},{"line_number":146,"context_line":"                                                      **kwargs)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2BewE%3D","line":144,"updated":"2014-01-25 07:08:14.000000000","message":"I\u0027m already aware of two other places where we will have a similar logic of finding the network id for fixed_network_name in order to fix the same bug (some volume api tests calling servers_client.create_server, and in OfficialClientTest of the scenario tests). Could we possibly share this logic somewhere instead of re-implementing it?","commit_id":"88aeeedf9ccc71f062bc895e1172724077c9b900"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"aeba845b53eeae60c238211b2290b10cd94c4d96","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                # not without adding a Tempest client to retrieve it from"},{"line_number":142,"context_line":"                # nova.  This means Tempest won\u0027t be able to run against"},{"line_number":143,"context_line":"                # nova-network with multiple networks available."},{"line_number":144,"context_line":"                pass"},{"line_number":145,"context_line":"        resp, body \u003d cls.servers_client.create_server(name, image_id, flavor,"},{"line_number":146,"context_line":"                                                      **kwargs)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2BT7s%3D","line":144,"in_reply_to":"AAAAUH%2F%2BcfM%3D","updated":"2014-01-28 03:57:31.000000000","message":"Nuts, it looks like you\u0027re right.  I didn\u0027t see the volumes stuff because we weren\u0027t running cinder in tripleo yet, so those tests weren\u0027t expected to pass.","commit_id":"88aeeedf9ccc71f062bc895e1172724077c9b900"},{"author":{"_account_id":4460,"name":"Vincent Untz","email":"vuntz@opensuse.org","username":"vuntz"},"change_message_id":"20fe6e513bbcad5308aeb064321fe68eb4dba99a","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                # not without adding a Tempest client to retrieve it from"},{"line_number":142,"context_line":"                # nova.  This means Tempest won\u0027t be able to run against"},{"line_number":143,"context_line":"                # nova-network with multiple networks available."},{"line_number":144,"context_line":"                pass"},{"line_number":145,"context_line":"        resp, body \u003d cls.servers_client.create_server(name, image_id, flavor,"},{"line_number":146,"context_line":"                                                      **kwargs)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2BcfM%3D","line":144,"in_reply_to":"AAAAUH%2F%2BeEI%3D","updated":"2014-01-26 08:34:21.000000000","message":"Just to highlight this, I created https://review.openstack.org/#/c/69181/ (which is totally untested, btw).","commit_id":"88aeeedf9ccc71f062bc895e1172724077c9b900"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"4c1f8a886f7752918350b0383097564d30d9a06a","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                # not without adding a Tempest client to retrieve it from"},{"line_number":142,"context_line":"                # nova.  This means Tempest won\u0027t be able to run against"},{"line_number":143,"context_line":"                # nova-network with multiple networks available."},{"line_number":144,"context_line":"                pass"},{"line_number":145,"context_line":"        resp, body \u003d cls.servers_client.create_server(name, image_id, flavor,"},{"line_number":146,"context_line":"                                                      **kwargs)"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2BeEI%3D","line":144,"in_reply_to":"AAAAUH%2F%2BewE%3D","updated":"2014-01-25 16:03:00.000000000","message":"For the OfficialClientTest of the scenario tests, I submitted a patch, review is #68904. In the OfficialClientManager case, we work with the \"official\" nova/neutron client; which logic and methods are a bit different from Tempest clients.\n\nStill, I agree with Vincent here, both compute/base.py:create_test_server() and compute/*/servers_client.py:create_server() need to handle Multiple Networks, which call for code sharing.\n\nWhat do you think Ben ?","commit_id":"88aeeedf9ccc71f062bc895e1172724077c9b900"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"63417c66576a1a708731ae99cc47a45cd2a4eddf","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        if \u0027name\u0027 in kwargs:"},{"line_number":136,"context_line":"            name \u003d kwargs.pop(\u0027name\u0027)"},{"line_number":137,"context_line":"        else:"},{"line_number":138,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \"-instance\")"},{"line_number":139,"context_line":"        resp, body \u003d cls.create_server(name\u003dname, **kwargs)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        # handle the case of multiple servers"}],"source_content_type":"text/x-python","patch_set":28,"id":"1ae5cdf2_abbe6cd2","line":138,"updated":"2014-06-02 07:36:49.000000000","message":"Would it make sense to add an helper function in the FixedNetworkMixin class? For example, a new method rand_server_name() or create_server_name(). Something like:\n\ndef create_server_name(suffix\u003d\"instance\"):\n   name \u003d cls.__name__\n   if suffix:\n       name +\u003d \"-%s\" % suffix\n   return data_utils.rand_name(name)","commit_id":"2956a825ccb548b8a10698b131ef8cbefed8cc9a"}],"tempest/api/compute/floating_ips/test_floating_ips_actions.py":[{"author":{"_account_id":4460,"name":"Vincent Untz","email":"vuntz@opensuse.org","username":"vuntz"},"change_message_id":"011614a54a2a083e32fb5d6b176ba83c03eb4fff","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        new_name \u003d rand_name(\u0027floating_server\u0027)"},{"line_number":99,"context_line":"        resp, body \u003d self.create_test_server(name\u003dnew_name,"},{"line_number":100,"context_line":"                                             image_id\u003dself.image_ref,"},{"line_number":101,"context_line":"                                             flavor\u003dself.flavor_ref)"},{"line_number":102,"context_line":"        self.servers_client.wait_for_server_status(body[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":103,"context_line":"        self.new_server_id \u003d body[\u0027id\u0027]"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUH%2F%2BGaw%3D","line":101,"updated":"2014-01-30 05:23:42.000000000","message":"FYI, this is getting merged already (in https://review.openstack.org/#/c/63446/).","commit_id":"3bf7d7764331e59c48b6ebf1dc8175f54cc6c892"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"512988713e63cdbec6e3fcdceaacae24ab8144f8","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        new_name \u003d rand_name(\u0027floating_server\u0027)"},{"line_number":99,"context_line":"        resp, body \u003d self.create_test_server(name\u003dnew_name,"},{"line_number":100,"context_line":"                                             image_id\u003dself.image_ref,"},{"line_number":101,"context_line":"                                             flavor\u003dself.flavor_ref)"},{"line_number":102,"context_line":"        self.servers_client.wait_for_server_status(body[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":103,"context_line":"        self.new_server_id \u003d body[\u0027id\u0027]"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUH%2F%2BDGY%3D","line":101,"in_reply_to":"AAAAUH%2F%2BGaw%3D","updated":"2014-01-30 19:47:51.000000000","message":"Thanks for the heads up.","commit_id":"3bf7d7764331e59c48b6ebf1dc8175f54cc6c892"}],"tempest/api/compute/v3/admin/test_servers.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"9df9d8d1f146382f187fbd5d7d9cfc85a67b6a49","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        image_id \u003d self.image_ref"},{"line_number":84,"context_line":"        resp, test_server \u003d self.create_server(name\u003dname,"},{"line_number":85,"context_line":"                                               image_id\u003dimage_id,"},{"line_number":86,"context_line":"                                               flavor\u003dflavor,"},{"line_number":87,"context_line":"                                               client\u003dself.client)"},{"line_number":88,"context_line":"        self.assertEqual(\u0027202\u0027, resp[\u0027status\u0027])"},{"line_number":89,"context_line":"        self.addCleanup(self.client.delete_server, test_server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":27,"id":"3ae8d1ca_e8608a37","line":86,"updated":"2014-05-28 13:06:55.000000000","message":"No need to pass self.flavor_ref nor self.image_ref, they are now the default values.","commit_id":"8668322b1835af485483e9d5ad1d40cd331b7f29"}],"tempest/api/volume/base.py":[{"author":{"_account_id":4460,"name":"Vincent Untz","email":"vuntz@opensuse.org","username":"vuntz"},"change_message_id":"011614a54a2a083e32fb5d6b176ba83c03eb4fff","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                pass"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    @classmethod"},{"line_number":107,"context_line":"    def create_server(cls, name, image_ref, flavor_ref, **kwargs):"},{"line_number":108,"context_line":"        cls.set_networks_kwarg(kwargs)"},{"line_number":109,"context_line":"        return cls.servers_client.create_server(name,"},{"line_number":110,"context_line":"                                                image_ref,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUH%2F%2BGbM%3D","line":107,"updated":"2014-01-30 05:23:42.000000000","message":"I suggest we do the same thing as in the base compute test:\n\n    def create_server(cls, **kwargs):\n        name \u003d rand_name(cls.__name__ + \"-instance\")\n        if \u0027name\u0027 in kwargs:\n            name \u003d kwargs.pop(\u0027name\u0027)\n        flavor \u003d kwargs.get(\u0027flavor\u0027, cls.flavor_ref)\n        image_id \u003d kwargs.get(\u0027image_id\u0027, cls.image_ref)\n\nthat would allow simplifying the calls.","commit_id":"3bf7d7764331e59c48b6ebf1dc8175f54cc6c892"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"512988713e63cdbec6e3fcdceaacae24ab8144f8","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                pass"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    @classmethod"},{"line_number":107,"context_line":"    def create_server(cls, name, image_ref, flavor_ref, **kwargs):"},{"line_number":108,"context_line":"        cls.set_networks_kwarg(kwargs)"},{"line_number":109,"context_line":"        return cls.servers_client.create_server(name,"},{"line_number":110,"context_line":"                                                image_ref,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUH%2F%2BCOs%3D","line":107,"in_reply_to":"AAAAUH%2F%2BGbM%3D","updated":"2014-01-30 19:47:51.000000000","message":"Done","commit_id":"3bf7d7764331e59c48b6ebf1dc8175f54cc6c892"}],"tempest/api/volume/test_volumes_actions.py":[{"author":{"_account_id":4460,"name":"Vincent Untz","email":"vuntz@opensuse.org","username":"vuntz"},"change_message_id":"011614a54a2a083e32fb5d6b176ba83c03eb4fff","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        srv_name \u003d data_utils.rand_name(cls.__name__ + \u0027-Instance-\u0027)"},{"line_number":34,"context_line":"        resp, cls.server \u003d cls.create_server(srv_name,"},{"line_number":35,"context_line":"                                             cls.image_ref,"},{"line_number":36,"context_line":"                                             cls.flavor_ref)"},{"line_number":37,"context_line":"        cls.servers_client.wait_for_server_status(cls.server[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        # Create a test shared volume for attach/detach tests"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUH%2F%2BGbI%3D","line":36,"updated":"2014-01-30 05:23:42.000000000","message":"Suggested change means that you could drop the last two args (also need to change srv_name to name\u003dsrv_name).","commit_id":"3bf7d7764331e59c48b6ebf1dc8175f54cc6c892"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"512988713e63cdbec6e3fcdceaacae24ab8144f8","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        srv_name \u003d data_utils.rand_name(cls.__name__ + \u0027-Instance-\u0027)"},{"line_number":34,"context_line":"        resp, cls.server \u003d cls.create_server(srv_name,"},{"line_number":35,"context_line":"                                             cls.image_ref,"},{"line_number":36,"context_line":"                                             cls.flavor_ref)"},{"line_number":37,"context_line":"        cls.servers_client.wait_for_server_status(cls.server[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"        # Create a test shared volume for attach/detach tests"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUH%2F%2BCOY%3D","line":36,"in_reply_to":"AAAAUH%2F%2BGbI%3D","updated":"2014-01-30 19:47:51.000000000","message":"srv_name is almost identical to what create_server will be doing, so I\u0027m just going to remove that too and let it be auto-generated.","commit_id":"3bf7d7764331e59c48b6ebf1dc8175f54cc6c892"}],"tempest/api/volume/test_volumes_negative.py":[{"author":{"_account_id":4460,"name":"Vincent Untz","email":"vuntz@opensuse.org","username":"vuntz"},"change_message_id":"011614a54a2a083e32fb5d6b176ba83c03eb4fff","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        srv_name \u003d data_utils.rand_name(\u0027Instance-\u0027)"},{"line_number":158,"context_line":"        resp, server \u003d self.create_server(srv_name,"},{"line_number":159,"context_line":"                                          self.image_ref,"},{"line_number":160,"context_line":"                                          self.flavor_ref)"},{"line_number":161,"context_line":"        self.addCleanup(self.servers_client.delete_server, server[\u0027id\u0027])"},{"line_number":162,"context_line":"        self.servers_client.wait_for_server_status(server[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":163,"context_line":"        self.assertRaises(exceptions.NotFound,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUH%2F%2BGbA%3D","line":160,"updated":"2014-01-30 05:23:42.000000000","message":"Same here.","commit_id":"3bf7d7764331e59c48b6ebf1dc8175f54cc6c892"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"e6df609f03d3fec0a8e27b8c273e4661bf2bafdb","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        srv_name \u003d data_utils.rand_name(\u0027Instance-\u0027)"},{"line_number":158,"context_line":"        resp, server \u003d self.create_server(srv_name,"},{"line_number":159,"context_line":"                                          self.image_ref,"},{"line_number":160,"context_line":"                                          self.flavor_ref)"},{"line_number":161,"context_line":"        self.addCleanup(self.servers_client.delete_server, server[\u0027id\u0027])"},{"line_number":162,"context_line":"        self.servers_client.wait_for_server_status(server[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":163,"context_line":"        self.assertRaises(exceptions.NotFound,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUH%2F%2BCHo%3D","line":160,"in_reply_to":"AAAAUH%2F%2BDF0%3D","updated":"2014-01-30 19:59:32.000000000","message":"Hmm, I see you were able to do it anyway in the other patch.  I\u0027ll give it a try.","commit_id":"3bf7d7764331e59c48b6ebf1dc8175f54cc6c892"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"512988713e63cdbec6e3fcdceaacae24ab8144f8","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        srv_name \u003d data_utils.rand_name(\u0027Instance-\u0027)"},{"line_number":158,"context_line":"        resp, server \u003d self.create_server(srv_name,"},{"line_number":159,"context_line":"                                          self.image_ref,"},{"line_number":160,"context_line":"                                          self.flavor_ref)"},{"line_number":161,"context_line":"        self.addCleanup(self.servers_client.delete_server, server[\u0027id\u0027])"},{"line_number":162,"context_line":"        self.servers_client.wait_for_server_status(server[\u0027id\u0027], \u0027ACTIVE\u0027)"},{"line_number":163,"context_line":"        self.assertRaises(exceptions.NotFound,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUH%2F%2BDF0%3D","line":160,"in_reply_to":"AAAAUH%2F%2BGbA%3D","updated":"2014-01-30 19:47:51.000000000","message":"This one actually can\u0027t because they\u0027re member variables and create_server is a classmethod.","commit_id":"3bf7d7764331e59c48b6ebf1dc8175f54cc6c892"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"9df9d8d1f146382f187fbd5d7d9cfc85a67b6a49","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":157,"context_line":"    def test_attach_volumes_with_nonexistent_volume_id(self):"},{"line_number":158,"context_line":"        srv_name \u003d data_utils.rand_name(\u0027Instance-\u0027)"},{"line_number":159,"context_line":"        resp, server \u003d self.create_server(name\u003dsrv_name)"},{"line_number":160,"context_line":"        self.addCleanup(self.servers_client.delete_server, server[\u0027id\u0027])"},{"line_number":161,"context_line":"        self.servers_client.wait_for_server_status(server[\u0027id\u0027], \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3ae8d1ca_e895eae4","line":158,"updated":"2014-05-28 13:06:55.000000000","message":"The base class uses the name of the class of generate the name, it\u0027s better than just using \"Instance-\" prefix. Just omit the name in this call.","commit_id":"8668322b1835af485483e9d5ad1d40cd331b7f29"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"a0711e803d7114d724cd4c7949267f80fb4570c7","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    @test.attr(type\u003d[\u0027negative\u0027, \u0027gate\u0027])"},{"line_number":157,"context_line":"    def test_attach_volumes_with_nonexistent_volume_id(self):"},{"line_number":158,"context_line":"        srv_name \u003d data_utils.rand_name(\u0027Instance-\u0027)"},{"line_number":159,"context_line":"        resp, server \u003d self.create_server(name\u003dsrv_name)"},{"line_number":160,"context_line":"        self.addCleanup(self.servers_client.delete_server, server[\u0027id\u0027])"},{"line_number":161,"context_line":"        self.servers_client.wait_for_server_status(server[\u0027id\u0027], \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3ae8d1ca_6cf479f2","line":158,"in_reply_to":"3ae8d1ca_e895eae4","updated":"2014-05-28 21:44:07.000000000","message":"I do agree with you, but I\u0027m trying to avoid making unrelated changes in this patch, and I believe there is already some work planned for Tempest to normalize all the test server names.  I\u0027d rather just leave this alone for now.","commit_id":"8668322b1835af485483e9d5ad1d40cd331b7f29"}],"tempest/api/volume/test_volumes_snapshots.py":[{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"9df9d8d1f146382f187fbd5d7d9cfc85a67b6a49","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        # Create a test instance"},{"line_number":69,"context_line":"        server_name \u003d data_utils.rand_name(\u0027instance-\u0027)"},{"line_number":70,"context_line":"        resp, server \u003d self.create_server(name\u003dserver_name,"},{"line_number":71,"context_line":"                                          image_id\u003dself.image_ref,"},{"line_number":72,"context_line":"                                          flavor\u003dself.flavor_ref)"},{"line_number":73,"context_line":"        self.addCleanup(self.servers_client.delete_server, server[\u0027id\u0027])"},{"line_number":74,"context_line":"        self.servers_client.wait_for_server_status(server[\u0027id\u0027], \u0027ACTIVE\u0027)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3ae8d1ca_c8902eef","line":71,"updated":"2014-05-28 13:06:55.000000000","message":"No need to pass image_ref/flavor_ref.","commit_id":"8668322b1835af485483e9d5ad1d40cd331b7f29"}],"tempest/common/fixed_network.py":[{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"328ea790ad611e2d2955d749394b0995dc615223","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    network \u003d {\u0027uuid\u0027: networks[0][\u0027id\u0027]}"},{"line_number":64,"context_line":"                    kwargs.update({\"networks\": [network]})"},{"line_number":65,"context_line":"                else:"},{"line_number":66,"context_line":"                    raise exceptions.NotFound()"},{"line_number":67,"context_line":"            except exceptions.NotFound:"},{"line_number":68,"context_line":"                # In a number of legitimate situations, such as tenant"},{"line_number":69,"context_line":"                # isolation, we may not be able to see the configured network."}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAWH%2F9tKg%3D","line":66,"updated":"2014-04-02 19:13:44.000000000","message":"you raise NotFound then you catch it just bellow? why not just include the log message in the else?","commit_id":"48774c7bffdd70f67d38674775de101ae98cf50c"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"faa37964fda94ab7fd9e140af5225e25e1447ab1","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    network \u003d {\u0027uuid\u0027: networks[0][\u0027id\u0027]}"},{"line_number":64,"context_line":"                    kwargs.update({\"networks\": [network]})"},{"line_number":65,"context_line":"                else:"},{"line_number":66,"context_line":"                    raise exceptions.NotFound()"},{"line_number":67,"context_line":"            except exceptions.NotFound:"},{"line_number":68,"context_line":"                # In a number of legitimate situations, such as tenant"},{"line_number":69,"context_line":"                # isolation, we may not be able to see the configured network."}],"source_content_type":"text/x-python","patch_set":26,"id":"3ae8d1ca_e9f8b0e7","line":66,"in_reply_to":"AAAAWH%2F9tKg%3D","updated":"2014-05-27 17:23:15.000000000","message":"This is just to mimic the behavior of list_networks above.  When we can\u0027t see the network at all that will raise a NotFound, so we needed to handle it anyway.\n\nI don\u0027t know that this can even happen, but I think someone suggested handling the case of networks being empty just to be safe.","commit_id":"48774c7bffdd70f67d38674775de101ae98cf50c"},{"author":{"_account_id":5174,"name":"Mauro Sergio Martins Rodrigues","email":"maurosr@linux.vnet.ibm.com","username":"maurosr"},"change_message_id":"328ea790ad611e2d2955d749394b0995dc615223","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        else:"},{"line_number":91,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \"-instance\")"},{"line_number":92,"context_line":"        flavor \u003d kwargs.get(\u0027flavor\u0027, cls.flavor_ref)"},{"line_number":93,"context_line":"        image_id \u003d kwargs.get(\u0027image_id\u0027, cls.image_ref)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        cls._set_networks_kwarg(kwargs)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"AAAAWH%2F9sNE%3D","line":93,"updated":"2014-04-02 19:13:44.000000000","message":"I fear that eventually we will get flavor and image_id as None since you set those attributes in lines 52-53 as None in the case of nonexistence of such attributes.\n\nSo I don\u0027t see it set,  neither on basedeps, but somehow it worked (specially once you removed the parameters here  tempest/api/volume/test_volumes_actions.py), but I don\u0027t feel confident about it. \n\nCan You change this method to always ask for image and flavor? Also I would prefer to set flavor_ref and image_ref with the contents of their respective value in config","commit_id":"48774c7bffdd70f67d38674775de101ae98cf50c"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"faa37964fda94ab7fd9e140af5225e25e1447ab1","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        else:"},{"line_number":91,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \"-instance\")"},{"line_number":92,"context_line":"        flavor \u003d kwargs.get(\u0027flavor\u0027, cls.flavor_ref)"},{"line_number":93,"context_line":"        image_id \u003d kwargs.get(\u0027image_id\u0027, cls.image_ref)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        cls._set_networks_kwarg(kwargs)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"3ae8d1ca_a9bf88cf","line":93,"in_reply_to":"AAAAWH%2F9sNE%3D","updated":"2014-05-27 17:23:15.000000000","message":"Ah, good point.  These class attributes were defaulted to the conf values originally, so that\u0027s what I should have done here too.\n\nFWIW, this didn\u0027t fail because currently every class that uses this mixin already sets those class attributes sanely, so the defaults above are never used.\n\nI\u0027d rather not make this require the flavor and image_id params because there are a number of places that the class attribute behavior is used.  That\u0027s how the old create_server calls worked and I\u0027d rather not mix a largely unrelated functional change into this.  It\u0027s complex enough as it is. :-)\n\nI will definitely fix the default values so that this should never fail due to a None flavor or image_id though.  I think that will address your concerns here, but let me know if you disagree.  Thanks.","commit_id":"48774c7bffdd70f67d38674775de101ae98cf50c"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ac679e4093e9b295fea814f1b6a5e36c54c6efc9","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        ensure_attr(\u0027os\u0027, cls.get_client_manager())"},{"line_number":50,"context_line":"        ensure_attr(\u0027servers_client\u0027, cls.os.servers_client)"},{"line_number":51,"context_line":"        ensure_attr(\u0027networks_client\u0027, cls.os.network_client)"},{"line_number":52,"context_line":"        ensure_attr(\u0027flavor_ref\u0027, CONF.compute.flavor_ref)"},{"line_number":53,"context_line":"        ensure_attr(\u0027image_ref\u0027, CONF.compute.image_ref)"},{"line_number":54,"context_line":"        ensure_attr(\u0027fixed_network_name\u0027, CONF.compute.fixed_network_name)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3ae8d1ca_de12a4b3","line":51,"updated":"2014-05-28 13:43:31.000000000","message":"If I understood correctly, cls.os.network_client is the neutron client (see Manager class in tempest/clients.py). To support also nova-network, it would be better to list networks using the nova client.\n\nIn my patch, I chose to reuse the OfficialClientManager from tempest.clients, but Matthew Treinish replied that we should add the missing feature in Tempest API instead:\nhttps://review.openstack.org/#/c/96131/2/tempest/api/compute/base.py,cm","commit_id":"8668322b1835af485483e9d5ad1d40cd331b7f29"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"a0711e803d7114d724cd4c7949267f80fb4570c7","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"        ensure_attr(\u0027os\u0027, cls.get_client_manager())"},{"line_number":50,"context_line":"        ensure_attr(\u0027servers_client\u0027, cls.os.servers_client)"},{"line_number":51,"context_line":"        ensure_attr(\u0027networks_client\u0027, cls.os.network_client)"},{"line_number":52,"context_line":"        ensure_attr(\u0027flavor_ref\u0027, CONF.compute.flavor_ref)"},{"line_number":53,"context_line":"        ensure_attr(\u0027image_ref\u0027, CONF.compute.image_ref)"},{"line_number":54,"context_line":"        ensure_attr(\u0027fixed_network_name\u0027, CONF.compute.fixed_network_name)"}],"source_content_type":"text/x-python","patch_set":27,"id":"3ae8d1ca_f76dc29a","line":51,"in_reply_to":"3ae8d1ca_de12a4b3","updated":"2014-05-28 21:44:07.000000000","message":"I looked into implementing this for nova-network, but it doesn\u0027t have the same problem.  nova-network will happily boot an instance on multiple networks.","commit_id":"8668322b1835af485483e9d5ad1d40cd331b7f29"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"ac679e4093e9b295fea814f1b6a5e36c54c6efc9","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            except exceptions.EndpointNotFound:"},{"line_number":74,"context_line":"                # NOTE(bnemec): This exception means we\u0027re running against"},{"line_number":75,"context_line":"                # nova-network, which does not care if we boot an instance"},{"line_number":76,"context_line":"                # with multiple networks attached."},{"line_number":77,"context_line":"                pass"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":27,"id":"3ae8d1ca_1e45ec6f","line":76,"updated":"2014-05-28 13:43:31.000000000","message":"If the neutron server is down, we ignore the error here.\n\nIMO it whould be better to \"if not CONF.service_available.neutron: return\" at the top of the function instead. In this case, it\u0027s correct to use the neutron client in this function (instead of using the nova client as I suggested above).","commit_id":"8668322b1835af485483e9d5ad1d40cd331b7f29"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"a0711e803d7114d724cd4c7949267f80fb4570c7","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            except exceptions.EndpointNotFound:"},{"line_number":74,"context_line":"                # NOTE(bnemec): This exception means we\u0027re running against"},{"line_number":75,"context_line":"                # nova-network, which does not care if we boot an instance"},{"line_number":76,"context_line":"                # with multiple networks attached."},{"line_number":77,"context_line":"                pass"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":27,"id":"3ae8d1ca_d7a3669c","line":76,"in_reply_to":"3ae8d1ca_1e45ec6f","updated":"2014-05-28 21:44:07.000000000","message":"This only gets raised if the networks endpoint isn\u0027t even registered, so the Neutron server being down wouldn\u0027t hit this code path.  And if that happens all kinds of other stuff is going to blow up anyway, so I\u0027m not _too_ concerned about handling it specially here. :-)","commit_id":"8668322b1835af485483e9d5ad1d40cd331b7f29"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"9df9d8d1f146382f187fbd5d7d9cfc85a67b6a49","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        else:"},{"line_number":91,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \"-instance\")"},{"line_number":92,"context_line":"        flavor \u003d kwargs.get(\u0027flavor\u0027, cls.flavor_ref)"},{"line_number":93,"context_line":"        image_id \u003d kwargs.get(\u0027image_id\u0027, cls.image_ref)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        cls._set_networks_kwarg(kwargs)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3ae8d1ca_43823f50","line":93,"updated":"2014-05-28 13:06:55.000000000","message":"You should use .pop() not .get() here, otherwise the flavor and image_id are kept. Currently, the create_server() ignores unknown keys, but it may raise errors later.","commit_id":"8668322b1835af485483e9d5ad1d40cd331b7f29"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"a0711e803d7114d724cd4c7949267f80fb4570c7","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        else:"},{"line_number":91,"context_line":"            name \u003d data_utils.rand_name(cls.__name__ + \"-instance\")"},{"line_number":92,"context_line":"        flavor \u003d kwargs.get(\u0027flavor\u0027, cls.flavor_ref)"},{"line_number":93,"context_line":"        image_id \u003d kwargs.get(\u0027image_id\u0027, cls.image_ref)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        cls._set_networks_kwarg(kwargs)"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"3ae8d1ca_e94ebbc0","line":93,"in_reply_to":"3ae8d1ca_43823f50","updated":"2014-05-28 21:44:07.000000000","message":"Good point.  This was a bug in the original function, but I might as well fix it here.","commit_id":"8668322b1835af485483e9d5ad1d40cd331b7f29"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"581dc589106587426fb0372bdd905ea2bedc9821","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        ensure_attr(\u0027fixed_network_name\u0027, CONF.compute.fixed_network_name)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @classmethod"},{"line_number":57,"context_line":"    def _set_networks_kwarg(cls, kwargs):"},{"line_number":58,"context_line":"        if \u0027networks\u0027 not in kwargs and cls.fixed_network_name:"},{"line_number":59,"context_line":"            try:"},{"line_number":60,"context_line":"                networks \u003d cls.networks_client.list_networks("}],"source_content_type":"text/x-python","patch_set":29,"id":"baada198_15bb430f","line":57,"updated":"2014-06-30 18:43:06.000000000","message":"This code is using exceptions based on discovery assumptions  to skip providing a network. Since tempest has conf flags that say both whether neutron is expected and whether tenant isolation is being used, wouldn\u0027t it be more robust to just conditionalize whether list_networks is called and how failure is handled based on those configs?","commit_id":"454f0bb11409d7046aaa6e8334abc08fb35cd589"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"4959c883ee6364b2fa6699243cd6910e3f3da11c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        ensure_attr(\u0027fixed_network_name\u0027, CONF.compute.fixed_network_name)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @classmethod"},{"line_number":57,"context_line":"    def _set_networks_kwarg(cls, kwargs):"},{"line_number":58,"context_line":"        if \u0027networks\u0027 not in kwargs and cls.fixed_network_name:"},{"line_number":59,"context_line":"            try:"},{"line_number":60,"context_line":"                networks \u003d cls.networks_client.list_networks("}],"source_content_type":"text/x-python","patch_set":29,"id":"baada198_84fe436a","line":57,"in_reply_to":"baada198_15bb430f","updated":"2014-07-07 19:30:37.000000000","message":"The Neutron check would be fine, but IIRC there are multiple circumstances where the exceptions.NotFound will be raised, and enumerating all of those is going to be a headache and actually less robust (the first time someone comes up with a new situation where the fixed network can\u0027t be found this will fail).\n\nBasically this is an EAFP vs. LBYL discussion, and my understanding is that in Python the former is typically preferred, so that\u0027s why I did it this way.","commit_id":"454f0bb11409d7046aaa6e8334abc08fb35cd589"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"581dc589106587426fb0372bdd905ea2bedc9821","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                pass"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @classmethod"},{"line_number":80,"context_line":"    def create_server(cls, **kwargs):"},{"line_number":81,"context_line":"        \"\"\"Helper method for creating test servers"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        This function allows servers to be created based on either the"}],"source_content_type":"text/x-python","patch_set":29,"id":"baada198_75fe3f6d","line":80,"updated":"2014-06-30 18:43:06.000000000","message":"The name of this method and the way it defaults the client is a landmine for future developers IMO. The create_server method  is mixed into another class which has a create_test_server method with a similar docstring. Also, looking at this change it seems you are supposed to pass in \"client\" if it is an admin client, but this will not be obvious. It would be more robust if client were named \"servers_client\" and required, and perhaps this method called \"create_server_from_client\".","commit_id":"454f0bb11409d7046aaa6e8334abc08fb35cd589"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"4959c883ee6364b2fa6699243cd6910e3f3da11c","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                pass"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @classmethod"},{"line_number":80,"context_line":"    def create_server(cls, **kwargs):"},{"line_number":81,"context_line":"        \"\"\"Helper method for creating test servers"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        This function allows servers to be created based on either the"}],"source_content_type":"text/x-python","patch_set":29,"id":"baada198_76502932","line":80,"in_reply_to":"baada198_75fe3f6d","updated":"2014-07-07 19:30:37.000000000","message":"Completely agree that this docstring should be better.  Who wrote this garbage? ;-)\n\nI\u0027m not sure about making client mandatory though.  In the vast majority of calls to this cls.servers_client is what we want, so the docstring is going to say something like \"You probably want cls.servers_client for this parameter.\" which begs the (valid IMHO) question of \"why not make that the default?\"\n\nWould just properly documenting the parameters to this function address your concerns about it confusing future developers working with this code?","commit_id":"454f0bb11409d7046aaa6e8334abc08fb35cd589"}],"tempest/services/compute/xml/servers_client.py":[{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"dca6ef87f7762b7621b9bc1af690de4f19b53d7b","unresolved":false,"context_lines":[{"line_number":340,"context_line":"            server.append(networks)"},{"line_number":341,"context_line":"            for network in kwargs[\u0027networks\u0027]:"},{"line_number":342,"context_line":"                s \u003d Element(\"network\", uuid\u003dnetwork[\u0027uuid\u0027],"},{"line_number":343,"context_line":"                            fixed_ip\u003dnetwork.get(\u0027fixed_ip\u0027))"},{"line_number":344,"context_line":"                networks.append(s)"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        if \u0027meta\u0027 in kwargs:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F87EI%3D","line":343,"updated":"2013-12-18 21:57:17.000000000","message":"I\u0027m still getting errors when I run this against my tripleo overcloud with this change.  I had to do something a little more involved to make it work:\n\nhttp://paste.openstack.org/show/55359/\n\nThere may be a cleaner way to do it, but that worked for me.  This probably applies to the v3 client too, but v3 isn\u0027t working in the overcloud yet so I can\u0027t test that.","commit_id":"55cf7f510bd40a295ec35a9cd6303050d12627cd"},{"author":{"_account_id":9107,"name":"Victor Stinner","email":"vstinner@redhat.com","username":"haypo"},"change_message_id":"9df9d8d1f146382f187fbd5d7d9cfc85a67b6a49","unresolved":false,"context_lines":[{"line_number":343,"context_line":"                    fixed_ip_arg[\u0027fixed_ip\u0027] \u003d fixed_ip"},{"line_number":344,"context_line":"                s \u003d xml_utils.Element(\"network\", uuid\u003dnetwork[\u0027uuid\u0027],"},{"line_number":345,"context_line":"                                      **fixed_ip_arg)"},{"line_number":346,"context_line":"                networks.append(s)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        if \u0027meta\u0027 in kwargs:"},{"line_number":349,"context_line":"            metadata \u003d xml_utils.Element(\"metadata\")"}],"source_content_type":"text/x-python","patch_set":27,"id":"3ae8d1ca_c3e48f3d","line":346,"updated":"2014-05-28 13:06:55.000000000","message":"You can write this differently:\n\nif \u0027fixed_id\u0027 in network:\n    s.add_attr(\u0027fixed_id\u0027, network[\u0027fixed_id\u0027])","commit_id":"8668322b1835af485483e9d5ad1d40cd331b7f29"}],"tempest/test.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"0622ae3eeef3ec27d03de5151943fe87496a0bfe","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        super(BaseDefaultNetworkTestCase, cls).setUpClass()"},{"line_number":527,"context_line":"        cls.os \u003d cls.get_client_manager()"},{"line_number":528,"context_line":"        cls.networks_client \u003d cls.os.network_client"},{"line_number":529,"context_line":"        cls.fixed_network_name \u003d cls.config.compute.fixed_network_name"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    @classmethod"},{"line_number":532,"context_line":"    def set_networks_kwarg(cls, kwargs):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F9mnQ%3D","line":529,"updated":"2014-02-05 18:22:44.000000000","message":"As per https://review.openstack.org/#/c/70208/ you must now use CONF instead of cls.config","commit_id":"e791c21d9591ce475f0f012a1372b0590fdb35ad"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"b854ef15ca5c6c16906c6eb9bdf0d3bf9fb610d9","unresolved":false,"context_lines":[{"line_number":526,"context_line":"        super(BaseDefaultNetworkTestCase, cls).setUpClass()"},{"line_number":527,"context_line":"        cls.os \u003d cls.get_client_manager()"},{"line_number":528,"context_line":"        cls.networks_client \u003d cls.os.network_client"},{"line_number":529,"context_line":"        cls.fixed_network_name \u003d cls.config.compute.fixed_network_name"},{"line_number":530,"context_line":""},{"line_number":531,"context_line":"    @classmethod"},{"line_number":532,"context_line":"    def set_networks_kwarg(cls, kwargs):"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAUH%2F9mmI%3D","line":529,"in_reply_to":"AAAAUH%2F9mnQ%3D","updated":"2014-02-05 18:25:30.000000000","message":"Good catch.  Done.","commit_id":"e791c21d9591ce475f0f012a1372b0590fdb35ad"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"593f2ba120333a2ceda791e4db6473537badeecc","unresolved":false,"context_lines":[{"line_number":550,"context_line":"                # so we can\u0027t retrieve the network id to use here, at least"},{"line_number":551,"context_line":"                # not without adding a Tempest client to retrieve it from"},{"line_number":552,"context_line":"                # nova.  This means Tempest won\u0027t be able to run against"},{"line_number":553,"context_line":"                # nova-network with multiple networks available."},{"line_number":554,"context_line":"                pass"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUX%2F%2ByyQ%3D","line":553,"updated":"2014-02-19 01:19:22.000000000","message":"why not just add a tempest client for it in tempest/services/compute/json? Eventually we should be doing better nova network testing anyway...","commit_id":"9295d4a8f53955105fa70d8af19a99d8d4d9b2ab"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"4e51b63048d1c433f243ba6a0cc1e8a0307f37bb","unresolved":false,"context_lines":[{"line_number":550,"context_line":"                # so we can\u0027t retrieve the network id to use here, at least"},{"line_number":551,"context_line":"                # not without adding a Tempest client to retrieve it from"},{"line_number":552,"context_line":"                # nova.  This means Tempest won\u0027t be able to run against"},{"line_number":553,"context_line":"                # nova-network with multiple networks available."},{"line_number":554,"context_line":"                pass"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAU3%2F%2FvUI%3D","line":553,"in_reply_to":"AAAAUX%2F%2Bi3Q%3D","updated":"2014-02-25 01:17:55.000000000","message":"So it turns out there\u0027s nothing to be done for nova-network.  It doesn\u0027t care if you boot an instance on multiple networks, so while I could in theory add a client to do this it wouldn\u0027t accomplish anything.","commit_id":"9295d4a8f53955105fa70d8af19a99d8d4d9b2ab"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"8066bc6f2e81716f5ee5c958b6c560ca3cc48ed3","unresolved":false,"context_lines":[{"line_number":550,"context_line":"                # so we can\u0027t retrieve the network id to use here, at least"},{"line_number":551,"context_line":"                # not without adding a Tempest client to retrieve it from"},{"line_number":552,"context_line":"                # nova.  This means Tempest won\u0027t be able to run against"},{"line_number":553,"context_line":"                # nova-network with multiple networks available."},{"line_number":554,"context_line":"                pass"},{"line_number":555,"context_line":""},{"line_number":556,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUX%2F%2Bi3Q%3D","line":553,"in_reply_to":"AAAAUX%2F%2ByyQ%3D","updated":"2014-02-20 16:00:08.000000000","message":"I am not sure this requires à -1. This patch is a first step toward handling multiple networks. If one is interested in this feature being supported with nova-network too, one could indeed add a new Tempest client.","commit_id":"9295d4a8f53955105fa70d8af19a99d8d4d9b2ab"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"593f2ba120333a2ceda791e4db6473537badeecc","unresolved":false,"context_lines":[{"line_number":562,"context_line":"        specifies a network for the server to be booted on, when"},{"line_number":563,"context_line":"        appropriate."},{"line_number":564,"context_line":"        \"\"\""},{"line_number":565,"context_line":"        name \u003d data_utils.rand_name(cls.__name__ + \"-instance\")"},{"line_number":566,"context_line":"        if \u0027name\u0027 in kwargs:"},{"line_number":567,"context_line":"            name \u003d kwargs.pop(\u0027name\u0027)"},{"line_number":568,"context_line":"        flavor \u003d kwargs.get(\u0027flavor\u0027, cls.flavor_ref)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUX%2F%2By2E%3D","line":565,"updated":"2014-02-19 01:19:22.000000000","message":"perhaps not create a name here unless its not in kwargs?","commit_id":"9295d4a8f53955105fa70d8af19a99d8d4d9b2ab"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"4e51b63048d1c433f243ba6a0cc1e8a0307f37bb","unresolved":false,"context_lines":[{"line_number":562,"context_line":"        specifies a network for the server to be booted on, when"},{"line_number":563,"context_line":"        appropriate."},{"line_number":564,"context_line":"        \"\"\""},{"line_number":565,"context_line":"        name \u003d data_utils.rand_name(cls.__name__ + \"-instance\")"},{"line_number":566,"context_line":"        if \u0027name\u0027 in kwargs:"},{"line_number":567,"context_line":"            name \u003d kwargs.pop(\u0027name\u0027)"},{"line_number":568,"context_line":"        flavor \u003d kwargs.get(\u0027flavor\u0027, cls.flavor_ref)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAU3%2F%2FvT4%3D","line":565,"in_reply_to":"AAAAUX%2F%2Bi6k%3D","updated":"2014-02-25 01:17:55.000000000","message":"I think I understand.  Addressed in the latest patch set.","commit_id":"9295d4a8f53955105fa70d8af19a99d8d4d9b2ab"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"8066bc6f2e81716f5ee5c958b6c560ca3cc48ed3","unresolved":false,"context_lines":[{"line_number":562,"context_line":"        specifies a network for the server to be booted on, when"},{"line_number":563,"context_line":"        appropriate."},{"line_number":564,"context_line":"        \"\"\""},{"line_number":565,"context_line":"        name \u003d data_utils.rand_name(cls.__name__ + \"-instance\")"},{"line_number":566,"context_line":"        if \u0027name\u0027 in kwargs:"},{"line_number":567,"context_line":"            name \u003d kwargs.pop(\u0027name\u0027)"},{"line_number":568,"context_line":"        flavor \u003d kwargs.get(\u0027flavor\u0027, cls.flavor_ref)"}],"source_content_type":"text/x-python","patch_set":21,"id":"AAAAUX%2F%2Bi6k%3D","line":565,"in_reply_to":"AAAAUX%2F%2By2E%3D","updated":"2014-02-20 16:00:08.000000000","message":"Triple negations always confuse me :) What do you mean exactly ?","commit_id":"9295d4a8f53955105fa70d8af19a99d8d4d9b2ab"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"5007f06fec986907de8acfc6df08b4e17efa758c","unresolved":false,"context_lines":[{"line_number":570,"context_line":"        cls.image_ref \u003d None"},{"line_number":571,"context_line":""},{"line_number":572,"context_line":"    @classmethod"},{"line_number":573,"context_line":"    def set_networks_kwarg(cls, kwargs):"},{"line_number":574,"context_line":"        if \u0027networks\u0027 not in kwargs and cls.fixed_network_name:"},{"line_number":575,"context_line":"            try:"},{"line_number":576,"context_line":"                networks \u003d cls.networks_client.list_networks("}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAVn%2F%2FXYw%3D","line":573,"updated":"2014-03-06 15:56:27.000000000","message":"If the network isolation is turned on the network related to the primary user should be used. If the test case marked as does not needs network a NULL network (no nic) should be specified explicitly (I am not sure is the second part really possible).\n\nMay be the gate should use a shared fixed network.","commit_id":"064841942ba8c49f6fc270fd1be546900af7a706"}]}
