)]}'
{"openstackclient/volume/v1/qos.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2012-2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_fda107aa","line":1,"updated":"2015-06-24 05:47:03.000000000","message":"nuke this unless you work for the foundation","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#   Copyright 2012-2013 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#   Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#   not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_92c52f8f","line":1,"in_reply_to":"fa32b979_fda107aa","updated":"2015-06-24 14:33:56.000000000","message":"Good point.","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class CreateQos(show.ShowOne):"},{"line_number":30,"context_line":"    \"\"\"Creates a new QoS specification\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.CreateQos\u0027)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_7d0df73c","line":30,"updated":"2015-06-24 05:47:03.000000000","message":"we try to keep consistent wording for CRUD operations, i\u0027ll make a few suggestion here:\n\n  Create new QoS specification","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class CreateQos(show.ShowOne):"},{"line_number":30,"context_line":"    \"\"\"Creates a new QoS specification\"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.CreateQos\u0027)"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_52bb270f","line":30,"in_reply_to":"fa32b979_7d0df73c","updated":"2015-06-24 14:33:56.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        parser.add_argument("},{"line_number":37,"context_line":"            \u0027name\u0027,"},{"line_number":38,"context_line":"            metavar\u003d\u0027\u003cname\u003e\u0027,"},{"line_number":39,"context_line":"            help\u003d\u0027Name of the new QoS specification.\u0027,"},{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027--property\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_084ee76e","line":39,"updated":"2015-06-24 05:47:03.000000000","message":"suggest: New QoS specification name","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        parser.add_argument("},{"line_number":37,"context_line":"            \u0027name\u0027,"},{"line_number":38,"context_line":"            metavar\u003d\u0027\u003cname\u003e\u0027,"},{"line_number":39,"context_line":"            help\u003d\u0027Name of the new QoS specification.\u0027,"},{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027--property\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_12383f9f","line":39,"in_reply_to":"fa32b979_084ee76e","updated":"2015-06-24 14:33:56.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            \u0027--property\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003ckey\u003dvalue\u003e\u0027,"},{"line_number":44,"context_line":"            action\u003dparseractions.KeyValueAction,"},{"line_number":45,"context_line":"            help\u003d\u0027QoS specifications in a key value pair. \u0027"},{"line_number":46,"context_line":"                 \u0027(repeat option to set multiple properties)\u0027,"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_8842f73c","line":45,"updated":"2015-06-24 05:47:03.000000000","message":"suggest: Set a QoS specification property","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            \u0027--property\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003ckey\u003dvalue\u003e\u0027,"},{"line_number":44,"context_line":"            action\u003dparseractions.KeyValueAction,"},{"line_number":45,"context_line":"            help\u003d\u0027QoS specifications in a key value pair. \u0027"},{"line_number":46,"context_line":"                 \u0027(repeat option to set multiple properties)\u0027,"},{"line_number":47,"context_line":"        )"},{"line_number":48,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_d23df78e","line":45,"in_reply_to":"fa32b979_8842f73c","updated":"2015-06-24 14:33:56.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        info \u003d {}"},{"line_number":60,"context_line":"        info.update(qos_specs._info)"},{"line_number":61,"context_line":"        return zip(*sorted(six.iteritems(info)))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class DeleteQos(command.Command):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_7ddc17e4","line":61,"updated":"2015-06-24 05:47:03.000000000","message":"can be done in 1 line\n\n  return zip(*sorted(six.iteritems(qos_specs._info)))","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        info \u003d {}"},{"line_number":60,"context_line":"        info.update(qos_specs._info)"},{"line_number":61,"context_line":"        return zip(*sorted(six.iteritems(info)))"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class DeleteQos(command.Command):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_f2427b0e","line":61,"in_reply_to":"fa32b979_7ddc17e4","updated":"2015-06-24 14:33:56.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class DeleteQos(command.Command):"},{"line_number":65,"context_line":"    \"\"\"Deletes a QoS specification\"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DeleteQos\u0027)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_9d0a3b25","line":65,"updated":"2015-06-24 05:47:03.000000000","message":"suggest: Delete QoS specification","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class DeleteQos(command.Command):"},{"line_number":65,"context_line":"    \"\"\"Deletes a QoS specification\"\"\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DeleteQos\u0027)"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_924c4f43","line":65,"in_reply_to":"fa32b979_9d0a3b25","updated":"2015-06-24 14:33:56.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        parser.add_argument("},{"line_number":72,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":73,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"},{"line_number":74,"context_line":"            help\u003d\u0027ID of the QoS specification to delete.\u0027,"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        return parser"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_287acb88","line":74,"updated":"2015-06-24 05:47:03.000000000","message":"suggest: QoS specification to delete (name or ID)","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"2e32ea53b12cf120ee96fc5ff5883294237f0c9d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        parser.add_argument("},{"line_number":72,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":73,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"},{"line_number":74,"context_line":"            help\u003d\u0027ID of the QoS specification to delete.\u0027,"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        return parser"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_3161c839","line":74,"in_reply_to":"fa32b979_287acb88","updated":"2015-06-24 13:03:00.000000000","message":"All the helps should follow this pattern if the find can be used to convert name-\u003eid","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"78ad35b00a97a641ca4dc939d87925ec4e63d6d3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        parser.add_argument("},{"line_number":72,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":73,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"},{"line_number":74,"context_line":"            help\u003d\u0027ID of the QoS specification to delete.\u0027,"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        return parser"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_b3fd873d","line":74,"in_reply_to":"fa32b979_287acb88","updated":"2015-06-26 01:58:26.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"78ad35b00a97a641ca4dc939d87925ec4e63d6d3","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        parser.add_argument("},{"line_number":72,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":73,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"},{"line_number":74,"context_line":"            help\u003d\u0027ID of the QoS specification to delete.\u0027,"},{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        return parser"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_93008337","line":74,"in_reply_to":"fa32b979_3161c839","updated":"2015-06-26 01:58:26.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        return parser"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def take_action(self, parsed_args):"},{"line_number":79,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":80,"context_line":"        volume_client \u003d self.app.client_manager.volume"},{"line_number":81,"context_line":"        volume_client.qos_specs.delete(parsed_args.qos_specs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_485f0f0f","line":78,"updated":"2015-06-24 05:47:03.000000000","message":"you probably want to improve this function to look up QoS by name too...","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"78ad35b00a97a641ca4dc939d87925ec4e63d6d3","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        )"},{"line_number":76,"context_line":"        return parser"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def take_action(self, parsed_args):"},{"line_number":79,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":80,"context_line":"        volume_client \u003d self.app.client_manager.volume"},{"line_number":81,"context_line":"        volume_client.qos_specs.delete(parsed_args.qos_specs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_53fafb44","line":78,"in_reply_to":"fa32b979_485f0f0f","updated":"2015-06-26 01:58:26.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class ListQos(lister.Lister):"},{"line_number":86,"context_line":"    \"\"\"Lists QoS specifications\"\"\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.ListQos\u0027)"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_08002700","line":86,"updated":"2015-06-24 05:47:03.000000000","message":"suggest: List QoS specifications","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class ListQos(lister.Lister):"},{"line_number":86,"context_line":"    \"\"\"Lists QoS specifications\"\"\""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.ListQos\u0027)"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_724f4b34","line":86,"in_reply_to":"fa32b979_08002700","updated":"2015-06-24 14:33:56.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def take_action(self, parsed_args):"},{"line_number":95,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":96,"context_line":"        columns \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Consumer\u0027, \u0027Specs\u0027)"},{"line_number":97,"context_line":"        column_headers \u003d columns"},{"line_number":98,"context_line":"        data \u003d self.app.client_manager.volume.qos_specs.list()"},{"line_number":99,"context_line":"        return (column_headers,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_bd37fffc","line":96,"updated":"2015-06-24 05:47:03.000000000","message":"random question, whats a consumer and why doesn\u0027t it appear as an option for qos create?","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def take_action(self, parsed_args):"},{"line_number":95,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":96,"context_line":"        columns \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Consumer\u0027, \u0027Specs\u0027)"},{"line_number":97,"context_line":"        column_headers \u003d columns"},{"line_number":98,"context_line":"        data \u003d self.app.client_manager.volume.qos_specs.list()"},{"line_number":99,"context_line":"        return (column_headers,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_b2ccf389","line":96,"in_reply_to":"fa32b979_bd37fffc","updated":"2015-06-24 14:33:56.000000000","message":"I built the commands based off of the cinder ones. The consumer is actually a mandatory property when creating the qos spec. Doing a qos list will show a column for \"Consumer\", hence why it is here.","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def take_action(self, parsed_args):"},{"line_number":95,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":96,"context_line":"        columns \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Consumer\u0027, \u0027Specs\u0027)"},{"line_number":97,"context_line":"        column_headers \u003d columns"},{"line_number":98,"context_line":"        data \u003d self.app.client_manager.volume.qos_specs.list()"},{"line_number":99,"context_line":"        return (column_headers,"},{"line_number":100,"context_line":"                (utils.get_item_properties("}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_fd4a6782","line":97,"updated":"2015-06-24 05:47:03.000000000","message":"there doesn\u0027t seem to be a need to do this","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"78ad35b00a97a641ca4dc939d87925ec4e63d6d3","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def take_action(self, parsed_args):"},{"line_number":95,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":96,"context_line":"        columns \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Consumer\u0027, \u0027Specs\u0027)"},{"line_number":97,"context_line":"        column_headers \u003d columns"},{"line_number":98,"context_line":"        data \u003d self.app.client_manager.volume.qos_specs.list()"},{"line_number":99,"context_line":"        return (column_headers,"},{"line_number":100,"context_line":"                (utils.get_item_properties("}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_73f7ff59","line":97,"in_reply_to":"fa32b979_2375fb96","updated":"2015-06-26 01:58:26.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"78ad35b00a97a641ca4dc939d87925ec4e63d6d3","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def take_action(self, parsed_args):"},{"line_number":95,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":96,"context_line":"        columns \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Consumer\u0027, \u0027Specs\u0027)"},{"line_number":97,"context_line":"        column_headers \u003d columns"},{"line_number":98,"context_line":"        data \u003d self.app.client_manager.volume.qos_specs.list()"},{"line_number":99,"context_line":"        return (column_headers,"},{"line_number":100,"context_line":"                (utils.get_item_properties("}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_13931302","line":97,"in_reply_to":"fa32b979_fd4a6782","updated":"2015-06-26 01:58:26.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"2e32ea53b12cf120ee96fc5ff5883294237f0c9d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def take_action(self, parsed_args):"},{"line_number":95,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":96,"context_line":"        columns \u003d (\u0027ID\u0027, \u0027Name\u0027, \u0027Consumer\u0027, \u0027Specs\u0027)"},{"line_number":97,"context_line":"        column_headers \u003d columns"},{"line_number":98,"context_line":"        data \u003d self.app.client_manager.volume.qos_specs.list()"},{"line_number":99,"context_line":"        return (column_headers,"},{"line_number":100,"context_line":"                (utils.get_item_properties("}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_2375fb96","line":97,"in_reply_to":"fa32b979_fd4a6782","updated":"2015-06-24 13:03:00.000000000","message":"Shouldn\u0027t this map \u0027QoS Specifications\u0027 to \u0027Specs\u0027?","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class ShowQos(show.ShowOne):"},{"line_number":107,"context_line":"    \"\"\"Shows a QoS specification\u0027s details\"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.ShowQos\u0027)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_2805eb0f","line":107,"updated":"2015-06-24 05:47:03.000000000","message":"suggest: Display QoS specification details","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"class ShowQos(show.ShowOne):"},{"line_number":107,"context_line":"    \"\"\"Shows a QoS specification\u0027s details\"\"\""},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.ShowQos\u0027)"},{"line_number":110,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_125fdfe5","line":107,"in_reply_to":"fa32b979_2805eb0f","updated":"2015-06-24 14:33:56.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        parser.add_argument("},{"line_number":114,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":115,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"},{"line_number":116,"context_line":"            help\u003d\u0027ID of the QoS specification to show details for.\u0027,"},{"line_number":117,"context_line":"        )"},{"line_number":118,"context_line":"        return parser"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_c8a1dff8","line":116,"updated":"2015-06-24 05:47:03.000000000","message":"suggest: QoS specification to display (name or ID)","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"78ad35b00a97a641ca4dc939d87925ec4e63d6d3","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        parser.add_argument("},{"line_number":114,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":115,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"},{"line_number":116,"context_line":"            help\u003d\u0027ID of the QoS specification to show details for.\u0027,"},{"line_number":117,"context_line":"        )"},{"line_number":118,"context_line":"        return parser"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_3398971b","line":116,"in_reply_to":"fa32b979_c8a1dff8","updated":"2015-06-26 01:58:26.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def take_action(self, parsed_args):"},{"line_number":121,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":122,"context_line":"        volume_client \u003d self.app.client_manager.volume"},{"line_number":123,"context_line":"        qos_specs \u003d utils.find_resource(volume_client.qos_specs,"},{"line_number":124,"context_line":"                                        parsed_args.qos_specs)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return zip(*sorted(six.iteritems(qos_specs._info)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_a8ad7bea","line":123,"updated":"2015-06-24 05:47:03.000000000","message":"this logic should find things by name, repeat this in the delete call","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"78ad35b00a97a641ca4dc939d87925ec4e63d6d3","unresolved":false,"context_lines":[{"line_number":120,"context_line":"    def take_action(self, parsed_args):"},{"line_number":121,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":122,"context_line":"        volume_client \u003d self.app.client_manager.volume"},{"line_number":123,"context_line":"        qos_specs \u003d utils.find_resource(volume_client.qos_specs,"},{"line_number":124,"context_line":"                                        parsed_args.qos_specs)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        return zip(*sorted(six.iteritems(qos_specs._info)))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_d39ccb10","line":123,"in_reply_to":"fa32b979_a8ad7bea","updated":"2015-06-26 01:58:26.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"class SetQos(command.Command):"},{"line_number":130,"context_line":"    \"\"\"Sets QoS specifications properties\"\"\""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.SetQos\u0027)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_e80aa31f","line":130,"updated":"2015-06-24 05:47:03.000000000","message":"suggest: Set QoS specification properties","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"class SetQos(command.Command):"},{"line_number":130,"context_line":"    \"\"\"Sets QoS specifications properties\"\"\""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.SetQos\u0027)"},{"line_number":133,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_f2591bfe","line":130,"in_reply_to":"fa32b979_e80aa31f","updated":"2015-06-24 14:33:56.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        parser.add_argument("},{"line_number":137,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":138,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"},{"line_number":139,"context_line":"            help\u003d\u0027ID of the QoS specification.\u0027,"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":"        parser.add_argument("},{"line_number":142,"context_line":"            \u0027--property\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_28888b70","line":139,"updated":"2015-06-24 05:47:03.000000000","message":"suggest: QoS specification to change (name or ID)","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"78ad35b00a97a641ca4dc939d87925ec4e63d6d3","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        parser.add_argument("},{"line_number":137,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":138,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"},{"line_number":139,"context_line":"            help\u003d\u0027ID of the QoS specification.\u0027,"},{"line_number":140,"context_line":"        )"},{"line_number":141,"context_line":"        parser.add_argument("},{"line_number":142,"context_line":"            \u0027--property\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_f3a1cf47","line":139,"in_reply_to":"fa32b979_28888b70","updated":"2015-06-26 01:58:26.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            \u0027--property\u0027,"},{"line_number":143,"context_line":"            metavar\u003d\u0027\u003ckey\u003dvalue\u003e\u0027,"},{"line_number":144,"context_line":"            action\u003dparseractions.KeyValueAction,"},{"line_number":145,"context_line":"            help\u003d\u0027QoS specifications in a key value pair. \u0027"},{"line_number":146,"context_line":"                 \u0027(repeat option to set multiple properties)\u0027,"},{"line_number":147,"context_line":"        )"},{"line_number":148,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_e87dc36d","line":145,"updated":"2015-06-24 05:47:03.000000000","message":"suggest: Property to add or modify for this QoS specification","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            \u0027--property\u0027,"},{"line_number":143,"context_line":"            metavar\u003d\u0027\u003ckey\u003dvalue\u003e\u0027,"},{"line_number":144,"context_line":"            action\u003dparseractions.KeyValueAction,"},{"line_number":145,"context_line":"            help\u003d\u0027QoS specifications in a key value pair. \u0027"},{"line_number":146,"context_line":"                 \u0027(repeat option to set multiple properties)\u0027,"},{"line_number":147,"context_line":"        )"},{"line_number":148,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_5269e78a","line":145,"in_reply_to":"fa32b979_e87dc36d","updated":"2015-06-24 14:33:56.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"class UnsetQos(command.Command):"},{"line_number":162,"context_line":"    \"\"\"Unsets properties from a QoS specification\"\"\""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.SetQos\u0027)"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_481aaf70","line":162,"updated":"2015-06-24 05:47:03.000000000","message":"suggest: Unset QoS specification properties","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"class UnsetQos(command.Command):"},{"line_number":162,"context_line":"    \"\"\"Unsets properties from a QoS specification\"\"\""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.SetQos\u0027)"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_1206ffcd","line":162,"in_reply_to":"fa32b979_481aaf70","updated":"2015-06-24 14:33:56.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        parser.add_argument("},{"line_number":169,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":170,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"},{"line_number":171,"context_line":"            help\u003d\u0027ID of the QoS specification.\u0027,"},{"line_number":172,"context_line":"        )"},{"line_number":173,"context_line":"        parser.add_argument("},{"line_number":174,"context_line":"            \u0027--property\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_488dcf7a","line":171,"updated":"2015-06-24 05:47:03.000000000","message":"suggest: QoS specification to modify (name or ID)","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"78ad35b00a97a641ca4dc939d87925ec4e63d6d3","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        parser.add_argument("},{"line_number":169,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":170,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"},{"line_number":171,"context_line":"            help\u003d\u0027ID of the QoS specification.\u0027,"},{"line_number":172,"context_line":"        )"},{"line_number":173,"context_line":"        parser.add_argument("},{"line_number":174,"context_line":"            \u0027--property\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_b384a7b1","line":171,"in_reply_to":"fa32b979_488dcf7a","updated":"2015-06-26 01:58:26.000000000","message":"Done","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        return"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"class DisassociateAllQos(command.Command):"},{"line_number":255,"context_line":"    \"\"\"Disassociates a QoS specification from every volume type\"\"\""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DisassociateAllQos\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_3dc52f5b","line":254,"updated":"2015-06-24 05:47:03.000000000","message":"this could probably be combined with the above command, just make the volume_type optional, and if it\u0027s not present then disassociate all the qos specs?","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        return"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"class DisassociateAllQos(command.Command):"},{"line_number":255,"context_line":"    \"\"\"Disassociates a QoS specification from every volume type\"\"\""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DisassociateAllQos\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_12903f42","line":254,"in_reply_to":"fa32b979_3dc52f5b","updated":"2015-06-24 14:33:56.000000000","message":"Sounds fairly dangerous from a user standpoint ? There is two distinct calls for this in the Cinder API. Disassociate and Disassociate All.","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        return"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"class GetAssociationsQos(lister.Lister):"},{"line_number":279,"context_line":"    \"\"\"Lists QoS specifications associations with volume types\"\"\""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.GetAssociationsQos\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_28ef2b1f","line":278,"updated":"2015-06-24 05:47:03.000000000","message":"This should probably be ListAssociationsQos","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"78ad35b00a97a641ca4dc939d87925ec4e63d6d3","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        return"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"class GetAssociationsQos(lister.Lister):"},{"line_number":279,"context_line":"    \"\"\"Lists QoS specifications associations with volume types\"\"\""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.GetAssociationsQos\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_13ba3372","line":278,"in_reply_to":"fa32b979_03431714","updated":"2015-06-26 01:58:26.000000000","message":"I removed this and integrated it in both \u0027show\u0027 and \u0027list\u0027.","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        return"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"class GetAssociationsQos(lister.Lister):"},{"line_number":279,"context_line":"    \"\"\"Lists QoS specifications associations with volume types\"\"\""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.GetAssociationsQos\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_f2e83bb5","line":278,"in_reply_to":"fa32b979_03431714","updated":"2015-06-24 14:33:56.000000000","message":"I\u0027ll make a general comment about this in the review.","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"2e32ea53b12cf120ee96fc5ff5883294237f0c9d","unresolved":false,"context_lines":[{"line_number":275,"context_line":"        return"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"class GetAssociationsQos(lister.Lister):"},{"line_number":279,"context_line":"    \"\"\"Lists QoS specifications associations with volume types\"\"\""},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.GetAssociationsQos\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_03431714","line":278,"in_reply_to":"fa32b979_28ef2b1f","updated":"2015-06-24 13:03:00.000000000","message":"I\u0027m not sure what else shows up in the ShowQos command, but this seems like it would be more interesting than the metadata.  Could this be combined with the Show command?","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"2e32ea53b12cf120ee96fc5ff5883294237f0c9d","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def take_action(self, parsed_args):"},{"line_number":293,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":294,"context_line":"        columns \u003d (\u0027Association_Type\u0027, \u0027Name\u0027, \u0027ID\u0027)"},{"line_number":295,"context_line":"        column_headers \u003d columns"},{"line_number":296,"context_line":"        volume_client \u003d self.app.client_manager.volume"},{"line_number":297,"context_line":"        data \u003d volume_client.qos_specs.get_associations(parsed_args.qos_specs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_71ef50b1","line":294,"updated":"2015-06-24 13:03:00.000000000","message":"Why this strange order here, seems like it should be ID, Name, Type?","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"f6af53ee11505a503a4c15da6c5c34f8be416708","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    def take_action(self, parsed_args):"},{"line_number":293,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":294,"context_line":"        columns \u003d (\u0027Association_Type\u0027, \u0027Name\u0027, \u0027ID\u0027)"},{"line_number":295,"context_line":"        column_headers \u003d columns"},{"line_number":296,"context_line":"        volume_client \u003d self.app.client_manager.volume"},{"line_number":297,"context_line":"        data \u003d volume_client.qos_specs.get_associations(parsed_args.qos_specs)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_d2fad776","line":294,"in_reply_to":"fa32b979_71ef50b1","updated":"2015-06-24 14:33:56.000000000","message":"This is the order of the columns currently provided by the Cinder command.","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4c65fd8e4582e1d4fb6409db793429ec366919a0","unresolved":false,"context_lines":[{"line_number":292,"context_line":"    def take_action(self, parsed_args):"},{"line_number":293,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":294,"context_line":"        columns \u003d (\u0027Association_Type\u0027, \u0027Name\u0027, \u0027ID\u0027)"},{"line_number":295,"context_line":"        column_headers \u003d columns"},{"line_number":296,"context_line":"        volume_client \u003d self.app.client_manager.volume"},{"line_number":297,"context_line":"        data \u003d volume_client.qos_specs.get_associations(parsed_args.qos_specs)"},{"line_number":298,"context_line":"        return (column_headers,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_bd405f60","line":295,"updated":"2015-06-24 05:47:03.000000000","message":"this seems redundant","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"2e32ea53b12cf120ee96fc5ff5883294237f0c9d","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        return (column_headers,"},{"line_number":299,"context_line":"                (utils.get_item_properties("},{"line_number":300,"context_line":"                    s, columns,"},{"line_number":301,"context_line":"                    formatters\u003d{\u0027QoS Specifications\u0027: utils.format_dict},"},{"line_number":302,"context_line":"                ) for s in data))"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa32b979_113da4dc","line":301,"updated":"2015-06-24 13:03:00.000000000","message":"Why this formatter here?  This isn\u0027t in the columns near as I can tell.","commit_id":"7087089fcd5d0293956b9631c5ee2a5b05abcc7c"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"47778a203bd23e44f48361b72e9ec81be403207a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027consumer\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cconsumer\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d\u0027Consumer of the QoS\u0027,"},{"line_number":45,"context_line":"        )"},{"line_number":46,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_e1fec4ad","line":43,"updated":"2015-06-26 11:43:21.000000000","message":"If this is pretty stable  [\u0027front-end\u0027, \u0027back-end\u0027, \u0027both\u0027]","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"388208661d6f2e31c05052ac159b02053d5eff5a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027consumer\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cconsumer\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d\u0027Consumer of the QoS\u0027,"},{"line_number":45,"context_line":"        )"},{"line_number":46,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_ac9c255e","line":43,"in_reply_to":"fa32b979_4f0c6e3b","updated":"2015-06-26 16:59:01.000000000","message":"Yeah, these are the only values as far as I know https://github.com/openstack/cinder/blob/master/cinder/volume/qos_specs.py#L57-L59","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8e199dc25adfda2d24bfab6638ddb15262eecbfe","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027consumer\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cconsumer\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d\u0027Consumer of the QoS\u0027,"},{"line_number":45,"context_line":"        )"},{"line_number":46,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_4f0c6e3b","line":43,"in_reply_to":"fa32b979_54ae4599","updated":"2015-06-26 16:08:04.000000000","message":"I don\u0027t know cinder well enough to know if these are the only values or they may vary.  If these are pretty much it (they sound kind of like that might be it), you could add the array to the arg parser choices\u003d [\u0027front-end\u0027, \u0027back-end\u0027, \u0027both\u0027] and add them to the help text.","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3c2b231ff77d509d31a265fbae26d1e513ffdca1","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027consumer\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cconsumer\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d\u0027Consumer of the QoS\u0027,"},{"line_number":45,"context_line":"        )"},{"line_number":46,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_927a9a76","line":43,"in_reply_to":"fa32b979_ac9c255e","updated":"2015-06-26 17:45:15.000000000","message":"yeah, use choices\u003d[] if you want to limit the arg to certain values","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"323069c8b6d2b7067c263fcb3dfaa78a34064020","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        parser.add_argument("},{"line_number":42,"context_line":"            \u0027consumer\u0027,"},{"line_number":43,"context_line":"            metavar\u003d\u0027\u003cconsumer\u003e\u0027,"},{"line_number":44,"context_line":"            help\u003d\u0027Consumer of the QoS\u0027,"},{"line_number":45,"context_line":"        )"},{"line_number":46,"context_line":"        parser.add_argument("}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_54ae4599","line":43,"in_reply_to":"fa32b979_e1fec4ad","updated":"2015-06-26 15:53:30.000000000","message":"Makes sense, so what do you suggest the implementation for these values should be ? Just in the \u0027help\u0027 ?","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3c2b231ff77d509d31a265fbae26d1e513ffdca1","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":57,"context_line":"        volume_client \u003d self.app.client_manager.volume"},{"line_number":58,"context_line":"        specs \u003d {}"},{"line_number":59,"context_line":"        specs.update({\u0027consumer\u0027: parsed_args.consumer})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if parsed_args.property:"},{"line_number":62,"context_line":"            specs.update(parsed_args.property)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_b2f6bef7","line":59,"updated":"2015-06-26 17:45:15.000000000","message":"just a heads up, might want to check if parsed_args.consumer is None, as of now, you\u0027ll be setting it to None if it\u0027s not passed in. sometimes this breaks the python*clients, just a heads up...","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"79e8ea5f79a9ad8af55789e7f74cbe990e820404","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":57,"context_line":"        volume_client \u003d self.app.client_manager.volume"},{"line_number":58,"context_line":"        specs \u003d {}"},{"line_number":59,"context_line":"        specs.update({\u0027consumer\u0027: parsed_args.consumer})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if parsed_args.property:"},{"line_number":62,"context_line":"            specs.update(parsed_args.property)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_a6ebdc77","line":59,"in_reply_to":"fa32b979_867a5876","updated":"2015-06-26 19:34:46.000000000","message":"Just mark consumer arg parser \u0027required\u003dTrue\u0027","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ae39d643def0fda1eebdf947b197ee11f093078e","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":57,"context_line":"        volume_client \u003d self.app.client_manager.volume"},{"line_number":58,"context_line":"        specs \u003d {}"},{"line_number":59,"context_line":"        specs.update({\u0027consumer\u0027: parsed_args.consumer})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if parsed_args.property:"},{"line_number":62,"context_line":"            specs.update(parsed_args.property)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_3a1a797d","line":59,"in_reply_to":"fa32b979_a6ebdc77","updated":"2015-06-27 01:35:30.000000000","message":"by making it a positional, it is required","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"0b6dd3a8069ea8244ebd8e37df0d95e228804a54","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.log.debug(\u0027take_action(%s)\u0027, parsed_args)"},{"line_number":57,"context_line":"        volume_client \u003d self.app.client_manager.volume"},{"line_number":58,"context_line":"        specs \u003d {}"},{"line_number":59,"context_line":"        specs.update({\u0027consumer\u0027: parsed_args.consumer})"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if parsed_args.property:"},{"line_number":62,"context_line":"            specs.update(parsed_args.property)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_867a5876","line":59,"in_reply_to":"fa32b979_b2f6bef7","updated":"2015-06-26 19:26:41.000000000","message":"Consumer is not an optional parameter, this should prevent this from happening ?","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"47778a203bd23e44f48361b72e9ec81be403207a","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            associations \u003d {"},{"line_number":151,"context_line":"                association.name: association.id"},{"line_number":152,"context_line":"                for association in qos_associations"},{"line_number":153,"context_line":"            }"},{"line_number":154,"context_line":"            qos_specs._info.update({"},{"line_number":155,"context_line":"                \u0027associations\u0027: utils.format_dict(associations)"},{"line_number":156,"context_line":"            })"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_a1b99ccd","line":153,"updated":"2015-06-26 11:43:21.000000000","message":"It is odd that the format here seems to be name\u003d\u0027id\u0027.\n\n    associations | lvmdriver-1\u003d\u00271c303bf7-83ae-4418-a58d-84f6f011cbff\u0027\n\nIf volume type name is unique, it would be nice just to have a list of types.","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"323069c8b6d2b7067c263fcb3dfaa78a34064020","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            associations \u003d {"},{"line_number":151,"context_line":"                association.name: association.id"},{"line_number":152,"context_line":"                for association in qos_associations"},{"line_number":153,"context_line":"            }"},{"line_number":154,"context_line":"            qos_specs._info.update({"},{"line_number":155,"context_line":"                \u0027associations\u0027: utils.format_dict(associations)"},{"line_number":156,"context_line":"            })"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_d45015d7","line":153,"in_reply_to":"fa32b979_a1b99ccd","updated":"2015-06-26 15:53:30.000000000","message":"Fair enough, I didn\u0027t realize volume type names were unique so this makes sense. Will do it.","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8e199dc25adfda2d24bfab6638ddb15262eecbfe","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            associations \u003d {"},{"line_number":151,"context_line":"                association.name: association.id"},{"line_number":152,"context_line":"                for association in qos_associations"},{"line_number":153,"context_line":"            }"},{"line_number":154,"context_line":"            qos_specs._info.update({"},{"line_number":155,"context_line":"                \u0027associations\u0027: utils.format_dict(associations)"},{"line_number":156,"context_line":"            })"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_ef38e2d6","line":153,"in_reply_to":"fa32b979_d45015d7","updated":"2015-06-26 16:08:04.000000000","message":"I don\u0027t know if they are unique.","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"388208661d6f2e31c05052ac159b02053d5eff5a","unresolved":false,"context_lines":[{"line_number":150,"context_line":"            associations \u003d {"},{"line_number":151,"context_line":"                association.name: association.id"},{"line_number":152,"context_line":"                for association in qos_associations"},{"line_number":153,"context_line":"            }"},{"line_number":154,"context_line":"            qos_specs._info.update({"},{"line_number":155,"context_line":"                \u0027associations\u0027: utils.format_dict(associations)"},{"line_number":156,"context_line":"            })"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_8c8041f9","line":153,"in_reply_to":"fa32b979_ef38e2d6","updated":"2015-06-26 16:59:01.000000000","message":"They are, I tried :)","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"47778a203bd23e44f48361b72e9ec81be403207a","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DisassociateQos\u0027)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def get_parser(self, prog_name):"},{"line_number":273,"context_line":"        parser \u003d super(DisassociateQos, self).get_parser(prog_name)"},{"line_number":274,"context_line":"        parser.add_argument("},{"line_number":275,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":276,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_fe00a537","line":273,"updated":"2015-06-26 11:43:21.000000000","message":"Could in theory add an --all option here and call volume_client.qos_specs.disassociate_all(parsed_args.qos_specs) if true","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"388208661d6f2e31c05052ac159b02053d5eff5a","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DisassociateQos\u0027)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def get_parser(self, prog_name):"},{"line_number":273,"context_line":"        parser \u003d super(DisassociateQos, self).get_parser(prog_name)"},{"line_number":274,"context_line":"        parser.add_argument("},{"line_number":275,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":276,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_ecb9cdcc","line":273,"in_reply_to":"fa32b979_4f7f8e66","updated":"2015-06-26 16:59:01.000000000","message":"Will look into that.","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"79e8ea5f79a9ad8af55789e7f74cbe990e820404","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DisassociateQos\u0027)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def get_parser(self, prog_name):"},{"line_number":273,"context_line":"        parser \u003d super(DisassociateQos, self).get_parser(prog_name)"},{"line_number":274,"context_line":"        parser.add_argument("},{"line_number":275,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":276,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_c6614013","line":273,"in_reply_to":"fa32b979_663b9439","updated":"2015-06-26 19:34:46.000000000","message":"Maybe \n\n    os volume qos disassociate --type blah spec\n    os volume qos disassociate --all spec","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"0b6dd3a8069ea8244ebd8e37df0d95e228804a54","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DisassociateQos\u0027)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def get_parser(self, prog_name):"},{"line_number":273,"context_line":"        parser \u003d super(DisassociateQos, self).get_parser(prog_name)"},{"line_number":274,"context_line":"        parser.add_argument("},{"line_number":275,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":276,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_663b9439","line":273,"in_reply_to":"fa32b979_72cd965c","updated":"2015-06-26 19:26:41.000000000","message":"It\u0027s not possible to have a positional and an optional argument in the same mutually exclusive group, it yields an exception \"mutually exclusive arguments must be optional\". So this means we\u0027d need to put --volume-type as an optional parameter and this is what I\u0027m not keen about since the volume-type is a positional parameter in \"associate\".\nWhat we could maybe do is to keep volume-type positional and catch if the volume type is \u0027all\u0027 then do disassociate all, otherwise disassociate from name_or_id.","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"8e199dc25adfda2d24bfab6638ddb15262eecbfe","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DisassociateQos\u0027)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def get_parser(self, prog_name):"},{"line_number":273,"context_line":"        parser \u003d super(DisassociateQos, self).get_parser(prog_name)"},{"line_number":274,"context_line":"        parser.add_argument("},{"line_number":275,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":276,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_4f7f8e66","line":273,"in_reply_to":"fa32b979_743589a6","updated":"2015-06-26 16:08:04.000000000","message":"I haven\u0027t tried a mutual exclusive group with a parameter and positional parameter, but it might work.  https://docs.python.org/3/library/argparse.html#mutual-exclusion","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"3c2b231ff77d509d31a265fbae26d1e513ffdca1","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DisassociateQos\u0027)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def get_parser(self, prog_name):"},{"line_number":273,"context_line":"        parser \u003d super(DisassociateQos, self).get_parser(prog_name)"},{"line_number":274,"context_line":"        parser.add_argument("},{"line_number":275,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":276,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_72cd965c","line":273,"in_reply_to":"fa32b979_ecb9cdcc","updated":"2015-06-26 17:45:15.000000000","message":"i think you can have a mutuallly exclusive set between a positional and an optional argument. i understand your thoughts, defaulting to disassociate all is dangerous. we might have to make them both optional....\n\ni think ideally we want the following to work:\n\n  disassociate --volume \u003cvol-name\u003e | --all\n  disassociate --volume vol1\n  disassociate --all","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":9061,"name":"David Moreau Simard","email":"moi@dmsimard.com","username":"dmsimard"},"change_message_id":"323069c8b6d2b7067c263fcb3dfaa78a34064020","unresolved":false,"context_lines":[{"line_number":270,"context_line":"    log \u003d logging.getLogger(__name__ + \u0027.DisassociateQos\u0027)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    def get_parser(self, prog_name):"},{"line_number":273,"context_line":"        parser \u003d super(DisassociateQos, self).get_parser(prog_name)"},{"line_number":274,"context_line":"        parser.add_argument("},{"line_number":275,"context_line":"            \u0027qos_specs\u0027,"},{"line_number":276,"context_line":"            metavar\u003d\u0027\u003cqos-specs\u003e\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_743589a6","line":273,"in_reply_to":"fa32b979_fe00a537","updated":"2015-06-26 15:53:30.000000000","message":"I tried doing that but like I said in my previous comment, I wasn\u0027t really satisfied.. See, if I add an optional \"--all\" parameter, I also need to make the volume_type optional. This makes it so there are two optional parameters: --all and --volume-type. That\u0027s fine in itself but the dissociate command is no longer similar to the associate command. I would say it\u0027s better to keep both methods with the same parameters? So then, what do you do? Add a \"--all\" to associate ? There\u0027s no API call for that so we\u0027d need to do it by hand. Would love to hear your thoughts.","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"79e8ea5f79a9ad8af55789e7f74cbe990e820404","unresolved":false,"context_lines":[{"line_number":279,"context_line":"        parser.add_argument("},{"line_number":280,"context_line":"            \u0027volume_type\u0027,"},{"line_number":281,"context_line":"            metavar\u003d\u0027\u003cvolume-type\u003e\u0027,"},{"line_number":282,"context_line":"            help\u003d\u0027Volume type to associate the QoS (name or ID)\u0027,"},{"line_number":283,"context_line":"        )"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        return parser"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa32b979_a6a2fc49","line":282,"updated":"2015-06-26 19:34:46.000000000","message":"disassociate","commit_id":"7b03b4365a2b7265be204b038ca6d3493f2c1d97"}],"openstackclient/volume/v1/qos_specs.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f5150b369f9431a40d4914cba9fa9c9e4b5a3796","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            help\u003d\u0027New QoS specification name\u0027,"},{"line_number":40,"context_line":"        )"},{"line_number":41,"context_line":"        consumer_choices \u003d [\u0027front-end\u0027, \u0027back-end\u0027, \u0027both\u0027]"},{"line_number":42,"context_line":"        parser.add_argument("},{"line_number":43,"context_line":"            \u0027consumer\u0027,"},{"line_number":44,"context_line":"            metavar\u003d\u0027\u003cconsumer\u003e\u0027,"},{"line_number":45,"context_line":"            choices\u003dconsumer_choices,"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa32b979_7a29e19a","line":42,"updated":"2015-06-27 01:35:20.000000000","message":"just a note here, you could add:\n\n  default\u003d\u0027both\u0027\n\nto specify a default, and make the argument optional with --consumer.\n\nif this makes sense, i don\u0027t know enough about QoS","commit_id":"86ef18e438a34166f48de260558c9a177a939150"}]}
