)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"e043f36f2412c7f9a788b6b1803e21ebfd5e0c7a","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Added a test that checks that OS::Neutron::FloatingIp and"},{"line_number":10,"context_line":"OS::Neutron::FloatingIpAssociation resources are created correctly."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-Bug: #1269569"},{"line_number":13,"context_line":"Change-Id: I1ebf8305b88ca79e9f6a8a9c733fbb7399b13314"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_510264b4","line":11,"updated":"2014-07-10 16:57:00.000000000","message":"Could you add a bp reference as well:\n\nhttps://blueprints.launchpad.net/tempest/+spec/tempest-heat-integration","commit_id":"fc6280a22372b3519489c84720441e31ca577d2e"}],"tempest/api/orchestration/stacks/templates/neutron_floating_ip.yaml":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"e043f36f2412c7f9a788b6b1803e21ebfd5e0c7a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"heat_template_version: \u00272013-05-23\u0027"},{"line_number":2,"context_line":"description: |"},{"line_number":3,"context_line":"  Template which creates single EC2 instance"},{"line_number":4,"context_line":"parameters:"},{"line_number":5,"context_line":"  KeyName:"},{"line_number":6,"context_line":"    type: string"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"baada198_311ed00c","line":3,"updated":"2014-07-10 16:57:00.000000000","message":"Invalid description","commit_id":"fc6280a22372b3519489c84720441e31ca577d2e"},{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"e10268f8589ff05a8f19e63d9bf22caba0ab5ab1","unresolved":false,"context_lines":[{"line_number":81,"context_line":"          template: |"},{"line_number":82,"context_line":"            #!/bin/bash -v"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"            /opt/aws/bin/cfn-signal -e 0 -r \"SmokeServerNeutron created\" \\"},{"line_number":85,"context_line":"            \u0027wait_handle\u0027"},{"line_number":86,"context_line":"          params:"},{"line_number":87,"context_line":"            wait_handle: {get_resource: WaitHandleNeutron}"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"baada198_c90dda3f","line":84,"updated":"2014-07-15 08:13:36.000000000","message":"There\u0027s no need to use a full cfntools image here (which takes *way* longer to boot than cirros), you can do the same thing via curl in a cirros image.\n\nAlso, what\u0027s the point of using all the resources to boot an instance here, when other tests already do that, and we\u0027re not actually testing anything inside the image?\n\nIf we\u0027re going to boot it, can\u0027t we at least prove the network is working and signal via the WaitCondition success/failure based on some logic looking at the network configuration?","commit_id":"fc6280a22372b3519489c84720441e31ca577d2e"}],"tempest/api/orchestration/stacks/test_neutron_floating_ip.py":[{"author":{"_account_id":4328,"name":"Steven Hardy","email":"steven.hardy@suse.com","username":"shardy"},"change_message_id":"e10268f8589ff05a8f19e63d9bf22caba0ab5ab1","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class NeutronFloatingIpTestJSON(base.BaseOrchestrationTest):"},{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(NeutronFloatingIpTestJSON, self).setUp()"},{"line_number":32,"context_line":"        if not CONF.orchestration.image_ref:"},{"line_number":33,"context_line":"            raise self.skipException(\"No image available to test\")"},{"line_number":34,"context_line":"        os \u003d clients.Manager()"},{"line_number":35,"context_line":"        if not CONF.service_available.neutron:"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ec0f0c2c","line":32,"updated":"2014-07-15 08:13:36.000000000","message":"There\u0027s no need to use the full orchestration image, with the template you have you could use the compute cirros image which will boot far faster.\n\nSee my patch for an example (also that has logic which adds a orchestration.minimal_image_ref which Andrea requested, if needed I can break that out into a separate patch so you can use it)\n\nhttps://review.openstack.org/#/c/90143/","commit_id":"fc6280a22372b3519489c84720441e31ca577d2e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"e043f36f2412c7f9a788b6b1803e21ebfd5e0c7a","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.admin_network_client \u003d self._get_admin_network_client()"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"        tenant_cidr \u003d netaddr.IPNetwork(CONF.network.tenant_network_cidr)"},{"line_number":46,"context_line":"        self.subnet_cidr \u003d tenant_cidr.subnet(16).next()"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        # create the stack"},{"line_number":49,"context_line":"        self.stack_identifier \u003d self.create_stack("}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_bd7c6eed","line":46,"range":{"start_line":46,"start_character":8,"end_line":46,"end_character":56},"updated":"2014-07-10 16:57:00.000000000","message":"16 should not be hardcoded. Perhaps tenant_cidr.prefixlen instead.","commit_id":"fc6280a22372b3519489c84720441e31ca577d2e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"e043f36f2412c7f9a788b6b1803e21ebfd5e0c7a","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            })"},{"line_number":61,"context_line":"        self.stack_id \u003d self.stack_identifier.split(\u0027/\u0027)[1]"},{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            self.client.wait_for_stack_status(self.stack_id, \u0027CREATE_COMPLETE\u0027)"},{"line_number":64,"context_line":"            _, resources \u003d self.client.list_resources(self.stack_identifier)"},{"line_number":65,"context_line":"        except exceptions.TimeoutException as e:"},{"line_number":66,"context_line":"            # attempt to log the server console to help with debugging"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_a52050b1","line":63,"updated":"2014-07-10 16:57:00.000000000","message":"Why not use self._wait_for_stack_status?","commit_id":"fc6280a22372b3519489c84720441e31ca577d2e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"cddc50d01be2cdd93f3439bb81bd6c2f91e8ffd3","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            })"},{"line_number":61,"context_line":"        self.stack_id \u003d self.stack_identifier.split(\u0027/\u0027)[1]"},{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            self.client.wait_for_stack_status(self.stack_id, \u0027CREATE_COMPLETE\u0027)"},{"line_number":64,"context_line":"            _, resources \u003d self.client.list_resources(self.stack_identifier)"},{"line_number":65,"context_line":"        except exceptions.TimeoutException as e:"},{"line_number":66,"context_line":"            # attempt to log the server console to help with debugging"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_8a05c912","line":63,"in_reply_to":"baada198_a52050b1","updated":"2014-07-13 22:29:46.000000000","message":"Ignore this one, _wait_for_stack_status is only available for scenario tests.","commit_id":"fc6280a22372b3519489c84720441e31ca577d2e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"e043f36f2412c7f9a788b6b1803e21ebfd5e0c7a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.stack_id \u003d self.stack_identifier.split(\u0027/\u0027)[1]"},{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            self.client.wait_for_stack_status(self.stack_id, \u0027CREATE_COMPLETE\u0027)"},{"line_number":64,"context_line":"            _, resources \u003d self.client.list_resources(self.stack_identifier)"},{"line_number":65,"context_line":"        except exceptions.TimeoutException as e:"},{"line_number":66,"context_line":"            # attempt to log the server console to help with debugging"},{"line_number":67,"context_line":"            # the cause of the server not signalling the waitcondition"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_6571d8df","line":64,"updated":"2014-07-10 16:57:00.000000000","message":"Does this belong within the try / except as it may raise TimeoutExceptions as well?","commit_id":"fc6280a22372b3519489c84720441e31ca577d2e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"e043f36f2412c7f9a788b6b1803e21ebfd5e0c7a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                                                  \u0027Server\u0027)"},{"line_number":71,"context_line":"            server_id \u003d body[\u0027physical_resource_id\u0027]"},{"line_number":72,"context_line":"            LOG.debug(\u0027Console output for %s\u0027, server_id)"},{"line_number":73,"context_line":"            resp, output \u003d self.servers_client.get_console_output("},{"line_number":74,"context_line":"                server_id, None)"},{"line_number":75,"context_line":"            LOG.debug(output)"},{"line_number":76,"context_line":"            raise e"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_50581032","line":73,"updated":"2014-07-10 16:57:00.000000000","message":"This will only work if the server ever booted. A server in ERROR most likely won\u0027t have any console output. You may want to check if the server went to active, and if not why.\nAlso, could it be that there is no server at all if the stack failed before? Do we need to handle this case here?","commit_id":"fc6280a22372b3519489c84720441e31ca577d2e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"e043f36f2412c7f9a788b6b1803e21ebfd5e0c7a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    def _get_admin_network_client(self):"},{"line_number":83,"context_line":"        admin_username \u003d CONF.compute_admin.username"},{"line_number":84,"context_line":"        admin_password \u003d CONF.compute_admin.password"},{"line_number":85,"context_line":"        admin_tenant \u003d CONF.compute_admin.tenant_name"},{"line_number":86,"context_line":"        if not (admin_username and admin_password and admin_tenant):"},{"line_number":87,"context_line":"            msg \u003d (\"Missing Administrative Network API credentials \""},{"line_number":88,"context_line":"                   \"in configuration.\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_7d92d6f6","line":85,"updated":"2014-07-10 16:57:00.000000000","message":"Getting credentials from config is done by get_default in auth.py, which also cares about using the right keystone API version.","commit_id":"fc6280a22372b3519489c84720441e31ca577d2e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"e043f36f2412c7f9a788b6b1803e21ebfd5e0c7a","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            msg \u003d (\"Missing Administrative Network API credentials \""},{"line_number":88,"context_line":"                   \"in configuration.\")"},{"line_number":89,"context_line":"            raise self.skipException(msg)"},{"line_number":90,"context_line":"        os_adm \u003d clients.ComputeAdminManager(interface\u003d\u0027json\u0027)"},{"line_number":91,"context_line":"        return os_adm.network_client"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def _get_external_subnet(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_bdf1ce6c","line":90,"updated":"2014-07-10 16:57:00.000000000","message":"This will raise an InvalidConfiguration exception if the credentials are not there, so you can drop L83 to L85, and do:\n\ntry: \n  os_adm \u003d clients.ComputeAdminManager(interface\u003d\u0027json\u0027)\nexcept InvalidConfiguration:\n              msg \u003d (\"Missing Administrative Network API credentials \"\n                   \"in configuration.\")\n            raise self.skipException(msg)","commit_id":"fc6280a22372b3519489c84720441e31ca577d2e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"e043f36f2412c7f9a788b6b1803e21ebfd5e0c7a","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        return body[\u0027subnet\u0027]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @test.attr(type\u003d\u0027slow\u0027)"},{"line_number":102,"context_line":"    def test_created_resources(self):"},{"line_number":103,"context_line":"        self._test_all_created_ok()"},{"line_number":104,"context_line":"        self._test_created_floating_ip()"},{"line_number":105,"context_line":"        self._test_created_floating_ip_association()"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_cb9395f8","line":102,"updated":"2014-07-10 16:57:00.000000000","message":"Why not having three tests here?","commit_id":"fc6280a22372b3519489c84720441e31ca577d2e"}]}
