)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fb9b09250f631374dac9a20f240e15caab0fac33","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ica92b771fc04891ad231967470f8b0ade7d2dead"},{"line_number":15,"context_line":"Implements blueprint virt-device-role-tagging"},{"line_number":16,"context_line":"Depends-On: I0e80d9fe6ded1c6ce8fde58b318ff9f4d36ff4ed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"3aaa91ec_e1d30cd4","line":16,"updated":"2016-07-01 15:36:44.000000000","message":"Can drop this now.","commit_id":"d2cb0902bf0da7d4d6cab0c2c42d7d600ed71b28"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"ac8b0668a5e604bb2bdb60f434d65d03fea0da27","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Ica92b771fc04891ad231967470f8b0ade7d2dead"},{"line_number":15,"context_line":"Implements blueprint virt-device-role-tagging"},{"line_number":16,"context_line":"Depends-On: I0e80d9fe6ded1c6ce8fde58b318ff9f4d36ff4ed"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"3aaa91ec_3e108759","line":16,"in_reply_to":"3aaa91ec_e1d30cd4","updated":"2016-07-02 20:16:53.000000000","message":"Done","commit_id":"d2cb0902bf0da7d4d6cab0c2c42d7d600ed71b28"}],"tempest/api/compute/servers/test_device_tagging.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3be325d2e3384f3d34c62537f9744b8eb2d13d1b","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            raise cls.skipException(\u0027Config drive must be enabled\u0027)"},{"line_number":45,"context_line":"        if not CONF.compute_feature_enabled.metadata_service:"},{"line_number":46,"context_line":"            raise cls.skipException(\u0027Metadata service must be enabled\u0027)"},{"line_number":47,"context_line":"        if not CONF.compute_feature_enabled.metadata_service:"},{"line_number":48,"context_line":"            raise cls.skipException(\u0027Metadata service must be enabled\u0027)"},{"line_number":49,"context_line":"        if not CONF.validation.run_validation:"},{"line_number":50,"context_line":"            raise cls.skipException(\u0027Validation must be enabled\u0027)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_ddb013e0","line":48,"range":{"start_line":47,"start_character":8,"end_line":48,"end_character":71},"updated":"2016-06-29 01:14:34.000000000","message":"redundant","commit_id":"b86410b1842e9c4491d6fcd232500d2b6eae63d2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3be325d2e3384f3d34c62537f9744b8eb2d13d1b","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        cls.routers_client \u003d cls.os.routers_client"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @classmethod"},{"line_number":62,"context_line":"    def resource_setup(cls):"},{"line_number":63,"context_line":"        cls.set_validation_resources()"},{"line_number":64,"context_line":"        super(DeviceTaggingTest, cls).resource_setup()"},{"line_number":65,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_bd38a73e","line":62,"updated":"2016-06-29 01:14:34.000000000","message":"There should be cleanup for everything in here. It also seems like we could get some of this taken care of for us in the setup_credentials method where we call cls.set_network_resources(), I\u0027m not sure if you can call that twice for two sets of network resources, but it handles cleanup for you, which you need to do yourself otherwise, which is why this test is failing:\n\nhttp://logs.openstack.org/20/305120/10/check/gate-tempest-dsvm-neutron-full-ssh/9dda6e1/console.html#_2016-06-27_22_16_51_274016\n\nThere is an in-use security group, probably because there are ports using it because we didn\u0027t wait for the servers to be deleted yet.","commit_id":"b86410b1842e9c4491d6fcd232500d2b6eae63d2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3be325d2e3384f3d34c62537f9744b8eb2d13d1b","unresolved":false,"context_lines":[{"line_number":203,"context_line":"        self.create_networks_volumes_and_server()"},{"line_number":204,"context_line":"        self.verify_device_metadata()"},{"line_number":205,"context_line":"        self.verify_device_metadata_on_configdrive()"},{"line_number":206,"context_line":"        self.servers_client.delete_server(self.server[\u0027id\u0027])"},{"line_number":207,"context_line":"        waiters.wait_for_server_termination(self.servers_client,"},{"line_number":208,"context_line":"                                            self.server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_1d6e1b2f","line":208,"range":{"start_line":206,"start_character":8,"end_line":208,"end_character":62},"updated":"2016-06-29 01:14:34.000000000","message":"These should be done via addCleanup after the server is created, before validation, because you need the server to be deleted before the security group on the network can go away:\n\nhttp://logs.openstack.org/20/305120/10/check/gate-tempest-dsvm-neutron-full-ssh/9dda6e1/console.html#_2016-06-27_22_16_51_274016\n\nSee what I\u0027m doing here:\n\nhttps://review.openstack.org/#/c/327191/16/tempest/api/compute/admin/test_auto_allocate_network.py@182","commit_id":"b86410b1842e9c4491d6fcd232500d2b6eae63d2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"dc5f9349d2f462dd7c40bc3677cc31809c169654","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        super(DeviceTaggingTest, cls).skip_checks()"},{"line_number":41,"context_line":"        if not CONF.service_available.neutron:"},{"line_number":42,"context_line":"            raise cls.skipException(\u0027Neutron is required\u0027)"},{"line_number":43,"context_line":"        if not CONF.compute_feature_enabled.config_drive:"},{"line_number":44,"context_line":"            raise cls.skipException(\u0027Config drive must be enabled\u0027)"},{"line_number":45,"context_line":"        if not CONF.compute_feature_enabled.metadata_service:"},{"line_number":46,"context_line":"            raise cls.skipException(\u0027Metadata service must be enabled\u0027)"},{"line_number":47,"context_line":"        if not CONF.validation.run_validation:"},{"line_number":48,"context_line":"            raise cls.skipException(\u0027Validation must be enabled\u0027)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_7ae537da","line":46,"range":{"start_line":43,"start_character":8,"end_line":46,"end_character":71},"updated":"2016-06-30 18:40:32.000000000","message":"As discussed in IRC, not all jobs enable the metadata service, so it might be nice to do these checks when we actually try to validate them, but allow the test to run if one or the other is disabled. But we\u0027d still skip early here if neither are enabled.","commit_id":"ecdad91e90f056a0b262b2a13b0b0f47f44796ea"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"77332e5b770d5deb3d8697a3eb8155d8ff0e7a6b","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        self.admin_pass \u003d data_utils.rand_password()"},{"line_number":120,"context_line":"        self.server \u003d self.create_test_server("},{"line_number":121,"context_line":"            validatable\u003dTrue,"},{"line_number":122,"context_line":"            config_drive\u003dTrue,"},{"line_number":123,"context_line":"            adminPass\u003dself.admin_pass,"},{"line_number":124,"context_line":"            name\u003ddata_utils.rand_name(\u0027device-tagging-server\u0027),"},{"line_number":125,"context_line":"            networks\u003d["}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_fa1e47b9","line":122,"range":{"start_line":122,"start_character":12,"end_line":122,"end_character":29},"updated":"2016-06-30 18:41:34.000000000","message":"If we do the conditional skips as discussed above, do we need to make this conditional on config drive being enabled/disabled? I\u0027d think so.","commit_id":"ecdad91e90f056a0b262b2a13b0b0f47f44796ea"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fb9b09250f631374dac9a20f240e15caab0fac33","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @classmethod"},{"line_number":61,"context_line":"    def resource_setup(cls):"},{"line_number":62,"context_line":"        cls.set_validation_resources()"},{"line_number":63,"context_line":"        super(DeviceTaggingTest, cls).resource_setup()"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_412300bf","line":61,"updated":"2016-07-01 15:36:44.000000000","message":"I\u0027d think we need addCleanup on each of the resources in here, if we fail at the end nothing created before it is cleaned up and it leaks resources.","commit_id":"d2cb0902bf0da7d4d6cab0c2c42d7d600ed71b28"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"ac8b0668a5e604bb2bdb60f434d65d03fea0da27","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    @classmethod"},{"line_number":61,"context_line":"    def resource_setup(cls):"},{"line_number":62,"context_line":"        cls.set_validation_resources()"},{"line_number":63,"context_line":"        super(DeviceTaggingTest, cls).resource_setup()"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_39926258","line":61,"in_reply_to":"3aaa91ec_412300bf","updated":"2016-07-02 20:16:53.000000000","message":"Done","commit_id":"d2cb0902bf0da7d4d6cab0c2c42d7d600ed71b28"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fb9b09250f631374dac9a20f240e15caab0fac33","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def resource_cleanup(cls):"},{"line_number":104,"context_line":"        super(DeviceTaggingTest, cls).resource_cleanup()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        cls.volumes_client.delete_volume(cls.other_volume[\u0027id\u0027])"},{"line_number":107,"context_line":"        cls.volumes_client.delete_volume(cls.boot_volume[\u0027id\u0027])"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        cls.subnets_client.delete_subnet(cls.subnet2[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_e1466c7a","line":106,"updated":"2016-07-01 15:36:44.000000000","message":"The stuff in here is created in resource_setup, why aren\u0027t you doing addCleanup for each of these resources so if we fail somewhere in between we aren\u0027t leaking resources?","commit_id":"d2cb0902bf0da7d4d6cab0c2c42d7d600ed71b28"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"ac8b0668a5e604bb2bdb60f434d65d03fea0da27","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    def resource_cleanup(cls):"},{"line_number":104,"context_line":"        super(DeviceTaggingTest, cls).resource_cleanup()"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        cls.volumes_client.delete_volume(cls.other_volume[\u0027id\u0027])"},{"line_number":107,"context_line":"        cls.volumes_client.delete_volume(cls.boot_volume[\u0027id\u0027])"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        cls.subnets_client.delete_subnet(cls.subnet2[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_999f165f","line":106,"in_reply_to":"3aaa91ec_e1466c7a","updated":"2016-07-02 20:16:53.000000000","message":"Done","commit_id":"d2cb0902bf0da7d4d6cab0c2c42d7d600ed71b28"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fb9b09250f631374dac9a20f240e15caab0fac33","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            {"},{"line_number":172,"context_line":"                \u0027uuid\u0027: self.other_volume[\u0027id\u0027],"},{"line_number":173,"context_line":"                \u0027source_type\u0027: \u0027volume\u0027,"},{"line_number":174,"context_line":"                \u0027destination_type\u0027: \u0027volume\u0027,"},{"line_number":175,"context_line":"                \u0027boot_index\u0027: 1,"},{"line_number":176,"context_line":"                \u0027tag\u0027: \u0027other-volume\u0027"},{"line_number":177,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":14,"id":"3aaa91ec_73e08f97","line":174,"updated":"2016-07-01 15:36:44.000000000","message":"How about blank or local, i.e. some kind of other wrinkle?","commit_id":"d2cb0902bf0da7d4d6cab0c2c42d7d600ed71b28"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f57b83dcf1bcb14bee96324123cfc7933babe423","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            {"},{"line_number":172,"context_line":"                \u0027uuid\u0027: self.other_volume[\u0027id\u0027],"},{"line_number":173,"context_line":"                \u0027source_type\u0027: \u0027volume\u0027,"},{"line_number":174,"context_line":"                \u0027destination_type\u0027: \u0027volume\u0027,"},{"line_number":175,"context_line":"                \u0027boot_index\u0027: 1,"},{"line_number":176,"context_line":"                \u0027tag\u0027: \u0027other-volume\u0027"},{"line_number":177,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_a627f762","line":174,"in_reply_to":"1aa78d24_799cea69","updated":"2016-07-05 15:14:11.000000000","message":"Bug report created: https://bugs.launchpad.net/nova/+bug/1599201","commit_id":"d2cb0902bf0da7d4d6cab0c2c42d7d600ed71b28"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"ac8b0668a5e604bb2bdb60f434d65d03fea0da27","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            {"},{"line_number":172,"context_line":"                \u0027uuid\u0027: self.other_volume[\u0027id\u0027],"},{"line_number":173,"context_line":"                \u0027source_type\u0027: \u0027volume\u0027,"},{"line_number":174,"context_line":"                \u0027destination_type\u0027: \u0027volume\u0027,"},{"line_number":175,"context_line":"                \u0027boot_index\u0027: 1,"},{"line_number":176,"context_line":"                \u0027tag\u0027: \u0027other-volume\u0027"},{"line_number":177,"context_line":"            }"}],"source_content_type":"text/x-python","patch_set":14,"id":"1aa78d24_799cea69","line":174,"in_reply_to":"3aaa91ec_73e08f97","updated":"2016-07-02 20:16:53.000000000","message":"I tried that... and it didn\u0027t get tagged. It\u0027s a bug that I need to file and fix.","commit_id":"d2cb0902bf0da7d4d6cab0c2c42d7d600ed71b28"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2ee15aabe35b811f7191a014ce7439ec42254707","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            servers_client\u003dself.servers_client)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def find_fixed_ips_macs(self):"},{"line_number":211,"context_line":"        self.net_2_100_mac \u003d None"},{"line_number":212,"context_line":"        self.net_2_200_mac \u003d None"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        ifaces \u003d self.interfaces_client.list_interfaces(self.server[\u0027id\u0027])"},{"line_number":215,"context_line":"        for iface in ifaces[\u0027interfaceAttachments\u0027]:"}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_b44bfe58","line":212,"range":{"start_line":211,"start_character":8,"end_line":212,"end_character":33},"updated":"2016-07-27 20:59:03.000000000","message":"nit: generally I think tempest doesn\u0027t want to be setting class variables if it can be helped, so it would be preferable to return these and then pass them into the methods that use them.","commit_id":"df33b870bcc562ac18a52b37706d47e8d38c60f5"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c635553cde59ee9eedb7d3feefed8a09ea213dad","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    @classmethod"},{"line_number":39,"context_line":"    def skip_checks(cls):"},{"line_number":40,"context_line":"        super(DeviceTaggingTest, cls).skip_checks()"},{"line_number":41,"context_line":"        if not CONF.service_available.neutron:"},{"line_number":42,"context_line":"            raise cls.skipException(\u0027Neutron is required\u0027)"},{"line_number":43,"context_line":"        if not CONF.validation.run_validation:"},{"line_number":44,"context_line":"            raise cls.skipException(\u0027Validation must be enabled\u0027)"},{"line_number":45,"context_line":"        if (not CONF.compute_feature_enabled.config_drive"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_9cf59dee","line":42,"range":{"start_line":41,"start_character":8,"end_line":42,"end_character":58},"updated":"2016-08-17 21:29:31.000000000","message":"At line 271, the test is already marked as requirement of compute, network and volume.\nAnd if these services are not enabled, the test is skipped as https://github.com/openstack/tempest/blob/master/tempest/test.py#L103\n\nSo here is not mandatory.","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"ee474e62663c7b1b0722cb1017d0649f39b6c776","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    @classmethod"},{"line_number":39,"context_line":"    def skip_checks(cls):"},{"line_number":40,"context_line":"        super(DeviceTaggingTest, cls).skip_checks()"},{"line_number":41,"context_line":"        if not CONF.service_available.neutron:"},{"line_number":42,"context_line":"            raise cls.skipException(\u0027Neutron is required\u0027)"},{"line_number":43,"context_line":"        if not CONF.validation.run_validation:"},{"line_number":44,"context_line":"            raise cls.skipException(\u0027Validation must be enabled\u0027)"},{"line_number":45,"context_line":"        if (not CONF.compute_feature_enabled.config_drive"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_1c2a4d90","line":42,"range":{"start_line":41,"start_character":8,"end_line":42,"end_character":58},"in_reply_to":"3ac371cc_9cf59dee","updated":"2016-08-17 21:37:35.000000000","message":"Sorry, this point is wrong.\nThis check is necessary because the network is always True based on https://github.com/openstack/tempest/blob/master/tempest/test.py#L75","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c635553cde59ee9eedb7d3feefed8a09ea213dad","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        waiters.wait_for_volume_status(self.volumes_client,"},{"line_number":108,"context_line":"                                       self.boot_volume[\u0027id\u0027],"},{"line_number":109,"context_line":"                                       \u0027available\u0027)"},{"line_number":110,"context_line":"        self.addCleanup(self.volumes_client.delete_volume,"},{"line_number":111,"context_line":"                        self.boot_volume[\u0027id\u0027])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        self.other_volume \u003d self.volumes_client.create_volume()[\u0027volume\u0027]"},{"line_number":114,"context_line":"        waiters.wait_for_volume_status(self.volumes_client,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_3b0d92e8","line":111,"range":{"start_line":110,"start_character":8,"end_line":111,"end_character":46},"updated":"2016-08-17 21:29:31.000000000","message":"Why don\u0027t we add addCleanup() for the following other_volume?","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5bdb79b355cab1bbaeeb6fb785b5ab4680748d55","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        waiters.wait_for_volume_status(self.volumes_client,"},{"line_number":108,"context_line":"                                       self.boot_volume[\u0027id\u0027],"},{"line_number":109,"context_line":"                                       \u0027available\u0027)"},{"line_number":110,"context_line":"        self.addCleanup(self.volumes_client.delete_volume,"},{"line_number":111,"context_line":"                        self.boot_volume[\u0027id\u0027])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        self.other_volume \u003d self.volumes_client.create_volume()[\u0027volume\u0027]"},{"line_number":114,"context_line":"        waiters.wait_for_volume_status(self.volumes_client,"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_914897ce","line":111,"range":{"start_line":110,"start_character":8,"end_line":111,"end_character":46},"in_reply_to":"3ac371cc_3b0d92e8","updated":"2016-08-24 22:42:58.000000000","message":"Because I fail? Done:)","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c635553cde59ee9eedb7d3feefed8a09ea213dad","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.addCleanup(self.volumes_client.delete_volume,"},{"line_number":111,"context_line":"                        self.boot_volume[\u0027id\u0027])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        self.other_volume \u003d self.volumes_client.create_volume()[\u0027volume\u0027]"},{"line_number":114,"context_line":"        waiters.wait_for_volume_status(self.volumes_client,"},{"line_number":115,"context_line":"                                       self.other_volume[\u0027id\u0027],"},{"line_number":116,"context_line":"                                       \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_fb7adaef","line":113,"range":{"start_line":113,"start_character":8,"end_line":113,"end_character":73},"updated":"2016-08-17 21:29:31.000000000","message":"It is better to put this 2nd create_volume() call just after the first one(line107) to make the test operation time short because wait_for_volume_status() sometimes takes time.","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5bdb79b355cab1bbaeeb6fb785b5ab4680748d55","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.addCleanup(self.volumes_client.delete_volume,"},{"line_number":111,"context_line":"                        self.boot_volume[\u0027id\u0027])"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        self.other_volume \u003d self.volumes_client.create_volume()[\u0027volume\u0027]"},{"line_number":114,"context_line":"        waiters.wait_for_volume_status(self.volumes_client,"},{"line_number":115,"context_line":"                                       self.other_volume[\u0027id\u0027],"},{"line_number":116,"context_line":"                                       \u0027available\u0027)"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_b115d39c","line":113,"range":{"start_line":113,"start_character":8,"end_line":113,"end_character":73},"in_reply_to":"3ac371cc_fb7adaef","updated":"2016-08-24 22:42:58.000000000","message":"Done","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c635553cde59ee9eedb7d3feefed8a09ea213dad","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def setUp(self):"},{"line_number":119,"context_line":"        super(DeviceTaggingTest, self).setUp()"},{"line_number":120,"context_line":"        self.image_ref \u003d CONF.compute.image_ref"},{"line_number":121,"context_line":"        self.flavor_ref \u003d CONF.compute.flavor_ref"},{"line_number":122,"context_line":"        self.ssh_user \u003d CONF.validation.image_ssh_user"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_7b0eea3b","line":120,"range":{"start_line":120,"start_character":8,"end_line":120,"end_character":47},"updated":"2016-08-17 21:29:31.000000000","message":"This value is used at a single place only, it is better to put the config value directly.","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5bdb79b355cab1bbaeeb6fb785b5ab4680748d55","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def setUp(self):"},{"line_number":119,"context_line":"        super(DeviceTaggingTest, self).setUp()"},{"line_number":120,"context_line":"        self.image_ref \u003d CONF.compute.image_ref"},{"line_number":121,"context_line":"        self.flavor_ref \u003d CONF.compute.flavor_ref"},{"line_number":122,"context_line":"        self.ssh_user \u003d CONF.validation.image_ssh_user"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_717d1bb1","line":120,"range":{"start_line":120,"start_character":8,"end_line":120,"end_character":47},"in_reply_to":"3ac371cc_7b0eea3b","updated":"2016-08-24 22:42:58.000000000","message":"Done","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c635553cde59ee9eedb7d3feefed8a09ea213dad","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def setUp(self):"},{"line_number":119,"context_line":"        super(DeviceTaggingTest, self).setUp()"},{"line_number":120,"context_line":"        self.image_ref \u003d CONF.compute.image_ref"},{"line_number":121,"context_line":"        self.flavor_ref \u003d CONF.compute.flavor_ref"},{"line_number":122,"context_line":"        self.ssh_user \u003d CONF.validation.image_ssh_user"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def get_networks(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_9b4926ba","line":121,"range":{"start_line":121,"start_character":8,"end_line":121,"end_character":49},"updated":"2016-08-17 21:29:31.000000000","message":"This value is never used in this test.","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5bdb79b355cab1bbaeeb6fb785b5ab4680748d55","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def setUp(self):"},{"line_number":119,"context_line":"        super(DeviceTaggingTest, self).setUp()"},{"line_number":120,"context_line":"        self.image_ref \u003d CONF.compute.image_ref"},{"line_number":121,"context_line":"        self.flavor_ref \u003d CONF.compute.flavor_ref"},{"line_number":122,"context_line":"        self.ssh_user \u003d CONF.validation.image_ssh_user"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def get_networks(self):"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_1143076e","line":121,"range":{"start_line":121,"start_character":8,"end_line":121,"end_character":49},"in_reply_to":"3ac371cc_9b4926ba","updated":"2016-08-24 22:42:58.000000000","message":"Done","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c635553cde59ee9eedb7d3feefed8a09ea213dad","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        super(DeviceTaggingTest, self).setUp()"},{"line_number":120,"context_line":"        self.image_ref \u003d CONF.compute.image_ref"},{"line_number":121,"context_line":"        self.flavor_ref \u003d CONF.compute.flavor_ref"},{"line_number":122,"context_line":"        self.ssh_user \u003d CONF.validation.image_ssh_user"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def get_networks(self):"},{"line_number":125,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_d63d3390","line":122,"range":{"start_line":122,"start_character":8,"end_line":122,"end_character":54},"updated":"2016-08-17 21:29:31.000000000","message":"ditto: This value is used at a single place only, it is better to put the config value directly.\n\nAfter removing these value from this setUp(), we can remove setUp() itself.","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5bdb79b355cab1bbaeeb6fb785b5ab4680748d55","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        super(DeviceTaggingTest, self).setUp()"},{"line_number":120,"context_line":"        self.image_ref \u003d CONF.compute.image_ref"},{"line_number":121,"context_line":"        self.flavor_ref \u003d CONF.compute.flavor_ref"},{"line_number":122,"context_line":"        self.ssh_user \u003d CONF.validation.image_ssh_user"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def get_networks(self):"},{"line_number":125,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_1111475e","line":122,"range":{"start_line":122,"start_character":8,"end_line":122,"end_character":54},"in_reply_to":"3ac371cc_d63d3390","updated":"2016-08-24 22:42:58.000000000","message":"Done","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"c635553cde59ee9eedb7d3feefed8a09ea213dad","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    def create_server(self):"},{"line_number":186,"context_line":"        self.keypair \u003d self.validation_resources[\u0027keypair\u0027]"},{"line_number":187,"context_line":"        self.admin_pass \u003d data_utils.rand_password()"},{"line_number":188,"context_line":"        config_drive_enabled \u003d bool(CONF.compute_feature_enabled.config_drive)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        self.server \u003d self.create_test_server("},{"line_number":191,"context_line":"            validatable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_dce55509","line":188,"range":{"start_line":188,"start_character":31,"end_line":188,"end_character":36},"updated":"2016-08-17 21:29:31.000000000","message":"This option is defined as BoolOpt, this bool() seems unnecessary.","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5bdb79b355cab1bbaeeb6fb785b5ab4680748d55","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    def create_server(self):"},{"line_number":186,"context_line":"        self.keypair \u003d self.validation_resources[\u0027keypair\u0027]"},{"line_number":187,"context_line":"        self.admin_pass \u003d data_utils.rand_password()"},{"line_number":188,"context_line":"        config_drive_enabled \u003d bool(CONF.compute_feature_enabled.config_drive)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        self.server \u003d self.create_test_server("},{"line_number":191,"context_line":"            validatable\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_351f0e5d","line":188,"range":{"start_line":188,"start_character":31,"end_line":188,"end_character":36},"in_reply_to":"3ac371cc_dce55509","updated":"2016-08-24 22:42:58.000000000","message":"Done","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fc8eb3ead1afedeed111703ec096a055243d16fb","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        md_url \u003d \u0027http://169.254.169.254/openstack/latest/meta_data.json\u0027"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        def get_and_verify_metadata():"},{"line_number":250,"context_line":"            cmd \u003d \u0027curl %s\u0027 % md_url"},{"line_number":251,"context_line":"            md_json \u003d self.ssh_client.exec_command(cmd)"},{"line_number":252,"context_line":"            self.verify_device_metadata(md_json)"},{"line_number":253,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_60959985","line":250,"updated":"2016-08-17 20:45:02.000000000","message":"This makes an assumption that curl is on the guest image right? How is that communicated to users?","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"e951475fa3db25729ce43ce4034e3794bf3fe1b6","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        md_url \u003d \u0027http://169.254.169.254/openstack/latest/meta_data.json\u0027"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        def get_and_verify_metadata():"},{"line_number":250,"context_line":"            cmd \u003d \u0027curl %s\u0027 % md_url"},{"line_number":251,"context_line":"            md_json \u003d self.ssh_client.exec_command(cmd)"},{"line_number":252,"context_line":"            self.verify_device_metadata(md_json)"},{"line_number":253,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":20,"id":"da6895a0_c2a518b6","line":250,"in_reply_to":"1ac06dbe_d52e7af9","updated":"2016-10-20 19:58:13.000000000","message":"In patchset 32 I\u0027ve modified this to check for curl by running \u0027curl --help\u0027 and raising a skipException if the exit code is non zero. Is that what you had in mind for checking for curl?","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5bdb79b355cab1bbaeeb6fb785b5ab4680748d55","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        md_url \u003d \u0027http://169.254.169.254/openstack/latest/meta_data.json\u0027"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        def get_and_verify_metadata():"},{"line_number":250,"context_line":"            cmd \u003d \u0027curl %s\u0027 % md_url"},{"line_number":251,"context_line":"            md_json \u003d self.ssh_client.exec_command(cmd)"},{"line_number":252,"context_line":"            self.verify_device_metadata(md_json)"},{"line_number":253,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_d52e7af9","line":250,"in_reply_to":"3ac371cc_60959985","updated":"2016-08-24 22:42:58.000000000","message":"I based this on [1]. It\u0027s true that it\u0027s not communicated anywhere that curl is required...\n\n[1] https://github.com/openstack/tempest/blob/master/tempest/scenario/test_server_basic_ops.py#L65","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fc8eb3ead1afedeed111703ec096a055243d16fb","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    @test.idempotent_id(\u0027a2e65a6c-66f1-4442-aaa8-498c31778d96\u0027)"},{"line_number":271,"context_line":"    @test.services(\u0027network\u0027, \u0027volume\u0027, \u0027image\u0027)"},{"line_number":272,"context_line":"    def test_device_tagging(self):"},{"line_number":273,"context_line":"        self.create_volumes()"},{"line_number":274,"context_line":"        self.create_networks()"},{"line_number":275,"context_line":"        self.create_subnets()"},{"line_number":276,"context_line":"        self.create_ports()"}],"source_content_type":"text/x-python","patch_set":20,"id":"3ac371cc_c0b72d38","line":273,"updated":"2016-08-17 20:45:02.000000000","message":"This is an antipattern in tempest we\u0027re trying to kill. Looking at this test code I have no idea what this means. How many volumes are being made, what size, etc. Also, why is it an instance level var it\u0027s not shared between tests (there is only 1 test) Just do everything flat in the test method. Then when it fails on someone they can actually figure out what the test is doing.","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"5bdb79b355cab1bbaeeb6fb785b5ab4680748d55","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    @test.idempotent_id(\u0027a2e65a6c-66f1-4442-aaa8-498c31778d96\u0027)"},{"line_number":271,"context_line":"    @test.services(\u0027network\u0027, \u0027volume\u0027, \u0027image\u0027)"},{"line_number":272,"context_line":"    def test_device_tagging(self):"},{"line_number":273,"context_line":"        self.create_volumes()"},{"line_number":274,"context_line":"        self.create_networks()"},{"line_number":275,"context_line":"        self.create_subnets()"},{"line_number":276,"context_line":"        self.create_ports()"}],"source_content_type":"text/x-python","patch_set":20,"id":"1ac06dbe_690b587e","line":273,"in_reply_to":"3ac371cc_c0b72d38","updated":"2016-08-24 22:42:58.000000000","message":"Done","commit_id":"50adc82c196baeb464cd96051e8e5c4d3aef06ff"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"51d4c98330bf0a9ec4122db3a0f1749ccbdb1aa1","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                    \u0027source_type\u0027: \u0027blank\u0027,"},{"line_number":205,"context_line":"                    \u0027destination_type\u0027: \u0027local\u0027,"},{"line_number":206,"context_line":"                    \u0027volume_size\u0027: \u00271\u0027,"},{"line_number":207,"context_line":"                    \u0027tag\u0027: \u0027bug1599201\u0027"},{"line_number":208,"context_line":"                },"},{"line_number":209,"context_line":"                # Untagged volume"},{"line_number":210,"context_line":"                {"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a8bc5a2_32ab28d8","line":207,"updated":"2016-09-23 11:33:36.000000000","message":"I\u0027m trying to match this up with the bug report. AFAICT this test doesn\u0027t specify an explicit flavor, so can I assume that the default flavor has an ephemeral size of at least 2G? If it doesn\u0027t, I don\u0027t immediately understand why this isn\u0027t rejected by nova api, eg:\n\n$ nova boot --image cirros-0.3.4-x86_64-uec --flavor m1.tiny --block-device dest\u003dlocal,source\u003dblank,tag\u003dfoo,size\u003d1 foo\nERROR (BadRequest): Ephemeral disks requested are larger than the instance type allows. If no size is given in one block device mapping, flavor ephemeral size will be used. (HTTP 400) (Request-ID: req-be266228-4ea6-4a10-ae80-118a1faa70d1)\n\nAssuming the default flavor does allow at least 2G of ephemeral disk, I don\u0027t understand why this is relevant to the bug report, as that seems to relate specifically to ephemeral disks of size zero, which is a pretty weird concept. This has an explicit size of 1G, as does the untagged disk below.","commit_id":"23803bda641a57b648a7d06df958d1b72da0ac32"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"ed80b93456572931f5544abe4e29660bc07b10f1","unresolved":false,"context_lines":[{"line_number":204,"context_line":"                    \u0027source_type\u0027: \u0027blank\u0027,"},{"line_number":205,"context_line":"                    \u0027destination_type\u0027: \u0027local\u0027,"},{"line_number":206,"context_line":"                    \u0027volume_size\u0027: \u00271\u0027,"},{"line_number":207,"context_line":"                    \u0027tag\u0027: \u0027bug1599201\u0027"},{"line_number":208,"context_line":"                },"},{"line_number":209,"context_line":"                # Untagged volume"},{"line_number":210,"context_line":"                {"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a8bc5a2_856d8f9a","line":207,"in_reply_to":"5a8bc5a2_32ab28d8","updated":"2016-09-23 13:19:57.000000000","message":"Yeah, I completely missed the fact that ephemeral disk size can come from the flavor. So the original bug report is probably invalid, as is this new code to test the fix.","commit_id":"23803bda641a57b648a7d06df958d1b72da0ac32"},{"author":{"_account_id":9555,"name":"Matthew Booth","email":"mbooth@redhat.com","username":"MatthewBooth"},"change_message_id":"7842cf5809817991f78e82a2be1d24b86d422153","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                {"},{"line_number":204,"context_line":"                    \u0027source_type\u0027: \u0027blank\u0027,"},{"line_number":205,"context_line":"                    \u0027destination_type\u0027: \u0027local\u0027,"},{"line_number":206,"context_line":"                    \u0027volume_size\u0027: \u00271\u0027"},{"line_number":207,"context_line":"                }"},{"line_number":208,"context_line":"            ])"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5a8bc5a2_360dd33e","line":206,"updated":"2016-09-23 14:16:38.000000000","message":"I know very little about tempest, but the following makes these 2 assumptions:\n\n1. Tempest isn\u0027t supposed to create flavors.\n2. A tempest test should be skipped if it isn\u0027t expected to work because of the configuration of the cloud it\u0027s running against.\n\nI believe that because this test is passing, it means that the default flavor has at least 1G of ephemeral disk. I believe that if it didn\u0027t have 1G of ephemeral disk then this would fail. Consequently I believe that there should be something somewhere to tell tempest to skip this test if the default flavor *doesn\u0027t* have at least 1G of ephemeral disk.\n\nI\u0027m going to leave a -1, but if I\u0027ve misunderstood I\u0027ll get back in my box :)","commit_id":"ec03e58e990611e87b92af0a04a940836ede11c4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bdd5919d0bec8804cb79eb955cb9dc2dd8a2f1ac","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                {"},{"line_number":204,"context_line":"                    \u0027source_type\u0027: \u0027blank\u0027,"},{"line_number":205,"context_line":"                    \u0027destination_type\u0027: \u0027local\u0027,"},{"line_number":206,"context_line":"                    \u0027volume_size\u0027: \u00271\u0027"},{"line_number":207,"context_line":"                }"},{"line_number":208,"context_line":"            ])"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5a8bc5a2_f12607cd","line":206,"in_reply_to":"5a8bc5a2_360dd33e","updated":"2016-09-23 18:38:18.000000000","message":"I\u0027m pretty sure this is using the 42 flavor that devstack creates, and devstack doesn\u0027t create any flavors with ephemeral_gb:\n\n  stack@ocata:~$ nova flavor-list\n+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+\n| ID | Name      | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |\n+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+\n| 1  | m1.tiny   | 512       | 1    | 0         |      | 1     | 1.0         | True      |\n| 2  | m1.small  | 2048      | 20   | 0         |      | 1     | 1.0         | True      |\n| 3  | m1.medium | 4096      | 40   | 0         |      | 2     | 1.0         | True      |\n| 4  | m1.large  | 8192      | 80   | 0         |      | 4     | 1.0         | True      |\n| 42 | m1.nano   | 64        | 0    | 0         |      | 1     | 1.0         | True      |\n| 5  | m1.xlarge | 16384     | 160  | 0         |      | 8     | 1.0         | True      |\n| 84 | m1.micro  | 128       | 0    | 0         |      | 1     | 1.0         | True      |\n| c1 | cirros256 | 256       | 0    | 0         |      | 1     | 1.0         | True      |\n| d1 | ds512M    | 512       | 5    | 0         |      | 1     | 1.0         | True      |\n| d2 | ds1G      | 1024      | 10   | 0         |      | 1     | 1.0         | True      |\n| d3 | ds2G      | 2048      | 10   | 0         |      | 2     | 1.0         | True      |\n| d4 | ds4G      | 4096      | 20   | 0         |      | 4     | 1.0         | True      |\n+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+\n\nSince the bdm in this case doesn\u0027t have guest_format defined, what actually gets created?\n\nRegardless, the test doesn\u0027t pass:\n\nhttp://logs.openstack.org/20/305120/28/check/gate-tempest-dsvm-neutron-full-ssh/8f05bbc/console.html#_2016-09-23_13_50_36_245081\n\nIt\u0027s just not run in the voting jobs.","commit_id":"ec03e58e990611e87b92af0a04a940836ede11c4"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"f48c519fef8d708c16d30d1eb01c18fabbc60b19","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                {"},{"line_number":204,"context_line":"                    \u0027source_type\u0027: \u0027blank\u0027,"},{"line_number":205,"context_line":"                    \u0027destination_type\u0027: \u0027local\u0027,"},{"line_number":206,"context_line":"                    \u0027volume_size\u0027: \u00271\u0027"},{"line_number":207,"context_line":"                }"},{"line_number":208,"context_line":"            ])"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5a8bc5a2_57fbddc0","line":206,"in_reply_to":"5a8bc5a2_360dd33e","updated":"2016-09-26 17:58:18.000000000","message":"I\u0027ve changed this to explicitly create a volume and then boot with it as an untagged volume. Not sure about flavors though - do I need to create a flavor to make sure I\u0027m allowed to boot an instance with the three volumes?","commit_id":"ec03e58e990611e87b92af0a04a940836ede11c4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"65cafc041e8e7bb0f04959125bfbaf138f016e51","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                {"},{"line_number":204,"context_line":"                    \u0027source_type\u0027: \u0027blank\u0027,"},{"line_number":205,"context_line":"                    \u0027destination_type\u0027: \u0027local\u0027,"},{"line_number":206,"context_line":"                    \u0027volume_size\u0027: \u00271\u0027"},{"line_number":207,"context_line":"                }"},{"line_number":208,"context_line":"            ])"},{"line_number":209,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5a8bc5a2_eccf0a7d","line":206,"in_reply_to":"5a8bc5a2_f12607cd","updated":"2016-09-23 18:42:25.000000000","message":"Ah yes:\n\nhttps://github.com/openstack/nova/blob/e53f3edf4efe9fbe4c49ff044ebb66096bec7358/nova/compute/api.py#L1330-L1334\n\nhttps://github.com/openstack/nova/blob/e53f3edf4efe9fbe4c49ff044ebb66096bec7358/nova/block_device.py#L444\n\nSo if guest_format isn\u0027t specified it\u0027s assumed to be ephemeral.","commit_id":"ec03e58e990611e87b92af0a04a940836ede11c4"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2453fffdbc38f3e5d4c280d9ca088bb913cdba46","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        self.addCleanup(self.subnets_client.delete_subnet, subnet2[\u0027id\u0027])"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        # Create ports"},{"line_number":140,"context_line":"        self.port1 \u003d self.ports_client.create_port("},{"line_number":141,"context_line":"            network_id\u003dnet1[\u0027id\u0027],"},{"line_number":142,"context_line":"            fixed_ips\u003d[{\u0027subnet_id\u0027: subnet1[\u0027id\u0027]}])[\u0027port\u0027]"},{"line_number":143,"context_line":"        self.addCleanup(self.ports_client.delete_port, self.port1[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_8a0f772d","line":140,"range":{"start_line":140,"start_character":8,"end_line":140,"end_character":13},"updated":"2016-10-24 02:43:41.000000000","message":"nit: This self seems unnecessary..","commit_id":"27faf75930b6348ac9cc87d0135dfea7e45ffbb7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0df8beefd253b35c1765fc7572d35b116fcc704f","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        self.addCleanup(self.subnets_client.delete_subnet, subnet2[\u0027id\u0027])"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        # Create ports"},{"line_number":140,"context_line":"        self.port1 \u003d self.ports_client.create_port("},{"line_number":141,"context_line":"            network_id\u003dnet1[\u0027id\u0027],"},{"line_number":142,"context_line":"            fixed_ips\u003d[{\u0027subnet_id\u0027: subnet1[\u0027id\u0027]}])[\u0027port\u0027]"},{"line_number":143,"context_line":"        self.addCleanup(self.ports_client.delete_port, self.port1[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_36a6d610","line":140,"range":{"start_line":140,"start_character":8,"end_line":140,"end_character":13},"in_reply_to":"da6895a0_8a0f772d","updated":"2016-10-24 08:30:36.000000000","message":"We use it in [1].\n\nhttps://review.openstack.org/#/c/305120/32/tempest/api/compute/servers/test_device_tagging.py@75","commit_id":"27faf75930b6348ac9cc87d0135dfea7e45ffbb7"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2453fffdbc38f3e5d4c280d9ca088bb913cdba46","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            fixed_ips\u003d[{\u0027subnet_id\u0027: subnet1[\u0027id\u0027]}])[\u0027port\u0027]"},{"line_number":143,"context_line":"        self.addCleanup(self.ports_client.delete_port, self.port1[\u0027id\u0027])"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self.port2 \u003d self.ports_client.create_port("},{"line_number":146,"context_line":"            network_id\u003dnet1[\u0027id\u0027],"},{"line_number":147,"context_line":"            fixed_ips\u003d[{\u0027subnet_id\u0027: subnet1[\u0027id\u0027]}])[\u0027port\u0027]"},{"line_number":148,"context_line":"        self.addCleanup(self.ports_client.delete_port, self.port2[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_ca196f7b","line":145,"range":{"start_line":145,"start_character":8,"end_line":145,"end_character":13},"updated":"2016-10-24 02:43:41.000000000","message":"ditto","commit_id":"27faf75930b6348ac9cc87d0135dfea7e45ffbb7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0df8beefd253b35c1765fc7572d35b116fcc704f","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            fixed_ips\u003d[{\u0027subnet_id\u0027: subnet1[\u0027id\u0027]}])[\u0027port\u0027]"},{"line_number":143,"context_line":"        self.addCleanup(self.ports_client.delete_port, self.port1[\u0027id\u0027])"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self.port2 \u003d self.ports_client.create_port("},{"line_number":146,"context_line":"            network_id\u003dnet1[\u0027id\u0027],"},{"line_number":147,"context_line":"            fixed_ips\u003d[{\u0027subnet_id\u0027: subnet1[\u0027id\u0027]}])[\u0027port\u0027]"},{"line_number":148,"context_line":"        self.addCleanup(self.ports_client.delete_port, self.port2[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_367df66e","line":145,"range":{"start_line":145,"start_character":8,"end_line":145,"end_character":13},"in_reply_to":"da6895a0_ca196f7b","updated":"2016-10-24 08:30:36.000000000","message":"ditto :)","commit_id":"27faf75930b6348ac9cc87d0135dfea7e45ffbb7"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2453fffdbc38f3e5d4c280d9ca088bb913cdba46","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self.port2 \u003d self.ports_client.create_port("},{"line_number":146,"context_line":"            network_id\u003dnet1[\u0027id\u0027],"},{"line_number":147,"context_line":"            fixed_ips\u003d[{\u0027subnet_id\u0027: subnet1[\u0027id\u0027]}])[\u0027port\u0027]"},{"line_number":148,"context_line":"        self.addCleanup(self.ports_client.delete_port, self.port2[\u0027id\u0027])"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        # Create server"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_4a247fae","line":147,"range":{"start_line":147,"start_character":37,"end_line":147,"end_character":44},"updated":"2016-10-24 02:43:41.000000000","message":"I am guessing here should be subnet2, not sbunet1 because subnet2 is not used in this test even but it is created.\n\nor don\u0027t we need to create subnet2 at all?\nIt is better to avoid unnecessary resource as possible.","commit_id":"27faf75930b6348ac9cc87d0135dfea7e45ffbb7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0df8beefd253b35c1765fc7572d35b116fcc704f","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self.port2 \u003d self.ports_client.create_port("},{"line_number":146,"context_line":"            network_id\u003dnet1[\u0027id\u0027],"},{"line_number":147,"context_line":"            fixed_ips\u003d[{\u0027subnet_id\u0027: subnet1[\u0027id\u0027]}])[\u0027port\u0027]"},{"line_number":148,"context_line":"        self.addCleanup(self.ports_client.delete_port, self.port2[\u0027id\u0027])"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        # Create server"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_16be32d4","line":147,"range":{"start_line":147,"start_character":37,"end_line":147,"end_character":44},"in_reply_to":"da6895a0_4a247fae","updated":"2016-10-24 08:30:36.000000000","message":"We\u0027re booting with nics on net-2 in [1] and [2], doesn\u0027t it mean we need a subnet for it?\n\n[1] https://review.openstack.org/#/c/305120/32/tempest/api/compute/servers/test_device_tagging.py@183\n[2] https://review.openstack.org/#/c/305120/32/tempest/api/compute/servers/test_device_tagging.py@188","commit_id":"27faf75930b6348ac9cc87d0135dfea7e45ffbb7"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2453fffdbc38f3e5d4c280d9ca088bb913cdba46","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            servers_client\u003dself.servers_client)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # Find the MAC addresses of our fixed IPs"},{"line_number":232,"context_line":"        self.net_2_100_mac \u003d None"},{"line_number":233,"context_line":"        self.net_2_200_mac \u003d None"},{"line_number":234,"context_line":"        ifaces \u003d self.interfaces_client.list_interfaces(server[\u0027id\u0027])"},{"line_number":235,"context_line":"        for iface in ifaces[\u0027interfaceAttachments\u0027]:"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_ca308feb","line":232,"range":{"start_line":232,"start_character":8,"end_line":232,"end_character":13},"updated":"2016-10-24 02:43:41.000000000","message":"ditto: unnecessary self.","commit_id":"27faf75930b6348ac9cc87d0135dfea7e45ffbb7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0df8beefd253b35c1765fc7572d35b116fcc704f","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            servers_client\u003dself.servers_client)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # Find the MAC addresses of our fixed IPs"},{"line_number":232,"context_line":"        self.net_2_100_mac \u003d None"},{"line_number":233,"context_line":"        self.net_2_200_mac \u003d None"},{"line_number":234,"context_line":"        ifaces \u003d self.interfaces_client.list_interfaces(server[\u0027id\u0027])"},{"line_number":235,"context_line":"        for iface in ifaces[\u0027interfaceAttachments\u0027]:"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_163552f6","line":232,"range":{"start_line":232,"start_character":8,"end_line":232,"end_character":13},"in_reply_to":"da6895a0_ca308feb","updated":"2016-10-24 08:30:36.000000000","message":"https://review.openstack.org/#/c/305120/32/tempest/api/compute/servers/test_device_tagging.py@79 :)","commit_id":"27faf75930b6348ac9cc87d0135dfea7e45ffbb7"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2453fffdbc38f3e5d4c280d9ca088bb913cdba46","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # Find the MAC addresses of our fixed IPs"},{"line_number":232,"context_line":"        self.net_2_100_mac \u003d None"},{"line_number":233,"context_line":"        self.net_2_200_mac \u003d None"},{"line_number":234,"context_line":"        ifaces \u003d self.interfaces_client.list_interfaces(server[\u0027id\u0027])"},{"line_number":235,"context_line":"        for iface in ifaces[\u0027interfaceAttachments\u0027]:"},{"line_number":236,"context_line":"            if \u0027fixed_ips\u0027 in iface:"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_ea4d5373","line":233,"range":{"start_line":233,"start_character":8,"end_line":233,"end_character":13},"updated":"2016-10-24 02:43:41.000000000","message":"ditto","commit_id":"27faf75930b6348ac9cc87d0135dfea7e45ffbb7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0df8beefd253b35c1765fc7572d35b116fcc704f","unresolved":false,"context_lines":[{"line_number":230,"context_line":""},{"line_number":231,"context_line":"        # Find the MAC addresses of our fixed IPs"},{"line_number":232,"context_line":"        self.net_2_100_mac \u003d None"},{"line_number":233,"context_line":"        self.net_2_200_mac \u003d None"},{"line_number":234,"context_line":"        ifaces \u003d self.interfaces_client.list_interfaces(server[\u0027id\u0027])"},{"line_number":235,"context_line":"        for iface in ifaces[\u0027interfaceAttachments\u0027]:"},{"line_number":236,"context_line":"            if \u0027fixed_ips\u0027 in iface:"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_f631be0c","line":233,"range":{"start_line":233,"start_character":8,"end_line":233,"end_character":13},"in_reply_to":"da6895a0_ea4d5373","updated":"2016-10-24 08:30:36.000000000","message":"https://review.openstack.org/#/c/305120/32/tempest/api/compute/servers/test_device_tagging.py@81 :)","commit_id":"27faf75930b6348ac9cc87d0135dfea7e45ffbb7"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"2453fffdbc38f3e5d4c280d9ca088bb913cdba46","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                        raise self.skipException(\u0027curl not found in guest \u0027"},{"line_number":257,"context_line":"                                                 \u0027and config drive is \u0027"},{"line_number":258,"context_line":"                                                 \u0027disabled\u0027)"},{"line_number":259,"context_line":"                    LOG.warning(\u0027curl was not found in the guest, device \u0027"},{"line_number":260,"context_line":"                                \u0027tagging metadata was not checked in the \u0027"},{"line_number":261,"context_line":"                                \u0027metadata API\u0027)"},{"line_number":262,"context_line":"                cmd \u003d \u0027curl %s\u0027 % md_url"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_ca5ecf11","line":259,"updated":"2016-10-24 02:43:41.000000000","message":"After this warning, I guess we need to \"return True\" here for skipping the following \"curl\" execution.\n\nMaybe it is just move this line252-259 to outside of get_and_verify_metadata() for simple code..","commit_id":"27faf75930b6348ac9cc87d0135dfea7e45ffbb7"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"0df8beefd253b35c1765fc7572d35b116fcc704f","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                        raise self.skipException(\u0027curl not found in guest \u0027"},{"line_number":257,"context_line":"                                                 \u0027and config drive is \u0027"},{"line_number":258,"context_line":"                                                 \u0027disabled\u0027)"},{"line_number":259,"context_line":"                    LOG.warning(\u0027curl was not found in the guest, device \u0027"},{"line_number":260,"context_line":"                                \u0027tagging metadata was not checked in the \u0027"},{"line_number":261,"context_line":"                                \u0027metadata API\u0027)"},{"line_number":262,"context_line":"                cmd \u003d \u0027curl %s\u0027 % md_url"}],"source_content_type":"text/x-python","patch_set":32,"id":"da6895a0_3645f66f","line":259,"in_reply_to":"da6895a0_ca5ecf11","updated":"2016-10-24 08:30:36.000000000","message":"\u003e After this warning, I guess we need to \"return True\" here\n\u003e for skipping the following \"curl\" execution.\n\nDone!\n\n\u003e Maybe it is just move this line252-259 to outside of\n\u003e get_and_verify_metadata() for simple code..\n\nI put it in get_and_verify_metadata() because that method is called in the call_until_true loop [1] to get a few retries in in case of a SSH timeout (which in my experience do happen at the beginning as the guest is booting up).\n\n[1] https://review.openstack.org/#/c/305120/32/tempest/api/compute/servers/test_device_tagging.py@267","commit_id":"27faf75930b6348ac9cc87d0135dfea7e45ffbb7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"476c71b27ea2cb1c9b32b549fb0e0fc2d315ee74","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    @test.services(\u0027network\u0027, \u0027volume\u0027, \u0027image\u0027)"},{"line_number":91,"context_line":"    def test_device_tagging(self):"},{"line_number":92,"context_line":"        # Create volumes"},{"line_number":93,"context_line":"        boot_volume \u003d self.volumes_client.create_volume("},{"line_number":94,"context_line":"            imageRef\u003dCONF.compute.image_ref, size\u003d1)[\u0027volume\u0027]"},{"line_number":95,"context_line":"        other_volume \u003d self.volumes_client.create_volume("},{"line_number":96,"context_line":"            size\u003d1)[\u0027volume\u0027]"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba5da102_0cf14e01","line":93,"updated":"2016-11-02 17:52:30.000000000","message":"You must use self.create_volume() here","commit_id":"0d7971c4cc963449f8e0cfadfc18bcc830e25d29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e8ddce2696c6c0aa9b4d3f8c261fd92034fb5dbc","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    @test.services(\u0027network\u0027, \u0027volume\u0027, \u0027image\u0027)"},{"line_number":91,"context_line":"    def test_device_tagging(self):"},{"line_number":92,"context_line":"        # Create volumes"},{"line_number":93,"context_line":"        boot_volume \u003d self.volumes_client.create_volume("},{"line_number":94,"context_line":"            imageRef\u003dCONF.compute.image_ref, size\u003d1)[\u0027volume\u0027]"},{"line_number":95,"context_line":"        other_volume \u003d self.volumes_client.create_volume("},{"line_number":96,"context_line":"            size\u003d1)[\u0027volume\u0027]"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a74a57a_dbb959eb","line":93,"in_reply_to":"ba5da102_0cf14e01","updated":"2016-11-23 21:46:04.000000000","message":"That should be OK except create_volume() doesn\u0027t allow specifying the image_ref to use. I\u0027m honestly not sure if it\u0027s needed, but we could pass it in as an optional argument. I think it is needed though because it\u0027s the boot volume.","commit_id":"0d7971c4cc963449f8e0cfadfc18bcc830e25d29"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"476c71b27ea2cb1c9b32b549fb0e0fc2d315ee74","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        # Create volumes"},{"line_number":93,"context_line":"        boot_volume \u003d self.volumes_client.create_volume("},{"line_number":94,"context_line":"            imageRef\u003dCONF.compute.image_ref, size\u003d1)[\u0027volume\u0027]"},{"line_number":95,"context_line":"        other_volume \u003d self.volumes_client.create_volume("},{"line_number":96,"context_line":"            size\u003d1)[\u0027volume\u0027]"},{"line_number":97,"context_line":"        untagged_volume \u003d self.volumes_client.create_volume("},{"line_number":98,"context_line":"            size\u003d1)[\u0027volume\u0027]"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba5da102_2cf612f9","line":95,"updated":"2016-11-02 17:52:30.000000000","message":"same","commit_id":"0d7971c4cc963449f8e0cfadfc18bcc830e25d29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e8ddce2696c6c0aa9b4d3f8c261fd92034fb5dbc","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        # Create volumes"},{"line_number":93,"context_line":"        boot_volume \u003d self.volumes_client.create_volume("},{"line_number":94,"context_line":"            imageRef\u003dCONF.compute.image_ref, size\u003d1)[\u0027volume\u0027]"},{"line_number":95,"context_line":"        other_volume \u003d self.volumes_client.create_volume("},{"line_number":96,"context_line":"            size\u003d1)[\u0027volume\u0027]"},{"line_number":97,"context_line":"        untagged_volume \u003d self.volumes_client.create_volume("},{"line_number":98,"context_line":"            size\u003d1)[\u0027volume\u0027]"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a74a57a_7b2be5eb","line":95,"in_reply_to":"ba5da102_2cf612f9","updated":"2016-11-23 21:46:04.000000000","message":"Done","commit_id":"0d7971c4cc963449f8e0cfadfc18bcc830e25d29"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"476c71b27ea2cb1c9b32b549fb0e0fc2d315ee74","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        untagged_volume \u003d self.volumes_client.create_volume("},{"line_number":98,"context_line":"            size\u003d1)[\u0027volume\u0027]"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self.addCleanup(self.volumes_client.delete_volume,"},{"line_number":101,"context_line":"                        boot_volume[\u0027id\u0027])"},{"line_number":102,"context_line":"        self.addCleanup(self.volumes_client.delete_volume,"},{"line_number":103,"context_line":"                        other_volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba5da102_6cdc8a73","line":100,"updated":"2016-11-02 17:52:30.000000000","message":"this is done already by self.create_volume()","commit_id":"0d7971c4cc963449f8e0cfadfc18bcc830e25d29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e8ddce2696c6c0aa9b4d3f8c261fd92034fb5dbc","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        untagged_volume \u003d self.volumes_client.create_volume("},{"line_number":98,"context_line":"            size\u003d1)[\u0027volume\u0027]"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        self.addCleanup(self.volumes_client.delete_volume,"},{"line_number":101,"context_line":"                        boot_volume[\u0027id\u0027])"},{"line_number":102,"context_line":"        self.addCleanup(self.volumes_client.delete_volume,"},{"line_number":103,"context_line":"                        other_volume[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a74a57a_9b30c158","line":100,"in_reply_to":"ba5da102_6cdc8a73","updated":"2016-11-23 21:46:04.000000000","message":"Done","commit_id":"0d7971c4cc963449f8e0cfadfc18bcc830e25d29"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"476c71b27ea2cb1c9b32b549fb0e0fc2d315ee74","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self.addCleanup(self.volumes_client.delete_volume,"},{"line_number":105,"context_line":"                        untagged_volume[\u0027id\u0027])"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        waiters.wait_for_volume_status(self.volumes_client,"},{"line_number":108,"context_line":"                                       boot_volume[\u0027id\u0027],"},{"line_number":109,"context_line":"                                       \u0027available\u0027)"},{"line_number":110,"context_line":"        waiters.wait_for_volume_status(self.volumes_client,"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba5da102_ace2222d","line":107,"updated":"2016-11-02 17:52:30.000000000","message":"same","commit_id":"0d7971c4cc963449f8e0cfadfc18bcc830e25d29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e8ddce2696c6c0aa9b4d3f8c261fd92034fb5dbc","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        self.addCleanup(self.volumes_client.delete_volume,"},{"line_number":105,"context_line":"                        untagged_volume[\u0027id\u0027])"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        waiters.wait_for_volume_status(self.volumes_client,"},{"line_number":108,"context_line":"                                       boot_volume[\u0027id\u0027],"},{"line_number":109,"context_line":"                                       \u0027available\u0027)"},{"line_number":110,"context_line":"        waiters.wait_for_volume_status(self.volumes_client,"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a74a57a_bb357d47","line":107,"in_reply_to":"ba5da102_ace2222d","updated":"2016-11-23 21:46:04.000000000","message":"Done","commit_id":"0d7971c4cc963449f8e0cfadfc18bcc830e25d29"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"476c71b27ea2cb1c9b32b549fb0e0fc2d315ee74","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        # Verify metadata from metadata service"},{"line_number":248,"context_line":"        if CONF.compute_feature_enabled.metadata_service:"},{"line_number":249,"context_line":"            md_url \u003d \u0027http://169.254.169.254/openstack/latest/meta_data.json\u0027"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"            def get_and_verify_metadata():"},{"line_number":252,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba5da102_ac15c2e5","line":249,"updated":"2016-11-02 17:52:30.000000000","message":"Could you add a logging message here (log lvel INFO) so that we know which code branch is executed please ?","commit_id":"0d7971c4cc963449f8e0cfadfc18bcc830e25d29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e8ddce2696c6c0aa9b4d3f8c261fd92034fb5dbc","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        # Verify metadata from metadata service"},{"line_number":248,"context_line":"        if CONF.compute_feature_enabled.metadata_service:"},{"line_number":249,"context_line":"            md_url \u003d \u0027http://169.254.169.254/openstack/latest/meta_data.json\u0027"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"            def get_and_verify_metadata():"},{"line_number":252,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a74a57a_fb3ff522","line":249,"in_reply_to":"ba5da102_ac15c2e5","updated":"2016-11-23 21:46:04.000000000","message":"Done","commit_id":"0d7971c4cc963449f8e0cfadfc18bcc830e25d29"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"476c71b27ea2cb1c9b32b549fb0e0fc2d315ee74","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        # Verify metadata on config drive"},{"line_number":275,"context_line":"        if CONF.compute_feature_enabled.config_drive:"},{"line_number":276,"context_line":"            cmd_blkid \u003d \u0027blkid -t LABEL\u003dconfig-2 -o device\u0027"},{"line_number":277,"context_line":"            dev_name \u003d self.ssh_client.exec_command(cmd_blkid)"},{"line_number":278,"context_line":"            dev_name \u003d dev_name.rstrip()"},{"line_number":279,"context_line":"            self.ssh_client.exec_command(\u0027sudo mount %s /mnt\u0027 % dev_name)"},{"line_number":280,"context_line":"            cmd_md \u003d \u0027sudo cat /mnt/openstack/latest/meta_data.json\u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"ba5da102_ccd4b621","line":277,"updated":"2016-11-02 17:52:30.000000000","message":"Could you add a logging message here (log lvel INFO) so that we know which code branch is executed please ?","commit_id":"0d7971c4cc963449f8e0cfadfc18bcc830e25d29"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e8ddce2696c6c0aa9b4d3f8c261fd92034fb5dbc","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        # Verify metadata on config drive"},{"line_number":275,"context_line":"        if CONF.compute_feature_enabled.config_drive:"},{"line_number":276,"context_line":"            cmd_blkid \u003d \u0027blkid -t LABEL\u003dconfig-2 -o device\u0027"},{"line_number":277,"context_line":"            dev_name \u003d self.ssh_client.exec_command(cmd_blkid)"},{"line_number":278,"context_line":"            dev_name \u003d dev_name.rstrip()"},{"line_number":279,"context_line":"            self.ssh_client.exec_command(\u0027sudo mount %s /mnt\u0027 % dev_name)"},{"line_number":280,"context_line":"            cmd_md \u003d \u0027sudo cat /mnt/openstack/latest/meta_data.json\u0027"}],"source_content_type":"text/x-python","patch_set":35,"id":"5a74a57a_7b7925fc","line":277,"in_reply_to":"ba5da102_ccd4b621","updated":"2016-11-23 21:46:04.000000000","message":"Done","commit_id":"0d7971c4cc963449f8e0cfadfc18bcc830e25d29"}],"tempest/scenario/test_device_tagging.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"042033b357cd2d68d2e7aa33f8433ee748ee2b5e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                CONF.compute.min_microversion))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    @classmethod"},{"line_number":47,"context_line":"    def sckip_checks(cls):"},{"line_number":48,"context_line":"        super(TestDeviceTagging, cls).skip_checks()"},{"line_number":49,"context_line":"        cfg_min_version \u003d CONF.compute.min_microversion"},{"line_number":50,"context_line":"        cfg_max_version \u003d CONF.compute.max_microversion"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_a3aea97e","line":47,"range":{"start_line":47,"start_character":8,"end_line":47,"end_character":20},"updated":"2016-06-23 16:14:12.000000000","message":"skip_checks","commit_id":"56ae398305b6fe6dd8e72397ef11f2b408a972c4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bfa9cd0fc85bb4dc3db46ec68653cdb3a6e16efa","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    @classmethod"},{"line_number":47,"context_line":"    def sckip_checks(cls):"},{"line_number":48,"context_line":"        super(TestDeviceTagging, cls).skip_checks()"},{"line_number":49,"context_line":"        cfg_min_version \u003d CONF.compute.min_microversion"},{"line_number":50,"context_line":"        cfg_max_version \u003d CONF.compute.max_microversion"},{"line_number":51,"context_line":"        api_version_utils.check_skip_with_microversion(cls.min_microversion,"},{"line_number":52,"context_line":"                                                       cls.max_microversion,"},{"line_number":53,"context_line":"                                                       cfg_min_version,"},{"line_number":54,"context_line":"                                                       cfg_max_version)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def setUp(self):"},{"line_number":57,"context_line":"        super(TestDeviceTagging, self).setUp()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_43326560","line":54,"range":{"start_line":49,"start_character":8,"end_line":54,"end_character":71},"updated":"2016-06-23 16:17:05.000000000","message":"I\u0027m pretty sure you don\u0027t need to do this all yourself.\n\nI\u0027m also not sure this should be a scenario test, so how I\u0027m testing auto-allocated networking here:\n\nhttps://review.openstack.org/#/c/327191/15/tempest/api/compute/admin/test_auto_allocate_network.py","commit_id":"56ae398305b6fe6dd8e72397ef11f2b408a972c4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bfa9cd0fc85bb4dc3db46ec68653cdb3a6e16efa","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        if not hasattr(self, \u0027flavor_ref\u0027):"},{"line_number":63,"context_line":"            self.flavor_ref \u003d CONF.compute.flavor_ref"},{"line_number":64,"context_line":"        self.image_utils \u003d test_utils.ImageUtils(self.manager)"},{"line_number":65,"context_line":"        if not self.image_utils.is_flavor_enough(self.flavor_ref,"},{"line_number":66,"context_line":"                                                 self.image_ref):"},{"line_number":67,"context_line":"            raise self.SkipException(\u0027{image} does not fit in \u0027"},{"line_number":68,"context_line":"                                     \u0027{flavor}\u0027.format(image\u003dself.image_ref,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_6314c19f","line":65,"updated":"2016-06-23 16:17:05.000000000","message":"This doesn\u0027t seem like something we should have to worry about is it?","commit_id":"56ae398305b6fe6dd8e72397ef11f2b408a972c4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c090e4793dcfdf8560264f977de0c0770661155","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        self.assertItemsEqual(found_devices, [\u0027ssh-port\u0027, \u0027other-port\u0027,"},{"line_number":145,"context_line":"                                              \u0027boot-volume\u0027, \u0027other-volume\u0027])"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def verify_device_metadata(self):"},{"line_number":148,"context_line":"        md_url \u003d \u0027http://169.254.169.254/openstack/latest/meta_data.json\u0027"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        def get_and_verify_metadata():"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_86861bd9","line":147,"updated":"2016-06-23 16:32:52.000000000","message":"This also seems like it should be configurable in tempest, because the metadata service isn\u0027t running in all jobs, it\u0027s only running in the postgresql job I think.","commit_id":"56ae398305b6fe6dd8e72397ef11f2b408a972c4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3d5ed527b53878a41836ae8c1b808c358271602a","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                                              \u0027boot-volume\u0027, \u0027other-volume\u0027])"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def verify_device_metadata(self):"},{"line_number":148,"context_line":"        md_url \u003d \u0027http://169.254.169.254/openstack/latest/meta_data.json\u0027"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        def get_and_verify_metadata():"},{"line_number":151,"context_line":"            cmd \u003d \u0027curl %s\u0027 % md_url"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_c6f78389","line":148,"updated":"2016-06-23 16:31:36.000000000","message":"Seems this should be configurable?","commit_id":"56ae398305b6fe6dd8e72397ef11f2b408a972c4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"50abdd49698e793916eb40a8ef6470f24652dfbf","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                                              \u0027boot-volume\u0027, \u0027other-volume\u0027])"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def verify_device_metadata(self):"},{"line_number":148,"context_line":"        md_url \u003d \u0027http://169.254.169.254/openstack/latest/meta_data.json\u0027"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        def get_and_verify_metadata():"},{"line_number":151,"context_line":"            cmd \u003d \u0027curl %s\u0027 % md_url"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_b96c1836","line":148,"in_reply_to":"3aaa91ec_c6f78389","updated":"2016-06-23 16:52:17.000000000","message":"Shouldn\u0027t need to be configurable I think. We should just be able to ssh in and hit the MD API, and if that fails, read configdrive, then examine the data regardless of where we got it from. If both fail, then fail.","commit_id":"56ae398305b6fe6dd8e72397ef11f2b408a972c4"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"50abdd49698e793916eb40a8ef6470f24652dfbf","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        self.ssh_client.exec_command(\u0027sudo mount %s /mnt\u0027 % dev_name)"},{"line_number":167,"context_line":"        cmd_md \u003d \u0027sudo cat /mnt/openstack/latest/meta_data.json\u0027"},{"line_number":168,"context_line":"        md_json \u003d self.ssh_client.exec_command(cmd_md)"},{"line_number":169,"context_line":"        self._verify_device_metadata(md_json)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"    @test.idempotent_id(\u0027a2e65a6c-66f1-4442-aaa8-498c31778d96\u0027)"},{"line_number":172,"context_line":"    @test.services(\u0027compute\u0027, \u0027network\u0027, \u0027volume\u0027, \u0027image\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_390b0890","line":169,"updated":"2016-06-23 16:52:17.000000000","message":"This ends up calling the metadata api, right? Seems like this function assumes both metadata api and configdrive at the same time?","commit_id":"56ae398305b6fe6dd8e72397ef11f2b408a972c4"}]}
