)]}'
{"murano_tempest_tests/tests/scenario/application_catalog/test_deployment.py":[{"author":{"_account_id":15168,"name":"Kirill Zaitsev","email":"k.zaitsev@me.com","username":"kzaitsev"},"change_message_id":"bbb1e34d81a7ba55c6eda048c692689bd3970196","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    @classmethod"},{"line_number":27,"context_line":"    def resource_setup(cls):"},{"line_number":28,"context_line":"        if CONF.application_catalog.glare_backend:"},{"line_number":29,"context_line":"            msg \u003d (\"Murano using GLARE backend. \""},{"line_number":30,"context_line":"                   \"Repository tests will be skipped.\")"},{"line_number":31,"context_line":"            raise cls.skipException(msg)"},{"line_number":32,"context_line":"        super(TestMuranoDeployment, cls).resource_setup()"},{"line_number":33,"context_line":"        application_name \u003d utils.generate_name(\u0027Apache\u0027)"},{"line_number":34,"context_line":"        cls.abs_archive_path, dir_with_archive, archive_name \u003d \\"}],"source_content_type":"text/x-python","patch_set":11,"id":"dada55a8_ef55b5fa","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":40},"updated":"2016-07-22 07:33:35.000000000","message":"Please see https://review.openstack.org/#/c/345093/ this commit adds ability to upload packages to GLARE\n\nalso these are not Repository tests, but Deployment tests","commit_id":"99f7045a0f12438e8c6b24fb6bf4f7b465c3c5a2"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"deab159ce0e68f332fcb56889a6247ca41db16d5","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        os.remove(cls.abs_archive_path)"},{"line_number":82,"context_line":"        super(TestMuranoDeployment, cls).resource_cleanup()"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def test_app_deployment(self):"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        \"\"\"Test app deployment"},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_c854b655","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":27},"updated":"2016-08-04 10:43:54.000000000","message":"Please add decorators to each test cases like \n    @testtools.testcase.attr(\u0027smoke\u0027)\n    @testtools.testcase.attr(\u0027scenario\u0027)","commit_id":"c23d30ff45d89f4f96c5b2e7a66090d5b83a0588"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"7430447e56959a52c79f2880f48724923388669c","unresolved":false,"context_lines":[{"line_number":228,"context_line":"            4. Make sure that deployment finished successfully"},{"line_number":229,"context_line":"            5. Check that application is accessible"},{"line_number":230,"context_line":"            6. Check that environment deployed with specific user name"},{"line_number":231,"context_line":"            6. Delete environment"},{"line_number":232,"context_line":"        \"\"\""},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        post_body \u003d self.apache_cinder(userName\u003dutils.generate_name(\u0027user\u0027))"}],"source_content_type":"text/x-python","patch_set":23,"id":"bacf61ea_adecb4bb","line":231,"range":{"start_line":231,"start_character":15,"end_line":231,"end_character":16},"updated":"2016-08-05 11:33:26.000000000","message":"7.","commit_id":"2c4ca70df9967ac1c7d874af6639b17eb0bf2b32"}],"murano_tempest_tests/tests/scenario/base.py":[{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"CONF \u003d config.CONF"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"linux \u003d \"debian-8-m-agent.qcow2\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class BaseScenarioTest(base.BaseTestCase, testtools.TestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_231fbeb8","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":32},"updated":"2016-07-14 11:04:45.000000000","message":"Hm. Let\u0027s move this one to config.","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":35,"context_line":"linux \u003d \"debian-8-m-agent.qcow2\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class BaseScenarioTest(base.BaseTestCase, testtools.TestCase):"},{"line_number":39,"context_line":"    \"\"\"Base test class for Murano Scenario tests.\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_24c7c465","line":38,"range":{"start_line":38,"start_character":6,"end_line":38,"end_character":22},"updated":"2016-07-14 11:04:45.000000000","message":"BaseApplicationCatalogScenarioTest","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":35,"context_line":"linux \u003d \"debian-8-m-agent.qcow2\""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class BaseScenarioTest(base.BaseTestCase, testtools.TestCase):"},{"line_number":39,"context_line":"    \"\"\"Base test class for Murano Scenario tests.\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_be0e2130","line":38,"range":{"start_line":38,"start_character":42,"end_line":38,"end_character":60},"updated":"2016-07-14 11:04:45.000000000","message":"Why it needed here?","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":20773,"name":"Valerii Kovalchuk","email":"kovvalole@gmail.com","username":"vakovalchuk"},"change_message_id":"f85838d84e572e617151f857a9e7f68c45bcdb02","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def setUpClass(cls):"},{"line_number":43,"context_line":"        super(BaseScenarioTest, cls).setUpClass()"},{"line_number":44,"context_line":"        cls.resource_setup()"},{"line_number":45,"context_line":"        cls.pkg_Apache \u003d cls.upload_app("},{"line_number":46,"context_line":"            \u0027io.murano.apps.test.ApacheHttpServerCustom\u0027,"},{"line_number":47,"context_line":"            \u0027Apache HTTP Server Custom\u0027,"},{"line_number":48,"context_line":"            {\"categories\": [\"Web\"], \"tags\": [\"test\"]})"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_70e22f03","line":45,"range":{"start_line":45,"start_character":16,"end_line":45,"end_character":17},"updated":"2016-07-14 08:20:37.000000000","message":"this kind of case looks strange for me, maybe \"pkg_apache\" is better? and the same further","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    def setUpClass(cls):"},{"line_number":43,"context_line":"        super(BaseScenarioTest, cls).setUpClass()"},{"line_number":44,"context_line":"        cls.resource_setup()"},{"line_number":45,"context_line":"        cls.pkg_Apache \u003d cls.upload_app("},{"line_number":46,"context_line":"            \u0027io.murano.apps.test.ApacheHttpServerCustom\u0027,"},{"line_number":47,"context_line":"            \u0027Apache HTTP Server Custom\u0027,"},{"line_number":48,"context_line":"            {\"categories\": [\"Web\"], \"tags\": [\"test\"]})"},{"line_number":49,"context_line":"        cls.pkg_Lighttpd \u003d cls.upload_app("},{"line_number":50,"context_line":"            \u0027io.murano.apps.test.Lighttpd\u0027,"},{"line_number":51,"context_line":"            \u0027Lighttpd\u0027,"},{"line_number":52,"context_line":"            {\"categories\": [\"Web\"], \"tags\": [\"test\"]})"},{"line_number":53,"context_line":"        cls.pkg_Executor \u003d cls.upload_app("},{"line_number":54,"context_line":"            \u0027io.murano.apps.test.UpdateExecutor\u0027,"},{"line_number":55,"context_line":"            \u0027UpdateExecutor\u0027,"},{"line_number":56,"context_line":"            {\"categories\": [\"Web\"], \"tags\": [\"test\"]})"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @classmethod"},{"line_number":59,"context_line":"    def tearDownClass(cls):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_6961a511","line":56,"range":{"start_line":45,"start_character":8,"end_line":56,"end_character":54},"updated":"2016-07-14 11:04:45.000000000","message":"It shouldn\u0027t be in setUpClass here. It should be in tests in resource_setup.","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @classmethod"},{"line_number":59,"context_line":"    def tearDownClass(cls):"},{"line_number":60,"context_line":"        cls.application_catalog_client.delete_package(cls.pkg_Apache[\u0027id\u0027])"},{"line_number":61,"context_line":"        cls.application_catalog_client.delete_package(cls.pkg_Lighttpd[\u0027id\u0027])"},{"line_number":62,"context_line":"        cls.application_catalog_client.delete_package(cls.pkg_Executor[\u0027id\u0027])"},{"line_number":63,"context_line":"        cls.resource_cleanup()"},{"line_number":64,"context_line":"        super(BaseScenarioTest, cls).tearDownClass()"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_e97595cc","line":62,"range":{"start_line":60,"start_character":0,"end_line":62,"end_character":77},"updated":"2016-07-14 11:04:45.000000000","message":"The same as above","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def tearDown(self):"},{"line_number":67,"context_line":"        super(BaseScenarioTest, self).tearDown()"},{"line_number":68,"context_line":"        self.environment_delete()"},{"line_number":69,"context_line":"        self.purge_stacks()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_c959b95d","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":33},"updated":"2016-07-14 11:04:45.000000000","message":"not a better way. So, let\u0027s move this func into end of the each test.","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    def tearDown(self):"},{"line_number":67,"context_line":"        super(BaseScenarioTest, self).tearDown()"},{"line_number":68,"context_line":"        self.environment_delete()"},{"line_number":69,"context_line":"        self.purge_stacks()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    @classmethod"},{"line_number":72,"context_line":"    def get_client_with_isolated_creds(cls, type_of_creds\u003d\"admin\"):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_0954611f","line":69,"range":{"start_line":69,"start_character":8,"end_line":69,"end_character":27},"updated":"2016-07-14 11:04:45.000000000","message":"And let\u0027s move it to resource_cleanup of the test class.","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":20773,"name":"Valerii Kovalchuk","email":"kovvalole@gmail.com","username":"vakovalchuk"},"change_message_id":"f85838d84e572e617151f857a9e7f68c45bcdb02","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            name\u003dcls.__name__, admin_role\u003dcls.admin_role,"},{"line_number":91,"context_line":"            admin_creds\u003dcommon_creds.get_configured_admin_credentials("},{"line_number":92,"context_line":"                \u0027identity_admin\u0027))"},{"line_number":93,"context_line":"        if type_of_creds \u003d\u003d \u0027primary\u0027:"},{"line_number":94,"context_line":"            creds \u003d cls.dynamic_cred.get_primary_creds()"},{"line_number":95,"context_line":"        elif type_of_creds \u003d\u003d \u0027admin\u0027:"},{"line_number":96,"context_line":"            creds \u003d cls.dynamic_cred.get_admin_creds()"},{"line_number":97,"context_line":"        elif type_of_creds \u003d\u003d \u0027alt\u0027:"},{"line_number":98,"context_line":"            creds \u003d cls.dynamic_cred.get_alt_creds()"},{"line_number":99,"context_line":"        else:"},{"line_number":100,"context_line":"            creds \u003d cls.dynamic_cred.get_credentials(type_of_creds)"},{"line_number":101,"context_line":"        cls.dynamic_cred.type_of_creds \u003d type_of_creds"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"        return creds.credentials"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_b0bf77a9","line":100,"range":{"start_line":93,"start_character":8,"end_line":100,"end_character":67},"updated":"2016-07-14 08:20:37.000000000","message":"I think more pythonic way to do this would be to use dictionary like ``cred_types \u003d {\u0027primary\u0027: cls.dynamic_cred.get_primary_creds, \u0027admin\u0027: ... }`` and then ``creds \u003d cred_types[type_of_creds]()``, but ok, it\u0027s not obvious here, what looks better","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":20773,"name":"Valerii Kovalchuk","email":"kovvalole@gmail.com","username":"vakovalchuk"},"change_message_id":"f85838d84e572e617151f857a9e7f68c45bcdb02","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @classmethod"},{"line_number":126,"context_line":"    def resource_cleanup(cls):"},{"line_number":127,"context_line":"        cls.clear_isolated_creds()"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @classmethod"},{"line_number":130,"context_line":"    def clear_isolated_creds(cls):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_d01e83ba","line":127,"range":{"start_line":127,"start_character":8,"end_line":127,"end_character":34},"updated":"2016-07-14 08:20:37.000000000","message":"why not to paste code from clear_isolated_creds() here? looks like this method just invokes another without adding something else. or it is done to maintain some interface for redefining in child classes?","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        if hasattr(cls, \"dynamic_cred\"):"},{"line_number":132,"context_line":"            cls.dynamic_cred.clear_creds()"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def environment_delete(self, timeout\u003d180):"},{"line_number":135,"context_line":"        environment \u003d self.application_catalog_client.\\"},{"line_number":136,"context_line":"            get_environments_list()[0]"},{"line_number":137,"context_line":"        environment_id \u003d environment[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_842318a7","line":134,"range":{"start_line":134,"start_character":4,"end_line":134,"end_character":46},"updated":"2016-07-14 11:04:45.000000000","message":"Shouldn\u0027t this function take an arg with env_id?","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            self.heat_client.wait_for_stack_status(stack[\u0027id\u0027],"},{"line_number":152,"context_line":"                                                   \u0027DELETE_COMPLETE\u0027)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def services_list(self, environment, session):"},{"line_number":155,"context_line":"        return self.application_catalog_client.get_services_list("},{"line_number":156,"context_line":"            environment, session)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def get_service(self, environment, session, service_name):"},{"line_number":159,"context_line":"        for service in self.services_list(environment, session):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_847158ab","line":156,"range":{"start_line":154,"start_character":0,"end_line":156,"end_character":33},"updated":"2016-07-14 11:04:45.000000000","message":"You can use it directly. There is not needed to write such func.","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":160,"context_line":"            if service[\u0027name\u0027] \u003d\u003d service_name:"},{"line_number":161,"context_line":"                return service"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    @classmethod"},{"line_number":164,"context_line":"    def create_volume(cls):"},{"line_number":165,"context_line":"        volume \u003d cls.volume_client.create_volume()[\u0027volume\u0027]"},{"line_number":166,"context_line":"        waiters.wait_for_volume_status(cls.volume_client,"},{"line_number":167,"context_line":"                                       volume[\u0027id\u0027], \u0027available\u0027)"},{"line_number":168,"context_line":"        return volume[\u0027id\u0027]"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    @classmethod"},{"line_number":171,"context_line":"    def delete_volumes(cls):"},{"line_number":172,"context_line":"        volumes \u003d cls.volume_client.list_volumes()[\u0027volumes\u0027]"},{"line_number":173,"context_line":"        if not volumes:"},{"line_number":174,"context_line":"            return"},{"line_number":175,"context_line":"        else:"},{"line_number":176,"context_line":"            for volume in volumes:"},{"line_number":177,"context_line":"                cls.volume_client.delete_volume(volume[\u0027id\u0027])"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def create_snapshot(self, volume_id):"},{"line_number":180,"context_line":"        snapshot \u003d self.snapshot_client.\\"},{"line_number":181,"context_line":"            create_snapshot(volume_id\u003dvolume_id)[\u0027snapshot\u0027]"},{"line_number":182,"context_line":"        waiters.wait_for_snapshot_status(self.snapshot_client,"},{"line_number":183,"context_line":"                                         snapshot[\u0027id\u0027], \u0027available\u0027)"},{"line_number":184,"context_line":"        return snapshot[\u0027id\u0027]"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"    def delete_snapshot(self, snapshot_id):"},{"line_number":187,"context_line":"        self.snapshot_client.delete_snapshot(snapshot_id)"},{"line_number":188,"context_line":"        is_snapshot_deleted \u003d False"},{"line_number":189,"context_line":"        while not is_snapshot_deleted:"},{"line_number":190,"context_line":"            is_snapshot_deleted \u003d self.snapshot_client.\\"},{"line_number":191,"context_line":"                is_resource_deleted(snapshot_id)"},{"line_number":192,"context_line":"            time.sleep(1)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def get_volume(self, environment_id):"},{"line_number":195,"context_line":"        stack \u003d self.get_stack_id(environment_id)"},{"line_number":196,"context_line":"        stack_outputs \u003d self.heat_client.show_stack(stack)[\u0027stack\u0027][\u0027outputs\u0027]"},{"line_number":197,"context_line":"        for output in stack_outputs:"},{"line_number":198,"context_line":"            if \u0027vol\u0027 in output[\u0027output_key\u0027]:"},{"line_number":199,"context_line":"                volume_id \u003d output[\u0027output_value\u0027]"},{"line_number":200,"context_line":"                return self.volume_client.show_volume(volume_id)[\u0027volume\u0027]"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def get_stack_id(self, environment_id):"},{"line_number":203,"context_line":"        stacks \u003d self.heat_client.list_stacks()[\u0027stacks\u0027]"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_c4aa40d2","line":200,"range":{"start_line":163,"start_character":0,"end_line":200,"end_character":74},"updated":"2016-07-14 11:04:45.000000000","message":"These functions needed for your code? I think not.","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            if name in instance[\u0027name\u0027]:"},{"line_number":216,"context_line":"                return instance[\u0027id\u0027]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def check_volume_attached(self, name, volume_id):"},{"line_number":219,"context_line":"        instance_id \u003d self.get_instance_id(name)"},{"line_number":220,"context_line":"        attached_volumes \u003d self.server_client.\\"},{"line_number":221,"context_line":"            list_volume_attachments(instance_id)[\u0027volumeAttachments\u0027]"},{"line_number":222,"context_line":"        assert attached_volumes[0][\u0027id\u0027] \u003d\u003d volume_id"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    def apache_cinder(self, attributes\u003dNone, userName\u003dNone):"},{"line_number":225,"context_line":"        post_body \u003d {"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_04b56830","line":222,"range":{"start_line":218,"start_character":0,"end_line":222,"end_character":53},"updated":"2016-07-14 11:04:45.000000000","message":"The same.","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":224,"context_line":"    def apache_cinder(self, attributes\u003dNone, userName\u003dNone):"},{"line_number":225,"context_line":"        post_body \u003d {"},{"line_number":226,"context_line":"            \"instance\": {"},{"line_number":227,"context_line":"                \"flavor\": \"m1.medium\","},{"line_number":228,"context_line":"                \"image\": linux,"},{"line_number":229,"context_line":"                \"assignFloatingIp\": True,"},{"line_number":230,"context_line":"                \"availabilityZone\": \"nova\","}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_4485b057","line":227,"range":{"start_line":227,"start_character":26,"end_line":227,"end_character":37},"updated":"2016-07-14 11:04:45.000000000","message":"It should be configurable","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":20773,"name":"Valerii Kovalchuk","email":"kovvalole@gmail.com","username":"vakovalchuk"},"change_message_id":"f85838d84e572e617151f857a9e7f68c45bcdb02","unresolved":false,"context_lines":[{"line_number":318,"context_line":"    def get_ip_by_instance_name(self, environment_id, inst_name):"},{"line_number":319,"context_line":"        for service in self.application_catalog_client.\\"},{"line_number":320,"context_line":"                get_services_list(environment_id):"},{"line_number":321,"context_line":"            if inst_name in service[\u0027instance\u0027][\u0027name\u0027]:"},{"line_number":322,"context_line":"                return service[\u0027instance\u0027][\u0027floatingIpAddress\u0027]"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"    def check_port_access(self, ip, port):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_cb49b662","line":321,"range":{"start_line":321,"start_character":25,"end_line":321,"end_character":27},"updated":"2016-07-14 08:20:37.000000000","message":"you use \"in\" because inst_name is the substring of service[\u0027instance\u0027][\u0027name\u0027] or they must be equal? in the latter case you should use \u0027\u003d\u003d\u0027","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"},{"author":{"_account_id":13962,"name":"Victor Ryzhenkin","email":"vryzhenkin@mirantis.com","username":"vryzhenkin"},"change_message_id":"6281620bb2ce0a41e353e0cdd6c49bb26c13ecff","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        if not hasattr(cls, list_name):"},{"line_number":339,"context_line":"            setattr(cls, list_name, [])"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    @classmethod"},{"line_number":342,"context_line":"    def upload_app(cls, app_dir, name, tags):"},{"line_number":343,"context_line":"        parent_dir \u003d utils.acquire_package_directory(app\u003dapp_dir)"},{"line_number":344,"context_line":"        zip_file_path \u003d cls.zip_dir(parent_dir)"},{"line_number":345,"context_line":"        cls.init_list(\"_package_files\")"},{"line_number":346,"context_line":"        cls._package_files.append(zip_file_path)"},{"line_number":347,"context_line":"        return cls.upload_package("},{"line_number":348,"context_line":"            name, zip_file_path, parent_dir, tags)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    @classmethod"},{"line_number":351,"context_line":"    def zip_dir(cls, abs_path):"},{"line_number":352,"context_line":"        path_len \u003d len(abs_path) + 1"},{"line_number":353,"context_line":"        zip_file \u003d abs_path + \".zip\""},{"line_number":354,"context_line":"        with zipfile.ZipFile(zip_file, \"w\") as zf:"},{"line_number":355,"context_line":"            for dir_name, _, files in os.walk(abs_path):"},{"line_number":356,"context_line":"                for filename in files:"},{"line_number":357,"context_line":"                    fn \u003d os.path.join(dir_name, filename)"},{"line_number":358,"context_line":"                    zf.write(fn, fn[path_len:])"},{"line_number":359,"context_line":"        return zip_file"},{"line_number":360,"context_line":""},{"line_number":361,"context_line":"    @classmethod"},{"line_number":362,"context_line":"    def upload_package(cls, package_name, package_path, top_dir, body):"},{"line_number":363,"context_line":"        package \u003d cls.application_catalog_client.upload_package(package_name,"},{"line_number":364,"context_line":"                                                                package_path,"},{"line_number":365,"context_line":"                                                                top_dir, body)"},{"line_number":366,"context_line":"        cls.init_list(\"_packages\")"},{"line_number":367,"context_line":"        cls._packages.append(package)"},{"line_number":368,"context_line":"        return package"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aa78d24_e4f77cd2","line":368,"range":{"start_line":341,"start_character":0,"end_line":368,"end_character":22},"updated":"2016-07-14 11:04:45.000000000","message":"As I know, all of these already implemented in utils. So, also, there is no needs to generate list with packages. Just use addCleanup func to clean it. And it should also used in test itself.","commit_id":"5a80feb90eb4043beaed2c4e74f49ce32096ac2c"}]}
