)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f61d4174ca2811c8045e4254fd44afb3fd95b21","unresolved":false,"context_lines":[{"line_number":10,"context_line":"for microversion 1.8 where --project-id and --user-id are"},{"line_number":11,"context_line":"required (and highly recommended)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Adds support for showing consumer resource usage information"},{"line_number":14,"context_line":"via \"openstack resource provider usage show\" by specifying"},{"line_number":15,"context_line":"a --project-id and optionally a --user-id for filtering."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"UpgradeImpact: The \"uuid\" positional argument to"},{"line_number":18,"context_line":"\"openstack resource provider usage show\" is now a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"5f7c97a3_dbd2105c","line":15,"range":{"start_line":13,"start_character":0,"end_line":15,"end_character":56},"updated":"2018-06-28 13:44:20.000000000","message":"This should be updated for the new command.","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f61d4174ca2811c8045e4254fd44afb3fd95b21","unresolved":false,"context_lines":[{"line_number":14,"context_line":"via \"openstack resource provider usage show\" by specifying"},{"line_number":15,"context_line":"a --project-id and optionally a --user-id for filtering."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"UpgradeImpact: The \"uuid\" positional argument to"},{"line_number":18,"context_line":"\"openstack resource provider usage show\" is now a"},{"line_number":19,"context_line":"--uuid option but still required if using"},{"line_number":20,"context_line":"--os-placement-api-version less than 1.9."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I8ec19c8138611a06b41ec3ad949f45b8f6d7ec17"},{"line_number":23,"context_line":"Partially-Implements: blueprint placement-osc-plugin-rocky"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":32,"id":"5f7c97a3_fbba6c09","line":20,"range":{"start_line":17,"start_character":0,"end_line":20,"end_character":41},"updated":"2018-06-28 13:44:20.000000000","message":"This can be removed.","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"532d1dc2faef1cd6b6ae14d598ac1634ac0ed454","unresolved":false,"context_lines":[{"line_number":10,"context_line":"for microversion 1.8 where --project-id and --user-id are"},{"line_number":11,"context_line":"required (and highly recommended)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Adds a new \"openstack resource consumer usage show\" command"},{"line_number":14,"context_line":"for microversion 1.9 and GET /usages."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I8ec19c8138611a06b41ec3ad949f45b8f6d7ec17"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"5f7c97a3_9f9ea453","line":13,"range":{"start_line":13,"start_character":22,"end_line":13,"end_character":41},"updated":"2018-06-29 15:28:36.000000000","message":"should just be `openstack resource usage show`, not `openstack resource consumer usage show`","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7a96738a75cd88fb1ce3f83a7a4e5c9044c8c8f6","unresolved":false,"context_lines":[{"line_number":10,"context_line":"for microversion 1.8 where --project-id and --user-id are"},{"line_number":11,"context_line":"required (and highly recommended)."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Adds a new \"openstack resource consumer usage show\" command"},{"line_number":14,"context_line":"for microversion 1.9 and GET /usages."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I8ec19c8138611a06b41ec3ad949f45b8f6d7ec17"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":33,"id":"5f7c97a3_df7e5ce2","line":13,"range":{"start_line":13,"start_character":22,"end_line":13,"end_character":41},"in_reply_to":"5f7c97a3_9f9ea453","updated":"2018-06-29 15:36:04.000000000","message":"No this is correct:\n\nhttp://logs.openstack.org/46/514646/33/check/build-openstack-sphinx-docs/4a6ba8c/html/cli/index.html#resource-consumer-usage-show\n\nOr do you mean it should be renamed. This was originally proposed as part of the existing \"resource provider usage show\" which didn\u0027t sit well with me so I proposed this since usages are based on allocations which are tied to project_id from the consumer for that allocation, so that\u0027s why I said consumer.\n\nhttps://review.openstack.org/#/c/514646/31/osc_placement/resources/usage.py@28\n\nIf people want \"openstack resource usage show\" I\u0027m OK with that as well.","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"}],"osc_placement/resources/allocation.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"87ffcf31d4b23ffe887b35aec97accc23b463a48","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    return allocations"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class SetAllocation(command.Lister):"},{"line_number":49,"context_line":"    \"\"\"Replaces the set of resource allocation(s) for a given consumer"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    Note that this is a full replacement of the existing allocations. If you"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa0c359_c4abc086","line":48,"range":{"start_line":48,"start_character":34,"end_line":48,"end_character":36},"updated":"2018-02-08 14:51:08.000000000","message":"I think this class should inherit from version.CheckerMixin as it was in ps6. For example see L73.","commit_id":"666eafcdd3217b9dbf2eedab43d0c6fbdcb02a48"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"10f5656178ce341485b95380fcdcf01fa2657215","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    return allocations"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class SetAllocation(command.Lister):"},{"line_number":49,"context_line":"    \"\"\"Replaces the set of resource allocation(s) for a given consumer"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    Note that this is a full replacement of the existing allocations. If you"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa0c359_5890d3ed","line":48,"range":{"start_line":48,"start_character":0,"end_line":48,"end_character":36},"updated":"2018-02-09 13:08:29.000000000","message":"Yeah I think the missing version.CheckerMixin base is causing the test failures:\ni.e.: \"\n.\n.\noutput: \u0027SetAllocation\u0027 object has no attribute \u0027compare_version\u0027\"","commit_id":"666eafcdd3217b9dbf2eedab43d0c6fbdcb02a48"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c0a0433dfceb6054e0d6f2e9eb7a490e6b79af29","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        )"},{"line_number":81,"context_line":"        parser.add_argument("},{"line_number":82,"context_line":"            \u0027--user-id\u0027,"},{"line_number":83,"context_line":"            metavar\u003d\u0027project_id\u0027,"},{"line_number":84,"context_line":"            help\u003d\u0027UUID of the user. \u0027"},{"line_number":85,"context_line":"                 \u0027This param is required with \u0027"},{"line_number":86,"context_line":"                 \u0027--os-placement-api-version 1.8.\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_a20a2276","line":83,"range":{"start_line":83,"start_character":21,"end_line":83,"end_character":31},"updated":"2018-04-11 03:44:52.000000000","message":"user_id","commit_id":"7419e70e5c00a26c5cfd0962b92cb673f01c02c6"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"fa3c04f0168c26a694b44383d37bd7d02df24f89","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        )"},{"line_number":81,"context_line":"        parser.add_argument("},{"line_number":82,"context_line":"            \u0027--user-id\u0027,"},{"line_number":83,"context_line":"            metavar\u003d\u0027project_id\u0027,"},{"line_number":84,"context_line":"            help\u003d\u0027UUID of the user. \u0027"},{"line_number":85,"context_line":"                 \u0027This param is required with \u0027"},{"line_number":86,"context_line":"                 \u0027--os-placement-api-version 1.8.\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_d9eb8475","line":83,"range":{"start_line":83,"start_character":21,"end_line":83,"end_character":31},"in_reply_to":"bf659307_a20a2276","updated":"2018-04-11 09:42:48.000000000","message":"Done","commit_id":"7419e70e5c00a26c5cfd0962b92cb673f01c02c6"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"192f5c4eba1541de7268c18ef851b72687e471bc","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    Note that this is a full replacement of the existing allocations. If you"},{"line_number":52,"context_line":"    want to retain the existing allocations and add a new resource class"},{"line_number":53,"context_line":"    allocation, you must specify all resource class allocations, old and new."},{"line_number":54,"context_line":"    \"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_parser(self, prog_name):"},{"line_number":57,"context_line":"        parser \u003d super(SetAllocation, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_027d6fe6","line":54,"updated":"2018-05-18 10:01:12.000000000","message":"nit: The help text generation somehow removed the empty lines from this text and the result therefore missing a \u0027.\u0027 at the end of the first sentence. But I guess that dot is forbidden by pep8 in the docstring.\n\n\"\nReplaces the set of resource allocation(s) for a given consumer Note that this\nis a full replacement of the existing allocations. If you want to retain the\nexisting allocations and add a new resource class allocation, you must specify\nall resource class allocations, old and new.\n\"\n\nI guess a separate patch could improve the help text generation to keep the empty lines.","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"c2c01b019e071a83165918b6599f335f807b15fc","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    Note that this is a full replacement of the existing allocations. If you"},{"line_number":52,"context_line":"    want to retain the existing allocations and add a new resource class"},{"line_number":53,"context_line":"    allocation, you must specify all resource class allocations, old and new."},{"line_number":54,"context_line":"    \"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def get_parser(self, prog_name):"},{"line_number":57,"context_line":"        parser \u003d super(SetAllocation, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_f770050b","line":54,"in_reply_to":"5f7c97a3_027d6fe6","updated":"2018-05-22 11:33:33.000000000","message":"Added a period. By the pep257 it is required a period at the end of short description in a doctring, so I made some cleanup.","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"192f5c4eba1541de7268c18ef851b72687e471bc","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        url \u003d BASE_URL + \u0027/\u0027 + parsed_args.uuid"},{"line_number":103,"context_line":"        payload \u003d {\u0027allocations\u0027: allocations}"},{"line_number":104,"context_line":"        if self.compare_version(version.ge(\u00271.8\u0027)):"},{"line_number":105,"context_line":"            if parsed_args.project_id:"},{"line_number":106,"context_line":"                payload[\u0027project_id\u0027] \u003d parsed_args.project_id"},{"line_number":107,"context_line":"            if parsed_args.user_id:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_c2ed378c","line":104,"updated":"2018-05-18 10:01:12.000000000","message":"nit: in version \u003c 1.8 the new project-id and user-id params are accepted but silently ignored by the CLI, this could be misleading to the user.","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"ec2a627af08ab1719a061f87f68a5f7090f83411","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        url \u003d BASE_URL + \u0027/\u0027 + parsed_args.uuid"},{"line_number":103,"context_line":"        payload \u003d {\u0027allocations\u0027: allocations}"},{"line_number":104,"context_line":"        if self.compare_version(version.ge(\u00271.8\u0027)):"},{"line_number":105,"context_line":"            if parsed_args.project_id:"},{"line_number":106,"context_line":"                payload[\u0027project_id\u0027] \u003d parsed_args.project_id"},{"line_number":107,"context_line":"            if parsed_args.user_id:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_f6dbc7e6","line":104,"in_reply_to":"5f7c97a3_575bf985","updated":"2018-06-25 07:47:04.000000000","message":"But do we really need to raise an error for that?\nI don\u0027t think we have to stop users to proceed... The problem is to \"silently\" ignore, so can we just warn users explicitly that we are ignoring their parameters and just ignore and proceed?","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"c2c01b019e071a83165918b6599f335f807b15fc","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        url \u003d BASE_URL + \u0027/\u0027 + parsed_args.uuid"},{"line_number":103,"context_line":"        payload \u003d {\u0027allocations\u0027: allocations}"},{"line_number":104,"context_line":"        if self.compare_version(version.ge(\u00271.8\u0027)):"},{"line_number":105,"context_line":"            if parsed_args.project_id:"},{"line_number":106,"context_line":"                payload[\u0027project_id\u0027] \u003d parsed_args.project_id"},{"line_number":107,"context_line":"            if parsed_args.user_id:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_575bf985","line":104,"in_reply_to":"5f7c97a3_c2ed378c","updated":"2018-05-22 11:33:33.000000000","message":"Added exception if project id or user id is specified for version less than 1.8.","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9cb1e431c8a583c8c4aeda717f07b8f0b1cf7d32","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        url \u003d BASE_URL + \u0027/\u0027 + parsed_args.uuid"},{"line_number":103,"context_line":"        payload \u003d {\u0027allocations\u0027: allocations}"},{"line_number":104,"context_line":"        if self.compare_version(version.ge(\u00271.8\u0027)):"},{"line_number":105,"context_line":"            if parsed_args.project_id:"},{"line_number":106,"context_line":"                payload[\u0027project_id\u0027] \u003d parsed_args.project_id"},{"line_number":107,"context_line":"            if parsed_args.user_id:"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_d742f73b","line":104,"in_reply_to":"5f7c97a3_f6dbc7e6","updated":"2018-06-27 21:16:04.000000000","message":"Done","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"ec2a627af08ab1719a061f87f68a5f7090f83411","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class SetAllocation(command.Lister, version.CheckerMixin):"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    \"\"\"Replaces the set of resource allocation(s) for a given consumer."},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    Note that this is a full replacement of the existing allocations. If you"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_163d232b","line":49,"updated":"2018-06-25 07:47:04.000000000","message":"nit: unrelated space. The same applies hereafter.","commit_id":"e30588f35d72257c5d58abf2881665b9743bd7b4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    return allocations"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class SetAllocation(command.Lister, version.CheckerMixin):"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    \"\"\"Replaces the set of resource allocation(s) for a given consumer."},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_f4ca916d","line":48,"updated":"2018-06-27 20:58:48.000000000","message":"Given the warning in 1.28:\n\nhttps://docs.openstack.org/nova/latest/user/placement.html#consumer-generation-support\n\nWe might want to make a note in the help text that it is highly recommended that ``--project-id`` and ``--user-id`` are specified when setting allocations.","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    return allocations"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class SetAllocation(command.Lister, version.CheckerMixin):"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    \"\"\"Replaces the set of resource allocation(s) for a given consumer."},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_745e8152","line":48,"in_reply_to":"5f7c97a3_f4ca916d","updated":"2018-06-27 21:13:02.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    allocation, you must specify all resource class allocations, old and new."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    From ``--os-placement-api-version 1.8`` it is required to specify"},{"line_number":57,"context_line":"    ``--project-id`` and ``--user-id`` for making allocation."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_f46e1196","line":57,"range":{"start_line":57,"start_character":43,"end_line":57,"end_character":49},"updated":"2018-06-27 20:58:48.000000000","message":"nit: setting\n\nSince it\u0027s the \u0027allocation set\u0027 command.\n\nOr: \"to set an allocation\"","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    allocation, you must specify all resource class allocations, old and new."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    From ``--os-placement-api-version 1.8`` it is required to specify"},{"line_number":57,"context_line":"    ``--project-id`` and ``--user-id`` for making allocation."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_f47131e1","line":57,"range":{"start_line":57,"start_character":43,"end_line":57,"end_character":49},"in_reply_to":"5f7c97a3_f46e1196","updated":"2018-06-27 21:13:02.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            help\u003d\u0027Create (or update) an allocation of a resource class. \u0027"},{"line_number":76,"context_line":"                 \u0027Specify option multiple times to set multiple allocations.\u0027"},{"line_number":77,"context_line":"        )"},{"line_number":78,"context_line":"        parser.add_argument("},{"line_number":79,"context_line":"            \u0027--project-id\u0027,"},{"line_number":80,"context_line":"            metavar\u003d\u0027project_id\u0027,"},{"line_number":81,"context_line":"            help\u003d\u0027UUID of the project. \u0027"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_34300956","line":78,"updated":"2018-06-27 20:58:48.000000000","message":"As far as I can tell, these are only tested via the test for 1.9 and \u0027openstack resource provider usage show\u0027 but it might be nice to have a specific 1.8 test for setting allocations. Could also be done in a follow up though, I know this change has been dragging on.","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        parser.add_argument("},{"line_number":79,"context_line":"            \u0027--project-id\u0027,"},{"line_number":80,"context_line":"            metavar\u003d\u0027project_id\u0027,"},{"line_number":81,"context_line":"            help\u003d\u0027UUID of the project. \u0027"},{"line_number":82,"context_line":"                 \u0027This param is required with \u0027"},{"line_number":83,"context_line":"                 \u0027--os-placement-api-version 1.8.\u0027,"},{"line_number":84,"context_line":"            required\u003dself.compare_version(version.ge(\u00271.8\u0027))"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_f4f371e7","line":81,"range":{"start_line":81,"start_character":18,"end_line":81,"end_character":22},"updated":"2018-06-27 20:58:48.000000000","message":"I know the placement API reference docs say UUID also, but these don\u0027t really need to be UUIDs, they are defined by the deployment. I would maybe instead say, \"ID of the consuming project.\"","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        parser.add_argument("},{"line_number":79,"context_line":"            \u0027--project-id\u0027,"},{"line_number":80,"context_line":"            metavar\u003d\u0027project_id\u0027,"},{"line_number":81,"context_line":"            help\u003d\u0027UUID of the project. \u0027"},{"line_number":82,"context_line":"                 \u0027This param is required with \u0027"},{"line_number":83,"context_line":"                 \u0027--os-placement-api-version 1.8.\u0027,"},{"line_number":84,"context_line":"            required\u003dself.compare_version(version.ge(\u00271.8\u0027))"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_b47bb9bd","line":81,"range":{"start_line":81,"start_character":18,"end_line":81,"end_character":22},"in_reply_to":"5f7c97a3_f4f371e7","updated":"2018-06-27 21:13:02.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            \u0027--project-id\u0027,"},{"line_number":80,"context_line":"            metavar\u003d\u0027project_id\u0027,"},{"line_number":81,"context_line":"            help\u003d\u0027UUID of the project. \u0027"},{"line_number":82,"context_line":"                 \u0027This param is required with \u0027"},{"line_number":83,"context_line":"                 \u0027--os-placement-api-version 1.8.\u0027,"},{"line_number":84,"context_line":"            required\u003dself.compare_version(version.ge(\u00271.8\u0027))"},{"line_number":85,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_94055dc4","line":82,"range":{"start_line":82,"start_character":41,"end_line":82,"end_character":45},"updated":"2018-06-27 20:58:48.000000000","message":"starting from?","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            \u0027--project-id\u0027,"},{"line_number":80,"context_line":"            metavar\u003d\u0027project_id\u0027,"},{"line_number":81,"context_line":"            help\u003d\u0027UUID of the project. \u0027"},{"line_number":82,"context_line":"                 \u0027This param is required with \u0027"},{"line_number":83,"context_line":"                 \u0027--os-placement-api-version 1.8.\u0027,"},{"line_number":84,"context_line":"            required\u003dself.compare_version(version.ge(\u00271.8\u0027))"},{"line_number":85,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_7447617c","line":82,"range":{"start_line":82,"start_character":41,"end_line":82,"end_character":45},"in_reply_to":"5f7c97a3_94055dc4","updated":"2018-06-27 21:13:02.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            metavar\u003d\u0027project_id\u0027,"},{"line_number":81,"context_line":"            help\u003d\u0027UUID of the project. \u0027"},{"line_number":82,"context_line":"                 \u0027This param is required with \u0027"},{"line_number":83,"context_line":"                 \u0027--os-placement-api-version 1.8.\u0027,"},{"line_number":84,"context_line":"            required\u003dself.compare_version(version.ge(\u00271.8\u0027))"},{"line_number":85,"context_line":"        )"},{"line_number":86,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_7400c1b2","line":83,"range":{"start_line":83,"start_character":18,"end_line":83,"end_character":48},"updated":"2018-06-27 20:58:48.000000000","message":"nit: Can we do ``--os-placement-api-version 1.8``? It might format better in the docs:\n\nhttp://logs.openstack.org/46/514646/28/check/build-openstack-sphinx-docs/c9c1f18/html/cli/index.html#cmdoption-openstack-resource-provider-allocation-set-project-id","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":80,"context_line":"            metavar\u003d\u0027project_id\u0027,"},{"line_number":81,"context_line":"            help\u003d\u0027UUID of the project. \u0027"},{"line_number":82,"context_line":"                 \u0027This param is required with \u0027"},{"line_number":83,"context_line":"                 \u0027--os-placement-api-version 1.8.\u0027,"},{"line_number":84,"context_line":"            required\u003dself.compare_version(version.ge(\u00271.8\u0027))"},{"line_number":85,"context_line":"        )"},{"line_number":86,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_944c7d9e","line":83,"range":{"start_line":83,"start_character":18,"end_line":83,"end_character":48},"in_reply_to":"5f7c97a3_7400c1b2","updated":"2018-06-27 21:13:02.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            \u0027--user-id\u0027,"},{"line_number":88,"context_line":"            metavar\u003d\u0027user_id\u0027,"},{"line_number":89,"context_line":"            help\u003d\u0027UUID of the user. \u0027"},{"line_number":90,"context_line":"                 \u0027This param is required with \u0027"},{"line_number":91,"context_line":"                 \u0027--os-placement-api-version 1.8.\u0027,"},{"line_number":92,"context_line":"            required\u003dself.compare_version(version.ge(\u00271.8\u0027))"},{"line_number":93,"context_line":"        )"},{"line_number":94,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_340a49d1","line":91,"range":{"start_line":90,"start_character":17,"end_line":91,"end_character":51},"updated":"2018-06-27 20:58:48.000000000","message":"same","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            \u0027--user-id\u0027,"},{"line_number":88,"context_line":"            metavar\u003d\u0027user_id\u0027,"},{"line_number":89,"context_line":"            help\u003d\u0027UUID of the user. \u0027"},{"line_number":90,"context_line":"                 \u0027This param is required with \u0027"},{"line_number":91,"context_line":"                 \u0027--os-placement-api-version 1.8.\u0027,"},{"line_number":92,"context_line":"            required\u003dself.compare_version(version.ge(\u00271.8\u0027))"},{"line_number":93,"context_line":"        )"},{"line_number":94,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_3441e964","line":91,"range":{"start_line":90,"start_character":17,"end_line":91,"end_character":51},"in_reply_to":"5f7c97a3_340a49d1","updated":"2018-06-27 21:13:02.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        url \u003d BASE_URL + \u0027/\u0027 + parsed_args.uuid"},{"line_number":108,"context_line":"        payload \u003d {\u0027allocations\u0027: allocations}"},{"line_number":109,"context_line":"        if self.compare_version(version.ge(\u00271.8\u0027)):"},{"line_number":110,"context_line":"            if parsed_args.project_id:"},{"line_number":111,"context_line":"                payload[\u0027project_id\u0027] \u003d parsed_args.project_id"},{"line_number":112,"context_line":"            if parsed_args.user_id:"},{"line_number":113,"context_line":"                payload[\u0027user_id\u0027] \u003d parsed_args.user_id"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_d4faf5b8","line":110,"range":{"start_line":110,"start_character":12,"end_line":110,"end_character":38},"updated":"2018-06-27 20:58:48.000000000","message":"Do we need to check this? If \u003e\u003d 1.8 doesn\u0027t required\u003dself.compare_version(version.ge(\u00271.8\u0027)) on the option itself mean it has to be specified?","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            if parsed_args.user_id:"},{"line_number":113,"context_line":"                payload[\u0027user_id\u0027] \u003d parsed_args.user_id"},{"line_number":114,"context_line":"        elif parsed_args.project_id or parsed_args.user_id:"},{"line_number":115,"context_line":"            self.log.warning(\u0027--project-id and --user-id params do not affect \u0027"},{"line_number":116,"context_line":"                             \u0027allocation for --os-placement-api-version \u0027"},{"line_number":117,"context_line":"                             \u0027less than 1.8\u0027)"},{"line_number":118,"context_line":"        http.request(\u0027PUT\u0027, url, json\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_54dd853f","line":115,"range":{"start_line":115,"start_character":57,"end_line":115,"end_character":63},"updated":"2018-06-27 20:58:48.000000000","message":"nit: options","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            if parsed_args.user_id:"},{"line_number":113,"context_line":"                payload[\u0027user_id\u0027] \u003d parsed_args.user_id"},{"line_number":114,"context_line":"        elif parsed_args.project_id or parsed_args.user_id:"},{"line_number":115,"context_line":"            self.log.warning(\u0027--project-id and --user-id params do not affect \u0027"},{"line_number":116,"context_line":"                             \u0027allocation for --os-placement-api-version \u0027"},{"line_number":117,"context_line":"                             \u0027less than 1.8\u0027)"},{"line_number":118,"context_line":"        http.request(\u0027PUT\u0027, url, json\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_f45a914f","line":115,"range":{"start_line":115,"start_character":57,"end_line":115,"end_character":63},"in_reply_to":"5f7c97a3_54dd853f","updated":"2018-06-27 21:13:02.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"64c188707c26f02121af839cea77d88054bccf7c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            if parsed_args.user_id:"},{"line_number":113,"context_line":"                payload[\u0027user_id\u0027] \u003d parsed_args.user_id"},{"line_number":114,"context_line":"        elif parsed_args.project_id or parsed_args.user_id:"},{"line_number":115,"context_line":"            self.log.warning(\u0027--project-id and --user-id params do not affect \u0027"},{"line_number":116,"context_line":"                             \u0027allocation for --os-placement-api-version \u0027"},{"line_number":117,"context_line":"                             \u0027less than 1.8\u0027)"},{"line_number":118,"context_line":"        http.request(\u0027PUT\u0027, url, json\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_5741070a","line":115,"range":{"start_line":115,"start_character":57,"end_line":115,"end_character":63},"in_reply_to":"5f7c97a3_57a58702","updated":"2018-06-27 21:25:05.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ea9f91b3c24cd240ca76b56fc5ba26ef2ca3a9e7","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            if parsed_args.user_id:"},{"line_number":113,"context_line":"                payload[\u0027user_id\u0027] \u003d parsed_args.user_id"},{"line_number":114,"context_line":"        elif parsed_args.project_id or parsed_args.user_id:"},{"line_number":115,"context_line":"            self.log.warning(\u0027--project-id and --user-id params do not affect \u0027"},{"line_number":116,"context_line":"                             \u0027allocation for --os-placement-api-version \u0027"},{"line_number":117,"context_line":"                             \u0027less than 1.8\u0027)"},{"line_number":118,"context_line":"        http.request(\u0027PUT\u0027, url, json\u003dpayload)"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_57a58702","line":115,"range":{"start_line":115,"start_character":57,"end_line":115,"end_character":63},"in_reply_to":"5f7c97a3_f45a914f","updated":"2018-06-27 21:19:24.000000000","message":"We could have a test for this as well to show it doesn\u0027t blow up but the commands are ignored.","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class ShowAllocation(command.Lister):"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    \"\"\"Show resource allocations for a given consumer.\"\"\""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_34a6c9c2","line":128,"updated":"2018-06-27 20:58:48.000000000","message":"I\u0027m not sure why this needed to change...or below.","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b5c9c216f113a0c5a1e0363f623ae216796702f","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        url \u003d BASE_URL + \u0027/\u0027 + parsed_args.uuid"},{"line_number":110,"context_line":"        payload \u003d {\u0027allocations\u0027: allocations}"},{"line_number":111,"context_line":"        if self.compare_version(version.ge(\u00271.8\u0027)):"},{"line_number":112,"context_line":"            if parsed_args.project_id:"},{"line_number":113,"context_line":"                payload[\u0027project_id\u0027] \u003d parsed_args.project_id"},{"line_number":114,"context_line":"            if parsed_args.user_id:"},{"line_number":115,"context_line":"                payload[\u0027user_id\u0027] \u003d parsed_args.user_id"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_5c07bf82","line":112,"updated":"2018-06-29 14:33:56.000000000","message":"as this option is required in \u003e1.8 I don\u0027t see why we need to  have the extra if","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b5fa8a20b0b276b22cac3d63508fd6b1954b97be","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        url \u003d BASE_URL + \u0027/\u0027 + parsed_args.uuid"},{"line_number":110,"context_line":"        payload \u003d {\u0027allocations\u0027: allocations}"},{"line_number":111,"context_line":"        if self.compare_version(version.ge(\u00271.8\u0027)):"},{"line_number":112,"context_line":"            if parsed_args.project_id:"},{"line_number":113,"context_line":"                payload[\u0027project_id\u0027] \u003d parsed_args.project_id"},{"line_number":114,"context_line":"            if parsed_args.user_id:"},{"line_number":115,"context_line":"                payload[\u0027user_id\u0027] \u003d parsed_args.user_id"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_80e96080","line":112,"in_reply_to":"5f7c97a3_0429e935","updated":"2018-06-29 18:18:21.000000000","message":"Done","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4c5ff44c3d329f6b11d06165111ef997d13b8c04","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        url \u003d BASE_URL + \u0027/\u0027 + parsed_args.uuid"},{"line_number":110,"context_line":"        payload \u003d {\u0027allocations\u0027: allocations}"},{"line_number":111,"context_line":"        if self.compare_version(version.ge(\u00271.8\u0027)):"},{"line_number":112,"context_line":"            if parsed_args.project_id:"},{"line_number":113,"context_line":"                payload[\u0027project_id\u0027] \u003d parsed_args.project_id"},{"line_number":114,"context_line":"            if parsed_args.user_id:"},{"line_number":115,"context_line":"                payload[\u0027user_id\u0027] \u003d parsed_args.user_id"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_0429e935","line":112,"in_reply_to":"5f7c97a3_5c07bf82","updated":"2018-06-29 14:48:41.000000000","message":"Yup, I pointed this out before also - could be cleaned up in a follow up.","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b5c9c216f113a0c5a1e0363f623ae216796702f","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        if self.compare_version(version.ge(\u00271.8\u0027)):"},{"line_number":112,"context_line":"            if parsed_args.project_id:"},{"line_number":113,"context_line":"                payload[\u0027project_id\u0027] \u003d parsed_args.project_id"},{"line_number":114,"context_line":"            if parsed_args.user_id:"},{"line_number":115,"context_line":"                payload[\u0027user_id\u0027] \u003d parsed_args.user_id"},{"line_number":116,"context_line":"        elif parsed_args.project_id or parsed_args.user_id:"},{"line_number":117,"context_line":"            self.log.warning(\u0027--project-id and --user-id options do not \u0027"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_fcfb2b78","line":114,"updated":"2018-06-29 14:33:56.000000000","message":"ditto","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b5fa8a20b0b276b22cac3d63508fd6b1954b97be","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        if self.compare_version(version.ge(\u00271.8\u0027)):"},{"line_number":112,"context_line":"            if parsed_args.project_id:"},{"line_number":113,"context_line":"                payload[\u0027project_id\u0027] \u003d parsed_args.project_id"},{"line_number":114,"context_line":"            if parsed_args.user_id:"},{"line_number":115,"context_line":"                payload[\u0027user_id\u0027] \u003d parsed_args.user_id"},{"line_number":116,"context_line":"        elif parsed_args.project_id or parsed_args.user_id:"},{"line_number":117,"context_line":"            self.log.warning(\u0027--project-id and --user-id options do not \u0027"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_20008c35","line":114,"in_reply_to":"5f7c97a3_fcfb2b78","updated":"2018-06-29 18:18:21.000000000","message":"Done","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b5c9c216f113a0c5a1e0363f623ae216796702f","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"class ShowAllocation(command.Lister):"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    \"\"\"Show resource allocations for a given consumer.\"\"\""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_a18a6c61","line":130,"updated":"2018-06-29 14:33:56.000000000","message":"It feels unnecessary. Or is this some new style we want?","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4c5ff44c3d329f6b11d06165111ef997d13b8c04","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"class ShowAllocation(command.Lister):"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    \"\"\"Show resource allocations for a given consumer.\"\"\""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_e4d86d53","line":130,"in_reply_to":"5f7c97a3_a18a6c61","updated":"2018-06-29 14:48:41.000000000","message":"same - see some reply (to you) about pep8 for docstrings?","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b5fa8a20b0b276b22cac3d63508fd6b1954b97be","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"class ShowAllocation(command.Lister):"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    \"\"\"Show resource allocations for a given consumer.\"\"\""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_e08e14d0","line":130,"in_reply_to":"5f7c97a3_e4d86d53","updated":"2018-06-29 18:18:21.000000000","message":"Done","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b5c9c216f113a0c5a1e0363f623ae216796702f","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"class DeleteAllocation(command.Command):"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    \"\"\"Delete a resource allocation for a given consumer.\"\"\""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_41e5983d","line":157,"updated":"2018-06-29 14:33:56.000000000","message":"ditto","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b5fa8a20b0b276b22cac3d63508fd6b1954b97be","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"class DeleteAllocation(command.Command):"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    \"\"\"Delete a resource allocation for a given consumer.\"\"\""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def get_parser(self, prog_name):"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_008a30bb","line":157,"in_reply_to":"5f7c97a3_41e5983d","updated":"2018-06-29 18:18:21.000000000","message":"Done","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"}],"osc_placement/resources/usage.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"192f5c4eba1541de7268c18ef851b72687e471bc","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class ShowUsage(command.Lister, version.CheckerMixin):"},{"line_number":25,"context_line":"    \"\"\"Show resource usages per class for a given resource provider.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def get_parser(self, prog_name):"},{"line_number":28,"context_line":"        parser \u003d super(ShowUsage, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_82797f30","line":25,"updated":"2018-05-18 10:01:12.000000000","message":"Now this command allows querying the resource usage also per project/user","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"c2c01b019e071a83165918b6599f335f807b15fc","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class ShowUsage(command.Lister, version.CheckerMixin):"},{"line_number":25,"context_line":"    \"\"\"Show resource usages per class for a given resource provider.\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def get_parser(self, prog_name):"},{"line_number":28,"context_line":"        parser \u003d super(ShowUsage, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_17558150","line":25,"in_reply_to":"5f7c97a3_82797f30","updated":"2018-05-22 11:33:33.000000000","message":"Done","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"192f5c4eba1541de7268c18ef851b72687e471bc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        parser \u003d super(ShowUsage, self).get_parser(prog_name)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        parser.add_argument("},{"line_number":31,"context_line":"            \u0027--uuid\u0027,"},{"line_number":32,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":33,"context_line":"            help\u003d\u0027UUID of the resource provider\u0027"},{"line_number":34,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_e28dd32a","line":31,"updated":"2018-05-18 10:01:12.000000000","message":"Changing from positional to flag will break existing scripts and user workflows. But right now I have no better idea how to handled project/user and rp_uuid in the same command meaningfully.","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"c2c01b019e071a83165918b6599f335f807b15fc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        parser \u003d super(ShowUsage, self).get_parser(prog_name)"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        parser.add_argument("},{"line_number":31,"context_line":"            \u0027--uuid\u0027,"},{"line_number":32,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":33,"context_line":"            help\u003d\u0027UUID of the resource provider\u0027"},{"line_number":34,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_57e9b97d","line":31,"in_reply_to":"5f7c97a3_e28dd32a","updated":"2018-05-22 11:33:33.000000000","message":"Yes, same thing as with \"inventory delete\". Added upgrade release notes. There are two points why show usage is used\nfor per project/user.\n1) it has very same output.\n2) it is hard to find appropriate name. Probably \"openstack resource provider usage show\" is not the best and \"openstack usage\" is already occupied.","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"192f5c4eba1541de7268c18ef851b72687e471bc","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        parser.add_argument("},{"line_number":36,"context_line":"            \u0027--project-id\u0027,"},{"line_number":37,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":38,"context_line":"            help\u003d\u0027UUID of the project\u0027"},{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":"        parser.add_argument("},{"line_number":41,"context_line":"            \u0027--user-id\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_42efe7af","line":38,"range":{"start_line":38,"start_character":17,"end_line":38,"end_character":38},"updated":"2018-05-18 10:01:12.000000000","message":"I think we need to mention the 1.9 version requirements here","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"c2c01b019e071a83165918b6599f335f807b15fc","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        parser.add_argument("},{"line_number":36,"context_line":"            \u0027--project-id\u0027,"},{"line_number":37,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":38,"context_line":"            help\u003d\u0027UUID of the project\u0027"},{"line_number":39,"context_line":"        )"},{"line_number":40,"context_line":"        parser.add_argument("},{"line_number":41,"context_line":"            \u0027--user-id\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_77ecf58e","line":38,"range":{"start_line":38,"start_character":17,"end_line":38,"end_character":38},"in_reply_to":"5f7c97a3_42efe7af","updated":"2018-05-22 11:33:33.000000000","message":"Done","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"192f5c4eba1541de7268c18ef851b72687e471bc","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        parser.add_argument("},{"line_number":41,"context_line":"            \u0027--user-id\u0027,"},{"line_number":42,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":43,"context_line":"            help\u003d\u0027UUID of the user\u0027"},{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_e22953f2","line":43,"range":{"start_line":43,"start_character":18,"end_line":43,"end_character":34},"updated":"2018-05-18 10:01:12.000000000","message":"I think we need to mention version requirements and the fact that it can only be used together with the --project-id flag","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"c2c01b019e071a83165918b6599f335f807b15fc","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        parser.add_argument("},{"line_number":41,"context_line":"            \u0027--user-id\u0027,"},{"line_number":42,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":43,"context_line":"            help\u003d\u0027UUID of the user\u0027"},{"line_number":44,"context_line":"        )"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_17034144","line":43,"range":{"start_line":43,"start_character":18,"end_line":43,"end_character":34},"in_reply_to":"5f7c97a3_e22953f2","updated":"2018-05-22 11:33:33.000000000","message":"Done","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"192f5c4eba1541de7268c18ef851b72687e471bc","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def take_action(self, parsed_args):"},{"line_number":49,"context_line":"        http \u003d self.app.client_manager.placement"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        if parsed_args.uuid:"},{"line_number":52,"context_line":"            url \u003d BASE_URL.format(uuid\u003dparsed_args.uuid)"},{"line_number":53,"context_line":"            per_class \u003d http.request(\u0027GET\u0027, url).json()[\u0027usages\u0027]"},{"line_number":54,"context_line":"        elif parsed_args.project_id:"},{"line_number":55,"context_line":"            self.check_version(version.ge(\u00271.9\u0027))"},{"line_number":56,"context_line":"            url \u003d USAGES_URL"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_62cf8357","line":53,"range":{"start_line":51,"start_character":1,"end_line":53,"end_character":65},"updated":"2018-05-18 10:01:12.000000000","message":"This means that if both --uuid and --project-id is provided then the project-id is simply ignored. I think we at least needs to document this in the help text of the command.","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"c2c01b019e071a83165918b6599f335f807b15fc","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def take_action(self, parsed_args):"},{"line_number":49,"context_line":"        http \u003d self.app.client_manager.placement"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        if parsed_args.uuid:"},{"line_number":52,"context_line":"            url \u003d BASE_URL.format(uuid\u003dparsed_args.uuid)"},{"line_number":53,"context_line":"            per_class \u003d http.request(\u0027GET\u0027, url).json()[\u0027usages\u0027]"},{"line_number":54,"context_line":"        elif parsed_args.project_id:"},{"line_number":55,"context_line":"            self.check_version(version.ge(\u00271.9\u0027))"},{"line_number":56,"context_line":"            url \u003d USAGES_URL"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_37fe7d38","line":53,"range":{"start_line":51,"start_character":1,"end_line":53,"end_character":65},"in_reply_to":"5f7c97a3_62cf8357","updated":"2018-05-22 11:33:33.000000000","message":"Done","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"192f5c4eba1541de7268c18ef851b72687e471bc","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                \u0027GET\u0027, url, params\u003dparams).json()[\u0027usages\u0027]"},{"line_number":62,"context_line":"        else:"},{"line_number":63,"context_line":"            raise ValueError("},{"line_number":64,"context_line":"                \u0027Either resource provider UUID argument or \u0027"},{"line_number":65,"context_line":"                \u0027project_id argument must be provided\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        usages \u003d [{\u0027resource_class\u0027: k, \u0027usage\u0027: v}"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_020a4f89","line":64,"range":{"start_line":64,"start_character":24,"end_line":64,"end_character":55},"updated":"2018-05-18 10:01:12.000000000","message":"do you mean --uuid argument?","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"c2c01b019e071a83165918b6599f335f807b15fc","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                \u0027GET\u0027, url, params\u003dparams).json()[\u0027usages\u0027]"},{"line_number":62,"context_line":"        else:"},{"line_number":63,"context_line":"            raise ValueError("},{"line_number":64,"context_line":"                \u0027Either resource provider UUID argument or \u0027"},{"line_number":65,"context_line":"                \u0027project_id argument must be provided\u0027)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        usages \u003d [{\u0027resource_class\u0027: k, \u0027usage\u0027: v}"}],"source_content_type":"text/x-python","patch_set":25,"id":"5f7c97a3_979431ea","line":64,"range":{"start_line":64,"start_character":24,"end_line":64,"end_character":55},"in_reply_to":"5f7c97a3_020a4f89","updated":"2018-05-22 11:33:33.000000000","message":"Yes, exactly )","commit_id":"2c5ec5785ad710b8b1dac5a879a41d01c004c996"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"ec2a627af08ab1719a061f87f68a5f7090f83411","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"BASE_URL \u003d \u0027/resource_providers/{uuid}/usages\u0027"},{"line_number":20,"context_line":"USAGES_URL \u003d \u0027/usages\u0027"},{"line_number":21,"context_line":"FIELDS \u003d (\u0027resource_class\u0027, \u0027usage\u0027)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_6a45846e","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":21},"updated":"2018-06-25 07:47:04.000000000","message":"The existence of the two base urls makes me feel that creating a new command for the new API is better... something like \"openstack resource usage\"?","commit_id":"e30588f35d72257c5d58abf2881665b9743bd7b4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"03ee89b1094bac1b1b9827f19020ee5d2464a216","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"BASE_URL \u003d \u0027/resource_providers/{uuid}/usages\u0027"},{"line_number":20,"context_line":"USAGES_URL \u003d \u0027/usages\u0027"},{"line_number":21,"context_line":"FIELDS \u003d (\u0027resource_class\u0027, \u0027usage\u0027)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_d72d1790","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":21},"in_reply_to":"5f7c97a3_6a45846e","updated":"2018-06-27 21:14:51.000000000","message":"I said the same thing here but talked myself out of it:\n\nhttps://review.openstack.org/#/c/514646/28/osc_placement/resources/usage.py@30","commit_id":"e30588f35d72257c5d58abf2881665b9743bd7b4"},{"author":{"_account_id":25625,"name":"Tetsuro Nakamura","email":"tetsuro.nakamura.bc@hco.ntt.co.jp","username":"tetsuro0907"},"change_message_id":"ec2a627af08ab1719a061f87f68a5f7090f83411","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\"Show resource usages per class."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Depending on params and ``--os-placement-api-version`` it shows"},{"line_number":29,"context_line":"    usages ether for a given resource provider or for a project and"},{"line_number":30,"context_line":"    user id or for a project only."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_d6f7ab59","line":29,"range":{"start_line":29,"start_character":11,"end_line":29,"end_character":16},"updated":"2018-06-25 07:47:04.000000000","message":"either","commit_id":"e30588f35d72257c5d58abf2881665b9743bd7b4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a7739a9b86f90c8707fad10449763da3afe646d3","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\"Show resource usages per class."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Depending on params and ``--os-placement-api-version`` it shows"},{"line_number":29,"context_line":"    usages ether for a given resource provider or for a project and"},{"line_number":30,"context_line":"    user id or for a project only."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_376b2bba","line":29,"range":{"start_line":29,"start_character":11,"end_line":29,"end_character":16},"in_reply_to":"5f7c97a3_d6f7ab59","updated":"2018-06-27 21:16:48.000000000","message":"Done","commit_id":"e30588f35d72257c5d58abf2881665b9743bd7b4"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"532d1dc2faef1cd6b6ae14d598ac1634ac0ed454","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":40,"context_line":"            required\u003dself.compare_version(version.lt(\u00271.9\u0027)),"},{"line_number":41,"context_line":"            help\u003d\u0027UUID of the resource provider. This param is required \u0027"},{"line_number":42,"context_line":"                 \u0027for ``--os-placement-api-version`` less than 1.9.\u0027"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        parser.add_argument("},{"line_number":45,"context_line":"            \u0027--project-id\u0027,"}],"source_content_type":"text/x-python","patch_set":27,"id":"5f7c97a3_e271efa9","line":42,"updated":"2018-06-29 15:28:36.000000000","message":"recommend deprecating the --uuid argument and replacing with a --provider-uuid argument which should be more explicit and self-descriptive for the user.\n\nFor a future patch, though, not this one.","commit_id":"e30588f35d72257c5d58abf2881665b9743bd7b4"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    \"\"\"Show resource usages per class."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Depending on params and ``--os-placement-api-version`` it shows"},{"line_number":29,"context_line":"    usages either for a given resource provider or for a project and"},{"line_number":30,"context_line":"    user id or for a project only."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_948f9d21","line":30,"range":{"start_line":28,"start_character":4,"end_line":30,"end_character":34},"updated":"2018-06-27 20:58:48.000000000","message":"Rather than munge these together, why don\u0027t we just add an \"openstack resource usage show\" CLI that is separate from the provider namespace? Maybe that\u0027s confusing though since we have allocations scoped to the provider namespace, e.g. \"resource provider allocation set\", and \u0027openstack resource usage show\u0027 might indicate showing usage across non-placement type resources, like container resources in zun or volume resources in cinder.","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            \u0027--uuid\u0027,"},{"line_number":39,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":40,"context_line":"            required\u003dself.compare_version(version.lt(\u00271.9\u0027)),"},{"line_number":41,"context_line":"            help\u003d\u0027UUID of the resource provider. This param is required \u0027"},{"line_number":42,"context_line":"                 \u0027for ``--os-placement-api-version`` less than 1.9.\u0027"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_d46f555e","line":41,"range":{"start_line":41,"start_character":54,"end_line":41,"end_character":59},"updated":"2018-06-27 20:58:48.000000000","message":"option","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            \u0027--uuid\u0027,"},{"line_number":39,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":40,"context_line":"            required\u003dself.compare_version(version.lt(\u00271.9\u0027)),"},{"line_number":41,"context_line":"            help\u003d\u0027UUID of the resource provider. This param is required \u0027"},{"line_number":42,"context_line":"                 \u0027for ``--os-placement-api-version`` less than 1.9.\u0027"},{"line_number":43,"context_line":"        )"},{"line_number":44,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_141dcd76","line":41,"range":{"start_line":41,"start_character":54,"end_line":41,"end_character":59},"in_reply_to":"5f7c97a3_d46f555e","updated":"2018-06-27 21:13:02.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        parser.add_argument("},{"line_number":45,"context_line":"            \u0027--project-id\u0027,"},{"line_number":46,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":47,"context_line":"            help\u003d\u0027UUID of the project. This param is available \u0027"},{"line_number":48,"context_line":"                 \u0027starting from ``--os-placement-api-version\u003d1.9``\u0027"},{"line_number":49,"context_line":"        )"},{"line_number":50,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_5484a50b","line":47,"range":{"start_line":47,"start_character":18,"end_line":47,"end_character":37},"updated":"2018-06-27 20:58:48.000000000","message":"Same comments about UUID for project and user as in the \u0027allocation set\u0027 change.","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        parser.add_argument("},{"line_number":45,"context_line":"            \u0027--project-id\u0027,"},{"line_number":46,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":47,"context_line":"            help\u003d\u0027UUID of the project. This param is available \u0027"},{"line_number":48,"context_line":"                 \u0027starting from ``--os-placement-api-version\u003d1.9``\u0027"},{"line_number":49,"context_line":"        )"},{"line_number":50,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_f478512d","line":47,"range":{"start_line":47,"start_character":44,"end_line":47,"end_character":49},"updated":"2018-06-27 20:58:48.000000000","message":"option","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        parser.add_argument("},{"line_number":45,"context_line":"            \u0027--project-id\u0027,"},{"line_number":46,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":47,"context_line":"            help\u003d\u0027UUID of the project. This param is available \u0027"},{"line_number":48,"context_line":"                 \u0027starting from ``--os-placement-api-version\u003d1.9``\u0027"},{"line_number":49,"context_line":"        )"},{"line_number":50,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_7415214c","line":47,"range":{"start_line":47,"start_character":18,"end_line":47,"end_character":37},"in_reply_to":"5f7c97a3_5484a50b","updated":"2018-06-27 21:13:02.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        parser.add_argument("},{"line_number":45,"context_line":"            \u0027--project-id\u0027,"},{"line_number":46,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":47,"context_line":"            help\u003d\u0027UUID of the project. This param is available \u0027"},{"line_number":48,"context_line":"                 \u0027starting from ``--os-placement-api-version\u003d1.9``\u0027"},{"line_number":49,"context_line":"        )"},{"line_number":50,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_b429799d","line":47,"range":{"start_line":47,"start_character":44,"end_line":47,"end_character":49},"in_reply_to":"5f7c97a3_f478512d","updated":"2018-06-27 21:13:02.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        parser.add_argument("},{"line_number":51,"context_line":"            \u0027--user-id\u0027,"},{"line_number":52,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":53,"context_line":"            help\u003d\u0027UUID of the user. This param is available \u0027"},{"line_number":54,"context_line":"                 \u0027starting from ``--os-placement-api-version\u003d1.9`` \u0027"},{"line_number":55,"context_line":"                 \u0027and makes sense only combined with ``--project-id``.\u0027"},{"line_number":56,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_14762d41","line":53,"range":{"start_line":53,"start_character":41,"end_line":53,"end_character":46},"updated":"2018-06-27 20:58:48.000000000","message":"option","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        parser.add_argument("},{"line_number":51,"context_line":"            \u0027--user-id\u0027,"},{"line_number":52,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":53,"context_line":"            help\u003d\u0027UUID of the user. This param is available \u0027"},{"line_number":54,"context_line":"                 \u0027starting from ``--os-placement-api-version\u003d1.9`` \u0027"},{"line_number":55,"context_line":"                 \u0027and makes sense only combined with ``--project-id``.\u0027"},{"line_number":56,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_941a3d7a","line":53,"range":{"start_line":53,"start_character":41,"end_line":53,"end_character":46},"in_reply_to":"5f7c97a3_14762d41","updated":"2018-06-27 21:13:02.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def take_action(self, parsed_args):"},{"line_number":61,"context_line":"        http \u003d self.app.client_manager.placement"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        if parsed_args.uuid:"},{"line_number":64,"context_line":"            url \u003d BASE_URL.format(uuid\u003dparsed_args.uuid)"},{"line_number":65,"context_line":"            per_class \u003d http.request(\u0027GET\u0027, url).json()[\u0027usages\u0027]"},{"line_number":66,"context_line":"        elif parsed_args.project_id:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_34fb297c","line":63,"updated":"2018-06-27 20:58:48.000000000","message":"We might want to add a comment in the --project-id help that --uuid takes precedence over --project-id if both are specified.","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def take_action(self, parsed_args):"},{"line_number":61,"context_line":"        http \u003d self.app.client_manager.placement"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        if parsed_args.uuid:"},{"line_number":64,"context_line":"            url \u003d BASE_URL.format(uuid\u003dparsed_args.uuid)"},{"line_number":65,"context_line":"            per_class \u003d http.request(\u0027GET\u0027, url).json()[\u0027usages\u0027]"},{"line_number":66,"context_line":"        elif parsed_args.project_id:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_340fa93a","line":63,"in_reply_to":"5f7c97a3_34fb297c","updated":"2018-06-27 21:13:02.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"ea9f91b3c24cd240ca76b56fc5ba26ef2ca3a9e7","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def take_action(self, parsed_args):"},{"line_number":61,"context_line":"        http \u003d self.app.client_manager.placement"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        if parsed_args.uuid:"},{"line_number":64,"context_line":"            url \u003d BASE_URL.format(uuid\u003dparsed_args.uuid)"},{"line_number":65,"context_line":"            per_class \u003d http.request(\u0027GET\u0027, url).json()[\u0027usages\u0027]"},{"line_number":66,"context_line":"        elif parsed_args.project_id:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_b7b3bb4e","line":63,"in_reply_to":"5f7c97a3_34fb297c","updated":"2018-06-27 21:19:24.000000000","message":"Seems we should have a test for that precedence as well.","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"64c188707c26f02121af839cea77d88054bccf7c","unresolved":false,"context_lines":[{"line_number":60,"context_line":"    def take_action(self, parsed_args):"},{"line_number":61,"context_line":"        http \u003d self.app.client_manager.placement"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        if parsed_args.uuid:"},{"line_number":64,"context_line":"            url \u003d BASE_URL.format(uuid\u003dparsed_args.uuid)"},{"line_number":65,"context_line":"            per_class \u003d http.request(\u0027GET\u0027, url).json()[\u0027usages\u0027]"},{"line_number":66,"context_line":"        elif parsed_args.project_id:"}],"source_content_type":"text/x-python","patch_set":28,"id":"5f7c97a3_f745b317","line":63,"in_reply_to":"5f7c97a3_b7b3bb4e","updated":"2018-06-27 21:25:05.000000000","message":"Done","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3d276511eaae75777eef42cc89d465ecf65de724","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    \"\"\"Show resource usages per class."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Depending on params and ``--os-placement-api-version`` it shows"},{"line_number":29,"context_line":"    usages either for a given resource provider or for a project and"},{"line_number":30,"context_line":"    user id or for a project only."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_48fba27a","line":28,"updated":"2018-06-28 00:16:04.000000000","message":"Here\u0027s an idea to split this up, what if we add a new \"openstack resource consumer usage show\" command which is new for 1.9 and --project-id is required, --user-id is optional. Then we don\u0027t need to change this existing \"resource provider usage show\" command, and it\u0027s scoped to a resource provider (based on the required uuid arg). Since GET /usages is really about consumer usage I think adding it to it\u0027s own \"resource consumer usage show\" CLI would make sense and nicely decouple these commands.","commit_id":"7c37ecf53f76dc6518504af4cc6cb3d02a291bfe"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f8f5651301cef366e37d48772c10750173f269f7","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    \"\"\"Show resource usages per class."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Depending on params and ``--os-placement-api-version`` it shows"},{"line_number":29,"context_line":"    usages either for a given resource provider or for a project and"},{"line_number":30,"context_line":"    user id or for a project only."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_fd6589b0","line":28,"in_reply_to":"5f7c97a3_48fba27a","updated":"2018-06-28 08:34:41.000000000","message":"That split makes sense to me too.","commit_id":"7c37ecf53f76dc6518504af4cc6cb3d02a291bfe"},{"author":{"_account_id":21813,"name":"Andrey Volkov","email":"m@amadev.ru","username":"avolkov"},"change_message_id":"73e72b4922b7f1a20d3ea13db07ede2c4677a698","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    \"\"\"Show resource usages per class."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Depending on params and ``--os-placement-api-version`` it shows"},{"line_number":29,"context_line":"    usages either for a given resource provider or for a project and"},{"line_number":30,"context_line":"    user id or for a project only."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":31,"id":"5f7c97a3_afb6f2f8","line":28,"in_reply_to":"5f7c97a3_fd6589b0","updated":"2018-06-28 11:01:06.000000000","message":"Ok, will split this up.","commit_id":"7c37ecf53f76dc6518504af4cc6cb3d02a291bfe"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f61d4174ca2811c8045e4254fd44afb3fd95b21","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        parser.add_argument("},{"line_number":44,"context_line":"            \u0027--user-id\u0027,"},{"line_number":45,"context_line":"            metavar\u003d\u0027\u003cuser-uuid\u003e\u0027,"},{"line_number":46,"context_line":"            help\u003d\u0027ID of the consuming user. This option \u0027"},{"line_number":47,"context_line":"                 \u0027makes sense only combined with ``project-id``.\u0027"},{"line_number":48,"context_line":"        )"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_7b3c1c92","line":47,"range":{"start_line":46,"start_character":43,"end_line":47,"end_character":63},"updated":"2018-06-28 13:44:20.000000000","message":"You can remove this part since it\u0027s an option but project_id is a required positional argument.","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f31c6a3853a7a312d02646035cd0d4ba8f44fd42","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        parser.add_argument("},{"line_number":44,"context_line":"            \u0027--user-id\u0027,"},{"line_number":45,"context_line":"            metavar\u003d\u0027\u003cuser-uuid\u003e\u0027,"},{"line_number":46,"context_line":"            help\u003d\u0027ID of the consuming user. This option \u0027"},{"line_number":47,"context_line":"                 \u0027makes sense only combined with ``project-id``.\u0027"},{"line_number":48,"context_line":"        )"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_fc5b41f6","line":47,"range":{"start_line":46,"start_character":43,"end_line":47,"end_character":63},"in_reply_to":"5f7c97a3_7b3c1c92","updated":"2018-06-28 18:32:42.000000000","message":"Done","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f61d4174ca2811c8045e4254fd44afb3fd95b21","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return FIELDS, rows"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ShowUsage(command.Lister, version.CheckerMixin):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    \"\"\"Show resource provider usages per class.\"\"\""},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_3bf464d0","line":69,"range":{"start_line":69,"start_character":32,"end_line":69,"end_character":52},"updated":"2018-06-28 13:44:20.000000000","message":"This can be removed now.","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f31c6a3853a7a312d02646035cd0d4ba8f44fd42","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        return FIELDS, rows"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ShowUsage(command.Lister, version.CheckerMixin):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    \"\"\"Show resource provider usages per class.\"\"\""},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_7c6f3193","line":69,"range":{"start_line":69,"start_character":32,"end_line":69,"end_character":52},"in_reply_to":"5f7c97a3_3bf464d0","updated":"2018-06-28 18:32:42.000000000","message":"Done","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f61d4174ca2811c8045e4254fd44afb3fd95b21","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ShowUsage(command.Lister, version.CheckerMixin):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    \"\"\"Show resource provider usages per class.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def get_parser(self, prog_name):"},{"line_number":74,"context_line":"        parser \u003d super(ShowUsage, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_1bfba8be","line":71,"updated":"2018-06-28 13:44:20.000000000","message":"This doesn\u0027t need to change now.","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f31c6a3853a7a312d02646035cd0d4ba8f44fd42","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"class ShowUsage(command.Lister, version.CheckerMixin):"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    \"\"\"Show resource provider usages per class.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def get_parser(self, prog_name):"},{"line_number":74,"context_line":"        parser \u003d super(ShowUsage, self).get_parser(prog_name)"}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_9c6c8d9e","line":71,"in_reply_to":"5f7c97a3_1bfba8be","updated":"2018-06-28 18:32:42.000000000","message":"Done","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f61d4174ca2811c8045e4254fd44afb3fd95b21","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        parser.add_argument("},{"line_number":77,"context_line":"            \u0027uuid\u0027,"},{"line_number":78,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":79,"context_line":"            help\u003d\u0027UUID of the resource provider.\u0027"},{"line_number":80,"context_line":"        )"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_db2e9041","line":79,"updated":"2018-06-28 13:44:20.000000000","message":"nor this","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f31c6a3853a7a312d02646035cd0d4ba8f44fd42","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        parser.add_argument("},{"line_number":77,"context_line":"            \u0027uuid\u0027,"},{"line_number":78,"context_line":"            metavar\u003d\u0027\u003cuuid\u003e\u0027,"},{"line_number":79,"context_line":"            help\u003d\u0027UUID of the resource provider.\u0027"},{"line_number":80,"context_line":"        )"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_3c69b98b","line":79,"in_reply_to":"5f7c97a3_db2e9041","updated":"2018-06-28 18:32:42.000000000","message":"Done","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b5c9c216f113a0c5a1e0363f623ae216796702f","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class ConsumerShowUsage(command.Lister, version.CheckerMixin):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    \"\"\"Show resource usages for consumer per class."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Show usages either for a given project and user id or for a"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_a95b2e53","line":25,"updated":"2018-06-29 14:33:56.000000000","message":"I don\u0027t think we need an empty line here.","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"532d1dc2faef1cd6b6ae14d598ac1634ac0ed454","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class ConsumerShowUsage(command.Lister, version.CheckerMixin):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    \"\"\"Show resource usages for consumer per class."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Show usages either for a given project and user id or for a"},{"line_number":29,"context_line":"    project only."}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_1f029473","line":26,"range":{"start_line":26,"start_character":32,"end_line":26,"end_character":40},"updated":"2018-06-29 15:28:36.000000000","message":"this is not accurate. The usage is being shown for a project or a user. These are not consumers. Consumers are things like  VM instances. Those consumers have a project and user associated with them, but it\u0027s not accurate to say you are showing usage for a consumer.\n\nOne can show allocations for a consumer, but the GET /usages endpoint is showing aggregated usage (SUM(allocation stuff)) for a project or a user, which isn\u0027t the same thing as a consumer.","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7a96738a75cd88fb1ce3f83a7a4e5c9044c8c8f6","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class ConsumerShowUsage(command.Lister, version.CheckerMixin):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    \"\"\"Show resource usages for consumer per class."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Show usages either for a given project and user id or for a"},{"line_number":29,"context_line":"    project only."}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_3f63d043","line":26,"range":{"start_line":26,"start_character":32,"end_line":26,"end_character":40},"in_reply_to":"5f7c97a3_1f029473","updated":"2018-06-29 15:36:04.000000000","message":"OK, but I assumed it was just combining the meanings, but could fix this up to just match what\u0027s in the API reference for GET /usages:\n\nhttps://developer.openstack.org/api-ref/placement/#list-usages\n\nI don\u0027t see a point in holding this up for that though - it could be done in a follow up.","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b5fa8a20b0b276b22cac3d63508fd6b1954b97be","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class ConsumerShowUsage(command.Lister, version.CheckerMixin):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    \"\"\"Show resource usages for consumer per class."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    Show usages either for a given project and user id or for a"},{"line_number":29,"context_line":"    project only."}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_a0ec9c92","line":26,"range":{"start_line":26,"start_character":32,"end_line":26,"end_character":40},"in_reply_to":"5f7c97a3_3f63d043","updated":"2018-06-29 18:18:21.000000000","message":"Done","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"}],"osc_placement/tests/functional/base.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4e8b4af0c7ae430f239a37bbabb447d371a55e2d","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            cmd +\u003d \u0027 --project-id %s\u0027 % project_id"},{"line_number":126,"context_line":"        if user_id:"},{"line_number":127,"context_line":"            cmd +\u003d \u0027 --user-id %s\u0027 % user_id"},{"line_number":128,"context_line":"        result \u003d self.openstack(cmd, use_json\u003dTrue)"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        def cleanup(uuid):"},{"line_number":131,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_ed6f205e","line":128,"range":{"start_line":128,"start_character":37,"end_line":128,"end_character":50},"updated":"2018-06-27 23:14:46.000000000","message":"My guess is the failure is due to this when specifying --project-id and --user-id below version 1.8 because we get a warning in the output that can\u0027t be decoded as json.","commit_id":"af3551670495dc4fd9b5873b90fb71b59487e2d1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f31c6a3853a7a312d02646035cd0d4ba8f44fd42","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        def cleanup(uuid):"},{"line_number":132,"context_line":"            try:"},{"line_number":133,"context_line":"                self.resource_allocation_delete(uuid)"},{"line_number":134,"context_line":"            except subprocess.CalledProcessError as exc:"},{"line_number":135,"context_line":"                # may have already been deleted by a test case"},{"line_number":136,"context_line":"                if \u0027not found\u0027 in exc.output.decode(\u0027utf-8\u0027).lower():"}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_fc29013a","line":133,"updated":"2018-06-28 18:32:42.000000000","message":"This doesn\u0027t need to change as part of this patch.","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f61d4174ca2811c8045e4254fd44afb3fd95b21","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            format(uuid\u003duuid, rc\u003dresource_class, opts\u003d\u0027 \u0027.join(opts))"},{"line_number":172,"context_line":"        return self.openstack(cmd, use_json\u003dTrue)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def resource_provider_show_usage(self, uuid):"},{"line_number":175,"context_line":"        cmd \u003d \u0027resource provider usage show %s\u0027 % uuid"},{"line_number":176,"context_line":"        return self.openstack(cmd, use_json\u003dTrue)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def resource_consumer_show_usage(self, project_id, user_id\u003dNone):"},{"line_number":179,"context_line":"        cmd \u003d \u0027resource consumer usage show %s\u0027 % project_id"}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_7bd89c51","line":176,"range":{"start_line":174,"start_character":4,"end_line":176,"end_character":49},"updated":"2018-06-28 13:44:20.000000000","message":"Why does this need to change?","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f31c6a3853a7a312d02646035cd0d4ba8f44fd42","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            format(uuid\u003duuid, rc\u003dresource_class, opts\u003d\u0027 \u0027.join(opts))"},{"line_number":172,"context_line":"        return self.openstack(cmd, use_json\u003dTrue)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def resource_provider_show_usage(self, uuid):"},{"line_number":175,"context_line":"        cmd \u003d \u0027resource provider usage show %s\u0027 % uuid"},{"line_number":176,"context_line":"        return self.openstack(cmd, use_json\u003dTrue)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def resource_consumer_show_usage(self, project_id, user_id\u003dNone):"},{"line_number":179,"context_line":"        cmd \u003d \u0027resource consumer usage show %s\u0027 % project_id"}],"source_content_type":"text/x-python","patch_set":32,"id":"5f7c97a3_7cf411d1","line":176,"range":{"start_line":174,"start_character":4,"end_line":176,"end_character":49},"in_reply_to":"5f7c97a3_7bd89c51","updated":"2018-06-28 18:32:42.000000000","message":"Done","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"532d1dc2faef1cd6b6ae14d598ac1634ac0ed454","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        return self.openstack(\u0027resource provider usage show \u0027 + uuid,"},{"line_number":176,"context_line":"                              use_json\u003dTrue)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def resource_consumer_show_usage(self, project_id, user_id\u003dNone):"},{"line_number":179,"context_line":"        cmd \u003d \u0027resource consumer usage show %s\u0027 % project_id"},{"line_number":180,"context_line":"        if user_id:"},{"line_number":181,"context_line":"            cmd +\u003d \u0027 --user-id %s\u0027 % user_id"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_bff2809a","line":178,"range":{"start_line":178,"start_character":17,"end_line":178,"end_character":26},"updated":"2018-06-29 15:28:36.000000000","message":"should just be \"resource_show_usage\"","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b5fa8a20b0b276b22cac3d63508fd6b1954b97be","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        return self.openstack(\u0027resource provider usage show \u0027 + uuid,"},{"line_number":176,"context_line":"                              use_json\u003dTrue)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def resource_consumer_show_usage(self, project_id, user_id\u003dNone):"},{"line_number":179,"context_line":"        cmd \u003d \u0027resource consumer usage show %s\u0027 % project_id"},{"line_number":180,"context_line":"        if user_id:"},{"line_number":181,"context_line":"            cmd +\u003d \u0027 --user-id %s\u0027 % user_id"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_80b72086","line":178,"range":{"start_line":178,"start_character":17,"end_line":178,"end_character":26},"in_reply_to":"5f7c97a3_bff2809a","updated":"2018-06-29 18:18:21.000000000","message":"Done","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"532d1dc2faef1cd6b6ae14d598ac1634ac0ed454","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                              use_json\u003dTrue)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def resource_consumer_show_usage(self, project_id, user_id\u003dNone):"},{"line_number":179,"context_line":"        cmd \u003d \u0027resource consumer usage show %s\u0027 % project_id"},{"line_number":180,"context_line":"        if user_id:"},{"line_number":181,"context_line":"            cmd +\u003d \u0027 --user-id %s\u0027 % user_id"},{"line_number":182,"context_line":"        return self.openstack(cmd, use_json\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_3f075084","line":179,"range":{"start_line":179,"start_character":24,"end_line":179,"end_character":32},"updated":"2018-06-29 15:28:36.000000000","message":"remove \"consumer\". should just be \"resource usage show\"","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b5fa8a20b0b276b22cac3d63508fd6b1954b97be","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                              use_json\u003dTrue)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def resource_consumer_show_usage(self, project_id, user_id\u003dNone):"},{"line_number":179,"context_line":"        cmd \u003d \u0027resource consumer usage show %s\u0027 % project_id"},{"line_number":180,"context_line":"        if user_id:"},{"line_number":181,"context_line":"            cmd +\u003d \u0027 --user-id %s\u0027 % user_id"},{"line_number":182,"context_line":"        return self.openstack(cmd, use_json\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_20ae4c2f","line":179,"range":{"start_line":179,"start_character":24,"end_line":179,"end_character":32},"in_reply_to":"5f7c97a3_3f075084","updated":"2018-06-29 18:18:21.000000000","message":"Done","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"}],"osc_placement/tests/functional/test_allocation.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7fc66fb577df62a7209173ffebe449ac50e16863","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        # Test that specifying --project-id and --user-id before microversion"},{"line_number":56,"context_line":"        # 1.8 does not result in an error (they will be ignored)."},{"line_number":57,"context_line":"        self.resource_allocation_set("},{"line_number":58,"context_line":"            consumer_uuid,"},{"line_number":59,"context_line":"            [\u0027rp\u003d{},VCPU\u003d2\u0027.format(self.rp1[\u0027uuid\u0027]),"},{"line_number":60,"context_line":"             \u0027rp\u003d{},MEMORY_MB\u003d512\u0027.format(self.rp1[\u0027uuid\u0027])],"}],"source_content_type":"text/x-python","patch_set":29,"id":"5f7c97a3_0d1dbc0f","line":57,"updated":"2018-06-27 23:12:52.000000000","message":"Apparently this fails:\n\nhttp://logs.openstack.org/46/514646/29/check/osc-placement-dsvm-functional/1c61e78/job-output.txt.gz#_2018-06-27_22_16_13_081664\n\n2018-06-27 22:16:13.081664 | primary | 2018-06-27 22:16:13.081 | FAIL: osc_placement.tests.functional.test_allocation.TestAllocation.test_allocation_create\n2018-06-27 22:16:13.083810 | primary | 2018-06-27 22:16:13.083 | tags: worker-4\n2018-06-27 22:16:13.085747 | primary | 2018-06-27 22:16:13.085 | ----------------------------------------------------------------------\n2018-06-27 22:16:13.087870 | primary | 2018-06-27 22:16:13.087 | Traceback (most recent call last):\n2018-06-27 22:16:13.090482 | primary | 2018-06-27 22:16:13.089 |   File \"osc_placement/tests/functional/test_allocation.py\", line 61, in test_allocation_create\n2018-06-27 22:16:13.092259 | primary | 2018-06-27 22:16:13.091 |     project_id\u003d\u0027fake-project\u0027, user_id\u003d\u0027fake-user\u0027)\n2018-06-27 22:16:13.094145 | primary | 2018-06-27 22:16:13.093 |   File \"osc_placement/tests/functional/base.py\", line 128, in resource_allocation_set\n2018-06-27 22:16:13.095934 | primary | 2018-06-27 22:16:13.095 |     result \u003d self.openstack(cmd, use_json\u003dTrue)\n2018-06-27 22:16:13.097812 | primary | 2018-06-27 22:16:13.097 |   File \"osc_placement/tests/functional/base.py\", line 46, in openstack\n2018-06-27 22:16:13.099682 | primary | 2018-06-27 22:16:13.099 |     return json.loads(result)\n2018-06-27 22:16:13.101707 | primary | 2018-06-27 22:16:13.101 |   File \"/usr/lib/python2.7/json/__init__.py\", line 339, in loads\n2018-06-27 22:16:13.104639 | primary | 2018-06-27 22:16:13.104 |     return _default_decoder.decode(s)\n2018-06-27 22:16:13.107130 | primary | 2018-06-27 22:16:13.106 |   File \"/usr/lib/python2.7/json/decoder.py\", line 364, in decode\n2018-06-27 22:16:13.109197 | primary | 2018-06-27 22:16:13.108 |     obj, end \u003d self.raw_decode(s, idx\u003d_w(s, 0).end())\n2018-06-27 22:16:13.112194 | primary | 2018-06-27 22:16:13.111 |   File \"/usr/lib/python2.7/json/decoder.py\", line 382, in raw_decode\n2018-06-27 22:16:13.114714 | primary | 2018-06-27 22:16:13.114 |     raise ValueError(\"No JSON object could be decoded\")\n2018-06-27 22:16:13.116692 | primary | 2018-06-27 22:16:13.116 | ValueError: No JSON object could be decoded","commit_id":"af3551670495dc4fd9b5873b90fb71b59487e2d1"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b70c61e4341e1f24a1d1a419fb39542026456821","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # Test that specifying --project-id and --user-id before microversion"},{"line_number":56,"context_line":"        # 1.8 does not result in an error (they will be ignored). We have"},{"line_number":57,"context_line":"        # to specify use_json\u003dFalse because there will be a warning in the"},{"line_number":58,"context_line":"        # output which can\u0027t be jso- decoded."},{"line_number":59,"context_line":"        output \u003d self.resource_allocation_set("},{"line_number":60,"context_line":"            consumer_uuid,"},{"line_number":61,"context_line":"            [\u0027rp\u003d{},VCPU\u003d2\u0027.format(self.rp1[\u0027uuid\u0027]),"}],"source_content_type":"text/x-python","patch_set":30,"id":"5f7c97a3_cdeee4b4","line":58,"range":{"start_line":58,"start_character":32,"end_line":58,"end_character":37},"updated":"2018-06-27 23:19:34.000000000","message":"damn","commit_id":"45137c2466b7c32b4bd42c668037263660709560"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7b5c9c216f113a0c5a1e0363f623ae216796702f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        self.assertIn("},{"line_number":65,"context_line":"            \u0027--project-id and --user-id options do not affect allocation for \u0027"},{"line_number":66,"context_line":"            \u0027--os-placement-api-version less than 1.8\u0027, output)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_allocation_create_empty(self):"},{"line_number":69,"context_line":"        consumer_uuid \u003d str(uuid.uuid4())"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_49637a42","line":67,"updated":"2018-06-29 14:33:56.000000000","message":"We are missing test covering allocation create with \u003e1.8 specifying project_id and user_id","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5f9c73d42d6f01b51ee69e1d4cb33a28964eb9a1","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        self.assertIn("},{"line_number":65,"context_line":"            \u0027--project-id and --user-id options do not affect allocation for \u0027"},{"line_number":66,"context_line":"            \u0027--os-placement-api-version less than 1.8\u0027, output)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_allocation_create_empty(self):"},{"line_number":69,"context_line":"        consumer_uuid \u003d str(uuid.uuid4())"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_e4ee2d20","line":67,"in_reply_to":"5f7c97a3_242425b2","updated":"2018-06-29 14:43:17.000000000","message":"OK, I can live with this.","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f3fc4c245e52d52d3df4602ab5a3210a5945d198","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        self.assertIn("},{"line_number":65,"context_line":"            \u0027--project-id and --user-id options do not affect allocation for \u0027"},{"line_number":66,"context_line":"            \u0027--os-placement-api-version less than 1.8\u0027, output)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_allocation_create_empty(self):"},{"line_number":69,"context_line":"        consumer_uuid \u003d str(uuid.uuid4())"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_242425b2","line":67,"in_reply_to":"5f7c97a3_49637a42","updated":"2018-06-29 14:39:06.000000000","message":"I\u0027ve pointed this out before, but this is implicitly tested by the 1.9 usages tests that create allocations with a project and user.","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b5fa8a20b0b276b22cac3d63508fd6b1954b97be","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        self.assertIn("},{"line_number":65,"context_line":"            \u0027--project-id and --user-id options do not affect allocation for \u0027"},{"line_number":66,"context_line":"            \u0027--os-placement-api-version less than 1.8\u0027, output)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def test_allocation_create_empty(self):"},{"line_number":69,"context_line":"        consumer_uuid \u003d str(uuid.uuid4())"},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_200acc26","line":67,"in_reply_to":"5f7c97a3_e4ee2d20","updated":"2018-06-29 18:18:21.000000000","message":"Done","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bd9ed57cd8a0c7a9665b53db5e38224a71586b78","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            \u0027MEMORY_MB:max_unit\u003d1024\u0027)"},{"line_number":114,"context_line":"        created_alloc \u003d self.resource_allocation_set("},{"line_number":115,"context_line":"            consumer_uuid,"},{"line_number":116,"context_line":"            [\u0027rp\u003d{},VCPU\u003d2\u0027.format(self.rp1[\u0027uuid\u0027]),"},{"line_number":117,"context_line":"             \u0027rp\u003d{},MEMORY_MB\u003d512\u0027.format(self.rp1[\u0027uuid\u0027])],"},{"line_number":118,"context_line":"            project_id\u003dproject_id, user_id\u003duser_id"},{"line_number":119,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":35,"id":"5f7c97a3_ac91f3f9","line":116,"range":{"start_line":116,"start_character":35,"end_line":116,"end_character":43},"updated":"2018-06-29 20:49:22.000000000","message":"ah damn","commit_id":"f2671713268d2bcc576940488fc8522f061e1d63"}],"osc_placement/tests/functional/test_usage.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f3fc4c245e52d52d3df4602ab5a3210a5945d198","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        rp \u003d self.resource_provider_create()"},{"line_number":76,"context_line":"        self.resource_inventory_set(rp[\u0027uuid\u0027], \u0027VCPU\u003d16\u0027)"},{"line_number":77,"context_line":"        self.resource_allocation_set("},{"line_number":78,"context_line":"            c1, [\u0027rp\u003d{},VCPU\u003d2\u0027.format(rp[\u0027uuid\u0027])], project_id\u003dp1, user_id\u003du1)"},{"line_number":79,"context_line":"        self.resource_allocation_set("},{"line_number":80,"context_line":"            c2, [\u0027rp\u003d{},VCPU\u003d4\u0027.format(rp[\u0027uuid\u0027])], project_id\u003dp2, user_id\u003du1)"}],"source_content_type":"text/x-python","patch_set":33,"id":"5f7c97a3_e41dcd62","line":77,"range":{"start_line":77,"start_character":13,"end_line":77,"end_character":36},"updated":"2018-06-29 14:39:06.000000000","message":"This tests 1.8 implicitly.","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"}],"osc_placement/version.py":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"8408c6de364faccc01ce8b60b3d6de353d42d08e","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    return wrapped"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def get_version(obj):"},{"line_number":99,"context_line":"    \"\"\"Extract version from a command object.\"\"\""},{"line_number":100,"context_line":"    try:"},{"line_number":101,"context_line":"        version \u003d obj.app.client_manager.placement.api_version"},{"line_number":102,"context_line":"    except AttributeError:"},{"line_number":103,"context_line":"        version \u003d SUPPORTED_VERSIONS[0]"},{"line_number":104,"context_line":"    return version"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class CheckerMixin(object):"},{"line_number":108,"context_line":"    def check_version(self, *predicates, **kwargs):"},{"line_number":109,"context_line":"        return compare(get_version(self), *predicates, **kwargs)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def compare_version(self, *predicates, **kwargs):"},{"line_number":112,"context_line":"        return compare(get_version(self), *predicates, exc\u003dFalse, **kwargs)"}],"source_content_type":"text/x-python","patch_set":14,"id":"df7087c5_5fa65f11","line":112,"range":{"start_line":98,"start_character":0,"end_line":112,"end_character":75},"updated":"2018-03-23 14:21:58.000000000","message":"I think if you moved the changes in this file up to the earlier v1.5 change then the doc generation error of the versions 1.5, 1.6, 1.7 would be solved.","commit_id":"7419e70e5c00a26c5cfd0962b92cb673f01c02c6"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"c0a0433dfceb6054e0d6f2e9eb7a490e6b79af29","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    return wrapped"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"def get_version(obj):"},{"line_number":99,"context_line":"    \"\"\"Extract version from a command object.\"\"\""},{"line_number":100,"context_line":"    try:"},{"line_number":101,"context_line":"        version \u003d obj.app.client_manager.placement.api_version"},{"line_number":102,"context_line":"    except AttributeError:"},{"line_number":103,"context_line":"        version \u003d SUPPORTED_VERSIONS[0]"},{"line_number":104,"context_line":"    return version"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"class CheckerMixin(object):"},{"line_number":108,"context_line":"    def check_version(self, *predicates, **kwargs):"},{"line_number":109,"context_line":"        return compare(get_version(self), *predicates, **kwargs)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def compare_version(self, *predicates, **kwargs):"},{"line_number":112,"context_line":"        return compare(get_version(self), *predicates, exc\u003dFalse, **kwargs)"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf659307_4de032cd","line":112,"range":{"start_line":98,"start_character":0,"end_line":112,"end_character":75},"in_reply_to":"df7087c5_5fa65f11","updated":"2018-04-11 03:44:52.000000000","message":"+1","commit_id":"7419e70e5c00a26c5cfd0962b92cb673f01c02c6"}],"releasenotes/notes/microversion-1.8-1.9-db26e40571292353.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The ``openstack resource provider allocation set`` command now supports"},{"line_number":5,"context_line":"    microversion `1.8`_. Specifically from 1.8 it is necessary to specify"},{"line_number":6,"context_line":"    user id and project id arguments for making allocation."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    The ``openstack resource provider usage show`` command now supports"},{"line_number":9,"context_line":"    microversion `1.9`_. It is possible to show usages for a resource provider or"}],"source_content_type":"text/x-yaml","patch_set":28,"id":"5f7c97a3_540ee58c","line":6,"range":{"start_line":6,"start_character":4,"end_line":6,"end_character":26},"updated":"2018-06-27 20:58:48.000000000","message":"specify ``--user-id`` and ``--project-id`` arguments when setting allocations","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"01e1bf2180b7f50db660533dbc58c366db90884d","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    user id and project id arguments for making allocation."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    The ``openstack resource provider usage show`` command now supports"},{"line_number":9,"context_line":"    microversion `1.9`_. It is possible to show usages for a resource provider or"},{"line_number":10,"context_line":"    or for a project and user."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    See the command documentation for `allocation set`_ and `usage show`_ for more details."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":28,"id":"5f7c97a3_9728ff85","line":10,"range":{"start_line":9,"start_character":79,"end_line":10,"end_character":7},"updated":"2018-06-27 21:13:02.000000000","message":"s/or or/or/","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2f61d4174ca2811c8045e4254fd44afb3fd95b21","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    The ``openstack resource consumer usage show`` command is"},{"line_number":9,"context_line":"    available starting from microversion `1.9`_. It is possible to"},{"line_number":10,"context_line":"    show usages for a resource provider or for a project and user."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    See the command documentation for `allocation set`_ and `consumer usage show`_ for"},{"line_number":13,"context_line":"    more details."}],"source_content_type":"text/x-yaml","patch_set":32,"id":"5f7c97a3_9b5a58f0","line":10,"range":{"start_line":10,"start_character":16,"end_line":10,"end_character":39},"updated":"2018-06-28 13:44:20.000000000","message":"This goes away.","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f31c6a3853a7a312d02646035cd0d4ba8f44fd42","unresolved":false,"context_lines":[{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    The ``openstack resource consumer usage show`` command is"},{"line_number":9,"context_line":"    available starting from microversion `1.9`_. It is possible to"},{"line_number":10,"context_line":"    show usages for a resource provider or for a project and user."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    See the command documentation for `allocation set`_ and `consumer usage show`_ for"},{"line_number":13,"context_line":"    more details."}],"source_content_type":"text/x-yaml","patch_set":32,"id":"5f7c97a3_9c1a4d16","line":10,"range":{"start_line":10,"start_character":16,"end_line":10,"end_character":39},"in_reply_to":"5f7c97a3_9b5a58f0","updated":"2018-06-28 18:32:42.000000000","message":"Done","commit_id":"ffef3dca62a65100392f5d334773da19ca0d69e9"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b5fa8a20b0b276b22cac3d63508fd6b1954b97be","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    microversion `1.8`_. Specifically from 1.8 it is necessary to specify"},{"line_number":6,"context_line":"    ``--user-id`` and ``--project-id`` arguments when setting allocations."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    The ``openstack resource consumer usage show`` command is"},{"line_number":9,"context_line":"    available starting from microversion `1.9`_. It is possible to"},{"line_number":10,"context_line":"    show usages for a project and user."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":33,"id":"5f7c97a3_83088a27","line":8,"range":{"start_line":8,"start_character":8,"end_line":8,"end_character":50},"updated":"2018-06-29 18:18:21.000000000","message":"This was wrong too.","commit_id":"2146394f8e7bf7e430f08e77997969cf32c6721c"}],"setup.cfg":[{"author":{"_account_id":15554,"name":"Bence Romsics","email":"bence.romsics@gmail.com","username":"ebenrom","status":"inactive contributor"},"change_message_id":"98eae94ca1e9ee30e414685ffda50f3f4e01a3f5","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    resource_provider_show   \u003d osc_placement.resources.resource_provider:ShowResourceProvider"},{"line_number":36,"context_line":"    resource_provider_set    \u003d osc_placement.resources.resource_provider:SetResourceProvider"},{"line_number":37,"context_line":"    resource_provider_delete \u003d osc_placement.resources.resource_provider:DeleteResourceProvider"},{"line_number":38,"context_line":"    usage_show \u003d osc_placement.resources.usage:ShowUsage"},{"line_number":39,"context_line":"    resource_provider_inventory_set       \u003d osc_placement.resources.inventory:SetInventory"},{"line_number":40,"context_line":"    resource_provider_inventory_class_set \u003d osc_placement.resources.inventory:SetClassInventory"},{"line_number":41,"context_line":"    resource_provider_inventory_list      \u003d osc_placement.resources.inventory:ListInventory"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"3fa0c359_3570b0dc","line":38,"range":{"start_line":38,"start_character":4,"end_line":38,"end_character":14},"updated":"2018-02-07 15:46:29.000000000","message":"IMO we should not rename this to simply \u0027usage\u0027 because there\u0027s another usage command (coming from the python-openstackclient repo) and they are going to conflict. See these:\n\nhttps://github.com/openstack/python-openstackclient/blob/25e60a4bf1184f2d9006d50d52ced1b5c83737af/setup.cfg#L154\n\nhttps://github.com/openstack/python-openstackclient/blob/25e60a4bf1184f2d9006d50d52ced1b5c83737af/openstackclient/compute/v2/usage.py","commit_id":"65a760e60461c296280b1873ed58e81dee36944e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa9922624659e5edd7fc300ef49af88580e9c7fd","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    resource_provider_show   \u003d osc_placement.resources.resource_provider:ShowResourceProvider"},{"line_number":36,"context_line":"    resource_provider_set    \u003d osc_placement.resources.resource_provider:SetResourceProvider"},{"line_number":37,"context_line":"    resource_provider_delete \u003d osc_placement.resources.resource_provider:DeleteResourceProvider"},{"line_number":38,"context_line":"    resource_provider_usage_show  \u003d osc_placement.resources.usage:ShowUsage"},{"line_number":39,"context_line":"    resource_provider_inventory_set       \u003d osc_placement.resources.inventory:SetInventory"},{"line_number":40,"context_line":"    resource_provider_inventory_class_set \u003d osc_placement.resources.inventory:SetClassInventory"},{"line_number":41,"context_line":"    resource_provider_inventory_list      \u003d osc_placement.resources.inventory:ListInventory"}],"source_content_type":"text/x-ttcn-cfg","patch_set":28,"id":"5f7c97a3_9479ddfc","line":38,"range":{"start_line":38,"start_character":12,"end_line":38,"end_character":13},"updated":"2018-06-27 20:58:48.000000000","message":"huh, how was this not a problem before?","commit_id":"3aecc18a656c3d2ff9891f661db4a1ca74583b30"}]}
