)]}'
{"openstackclient/compute/v2/aggregate.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6be467983a79bb3fb42a0624b8fdd15a20d691fd","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # To maintain backwards compatibility we need to rename sdk props to"},{"line_number":43,"context_line":"    # whatever OSC was using before"},{"line_number":44,"context_line":"    column_map \u003d {"},{"line_number":45,"context_line":"        \u0027metadata\u0027: \u0027properties\u0027}"},{"line_number":46,"context_line":"    hidden_columns \u003d [\u0027links\u0027, \u0027location\u0027]"},{"line_number":47,"context_line":"    return utils.get_osc_show_columns_for_sdk_resource("},{"line_number":48,"context_line":"        item, column_map, hidden_columns)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_bf58d755","line":45,"range":{"start_line":45,"start_character":32,"end_line":45,"end_character":33},"updated":"2020-11-12 14:47:21.000000000","message":"style nit: can you drag this down a line?","commit_id":"428951ed7ac3dcc752def352b021b586265f9e48"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"eb8c8512828e789410ee6d765b309e775a098e5b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    # To maintain backwards compatibility we need to rename sdk props to"},{"line_number":43,"context_line":"    # whatever OSC was using before"},{"line_number":44,"context_line":"    column_map \u003d {"},{"line_number":45,"context_line":"        \u0027metadata\u0027: \u0027properties\u0027}"},{"line_number":46,"context_line":"    hidden_columns \u003d [\u0027links\u0027, \u0027location\u0027]"},{"line_number":47,"context_line":"    return utils.get_osc_show_columns_for_sdk_resource("},{"line_number":48,"context_line":"        item, column_map, hidden_columns)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_40cba4a3","line":45,"range":{"start_line":45,"start_character":32,"end_line":45,"end_character":33},"in_reply_to":"1f621f24_bf58d755","updated":"2020-11-12 16:47:50.000000000","message":"Done","commit_id":"428951ed7ac3dcc752def352b021b586265f9e48"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6be467983a79bb3fb42a0624b8fdd15a20d691fd","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        aggregate \u003d compute_client.create_aggregate("},{"line_number":111,"context_line":"            parsed_args.name,"},{"line_number":112,"context_line":"            parsed_args.zone,"},{"line_number":113,"context_line":"        )"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if parsed_args.property:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_9f7a3bb7","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":29},"updated":"2020-11-12 14:47:21.000000000","message":"The functional test failure is real. You need to make these kwargs [1]. We should probably improve that. Maybe in [2], since you\u0027re fixing things anyway?\n\n[1] https://github.com/openstack/openstacksdk/blob/599ef077/openstack/compute/v2/_proxy.py#L264\n[2] https://review.opendev.org/#/c/762131","commit_id":"428951ed7ac3dcc752def352b021b586265f9e48"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"eb8c8512828e789410ee6d765b309e775a098e5b","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"        aggregate \u003d compute_client.create_aggregate("},{"line_number":111,"context_line":"            parsed_args.name,"},{"line_number":112,"context_line":"            parsed_args.zone,"},{"line_number":113,"context_line":"        )"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        if parsed_args.property:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_20ce68b3","line":112,"range":{"start_line":111,"start_character":0,"end_line":112,"end_character":29},"in_reply_to":"1f621f24_9f7a3bb7","updated":"2020-11-12 16:47:50.000000000","message":"Done","commit_id":"428951ed7ac3dcc752def352b021b586265f9e48"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6be467983a79bb3fb42a0624b8fdd15a20d691fd","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    def take_action(self, parsed_args):"},{"line_number":173,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        data \u003d compute_client.aggregates()"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        if parsed_args.long:"},{"line_number":178,"context_line":"            # Remove availability_zone from metadata because Nova doesn\u0027t"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_3a085526","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":12},"updated":"2020-11-12 14:47:21.000000000","message":"style nit:\n\n  aggregates \u003d ...","commit_id":"428951ed7ac3dcc752def352b021b586265f9e48"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"eb8c8512828e789410ee6d765b309e775a098e5b","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    def take_action(self, parsed_args):"},{"line_number":173,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        data \u003d compute_client.aggregates()"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        if parsed_args.long:"},{"line_number":178,"context_line":"            # Remove availability_zone from metadata because Nova doesn\u0027t"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_a0b9d815","line":175,"range":{"start_line":175,"start_character":8,"end_line":175,"end_character":12},"in_reply_to":"1f621f24_3a085526","updated":"2020-11-12 16:47:50.000000000","message":"Done","commit_id":"428951ed7ac3dcc752def352b021b586265f9e48"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6be467983a79bb3fb42a0624b8fdd15a20d691fd","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                (utils.get_item_properties("},{"line_number":204,"context_line":"                    s, columns,"},{"line_number":205,"context_line":"                    formatters\u003d_aggregate_formatters,"},{"line_number":206,"context_line":"                ) for s in data))"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"class RemoveAggregateHost(command.ShowOne):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_bf2d77a9","line":206,"updated":"2020-11-12 14:47:21.000000000","message":"style nit: it\u0027d be nice fix this awful formatting while we\u0027re here, e.g.\n\n   data \u003d (\n      utils.get_item_properties(\n          s, columns, formatters\u003d_aggregate_formatters\n      ) for s in aggregates)\n\n  return (column_headers, data)","commit_id":"428951ed7ac3dcc752def352b021b586265f9e48"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"eb8c8512828e789410ee6d765b309e775a098e5b","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                (utils.get_item_properties("},{"line_number":204,"context_line":"                    s, columns,"},{"line_number":205,"context_line":"                    formatters\u003d_aggregate_formatters,"},{"line_number":206,"context_line":"                ) for s in data))"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"class RemoveAggregateHost(command.ShowOne):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_804dbc3f","line":206,"in_reply_to":"1f621f24_bf2d77a9","updated":"2020-11-12 16:47:50.000000000","message":"Done","commit_id":"428951ed7ac3dcc752def352b021b586265f9e48"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6be467983a79bb3fb42a0624b8fdd15a20d691fd","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    def take_action(self, parsed_args):"},{"line_number":391,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        aggregate \u003d compute_client.find_aggregate("},{"line_number":394,"context_line":"            parsed_args.aggregate, ignore_missing\u003dFalse)"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_1aa7590d","line":392,"updated":"2020-11-12 14:47:21.000000000","message":"This requires the 2.81 microversion. Can we add a check for this?","commit_id":"428951ed7ac3dcc752def352b021b586265f9e48"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"eb8c8512828e789410ee6d765b309e775a098e5b","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    def take_action(self, parsed_args):"},{"line_number":391,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        aggregate \u003d compute_client.find_aggregate("},{"line_number":394,"context_line":"            parsed_args.aggregate, ignore_missing\u003dFalse)"},{"line_number":395,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1f621f24_00a40cb9","line":392,"in_reply_to":"1f621f24_1aa7590d","updated":"2020-11-12 16:47:50.000000000","message":"Done","commit_id":"428951ed7ac3dcc752def352b021b586265f9e48"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a8dda635123e4b2aeee96c59cfa0867f3474a3cc","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            # Remove availability_zone from metadata because Nova doesn\u0027t"},{"line_number":183,"context_line":"            for d in aggregates:"},{"line_number":184,"context_line":"                if \u0027availability_zone\u0027 in d.metadata:"},{"line_number":185,"context_line":"                    d.metadata.pop(\u0027availability_zone\u0027)"},{"line_number":186,"context_line":"            # This is the easiest way to change column headers"},{"line_number":187,"context_line":"            column_headers \u003d ("},{"line_number":188,"context_line":"                \"ID\","}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_24101c57","line":185,"range":{"start_line":185,"start_character":0,"end_line":185,"end_character":55},"updated":"2020-11-16 14:32:30.000000000","message":"Can you do this with the object, or do we need to convert this to a dict first?","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"b1dfd390e2e8e8dfc6484554c78a6716a3ee1575","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            # Remove availability_zone from metadata because Nova doesn\u0027t"},{"line_number":183,"context_line":"            for d in aggregates:"},{"line_number":184,"context_line":"                if \u0027availability_zone\u0027 in d.metadata:"},{"line_number":185,"context_line":"                    d.metadata.pop(\u0027availability_zone\u0027)"},{"line_number":186,"context_line":"            # This is the easiest way to change column headers"},{"line_number":187,"context_line":"            column_headers \u003d ("},{"line_number":188,"context_line":"                \"ID\","}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_b9427c3c","line":185,"range":{"start_line":185,"start_character":0,"end_line":185,"end_character":55},"in_reply_to":"1f621f24_166c249a","updated":"2020-11-17 16:56:20.000000000","message":"right, noticed what you mean in the failed test","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0febae36c1f1db38ea7d96834b00c8a7c7da95c4","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            # Remove availability_zone from metadata because Nova doesn\u0027t"},{"line_number":183,"context_line":"            for d in aggregates:"},{"line_number":184,"context_line":"                if \u0027availability_zone\u0027 in d.metadata:"},{"line_number":185,"context_line":"                    d.metadata.pop(\u0027availability_zone\u0027)"},{"line_number":186,"context_line":"            # This is the easiest way to change column headers"},{"line_number":187,"context_line":"            column_headers \u003d ("},{"line_number":188,"context_line":"                \"ID\","}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_db0ae223","line":185,"range":{"start_line":185,"start_character":0,"end_line":185,"end_character":55},"in_reply_to":"1f621f24_24101c57","updated":"2020-11-16 16:35:19.000000000","message":"So you can do this, but aggregates is a generator and by iterating through this we exhaust it.\n\nYou\u0027ll probably need to convert it to a list or something above?\n\n  aggregate \u003d list(compute_client.aggregates())","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"fd7cb990f45f8e201950da1eff52036271c035cc","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            # Remove availability_zone from metadata because Nova doesn\u0027t"},{"line_number":183,"context_line":"            for d in aggregates:"},{"line_number":184,"context_line":"                if \u0027availability_zone\u0027 in d.metadata:"},{"line_number":185,"context_line":"                    d.metadata.pop(\u0027availability_zone\u0027)"},{"line_number":186,"context_line":"            # This is the easiest way to change column headers"},{"line_number":187,"context_line":"            column_headers \u003d ("},{"line_number":188,"context_line":"                \"ID\","}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_166c249a","line":185,"range":{"start_line":185,"start_character":0,"end_line":185,"end_character":55},"in_reply_to":"1f621f24_db0ae223","updated":"2020-11-17 11:55:23.000000000","message":"what we address here is not exhausting generator, but trying to hide underline property, what we can not achieve by simply hiding whole \"Properties\" column.","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0febae36c1f1db38ea7d96834b00c8a7c7da95c4","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    def take_action(self, parsed_args):"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":285,"context_line":"        aggregate \u003d compute_client.find_aggregate("},{"line_number":286,"context_line":"            parsed_args.aggregate, ignore_missing\u003dFalse)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        kwargs \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_dbd782be","line":285,"range":{"start_line":285,"start_character":35,"end_line":285,"end_character":49},"updated":"2020-11-16 16:35:19.000000000","message":"This doesn\u0027t exist:\n\n  $ openstack aggregate set --zone test-az test-aggregate\n  \u0027Proxy\u0027 object has no attribute \u0027find_aggregate\u0027\n\nLater: Oh, this depends on the linked change. However, even with that change, this appears to be failing:\n\n  $ openstack aggregate set --zone test-az test-aggregate\n  BadRequestException: 400: Client Error for url: http://172.20.4.87/compute/v2.1/os-aggregates/test-aggregate, Invalid input received: id must be an integer\n\nWhat\u0027s the openstacksdk equivalent of \u0027find_resource\u0027?","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"fd7cb990f45f8e201950da1eff52036271c035cc","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    def take_action(self, parsed_args):"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":285,"context_line":"        aggregate \u003d compute_client.find_aggregate("},{"line_number":286,"context_line":"            parsed_args.aggregate, ignore_missing\u003dFalse)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        kwargs \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_f666c8ba","line":285,"range":{"start_line":285,"start_character":35,"end_line":285,"end_character":49},"in_reply_to":"1f621f24_8eb78af5","updated":"2020-11-17 11:55:23.000000000","message":"should be done in the dependent change now","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"06f1b88c1efe869371293e8227c6a928dd769b81","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    def take_action(self, parsed_args):"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":285,"context_line":"        aggregate \u003d compute_client.find_aggregate("},{"line_number":286,"context_line":"            parsed_args.aggregate, ignore_missing\u003dFalse)"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"        kwargs \u003d {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_8eb78af5","line":285,"range":{"start_line":285,"start_character":35,"end_line":285,"end_character":49},"in_reply_to":"1f621f24_dbd782be","updated":"2020-11-16 17:00:43.000000000","message":"that\u0027s awesome. Normally our find works like that: try GET /resource/name_or_id. If we get 404 (this is what we do not get here) - we do list and filtering. Will need another dirty fix","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a8dda635123e4b2aeee96c59cfa0867f3474a3cc","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            compute_client.update_aggregate(aggregate.id, **kwargs)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        set_property \u003d {}"},{"line_number":297,"context_line":"        if parsed_args.no_property:"},{"line_number":298,"context_line":"            # NOTE(RuiChen): \"availability_zone\" is removed from response of"},{"line_number":299,"context_line":"            #                aggregate show and create commands, don\u0027t see it"},{"line_number":300,"context_line":"            #                anywhere, so pop it, avoid the unexpected server"},{"line_number":301,"context_line":"            #                exception(can\u0027t unset the availability zone from"},{"line_number":302,"context_line":"            #                aggregate metadata in nova)."},{"line_number":303,"context_line":"            set_property.update({key: None"},{"line_number":304,"context_line":"                                 for key in aggregate.metadata.keys()"},{"line_number":305,"context_line":"                                 if key !\u003d \u0027availability_zone\u0027})"},{"line_number":306,"context_line":"        if parsed_args.property:"},{"line_number":307,"context_line":"            set_property.update(parsed_args.property)"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_a4c0ace2","line":305,"range":{"start_line":297,"start_character":0,"end_line":305,"end_character":64},"updated":"2020-11-16 14:32:30.000000000","message":"Is this still applicable? I think the change is but the comment is incorrect. This has nothing to do with the \u0027aggregate show\u0027 and \u0027aggregate create\u0027 commands","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"fd7cb990f45f8e201950da1eff52036271c035cc","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            compute_client.update_aggregate(aggregate.id, **kwargs)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        set_property \u003d {}"},{"line_number":297,"context_line":"        if parsed_args.no_property:"},{"line_number":298,"context_line":"            # NOTE(RuiChen): \"availability_zone\" is removed from response of"},{"line_number":299,"context_line":"            #                aggregate show and create commands, don\u0027t see it"},{"line_number":300,"context_line":"            #                anywhere, so pop it, avoid the unexpected server"},{"line_number":301,"context_line":"            #                exception(can\u0027t unset the availability zone from"},{"line_number":302,"context_line":"            #                aggregate metadata in nova)."},{"line_number":303,"context_line":"            set_property.update({key: None"},{"line_number":304,"context_line":"                                 for key in aggregate.metadata.keys()"},{"line_number":305,"context_line":"                                 if key !\u003d \u0027availability_zone\u0027})"},{"line_number":306,"context_line":"        if parsed_args.property:"},{"line_number":307,"context_line":"            set_property.update(parsed_args.property)"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_360a00d1","line":305,"range":{"start_line":297,"start_character":0,"end_line":305,"end_character":64},"in_reply_to":"1f621f24_4e045215","updated":"2020-11-17 11:55:23.000000000","message":"hopefully this way is more clear.","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0febae36c1f1db38ea7d96834b00c8a7c7da95c4","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            compute_client.update_aggregate(aggregate.id, **kwargs)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        set_property \u003d {}"},{"line_number":297,"context_line":"        if parsed_args.no_property:"},{"line_number":298,"context_line":"            # NOTE(RuiChen): \"availability_zone\" is removed from response of"},{"line_number":299,"context_line":"            #                aggregate show and create commands, don\u0027t see it"},{"line_number":300,"context_line":"            #                anywhere, so pop it, avoid the unexpected server"},{"line_number":301,"context_line":"            #                exception(can\u0027t unset the availability zone from"},{"line_number":302,"context_line":"            #                aggregate metadata in nova)."},{"line_number":303,"context_line":"            set_property.update({key: None"},{"line_number":304,"context_line":"                                 for key in aggregate.metadata.keys()"},{"line_number":305,"context_line":"                                 if key !\u003d \u0027availability_zone\u0027})"},{"line_number":306,"context_line":"        if parsed_args.property:"},{"line_number":307,"context_line":"            set_property.update(parsed_args.property)"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_4e045215","line":305,"range":{"start_line":297,"start_character":0,"end_line":305,"end_character":64},"in_reply_to":"1f621f24_a4c0ace2","updated":"2020-11-16 16:35:19.000000000","message":"Yes, this still makes sense but the comment needs work","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0febae36c1f1db38ea7d96834b00c8a7c7da95c4","unresolved":false,"context_lines":[{"line_number":328,"context_line":"    def take_action(self, parsed_args):"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":"        compute_client \u003d self.app.client_manager.sdk_connection.compute"},{"line_number":331,"context_line":"        aggregate \u003d compute_client.find_aggregate("},{"line_number":332,"context_line":"            parsed_args.aggregate, ignore_missing\u003dFalse)"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        # Remove availability_zone from metadata because Nova doesn\u0027t"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_fb787ec4","line":331,"range":{"start_line":331,"start_character":35,"end_line":331,"end_character":49},"updated":"2020-11-16 16:35:19.000000000","message":"This has the same issue above, whereby names are not handled.\n\n  $ openstack aggregate show test-aggregate\n  BadRequestException: 400: Client Error for url: http://172.20.4.87/compute/v2.1/os-aggregates/test-aggregate, Invalid input received: id must be an integer","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a8dda635123e4b2aeee96c59cfa0867f3474a3cc","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        if parsed_args.property:"},{"line_number":370,"context_line":"            unset_property.update({key: None for key in parsed_args.property})"},{"line_number":371,"context_line":"        if unset_property:"},{"line_number":372,"context_line":"            compute_client.set_aggregate_metadata("},{"line_number":373,"context_line":"                aggregate, unset_property)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_64c4d440","line":372,"updated":"2020-11-16 14:32:30.000000000","message":"It\u0027s weird that you can\u0027t do:\n\n  aggregate.set_metadata(unset_property)","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"06f1b88c1efe869371293e8227c6a928dd769b81","unresolved":false,"context_lines":[{"line_number":369,"context_line":"        if parsed_args.property:"},{"line_number":370,"context_line":"            unset_property.update({key: None for key in parsed_args.property})"},{"line_number":371,"context_line":"        if unset_property:"},{"line_number":372,"context_line":"            compute_client.set_aggregate_metadata("},{"line_number":373,"context_line":"                aggregate, unset_property)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_6e8cae35","line":372,"in_reply_to":"1f621f24_64c4d440","updated":"2020-11-16 17:00:43.000000000","message":"you actually can, but as: aggregate.set_metadata(compute_client, unset_property). I normally prefer not to do it this way unless absolutely required","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0febae36c1f1db38ea7d96834b00c8a7c7da95c4","unresolved":false,"context_lines":[{"line_number":402,"context_line":"            raise exceptions.CommandError(msg)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"        aggregate \u003d compute_client.find_aggregate("},{"line_number":405,"context_line":"            parsed_args.aggregate, ignore_missing\u003dFalse)"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        images \u003d []"},{"line_number":408,"context_line":"        for img in parsed_args.image:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_ae07e617","line":405,"updated":"2020-11-16 16:35:19.000000000","message":"Yet again, names aren\u0027t handled.","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0febae36c1f1db38ea7d96834b00c8a7c7da95c4","unresolved":false,"context_lines":[{"line_number":410,"context_line":"                img, ignore_missing\u003dFalse)"},{"line_number":411,"context_line":"            images.append(image.id)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        compute_client.aggregate_precache_images(aggregate.id, images)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f621f24_0e5d3a14","line":413,"updated":"2020-11-16 16:35:19.000000000","message":"There\u0027s something weird going on with this. Firstly, it doesn\u0027t seem to be auto-negotiating versions, which I thought it would?\n\n  $ openstack aggregate cache image 1 --image cirros-0.5.1-x86_64-disk\n  ResourceNotFound: 404: Client Error for url: http://172.20.4.87/compute/v2.1/os-aggregates/1/images, The resource could not be found.\n\nWhen I explicitly request this, the server doesn\u0027t appear to be happy with the request:\n\n  $ openstack --os-compute-api-version 2.83 aggregate cache image 1 --image cirros-0.5.1-x86_64-disk\n  BadRequestException: 400: Client Error for url: http://172.20.4.87/compute/v2.1/os-aggregates/1/images, Invalid input for field/attribute 0. Value: 21ffbdbe-a45f-49af-8376-49ec70a191e1. \u002721ffbdbe-a45f-49af-8376-49ec70a191e1\u0027 is not of type \u0027object\u0027\n\nGuess the latter is a bug with the sdk change","commit_id":"d6dfab81f15fe0baf314a7d8ed6a698666489f34"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4c23327094e42df1684a47b3499147ba3aed1bef","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    \u0027Hosts\u0027: format_columns.ListColumn,"},{"line_number":36,"context_line":"    \u0027Metadata\u0027: format_columns.DictColumn,"},{"line_number":37,"context_line":"    \u0027hosts\u0027: format_columns.ListColumn,"},{"line_number":38,"context_line":"    \u0027metadata\u0027: format_columns.DictColumn"},{"line_number":39,"context_line":"}"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_3964ac49","line":38,"updated":"2020-11-17 18:08:25.000000000","message":"style nit: trailing comma would be nice","commit_id":"b5162191ea994984cb678c903774823449cfb43e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4c23327094e42df1684a47b3499147ba3aed1bef","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    # To maintain backwards compatibility we need to rename sdk props to"},{"line_number":44,"context_line":"    # whatever OSC was using before"},{"line_number":45,"context_line":"    column_map \u003d {"},{"line_number":46,"context_line":"        \u0027metadata\u0027: \u0027properties\u0027"},{"line_number":47,"context_line":"    }"},{"line_number":48,"context_line":"    hidden_columns \u003d [\u0027links\u0027, \u0027location\u0027]"},{"line_number":49,"context_line":"    return utils.get_osc_show_columns_for_sdk_resource("}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_1967304f","line":46,"updated":"2020-11-17 18:08:25.000000000","message":"ditto","commit_id":"b5162191ea994984cb678c903774823449cfb43e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4c23327094e42df1684a47b3499147ba3aed1bef","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            parsed_args.aggregate, ignore_missing\u003dFalse)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        aggregate \u003d compute_client.add_host_to_aggregate("},{"line_number":77,"context_line":"            aggregate.id, parsed_args.host)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        display_columns, columns \u003d _get_aggregate_columns(aggregate)"},{"line_number":80,"context_line":"        data \u003d utils.get_item_properties("}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_b9dc3ce4","line":77,"updated":"2020-11-17 18:08:25.000000000","message":"If you specify an invalid host, this exits with:\n\n  $ openstack aggregate add host test-aggregate foo\n  ResourceNotFound: 404: Client Error for url: http://172.20.4.87/compute/v2.1/os-aggregates/1/action, Compute host foo could not be found.\n\nIs that suitable? Do we want to prettify it? Contrast this to using an invalid aggregate:\n\n  $ openstack aggregate add host foo bar\n  No Aggregate found for foo\n\nI guess to do this we\u0027d need to list hosts using the os-hypervisors API. Perhaps that\u0027s too much work, idk.","commit_id":"b5162191ea994984cb678c903774823449cfb43e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4c23327094e42df1684a47b3499147ba3aed1bef","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                aggregate \u003d compute_client.find_aggregate("},{"line_number":150,"context_line":"                    a, ignore_missing\u003dFalse)"},{"line_number":151,"context_line":"                compute_client.delete_aggregate("},{"line_number":152,"context_line":"                    aggregate.id, ignore_missing\u003dFalse)"},{"line_number":153,"context_line":"            except Exception as e:"},{"line_number":154,"context_line":"                result +\u003d 1"},{"line_number":155,"context_line":"                LOG.error(_(\"Failed to delete aggregate with name or \""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_39978cee","line":152,"updated":"2020-11-17 18:08:25.000000000","message":"fwiw, this will fail if you don\u0027t remove the hosts first:\n\n  $ openstack aggregate delete test-aggregate\n  Failed to delete aggregate with name or ID \u0027test-aggregate\u0027: BadRequestException: 400: Client Error for url: http://172.20.4.87/compute/v2.1/os-aggregates/1, Cannot remove host from aggregate 1. Reason: Host aggregate is not empty.\n  1 of 1 aggregates failed to delete.\n\nI think this is correct behavior but I wonder if we could add a --force parameter that would remove the hosts too? I\u0027m okay with that as a follow-up","commit_id":"b5162191ea994984cb678c903774823449cfb43e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4c23327094e42df1684a47b3499147ba3aed1bef","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            parsed_args.aggregate, ignore_missing\u003dFalse)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        aggregate \u003d compute_client.remove_host_from_aggregate("},{"line_number":240,"context_line":"            aggregate.id, parsed_args.host)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        display_columns, columns \u003d _get_aggregate_columns(aggregate)"},{"line_number":243,"context_line":"        data \u003d utils.get_item_properties("}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_799d8408","line":240,"updated":"2020-11-17 18:08:25.000000000","message":"As above, the error from this isn\u0027t that pretty:\n\n  $ openstack aggregate remove host test-aggregate devstack\n  ResourceNotFound: 404: Client Error for url: http://172.20.4.87/compute/v2.1/os-aggregates/1/action, Cannot remove host devstack in aggregate 1\n\nBut maybe that\u0027s okay. More importantly though, we\u0027re not stripping \u0027availability_zone\u0027 from the \u0027properties\u0027 field of the aggregate like we do on e.g. [1]. That means we end up with different output between this command and e.g. \u0027openstack aggregate show\u0027. Same issues with the \u0027add host\u0027 command\n\n[1] https://review.opendev.org/#/c/762134/5/openstackclient/compute/v2/aggregate.py","commit_id":"b5162191ea994984cb678c903774823449cfb43e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4c23327094e42df1684a47b3499147ba3aed1bef","unresolved":false,"context_lines":[{"line_number":374,"context_line":""},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"class CacheImageForAggregate(command.Command):"},{"line_number":377,"context_line":"    _description \u003d _(\"Request image caching for aggregate\")"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"    def get_parser(self, prog_name):"},{"line_number":380,"context_line":"        parser \u003d super(CacheImageForAggregate, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_d9001805","line":377,"updated":"2020-11-17 18:08:25.000000000","message":"This doesn\u0027t return anything. We should probably call that out in the docstring.\n\n  \u003cstephenfin\u003e dansmith: Is there any way to identify what images have been cached for an aggregate?\n  \u003cstephenfin\u003e Assuming such a request even makes sense?\n  \u003cdansmith\u003e stephenfin: no, the caching thing is all point-in-time requests, akin to asking for boots that don\u0027t end up spawning actual instances\n  \u003cdansmith\u003e so no accounting or recording\n  \u003cstephenfin\u003e okay, so not displaying anything in response to an \u0027openstack aggregate cache image\u0027 call makes sense?\n  \u003cstephenfin\u003e e.g. there\u0027s no point showing the aggregate since nothings has \"changed\"\n  \u003cdansmith\u003e like a table of data or something? no, nothing to display. obviously if it returns 404 because there\u0027s no aggregate or something an error makes sense\n  \u003cdansmith\u003e right, no point in showing the image or aggregate, IMHO\n\n(from #openstack-nova today)","commit_id":"b5162191ea994984cb678c903774823449cfb43e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4c23327094e42df1684a47b3499147ba3aed1bef","unresolved":false,"context_lines":[{"line_number":388,"context_line":"            metavar\u003d\u0027\u003cimage\u003e\u0027,"},{"line_number":389,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":390,"context_line":"            help\u003d_(\"Image ID to request caching for aggregate (name or ID)\")"},{"line_number":391,"context_line":"        )"},{"line_number":392,"context_line":"        return parser"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_593c08e0","line":391,"updated":"2020-11-17 18:08:25.000000000","message":"The \u0027add host\u0027 and \u0027remove host\u0027 commands accept a host as a positional arguments.\n\n  $ openstack aggregate add host ... \u003caggregate\u003e \u003chost\u003e\n  $ openstack aggregate remove host ... \u003caggregate\u003e \u003chost\u003e\n\nYet \u0027cache image\u0027 takes images as optional parameters:\n\n  $ openstack aggregate cache image ... [--image \u003cimage\u003e] \u003caggregate\u003e\n\nShouldn\u0027t they be the same? Namely:\n\n  $ openstack aggregate cache image \u003caggregate\u003e \u003cimage\u003e [\u003cimage\u003e...]","commit_id":"b5162191ea994984cb678c903774823449cfb43e"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"53bd776706f2aa06a02bf601c32b9bfcf55a202d","unresolved":false,"context_lines":[{"line_number":388,"context_line":"            metavar\u003d\u0027\u003cimage\u003e\u0027,"},{"line_number":389,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":390,"context_line":"            help\u003d_(\"Image ID to request caching for aggregate (name or ID)\")"},{"line_number":391,"context_line":"        )"},{"line_number":392,"context_line":"        return parser"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_f4eebbea","line":391,"in_reply_to":"1f621f24_593c08e0","updated":"2020-11-17 18:56:42.000000000","message":"the issue here is that caching image support multiple images at once. Having all of those as positional params is really not user-friendly. Add/Remove host does not support modifying multiple hosts at once. I understand your concern, but we need to find consensus here.","commit_id":"b5162191ea994984cb678c903774823449cfb43e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9cd30cdbf4b00e7653bc32b5281ce07fa5c63a60","unresolved":false,"context_lines":[{"line_number":388,"context_line":"            metavar\u003d\u0027\u003cimage\u003e\u0027,"},{"line_number":389,"context_line":"            action\u003d\u0027append\u0027,"},{"line_number":390,"context_line":"            help\u003d_(\"Image ID to request caching for aggregate (name or ID)\")"},{"line_number":391,"context_line":"        )"},{"line_number":392,"context_line":"        return parser"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_a88fbf2c","line":391,"in_reply_to":"1f621f24_f4eebbea","updated":"2020-11-18 09:54:21.000000000","message":"\u003e the issue here is that caching image support multiple images at\n \u003e once. Having all of those as positional params is really not\n \u003e user-friendly.\n\nReplied at top-level (tl;dr: I don\u0027t think it\u0027s an issue)\n\n \u003e Add/Remove host does not support modifying multiple\n \u003e hosts at once. I understand your concern, but we need to find\n \u003e consensus here.\n\nI\u0027d like to change this in a follow-up, fwiw.","commit_id":"b5162191ea994984cb678c903774823449cfb43e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"4c23327094e42df1684a47b3499147ba3aed1bef","unresolved":false,"context_lines":[{"line_number":408,"context_line":"        for img in parsed_args.image:"},{"line_number":409,"context_line":"            image \u003d self.app.client_manager.sdk_connection.image.find_image("},{"line_number":410,"context_line":"                img, ignore_missing\u003dFalse)"},{"line_number":411,"context_line":"            images.append(image.id)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"        compute_client.aggregate_precache_images(aggregate.id, images)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f621f24_54716fa7","line":411,"updated":"2020-11-17 18:08:25.000000000","message":"This will early fail if an image isn\u0027t found. That makes sense to me.","commit_id":"b5162191ea994984cb678c903774823449cfb43e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e5da2578f296548e3ffa35b279b7667219d76833","unresolved":false,"context_lines":[{"line_number":375,"context_line":""},{"line_number":376,"context_line":"class CacheImageForAggregate(command.Command):"},{"line_number":377,"context_line":"    _description \u003d _(\"Request image caching for aggregate\")"},{"line_number":378,"context_line":"    # NOTE(gtema): According to stephenfin and dansmith there is no and will"},{"line_number":379,"context_line":"    # not be anything to return."},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"    def get_parser(self, prog_name):"},{"line_number":382,"context_line":"        parser \u003d super(CacheImageForAggregate, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f621f24_88448376","line":379,"range":{"start_line":378,"start_character":0,"end_line":379,"end_character":32},"updated":"2020-11-18 10:46:31.000000000","message":"I actually meant to put this in the description string, so end users would see it when they used \u0027--help\u0027","commit_id":"12803d7b5d8ef98ad15dcc5ab6cd9db9392493c7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e5da2578f296548e3ffa35b279b7667219d76833","unresolved":false,"context_lines":[{"line_number":391,"context_line":"            nargs\u003d\u0027+\u0027,"},{"line_number":392,"context_line":"            help\u003d_(\"Image ID to request caching for aggregate (name or ID). \""},{"line_number":393,"context_line":"                   \"May be specified multiple times.\")"},{"line_number":394,"context_line":"        )"},{"line_number":395,"context_line":"        return parser"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"    def take_action(self, parsed_args):"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f621f24_a81fbf6e","line":394,"updated":"2020-11-18 10:46:31.000000000","message":"\u003c3\n\n  usage: openstack aggregate cache image [-h] \u003caggregate\u003e \u003cimage\u003e [\u003cimage\u003e ...","commit_id":"12803d7b5d8ef98ad15dcc5ab6cd9db9392493c7"}],"openstackclient/tests/unit/compute/v2/test_aggregate.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c6fecc53de7b42b543c02ad95d2870ae13c93529","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1f621f24_3acb35a5","line":599,"updated":"2020-11-12 14:47:53.000000000","message":"We need a test for microversion \u003c 2.81 once you add the version check","commit_id":"428951ed7ac3dcc752def352b021b586265f9e48"}],"releasenotes/notes/switch-aggregate-to-sdk-ced451a0f28bf6ea.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6be467983a79bb3fb42a0624b8fdd15a20d691fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"1f621f24_7ab12d47","line":4,"updated":"2020-11-12 14:47:21.000000000","message":"You\u0027ve missed the new command","commit_id":"428951ed7ac3dcc752def352b021b586265f9e48"}]}
