)]}'
{"tempest/api/compute/base.py":[{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"f52e096285fdd718641faa2bf35d9d00967bcc1e","unresolved":false,"context_lines":[{"line_number":438,"context_line":"            completion. This is to handle new Cinder attach where we more"},{"line_number":439,"context_line":"            accurately use \u0027reserved\u0027 for things like attaching to a shelved"},{"line_number":440,"context_line":"            server."},{"line_number":441,"context_line":"        \"\"\""},{"line_number":442,"context_line":"        attach_kwargs \u003d dict(volumeId\u003dvolume[\u0027id\u0027])"},{"line_number":443,"context_line":"        if device:"},{"line_number":444,"context_line":"            attach_kwargs[\u0027device\u0027] \u003d device"}],"source_content_type":"text/x-python","patch_set":37,"id":"3f1d235d_d000bd04","line":441,"updated":"2017-07-06 23:33:14.000000000","message":"nit: missing docstring for tag kwarg.","commit_id":"60651284cd9030f45d0c27e4fc1d62e45366b028"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"3eacfa596514f2693a6fcfce87c36fdd54235735","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        :param check_reserved: Consider a status of reserved as valid for"},{"line_number":438,"context_line":"            completion. This is to handle new Cinder attach where we more"},{"line_number":439,"context_line":"            accurately use \u0027reserved\u0027 for things like attaching to a shelved"},{"line_number":440,"context_line":"            server."},{"line_number":441,"context_line":"        \"\"\""},{"line_number":442,"context_line":"        attach_kwargs \u003d dict(volumeId\u003dvolume[\u0027id\u0027])"},{"line_number":443,"context_line":"        if device:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f287b81_3f5fa873","line":440,"updated":"2017-09-01 05:14:38.000000000","message":"Could you add a doc for the tag param here?","commit_id":"72b812a7619c68077219902986f7c2758a994561"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"8c09e7feecfe8c47e2986576702947d54f816db2","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        :param check_reserved: Consider a status of reserved as valid for"},{"line_number":438,"context_line":"            completion. This is to handle new Cinder attach where we more"},{"line_number":439,"context_line":"            accurately use \u0027reserved\u0027 for things like attaching to a shelved"},{"line_number":440,"context_line":"            server."},{"line_number":441,"context_line":"        \"\"\""},{"line_number":442,"context_line":"        attach_kwargs \u003d dict(volumeId\u003dvolume[\u0027id\u0027])"},{"line_number":443,"context_line":"        if device:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f287b81_a56382b1","line":440,"in_reply_to":"7f287b81_3f5fa873","updated":"2017-10-17 09:46:37.000000000","message":"Done","commit_id":"72b812a7619c68077219902986f7c2758a994561"}],"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":"d764cfc58e27d6819777891ce5d8135442a75dc0","unresolved":false,"context_lines":[{"line_number":300,"context_line":"    def verify_device_metadata(self, md_json):"},{"line_number":301,"context_line":"        md_dict \u003d json.loads(md_json)"},{"line_number":302,"context_line":"        found_devices \u003d [d[\u0027tags\u0027][0] for d in md_dict[\u0027devices\u0027]]"},{"line_number":303,"context_line":"        self.assertItemsEqual(found_devices, [\u0027nic-tag\u0027, \u0027volume-tag\u0027])"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def verify_device_metadata_shelved(self, md_json):"},{"line_number":306,"context_line":"        md_dict \u003d json.loads(md_json)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dfeb2761_fa8332a8","line":303,"updated":"2017-04-03 15:30:47.000000000","message":"Looks like you\u0027re getting back an empty list:\n\nhttp://logs.openstack.org/47/391947/14/check/gate-tempest-dsvm-neutron-full-ssh/b941867/console.html#_2017-03-29_18_32_32_421387","commit_id":"936f1a42e86b4e80954d088272bcd78c79108415"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d764cfc58e27d6819777891ce5d8135442a75dc0","unresolved":false,"context_lines":[{"line_number":302,"context_line":"        found_devices \u003d [d[\u0027tags\u0027][0] for d in md_dict[\u0027devices\u0027]]"},{"line_number":303,"context_line":"        self.assertItemsEqual(found_devices, [\u0027nic-tag\u0027, \u0027volume-tag\u0027])"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    def verify_device_metadata_shelved(self, md_json):"},{"line_number":306,"context_line":"        md_dict \u003d json.loads(md_json)"},{"line_number":307,"context_line":"        found_devices \u003d [d[\u0027tags\u0027][0] for d in md_dict[\u0027devices\u0027]]"},{"line_number":308,"context_line":"        self.assertItemsEqual(found_devices,"}],"source_content_type":"text/x-python","patch_set":14,"id":"dfeb2761_1a8936c9","line":305,"updated":"2017-04-03 15:30:47.000000000","message":"This isn\u0027t used anywhere.","commit_id":"936f1a42e86b4e80954d088272bcd78c79108415"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"d764cfc58e27d6819777891ce5d8135442a75dc0","unresolved":false,"context_lines":[{"line_number":338,"context_line":"        self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"        # Attach tagged nic and volume"},{"line_number":341,"context_line":"        self.interfaces_client.create_interface(server[\u0027id\u0027], net_id\u003dnet[\u0027id\u0027],"},{"line_number":342,"context_line":"                                                tag\u003d\u0027nic-tag\u0027)"},{"line_number":343,"context_line":"        self.attach_volume(server, volume, tag\u003d\u0027volume-tag\u0027)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        ssh_client \u003d remote_client.RemoteClient("},{"line_number":346,"context_line":"            self.get_server_ip(server),"}],"source_content_type":"text/x-python","patch_set":14,"id":"dfeb2761_ba548a22","line":343,"range":{"start_line":341,"start_character":8,"end_line":343,"end_character":60},"updated":"2017-04-03 15:30:47.000000000","message":"These attach operations are async. The attach_volume method will wait for the volume to be in-use, but for the vif attach you need to wait for the port to be active and used by the instance, e.g.:\n\nwaiters.wait_for_interface_status(\n            self.interfaces_client, server[\u0027id\u0027], iface[\u0027port_id\u0027], \u0027ACTIVE\u0027)","commit_id":"936f1a42e86b4e80954d088272bcd78c79108415"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"510aa599e633541baeb14a20cb095d07fc1e8e2f","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            server\u003dserver,"},{"line_number":350,"context_line":"            servers_client\u003dself.servers_client)"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        # Verify metadata on from metadata service"},{"line_number":353,"context_line":"        if CONF.compute_feature_enabled.metadata_service:"},{"line_number":354,"context_line":"            self.verify_metadata_from_api(server, ssh_client,"},{"line_number":355,"context_line":"                                          self.verify_device_metadata)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dfeb2761_959519e7","line":352,"updated":"2017-04-03 15:51:15.000000000","message":"Why aren\u0027t you also checking via config drive?\n\n# Verify metadata on config drive\nif CONF.compute_feature_enabled.config_drive:\n    self.verify_metadata_on_config_drive(server, ssh_client, self.verify_device_metadata)","commit_id":"936f1a42e86b4e80954d088272bcd78c79108415"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"949ff62893282be991587a0c5a040216019a13d8","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            server\u003dserver,"},{"line_number":350,"context_line":"            servers_client\u003dself.servers_client)"},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        # Verify metadata on from metadata service"},{"line_number":353,"context_line":"        if CONF.compute_feature_enabled.metadata_service:"},{"line_number":354,"context_line":"            self.verify_metadata_from_api(server, ssh_client,"},{"line_number":355,"context_line":"                                          self.verify_device_metadata)"}],"source_content_type":"text/x-python","patch_set":14,"id":"dfeb2761_754f3592","line":352,"in_reply_to":"dfeb2761_959519e7","updated":"2017-04-03 15:52:17.000000000","message":"Oh right we don\u0027t update config drive on attach. It would probably be good to add a note in here about that.","commit_id":"936f1a42e86b4e80954d088272bcd78c79108415"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"905a7c7fa96610aeb4738124ff132dda21403a78","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            raise cls.skipException(\u0027One of metadata or config drive must be \u0027"},{"line_number":53,"context_line":"                                    \u0027enabled\u0027)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @classmethod"},{"line_number":56,"context_line":"    def setup_clients(cls):"},{"line_number":57,"context_line":"        super(DeviceTaggingTest, cls).setup_clients()"},{"line_number":58,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":59,"context_line":"        cls.ports_client \u003d cls.os.ports_client"},{"line_number":60,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":61,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    @classmethod"},{"line_number":64,"context_line":"    def setup_credentials(cls):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5ff73747_38042615","side":"PARENT","line":61,"range":{"start_line":55,"start_character":0,"end_line":61,"end_character":56},"updated":"2017-04-25 06:55:45.000000000","message":"this can be kept and can add cls.volumes_client \u003d cls.os.volumes_client for TaggedAttachmentsTest","commit_id":"ebb74eb2df269335fd95ca9130b71866e715f76c"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"905a7c7fa96610aeb4738124ff132dda21403a78","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class DeviceTaggingBase(base.BaseV2ComputeTest):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    min_microversion \u003d \u00272.32\u0027"},{"line_number":38,"context_line":"    # NOTE(mriedem): max_version looks odd but it\u0027s actually correct. Due to a"},{"line_number":39,"context_line":"    # bug in the 2.32 microversion, tags on block devices only worked with the"},{"line_number":40,"context_line":"    # 2.32 microversion specifically. And tags on networks only worked between"},{"line_number":41,"context_line":"    # 2.32 and 2.36 inclusive; the 2.37 microversion broke tags for networks."},{"line_number":42,"context_line":"    max_microversion \u003d \u00272.32\u0027"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @classmethod"},{"line_number":45,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5ff73747_e424dac8","line":42,"range":{"start_line":37,"start_character":0,"end_line":42,"end_character":29},"updated":"2017-04-25 06:55:45.000000000","message":"this seems should move to TaggedBootDevicesTest","commit_id":"1603ad80613ae6f1c6cb639aa9c2207cf218e5d6"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"905a7c7fa96610aeb4738124ff132dda21403a78","unresolved":false,"context_lines":[{"line_number":108,"context_line":"class TaggedBootDevicesTest(DeviceTaggingBase):"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    min_microversion \u003d \u00272.32\u0027"},{"line_number":111,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @classmethod"},{"line_number":114,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5ff73747_f80d9e37","line":111,"range":{"start_line":111,"start_character":4,"end_line":111,"end_character":31},"updated":"2017-04-25 06:55:45.000000000","message":"why modify this to \u0027latest\u0027?","commit_id":"1603ad80613ae6f1c6cb639aa9c2207cf218e5d6"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"905a7c7fa96610aeb4738124ff132dda21403a78","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        server \u003d self.create_test_server("},{"line_number":335,"context_line":"            validatable\u003dTrue,"},{"line_number":336,"context_line":"            config_drive\u003dconfig_drive_enabled,"},{"line_number":337,"context_line":"            name\u003ddata_utils.rand_name(\u0027device-tagging-server\u0027),"},{"line_number":338,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.get_tenant_network()[\u0027id\u0027]}])"},{"line_number":339,"context_line":"        self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":340,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5ff73747_3852e614","line":337,"range":{"start_line":337,"start_character":12,"end_line":337,"end_character":63},"updated":"2017-04-25 06:55:45.000000000","message":"this can be removed","commit_id":"1603ad80613ae6f1c6cb639aa9c2207cf218e5d6"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a58a3b4a87e3f9ef8094e3c1abf4e9eaa4f156bc","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                LOG.warning(\u0027curl was not found in the guest, device \u0027"},{"line_number":89,"context_line":"                            \u0027tagging metadata was not checked in the \u0027"},{"line_number":90,"context_line":"                            \u0027metadata API\u0027)"},{"line_number":91,"context_line":"                return True"},{"line_number":92,"context_line":"            cmd \u003d \u0027curl %s\u0027 % md_url"},{"line_number":93,"context_line":"            md_json \u003d ssh_client.exec_command(cmd)"},{"line_number":94,"context_line":"            verify_method(md_json)"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_8599ccd1","line":91,"range":{"start_line":91,"start_character":23,"end_line":91,"end_character":27},"updated":"2017-06-19 20:55:25.000000000","message":"Looks like this should be False?","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b9534be444ef1dab58e2a294104ed94f75fd7063","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                LOG.warning(\u0027curl was not found in the guest, device \u0027"},{"line_number":89,"context_line":"                            \u0027tagging metadata was not checked in the \u0027"},{"line_number":90,"context_line":"                            \u0027metadata API\u0027)"},{"line_number":91,"context_line":"                return True"},{"line_number":92,"context_line":"            cmd \u003d \u0027curl %s\u0027 % md_url"},{"line_number":93,"context_line":"            md_json \u003d ssh_client.exec_command(cmd)"},{"line_number":94,"context_line":"            verify_method(md_json)"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_27aaf2d1","line":91,"range":{"start_line":91,"start_character":23,"end_line":91,"end_character":27},"in_reply_to":"7f231b9d_8599ccd1","updated":"2017-06-20 07:23:11.000000000","message":"This is to break out of the call_until_true loop a few lines down, so it shouldn\u0027t be False.\n\nYou do however raise the good point that this code path doesn\u0027t actually fail the test if the metadata from the API wasn\u0027t verified. The verify_metadata_from_api method is just a refactoring of L232-237, so while the method is new, its code isn\u0027t, and \u0027return True\u0027 is how the original device tagging test was merged.\n\nThinking about it, it makes sense: skipException is raised if curl is not found *and* config drive is disabled, so we can\u0027t verify the metadata at all.\n\nHowever, if curl is not found but config drive is enabled, the test should only fail if the metadata on the config drive doesn\u0027t match or can\u0027t be verified at all, so I think the logic here is sound.","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a58a3b4a87e3f9ef8094e3c1abf4e9eaa4f156bc","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    @classmethod"},{"line_number":132,"context_line":"    def setup_clients(cls):"},{"line_number":133,"context_line":"        super(TaggedBootDevicesTest, cls).setup_clients()"},{"line_number":134,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":135,"context_line":"        cls.ports_client \u003d cls.os.ports_client"},{"line_number":136,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":137,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_c58fc473","line":134,"range":{"start_line":134,"start_character":34,"end_line":134,"end_character":36},"updated":"2017-06-19 20:55:25.000000000","message":"os_primary, os is deprecated\n\nAlso, aren\u0027t these clients already defined in the base compute class by default?","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b9534be444ef1dab58e2a294104ed94f75fd7063","unresolved":false,"context_lines":[{"line_number":131,"context_line":"    @classmethod"},{"line_number":132,"context_line":"    def setup_clients(cls):"},{"line_number":133,"context_line":"        super(TaggedBootDevicesTest, cls).setup_clients()"},{"line_number":134,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":135,"context_line":"        cls.ports_client \u003d cls.os.ports_client"},{"line_number":136,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":137,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_873f8686","line":134,"range":{"start_line":134,"start_character":34,"end_line":134,"end_character":36},"in_reply_to":"7f231b9d_c58fc473","updated":"2017-06-20 07:23:11.000000000","message":"\u003e os_primary, os is deprecated\n\nDone.\n\n\u003e Also, aren\u0027t these clients already defined in the base\n\u003e compute class by default?\n\nNot these networking ones: https://github.com/openstack/tempest/blob/master/tempest/api/compute/base.py","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a58a3b4a87e3f9ef8094e3c1abf4e9eaa4f156bc","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    def setup_clients(cls):"},{"line_number":133,"context_line":"        super(TaggedBootDevicesTest, cls).setup_clients()"},{"line_number":134,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":135,"context_line":"        cls.ports_client \u003d cls.os.ports_client"},{"line_number":136,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":137,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_85e78c47","line":135,"range":{"start_line":135,"start_character":31,"end_line":135,"end_character":33},"updated":"2017-06-19 20:55:25.000000000","message":"Ditto","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b9534be444ef1dab58e2a294104ed94f75fd7063","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    def setup_clients(cls):"},{"line_number":133,"context_line":"        super(TaggedBootDevicesTest, cls).setup_clients()"},{"line_number":134,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":135,"context_line":"        cls.ports_client \u003d cls.os.ports_client"},{"line_number":136,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":137,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_675d8ae8","line":135,"range":{"start_line":135,"start_character":31,"end_line":135,"end_character":33},"in_reply_to":"7f231b9d_85e78c47","updated":"2017-06-20 07:23:11.000000000","message":"Done","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a58a3b4a87e3f9ef8094e3c1abf4e9eaa4f156bc","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        super(TaggedBootDevicesTest, cls).setup_clients()"},{"line_number":134,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":135,"context_line":"        cls.ports_client \u003d cls.os.ports_client"},{"line_number":136,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":137,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def verify_device_metadata(self, md_json):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_45f17401","line":136,"range":{"start_line":136,"start_character":33,"end_line":136,"end_character":35},"updated":"2017-06-19 20:55:25.000000000","message":"Ditto","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b9534be444ef1dab58e2a294104ed94f75fd7063","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        super(TaggedBootDevicesTest, cls).setup_clients()"},{"line_number":134,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":135,"context_line":"        cls.ports_client \u003d cls.os.ports_client"},{"line_number":136,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":137,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def verify_device_metadata(self, md_json):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_47728e7e","line":136,"range":{"start_line":136,"start_character":33,"end_line":136,"end_character":35},"in_reply_to":"7f231b9d_45f17401","updated":"2017-06-20 07:23:11.000000000","message":"Done","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a58a3b4a87e3f9ef8094e3c1abf4e9eaa4f156bc","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":135,"context_line":"        cls.ports_client \u003d cls.os.ports_client"},{"line_number":136,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":137,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def verify_device_metadata(self, md_json):"},{"line_number":140,"context_line":"        md_dict \u003d json.loads(md_json)"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_25f678fb","line":137,"range":{"start_line":137,"start_character":36,"end_line":137,"end_character":38},"updated":"2017-06-19 20:55:25.000000000","message":"Ditto","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b9534be444ef1dab58e2a294104ed94f75fd7063","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":135,"context_line":"        cls.ports_client \u003d cls.os.ports_client"},{"line_number":136,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":137,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def verify_device_metadata(self, md_json):"},{"line_number":140,"context_line":"        md_dict \u003d json.loads(md_json)"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_076c969a","line":137,"range":{"start_line":137,"start_character":36,"end_line":137,"end_character":38},"in_reply_to":"7f231b9d_25f678fb","updated":"2017-06-20 07:23:11.000000000","message":"Done","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a58a3b4a87e3f9ef8094e3c1abf4e9eaa4f156bc","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        ssh_client \u003d remote_client.RemoteClient("},{"line_number":268,"context_line":"            self.get_server_ip(server),"},{"line_number":269,"context_line":"            CONF.validation.image_ssh_user,"},{"line_number":270,"context_line":"            pkey\u003dself.validation_resources[\u0027keypair\u0027][\u0027private_key\u0027],"},{"line_number":271,"context_line":"            server\u003dserver,"},{"line_number":272,"context_line":"            servers_client\u003dself.servers_client)"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_e592c09f","line":270,"range":{"start_line":270,"start_character":16,"end_line":270,"end_character":17},"updated":"2017-06-19 20:55:25.000000000","message":"nit: missing spaces around \u003d sign","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b9534be444ef1dab58e2a294104ed94f75fd7063","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        ssh_client \u003d remote_client.RemoteClient("},{"line_number":268,"context_line":"            self.get_server_ip(server),"},{"line_number":269,"context_line":"            CONF.validation.image_ssh_user,"},{"line_number":270,"context_line":"            pkey\u003dself.validation_resources[\u0027keypair\u0027][\u0027private_key\u0027],"},{"line_number":271,"context_line":"            server\u003dserver,"},{"line_number":272,"context_line":"            servers_client\u003dself.servers_client)"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_c7033ebe","line":270,"range":{"start_line":270,"start_character":16,"end_line":270,"end_character":17},"in_reply_to":"7f231b9d_e592c09f","updated":"2017-06-20 07:23:11.000000000","message":"We don\u0027t need spaces when it\u0027s a kwarg. In fact, pep8 fails if we put some there.","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a58a3b4a87e3f9ef8094e3c1abf4e9eaa4f156bc","unresolved":false,"context_lines":[{"line_number":311,"context_line":"    @classmethod"},{"line_number":312,"context_line":"    def setup_clients(cls):"},{"line_number":313,"context_line":"        super(TaggedAttachmentsTest, cls).setup_clients()"},{"line_number":314,"context_line":"        cls.volumes_client \u003d cls.os.volumes_client"},{"line_number":315,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":316,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":317,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_e5c0807f","line":314,"range":{"start_line":314,"start_character":33,"end_line":314,"end_character":35},"updated":"2017-06-19 20:55:25.000000000","message":"os_primary, see comments above","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b9534be444ef1dab58e2a294104ed94f75fd7063","unresolved":false,"context_lines":[{"line_number":311,"context_line":"    @classmethod"},{"line_number":312,"context_line":"    def setup_clients(cls):"},{"line_number":313,"context_line":"        super(TaggedAttachmentsTest, cls).setup_clients()"},{"line_number":314,"context_line":"        cls.volumes_client \u003d cls.os.volumes_client"},{"line_number":315,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":316,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":317,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_67122a0c","line":314,"range":{"start_line":314,"start_character":33,"end_line":314,"end_character":35},"in_reply_to":"7f231b9d_e5c0807f","updated":"2017-06-20 07:23:11.000000000","message":"Done. And actually the volumes client is the only one that\u0027s defined in the base class [1] so I can remove it here.\n\n[1] https://github.com/openstack/tempest/blob/master/tempest/api/compute/base.py#L100","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a58a3b4a87e3f9ef8094e3c1abf4e9eaa4f156bc","unresolved":false,"context_lines":[{"line_number":312,"context_line":"    def setup_clients(cls):"},{"line_number":313,"context_line":"        super(TaggedAttachmentsTest, cls).setup_clients()"},{"line_number":314,"context_line":"        cls.volumes_client \u003d cls.os.volumes_client"},{"line_number":315,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":316,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":317,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":318,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_c5bd8403","line":315,"range":{"start_line":315,"start_character":34,"end_line":315,"end_character":36},"updated":"2017-06-19 20:55:25.000000000","message":"Ditto","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b9534be444ef1dab58e2a294104ed94f75fd7063","unresolved":false,"context_lines":[{"line_number":312,"context_line":"    def setup_clients(cls):"},{"line_number":313,"context_line":"        super(TaggedAttachmentsTest, cls).setup_clients()"},{"line_number":314,"context_line":"        cls.volumes_client \u003d cls.os.volumes_client"},{"line_number":315,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":316,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":317,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":318,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_47f72ed6","line":315,"range":{"start_line":315,"start_character":34,"end_line":315,"end_character":36},"in_reply_to":"7f231b9d_c5bd8403","updated":"2017-06-20 07:23:11.000000000","message":"Done","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a58a3b4a87e3f9ef8094e3c1abf4e9eaa4f156bc","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        super(TaggedAttachmentsTest, cls).setup_clients()"},{"line_number":314,"context_line":"        cls.volumes_client \u003d cls.os.volumes_client"},{"line_number":315,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":316,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":317,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    def verify_device_metadata(self, md_json):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_a5ba8807","line":316,"range":{"start_line":316,"start_character":36,"end_line":316,"end_character":38},"updated":"2017-06-19 20:55:25.000000000","message":"Ditto","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b9534be444ef1dab58e2a294104ed94f75fd7063","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        super(TaggedAttachmentsTest, cls).setup_clients()"},{"line_number":314,"context_line":"        cls.volumes_client \u003d cls.os.volumes_client"},{"line_number":315,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":316,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":317,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    def verify_device_metadata(self, md_json):"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_070136b0","line":316,"range":{"start_line":316,"start_character":36,"end_line":316,"end_character":38},"in_reply_to":"7f231b9d_a5ba8807","updated":"2017-06-20 07:23:11.000000000","message":"Done","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":23186,"name":"Felipe Monteiro","email":"felipe.carneiro.monteiro@gmail.com","username":"felipe.monteiro"},"change_message_id":"a58a3b4a87e3f9ef8094e3c1abf4e9eaa4f156bc","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        cls.volumes_client \u003d cls.os.volumes_client"},{"line_number":315,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":316,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":317,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    def verify_device_metadata(self, md_json):"},{"line_number":320,"context_line":"        md_dict \u003d json.loads(md_json)"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_85354cab","line":317,"range":{"start_line":317,"start_character":33,"end_line":317,"end_character":35},"updated":"2017-06-19 20:55:25.000000000","message":"Ditto","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"b9534be444ef1dab58e2a294104ed94f75fd7063","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        cls.volumes_client \u003d cls.os.volumes_client"},{"line_number":315,"context_line":"        cls.networks_client \u003d cls.os.networks_client"},{"line_number":316,"context_line":"        cls.interfaces_client \u003d cls.os.interfaces_client"},{"line_number":317,"context_line":"        cls.subnets_client \u003d cls.os.subnets_client"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    def verify_device_metadata(self, md_json):"},{"line_number":320,"context_line":"        md_dict \u003d json.loads(md_json)"}],"source_content_type":"text/x-python","patch_set":27,"id":"7f231b9d_071a5616","line":317,"range":{"start_line":317,"start_character":33,"end_line":317,"end_character":35},"in_reply_to":"7f231b9d_85354cab","updated":"2017-06-20 07:23:11.000000000","message":"Done","commit_id":"2da5a7036734ca2eba8165f953cd3a592424bd38"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"214046a6fa06845db3677f9ab4a3043bd9b6af02","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class DeviceTaggingBase(base.BaseV2ComputeTest):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    min_microversion \u003d \u00272.32\u0027"},{"line_number":38,"context_line":"    # NOTE(mriedem): max_version looks odd but it\u0027s actually correct. Due to a"},{"line_number":39,"context_line":"    # bug in the 2.32 microversion, tags on block devices only worked with the"},{"line_number":40,"context_line":"    # 2.32 microversion specifically. And tags on networks only worked between"},{"line_number":41,"context_line":"    # 2.32 and 2.36 inclusive; the 2.37 microversion broke tags for networks."},{"line_number":42,"context_line":"    max_microversion \u003d \u00272.32\u0027"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @classmethod"},{"line_number":45,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_e0df14d4","line":42,"range":{"start_line":37,"start_character":0,"end_line":42,"end_character":29},"updated":"2017-06-22 08:36:42.000000000","message":"should be moved info TaggedBootDevicesTest","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9cbec6ac01be54c5691685e4a961455e5883f005","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class DeviceTaggingBase(base.BaseV2ComputeTest):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    min_microversion \u003d \u00272.32\u0027"},{"line_number":38,"context_line":"    # NOTE(mriedem): max_version looks odd but it\u0027s actually correct. Due to a"},{"line_number":39,"context_line":"    # bug in the 2.32 microversion, tags on block devices only worked with the"},{"line_number":40,"context_line":"    # 2.32 microversion specifically. And tags on networks only worked between"},{"line_number":41,"context_line":"    # 2.32 and 2.36 inclusive; the 2.37 microversion broke tags for networks."},{"line_number":42,"context_line":"    max_microversion \u003d \u00272.32\u0027"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @classmethod"},{"line_number":45,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_715d18e8","line":42,"range":{"start_line":37,"start_character":0,"end_line":42,"end_character":29},"in_reply_to":"5f201791_e0df14d4","updated":"2017-06-22 09:51:33.000000000","message":"Done","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"214046a6fa06845db3677f9ab4a3043bd9b6af02","unresolved":false,"context_lines":[{"line_number":126,"context_line":"class TaggedBootDevicesTest(DeviceTaggingBase):"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    min_microversion \u003d \u00272.32\u0027"},{"line_number":129,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @classmethod"},{"line_number":132,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_00fe9036","line":129,"range":{"start_line":129,"start_character":23,"end_line":129,"end_character":31},"updated":"2017-06-22 08:36:42.000000000","message":"should be \u00272.32\u0027?","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9cbec6ac01be54c5691685e4a961455e5883f005","unresolved":false,"context_lines":[{"line_number":126,"context_line":"class TaggedBootDevicesTest(DeviceTaggingBase):"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    min_microversion \u003d \u00272.32\u0027"},{"line_number":129,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @classmethod"},{"line_number":132,"context_line":"    def setup_clients(cls):"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_116ee494","line":129,"range":{"start_line":129,"start_character":23,"end_line":129,"end_character":31},"in_reply_to":"5f201791_00fe9036","updated":"2017-06-22 09:51:33.000000000","message":"Yeah, I\u0027ve moved Matt\u0027s note here.","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"214046a6fa06845db3677f9ab4a3043bd9b6af02","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    min_microversion \u003d \u00272.32\u0027"},{"line_number":129,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @classmethod"},{"line_number":132,"context_line":"    def setup_clients(cls):"},{"line_number":133,"context_line":"        super(TaggedBootDevicesTest, cls).setup_clients()"},{"line_number":134,"context_line":"        cls.networks_client \u003d cls.os_primary.networks_client"},{"line_number":135,"context_line":"        cls.ports_client \u003d cls.os_primary.ports_client"},{"line_number":136,"context_line":"        cls.subnets_client \u003d cls.os_primary.subnets_client"},{"line_number":137,"context_line":"        cls.interfaces_client \u003d cls.os_primary.interfaces_client"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def verify_device_metadata(self, md_json):"},{"line_number":140,"context_line":"        md_dict \u003d json.loads(md_json)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_8099806f","line":137,"range":{"start_line":131,"start_character":0,"end_line":137,"end_character":64},"updated":"2017-06-22 08:36:42.000000000","message":"this can be removed","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9cbec6ac01be54c5691685e4a961455e5883f005","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    min_microversion \u003d \u00272.32\u0027"},{"line_number":129,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @classmethod"},{"line_number":132,"context_line":"    def setup_clients(cls):"},{"line_number":133,"context_line":"        super(TaggedBootDevicesTest, cls).setup_clients()"},{"line_number":134,"context_line":"        cls.networks_client \u003d cls.os_primary.networks_client"},{"line_number":135,"context_line":"        cls.ports_client \u003d cls.os_primary.ports_client"},{"line_number":136,"context_line":"        cls.subnets_client \u003d cls.os_primary.subnets_client"},{"line_number":137,"context_line":"        cls.interfaces_client \u003d cls.os_primary.interfaces_client"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def verify_device_metadata(self, md_json):"},{"line_number":140,"context_line":"        md_dict \u003d json.loads(md_json)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_f1680888","line":137,"range":{"start_line":131,"start_character":0,"end_line":137,"end_character":64},"in_reply_to":"5f201791_8099806f","updated":"2017-06-22 09:51:33.000000000","message":"Done","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"214046a6fa06845db3677f9ab4a3043bd9b6af02","unresolved":false,"context_lines":[{"line_number":308,"context_line":"    min_microversion \u003d \u00272.49\u0027"},{"line_number":309,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    @classmethod"},{"line_number":312,"context_line":"    def setup_clients(cls):"},{"line_number":313,"context_line":"        super(TaggedAttachmentsTest, cls).setup_clients()"},{"line_number":314,"context_line":"        cls.networks_client \u003d cls.os_primary.networks_client"},{"line_number":315,"context_line":"        cls.interfaces_client \u003d cls.os_primary.interfaces_client"},{"line_number":316,"context_line":"        cls.subnets_client \u003d cls.os_primary.subnets_client"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def verify_device_metadata(self, md_json):"},{"line_number":319,"context_line":"        md_dict \u003d json.loads(md_json)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_407ec819","line":316,"range":{"start_line":311,"start_character":0,"end_line":316,"end_character":58},"updated":"2017-06-22 08:36:42.000000000","message":"this can be removed","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9cbec6ac01be54c5691685e4a961455e5883f005","unresolved":false,"context_lines":[{"line_number":308,"context_line":"    min_microversion \u003d \u00272.49\u0027"},{"line_number":309,"context_line":"    max_microversion \u003d \u0027latest\u0027"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    @classmethod"},{"line_number":312,"context_line":"    def setup_clients(cls):"},{"line_number":313,"context_line":"        super(TaggedAttachmentsTest, cls).setup_clients()"},{"line_number":314,"context_line":"        cls.networks_client \u003d cls.os_primary.networks_client"},{"line_number":315,"context_line":"        cls.interfaces_client \u003d cls.os_primary.interfaces_client"},{"line_number":316,"context_line":"        cls.subnets_client \u003d cls.os_primary.subnets_client"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    def verify_device_metadata(self, md_json):"},{"line_number":319,"context_line":"        md_dict \u003d json.loads(md_json)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_7112b80b","line":316,"range":{"start_line":311,"start_character":0,"end_line":316,"end_character":58},"in_reply_to":"5f201791_407ec819","updated":"2017-06-22 09:51:33.000000000","message":"Done","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"214046a6fa06845db3677f9ab4a3043bd9b6af02","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        server \u003d self.create_test_server("},{"line_number":351,"context_line":"            validatable\u003dTrue,"},{"line_number":352,"context_line":"            config_drive\u003dconfig_drive_enabled,"},{"line_number":353,"context_line":"            name\u003ddata_utils.rand_name(\u0027device-tagging-server\u0027),"},{"line_number":354,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.get_tenant_network()[\u0027id\u0027]}])"},{"line_number":355,"context_line":"        self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        # Attach tagged nic and volume"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_e0ba7408","line":354,"range":{"start_line":353,"start_character":0,"end_line":354,"end_character":64},"updated":"2017-06-22 08:36:42.000000000","message":"this is not needed?","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"60e505b5f73c2cf830ddc1f70f971964f1f37f73","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        server \u003d self.create_test_server("},{"line_number":351,"context_line":"            validatable\u003dTrue,"},{"line_number":352,"context_line":"            config_drive\u003dconfig_drive_enabled,"},{"line_number":353,"context_line":"            name\u003ddata_utils.rand_name(\u0027device-tagging-server\u0027),"},{"line_number":354,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.get_tenant_network()[\u0027id\u0027]}])"},{"line_number":355,"context_line":"        self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        # Attach tagged nic and volume"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_37ad5031","line":354,"range":{"start_line":353,"start_character":0,"end_line":354,"end_character":64},"in_reply_to":"5f201791_712bd82f","updated":"2017-06-22 11:31:58.000000000","message":"Based on the latest round of test results [1] [2] I think we need to keep this.\n\n[1] http://logs.openstack.org/47/391947/32/check/gate-tempest-dsvm-neutron-full-ubuntu-xenial/3b98226/console.html#_2017-06-22_10_53_51_531921\n[2] http://logs.openstack.org/47/391947/32/check/gate-tempest-dsvm-py35-ubuntu-xenial/94d9cbe/console.html#_2017-06-22_10_49_29_557524","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9cbec6ac01be54c5691685e4a961455e5883f005","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        server \u003d self.create_test_server("},{"line_number":351,"context_line":"            validatable\u003dTrue,"},{"line_number":352,"context_line":"            config_drive\u003dconfig_drive_enabled,"},{"line_number":353,"context_line":"            name\u003ddata_utils.rand_name(\u0027device-tagging-server\u0027),"},{"line_number":354,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.get_tenant_network()[\u0027id\u0027]}])"},{"line_number":355,"context_line":"        self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        # Attach tagged nic and volume"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_712bd82f","line":354,"range":{"start_line":353,"start_character":0,"end_line":354,"end_character":64},"in_reply_to":"5f201791_e0ba7408","updated":"2017-06-22 09:51:33.000000000","message":"Yeah? Is the tenant network there automatically if we set validatable\u003dTrue? OK, removed :)","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"214046a6fa06845db3677f9ab4a3043bd9b6af02","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            server\u003dserver,"},{"line_number":367,"context_line":"            servers_client\u003dself.servers_client)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        # Verify metadata on from metadata service"},{"line_number":370,"context_line":"        # Sleep 16 seconds to allow for the metadata cache to expire (default"},{"line_number":371,"context_line":"        # cache expiry is 15 seconds)"},{"line_number":372,"context_line":"        time.sleep(16)"},{"line_number":373,"context_line":"        if CONF.compute_feature_enabled.metadata_service:"},{"line_number":374,"context_line":"            self.verify_metadata_from_api(server, ssh_client,"},{"line_number":375,"context_line":"                                          self.verify_device_metadata)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_5ded9389","line":372,"range":{"start_line":369,"start_character":0,"end_line":372,"end_character":22},"updated":"2017-06-22 08:36:42.000000000","message":"these can be moved to under line #373","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"9cbec6ac01be54c5691685e4a961455e5883f005","unresolved":false,"context_lines":[{"line_number":366,"context_line":"            server\u003dserver,"},{"line_number":367,"context_line":"            servers_client\u003dself.servers_client)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        # Verify metadata on from metadata service"},{"line_number":370,"context_line":"        # Sleep 16 seconds to allow for the metadata cache to expire (default"},{"line_number":371,"context_line":"        # cache expiry is 15 seconds)"},{"line_number":372,"context_line":"        time.sleep(16)"},{"line_number":373,"context_line":"        if CONF.compute_feature_enabled.metadata_service:"},{"line_number":374,"context_line":"            self.verify_metadata_from_api(server, ssh_client,"},{"line_number":375,"context_line":"                                          self.verify_device_metadata)"}],"source_content_type":"text/x-python","patch_set":31,"id":"5f201791_51d0dc1f","line":372,"range":{"start_line":369,"start_character":0,"end_line":372,"end_character":22},"in_reply_to":"5f201791_5ded9389","updated":"2017-06-22 09:51:33.000000000","message":"Done","commit_id":"97d2e7fc541f7a9d831a273b072257743c2a74d2"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"09076da4ef3d29d950eff7939a0df8ae18006c4a","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        server \u003d self.create_test_server("},{"line_number":333,"context_line":"            validatable\u003dTrue,"},{"line_number":334,"context_line":"            config_drive\u003dconfig_drive_enabled,"},{"line_number":335,"context_line":"            name\u003ddata_utils.rand_name(\u0027device-tagging-server\u0027),"},{"line_number":336,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.get_tenant_network()[\u0027id\u0027]}])"},{"line_number":337,"context_line":"        self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":338,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"5f201791_a1ad8289","line":335,"range":{"start_line":335,"start_character":12,"end_line":335,"end_character":63},"updated":"2017-06-23 03:53:27.000000000","message":"this can be removed for it\u0027s already provided inside create_server_server","commit_id":"21a71b397237c62cc337b8eb8e9b734f2e5e081d"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"09076da4ef3d29d950eff7939a0df8ae18006c4a","unresolved":false,"context_lines":[{"line_number":333,"context_line":"            validatable\u003dTrue,"},{"line_number":334,"context_line":"            config_drive\u003dconfig_drive_enabled,"},{"line_number":335,"context_line":"            name\u003ddata_utils.rand_name(\u0027device-tagging-server\u0027),"},{"line_number":336,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.get_tenant_network()[\u0027id\u0027]}])"},{"line_number":337,"context_line":"        self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        # Attach tagged nic and volume"}],"source_content_type":"text/x-python","patch_set":35,"id":"5f201791_617acaf1","line":336,"range":{"start_line":336,"start_character":12,"end_line":336,"end_character":64},"updated":"2017-06-23 03:53:27.000000000","message":"I am not sure why you will get that log, but in create_test_server tenant_network is provided already,\nhttps://github.com/openstack/tempest/blob/0bb68d712827e850621d00e012876bb75531352c/tempest/api/compute/base.py#L205\nMaybe we need to debug it more","commit_id":"21a71b397237c62cc337b8eb8e9b734f2e5e081d"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"f2e7c5dcf3854c2994ab1db1051c7b1427b90b91","unresolved":false,"context_lines":[{"line_number":343,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.get_tenant_network()[\u0027id\u0027]}])"},{"line_number":344,"context_line":"        self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        # Attach tagged nic and volume"},{"line_number":347,"context_line":"        self.interfaces_client.create_interface(server[\u0027id\u0027], net_id\u003dnet[\u0027id\u0027],"},{"line_number":348,"context_line":"                                                tag\u003d\u0027nic-tag\u0027)"},{"line_number":349,"context_line":"        self.attach_volume(server, volume, tag\u003d\u0027volume-tag\u0027)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        ssh_client \u003d remote_client.RemoteClient("}],"source_content_type":"text/x-python","patch_set":45,"id":"5f4e5783_916264d7","line":348,"range":{"start_line":346,"start_character":0,"end_line":348,"end_character":62},"updated":"2017-10-17 03:04:12.000000000","message":"is tagged nic necessary here?","commit_id":"78c0a871023dcd898a4c791f1ce5f5d4fc80593e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"8c09e7feecfe8c47e2986576702947d54f816db2","unresolved":false,"context_lines":[{"line_number":343,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.get_tenant_network()[\u0027id\u0027]}])"},{"line_number":344,"context_line":"        self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        # Attach tagged nic and volume"},{"line_number":347,"context_line":"        self.interfaces_client.create_interface(server[\u0027id\u0027], net_id\u003dnet[\u0027id\u0027],"},{"line_number":348,"context_line":"                                                tag\u003d\u0027nic-tag\u0027)"},{"line_number":349,"context_line":"        self.attach_volume(server, volume, tag\u003d\u0027volume-tag\u0027)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        ssh_client \u003d remote_client.RemoteClient("}],"source_content_type":"text/x-python","patch_set":45,"id":"5f4e5783_ff103a02","line":348,"range":{"start_line":346,"start_character":0,"end_line":348,"end_character":62},"in_reply_to":"5f4e5783_916264d7","updated":"2017-10-17 09:46:37.000000000","message":"We\u0027re testing tagged attachment, so yes :) (See checking tags at L306)","commit_id":"78c0a871023dcd898a4c791f1ce5f5d4fc80593e"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"f2e7c5dcf3854c2994ab1db1051c7b1427b90b91","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        # Attach tagged nic and volume"},{"line_number":347,"context_line":"        self.interfaces_client.create_interface(server[\u0027id\u0027], net_id\u003dnet[\u0027id\u0027],"},{"line_number":348,"context_line":"                                                tag\u003d\u0027nic-tag\u0027)"},{"line_number":349,"context_line":"        self.attach_volume(server, volume, tag\u003d\u0027volume-tag\u0027)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        ssh_client \u003d remote_client.RemoteClient("},{"line_number":352,"context_line":"            self.get_server_ip(server, validation_resources),"}],"source_content_type":"text/x-python","patch_set":45,"id":"5f4e5783_f1587831","line":349,"range":{"start_line":349,"start_character":8,"end_line":349,"end_character":60},"updated":"2017-10-17 03:04:12.000000000","message":"if CONF.compute_feature_enabled.metadata_service is not True, then the only special thing the testcase does\nis to call attach_volume with tag specified, so, in this case, shall the testcase be skipped at all? or to\ndo some other checkes? in other words, does it make sense to just call attach_volume with tag specified and\nwithout any other checks?","commit_id":"78c0a871023dcd898a4c791f1ce5f5d4fc80593e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"8c09e7feecfe8c47e2986576702947d54f816db2","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        # Attach tagged nic and volume"},{"line_number":347,"context_line":"        self.interfaces_client.create_interface(server[\u0027id\u0027], net_id\u003dnet[\u0027id\u0027],"},{"line_number":348,"context_line":"                                                tag\u003d\u0027nic-tag\u0027)"},{"line_number":349,"context_line":"        self.attach_volume(server, volume, tag\u003d\u0027volume-tag\u0027)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        ssh_client \u003d remote_client.RemoteClient("},{"line_number":352,"context_line":"            self.get_server_ip(server, validation_resources),"}],"source_content_type":"text/x-python","patch_set":45,"id":"5f4e5783_3fa7f2bf","line":349,"range":{"start_line":349,"start_character":8,"end_line":349,"end_character":60},"in_reply_to":"5f4e5783_f1587831","updated":"2017-10-17 09:46:37.000000000","message":"Ah, yes. I think originally we wanted to support tagged attachment with the config drive, but that was dropped, and the tempest test wasn\u0027t updated. This entire test can be skipped if the metadata API isn\u0027t available.","commit_id":"78c0a871023dcd898a4c791f1ce5f5d4fc80593e"},{"author":{"_account_id":20190,"name":"zhufl","email":"zhu.fanglei@zte.com.cn","username":"zhufl"},"change_message_id":"f2e7c5dcf3854c2994ab1db1051c7b1427b90b91","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                                                tag\u003d\u0027nic-tag\u0027)"},{"line_number":349,"context_line":"        self.attach_volume(server, volume, tag\u003d\u0027volume-tag\u0027)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        ssh_client \u003d remote_client.RemoteClient("},{"line_number":352,"context_line":"            self.get_server_ip(server, validation_resources),"},{"line_number":353,"context_line":"            CONF.validation.image_ssh_user,"},{"line_number":354,"context_line":"            pkey\u003dvalidation_resources[\u0027keypair\u0027][\u0027private_key\u0027],"}],"source_content_type":"text/x-python","patch_set":45,"id":"5f4e5783_3105f011","line":351,"range":{"start_line":351,"start_character":8,"end_line":351,"end_character":18},"updated":"2017-10-17 03:04:12.000000000","message":"ssh_client is only used when CONF.compute_feature_enabled.metadata_service is True, so it can moved to after line 363","commit_id":"78c0a871023dcd898a4c791f1ce5f5d4fc80593e"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"8c09e7feecfe8c47e2986576702947d54f816db2","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                                                tag\u003d\u0027nic-tag\u0027)"},{"line_number":349,"context_line":"        self.attach_volume(server, volume, tag\u003d\u0027volume-tag\u0027)"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        ssh_client \u003d remote_client.RemoteClient("},{"line_number":352,"context_line":"            self.get_server_ip(server, validation_resources),"},{"line_number":353,"context_line":"            CONF.validation.image_ssh_user,"},{"line_number":354,"context_line":"            pkey\u003dvalidation_resources[\u0027keypair\u0027][\u0027private_key\u0027],"}],"source_content_type":"text/x-python","patch_set":45,"id":"5f4e5783_7fc32a58","line":351,"range":{"start_line":351,"start_character":8,"end_line":351,"end_character":18},"in_reply_to":"5f4e5783_3105f011","updated":"2017-10-17 09:46:37.000000000","message":"Since the test will be skipped entirely if the metadata API isn\u0027t available, this can stay here, but the if on L359 will be gone entirely, replaced by a new skip_checks for this test class.","commit_id":"78c0a871023dcd898a4c791f1ce5f5d4fc80593e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"bd0a0719ad4ddc2545243229246a78a323122290","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":145,"context_line":"            validation_resources\u003dvalidation_resources,"},{"line_number":146,"context_line":"            config_drive\u003dconfig_drive_enabled,"},{"line_number":147,"context_line":"            adminPass\u003dadmin_pass,"},{"line_number":148,"context_line":"            name\u003ddata_utils.rand_name(\u0027device-tagging-server\u0027),"},{"line_number":149,"context_line":"            networks\u003d["},{"line_number":150,"context_line":"                # Validation network for ssh"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f7c97a3_be474f77","side":"PARENT","line":147,"range":{"start_line":147,"start_character":12,"end_line":147,"end_character":33},"updated":"2018-05-15 01:40:35.000000000","message":"any specific reason to remove adminPass","commit_id":"cda166962c62ec7ef1a6e6a05543744f3ea3215f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"af8da6f4d90f77817b6f816eb5deb5ab79648bdb","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":145,"context_line":"            validation_resources\u003dvalidation_resources,"},{"line_number":146,"context_line":"            config_drive\u003dconfig_drive_enabled,"},{"line_number":147,"context_line":"            adminPass\u003dadmin_pass,"},{"line_number":148,"context_line":"            name\u003ddata_utils.rand_name(\u0027device-tagging-server\u0027),"},{"line_number":149,"context_line":"            networks\u003d["},{"line_number":150,"context_line":"                # Validation network for ssh"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f7c97a3_a4f17e03","side":"PARENT","line":147,"range":{"start_line":147,"start_character":12,"end_line":147,"end_character":33},"in_reply_to":"5f7c97a3_016944f7","updated":"2018-05-15 02:49:14.000000000","message":"Err, I left two comments accidentally. Ignore the second one please :)","commit_id":"cda166962c62ec7ef1a6e6a05543744f3ea3215f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fe29fd6ab028d16cea394d82d939486de0515957","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":145,"context_line":"            validation_resources\u003dvalidation_resources,"},{"line_number":146,"context_line":"            config_drive\u003dconfig_drive_enabled,"},{"line_number":147,"context_line":"            adminPass\u003dadmin_pass,"},{"line_number":148,"context_line":"            name\u003ddata_utils.rand_name(\u0027device-tagging-server\u0027),"},{"line_number":149,"context_line":"            networks\u003d["},{"line_number":150,"context_line":"                # Validation network for ssh"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f7c97a3_0152a43b","side":"PARENT","line":147,"range":{"start_line":147,"start_character":12,"end_line":147,"end_character":33},"in_reply_to":"5f7c97a3_be474f77","updated":"2018-05-15 02:46:04.000000000","message":"I don\u0027t really remember to be honest. In any case, I think it\u0027s fair to say that public key is enough for the RemoteClient, so we don\u0027t need it. I\u0027ll do it in a separate patch under this one.","commit_id":"cda166962c62ec7ef1a6e6a05543744f3ea3215f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fe29fd6ab028d16cea394d82d939486de0515957","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            wait_until\u003d\u0027ACTIVE\u0027,"},{"line_number":145,"context_line":"            validation_resources\u003dvalidation_resources,"},{"line_number":146,"context_line":"            config_drive\u003dconfig_drive_enabled,"},{"line_number":147,"context_line":"            adminPass\u003dadmin_pass,"},{"line_number":148,"context_line":"            name\u003ddata_utils.rand_name(\u0027device-tagging-server\u0027),"},{"line_number":149,"context_line":"            networks\u003d["},{"line_number":150,"context_line":"                # Validation network for ssh"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f7c97a3_016944f7","side":"PARENT","line":147,"range":{"start_line":147,"start_character":12,"end_line":147,"end_character":33},"in_reply_to":"5f7c97a3_be474f77","updated":"2018-05-15 02:46:04.000000000","message":"I genuinely don\u0027t remember :/ I think at some point I thought I needed this to pass CI? Let\u0027s keep it, see what happens.","commit_id":"cda166962c62ec7ef1a6e6a05543744f3ea3215f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"bd0a0719ad4ddc2545243229246a78a323122290","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        server \u003d self.servers_client.show_server(server[\u0027id\u0027])[\u0027server\u0027]"},{"line_number":212,"context_line":"        self.ssh_client \u003d remote_client.RemoteClient("},{"line_number":213,"context_line":"            self.get_server_ip(server, validation_resources),"},{"line_number":214,"context_line":"            CONF.validation.image_ssh_user,"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f7c97a3_7e5d3745","side":"PARENT","line":211,"range":{"start_line":211,"start_character":8,"end_line":211,"end_character":72},"updated":"2018-05-15 01:40:35.000000000","message":"we need to keep this to populate the addresses correctly in sevrer.","commit_id":"cda166962c62ec7ef1a6e6a05543744f3ea3215f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fe29fd6ab028d16cea394d82d939486de0515957","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        self.addCleanup(self.delete_server, server[\u0027id\u0027])"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        server \u003d self.servers_client.show_server(server[\u0027id\u0027])[\u0027server\u0027]"},{"line_number":212,"context_line":"        self.ssh_client \u003d remote_client.RemoteClient("},{"line_number":213,"context_line":"            self.get_server_ip(server, validation_resources),"},{"line_number":214,"context_line":"            CONF.validation.image_ssh_user,"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f7c97a3_c13cace2","side":"PARENT","line":211,"range":{"start_line":211,"start_character":8,"end_line":211,"end_character":72},"in_reply_to":"5f7c97a3_7e5d3745","updated":"2018-05-15 02:46:04.000000000","message":"Done","commit_id":"cda166962c62ec7ef1a6e6a05543744f3ea3215f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"bd0a0719ad4ddc2545243229246a78a323122290","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def verify_metadata_on_config_drive(self, server, ssh_client,"},{"line_number":93,"context_line":"                                        verify_method):"},{"line_number":94,"context_line":"        cmd_blkid \u003d \u0027blkid -t LABEL\u003dconfig-2 -o device\u0027"},{"line_number":95,"context_line":"        LOG.info(\u0027Attempting to verify tagged devices in server %s via \u0027"},{"line_number":96,"context_line":"                 \u0027the config drive.\u0027, server[\u0027id\u0027])"},{"line_number":97,"context_line":"        dev_name \u003d ssh_client.exec_command(cmd_blkid)"},{"line_number":98,"context_line":"        dev_name \u003d dev_name.rstrip()"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            ssh_client.exec_command(\u0027sudo mount %s /mnt\u0027 % dev_name)"},{"line_number":101,"context_line":"        except exceptions.SSHExecCommandFailed:"},{"line_number":102,"context_line":"            # So the command failed, let\u0027s try to know why and print some"},{"line_number":103,"context_line":"            # useful information."},{"line_number":104,"context_line":"            lsblk \u003d self.ssh_client.exec_command(\u0027sudo lsblk --fs --ascii\u0027)"},{"line_number":105,"context_line":"            LOG.error(\"Mounting %s on /mnt failed. Right after the \""},{"line_number":106,"context_line":"                      \"failure \u0027lsblk\u0027 in the guest reported:\\n%s\","},{"line_number":107,"context_line":"                      dev_name, lsblk)"},{"line_number":108,"context_line":"            raise"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        cmd_md \u003d \u0027sudo cat /mnt/openstack/latest/meta_data.json\u0027"},{"line_number":111,"context_line":"        md_json \u003d ssh_client.exec_command(cmd_md)"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f7c97a3_1e7f63ab","line":108,"range":{"start_line":94,"start_character":0,"end_line":108,"end_character":17},"updated":"2018-05-15 01:40:35.000000000","message":"did not get the reason not to use  self.ssh_client.mount_config_drive()","commit_id":"bdbb7ffaafb62353896e1a31f4cad8d0c769189f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"fe29fd6ab028d16cea394d82d939486de0515957","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def verify_metadata_on_config_drive(self, server, ssh_client,"},{"line_number":93,"context_line":"                                        verify_method):"},{"line_number":94,"context_line":"        cmd_blkid \u003d \u0027blkid -t LABEL\u003dconfig-2 -o device\u0027"},{"line_number":95,"context_line":"        LOG.info(\u0027Attempting to verify tagged devices in server %s via \u0027"},{"line_number":96,"context_line":"                 \u0027the config drive.\u0027, server[\u0027id\u0027])"},{"line_number":97,"context_line":"        dev_name \u003d ssh_client.exec_command(cmd_blkid)"},{"line_number":98,"context_line":"        dev_name \u003d dev_name.rstrip()"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            ssh_client.exec_command(\u0027sudo mount %s /mnt\u0027 % dev_name)"},{"line_number":101,"context_line":"        except exceptions.SSHExecCommandFailed:"},{"line_number":102,"context_line":"            # So the command failed, let\u0027s try to know why and print some"},{"line_number":103,"context_line":"            # useful information."},{"line_number":104,"context_line":"            lsblk \u003d self.ssh_client.exec_command(\u0027sudo lsblk --fs --ascii\u0027)"},{"line_number":105,"context_line":"            LOG.error(\"Mounting %s on /mnt failed. Right after the \""},{"line_number":106,"context_line":"                      \"failure \u0027lsblk\u0027 in the guest reported:\\n%s\","},{"line_number":107,"context_line":"                      dev_name, lsblk)"},{"line_number":108,"context_line":"            raise"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        cmd_md \u003d \u0027sudo cat /mnt/openstack/latest/meta_data.json\u0027"},{"line_number":111,"context_line":"        md_json \u003d ssh_client.exec_command(cmd_md)"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f7c97a3_617918c6","line":108,"range":{"start_line":94,"start_character":0,"end_line":108,"end_character":17},"in_reply_to":"5f7c97a3_1e7f63ab","updated":"2018-05-15 02:46:04.000000000","message":"I don\u0027t think it existed when I first wrote this :) Changed.","commit_id":"bdbb7ffaafb62353896e1a31f4cad8d0c769189f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"1b992e5b063abfcb08dfeba17d6c4d495fa86db8","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def verify_metadata_on_config_drive(self, server, ssh_client,"},{"line_number":93,"context_line":"                                        verify_method):"},{"line_number":94,"context_line":"        cmd_blkid \u003d \u0027blkid -t LABEL\u003dconfig-2 -o device\u0027"},{"line_number":95,"context_line":"        LOG.info(\u0027Attempting to verify tagged devices in server %s via \u0027"},{"line_number":96,"context_line":"                 \u0027the config drive.\u0027, server[\u0027id\u0027])"},{"line_number":97,"context_line":"        dev_name \u003d ssh_client.exec_command(cmd_blkid)"},{"line_number":98,"context_line":"        dev_name \u003d dev_name.rstrip()"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            ssh_client.exec_command(\u0027sudo mount %s /mnt\u0027 % dev_name)"},{"line_number":101,"context_line":"        except exceptions.SSHExecCommandFailed:"},{"line_number":102,"context_line":"            # So the command failed, let\u0027s try to know why and print some"},{"line_number":103,"context_line":"            # useful information."},{"line_number":104,"context_line":"            lsblk \u003d self.ssh_client.exec_command(\u0027sudo lsblk --fs --ascii\u0027)"},{"line_number":105,"context_line":"            LOG.error(\"Mounting %s on /mnt failed. Right after the \""},{"line_number":106,"context_line":"                      \"failure \u0027lsblk\u0027 in the guest reported:\\n%s\","},{"line_number":107,"context_line":"                      dev_name, lsblk)"},{"line_number":108,"context_line":"            raise"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        cmd_md \u003d \u0027sudo cat /mnt/openstack/latest/meta_data.json\u0027"},{"line_number":111,"context_line":"        md_json \u003d ssh_client.exec_command(cmd_md)"}],"source_content_type":"text/x-python","patch_set":58,"id":"5f7c97a3_84924256","line":108,"range":{"start_line":94,"start_character":0,"end_line":108,"end_character":17},"in_reply_to":"5f7c97a3_617918c6","updated":"2018-05-15 03:07:07.000000000","message":"ah yea, this commit made that in remoteclient - I529cff87c848bc87d63d2ec407ed18cdd631ecef","commit_id":"bdbb7ffaafb62353896e1a31f4cad8d0c769189f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"bd0a0719ad4ddc2545243229246a78a323122290","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    @decorators.idempotent_id(\u0027a2e65a6c-66f1-4442-aaa8-498c31778d96\u0027)"},{"line_number":149,"context_line":"    @utils.services(\u0027network\u0027, \u0027volume\u0027, \u0027image\u0027)"},{"line_number":150,"context_line":"    def test_tagged_boot_devices(self):"},{"line_number":151,"context_line":"        # Create volumes"},{"line_number":152,"context_line":"        # The create_volume methods waits for the volumes to be available and"},{"line_number":153,"context_line":"        # the base class will clean them up on tearDown."}],"source_content_type":"text/x-python","patch_set":58,"id":"5f7c97a3_3e01ff06","line":150,"range":{"start_line":150,"start_character":8,"end_line":150,"end_character":32},"updated":"2018-05-15 01:40:35.000000000","message":"ok to rename the tests as it is not explicitly used anywhere. sometime test name still in used in defcore or some CI, skip files etc so we need to care about test name renaming also but we are good here. \n\n-http://codesearch.openstack.org/?q\u003dtest_device_tagging\u0026i\u003dnope\u0026files\u003d\u0026repos\u003d","commit_id":"bdbb7ffaafb62353896e1a31f4cad8d0c769189f"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"f7e0c3075b20a50083cd5b7c03eec7533d1ee22e","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        cmd_md \u003d \u0027sudo cat /mnt/openstack/latest/meta_data.json\u0027"},{"line_number":98,"context_line":"        md_json \u003d ssh_client.exec_command(cmd_md)"},{"line_number":99,"context_line":"        verify_method(md_json)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"class TaggedBootDevicesTest(DeviceTaggingBase):"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"5f7c97a3_cf8cd337","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":0},"updated":"2018-05-15 04:24:16.000000000","message":"you need to call unmount method too - self.ssh_client.unmount_config_drive()","commit_id":"97ca30e697ce677b6b66016d8d7a2bf79ecf25ba"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a2eb02926282cc7fbd29df2cf35fbc492c7f9f1b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        cmd_md \u003d \u0027sudo cat /mnt/openstack/latest/meta_data.json\u0027"},{"line_number":98,"context_line":"        md_json \u003d ssh_client.exec_command(cmd_md)"},{"line_number":99,"context_line":"        verify_method(md_json)"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"class TaggedBootDevicesTest(DeviceTaggingBase):"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"5f7c97a3_00c84c71","line":100,"range":{"start_line":100,"start_character":0,"end_line":100,"end_character":0},"in_reply_to":"5f7c97a3_cf8cd337","updated":"2018-05-15 16:32:36.000000000","message":"Done","commit_id":"97ca30e697ce677b6b66016d8d7a2bf79ecf25ba"},{"author":{"_account_id":5689,"name":"Masayuki Igawa","email":"masayuki@igawa.io","username":"igawa"},"change_message_id":"8172b622b313296c8a7fbab90aa7aa34d0cb5081","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    @decorators.idempotent_id(\u0027a2e65a6c-66f1-4442-aaa8-498c31778d96\u0027)"},{"line_number":94,"context_line":"    @utils.services(\u0027network\u0027, \u0027volume\u0027, \u0027image\u0027)"},{"line_number":95,"context_line":"    def test_device_tagging(self):"},{"line_number":96,"context_line":"        # Create volumes"},{"line_number":97,"context_line":"        # The create_volume methods waits for the volumes to be available and"},{"line_number":98,"context_line":"        # the base class will clean them up on tearDown."}],"source_content_type":"text/x-python","patch_set":62,"id":"5f7c97a3_de8b2b1c","side":"PARENT","line":95,"updated":"2018-05-31 07:05:07.000000000","message":"I\u0027m not sure but there\u0027s still usage of this test?\nhttp://codesearch.openstack.org/?q\u003dtest_device_tagging\u0026i\u003dnope\u0026files\u003d\u0026repos\u003d\n\nBut I found that that is only for the comment.","commit_id":"a77c7d6eab1b763631bec8c66408ca7c65315f31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"51a6867d69dd7f966532c5f9744f49f59d1a18e4","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        waiters.wait_for_interface_detach(self.interfaces_client,"},{"line_number":371,"context_line":"                                          server[\u0027id\u0027],"},{"line_number":372,"context_line":"                                          interface[\u0027port_id\u0027])"},{"line_number":373,"context_line":"        # NOTE(artom) More waiting until metadata cache is refreshed."},{"line_number":374,"context_line":"        time.sleep(16)"},{"line_number":375,"context_line":"        self.verify_metadata_from_api(server, ssh_client,"},{"line_number":376,"context_line":"                                      self.verify_empty_devices)"}],"source_content_type":"text/x-python","patch_set":62,"id":"5f7c97a3_a00006ad","line":373,"updated":"2018-06-07 02:47:26.000000000","message":"Maybe metadata_cache_expiration in nova shouldn\u0027t be set to 0 to disable caching in the gate.","commit_id":"b6b2bba8ce927701a4b031b71407e2e34a300f5a"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"6b88aba81381d80509ead286e46325b23260d594","unresolved":false,"context_lines":[{"line_number":372,"context_line":"                                          interface[\u0027port_id\u0027])"},{"line_number":373,"context_line":"        # NOTE(artom) More waiting until metadata cache is refreshed."},{"line_number":374,"context_line":"        time.sleep(16)"},{"line_number":375,"context_line":"        self.verify_metadata_from_api(server, ssh_client,"},{"line_number":376,"context_line":"                                      self.verify_empty_devices)"}],"source_content_type":"text/x-python","patch_set":62,"id":"5f7c97a3_45d264d3","line":375,"updated":"2018-06-07 02:09:06.000000000","message":"This is randomly failing because devices aren\u0027t empty yet:\n\nhttps://bugs.launchpad.net/tempest/+bug/1775491\n\nRather than a hard-coded sleep, why don\u0027t we run the verify method in a loop until it passes or we timeout?","commit_id":"b6b2bba8ce927701a4b031b71407e2e34a300f5a"}]}
