)]}'
{"tempest/common/validation_resources.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def create_ssh_security_group(os, add_rule\u003dFalse):"},{"line_number":22,"context_line":"    security_group_client \u003d os.security_groups_client"},{"line_number":23,"context_line":"    s_name \u003d data_utils.rand_name(\u0027securitygroup-\u0027)"},{"line_number":24,"context_line":"    s_description \u003d data_utils.rand_name(\u0027description-\u0027)"},{"line_number":25,"context_line":"    security_group \u003d \\"},{"line_number":26,"context_line":"        security_group_client.create_security_group(s_name, s_description)"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_2675e1f9","line":23,"updated":"2015-02-25 14:12:59.000000000","message":"sg_name or security_group_name","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":21,"context_line":"def create_ssh_security_group(os, add_rule\u003dFalse):"},{"line_number":22,"context_line":"    security_group_client \u003d os.security_groups_client"},{"line_number":23,"context_line":"    s_name \u003d data_utils.rand_name(\u0027securitygroup-\u0027)"},{"line_number":24,"context_line":"    s_description \u003d data_utils.rand_name(\u0027description-\u0027)"},{"line_number":25,"context_line":"    security_group \u003d \\"},{"line_number":26,"context_line":"        security_group_client.create_security_group(s_name, s_description)"},{"line_number":27,"context_line":"    if add_rule:"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_c65de57a","line":24,"updated":"2015-02-25 14:12:59.000000000","message":"ditto","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                                                         \u0027tcp\u0027, 22, 22)"},{"line_number":30,"context_line":"        security_group_client.create_security_group_rule(security_group[\u0027id\u0027],"},{"line_number":31,"context_line":"                                                         \u0027icmp\u0027, -1, -1)"},{"line_number":32,"context_line":"    LOG.debug(\"SSH Validation resource security group %s created\""},{"line_number":33,"context_line":"              % s_name)"},{"line_number":34,"context_line":"    return security_group"},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_061ffd08","line":32,"updated":"2015-02-25 14:12:59.000000000","message":"Perhaps include also the info about which rules?\n\nThis is one of the places where the people running hyper-v will have to customize, as ICMP is not available there.\n\nWe could have in future a validation group config option which specifies the list of validation checks to be performed, e.g. icmp, tcp/22, udp/1234, ssh/22","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def create_validation_resources(os, validation_resources\u003dNone):"},{"line_number":38,"context_line":"    # Create and Return the validation resources required to validate a VM"},{"line_number":39,"context_line":"    v_data \u003d {}"},{"line_number":40,"context_line":"    if validation_resources:"},{"line_number":41,"context_line":"        if validation_resources[\u0027keypair\u0027]:"},{"line_number":42,"context_line":"            k_name \u003d data_utils.rand_name(\u0027keypair\u0027)"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_a6cf1128","line":39,"updated":"2015-02-25 14:12:59.000000000","message":"validation_data","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    v_data \u003d {}"},{"line_number":40,"context_line":"    if validation_resources:"},{"line_number":41,"context_line":"        if validation_resources[\u0027keypair\u0027]:"},{"line_number":42,"context_line":"            k_name \u003d data_utils.rand_name(\u0027keypair\u0027)"},{"line_number":43,"context_line":"            v_data[\u0027keypair\u0027] \u003d os.keypairs_client.create_keypair(k_name)"},{"line_number":44,"context_line":"            LOG.debug(\"Validation resource key %s created\" % k_name)"},{"line_number":45,"context_line":"        add_rule \u003d False"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_86c3edeb","line":42,"updated":"2015-02-25 14:12:59.000000000","message":"keypair_name","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"d647bbbf993793a0e4b81b0aa1e0d7a6876f64f9","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                os.keypairs_client.create_keypair(keypair_name)"},{"line_number":47,"context_line":"            LOG.debug(\"Validation resource key %s created\" % keypair_name)"},{"line_number":48,"context_line":"        add_rule \u003d False"},{"line_number":49,"context_line":"        if validation_resources[\u0027security_group\u0027]:"},{"line_number":50,"context_line":"            if validation_resources[\u0027security_group_rules\u0027]:"},{"line_number":51,"context_line":"                add_rule \u003d True"},{"line_number":52,"context_line":"            validation_data[\u0027security_group\u0027] \u003d \\"}],"source_content_type":"text/x-python","patch_set":56,"id":"baa041b7_035e50e9","line":49,"updated":"2015-04-01 15:26:01.000000000","message":"See my previous comment, I think having just one option for SG and SG rules is enough,","commit_id":"0552758c332b27766db99a0dc552c7cb107be310"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"d647bbbf993793a0e4b81b0aa1e0d7a6876f64f9","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            try:"},{"line_number":68,"context_line":"                keypair_cli.delete_keypair(keypair_name)"},{"line_number":69,"context_line":"            except exceptions.NotFound:"},{"line_number":70,"context_line":"                LOG.warn(\"Key %s not found \" % keypair_name)"},{"line_number":71,"context_line":"            except Exception:"},{"line_number":72,"context_line":"                LOG.exception(\u0027Exception raised while deleting key %s\u0027"},{"line_number":73,"context_line":"                              % keypair_name)"}],"source_content_type":"text/x-python","patch_set":56,"id":"baa041b7_66ac0aee","line":70,"updated":"2015-04-01 15:26:01.000000000","message":"NIT; a bit more context in the error message might hep debugging issues.","commit_id":"0552758c332b27766db99a0dc552c7cb107be310"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"10f42d05fa2722a3380cce737830158ddd4147aa","unresolved":false,"context_lines":[{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"def create_ssh_security_group(os, add_rule\u003dTrue):"},{"line_number":23,"context_line":"    security_group_client \u003d os.security_groups_client"},{"line_number":24,"context_line":"    sg_name \u003d data_utils.rand_name(\u0027securitygroup-\u0027)"},{"line_number":25,"context_line":"    sg_description \u003d data_utils.rand_name(\u0027description-\u0027)"}],"source_content_type":"text/x-python","patch_set":58,"id":"7aaa499b_e7668228","line":22,"updated":"2015-04-14 11:42:50.000000000","message":"I think the default False here was OK (see patchset #56).\nThe default of True is driven by the set_validation_resources","commit_id":"37a3a2ab2aa94b828a8d749757e1a6c2eb7b5e6e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"10f42d05fa2722a3380cce737830158ddd4147aa","unresolved":false,"context_lines":[{"line_number":45,"context_line":"            validation_data[\u0027keypair\u0027] \u003d \\"},{"line_number":46,"context_line":"                os.keypairs_client.create_keypair(keypair_name)"},{"line_number":47,"context_line":"            LOG.debug(\"Validation resource key %s created\" % keypair_name)"},{"line_number":48,"context_line":"        add_rule \u003d True"},{"line_number":49,"context_line":"        if validation_resources[\u0027security_group\u0027]:"},{"line_number":50,"context_line":"            if not validation_resources[\u0027security_group_rules\u0027]:"},{"line_number":51,"context_line":"                add_rule \u003d False"}],"source_content_type":"text/x-python","patch_set":58,"id":"7aaa499b_27022a0c","line":48,"updated":"2015-04-14 11:42:50.000000000","message":"Ditto L22","commit_id":"37a3a2ab2aa94b828a8d749757e1a6c2eb7b5e6e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"10f42d05fa2722a3380cce737830158ddd4147aa","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    # Cleanup the vm validation resources"},{"line_number":63,"context_line":"    if validation_data:"},{"line_number":64,"context_line":"        if \u0027keypair\u0027 in validation_data:"},{"line_number":65,"context_line":"            keypair_cli \u003d os.keypairs_client"},{"line_number":66,"context_line":"            keypair_name \u003d validation_data[\u0027keypair\u0027][\u0027name\u0027]"},{"line_number":67,"context_line":"            try:"},{"line_number":68,"context_line":"                keypair_cli.delete_keypair(keypair_name)"}],"source_content_type":"text/x-python","patch_set":58,"id":"7aaa499b_ca202d9e","line":65,"updated":"2015-04-14 11:42:50.000000000","message":"NIT: keypair_cli is slightly confusing, it sounds like CLI - I would prefer keypair_client","commit_id":"37a3a2ab2aa94b828a8d749757e1a6c2eb7b5e6e"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"a5869f1c4d7b37b01da7077eee0ca9bd26cfa18f","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def clear_validation_resources(os, validation_data\u003dNone):"},{"line_number":62,"context_line":"    # Cleanup the vm validation resources"},{"line_number":63,"context_line":"    if validation_data:"},{"line_number":64,"context_line":"        if \u0027keypair\u0027 in validation_data:"},{"line_number":65,"context_line":"            keypair_client \u003d os.keypairs_client"}],"source_content_type":"text/x-python","patch_set":63,"id":"5aa745d1_9e34dede","line":62,"updated":"2015-04-16 13:08:38.000000000","message":"has_exception \u003d None","commit_id":"5203ad30e7f3c0fc6bfb853ffb3d8c5923c8531f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"a5869f1c4d7b37b01da7077eee0ca9bd26cfa18f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            except exceptions.NotFound:"},{"line_number":70,"context_line":"                LOG.warn(\"Key %s not found \" % keypair_name)"},{"line_number":71,"context_line":"            except Exception:"},{"line_number":72,"context_line":"                LOG.exception(\u0027Exception raised while deleting key %s\u0027"},{"line_number":73,"context_line":"                              % keypair_name)"},{"line_number":74,"context_line":"        if \u0027security_group\u0027 in validation_data:"},{"line_number":75,"context_line":"            security_group_client \u003d os.security_groups_client"}],"source_content_type":"text/x-python","patch_set":63,"id":"5aa745d1_1e57ae03","line":72,"updated":"2015-04-16 13:08:38.000000000","message":"has_exception \u003d exc","commit_id":"5203ad30e7f3c0fc6bfb853ffb3d8c5923c8531f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"a5869f1c4d7b37b01da7077eee0ca9bd26cfa18f","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            except exceptions.NotFound:"},{"line_number":80,"context_line":"                LOG.warn(\"Security group %s not found \" % sec_id)"},{"line_number":81,"context_line":"            except Exception:"},{"line_number":82,"context_line":"                LOG.exception(\u0027Exception raised while deleting Security\u0027"},{"line_number":83,"context_line":"                              \u0027group %s \u0027 % sec_id)"},{"line_number":84,"context_line":"        if \u0027floating_ip\u0027 in validation_data:"},{"line_number":85,"context_line":"            floating_client \u003d os.floating_ips_client"}],"source_content_type":"text/x-python","patch_set":63,"id":"5aa745d1_5e74169b","line":82,"updated":"2015-04-16 13:08:38.000000000","message":"has_exception \u003d exc","commit_id":"5203ad30e7f3c0fc6bfb853ffb3d8c5923c8531f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"a5869f1c4d7b37b01da7077eee0ca9bd26cfa18f","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            except exceptions.NotFound:"},{"line_number":90,"context_line":"                LOG.warn(\u0027Floating ip %s not found \u0027 % fip_id)"},{"line_number":91,"context_line":"            except Exception:"},{"line_number":92,"context_line":"                LOG.exception(\u0027Exception raised while deleting ip %s \u0027"},{"line_number":93,"context_line":"                              % fip_id)"}],"source_content_type":"text/x-python","patch_set":63,"id":"5aa745d1_fe72c2ac","line":92,"updated":"2015-04-16 13:08:38.000000000","message":"has_exception \u003d exc","commit_id":"5203ad30e7f3c0fc6bfb853ffb3d8c5923c8531f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"a5869f1c4d7b37b01da7077eee0ca9bd26cfa18f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":63,"id":"5aa745d1_5ee9b619","line":94,"updated":"2015-04-16 13:08:38.000000000","message":"If has_exception:\n   raise RunTimeError(\"Unhandled Exception(s) at clear_validation_resources, check the logs\")\n\nor\n\nIf has_exception:\n   raise has_exception","commit_id":"5203ad30e7f3c0fc6bfb853ffb3d8c5923c8531f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"18e1fc802b732c77a056ae6260f4166a943b9ec3","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            security_group_client \u003d os.security_groups_client"},{"line_number":79,"context_line":"            sec_id \u003d validation_data[\u0027security_group\u0027][\u0027id\u0027]"},{"line_number":80,"context_line":"            try:"},{"line_number":81,"context_line":"                security_group_client.delete_security_group(sec_id)"},{"line_number":82,"context_line":"                security_group_client.wait_for_resource_deletion(sec_id)"},{"line_number":83,"context_line":"            except lib_exc.NotFound:"},{"line_number":84,"context_line":"                LOG.warn(\"Security group %s not found \" % sec_id)"}],"source_content_type":"text/x-python","patch_set":66,"id":"dac4157f_4a6f48c5","line":81,"updated":"2015-04-22 11:00:15.000000000","message":"If it raises 409 because the server deletion not finished, the method will fail.","commit_id":"353224ea55479e1cbad809ba0884a0b9c4c4354b"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"18e1fc802b732c77a056ae6260f4166a943b9ec3","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            sec_id \u003d validation_data[\u0027security_group\u0027][\u0027id\u0027]"},{"line_number":80,"context_line":"            try:"},{"line_number":81,"context_line":"                security_group_client.delete_security_group(sec_id)"},{"line_number":82,"context_line":"                security_group_client.wait_for_resource_deletion(sec_id)"},{"line_number":83,"context_line":"            except lib_exc.NotFound:"},{"line_number":84,"context_line":"                LOG.warn(\"Security group %s not found \" % sec_id)"},{"line_number":85,"context_line":"            except Exception as exc:"}],"source_content_type":"text/x-python","patch_set":66,"id":"dac4157f_4a586832","line":82,"range":{"start_line":82,"start_character":38,"end_line":82,"end_character":64},"updated":"2015-04-22 11:00:15.000000000","message":"This wait loop does not issues delete.","commit_id":"353224ea55479e1cbad809ba0884a0b9c4c4354b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"9077fcea39d095527279504165aa465c27d1c04c","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            try:"},{"line_number":72,"context_line":"                keypair_client.delete_keypair(keypair_name)"},{"line_number":73,"context_line":"            except lib_exc.NotFound:"},{"line_number":74,"context_line":"                LOG.warn(\"Key %s not found \" % keypair_name)"},{"line_number":75,"context_line":"            except Exception as exc:"},{"line_number":76,"context_line":"                LOG.exception(\u0027Exception raised while deleting key %s\u0027"},{"line_number":77,"context_line":"                              % keypair_name)"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_69fff5aa","line":74,"updated":"2015-04-23 23:35:53.000000000","message":"I think this log message should be a bit more clear. Like:\n\n  Keypair %s not found when attempting to delete\n\nJust saying not found could be potentially confusing in the logs.","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":1839,"name":"nithya-ganesan","email":"nithya.ganesan@hp.com","username":"nithya-ganesan"},"change_message_id":"8798a01f699cc907cfdf4a2b7bdeac8025cf6c78","unresolved":false,"context_lines":[{"line_number":71,"context_line":"            try:"},{"line_number":72,"context_line":"                keypair_client.delete_keypair(keypair_name)"},{"line_number":73,"context_line":"            except lib_exc.NotFound:"},{"line_number":74,"context_line":"                LOG.warn(\"Key %s not found \" % keypair_name)"},{"line_number":75,"context_line":"            except Exception as exc:"},{"line_number":76,"context_line":"                LOG.exception(\u0027Exception raised while deleting key %s\u0027"},{"line_number":77,"context_line":"                              % keypair_name)"}],"source_content_type":"text/x-python","patch_set":67,"id":"9abe1de1_1aaa3971","line":74,"in_reply_to":"bab921fb_69fff5aa","updated":"2015-04-27 10:07:05.000000000","message":"Fixed the log string.","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"9077fcea39d095527279504165aa465c27d1c04c","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            security_group_client \u003d os.security_groups_client"},{"line_number":82,"context_line":"            sec_id \u003d validation_data[\u0027security_group\u0027][\u0027id\u0027]"},{"line_number":83,"context_line":"            start_time \u003d int(time.time())"},{"line_number":84,"context_line":"            while True:"},{"line_number":85,"context_line":"                try:"},{"line_number":86,"context_line":"                    security_group_client.delete_security_group(sec_id)"},{"line_number":87,"context_line":"                except lib_exc.NotFound:"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_e938a53f","line":84,"updated":"2015-04-23 23:35:53.000000000","message":"I wouldn\u0027t loop here on the delete call. Instead I would do one delete sec group call and follow it with a wait loop on a get. (which is what wait_for_resource_deletion does)","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"9077fcea39d095527279504165aa465c27d1c04c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            start_time \u003d int(time.time())"},{"line_number":84,"context_line":"            while True:"},{"line_number":85,"context_line":"                try:"},{"line_number":86,"context_line":"                    security_group_client.delete_security_group(sec_id)"},{"line_number":87,"context_line":"                except lib_exc.NotFound:"},{"line_number":88,"context_line":"                    LOG.warn(\"Security group %s not found \" % sec_id)"},{"line_number":89,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_29ba1dc1","line":86,"updated":"2015-04-23 23:35:53.000000000","message":"Isn\u0027t this an async call. Do you want to use wait_for_resource_deletion(sec_id) here?","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"e3f59d3a693c92cfe5cc7633b3b7e78458d063ce","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            start_time \u003d int(time.time())"},{"line_number":84,"context_line":"            while True:"},{"line_number":85,"context_line":"                try:"},{"line_number":86,"context_line":"                    security_group_client.delete_security_group(sec_id)"},{"line_number":87,"context_line":"                except lib_exc.NotFound:"},{"line_number":88,"context_line":"                    LOG.warn(\"Security group %s not found \" % sec_id)"},{"line_number":89,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_47713f43","line":86,"in_reply_to":"bab921fb_29ba1dc1","updated":"2015-04-27 07:09:31.000000000","message":"It was used in previous version.\nThe problem with that method it does not reissue the delete on 409. For example if the server in `deleting` state the security group deletion will fail.\n\nThe `is_resource_deleted` uses \u0027show_\u0027 not \u0027delete_\u0027.","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":1839,"name":"nithya-ganesan","email":"nithya.ganesan@hp.com","username":"nithya-ganesan"},"change_message_id":"8798a01f699cc907cfdf4a2b7bdeac8025cf6c78","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            start_time \u003d int(time.time())"},{"line_number":84,"context_line":"            while True:"},{"line_number":85,"context_line":"                try:"},{"line_number":86,"context_line":"                    security_group_client.delete_security_group(sec_id)"},{"line_number":87,"context_line":"                except lib_exc.NotFound:"},{"line_number":88,"context_line":"                    LOG.warn(\"Security group %s not found \" % sec_id)"},{"line_number":89,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":67,"id":"9abe1de1_eb8c5937","line":86,"in_reply_to":"bab921fb_29ba1dc1","updated":"2015-04-27 10:07:05.000000000","message":"Shall I retain it as it is now Matt? I have tried to address 409 error with the while loop.","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"9077fcea39d095527279504165aa465c27d1c04c","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                try:"},{"line_number":86,"context_line":"                    security_group_client.delete_security_group(sec_id)"},{"line_number":87,"context_line":"                except lib_exc.NotFound:"},{"line_number":88,"context_line":"                    LOG.warn(\"Security group %s not found \" % sec_id)"},{"line_number":89,"context_line":"                    break"},{"line_number":90,"context_line":"                except Exception as exc:"},{"line_number":91,"context_line":"                    if int(time.time()) - start_time \u003e\u003d\\"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_492d5145","line":88,"updated":"2015-04-23 23:35:53.000000000","message":"Ditto","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":1839,"name":"nithya-ganesan","email":"nithya.ganesan@hp.com","username":"nithya-ganesan"},"change_message_id":"8798a01f699cc907cfdf4a2b7bdeac8025cf6c78","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                try:"},{"line_number":86,"context_line":"                    security_group_client.delete_security_group(sec_id)"},{"line_number":87,"context_line":"                except lib_exc.NotFound:"},{"line_number":88,"context_line":"                    LOG.warn(\"Security group %s not found \" % sec_id)"},{"line_number":89,"context_line":"                    break"},{"line_number":90,"context_line":"                except Exception as exc:"},{"line_number":91,"context_line":"                    if int(time.time()) - start_time \u003e\u003d\\"}],"source_content_type":"text/x-python","patch_set":67,"id":"9abe1de1_6b79692f","line":88,"in_reply_to":"bab921fb_492d5145","updated":"2015-04-27 10:07:05.000000000","message":"Done","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"e3f59d3a693c92cfe5cc7633b3b7e78458d063ce","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                try:"},{"line_number":86,"context_line":"                    security_group_client.delete_security_group(sec_id)"},{"line_number":87,"context_line":"                except lib_exc.NotFound:"},{"line_number":88,"context_line":"                    LOG.warn(\"Security group %s not found \" % sec_id)"},{"line_number":89,"context_line":"                    break"},{"line_number":90,"context_line":"                except Exception as exc:"},{"line_number":91,"context_line":"                    if int(time.time()) - start_time \u003e\u003d\\"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_67c20336","line":88,"in_reply_to":"bab921fb_492d5145","updated":"2015-04-27 07:09:31.000000000","message":"I agree we should not generate a warning a successful delete,\nNormally nothing else delete these resources so if it not found at the first time it can be a warning.\n\nIn the security group case we do not really need to wait for delete, the important is to wait for accepting the delete call.\n\n(I am ok with just replacing the NotFound warnings to pass in order to not make it more complex.)","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":1839,"name":"nithya-ganesan","email":"nithya.ganesan@hp.com","username":"nithya-ganesan"},"change_message_id":"8798a01f699cc907cfdf4a2b7bdeac8025cf6c78","unresolved":false,"context_lines":[{"line_number":85,"context_line":"                try:"},{"line_number":86,"context_line":"                    security_group_client.delete_security_group(sec_id)"},{"line_number":87,"context_line":"                except lib_exc.NotFound:"},{"line_number":88,"context_line":"                    LOG.warn(\"Security group %s not found \" % sec_id)"},{"line_number":89,"context_line":"                    break"},{"line_number":90,"context_line":"                except Exception as exc:"},{"line_number":91,"context_line":"                    if int(time.time()) - start_time \u003e\u003d\\"}],"source_content_type":"text/x-python","patch_set":67,"id":"9abe1de1_0bb66ddc","line":88,"in_reply_to":"bab921fb_67c20336","updated":"2015-04-27 10:07:05.000000000","message":"Will change it.","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"9077fcea39d095527279504165aa465c27d1c04c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                except lib_exc.NotFound:"},{"line_number":88,"context_line":"                    LOG.warn(\"Security group %s not found \" % sec_id)"},{"line_number":89,"context_line":"                    break"},{"line_number":90,"context_line":"                except Exception as exc:"},{"line_number":91,"context_line":"                    if int(time.time()) - start_time \u003e\u003d\\"},{"line_number":92,"context_line":"                            CONF.compute.build_timeout:"},{"line_number":93,"context_line":"                        if not has_exception:"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_89c5a93d","line":90,"updated":"2015-04-23 23:35:53.000000000","message":"This logic doesn\u0027t seems weird to me. If the delete raises any exception wait and try again unless the timeout is exceeded. Won\u0027t this end up always logging a warning on success, because it\u0027ll 404 when the delete completes?","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":1839,"name":"nithya-ganesan","email":"nithya.ganesan@hp.com","username":"nithya-ganesan"},"change_message_id":"8798a01f699cc907cfdf4a2b7bdeac8025cf6c78","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                except lib_exc.NotFound:"},{"line_number":88,"context_line":"                    LOG.warn(\"Security group %s not found \" % sec_id)"},{"line_number":89,"context_line":"                    break"},{"line_number":90,"context_line":"                except Exception as exc:"},{"line_number":91,"context_line":"                    if int(time.time()) - start_time \u003e\u003d\\"},{"line_number":92,"context_line":"                            CONF.compute.build_timeout:"},{"line_number":93,"context_line":"                        if not has_exception:"}],"source_content_type":"text/x-python","patch_set":67,"id":"9abe1de1_4bc4653f","line":90,"in_reply_to":"bab921fb_89c5a93d","updated":"2015-04-27 10:07:05.000000000","message":"Will retain it as mentioned above.","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"9077fcea39d095527279504165aa465c27d1c04c","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                floating_client.delete_floating_ip(fip_id)"},{"line_number":103,"context_line":"            except lib_exc.NotFound:"},{"line_number":104,"context_line":"                LOG.warn(\u0027Floating ip %s not found \u0027 % fip_id)"},{"line_number":105,"context_line":"            except Exception as exc:"},{"line_number":106,"context_line":"                LOG.exception(\u0027Exception raised while deleting ip %s \u0027"},{"line_number":107,"context_line":"                              % fip_id)"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_e929c538","line":104,"updated":"2015-04-23 23:35:53.000000000","message":"Ditto","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":1839,"name":"nithya-ganesan","email":"nithya.ganesan@hp.com","username":"nithya-ganesan"},"change_message_id":"8798a01f699cc907cfdf4a2b7bdeac8025cf6c78","unresolved":false,"context_lines":[{"line_number":101,"context_line":"            try:"},{"line_number":102,"context_line":"                floating_client.delete_floating_ip(fip_id)"},{"line_number":103,"context_line":"            except lib_exc.NotFound:"},{"line_number":104,"context_line":"                LOG.warn(\u0027Floating ip %s not found \u0027 % fip_id)"},{"line_number":105,"context_line":"            except Exception as exc:"},{"line_number":106,"context_line":"                LOG.exception(\u0027Exception raised while deleting ip %s \u0027"},{"line_number":107,"context_line":"                              % fip_id)"}],"source_content_type":"text/x-python","patch_set":67,"id":"9abe1de1_cbe635e8","line":104,"in_reply_to":"bab921fb_e929c538","updated":"2015-04-27 10:07:05.000000000","message":"Will fix the logstring","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"524df042e5a720c76562fa4abe3b733a776d4cd2","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            sec_id \u003d validation_data[\u0027security_group\u0027][\u0027id\u0027]"},{"line_number":83,"context_line":"            try:"},{"line_number":84,"context_line":"                security_group_client.delete_security_group(sec_id)"},{"line_number":85,"context_line":"                security_group_client.wait_for_resource_deletion(sec_id)"},{"line_number":86,"context_line":"            except lib_exc.NotFound:"},{"line_number":87,"context_line":"                LOG.warn(\"Security group %s is not found when attempting to \""},{"line_number":88,"context_line":"                         \" delete\" % sec_id)"}],"source_content_type":"text/x-python","patch_set":68,"id":"3acd31a7_96ae8f7f","line":85,"updated":"2015-05-05 14:20:47.000000000","message":"This doesn\u0027t really need to be in the try, but I guess it doesn\u0027t hurt.","commit_id":"a90fe60e89d549db6d99d66d3c67e39a441c7919"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"524df042e5a720c76562fa4abe3b733a776d4cd2","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                LOG.exception(\u0027Conflict while deleting security \u0027"},{"line_number":91,"context_line":"                              \u0027group %s VM might not be deleted \u0027 % sec_id)"},{"line_number":92,"context_line":"                if not has_exception:"},{"line_number":93,"context_line":"                    has_exception \u003d exc"},{"line_number":94,"context_line":"            except Exception as exc:"},{"line_number":95,"context_line":"                LOG.exception(\u0027Exception raised while deleting security \u0027"},{"line_number":96,"context_line":"                              \u0027group %s \u0027 % sec_id)"}],"source_content_type":"text/x-python","patch_set":68,"id":"3acd31a7_f6714345","line":93,"updated":"2015-05-05 14:20:47.000000000","message":"This won\u0027t work because exc isn\u0027t defined here.","commit_id":"a90fe60e89d549db6d99d66d3c67e39a441c7919"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"249d29a2dd8a68dc1c26117564d60ebb92869aa8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            validation_data[\u0027security_group\u0027] \u003d \\"},{"line_number":55,"context_line":"                create_ssh_security_group(os, add_rule)"},{"line_number":56,"context_line":"        if validation_resources[\u0027floating_ip\u0027]:"},{"line_number":57,"context_line":"            floating_client \u003d os.floating_ips_client"},{"line_number":58,"context_line":"            validation_data[\u0027floating_ip\u0027] \u003d \\"},{"line_number":59,"context_line":"                floating_client.create_floating_ip()"},{"line_number":60,"context_line":"    return validation_data"}],"source_content_type":"text/x-python","patch_set":69,"id":"1aca2d91_4e78ae8f","line":57,"updated":"2015-05-07 15:06:25.000000000","message":"Is this alias just for length?","commit_id":"222efd7b4cd3dc972e0d41ddf1a060aa9d6fd36f"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"249d29a2dd8a68dc1c26117564d60ebb92869aa8","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                LOG.warn(\"Keypair %s is not found when attempting to delete\""},{"line_number":74,"context_line":"                         % keypair_name)"},{"line_number":75,"context_line":"            except Exception as exc:"},{"line_number":76,"context_line":"                LOG.exception(\u0027Exception raised while deleting key %s\u0027"},{"line_number":77,"context_line":"                              % keypair_name)"},{"line_number":78,"context_line":"                if not has_exception:"},{"line_number":79,"context_line":"                    has_exception \u003d exc"}],"source_content_type":"text/x-python","patch_set":69,"id":"1aca2d91_6e06cacf","line":76,"updated":"2015-05-07 15:06:25.000000000","message":"If we\u0027re potentially re-raising maybe a log error is a better choice for this, since this will result it double tracebacks in the logs.","commit_id":"222efd7b4cd3dc972e0d41ddf1a060aa9d6fd36f"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"249d29a2dd8a68dc1c26117564d60ebb92869aa8","unresolved":false,"context_lines":[{"line_number":87,"context_line":"                LOG.warn(\"Security group %s is not found when attempting to \""},{"line_number":88,"context_line":"                         \" delete\" % sec_id)"},{"line_number":89,"context_line":"            except lib_exc.Conflict as exc:"},{"line_number":90,"context_line":"                LOG.exception(\u0027Conflict while deleting security \u0027"},{"line_number":91,"context_line":"                              \u0027group %s VM might not be deleted \u0027 % sec_id)"},{"line_number":92,"context_line":"                if not has_exception:"},{"line_number":93,"context_line":"                    has_exception \u003d exc"}],"source_content_type":"text/x-python","patch_set":69,"id":"1aca2d91_0e451616","line":90,"updated":"2015-05-07 15:06:25.000000000","message":"If we\u0027re potentially re-raising maybe a log error is a better choice for this, since this will result it double tracebacks in the logs.","commit_id":"222efd7b4cd3dc972e0d41ddf1a060aa9d6fd36f"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"249d29a2dd8a68dc1c26117564d60ebb92869aa8","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                if not has_exception:"},{"line_number":93,"context_line":"                    has_exception \u003d exc"},{"line_number":94,"context_line":"            except Exception as exc:"},{"line_number":95,"context_line":"                LOG.exception(\u0027Exception raised while deleting security \u0027"},{"line_number":96,"context_line":"                              \u0027group %s \u0027 % sec_id)"},{"line_number":97,"context_line":"                if not has_exception:"},{"line_number":98,"context_line":"                    has_exception \u003d exc"}],"source_content_type":"text/x-python","patch_set":69,"id":"1aca2d91_ee73fa7e","line":95,"updated":"2015-05-07 15:06:25.000000000","message":"Ditto","commit_id":"222efd7b4cd3dc972e0d41ddf1a060aa9d6fd36f"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"249d29a2dd8a68dc1c26117564d60ebb92869aa8","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                LOG.warn(\u0027Floating ip %s not found while attempting to delete\u0027"},{"line_number":106,"context_line":"                         % fip_id)"},{"line_number":107,"context_line":"            except Exception as exc:"},{"line_number":108,"context_line":"                LOG.exception(\u0027Exception raised while deleting ip %s \u0027"},{"line_number":109,"context_line":"                              % fip_id)"},{"line_number":110,"context_line":"                if not has_exception:"},{"line_number":111,"context_line":"                    has_exception \u003d exc"}],"source_content_type":"text/x-python","patch_set":69,"id":"1aca2d91_ae04e2bf","line":108,"updated":"2015-05-07 15:06:25.000000000","message":"If we\u0027re potentially re-raising maybe a log error is a better choice for this, since this will result it double tracebacks in the logs.","commit_id":"222efd7b4cd3dc972e0d41ddf1a060aa9d6fd36f"}],"tempest/index.html":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"e20cbf4661ead6ceb1aea3b02f79d65f38857032","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":50,"id":"fa963961_e416c054","updated":"2015-03-26 20:51:47.000000000","message":"I guess it unintentional","commit_id":"5d994d0ef87ba4d011ddc46e0b061a9bd236daeb"}],"tempest/test.py":[{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    _service \u003d None"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    # Resources required to validate a server using ssh"},{"line_number":217,"context_line":"    v_data \u003d {}"},{"line_number":218,"context_line":"    validation_resources \u003d {}"},{"line_number":219,"context_line":"    network_resources \u003d {}"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_c338773f","line":217,"updated":"2015-02-25 14:12:59.000000000","message":"validation_data","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    # Resources required to validate a server using ssh"},{"line_number":217,"context_line":"    v_data \u003d {}"},{"line_number":218,"context_line":"    validation_resources \u003d {}"},{"line_number":219,"context_line":"    network_resources \u003d {}"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    # NOTE(sdague): log_format is defined inline here instead of using the oslo"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_632d0bfe","line":218,"updated":"2015-02-25 14:12:59.000000000","message":"Can we use a single dict, like network_resources? \n\nThe approach used there is to have a dict of resource_key:boolean which is replaced after creation by resource_key:resource\n\nAlternatively we could add a created_resources extra key.","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":327,"context_line":"            cls.v_data \u003d vresources.create_validation_resources("},{"line_number":328,"context_line":"                cls.os, cls.validation_resources)"},{"line_number":329,"context_line":"        else:"},{"line_number":330,"context_line":"            LOG.warn(\"ssh validation resources are not created\")"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"    @classmethod"},{"line_number":333,"context_line":"    def resource_cleanup(cls):"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_63334b14","line":330,"updated":"2015-02-25 14:12:59.000000000","message":"The message could provide more info for troubleshooting, e.g. No client manager named \"os\" found, validation resources not created.","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        resources, in case a failure during `resource_setup` should happen."},{"line_number":337,"context_line":"        \"\"\""},{"line_number":338,"context_line":"        if hasattr(cls, \"os\"):"},{"line_number":339,"context_line":"            if cls.v_data:"},{"line_number":340,"context_line":"                vresources.clear_validation_resources(cls.os, cls.v_data)"},{"line_number":341,"context_line":"        else:"},{"line_number":342,"context_line":"            LOG.warn(\"ssh validation resources might not be deleted\")"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_465d7514","line":339,"updated":"2015-02-25 14:12:59.000000000","message":"I would switch the ifs here. If not very likely that validation resources do exists and cls.os doesn\u0027t - also reverting the order allows for a better message in L342.","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":406,"context_line":"        return admin_client"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":"    @classmethod"},{"line_number":409,"context_line":"    def prepare_validation_resources(cls):"},{"line_number":410,"context_line":"        keypair \u003d False"},{"line_number":411,"context_line":"        floating_ip \u003d False"},{"line_number":412,"context_line":"        if CONF.validation.auth_method.lower() \u003d\u003d \"keypair\":"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_89978beb","line":409,"updated":"2015-02-25 14:12:59.000000000","message":"I think the split into prepare and set validation resources is a bit confusing. In fact the same could be achieved with just one function. \n\nConfiguration checks could be done in set_validation_resources when the corresponding parameter is None - see comment on L421.\n\nAlso this approach is all or nothing: either we take all defaults from configuration, or none.","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            keypair \u003d True"},{"line_number":414,"context_line":"        if CONF.validation.connect_method.lower() \u003d\u003d \"floating\":"},{"line_number":415,"context_line":"            floating_ip \u003d True"},{"line_number":416,"context_line":"        cls.set_validation_resources(keypair\u003dkeypair, security_group\u003dTrue,"},{"line_number":417,"context_line":"                                     security_group_rules\u003dTrue,"},{"line_number":418,"context_line":"                                     floating_ip\u003dfloating_ip)"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_63918b46","line":416,"updated":"2015-02-25 14:12:59.000000000","message":"In nova-network based jobs, nova is configured with:\n\nallow_same_net_traffic \u003d True\nnetwork_manager \u003d nova.network.manager.FlatDHCPManager\n\nWhen using the fixed_ip, the test client must be on the same network as the VMs, so no security groups are required\n\nIt may seems an un-necessary optimization, but I think it would help in verifying that the allow_same_net_traffic option is working fine.","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":418,"context_line":"                                     floating_ip\u003dfloating_ip)"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"    @classmethod"},{"line_number":421,"context_line":"    def set_validation_resources(self, keypair\u003dFalse, security_group\u003dFalse,"},{"line_number":422,"context_line":"                                 security_group_rules\u003dFalse,"},{"line_number":423,"context_line":"                                 floating_ip\u003dFalse):"},{"line_number":424,"context_line":"        \"\"\"Specify which ssh server validation resources should be created"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_494cb3c8","line":421,"updated":"2015-02-25 14:12:59.000000000","message":"With this implementation we cannot express all the cases test cases may need, so we need the prepare_ wrapper around.\n\nThere are three use cases which we need to cover:\n- test class does not require validation. It should not do anything, and no resource will be created by default. If we get to a point where most tests are doing validation, which can still change this\n- test class requires validation - and does not need to care about which resources are needed for that, it\u0027s all set in the configuration. So it should be enough to call \"set_validation_resources()\" with no parameters\n- test class requires validation, and wants to override the configuration by selecting specific resources, e.g. it wants to use floating_ip no matter what. it should call \"set_validation_resources(floating_ip\u003dTrue)\". or it doesn\u0027t want a keypair injected, it should call \"set_validation_resources(keypair\u003dFalse)\".\n\nSo the solution I propose is that each value should be either None, True or False, with None \u003d\u003d \"use default from config\", True \u003d\u003d override to True and False \u003d\u003d override to False.\n\nThe signature of the method uses \"None\" as default value for all parameters.\n\nFor simplicity we consider the case validation_resources \u003d\u003d {} as a shortcut for all resources set to False i.e. do nothing, which means that not calling set_validation_resources is equivalent to requesting to not create any resource.","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"2977af8180f77f8567147aad10ff7c7070308143","unresolved":false,"context_lines":[{"line_number":421,"context_line":"    def set_validation_resources(self, keypair\u003dFalse, security_group\u003dFalse,"},{"line_number":422,"context_line":"                                 security_group_rules\u003dFalse,"},{"line_number":423,"context_line":"                                 floating_ip\u003dFalse):"},{"line_number":424,"context_line":"        \"\"\"Specify which ssh server validation resources should be created"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"        @param keypair"},{"line_number":427,"context_line":"        @param security_group"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba7be1f8_900b238d","line":424,"updated":"2015-02-25 14:12:59.000000000","message":"In case you decide to go the solution I propose in L421, you would have to update the doc here","commit_id":"d4bf1a11fede7ccab2ae8f8f7c9b19c98a0d3f94"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"d647bbbf993793a0e4b81b0aa1e0d7a6876f64f9","unresolved":false,"context_lines":[{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    @classmethod"},{"line_number":434,"context_line":"    def set_validation_resources(cls, keypair\u003dNone, floating_ip\u003dNone,"},{"line_number":435,"context_line":"                                 security_group\u003dNone,"},{"line_number":436,"context_line":"                                 security_group_rules\u003dNone):"},{"line_number":437,"context_line":"        \"\"\"Specify which ssh server validation resources should be created."},{"line_number":438,"context_line":"        Each of the argument must be set to either None, True or False, with"}],"source_content_type":"text/x-python","patch_set":56,"id":"baa041b7_c09e1e07","line":435,"updated":"2015-04-01 15:26:01.000000000","message":"I\u0027m not convinced we need two different options for SG and SG rules.\nEither we create a SG with rules or we create nothing. A SG without rules does not help, and rules without a SG could be added to \"Default\" SG, but I think it\u0027s better to create an independent security group anyways, and avoid polluting Default.","commit_id":"0552758c332b27766db99a0dc552c7cb107be310"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"d647bbbf993793a0e4b81b0aa1e0d7a6876f64f9","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        if security_group is None:"},{"line_number":459,"context_line":"            security_group \u003d False"},{"line_number":460,"context_line":"        if security_group_rules is None:"},{"line_number":461,"context_line":"            security_group_rules \u003d False"},{"line_number":462,"context_line":"        if not cls.validation_resources:"},{"line_number":463,"context_line":"            cls.validation_resources \u003d {"},{"line_number":464,"context_line":"                \u0027keypair\u0027: keypair,"}],"source_content_type":"text/x-python","patch_set":56,"id":"baa041b7_00b646dc","line":461,"updated":"2015-04-01 15:26:01.000000000","message":"Some cloud deployments allow communication between VMs by default, others don\u0027t. If I\u0027m not mistaken the n-net based one from the gate will, and the neutron one won\u0027t. In any case service_avaiable/neutron is not enough to decide whether SG should be created or not, as there may be a neutron cloud which does not require SG rules and a n-net one which does.\nBecause of this we cannot rely on existing configuration for this. But I believe we should default this to True, so that it will work for all scenarios.\nIf a test wants to verify the behaviour in absence of SG rules, it can always override to False.","commit_id":"0552758c332b27766db99a0dc552c7cb107be310"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"10f42d05fa2722a3380cce737830158ddd4147aa","unresolved":false,"context_lines":[{"line_number":456,"context_line":"            else:"},{"line_number":457,"context_line":"                floating_ip \u003d False"},{"line_number":458,"context_line":"        if security_group is None:"},{"line_number":459,"context_line":"            security_group \u003d False"},{"line_number":460,"context_line":"        if security_group_rules is None:"},{"line_number":461,"context_line":"            security_group_rules \u003d False"},{"line_number":462,"context_line":"        if not cls.validation_resources:"}],"source_content_type":"text/x-python","patch_set":58,"id":"7aaa499b_c7e8267f","line":459,"updated":"2015-04-14 11:42:50.000000000","message":"Default should be True","commit_id":"37a3a2ab2aa94b828a8d749757e1a6c2eb7b5e6e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"10f42d05fa2722a3380cce737830158ddd4147aa","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        if security_group is None:"},{"line_number":459,"context_line":"            security_group \u003d False"},{"line_number":460,"context_line":"        if security_group_rules is None:"},{"line_number":461,"context_line":"            security_group_rules \u003d False"},{"line_number":462,"context_line":"        if not cls.validation_resources:"},{"line_number":463,"context_line":"            cls.validation_resources \u003d {"},{"line_number":464,"context_line":"                \u0027keypair\u0027: keypair,"}],"source_content_type":"text/x-python","patch_set":58,"id":"7aaa499b_67fef239","line":461,"updated":"2015-04-14 11:42:50.000000000","message":"Default should be True","commit_id":"37a3a2ab2aa94b828a8d749757e1a6c2eb7b5e6e"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"9077fcea39d095527279504165aa465c27d1c04c","unresolved":false,"context_lines":[{"line_number":342,"context_line":"    def resource_setup(cls):"},{"line_number":343,"context_line":"        \"\"\"Class level resource setup for test cases."},{"line_number":344,"context_line":"        \"\"\""},{"line_number":345,"context_line":"        if hasattr(cls, \"os\"):"},{"line_number":346,"context_line":"            cls.validation_resources \u003d vresources.create_validation_resources("},{"line_number":347,"context_line":"                cls.os, cls.validation_resources)"},{"line_number":348,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_e629f238","line":345,"updated":"2015-04-23 23:35:53.000000000","message":"So don\u0027t a lot of tests use cls.manager? What happens if you need to ssh in using the alt or admin user?","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":1839,"name":"nithya-ganesan","email":"nithya.ganesan@hp.com","username":"nithya-ganesan"},"change_message_id":"8798a01f699cc907cfdf4a2b7bdeac8025cf6c78","unresolved":false,"context_lines":[{"line_number":342,"context_line":"    def resource_setup(cls):"},{"line_number":343,"context_line":"        \"\"\"Class level resource setup for test cases."},{"line_number":344,"context_line":"        \"\"\""},{"line_number":345,"context_line":"        if hasattr(cls, \"os\"):"},{"line_number":346,"context_line":"            cls.validation_resources \u003d vresources.create_validation_resources("},{"line_number":347,"context_line":"                cls.os, cls.validation_resources)"},{"line_number":348,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":67,"id":"9abe1de1_baaa2d84","line":345,"in_reply_to":"bab921fb_3fde923f","updated":"2015-04-27 10:07:05.000000000","message":"Hi Matt,\n\nCan I leave it the way it is for the initial implementation as suggested by Andrea?","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"c216527884418adb73c80d3f0068fe396922d533","unresolved":false,"context_lines":[{"line_number":342,"context_line":"    def resource_setup(cls):"},{"line_number":343,"context_line":"        \"\"\"Class level resource setup for test cases."},{"line_number":344,"context_line":"        \"\"\""},{"line_number":345,"context_line":"        if hasattr(cls, \"os\"):"},{"line_number":346,"context_line":"            cls.validation_resources \u003d vresources.create_validation_resources("},{"line_number":347,"context_line":"                cls.os, cls.validation_resources)"},{"line_number":348,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_3fde923f","line":345,"in_reply_to":"bab921fb_e629f238","updated":"2015-04-24 20:22:34.000000000","message":"The assumption is this initial implementation is that we only support the primary credentials.  Once that works fine we can extend it to support alt or admin or role based creds, but I think that\u0027s not the priority.\nWe should have a comment in here to explain it though.\n\nRegarding cls.os or cls.manager, with https://review.openstack.org/#/c/153681/ we could check what\u0027s in cls.credentials, which might be a bit better. How test access clients from the various managers is something that could help a refactor.\n\nAs soon as we migrate the first test that uses validation resources and cls.manager we can rename its client manager to os, or add an if for \"manager\" here.","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"9077fcea39d095527279504165aa465c27d1c04c","unresolved":false,"context_lines":[{"line_number":346,"context_line":"            cls.validation_resources \u003d vresources.create_validation_resources("},{"line_number":347,"context_line":"                cls.os, cls.validation_resources)"},{"line_number":348,"context_line":"        else:"},{"line_number":349,"context_line":"            LOG.warn(\"No client manager named \\\"os\\\" found,\""},{"line_number":350,"context_line":"                     \"validation resources not created\")"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_c6694ec0","line":349,"updated":"2015-04-23 23:35:53.000000000","message":"What are the slashes for?","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":1839,"name":"nithya-ganesan","email":"nithya.ganesan@hp.com","username":"nithya-ganesan"},"change_message_id":"8798a01f699cc907cfdf4a2b7bdeac8025cf6c78","unresolved":false,"context_lines":[{"line_number":346,"context_line":"            cls.validation_resources \u003d vresources.create_validation_resources("},{"line_number":347,"context_line":"                cls.os, cls.validation_resources)"},{"line_number":348,"context_line":"        else:"},{"line_number":349,"context_line":"            LOG.warn(\"No client manager named \\\"os\\\" found,\""},{"line_number":350,"context_line":"                     \"validation resources not created\")"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":67,"id":"9abe1de1_1a9c7968","line":349,"in_reply_to":"bab921fb_c6694ec0","updated":"2015-04-27 10:07:05.000000000","message":"I have changed the log string","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"9077fcea39d095527279504165aa465c27d1c04c","unresolved":false,"context_lines":[{"line_number":456,"context_line":"            else:"},{"line_number":457,"context_line":"                floating_ip \u003d False"},{"line_number":458,"context_line":"        if security_group is None:"},{"line_number":459,"context_line":"            security_group \u003d True"},{"line_number":460,"context_line":"        if security_group_rules is None:"},{"line_number":461,"context_line":"            security_group_rules \u003d True"},{"line_number":462,"context_line":"        if not cls.validation_resources:"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_86dc7613","line":459,"updated":"2015-04-23 23:35:53.000000000","message":"So this means that if a security group is not set make one right? Maybe we should fix the docstring to indicate that.","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":1839,"name":"nithya-ganesan","email":"nithya.ganesan@hp.com","username":"nithya-ganesan"},"change_message_id":"8798a01f699cc907cfdf4a2b7bdeac8025cf6c78","unresolved":false,"context_lines":[{"line_number":456,"context_line":"            else:"},{"line_number":457,"context_line":"                floating_ip \u003d False"},{"line_number":458,"context_line":"        if security_group is None:"},{"line_number":459,"context_line":"            security_group \u003d True"},{"line_number":460,"context_line":"        if security_group_rules is None:"},{"line_number":461,"context_line":"            security_group_rules \u003d True"},{"line_number":462,"context_line":"        if not cls.validation_resources:"}],"source_content_type":"text/x-python","patch_set":67,"id":"9abe1de1_da8cc137","line":459,"in_reply_to":"bab921fb_86dc7613","updated":"2015-04-27 10:07:05.000000000","message":"Fixed the docstring","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"9077fcea39d095527279504165aa465c27d1c04c","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        if security_group is None:"},{"line_number":459,"context_line":"            security_group \u003d True"},{"line_number":460,"context_line":"        if security_group_rules is None:"},{"line_number":461,"context_line":"            security_group_rules \u003d True"},{"line_number":462,"context_line":"        if not cls.validation_resources:"},{"line_number":463,"context_line":"            cls.validation_resources \u003d {"},{"line_number":464,"context_line":"                \u0027keypair\u0027: keypair,"}],"source_content_type":"text/x-python","patch_set":67,"id":"bab921fb_66d722ee","line":461,"updated":"2015-04-23 23:35:53.000000000","message":"Ditto","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":1839,"name":"nithya-ganesan","email":"nithya.ganesan@hp.com","username":"nithya-ganesan"},"change_message_id":"8798a01f699cc907cfdf4a2b7bdeac8025cf6c78","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        if security_group is None:"},{"line_number":459,"context_line":"            security_group \u003d True"},{"line_number":460,"context_line":"        if security_group_rules is None:"},{"line_number":461,"context_line":"            security_group_rules \u003d True"},{"line_number":462,"context_line":"        if not cls.validation_resources:"},{"line_number":463,"context_line":"            cls.validation_resources \u003d {"},{"line_number":464,"context_line":"                \u0027keypair\u0027: keypair,"}],"source_content_type":"text/x-python","patch_set":67,"id":"9abe1de1_9a864912","line":461,"in_reply_to":"bab921fb_66d722ee","updated":"2015-04-27 10:07:05.000000000","message":"Fixed the docstring","commit_id":"f5611547e5004f07358779e09d586e955286b9f3"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"524df042e5a720c76562fa4abe3b733a776d4cd2","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    def resource_setup(cls):"},{"line_number":364,"context_line":"        \"\"\"Class level resource setup for test cases."},{"line_number":365,"context_line":"        \"\"\""},{"line_number":366,"context_line":"        if hasattr(cls, \"os\"):"},{"line_number":367,"context_line":"            cls.validation_resources \u003d vresources.create_validation_resources("},{"line_number":368,"context_line":"                cls.os, cls.validation_resources)"},{"line_number":369,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":68,"id":"3acd31a7_b6806bc1","line":366,"updated":"2015-05-05 14:20:47.000000000","message":"I still think this is weird, but whatever. I also still don\u0027t like how it\u0027s only primary creds this won\u0027t work for all tests because of this constraint.","commit_id":"a90fe60e89d549db6d99d66d3c67e39a441c7919"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"524df042e5a720c76562fa4abe3b733a776d4cd2","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                                                      cls.validation_resources)"},{"line_number":383,"context_line":"                cls.validation_resources \u003d {}"},{"line_number":384,"context_line":"            else:"},{"line_number":385,"context_line":"                LOG.warn(\"No client manager named \\\"os\\\" found,\""},{"line_number":386,"context_line":"                         \"validation resources not deleted\")"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":68,"id":"3acd31a7_96332f62","line":385,"updated":"2015-05-05 14:20:47.000000000","message":"Why put os here and not above?","commit_id":"a90fe60e89d549db6d99d66d3c67e39a441c7919"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"249d29a2dd8a68dc1c26117564d60ebb92869aa8","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            else:"},{"line_number":476,"context_line":"                floating_ip \u003d False"},{"line_number":477,"context_line":"        if security_group is None:"},{"line_number":478,"context_line":"            security_group \u003d True"},{"line_number":479,"context_line":"        if security_group_rules is None:"},{"line_number":480,"context_line":"            security_group_rules \u003d True"},{"line_number":481,"context_line":"        if not cls.validation_resources:"}],"source_content_type":"text/x-python","patch_set":69,"id":"1aca2d91_eea41aa7","line":478,"updated":"2015-05-07 15:06:25.000000000","message":"Couldn\u0027t you just use True as the default in the kwarg?","commit_id":"222efd7b4cd3dc972e0d41ddf1a060aa9d6fd36f"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"53faeb7013d884779d4d183b832ee3c2dbaafc4e","unresolved":false,"context_lines":[{"line_number":475,"context_line":"            else:"},{"line_number":476,"context_line":"                floating_ip \u003d False"},{"line_number":477,"context_line":"        if security_group is None:"},{"line_number":478,"context_line":"            security_group \u003d True"},{"line_number":479,"context_line":"        if security_group_rules is None:"},{"line_number":480,"context_line":"            security_group_rules \u003d True"},{"line_number":481,"context_line":"        if not cls.validation_resources:"}],"source_content_type":"text/x-python","patch_set":69,"id":"9af37de9_c46852bd","line":478,"in_reply_to":"1aca2d91_eea41aa7","updated":"2015-05-11 08:46:18.000000000","message":"I agree with these.","commit_id":"222efd7b4cd3dc972e0d41ddf1a060aa9d6fd36f"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"249d29a2dd8a68dc1c26117564d60ebb92869aa8","unresolved":false,"context_lines":[{"line_number":477,"context_line":"        if security_group is None:"},{"line_number":478,"context_line":"            security_group \u003d True"},{"line_number":479,"context_line":"        if security_group_rules is None:"},{"line_number":480,"context_line":"            security_group_rules \u003d True"},{"line_number":481,"context_line":"        if not cls.validation_resources:"},{"line_number":482,"context_line":"            cls.validation_resources \u003d {"},{"line_number":483,"context_line":"                \u0027keypair\u0027: keypair,"}],"source_content_type":"text/x-python","patch_set":69,"id":"1aca2d91_ce9f1e4f","line":480,"updated":"2015-05-07 15:06:25.000000000","message":"Ditto","commit_id":"222efd7b4cd3dc972e0d41ddf1a060aa9d6fd36f"}]}
