)]}'
{"novaclient/tests/unit/v2/test_volumes.py":[{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"0bff2ea9569ae6291493edb26a426edaca619fe2","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class VolumesTest(utils.TestCase):"},{"line_number":23,"context_line":"    api_version \u003d \"2.0\""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def setUp(self):"},{"line_number":26,"context_line":"        super(VolumesTest, self).setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_0b35c3da","line":23,"range":{"start_line":23,"start_character":4,"end_line":23,"end_character":16},"updated":"2017-07-12 15:50:19.000000000","message":"NIT: I prefer to use upper case for class level variables.","commit_id":"e11a1266bb9d0b904045575a2c59b894a3d6666f"}],"novaclient/v2/servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1347fbae070b94ba8b6a6ab4c5188ae81f28737f","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    @api_versions.wraps(\"2.49\")"},{"line_number":588,"context_line":"    def interface_attach(self, port_id, net_id, fixed_ip, tag\u003dNone):"},{"line_number":589,"context_line":"        \"\"\""},{"line_number":590,"context_line":"        Attach a network interface to an instance."},{"line_number":591,"context_line":"        \"\"\""},{"line_number":592,"context_line":"        return self.manager.interface_attach(self, port_id, net_id, fixed_ip,"},{"line_number":593,"context_line":"                                             tag)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_80cad317","line":590,"range":{"start_line":590,"start_character":8,"end_line":590,"end_character":50},"updated":"2017-07-07 20:32:39.000000000","message":"with an optional tag?","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c433d25068b1c9b54adc41da6bd0917666141b91","unresolved":false,"context_lines":[{"line_number":587,"context_line":"    @api_versions.wraps(\"2.49\")"},{"line_number":588,"context_line":"    def interface_attach(self, port_id, net_id, fixed_ip, tag\u003dNone):"},{"line_number":589,"context_line":"        \"\"\""},{"line_number":590,"context_line":"        Attach a network interface to an instance."},{"line_number":591,"context_line":"        \"\"\""},{"line_number":592,"context_line":"        return self.manager.interface_attach(self, port_id, net_id, fixed_ip,"},{"line_number":593,"context_line":"                                             tag)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_ade5c0de","line":590,"range":{"start_line":590,"start_character":8,"end_line":590,"end_character":50},"in_reply_to":"3f1d235d_80cad317","updated":"2017-07-08 15:15:33.000000000","message":"Done","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1347fbae070b94ba8b6a6ab4c5188ae81f28737f","unresolved":false,"context_lines":[{"line_number":1875,"context_line":"        Attach a network_interface to an instance."},{"line_number":1876,"context_line":""},{"line_number":1877,"context_line":"        :param server: The :class:`Server` (or its ID) to attach to."},{"line_number":1878,"context_line":"        :param port_id: The port to attach."},{"line_number":1879,"context_line":"        :param net_id: The ID of the network to attach."},{"line_number":1880,"context_line":"        :param fixed_ip: The fixed IP addresses."},{"line_number":1881,"context_line":"        :param tag: The tag."},{"line_number":1882,"context_line":"        \"\"\""},{"line_number":1883,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_2002df3f","line":1880,"range":{"start_line":1878,"start_character":8,"end_line":1880,"end_character":48},"updated":"2017-07-07 20:32:39.000000000","message":"If we\u0027re going to describe these, it would probably be good to note a few restrictions on the server side:\n\n1. You can\u0027t request port_id and net_id at the same time.\n\n2. If you specify fixed_ip, you have to also specify net_id.","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c433d25068b1c9b54adc41da6bd0917666141b91","unresolved":false,"context_lines":[{"line_number":1875,"context_line":"        Attach a network_interface to an instance."},{"line_number":1876,"context_line":""},{"line_number":1877,"context_line":"        :param server: The :class:`Server` (or its ID) to attach to."},{"line_number":1878,"context_line":"        :param port_id: The port to attach."},{"line_number":1879,"context_line":"        :param net_id: The ID of the network to attach."},{"line_number":1880,"context_line":"        :param fixed_ip: The fixed IP addresses."},{"line_number":1881,"context_line":"        :param tag: The tag."},{"line_number":1882,"context_line":"        \"\"\""},{"line_number":1883,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_8d032474","line":1880,"range":{"start_line":1878,"start_character":8,"end_line":1880,"end_character":48},"in_reply_to":"3f1d235d_2002df3f","updated":"2017-07-08 15:15:33.000000000","message":"Done","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"0bff2ea9569ae6291493edb26a426edaca619fe2","unresolved":false,"context_lines":[{"line_number":1884,"context_line":"        :param tag: The tag."},{"line_number":1885,"context_line":"        \"\"\""},{"line_number":1886,"context_line":""},{"line_number":1887,"context_line":"        body \u003d {\u0027interfaceAttachment\u0027: {}}"},{"line_number":1888,"context_line":"        if port_id:"},{"line_number":1889,"context_line":"            body[\u0027interfaceAttachment\u0027][\u0027port_id\u0027] \u003d port_id"},{"line_number":1890,"context_line":"        if net_id:"},{"line_number":1891,"context_line":"            body[\u0027interfaceAttachment\u0027][\u0027net_id\u0027] \u003d net_id"},{"line_number":1892,"context_line":"        if fixed_ip:"},{"line_number":1893,"context_line":"            body[\u0027interfaceAttachment\u0027][\u0027fixed_ips\u0027] \u003d ["},{"line_number":1894,"context_line":"                {\u0027ip_address\u0027: fixed_ip}]"},{"line_number":1895,"context_line":"        if tag:"},{"line_number":1896,"context_line":"            body[\u0027interfaceAttachment\u0027][\u0027tag\u0027] \u003d tag"},{"line_number":1897,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f1a1f67_2babdfd6","line":1894,"range":{"start_line":1887,"start_character":8,"end_line":1894,"end_character":41},"updated":"2017-07-12 15:50:19.000000000","message":"looks like a code duplication. it would be nice to replace these and L1860-1867 by a single method.","commit_id":"e11a1266bb9d0b904045575a2c59b894a3d6666f"}],"novaclient/v2/shell.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1347fbae070b94ba8b6a6ab4c5188ae81f28737f","unresolved":false,"context_lines":[{"line_number":2343,"context_line":"    \u0027--tag\u0027,"},{"line_number":2344,"context_line":"    metavar\u003d\u0027\u003ctag\u003e\u0027,"},{"line_number":2345,"context_line":"    default\u003dNone,"},{"line_number":2346,"context_line":"    help\u003d_(\u0027Tag for the attachment.\u0027),"},{"line_number":2347,"context_line":"    start_version\u003d\"2.49\")"},{"line_number":2348,"context_line":"def do_volume_attach(cs, args):"},{"line_number":2349,"context_line":"    \"\"\"Attach a volume to a server.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_c08d6bd4","line":2346,"range":{"start_line":2346,"start_character":24,"end_line":2346,"end_character":34},"updated":"2017-07-07 20:32:39.000000000","message":"attached volume","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c433d25068b1c9b54adc41da6bd0917666141b91","unresolved":false,"context_lines":[{"line_number":2343,"context_line":"    \u0027--tag\u0027,"},{"line_number":2344,"context_line":"    metavar\u003d\u0027\u003ctag\u003e\u0027,"},{"line_number":2345,"context_line":"    default\u003dNone,"},{"line_number":2346,"context_line":"    help\u003d_(\u0027Tag for the attachment.\u0027),"},{"line_number":2347,"context_line":"    start_version\u003d\"2.49\")"},{"line_number":2348,"context_line":"def do_volume_attach(cs, args):"},{"line_number":2349,"context_line":"    \"\"\"Attach a volume to a server.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_6df8c87b","line":2346,"range":{"start_line":2346,"start_character":24,"end_line":2346,"end_character":34},"in_reply_to":"3f1d235d_c08d6bd4","updated":"2017-07-08 15:15:33.000000000","message":"Done","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"d40a9cb31e7f83fa43fa4be9d31bba99483bdd2f","unresolved":false,"context_lines":[{"line_number":2357,"context_line":"    volume \u003d cs.volumes.create_server_volume(_find_server(cs, args.server).id,"},{"line_number":2358,"context_line":"                                             args.volume,"},{"line_number":2359,"context_line":"                                             args.device,"},{"line_number":2360,"context_line":"                                             **update_kwargs)"},{"line_number":2361,"context_line":"    _print_volume(volume)"},{"line_number":2362,"context_line":""},{"line_number":2363,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_2d49b05f","line":2360,"updated":"2017-07-08 12:37:35.000000000","message":"There\u0027s a default for tag, right? So we should just be able to use args.tag here and get rid of update_kwargs entirely.","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c433d25068b1c9b54adc41da6bd0917666141b91","unresolved":false,"context_lines":[{"line_number":2357,"context_line":"    volume \u003d cs.volumes.create_server_volume(_find_server(cs, args.server).id,"},{"line_number":2358,"context_line":"                                             args.volume,"},{"line_number":2359,"context_line":"                                             args.device,"},{"line_number":2360,"context_line":"                                             **update_kwargs)"},{"line_number":2361,"context_line":"    _print_volume(volume)"},{"line_number":2362,"context_line":""},{"line_number":2363,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_cd2ebcf9","line":2360,"in_reply_to":"3f1d235d_2d49b05f","updated":"2017-07-08 15:15:33.000000000","message":"Up to 2.48, there is not \u0027tag\u0027 argument in \u0027create_server_volume\u0027 method. So \u0027tag\u0027 argument is passed by this way.\n\nIt is similar to the following code.\n\nhttps://github.com/openstack/python-novaclient/blob/da5b5631435b3d1eeaae45f5399ba565552b566e/novaclient/v2/shell.py#L3331-L3341","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"6f54810cdc96f9aed209535785707027faf834d3","unresolved":false,"context_lines":[{"line_number":2357,"context_line":"    volume \u003d cs.volumes.create_server_volume(_find_server(cs, args.server).id,"},{"line_number":2358,"context_line":"                                             args.volume,"},{"line_number":2359,"context_line":"                                             args.device,"},{"line_number":2360,"context_line":"                                             **update_kwargs)"},{"line_number":2361,"context_line":"    _print_volume(volume)"},{"line_number":2362,"context_line":""},{"line_number":2363,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_de11a755","line":2360,"in_reply_to":"3f1d235d_cd2ebcf9","updated":"2017-07-10 14:13:10.000000000","message":"Ah, right you are. I thought we could do without update_kwargs because the create_server_volume and interface_attach methods are versioned-wrapped and we don\u0027t need to match kwargs to the method, but that doesn\u0027t take into account the fact that we call the \"tagless\" method with tag\u003dNone if we\u0027re \u003c 2.49.","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1347fbae070b94ba8b6a6ab4c5188ae81f28737f","unresolved":false,"context_lines":[{"line_number":4392,"context_line":"    metavar\u003d\u0027\u003ctag\u003e\u0027,"},{"line_number":4393,"context_line":"    default\u003dNone,"},{"line_number":4394,"context_line":"    dest\u003d\"tag\","},{"line_number":4395,"context_line":"    help\u003d_(\u0027Tag for the attachment.\u0027),"},{"line_number":4396,"context_line":"    start_version\u003d\"2.49\")"},{"line_number":4397,"context_line":"def do_interface_attach(cs, args):"},{"line_number":4398,"context_line":"    \"\"\"Attach a network interface to a server.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_20877fb9","line":4395,"range":{"start_line":4395,"start_character":24,"end_line":4395,"end_character":34},"updated":"2017-07-07 20:32:39.000000000","message":"attached interface","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c433d25068b1c9b54adc41da6bd0917666141b91","unresolved":false,"context_lines":[{"line_number":4392,"context_line":"    metavar\u003d\u0027\u003ctag\u003e\u0027,"},{"line_number":4393,"context_line":"    default\u003dNone,"},{"line_number":4394,"context_line":"    dest\u003d\"tag\","},{"line_number":4395,"context_line":"    help\u003d_(\u0027Tag for the attachment.\u0027),"},{"line_number":4396,"context_line":"    start_version\u003d\"2.49\")"},{"line_number":4397,"context_line":"def do_interface_attach(cs, args):"},{"line_number":4398,"context_line":"    \"\"\"Attach a network interface to a server.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_6d3d682b","line":4395,"range":{"start_line":4395,"start_character":24,"end_line":4395,"end_character":34},"in_reply_to":"3f1d235d_20877fb9","updated":"2017-07-08 15:15:33.000000000","message":"Done","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"d40a9cb31e7f83fa43fa4be9d31bba99483bdd2f","unresolved":false,"context_lines":[{"line_number":4403,"context_line":"        update_kwargs[\u0027tag\u0027] \u003d args.tag"},{"line_number":4404,"context_line":""},{"line_number":4405,"context_line":"    res \u003d server.interface_attach(args.port_id, args.net_id, args.fixed_ip,"},{"line_number":4406,"context_line":"                                  **update_kwargs)"},{"line_number":4407,"context_line":"    if isinstance(res, dict):"},{"line_number":4408,"context_line":"        utils.print_dict(res)"},{"line_number":4409,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_0d46f450","line":4406,"updated":"2017-07-08 12:37:35.000000000","message":"Ditto.","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"c433d25068b1c9b54adc41da6bd0917666141b91","unresolved":false,"context_lines":[{"line_number":4403,"context_line":"        update_kwargs[\u0027tag\u0027] \u003d args.tag"},{"line_number":4404,"context_line":""},{"line_number":4405,"context_line":"    res \u003d server.interface_attach(args.port_id, args.net_id, args.fixed_ip,"},{"line_number":4406,"context_line":"                                  **update_kwargs)"},{"line_number":4407,"context_line":"    if isinstance(res, dict):"},{"line_number":4408,"context_line":"        utils.print_dict(res)"},{"line_number":4409,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3f1d235d_4d3aac34","line":4406,"in_reply_to":"3f1d235d_0d46f450","updated":"2017-07-08 15:15:33.000000000","message":"ditto","commit_id":"ca598532b1f7fbdb83f817401b446ff347693794"}],"releasenotes/notes/microversion-v2_49-56bde596ee13366d.yaml":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"d570aa09b61dac714ebd8ac48f01de1259e3789a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for microversion 2.49 that enables users to"},{"line_number":5,"context_line":"    attach and detach tagged interfaces and volumes."},{"line_number":6,"context_line":"    A new ``--tag`` option is added to ``nova volume-attach`` and"},{"line_number":7,"context_line":"    ``nova interface-attach`` commands."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3f1d235d_33b7b489","line":5,"range":{"start_line":4,"start_character":45,"end_line":5,"end_character":51},"updated":"2017-07-10 14:15:08.000000000","message":"I\u0027d drop \"and detach\". You\u0027ve always been able to detach tagged interfaces and volumes, it\u0027s just that the device metadata wasn\u0027t being updated before 2.49.","commit_id":"3f1d4c92a83f18ee2db8a71af5853710adacafc8"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"fa799b718709528738a104945df4db062871d0b8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added support for microversion 2.49 that enables users to"},{"line_number":5,"context_line":"    attach and detach tagged interfaces and volumes."},{"line_number":6,"context_line":"    A new ``--tag`` option is added to ``nova volume-attach`` and"},{"line_number":7,"context_line":"    ``nova interface-attach`` commands."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"3f1d235d_c0719ae0","line":5,"range":{"start_line":4,"start_character":45,"end_line":5,"end_character":51},"in_reply_to":"3f1d235d_33b7b489","updated":"2017-07-11 16:18:39.000000000","message":"Done","commit_id":"3f1d4c92a83f18ee2db8a71af5853710adacafc8"}]}
