)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f832c5e8ba13d8737a15c814808f4eae776ee364","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Switch server create to block_device_mapping_v2"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Current server create relay on block_device_mapping arg which is"},{"line_number":10,"context_line":"converted to block_device_mapping_v2 by _parse_block_device_mapping()."},{"line_number":11,"context_line":"block_device_mapping format require device_name which is leads to"},{"line_number":12,"context_line":"hard-codded hack in --volume key handler to KVM specific."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a71b18c_e20a2cd1","line":9,"range":{"start_line":9,"start_character":22,"end_line":9,"end_character":27},"updated":"2016-12-07 04:18:27.000000000","message":"relies*","commit_id":"555dec80d03634451365cbf2d93fcdfd50e70a93"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f832c5e8ba13d8737a15c814808f4eae776ee364","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Switch server create to block_device_mapping_v2"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Current server create relay on block_device_mapping arg which is"},{"line_number":10,"context_line":"converted to block_device_mapping_v2 by _parse_block_device_mapping()."},{"line_number":11,"context_line":"block_device_mapping format require device_name which is leads to"},{"line_number":12,"context_line":"hard-codded hack in --volume key handler to KVM specific."},{"line_number":13,"context_line":"block_device_mapping_v2 format is more friendly to hypervisiors."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a71b18c_020e48e4","line":10,"range":{"start_line":10,"start_character":40,"end_line":10,"end_character":67},"updated":"2016-12-07 04:18:27.000000000","message":"please mention this is a novaclient function","commit_id":"555dec80d03634451365cbf2d93fcdfd50e70a93"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f832c5e8ba13d8737a15c814808f4eae776ee364","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Current server create relay on block_device_mapping arg which is"},{"line_number":10,"context_line":"converted to block_device_mapping_v2 by _parse_block_device_mapping()."},{"line_number":11,"context_line":"block_device_mapping format require device_name which is leads to"},{"line_number":12,"context_line":"hard-codded hack in --volume key handler to KVM specific."},{"line_number":13,"context_line":"block_device_mapping_v2 format is more friendly to hypervisiors."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I7bac3d870dd9ca404093142f8bce22a62e49180d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a71b18c_42fcc0b7","line":12,"range":{"start_line":12,"start_character":5,"end_line":12,"end_character":11},"updated":"2016-12-07 04:18:27.000000000","message":"coded*","commit_id":"555dec80d03634451365cbf2d93fcdfd50e70a93"}],"openstackclient/compute/v2/server.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f832c5e8ba13d8737a15c814808f4eae776ee364","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def _get_ip_address(addresses, address_type, ip_address_family):"},{"line_number":83,"context_line":"        # Old style addresses"},{"line_number":84,"context_line":"    if address_type in addresses:"},{"line_number":85,"context_line":"        for addy in addresses[address_type]:"},{"line_number":86,"context_line":"            if int(addy[\u0027version\u0027]) in ip_address_family:"},{"line_number":87,"context_line":"                return addy[\u0027addr\u0027]"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    # New style addresses"},{"line_number":90,"context_line":"    new_address_type \u003d address_type"},{"line_number":91,"context_line":"    if address_type \u003d\u003d \u0027public\u0027:"},{"line_number":92,"context_line":"        new_address_type \u003d \u0027floating\u0027"},{"line_number":93,"context_line":"    if address_type \u003d\u003d \u0027private\u0027:"},{"line_number":94,"context_line":"        new_address_type \u003d \u0027fixed\u0027"},{"line_number":95,"context_line":"    for network in addresses:"},{"line_number":96,"context_line":"        for addy in addresses[network]:"},{"line_number":97,"context_line":"            # Case where it is list of strings"},{"line_number":98,"context_line":"            if isinstance(addy, six.string_types):"},{"line_number":99,"context_line":"                if new_address_type \u003d\u003d \u0027fixed\u0027:"},{"line_number":100,"context_line":"                    return addresses[network][0]"},{"line_number":101,"context_line":"                else:"},{"line_number":102,"context_line":"                    return addresses[network][-1]"},{"line_number":103,"context_line":"            # Case where it is a dict"},{"line_number":104,"context_line":"            if \u0027OS-EXT-IPS:type\u0027 not in addy:"},{"line_number":105,"context_line":"                continue"},{"line_number":106,"context_line":"            if addy[\u0027OS-EXT-IPS:type\u0027] \u003d\u003d new_address_type:"},{"line_number":107,"context_line":"                if int(addy[\u0027version\u0027]) in ip_address_family:"},{"line_number":108,"context_line":"                    return addy[\u0027addr\u0027]"},{"line_number":109,"context_line":"    msg \u003d _(\"ERROR: No %(type)s IP version %(family)s address found\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_2228a432","line":106,"range":{"start_line":84,"start_character":4,"end_line":106,"end_character":59},"updated":"2016-12-07 04:18:27.000000000","message":"can you undo this change? i realize the indentation is wrong, but we can fix that in a separate patch","commit_id":"555dec80d03634451365cbf2d93fcdfd50e70a93"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f832c5e8ba13d8737a15c814808f4eae776ee364","unresolved":false,"context_lines":[{"line_number":529,"context_line":"            nic_info \u003d {\"net-id\": \"\", \"v4-fixed-ip\": \"\","},{"line_number":530,"context_line":"                        \"v6-fixed-ip\": \"\", \"port-id\": \"\"}"},{"line_number":531,"context_line":"            nic_info.update(dict(kv_str.split(\"\u003d\", 1)"},{"line_number":532,"context_line":"                                 for kv_str in nic_str.split(\",\")))"},{"line_number":533,"context_line":"            if bool(nic_info[\"net-id\"]) \u003d\u003d bool(nic_info[\"port-id\"]):"},{"line_number":534,"context_line":"                msg \u003d _(\"either net-id or port-id should be specified \""},{"line_number":535,"context_line":"                        \"but not both\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_a214b4e8","line":532,"range":{"start_line":532,"start_character":28,"end_line":532,"end_character":33},"updated":"2016-12-07 04:18:27.000000000","message":"undo this change as well","commit_id":"555dec80d03634451365cbf2d93fcdfd50e70a93"},{"author":{"_account_id":24080,"name":"jiahui.qiang","email":"jiahui.qiang@easystack.cn","username":"qiangjiahui"},"change_message_id":"37b21b45adff97750fbbdab126f4eeed92bd9024","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                )"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        block_device_mapping_v2 \u003d []"},{"line_number":496,"context_line":"        if volume:"},{"line_number":497,"context_line":"            vol_id \u003d utils.find_resource("},{"line_number":498,"context_line":"                volume_client.volumes,"},{"line_number":499,"context_line":"                volume,"},{"line_number":500,"context_line":"            ).id"},{"line_number":501,"context_line":"            block_device_mapping_v2 \u003d [{\u0027uuid\u0027: vol_id,"},{"line_number":502,"context_line":"                                        \u0027boot_index\u0027: \u00270\u0027,"},{"line_number":503,"context_line":"                                        \u0027source_type\u0027: \u0027volume\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"7a3c09a3_c83837a3","line":500,"range":{"start_line":496,"start_character":10,"end_line":500,"end_character":16},"updated":"2017-01-17 12:00:03.000000000","message":"\u0027volume\u0027 is worked to be id for a volume in L450-L454 ?","commit_id":"4b984abe3360d2a816c5cd2e59b6ccac1273a20d"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"1a8877c2a9b9ab28042d120f9d0c0629c520d432","unresolved":false,"context_lines":[{"line_number":499,"context_line":"                                        \u0027source_type\u0027: \u0027volume\u0027,"},{"line_number":500,"context_line":"                                        \u0027destination_type\u0027: \u0027volume\u0027"},{"line_number":501,"context_line":"                                        }]"},{"line_number":502,"context_line":"        else:"},{"line_number":503,"context_line":"            for dev_map in parsed_args.block_device_mapping:"},{"line_number":504,"context_line":"                dev_name, dev_map \u003d dev_map.split(\u0027\u003d\u0027, 1)"},{"line_number":505,"context_line":"                if dev_map:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_d380b88d","line":502,"range":{"start_line":502,"start_character":7,"end_line":502,"end_character":13},"updated":"2017-01-18 06:40:42.000000000","message":"The \"else\" block that create server from bootable volume and attach regular volume in the same command, it works at boot from image.\n\n    server create --volume zzz --block-device-mapping vdb\u003dyyy:volume\n    server create --image xxx --block-device-mapping vdb\u003dyyy:volume","commit_id":"d613b0518c4b4178b4e2d686c7cbbd514915e261"},{"author":{"_account_id":9701,"name":"Nikita Gerasimov","email":"nikita.gerasimov@oracle.com","username":"nikitych"},"change_message_id":"cbc16027e8f6247d899aa70c437dd2f513b853e2","unresolved":false,"context_lines":[{"line_number":499,"context_line":"                                        \u0027source_type\u0027: \u0027volume\u0027,"},{"line_number":500,"context_line":"                                        \u0027destination_type\u0027: \u0027volume\u0027"},{"line_number":501,"context_line":"                                        }]"},{"line_number":502,"context_line":"        else:"},{"line_number":503,"context_line":"            for dev_map in parsed_args.block_device_mapping:"},{"line_number":504,"context_line":"                dev_name, dev_map \u003d dev_map.split(\u0027\u003d\u0027, 1)"},{"line_number":505,"context_line":"                if dev_map:"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a3c09a3_5a984678","line":502,"range":{"start_line":502,"start_character":7,"end_line":502,"end_character":13},"in_reply_to":"7a3c09a3_d380b88d","updated":"2017-01-18 13:29:17.000000000","message":"This Change is not touching \"else\". It\u0027s original behavior of \"--block-device-mapping\". If you thing that is it a wrong, please, guide me bug number and I\u0027ll try to fix it.","commit_id":"d613b0518c4b4178b4e2d686c7cbbd514915e261"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8771f99914ff24444da8f948893de0c758caddc8","unresolved":false,"context_lines":[{"line_number":525,"context_line":"                            dev_map[0],"},{"line_number":526,"context_line":"                        ).id}"},{"line_number":527,"context_line":"                    # Block device mapping v1 compatibility"},{"line_number":528,"context_line":"                    if len(dev_map) \u003e 1 and \\"},{"line_number":529,"context_line":"                            dev_map[1] in (\u0027volume\u0027, \u0027snapshot\u0027):"},{"line_number":530,"context_line":"                        mapping[\u0027source_type\u0027] \u003d dev_map[1]"},{"line_number":531,"context_line":"                    else:"},{"line_number":532,"context_line":"                        mapping[\u0027source_type\u0027] \u003d \u0027volume\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_deef98ae","line":529,"range":{"start_line":528,"start_character":23,"end_line":529,"end_character":64},"updated":"2017-01-25 22:10:34.000000000","message":"nit, use () instead of \\","commit_id":"9f1796580190dbeaf1bb7c365c8d30a5295075e1"}],"openstackclient/tests/functional/compute/v2/test_server.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"0378a1e9bdd076f42c1b6726bc773fbd92dfd5c0","unresolved":false,"context_lines":[{"line_number":315,"context_line":"                                    \u0027 \u0027 + volume_name + opts)"},{"line_number":316,"context_line":"        self.assertEqual(volume_name + \"\\n\", raw_output)"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        def volume_delete():"},{"line_number":319,"context_line":"            \"\"\"Delete created volume\"\"\""},{"line_number":320,"context_line":"            self.openstack(\u0027volume delete \u0027 + volume_name)"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_742bf294","line":318,"updated":"2017-01-15 19:28:13.000000000","message":"You don\u0027t really need that function","commit_id":"54b010e1da156e3083e9c0e4ee9c036e81ec5f48"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"0378a1e9bdd076f42c1b6726bc773fbd92dfd5c0","unresolved":false,"context_lines":[{"line_number":319,"context_line":"            \"\"\"Delete created volume\"\"\""},{"line_number":320,"context_line":"            self.openstack(\u0027volume delete \u0027 + volume_name)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        self.addCleanup(volume_delete)"},{"line_number":323,"context_line":"        volume_wait_for(\"volume\", volume_name, \"available\")"},{"line_number":324,"context_line":"        # create server"},{"line_number":325,"context_line":"        server_name \u003d data_utils.rand_name(\u0027TestServer\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a3c09a3_94185e86","line":322,"updated":"2017-01-15 19:28:13.000000000","message":"You can do:\n  self.addCleanup(self.openstack, \u0027volume delete \u0027 + volume_name)","commit_id":"54b010e1da156e3083e9c0e4ee9c036e81ec5f48"}],"releasenotes/notes/bug-1647406-c936581034a1b6e4.yaml":[{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"a2ad9d9c4a09ba5ea82664e28569f7e6083851c2","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Switch ``openstackclient server create`` command to block device mapping api v2."},{"line_number":4,"context_line":"    ``--block-device-mapping`` argument behavior remained compatible with block device"},{"line_number":5,"context_line":"    mapping v1, but ``--volume`` argument behaviour changed. Now volume ``device_name``"},{"line_number":6,"context_line":"    is not hard-coded to *\u0027vda\u0027*, ``boot_index`` use instead."},{"line_number":7,"context_line":"    [Bug `1647406 \u003chttps://bugs.launchpad.net/python-openstackclient/+bug/1647406\u003e`_]"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"7a3c09a3_43ca0470","line":6,"updated":"2017-01-18 19:45:36.000000000","message":"I am afraid this is not clear to me what exactly breaks with this change.  What will a user who uses --volume with --block-device-mapping need to do?\n\nif the answer to that question is not \"nothing\" then this is a breaking CLI change that we need to sort out how to handle.  It may need to wait for OSC 4.0.","commit_id":"d613b0518c4b4178b4e2d686c7cbbd514915e261"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8771f99914ff24444da8f948893de0c758caddc8","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    The device name of the boot volume specificed in the ``--volume`` option"},{"line_number":10,"context_line":"    is no longer assumed to be *\u0027vda\u0027* but now uses the hypervisor\u0027s boot"},{"line_number":11,"context_line":"    index to obtain the device name.  This maintains the status quo for"},{"line_number":12,"context_line":"    **QEMU/KVM** hypervisors but **XEN**, **parallels** and others "},{"line_number":13,"context_line":"    *virt types* that have device naming is different from ``vd*``"},{"line_number":14,"context_line":"    should now also work correctly."},{"line_number":15,"context_line":"    [:lpbug:`1497845`]"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3a461143_ded87820","line":12,"range":{"start_line":12,"start_character":66,"end_line":12,"end_character":67},"updated":"2017-01-25 22:10:34.000000000","message":"white space","commit_id":"9f1796580190dbeaf1bb7c365c8d30a5295075e1"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"8771f99914ff24444da8f948893de0c758caddc8","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    is no longer assumed to be *\u0027vda\u0027* but now uses the hypervisor\u0027s boot"},{"line_number":11,"context_line":"    index to obtain the device name.  This maintains the status quo for"},{"line_number":12,"context_line":"    **QEMU/KVM** hypervisors but **XEN**, **parallels** and others "},{"line_number":13,"context_line":"    *virt types* that have device naming is different from ``vd*``"},{"line_number":14,"context_line":"    should now also work correctly."},{"line_number":15,"context_line":"    [:lpbug:`1497845`]"},{"line_number":16,"context_line":"    [:lpbug:`1647406`]"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3a461143_bedbac1a","line":13,"range":{"start_line":13,"start_character":61,"end_line":13,"end_character":63},"updated":"2017-01-25 22:10:34.000000000","message":"vda?","commit_id":"9f1796580190dbeaf1bb7c365c8d30a5295075e1"}]}
