)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"8d26944209caf61815b3f8c0916fe05573617885","unresolved":false,"context_lines":[{"line_number":17,"context_line":"is used in nova flavor disk_gb and instance_info/root_gb in standalone"},{"line_number":18,"context_line":"tests. By default is IRONIC_VM_SPECS_DISK - IRONIC_VM_EPHEMERAL_DISK"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Related-Bug: #1660606"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Ic04b0f134e20d9937a610a14d7c4128f45738eeb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":75,"id":"9a30ddce_81b8d7c9","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":11},"updated":"2017-03-09 22:35:51.000000000","message":"nit: This could probably be \"Partial-Bug\" instead","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77994c2591e814cbd9558094f7d64908dc541478","unresolved":false,"context_lines":[{"line_number":17,"context_line":"is used in nova flavor disk_gb and instance_info/root_gb in standalone"},{"line_number":18,"context_line":"tests. By default is IRONIC_VM_SPECS_DISK - IRONIC_VM_EPHEMERAL_DISK"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Related-Bug: #1660606"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Ic04b0f134e20d9937a610a14d7c4128f45738eeb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":75,"id":"9a30ddce_f006ad1a","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":11},"in_reply_to":"9a30ddce_81b8d7c9","updated":"2017-03-10 08:42:55.000000000","message":"Done","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"}],"devstack/lib/ironic":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"829c533e559e48bd0507b71f8a3675e05770d22b","unresolved":false,"context_lines":[{"line_number":121,"context_line":"IRONIC_VM_SPECS_DISK\u003d${IRONIC_VM_SPECS_DISK:-10}"},{"line_number":122,"context_line":"IRONIC_VM_SPECS_DISK_FORMAT\u003d${IRONIC_VM_SPECS_DISK_FORMAT:-qcow2}"},{"line_number":123,"context_line":"IRONIC_VM_EPHEMERAL_DISK\u003d${IRONIC_VM_EPHEMERAL_DISK:-0}"},{"line_number":124,"context_line":"IRONIC_VM_ADJUSTED_DISK\u003d${IRONIC_VM_ADJUSTED_DISK:-$(( ${IRONIC_VM_SPECS_DISK}-${IRONIC_VM_EPHEMERAL_DISK} ))}"},{"line_number":125,"context_line":"IRONIC_VM_EMULATOR\u003d${IRONIC_VM_EMULATOR:-\u0027/usr/bin/qemu-system-x86_64\u0027}"},{"line_number":126,"context_line":"IRONIC_VM_ENGINE\u003d${IRONIC_VM_ENGINE:-qemu}"},{"line_number":127,"context_line":"IRONIC_VM_NETWORK_BRIDGE\u003d${IRONIC_VM_NETWORK_BRIDGE:-brbm}"}],"source_content_type":"application/x-shellscript","patch_set":74,"id":"9a30ddce_51f37b0a","line":124,"range":{"start_line":124,"start_character":78,"end_line":124,"end_character":79},"updated":"2017-03-07 18:51:34.000000000","message":"This would be clearer with some spaces around the \u0027-\u0027\n\nAlso a comment on what this variable is for would be good. I realize nothing else seems to have a comment :(","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"374abdef1a656ba6f2a21018d8591493be9f53a4","unresolved":false,"context_lines":[{"line_number":121,"context_line":"IRONIC_VM_SPECS_DISK\u003d${IRONIC_VM_SPECS_DISK:-10}"},{"line_number":122,"context_line":"IRONIC_VM_SPECS_DISK_FORMAT\u003d${IRONIC_VM_SPECS_DISK_FORMAT:-qcow2}"},{"line_number":123,"context_line":"IRONIC_VM_EPHEMERAL_DISK\u003d${IRONIC_VM_EPHEMERAL_DISK:-0}"},{"line_number":124,"context_line":"IRONIC_VM_ADJUSTED_DISK\u003d${IRONIC_VM_ADJUSTED_DISK:-$(( ${IRONIC_VM_SPECS_DISK}-${IRONIC_VM_EPHEMERAL_DISK} ))}"},{"line_number":125,"context_line":"IRONIC_VM_EMULATOR\u003d${IRONIC_VM_EMULATOR:-\u0027/usr/bin/qemu-system-x86_64\u0027}"},{"line_number":126,"context_line":"IRONIC_VM_ENGINE\u003d${IRONIC_VM_ENGINE:-qemu}"},{"line_number":127,"context_line":"IRONIC_VM_NETWORK_BRIDGE\u003d${IRONIC_VM_NETWORK_BRIDGE:-brbm}"}],"source_content_type":"application/x-shellscript","patch_set":74,"id":"9a30ddce_f2f3489c","line":124,"range":{"start_line":124,"start_character":78,"end_line":124,"end_character":79},"in_reply_to":"9a30ddce_0d78cc29","updated":"2017-03-09 08:28:31.000000000","message":"added description, I prefer to left it closes to other DISK options.","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"1543069a19e71e2175c707a9ff48a47c81ffcf3f","unresolved":false,"context_lines":[{"line_number":121,"context_line":"IRONIC_VM_SPECS_DISK\u003d${IRONIC_VM_SPECS_DISK:-10}"},{"line_number":122,"context_line":"IRONIC_VM_SPECS_DISK_FORMAT\u003d${IRONIC_VM_SPECS_DISK_FORMAT:-qcow2}"},{"line_number":123,"context_line":"IRONIC_VM_EPHEMERAL_DISK\u003d${IRONIC_VM_EPHEMERAL_DISK:-0}"},{"line_number":124,"context_line":"IRONIC_VM_ADJUSTED_DISK\u003d${IRONIC_VM_ADJUSTED_DISK:-$(( ${IRONIC_VM_SPECS_DISK}-${IRONIC_VM_EPHEMERAL_DISK} ))}"},{"line_number":125,"context_line":"IRONIC_VM_EMULATOR\u003d${IRONIC_VM_EMULATOR:-\u0027/usr/bin/qemu-system-x86_64\u0027}"},{"line_number":126,"context_line":"IRONIC_VM_ENGINE\u003d${IRONIC_VM_ENGINE:-qemu}"},{"line_number":127,"context_line":"IRONIC_VM_NETWORK_BRIDGE\u003d${IRONIC_VM_NETWORK_BRIDGE:-brbm}"}],"source_content_type":"application/x-shellscript","patch_set":74,"id":"9a30ddce_0d78cc29","line":124,"range":{"start_line":124,"start_character":78,"end_line":124,"end_character":79},"in_reply_to":"9a30ddce_51f37b0a","updated":"2017-03-08 22:54:33.000000000","message":"Given this is calculated, and not a default, maybe it should be set further down, where there are more comments about how/why variables are set how they are. Like after L134?","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"8d26944209caf61815b3f8c0916fe05573617885","unresolved":false,"context_lines":[{"line_number":121,"context_line":"IRONIC_VM_SPECS_DISK\u003d${IRONIC_VM_SPECS_DISK:-10}"},{"line_number":122,"context_line":"IRONIC_VM_SPECS_DISK_FORMAT\u003d${IRONIC_VM_SPECS_DISK_FORMAT:-qcow2}"},{"line_number":123,"context_line":"IRONIC_VM_EPHEMERAL_DISK\u003d${IRONIC_VM_EPHEMERAL_DISK:-0}"},{"line_number":124,"context_line":"# Adjusted disk size by default $IRONIC_VM_SPECS_DISK - $IRONIC_VM_EPHEMERAL_DISK, used by tests with"},{"line_number":125,"context_line":"# partitioned images as instance_info/root_gb"},{"line_number":126,"context_line":"IRONIC_VM_ADJUSTED_DISK\u003d${IRONIC_VM_ADJUSTED_DISK:-$(( ${IRONIC_VM_SPECS_DISK} - ${IRONIC_VM_EPHEMERAL_DISK} ))}"},{"line_number":127,"context_line":"IRONIC_VM_EMULATOR\u003d${IRONIC_VM_EMULATOR:-\u0027/usr/bin/qemu-system-x86_64\u0027}"}],"source_content_type":"application/x-shellscript","patch_set":75,"id":"9a30ddce_21f80b7b","line":124,"range":{"start_line":124,"start_character":33,"end_line":124,"end_character":81},"updated":"2017-03-09 22:35:51.000000000","message":"nit: it\u0027d be nice to have comments explaining what IRONIC_VM_SPECS_DISK and IRONIC_VM_EPHEMERAL_DISK are\n\nit\u0027s obvious after you think about it for a bit, but it could make reading this easier","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"8d26944209caf61815b3f8c0916fe05573617885","unresolved":false,"context_lines":[{"line_number":121,"context_line":"IRONIC_VM_SPECS_DISK\u003d${IRONIC_VM_SPECS_DISK:-10}"},{"line_number":122,"context_line":"IRONIC_VM_SPECS_DISK_FORMAT\u003d${IRONIC_VM_SPECS_DISK_FORMAT:-qcow2}"},{"line_number":123,"context_line":"IRONIC_VM_EPHEMERAL_DISK\u003d${IRONIC_VM_EPHEMERAL_DISK:-0}"},{"line_number":124,"context_line":"# Adjusted disk size by default $IRONIC_VM_SPECS_DISK - $IRONIC_VM_EPHEMERAL_DISK, used by tests with"},{"line_number":125,"context_line":"# partitioned images as instance_info/root_gb"},{"line_number":126,"context_line":"IRONIC_VM_ADJUSTED_DISK\u003d${IRONIC_VM_ADJUSTED_DISK:-$(( ${IRONIC_VM_SPECS_DISK} - ${IRONIC_VM_EPHEMERAL_DISK} ))}"},{"line_number":127,"context_line":"IRONIC_VM_EMULATOR\u003d${IRONIC_VM_EMULATOR:-\u0027/usr/bin/qemu-system-x86_64\u0027}"}],"source_content_type":"application/x-shellscript","patch_set":75,"id":"9a30ddce_01d4e7e9","line":124,"updated":"2017-03-09 22:35:51.000000000","message":"nit: please wrap to fewer chars","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77994c2591e814cbd9558094f7d64908dc541478","unresolved":false,"context_lines":[{"line_number":121,"context_line":"IRONIC_VM_SPECS_DISK\u003d${IRONIC_VM_SPECS_DISK:-10}"},{"line_number":122,"context_line":"IRONIC_VM_SPECS_DISK_FORMAT\u003d${IRONIC_VM_SPECS_DISK_FORMAT:-qcow2}"},{"line_number":123,"context_line":"IRONIC_VM_EPHEMERAL_DISK\u003d${IRONIC_VM_EPHEMERAL_DISK:-0}"},{"line_number":124,"context_line":"# Adjusted disk size by default $IRONIC_VM_SPECS_DISK - $IRONIC_VM_EPHEMERAL_DISK, used by tests with"},{"line_number":125,"context_line":"# partitioned images as instance_info/root_gb"},{"line_number":126,"context_line":"IRONIC_VM_ADJUSTED_DISK\u003d${IRONIC_VM_ADJUSTED_DISK:-$(( ${IRONIC_VM_SPECS_DISK} - ${IRONIC_VM_EPHEMERAL_DISK} ))}"},{"line_number":127,"context_line":"IRONIC_VM_EMULATOR\u003d${IRONIC_VM_EMULATOR:-\u0027/usr/bin/qemu-system-x86_64\u0027}"}],"source_content_type":"application/x-shellscript","patch_set":75,"id":"9a30ddce_d0a7e9ba","line":124,"range":{"start_line":124,"start_character":33,"end_line":124,"end_character":81},"in_reply_to":"9a30ddce_21f80b7b","updated":"2017-03-10 08:42:55.000000000","message":"rewrite without defining global variable in configure_tempest()","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"8d26944209caf61815b3f8c0916fe05573617885","unresolved":false,"context_lines":[{"line_number":1606,"context_line":"        if [[ \"$HOST_TOPOLOGY_ROLE\" !\u003d \u0027subnode\u0027 ]]; then"},{"line_number":1607,"context_line":"            # TODO(jroll) use (yet to be defined) new-style flavor here,"},{"line_number":1608,"context_line":"            # if IRONIC_USE_RESOURCE_CLASSES \u003d\u003d True"},{"line_number":1609,"context_line":"            openstack flavor create --ephemeral $ironic_ephemeral_disk --ram $ironic_node_ram --disk $IRONIC_VM_ADJUSTED_DISK --vcpus $ironic_node_cpu baremetal"},{"line_number":1610,"context_line":"            openstack flavor set baremetal --property \"cpu_arch\"\u003d\"$ironic_node_arch\""},{"line_number":1611,"context_line":""},{"line_number":1612,"context_line":"            if [[ \"$IRONIC_BOOT_MODE\" \u003d\u003d \"uefi\" ]]; then"}],"source_content_type":"application/x-shellscript","patch_set":75,"id":"9a30ddce_5c5ec212","line":1609,"range":{"start_line":1609,"start_character":48,"end_line":1609,"end_character":70},"updated":"2017-03-09 22:35:51.000000000","message":"nit: would be nice if both this and IRONIC_VM_ADJUSTED disk were local vars or top-level vars, if possible","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77994c2591e814cbd9558094f7d64908dc541478","unresolved":false,"context_lines":[{"line_number":1606,"context_line":"        if [[ \"$HOST_TOPOLOGY_ROLE\" !\u003d \u0027subnode\u0027 ]]; then"},{"line_number":1607,"context_line":"            # TODO(jroll) use (yet to be defined) new-style flavor here,"},{"line_number":1608,"context_line":"            # if IRONIC_USE_RESOURCE_CLASSES \u003d\u003d True"},{"line_number":1609,"context_line":"            openstack flavor create --ephemeral $ironic_ephemeral_disk --ram $ironic_node_ram --disk $IRONIC_VM_ADJUSTED_DISK --vcpus $ironic_node_cpu baremetal"},{"line_number":1610,"context_line":"            openstack flavor set baremetal --property \"cpu_arch\"\u003d\"$ironic_node_arch\""},{"line_number":1611,"context_line":""},{"line_number":1612,"context_line":"            if [[ \"$IRONIC_BOOT_MODE\" \u003d\u003d \"uefi\" ]]; then"}],"source_content_type":"application/x-shellscript","patch_set":75,"id":"9a30ddce_10aee197","line":1609,"range":{"start_line":1609,"start_character":48,"end_line":1609,"end_character":70},"in_reply_to":"9a30ddce_5c5ec212","updated":"2017-03-10 08:42:55.000000000","message":"Done","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e0aa94083e7479ef121c7473b5ecae87576e5fc0","unresolved":false,"context_lines":[{"line_number":1964,"context_line":"    image_uuid\u003d$(openstack image show $IRONIC_IMAGE_NAME -f value -c id)"},{"line_number":1965,"context_line":"    iniset $TEMPEST_CONFIG compute image_ref $image_uuid"},{"line_number":1966,"context_line":"    iniset $TEMPEST_CONFIG compute image_ref_alt $image_uuid"},{"line_number":1967,"context_line":""},{"line_number":1968,"context_line":"    image_uuid\u003d$(openstack image show $IRONIC_WHOLEDISK_IMAGE_NAME -f value -c id)"},{"line_number":1969,"context_line":"    iniset $TEMPEST_CONFIG baremetal whole_disk_image_ref $image_uuid"},{"line_number":1970,"context_line":"    image_uuid\u003d$(openstack image show $IRONIC_PARTITIONED_IMAGE_NAME -f value -c id)"}],"source_content_type":"application/x-shellscript","patch_set":82,"id":"7a25e98e_064bba2c","line":1967,"updated":"2017-03-13 17:49:29.000000000","message":"A comment here would be nice.\n\nMaybe:\n\n # Setup tempest config settings for the standalone baremetal tests","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"}],"ironic_tempest_plugin/config.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ed6855d096f42a43373d8d53bb17658f2bd2aca3","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    cfg.BoolOpt(\u0027use_provision_network\u0027,"},{"line_number":85,"context_line":"                default\u003dFalse,"},{"line_number":86,"context_line":"                help\u003d\"Whether the Ironic/Neutron tenant isolation is enabled\"),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027image_wholedisk_ref\u0027,"},{"line_number":88,"context_line":"               help\u003d\"UUID of the wholedisk image to use in the tests.\"),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027image_partitioned_ref\u0027,"},{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_9c8e4c2c","line":87,"updated":"2017-02-08 13:23:26.000000000","message":"\"whole_disk_image_ref\"","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b06e1b7226ad9b7677f112ac62db5eb824b8b47d","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    cfg.BoolOpt(\u0027use_provision_network\u0027,"},{"line_number":85,"context_line":"                default\u003dFalse,"},{"line_number":86,"context_line":"                help\u003d\"Whether the Ironic/Neutron tenant isolation is enabled\"),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027image_wholedisk_ref\u0027,"},{"line_number":88,"context_line":"               help\u003d\"UUID of the wholedisk image to use in the tests.\"),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027image_partitioned_ref\u0027,"},{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_811b4180","line":87,"in_reply_to":"1a430d35_9c8e4c2c","updated":"2017-02-08 15:44:14.000000000","message":"Done","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ed6855d096f42a43373d8d53bb17658f2bd2aca3","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                help\u003d\"Whether the Ironic/Neutron tenant isolation is enabled\"),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027image_wholedisk_ref\u0027,"},{"line_number":88,"context_line":"               help\u003d\"UUID of the wholedisk image to use in the tests.\"),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027image_partitioned_ref\u0027,"},{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"},{"line_number":91,"context_line":"    cfg.ListOpt(\u0027enabled_drivers\u0027,"},{"line_number":92,"context_line":"                default\u003d[],"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_bc8148fd","line":89,"updated":"2017-02-08 13:23:26.000000000","message":"\"partition_image_ref\"","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b06e1b7226ad9b7677f112ac62db5eb824b8b47d","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                help\u003d\"Whether the Ironic/Neutron tenant isolation is enabled\"),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027image_wholedisk_ref\u0027,"},{"line_number":88,"context_line":"               help\u003d\"UUID of the wholedisk image to use in the tests.\"),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027image_partitioned_ref\u0027,"},{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"},{"line_number":91,"context_line":"    cfg.ListOpt(\u0027enabled_drivers\u0027,"},{"line_number":92,"context_line":"                default\u003d[],"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_612ad591","line":89,"in_reply_to":"1a430d35_bc8148fd","updated":"2017-02-08 15:44:14.000000000","message":"Done","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ed6855d096f42a43373d8d53bb17658f2bd2aca3","unresolved":false,"context_lines":[{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"},{"line_number":91,"context_line":"    cfg.ListOpt(\u0027enabled_drivers\u0027,"},{"line_number":92,"context_line":"                default\u003d[],"},{"line_number":93,"context_line":"                help\u003d\"List of Ironic enabled drivers.\"),"},{"line_number":94,"context_line":"    cfg.IntOpt(\u0027adjusted_disk\u0027,"},{"line_number":95,"context_line":"               min\u003d0,"},{"line_number":96,"context_line":"               help\u003d\"Ironic adjusted diks size to use in the standalone tests \""}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_dc84540c","line":93,"updated":"2017-02-08 13:23:26.000000000","message":"please add enabled_hardware_types as well","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b06e1b7226ad9b7677f112ac62db5eb824b8b47d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"},{"line_number":91,"context_line":"    cfg.ListOpt(\u0027enabled_drivers\u0027,"},{"line_number":92,"context_line":"                default\u003d[],"},{"line_number":93,"context_line":"                help\u003d\"List of Ironic enabled drivers.\"),"},{"line_number":94,"context_line":"    cfg.IntOpt(\u0027adjusted_disk\u0027,"},{"line_number":95,"context_line":"               min\u003d0,"},{"line_number":96,"context_line":"               help\u003d\"Ironic adjusted diks size to use in the standalone tests \""}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_412f99a0","line":93,"in_reply_to":"1a430d35_dc84540c","updated":"2017-02-08 15:44:14.000000000","message":"Done","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ed6855d096f42a43373d8d53bb17658f2bd2aca3","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    cfg.ListOpt(\u0027enabled_drivers\u0027,"},{"line_number":92,"context_line":"                default\u003d[],"},{"line_number":93,"context_line":"                help\u003d\"List of Ironic enabled drivers.\"),"},{"line_number":94,"context_line":"    cfg.IntOpt(\u0027adjusted_disk\u0027,"},{"line_number":95,"context_line":"               min\u003d0,"},{"line_number":96,"context_line":"               help\u003d\"Ironic adjusted diks size to use in the standalone tests \""},{"line_number":97,"context_line":"                    \"as instance_info/root_gb value.\"),"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_fc7f5012","line":94,"updated":"2017-02-08 13:23:26.000000000","message":"\"adjusted_root_disk_size_gb\"","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b06e1b7226ad9b7677f112ac62db5eb824b8b47d","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    cfg.ListOpt(\u0027enabled_drivers\u0027,"},{"line_number":92,"context_line":"                default\u003d[],"},{"line_number":93,"context_line":"                help\u003d\"List of Ironic enabled drivers.\"),"},{"line_number":94,"context_line":"    cfg.IntOpt(\u0027adjusted_disk\u0027,"},{"line_number":95,"context_line":"               min\u003d0,"},{"line_number":96,"context_line":"               help\u003d\"Ironic adjusted diks size to use in the standalone tests \""},{"line_number":97,"context_line":"                    \"as instance_info/root_gb value.\"),"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_21244dc3","line":94,"in_reply_to":"1a430d35_fc7f5012","updated":"2017-02-08 15:44:14.000000000","message":"Done","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ed6855d096f42a43373d8d53bb17658f2bd2aca3","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                help\u003d\"List of Ironic enabled drivers.\"),"},{"line_number":94,"context_line":"    cfg.IntOpt(\u0027adjusted_disk\u0027,"},{"line_number":95,"context_line":"               min\u003d0,"},{"line_number":96,"context_line":"               help\u003d\"Ironic adjusted diks size to use in the standalone tests \""},{"line_number":97,"context_line":"                    \"as instance_info/root_gb value.\"),"},{"line_number":98,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_1c7b3c29","line":96,"updated":"2017-02-08 13:23:26.000000000","message":"nit: typo in disk","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b06e1b7226ad9b7677f112ac62db5eb824b8b47d","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                help\u003d\"List of Ironic enabled drivers.\"),"},{"line_number":94,"context_line":"    cfg.IntOpt(\u0027adjusted_disk\u0027,"},{"line_number":95,"context_line":"               min\u003d0,"},{"line_number":96,"context_line":"               help\u003d\"Ironic adjusted diks size to use in the standalone tests \""},{"line_number":97,"context_line":"                    \"as instance_info/root_gb value.\"),"},{"line_number":98,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_0129119e","line":96,"in_reply_to":"1a430d35_1c7b3c29","updated":"2017-02-08 15:44:14.000000000","message":"Done","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"1543069a19e71e2175c707a9ff48a47c81ffcf3f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    cfg.BoolOpt(\u0027use_provision_network\u0027,"},{"line_number":85,"context_line":"                default\u003dFalse,"},{"line_number":86,"context_line":"                help\u003d\"Whether the Ironic/Neutron tenant isolation is enabled\"),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027whole_disk_image_ref\u0027,"},{"line_number":88,"context_line":"               help\u003d\"UUID of the wholedisk image to use in the tests.\"),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027partition_image_ref\u0027,"},{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_ed9ff84d","line":87,"updated":"2017-03-08 22:54:33.000000000","message":"Can we use UUID in the names of these, instead of ref?","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"374abdef1a656ba6f2a21018d8591493be9f53a4","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    cfg.BoolOpt(\u0027use_provision_network\u0027,"},{"line_number":85,"context_line":"                default\u003dFalse,"},{"line_number":86,"context_line":"                help\u003d\"Whether the Ironic/Neutron tenant isolation is enabled\"),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027whole_disk_image_ref\u0027,"},{"line_number":88,"context_line":"               help\u003d\"UUID of the wholedisk image to use in the tests.\"),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027partition_image_ref\u0027,"},{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_b296304a","line":87,"in_reply_to":"9a30ddce_ed9ff84d","updated":"2017-03-09 08:28:31.000000000","message":"no, tempest expect here uuid as image name is not unique.","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"fb8a5b8cb262abace58b3f7c68fcbddadc704e1d","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    cfg.StrOpt(\u0027partition_image_ref\u0027,"},{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"},{"line_number":91,"context_line":"    cfg.ListOpt(\u0027enabled_drivers\u0027,"},{"line_number":92,"context_line":"                default\u003d[],"},{"line_number":93,"context_line":"                help\u003d\"List of Ironic enabled drivers.\"),"},{"line_number":94,"context_line":"    cfg.ListOpt(\u0027enabled_hardware_types\u0027,"},{"line_number":95,"context_line":"                default\u003d[],"}],"source_content_type":"text/x-python","patch_set":81,"id":"9a30ddce_470b0524","line":92,"range":{"start_line":92,"start_character":16,"end_line":92,"end_character":26},"updated":"2017-03-13 10:18:46.000000000","message":"nit: We usually have some defaults set in Ironic and also in DevStack. I wonder if we want here in the tempest plugin too.","commit_id":"c9f9acfbe4c2d89ff05e8e2b5999be4fff6dc151"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"5d044075e6206f8f93c2f7ea97c3735ab801120b","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    cfg.StrOpt(\u0027partition_image_ref\u0027,"},{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"},{"line_number":91,"context_line":"    cfg.ListOpt(\u0027enabled_drivers\u0027,"},{"line_number":92,"context_line":"                default\u003d[],"},{"line_number":93,"context_line":"                help\u003d\"List of Ironic enabled drivers.\"),"},{"line_number":94,"context_line":"    cfg.ListOpt(\u0027enabled_hardware_types\u0027,"},{"line_number":95,"context_line":"                default\u003d[],"}],"source_content_type":"text/x-python","patch_set":81,"id":"9a30ddce_f8065484","line":92,"range":{"start_line":92,"start_character":16,"end_line":92,"end_character":26},"in_reply_to":"9a30ddce_470b0524","updated":"2017-03-13 11:39:37.000000000","message":"Done","commit_id":"c9f9acfbe4c2d89ff05e8e2b5999be4fff6dc151"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"fb8a5b8cb262abace58b3f7c68fcbddadc704e1d","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                default\u003d[],"},{"line_number":93,"context_line":"                help\u003d\"List of Ironic enabled drivers.\"),"},{"line_number":94,"context_line":"    cfg.ListOpt(\u0027enabled_hardware_types\u0027,"},{"line_number":95,"context_line":"                default\u003d[],"},{"line_number":96,"context_line":"                help\u003d\"List of Ironic enabled hardware types.\"),"},{"line_number":97,"context_line":"    cfg.IntOpt(\u0027adjusted_root_disk_size_gb\u0027,"},{"line_number":98,"context_line":"               min\u003d0,"}],"source_content_type":"text/x-python","patch_set":81,"id":"9a30ddce_6716494d","line":95,"range":{"start_line":95,"start_character":16,"end_line":95,"end_character":27},"updated":"2017-03-13 10:18:46.000000000","message":"ditto","commit_id":"c9f9acfbe4c2d89ff05e8e2b5999be4fff6dc151"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"5d044075e6206f8f93c2f7ea97c3735ab801120b","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                default\u003d[],"},{"line_number":93,"context_line":"                help\u003d\"List of Ironic enabled drivers.\"),"},{"line_number":94,"context_line":"    cfg.ListOpt(\u0027enabled_hardware_types\u0027,"},{"line_number":95,"context_line":"                default\u003d[],"},{"line_number":96,"context_line":"                help\u003d\"List of Ironic enabled hardware types.\"),"},{"line_number":97,"context_line":"    cfg.IntOpt(\u0027adjusted_root_disk_size_gb\u0027,"},{"line_number":98,"context_line":"               min\u003d0,"}],"source_content_type":"text/x-python","patch_set":81,"id":"9a30ddce_38fd4c6e","line":95,"range":{"start_line":95,"start_character":16,"end_line":95,"end_character":27},"in_reply_to":"9a30ddce_6716494d","updated":"2017-03-13 11:39:37.000000000","message":"Done","commit_id":"c9f9acfbe4c2d89ff05e8e2b5999be4fff6dc151"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d8f2a2ca4370b0736e4cd739569e263cf079b2b9","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    cfg.BoolOpt(\u0027use_provision_network\u0027,"},{"line_number":85,"context_line":"                default\u003dFalse,"},{"line_number":86,"context_line":"                help\u003d\"Whether the Ironic/Neutron tenant isolation is enabled\"),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027whole_disk_image_ref\u0027,"},{"line_number":88,"context_line":"               help\u003d\"UUID of the wholedisk image to use in the tests.\"),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027partition_image_ref\u0027,"},{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"}],"source_content_type":"text/x-python","patch_set":82,"id":"9a30ddce_60545dc9","line":87,"range":{"start_line":87,"start_character":33,"end_line":87,"end_character":36},"updated":"2017-03-13 17:34:42.000000000","message":"is there a reason this isn\u0027t \u0027uuid\u0027?","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"db93802b3bd2a3465f6c22dc74fc3c84ceb03a64","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    cfg.BoolOpt(\u0027use_provision_network\u0027,"},{"line_number":85,"context_line":"                default\u003dFalse,"},{"line_number":86,"context_line":"                help\u003d\"Whether the Ironic/Neutron tenant isolation is enabled\"),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027whole_disk_image_ref\u0027,"},{"line_number":88,"context_line":"               help\u003d\"UUID of the wholedisk image to use in the tests.\"),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027partition_image_ref\u0027,"},{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"}],"source_content_type":"text/x-python","patch_set":82,"id":"7a25e98e_9048b95d","line":87,"range":{"start_line":87,"start_character":33,"end_line":87,"end_character":36},"in_reply_to":"7a25e98e_d511465f","updated":"2017-03-13 21:24:45.000000000","message":"Thanks for the info","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"21c0ebea5f82245b57e4efef7b205b56086947e5","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    cfg.BoolOpt(\u0027use_provision_network\u0027,"},{"line_number":85,"context_line":"                default\u003dFalse,"},{"line_number":86,"context_line":"                help\u003d\"Whether the Ironic/Neutron tenant isolation is enabled\"),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027whole_disk_image_ref\u0027,"},{"line_number":88,"context_line":"               help\u003d\"UUID of the wholedisk image to use in the tests.\"),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027partition_image_ref\u0027,"},{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"}],"source_content_type":"text/x-python","patch_set":82,"id":"7a25e98e_d511465f","line":87,"range":{"start_line":87,"start_character":33,"end_line":87,"end_character":36},"in_reply_to":"9a30ddce_60545dc9","updated":"2017-03-13 20:39:45.000000000","message":"It is called image_ref in tempest I decided to left ref to be consistent with tempest\nhttps://github.com/openstack/tempest/blob/b960e490dbb673edb63180997b1bcdab96ddba69/tempest/api/compute/base.py#L111","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"d8f2a2ca4370b0736e4cd739569e263cf079b2b9","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                help\u003d\"Whether the Ironic/Neutron tenant isolation is enabled\"),"},{"line_number":87,"context_line":"    cfg.StrOpt(\u0027whole_disk_image_ref\u0027,"},{"line_number":88,"context_line":"               help\u003d\"UUID of the wholedisk image to use in the tests.\"),"},{"line_number":89,"context_line":"    cfg.StrOpt(\u0027partition_image_ref\u0027,"},{"line_number":90,"context_line":"               help\u003d\"UUID of the partitioned image to use in the tests.\"),"},{"line_number":91,"context_line":"    cfg.ListOpt(\u0027enabled_drivers\u0027,"},{"line_number":92,"context_line":"                default\u003d[\u0027fake\u0027, \u0027pxe_ipmitool\u0027, \u0027agent_ipmitool\u0027],"}],"source_content_type":"text/x-python","patch_set":82,"id":"9a30ddce_804f9132","line":89,"updated":"2017-03-13 17:34:42.000000000","message":"Same question as line 87","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"}],"ironic_tempest_plugin/services/baremetal/base.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":217,"context_line":"        return resp, body"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _patch_request(self, resource, uuid, patch_object):"},{"line_number":220,"context_line":"        \"\"\"Update specified object with JSON-patch."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        :param resource: The name of the REST resource, e.g., \u0027nodes\u0027."}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_a4bd26d9","line":219,"updated":"2017-02-06 11:07:49.000000000","message":"Maybe it\u0027s not needed for this patch, but still I guess worth adding these extra headers argument here too.","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":216,"context_line":"        self.expected_success(204, resp.status)"},{"line_number":217,"context_line":"        return resp, body"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _patch_request(self, resource, uuid, patch_object):"},{"line_number":220,"context_line":"        \"\"\"Update specified object with JSON-patch."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        :param resource: The name of the REST resource, e.g., \u0027nodes\u0027."}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_179d4559","line":219,"in_reply_to":"1a430d35_a4bd26d9","updated":"2017-02-06 12:51:15.000000000","message":"Done","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"733c8fdef063c6fcf58af4c92f879fe0b00e0608","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        return resp, self.deserialize(body)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def _show_request(self, resource, uuid, permanent\u003dFalse, **kwargs):"},{"line_number":142,"context_line":"        \"\"\"Gets a specific object of the specified type."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        :param uuid: Unique identifier of the object in UUID format."}],"source_content_type":"text/x-python","patch_set":66,"id":"ba2be162_86153841","line":141,"updated":"2017-03-03 14:04:41.000000000","message":"the only one left not supporting the extra headers, can be added separately tho","commit_id":"37e8b4d6f45a4787ed8d1f6dcf61b96553022fe8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2100faf61b11c0b55858c99550223b38ee78f577","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        return resp, self.deserialize(body)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    def _show_request(self, resource, uuid, permanent\u003dFalse, **kwargs):"},{"line_number":142,"context_line":"        \"\"\"Gets a specific object of the specified type."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        :param uuid: Unique identifier of the object in UUID format."}],"source_content_type":"text/x-python","patch_set":66,"id":"ba2be162_5743dd41","line":141,"in_reply_to":"ba2be162_86153841","updated":"2017-03-03 18:57:00.000000000","message":"Done","commit_id":"37e8b4d6f45a4787ed8d1f6dcf61b96553022fe8"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"829c533e559e48bd0507b71f8a3675e05770d22b","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        :param uuid: Unique identifier of the object in UUID format."},{"line_number":146,"context_line":"        :param headers: List of headers to use in request."},{"line_number":147,"context_line":"        :param extra_headers: Specify whether to use headers."},{"line_number":148,"context_line":"        :returns: Serialized object as a dictionary."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_b509022f","line":147,"updated":"2017-03-07 18:51:34.000000000","message":"This isn\u0027t really true.\n\nhttps://github.com/openstack/tempest-lib/blob/000c2b49ee674b875f3b0aae5c61572394c6991f/tempest_lib/common/rest_client.py#L617-L626\n\nSo it seems if extra_headers is set and headers is set then combine headers with the default headers.\n\nMaybe:\n\n :param extra_headers: If set to True and headers is set then combine headers with the default headers.\n\nOr something like that.","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"374abdef1a656ba6f2a21018d8591493be9f53a4","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        :param uuid: Unique identifier of the object in UUID format."},{"line_number":146,"context_line":"        :param headers: List of headers to use in request."},{"line_number":147,"context_line":"        :param extra_headers: Specify whether to use headers."},{"line_number":148,"context_line":"        :returns: Serialized object as a dictionary."},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_b2271011","line":147,"in_reply_to":"9a30ddce_b509022f","updated":"2017-03-09 08:28:31.000000000","message":"Done","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"829c533e559e48bd0507b71f8a3675e05770d22b","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        :param object_dict: A Python dict that represents an object of the"},{"line_number":167,"context_line":"                            specified type."},{"line_number":168,"context_line":"        :param headers: List of headers to use in request."},{"line_number":169,"context_line":"        :param extra_headers: Specify whether to use headers."},{"line_number":170,"context_line":"        :returns: A tuple with the server response and the deserialized created"},{"line_number":171,"context_line":"                 object."},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_351ef263","line":169,"updated":"2017-03-07 18:51:34.000000000","message":"See comment on L147","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"374abdef1a656ba6f2a21018d8591493be9f53a4","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        :param object_dict: A Python dict that represents an object of the"},{"line_number":167,"context_line":"                            specified type."},{"line_number":168,"context_line":"        :param headers: List of headers to use in request."},{"line_number":169,"context_line":"        :param extra_headers: Specify whether to use headers."},{"line_number":170,"context_line":"        :returns: A tuple with the server response and the deserialized created"},{"line_number":171,"context_line":"                 object."},{"line_number":172,"context_line":""}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_d222c400","line":169,"in_reply_to":"9a30ddce_351ef263","updated":"2017-03-09 08:28:31.000000000","message":"Done","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"829c533e559e48bd0507b71f8a3675e05770d22b","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        :param resource: The name of the REST resource, e.g., \u0027nodes\u0027."},{"line_number":211,"context_line":"        :param uuid: The unique identifier of an object in UUID format."},{"line_number":212,"context_line":"        :param headers: List of headers to use in request."},{"line_number":213,"context_line":"        :param extra_headers: Specify whether to use headers."},{"line_number":214,"context_line":"        :returns: A tuple with the server response and the response body."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_15380ed3","line":213,"updated":"2017-03-07 18:51:34.000000000","message":"See comment on L147","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"374abdef1a656ba6f2a21018d8591493be9f53a4","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        :param resource: The name of the REST resource, e.g., \u0027nodes\u0027."},{"line_number":211,"context_line":"        :param uuid: The unique identifier of an object in UUID format."},{"line_number":212,"context_line":"        :param headers: List of headers to use in request."},{"line_number":213,"context_line":"        :param extra_headers: Specify whether to use headers."},{"line_number":214,"context_line":"        :returns: A tuple with the server response and the response body."},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_121d3cbd","line":213,"in_reply_to":"9a30ddce_15380ed3","updated":"2017-03-09 08:28:31.000000000","message":"Done","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"829c533e559e48bd0507b71f8a3675e05770d22b","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        :param resource: The name of the REST resource, e.g., \u0027nodes\u0027."},{"line_number":229,"context_line":"        :param uuid: The unique identifier of an object in UUID format."},{"line_number":230,"context_line":"        :param headers: List of headers to use in request."},{"line_number":231,"context_line":"        :param extra_headers: Specify whether to use headers."},{"line_number":232,"context_line":"        :returns: A tuple with the server response and the serialized patched"},{"line_number":233,"context_line":"                 object."},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_553286f2","line":231,"updated":"2017-03-07 18:51:34.000000000","message":"See comment on L147","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"374abdef1a656ba6f2a21018d8591493be9f53a4","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        :param resource: The name of the REST resource, e.g., \u0027nodes\u0027."},{"line_number":229,"context_line":"        :param uuid: The unique identifier of an object in UUID format."},{"line_number":230,"context_line":"        :param headers: List of headers to use in request."},{"line_number":231,"context_line":"        :param extra_headers: Specify whether to use headers."},{"line_number":232,"context_line":"        :returns: A tuple with the server response and the serialized patched"},{"line_number":233,"context_line":"                 object."},{"line_number":234,"context_line":""}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_327a40f2","line":231,"in_reply_to":"9a30ddce_553286f2","updated":"2017-03-09 08:28:31.000000000","message":"Done","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"a466b25885415d02e687aeab6bca37aa433e72b0","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        :param uuid: Unique identifier of the object in UUID format."},{"line_number":146,"context_line":"        :param headers: List of headers to use in request."},{"line_number":147,"context_line":"        :param extra_headers: If set to True and headers is set then"},{"line_number":148,"context_line":"                              combine headers with the default headers."},{"line_number":149,"context_line":"        :returns: Serialized object as a dictionary."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":75,"id":"9a30ddce_fae31a31","line":148,"updated":"2017-03-09 10:18:55.000000000","message":"`...extra headers with the default headers`\nand in several places below.","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"a4dbe4469fc344007f93e084319c514f78f03983","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def apply_baremetal_api_microversion(baremetal_microversion):"},{"line_number":25,"context_line":"    BAREMETAL_MICROVERSION \u003d baremetal_microversion"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"def reset_baremetal_api_microversion():"},{"line_number":28,"context_line":"    BAREMETAL_MICROVERSION \u003d None"}],"source_content_type":"text/x-python","patch_set":78,"id":"9a30ddce_d31361b6","line":25,"updated":"2017-03-10 15:42:53.000000000","message":"I think you need to do \n\n global BAREMETAL_MICROVERSION\n\nbefore assignment, otherwise it\u0027s going to be a usual local var.","commit_id":"fec1f6e5e7cd179099788dccc114d05117a198ab"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"340882066a58e719387ffc2b9fb266f4eb3d1a64","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    BAREMETAL_MICROVERSION \u003d baremetal_microversion"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def reset_baremetal_api_microversion():"},{"line_number":30,"context_line":"    global BAREMETAL_MICROVERSION"},{"line_number":31,"context_line":"    BAREMETAL_MICROVERSION \u003d None"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_571d8f64","line":29,"range":{"start_line":29,"start_character":4,"end_line":29,"end_character":9},"updated":"2017-03-10 23:15:43.000000000","message":"nit: unset could be also appropriate\nWhen I think of \u0027reset an alarm\u0027, it\u0027d mean turn it off, then turn it on ;)","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b0df67f68e070c565492ca20015f92f114d5bfed","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    BAREMETAL_MICROVERSION \u003d baremetal_microversion"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def reset_baremetal_api_microversion():"},{"line_number":30,"context_line":"    global BAREMETAL_MICROVERSION"},{"line_number":31,"context_line":"    BAREMETAL_MICROVERSION \u003d None"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_8a70a70c","line":29,"range":{"start_line":29,"start_character":4,"end_line":29,"end_character":9},"in_reply_to":"9a30ddce_571d8f64","updated":"2017-03-13 08:33:16.000000000","message":"In other places it is called reset https://github.com/openstack/tempest/blob/422ded886232067a393ec8fc4971580525e41ffe/tempest/api/compute/api_microversion_fixture.py#L30","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"c28d40d13a1607ea36de6b727adc5a163a86fd19","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    BAREMETAL_MICROVERSION \u003d baremetal_microversion"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def reset_baremetal_api_microversion():"},{"line_number":30,"context_line":"    global BAREMETAL_MICROVERSION"},{"line_number":31,"context_line":"    BAREMETAL_MICROVERSION \u003d None"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_82a95e26","line":29,"range":{"start_line":29,"start_character":4,"end_line":29,"end_character":9},"in_reply_to":"9a30ddce_8a70a70c","updated":"2017-03-13 15:36:55.000000000","message":"I see. It\u0027s better to leave \u0027reset\u0027 then. Thanks.","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"da7185154951a5eee47cf4fb6b70b5454e46214e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"BAREMETAL_MICROVERSION \u003d None"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def apply_baremetal_api_microversion(baremetal_microversion):"},{"line_number":25,"context_line":"    global BAREMETAL_MICROVERSION"},{"line_number":26,"context_line":"    BAREMETAL_MICROVERSION \u003d baremetal_microversion"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_b0493591","line":24,"updated":"2017-03-13 22:23:36.000000000","message":"Not sure if this was discussed in the previous 82 revisions...\n\nIs there any concern with concurrency? Can multiple tests be running and this get changed by two different tests and conflict with each other.","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"451f8758e306a3fd474cd2d9b5b1768091a43c22","unresolved":false,"context_lines":[{"line_number":21,"context_line":"BAREMETAL_MICROVERSION \u003d None"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def apply_baremetal_api_microversion(baremetal_microversion):"},{"line_number":25,"context_line":"    global BAREMETAL_MICROVERSION"},{"line_number":26,"context_line":"    BAREMETAL_MICROVERSION \u003d baremetal_microversion"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_664e23c3","line":24,"in_reply_to":"7a25e98e_b0493591","updated":"2017-03-13 23:10:41.000000000","message":"yes, concurrent tests are launched in separate processes so global variables are not shared among them.","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"c078353293e58f2cc4f1cc9b008d35336b59c9a2","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest.lib.common import api_version_utils"},{"line_number":19,"context_line":"from tempest.lib.common import rest_client"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# NOTE(vsaienko): concurrent tests works because they launched in"},{"line_number":22,"context_line":"# separate processes so global variables are not shared among them."},{"line_number":23,"context_line":"BAREMETAL_MICROVERSION \u003d None"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":84,"id":"7a25e98e_bc5d8eee","line":21,"range":{"start_line":21,"start_character":49,"end_line":21,"end_character":61},"updated":"2017-03-13 23:41:08.000000000","message":"they are launched","commit_id":"206b7085b39d8e0cf026fc63be4792c17ec64982"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7c5b145fba2a0afea3cdec25d14b1ca4ed5c99f5","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest.lib.common import api_version_utils"},{"line_number":19,"context_line":"from tempest.lib.common import rest_client"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# NOTE(vsaienko): concurrent tests works because they launched in"},{"line_number":22,"context_line":"# separate processes so global variables are not shared among them."},{"line_number":23,"context_line":"BAREMETAL_MICROVERSION \u003d None"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":84,"id":"5a22e58a_9a2b7933","line":21,"range":{"start_line":21,"start_character":49,"end_line":21,"end_character":61},"in_reply_to":"7a25e98e_bc5d8eee","updated":"2017-03-14 09:10:29.000000000","message":"Done","commit_id":"206b7085b39d8e0cf026fc63be4792c17ec64982"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest.lib.common import api_version_utils"},{"line_number":19,"context_line":"from tempest.lib.common import rest_client"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# NOTE(vsaienko): concurrent tests works because they are launched in"},{"line_number":22,"context_line":"# separate processes so global variables are not shared among them."},{"line_number":23,"context_line":"BAREMETAL_MICROVERSION \u003d None"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_a7782491","line":21,"updated":"2017-03-14 14:56:00.000000000","message":"nit s/works/work/","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest.lib.common import api_version_utils"},{"line_number":19,"context_line":"from tempest.lib.common import rest_client"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# NOTE(vsaienko): concurrent tests works because they are launched in"},{"line_number":22,"context_line":"# separate processes so global variables are not shared among them."},{"line_number":23,"context_line":"BAREMETAL_MICROVERSION \u003d None"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_b1ce7e81","line":21,"in_reply_to":"3a1ff146_a7782491","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":23,"context_line":"BAREMETAL_MICROVERSION \u003d None"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def apply_baremetal_api_microversion(baremetal_microversion):"},{"line_number":27,"context_line":"    global BAREMETAL_MICROVERSION"},{"line_number":28,"context_line":"    BAREMETAL_MICROVERSION \u003d baremetal_microversion"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_e7a93ce1","line":26,"updated":"2017-03-14 14:56:00.000000000","message":"nit, to me, \u0027apply\u0027 indicates that something is being applied/used. This seems to only \u0027set\u0027 the global variable.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":23,"context_line":"BAREMETAL_MICROVERSION \u003d None"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"def apply_baremetal_api_microversion(baremetal_microversion):"},{"line_number":27,"context_line":"    global BAREMETAL_MICROVERSION"},{"line_number":28,"context_line":"    BAREMETAL_MICROVERSION \u003d baremetal_microversion"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_71824602","line":26,"in_reply_to":"3a1ff146_e7a93ce1","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"}],"ironic_tempest_plugin/services/baremetal/v1/json/baremetal_client.py":[{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"d6e03cb2575965c8b067eb0c649864f36361b7e8","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        headers \u003d None"},{"line_number":29,"context_line":"        if api_version is not None:"},{"line_number":30,"context_line":"            extra_headers \u003d True"},{"line_number":31,"context_line":"            headers \u003d {\u0027x-openstack-ironic-api-version\u0027: api_version}"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        return self._list_request(\u0027nodes\u0027, headers\u003dheaders,"},{"line_number":34,"context_line":"                                  extra_headers\u003dextra_headers, **kwargs)"}],"source_content_type":"text/x-python","patch_set":49,"id":"1a430d35_3a86fdb9","line":31,"range":{"start_line":31,"start_character":42,"end_line":31,"end_character":43},"updated":"2017-02-03 02:11:14.000000000","message":"Can we create a method _get_ironic_api_header and reuse it in this file?\n_get_ironic_api_header(api_version\u003dNone):\n    if api_version is not None:\n        extra_headers \u003d True\n        headers \u003d {\u0027x-openstack-ironic-api-version\u0027: api_version}\n        return headers\n\nAnd then in list_nodes you can call the function wherever it is used in this file.\n\ndef list_nodes(self, api_version\u003dNone, **kwargs):\n        \"\"\"List all existing nodes.\"\"\"\n        extra_headers \u003d False\n        headers \u003d None\n        headers \u003d _get_ironic_api_header(api_version)\n\nPlease write appropriate unit tests for this method too.","commit_id":"7782d4e194ad70383ba7b176e333f12b82ffd691"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"f86fc97a11e1425d483b13ce97f8ff3897c059ed","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        headers \u003d None"},{"line_number":29,"context_line":"        if api_version is not None:"},{"line_number":30,"context_line":"            extra_headers \u003d True"},{"line_number":31,"context_line":"            headers \u003d {\u0027x-openstack-ironic-api-version\u0027: api_version}"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"        return self._list_request(\u0027nodes\u0027, headers\u003dheaders,"},{"line_number":34,"context_line":"                                  extra_headers\u003dextra_headers, **kwargs)"}],"source_content_type":"text/x-python","patch_set":49,"id":"1a430d35_35b439f1","line":31,"range":{"start_line":31,"start_character":42,"end_line":31,"end_character":43},"in_reply_to":"1a430d35_3a86fdb9","updated":"2017-02-03 15:42:37.000000000","message":"Done\n\nWe don\u0027t have unittests for tempest code.","commit_id":"7782d4e194ad70383ba7b176e333f12b82ffd691"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"d6e03cb2575965c8b067eb0c649864f36361b7e8","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        headers \u003d None"},{"line_number":293,"context_line":"        if api_version is not None:"},{"line_number":294,"context_line":"            extra_headers \u003d True"},{"line_number":295,"context_line":"            headers \u003d {\u0027x-openstack-ironic-api-version\u0027: api_version}"},{"line_number":296,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":297,"context_line":"        if configdrive:"},{"line_number":298,"context_line":"            data[\u0027configdrive\u0027] \u003d configdrive"}],"source_content_type":"text/x-python","patch_set":49,"id":"1a430d35_7aa7a54f","line":295,"range":{"start_line":295,"start_character":36,"end_line":295,"end_character":42},"updated":"2017-02-03 02:11:14.000000000","message":"Reuse the _get_ironic_api_header as defined above.","commit_id":"7782d4e194ad70383ba7b176e333f12b82ffd691"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"f86fc97a11e1425d483b13ce97f8ff3897c059ed","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        headers \u003d None"},{"line_number":293,"context_line":"        if api_version is not None:"},{"line_number":294,"context_line":"            extra_headers \u003d True"},{"line_number":295,"context_line":"            headers \u003d {\u0027x-openstack-ironic-api-version\u0027: api_version}"},{"line_number":296,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":297,"context_line":"        if configdrive:"},{"line_number":298,"context_line":"            data[\u0027configdrive\u0027] \u003d configdrive"}],"source_content_type":"text/x-python","patch_set":49,"id":"1a430d35_d5c5b55b","line":295,"range":{"start_line":295,"start_character":36,"end_line":295,"end_character":42},"in_reply_to":"1a430d35_7aa7a54f","updated":"2017-02-03 15:42:37.000000000","message":"Done","commit_id":"7782d4e194ad70383ba7b176e333f12b82ffd691"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"d6e03cb2575965c8b067eb0c649864f36361b7e8","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        headers \u003d None"},{"line_number":438,"context_line":"        if api_version is not None:"},{"line_number":439,"context_line":"            extra_headers \u003d True"},{"line_number":440,"context_line":"            headers \u003d {\u0027x-openstack-ironic-api-version\u0027: api_version}"},{"line_number":441,"context_line":"        vif \u003d {\u0027id\u0027: vif_id}"},{"line_number":442,"context_line":"        resp \u003d self._create_request_no_response_body("},{"line_number":443,"context_line":"            \u0027nodes/%s/vifs\u0027 % node_uuid, vif, headers\u003dheaders,"}],"source_content_type":"text/x-python","patch_set":49,"id":"1a430d35_ba674d24","line":440,"range":{"start_line":440,"start_character":12,"end_line":440,"end_character":19},"updated":"2017-02-03 02:11:14.000000000","message":"Reuse the _get_ironic_api_header as defined above.","commit_id":"7782d4e194ad70383ba7b176e333f12b82ffd691"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"f86fc97a11e1425d483b13ce97f8ff3897c059ed","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        headers \u003d None"},{"line_number":438,"context_line":"        if api_version is not None:"},{"line_number":439,"context_line":"            extra_headers \u003d True"},{"line_number":440,"context_line":"            headers \u003d {\u0027x-openstack-ironic-api-version\u0027: api_version}"},{"line_number":441,"context_line":"        vif \u003d {\u0027id\u0027: vif_id}"},{"line_number":442,"context_line":"        resp \u003d self._create_request_no_response_body("},{"line_number":443,"context_line":"            \u0027nodes/%s/vifs\u0027 % node_uuid, vif, headers\u003dheaders,"}],"source_content_type":"text/x-python","patch_set":49,"id":"1a430d35_f5a0f1a7","line":440,"range":{"start_line":440,"start_character":12,"end_line":440,"end_character":19},"in_reply_to":"1a430d35_ba674d24","updated":"2017-02-03 15:42:37.000000000","message":"Done","commit_id":"7782d4e194ad70383ba7b176e333f12b82ffd691"},{"author":{"_account_id":11878,"name":"Rushil Chugh","email":"rushil.chugh@gmail.com","username":"rushil"},"change_message_id":"d6e03cb2575965c8b067eb0c649864f36361b7e8","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        headers \u003d None"},{"line_number":457,"context_line":"        if api_version is not None:"},{"line_number":458,"context_line":"            extra_headers \u003d True"},{"line_number":459,"context_line":"            headers \u003d {\u0027x-openstack-ironic-api-version\u0027: api_version}"},{"line_number":460,"context_line":"        resp, body \u003d self._delete_request(\u0027nodes/%s/vifs\u0027 % node_uuid, vif_id,"},{"line_number":461,"context_line":"                                          headers\u003dheaders,"},{"line_number":462,"context_line":"                                          extra_headers\u003dextra_headers)"}],"source_content_type":"text/x-python","patch_set":49,"id":"1a430d35_fa71d5e1","line":459,"range":{"start_line":459,"start_character":12,"end_line":459,"end_character":19},"updated":"2017-02-03 02:11:14.000000000","message":"Reuse the _get_ironic_api_header as defined above.","commit_id":"7782d4e194ad70383ba7b176e333f12b82ffd691"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"f86fc97a11e1425d483b13ce97f8ff3897c059ed","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        headers \u003d None"},{"line_number":457,"context_line":"        if api_version is not None:"},{"line_number":458,"context_line":"            extra_headers \u003d True"},{"line_number":459,"context_line":"            headers \u003d {\u0027x-openstack-ironic-api-version\u0027: api_version}"},{"line_number":460,"context_line":"        resp, body \u003d self._delete_request(\u0027nodes/%s/vifs\u0027 % node_uuid, vif_id,"},{"line_number":461,"context_line":"                                          headers\u003dheaders,"},{"line_number":462,"context_line":"                                          extra_headers\u003dextra_headers)"}],"source_content_type":"text/x-python","patch_set":49,"id":"1a430d35_7595e13e","line":459,"range":{"start_line":459,"start_character":12,"end_line":459,"end_character":19},"in_reply_to":"1a430d35_fa71d5e1","updated":"2017-02-03 15:42:37.000000000","message":"Done","commit_id":"7782d4e194ad70383ba7b176e333f12b82ffd691"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":298,"context_line":"        if configdrive:"},{"line_number":299,"context_line":"            data[\u0027configdrive\u0027] \u003d configdrive"},{"line_number":300,"context_line":"        if clean_steps:"},{"line_number":301,"context_line":"            data[\u0027clean_steps\u0027] \u003d clean_steps"},{"line_number":302,"context_line":"        return self._put_request(\u0027nodes/%s/states/provision\u0027 % node_uuid,"},{"line_number":303,"context_line":"                                 data, **h_params)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_249f7651","line":300,"range":{"start_line":300,"start_character":8,"end_line":300,"end_character":10},"updated":"2017-02-06 11:07:49.000000000","message":"I think elif here, we don\u0027t allow to specify clean steps with configdrive and vice versa.","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":298,"context_line":"        if configdrive:"},{"line_number":299,"context_line":"            data[\u0027configdrive\u0027] \u003d configdrive"},{"line_number":300,"context_line":"        if clean_steps:"},{"line_number":301,"context_line":"            data[\u0027clean_steps\u0027] \u003d clean_steps"},{"line_number":302,"context_line":"        return self._put_request(\u0027nodes/%s/states/provision\u0027 % node_uuid,"},{"line_number":303,"context_line":"                                 data, **h_params)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_37cb2155","line":300,"range":{"start_line":300,"start_character":8,"end_line":300,"end_character":10},"in_reply_to":"1a430d35_249f7651","updated":"2017-02-06 12:51:15.000000000","message":"Done","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        maintenance_mode \u003d strutils.bool_from_string(state)"},{"line_number":308,"context_line":"        reason \u003d {\u0027reason\u0027: reason}"},{"line_number":309,"context_line":"        if maintenance_mode:"},{"line_number":310,"context_line":"            return self._put_request(\u0027nodes/%s/maintenance\u0027 % node_uuid,"},{"line_number":311,"context_line":"                                     reason)"},{"line_number":312,"context_line":"        else:"},{"line_number":313,"context_line":"            uri \u003d self._get_uri(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_c45a3283","line":310,"updated":"2017-02-06 11:07:49.000000000","message":"assert expected code here too? Tho I see it\u0027s inconsistent across these methods, so dunno.","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        maintenance_mode \u003d strutils.bool_from_string(state)"},{"line_number":308,"context_line":"        reason \u003d {\u0027reason\u0027: reason}"},{"line_number":309,"context_line":"        if maintenance_mode:"},{"line_number":310,"context_line":"            return self._put_request(\u0027nodes/%s/maintenance\u0027 % node_uuid,"},{"line_number":311,"context_line":"                                     reason)"},{"line_number":312,"context_line":"        else:"},{"line_number":313,"context_line":"            uri \u003d self._get_uri(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_d7073d7f","line":310,"in_reply_to":"1a430d35_c45a3283","updated":"2017-02-06 12:51:15.000000000","message":"might be fix it separately for all cases? L302 for example.","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"829c533e559e48bd0507b71f8a3675e05770d22b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    @base.handle_errors"},{"line_number":33,"context_line":"    def list_nodes(self, api_version\u003dNone, **kwargs):"},{"line_number":34,"context_line":"        \"\"\"List all existing nodes.\"\"\""},{"line_number":35,"context_line":"        h_params \u003d get_api_version_header_params(api_version)"},{"line_number":36,"context_line":"        if h_params:"},{"line_number":37,"context_line":"            kwargs.update(h_params)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_75e94a1a","line":35,"updated":"2017-03-07 18:51:34.000000000","message":"nit: Could just do\n\n kwargs.update(get_api_version_header_params(api_version)\n\nSince the function returns an empty dict","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"374abdef1a656ba6f2a21018d8591493be9f53a4","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    @base.handle_errors"},{"line_number":33,"context_line":"    def list_nodes(self, api_version\u003dNone, **kwargs):"},{"line_number":34,"context_line":"        \"\"\"List all existing nodes.\"\"\""},{"line_number":35,"context_line":"        h_params \u003d get_api_version_header_params(api_version)"},{"line_number":36,"context_line":"        if h_params:"},{"line_number":37,"context_line":"            kwargs.update(h_params)"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_d269e426","line":35,"in_reply_to":"9a30ddce_75e94a1a","updated":"2017-03-09 08:28:31.000000000","message":"Done","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"829c533e559e48bd0507b71f8a3675e05770d22b","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        \"\"\""},{"line_number":296,"context_line":"        h_params \u003d get_api_version_header_params(api_version)"},{"line_number":297,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":298,"context_line":"        if configdrive:"},{"line_number":299,"context_line":"            data[\u0027configdrive\u0027] \u003d configdrive"},{"line_number":300,"context_line":"        elif clean_steps:"},{"line_number":301,"context_line":"            data[\u0027clean_steps\u0027] \u003d clean_steps"}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_356d1299","line":298,"updated":"2017-03-07 18:51:34.000000000","message":"What happens if configdrive and clean_steps are both set? Should that be an error or should configdrive override that?","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"374abdef1a656ba6f2a21018d8591493be9f53a4","unresolved":false,"context_lines":[{"line_number":295,"context_line":"        \"\"\""},{"line_number":296,"context_line":"        h_params \u003d get_api_version_header_params(api_version)"},{"line_number":297,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":298,"context_line":"        if configdrive:"},{"line_number":299,"context_line":"            data[\u0027configdrive\u0027] \u003d configdrive"},{"line_number":300,"context_line":"        elif clean_steps:"},{"line_number":301,"context_line":"            data[\u0027clean_steps\u0027] \u003d clean_steps"}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_a621954f","line":298,"in_reply_to":"9a30ddce_356d1299","updated":"2017-03-09 08:28:31.000000000","message":"Removed any checks from here, pass both configdrive and clean_steps if specified. In case of incorrect data API will return error.","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"829c533e559e48bd0507b71f8a3675e05770d22b","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        if maintenance_mode:"},{"line_number":310,"context_line":"            return self._put_request(\u0027nodes/%s/maintenance\u0027 % node_uuid,"},{"line_number":311,"context_line":"                                     reason)"},{"line_number":312,"context_line":"        else:"},{"line_number":313,"context_line":"            uri \u003d self._get_uri(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)"},{"line_number":314,"context_line":"            resp, body \u003d self.delete(uri)"},{"line_number":315,"context_line":"            self.expected_success(202, resp.status)"}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_95bf9ecf","line":312,"updated":"2017-03-07 18:51:34.000000000","message":"The else isn\u0027t necessary as L310 does a return.","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"374abdef1a656ba6f2a21018d8591493be9f53a4","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        if maintenance_mode:"},{"line_number":310,"context_line":"            return self._put_request(\u0027nodes/%s/maintenance\u0027 % node_uuid,"},{"line_number":311,"context_line":"                                     reason)"},{"line_number":312,"context_line":"        else:"},{"line_number":313,"context_line":"            uri \u003d self._get_uri(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)"},{"line_number":314,"context_line":"            resp, body \u003d self.delete(uri)"},{"line_number":315,"context_line":"            self.expected_success(202, resp.status)"}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_12745cfb","line":312,"in_reply_to":"9a30ddce_95bf9ecf","updated":"2017-03-09 08:28:31.000000000","message":"Done","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"8d26944209caf61815b3f8c0916fe05573617885","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    h_params \u003d {}"},{"line_number":21,"context_line":"    if api_version:"},{"line_number":22,"context_line":"        h_params[\u0027extra_headers\u0027] \u003d True"},{"line_number":23,"context_line":"        h_params[\u0027headers\u0027] \u003d {\u0027x-openstack-ironic-api-version\u0027: api_version}"},{"line_number":24,"context_line":"    return h_params"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"9a30ddce_7c84665d","line":23,"range":{"start_line":23,"start_character":32,"end_line":23,"end_character":62},"updated":"2017-03-09 22:35:51.000000000","message":"nit: usually I\u0027ve seen this in the format:\n\nX-OpenStack-Ironic-API-Version","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77994c2591e814cbd9558094f7d64908dc541478","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    h_params \u003d {}"},{"line_number":21,"context_line":"    if api_version:"},{"line_number":22,"context_line":"        h_params[\u0027extra_headers\u0027] \u003d True"},{"line_number":23,"context_line":"        h_params[\u0027headers\u0027] \u003d {\u0027x-openstack-ironic-api-version\u0027: api_version}"},{"line_number":24,"context_line":"    return h_params"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":75,"id":"9a30ddce_10850106","line":23,"range":{"start_line":23,"start_character":32,"end_line":23,"end_character":62},"in_reply_to":"9a30ddce_7c84665d","updated":"2017-03-10 08:42:55.000000000","message":"Done","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"340882066a58e719387ffc2b9fb266f4eb3d1a64","unresolved":false,"context_lines":[{"line_number":291,"context_line":"                                 data)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    @base.handle_errors"},{"line_number":294,"context_line":"    def set_node_maintenance(self, node_uuid, state, reason\u003dNone):"},{"line_number":295,"context_line":"        maintenance_mode \u003d strutils.bool_from_string(state)"},{"line_number":296,"context_line":"        reason \u003d {\u0027reason\u0027: reason}"},{"line_number":297,"context_line":"        if maintenance_mode:"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_97bf0760","line":294,"range":{"start_line":294,"start_character":0,"end_line":294,"end_character":66},"updated":"2017-03-10 23:15:43.000000000","message":"It\u0027s quite clear what this method does. However, all of the other methods have docstring but this one.","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b0df67f68e070c565492ca20015f92f114d5bfed","unresolved":false,"context_lines":[{"line_number":291,"context_line":"                                 data)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    @base.handle_errors"},{"line_number":294,"context_line":"    def set_node_maintenance(self, node_uuid, state, reason\u003dNone):"},{"line_number":295,"context_line":"        maintenance_mode \u003d strutils.bool_from_string(state)"},{"line_number":296,"context_line":"        reason \u003d {\u0027reason\u0027: reason}"},{"line_number":297,"context_line":"        if maintenance_mode:"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_8a2987e8","line":294,"range":{"start_line":294,"start_character":0,"end_line":294,"end_character":66},"in_reply_to":"9a30ddce_044e75c0","updated":"2017-03-13 08:33:16.000000000","message":"Done","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"5b4dcc5e3416732fe31e2d35994720da61c4dfae","unresolved":false,"context_lines":[{"line_number":291,"context_line":"                                 data)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    @base.handle_errors"},{"line_number":294,"context_line":"    def set_node_maintenance(self, node_uuid, state, reason\u003dNone):"},{"line_number":295,"context_line":"        maintenance_mode \u003d strutils.bool_from_string(state)"},{"line_number":296,"context_line":"        reason \u003d {\u0027reason\u0027: reason}"},{"line_number":297,"context_line":"        if maintenance_mode:"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_044e75c0","line":294,"range":{"start_line":294,"start_character":0,"end_line":294,"end_character":66},"in_reply_to":"9a30ddce_97bf0760","updated":"2017-03-13 00:20:38.000000000","message":"+1","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"340882066a58e719387ffc2b9fb266f4eb3d1a64","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        if maintenance_mode:"},{"line_number":298,"context_line":"            return self._put_request(\u0027nodes/%s/maintenance\u0027 % node_uuid,"},{"line_number":299,"context_line":"                                     reason)"},{"line_number":300,"context_line":"        uri \u003d self._get_uri(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)"},{"line_number":301,"context_line":"        resp, body \u003d self.delete(uri)"},{"line_number":302,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":303,"context_line":"        return resp, body"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @base.handle_errors"},{"line_number":306,"context_line":"    def set_node_raid_config(self, node_uuid, target_raid_config):"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_77729312","line":303,"range":{"start_line":300,"start_character":0,"end_line":303,"end_character":25},"updated":"2017-03-10 23:15:43.000000000","message":"Is this snippet equivalent to?\n\nreturn self._delete_request(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b0df67f68e070c565492ca20015f92f114d5bfed","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        if maintenance_mode:"},{"line_number":298,"context_line":"            return self._put_request(\u0027nodes/%s/maintenance\u0027 % node_uuid,"},{"line_number":299,"context_line":"                                     reason)"},{"line_number":300,"context_line":"        uri \u003d self._get_uri(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)"},{"line_number":301,"context_line":"        resp, body \u003d self.delete(uri)"},{"line_number":302,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":303,"context_line":"        return resp, body"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @base.handle_errors"},{"line_number":306,"context_line":"    def set_node_raid_config(self, node_uuid, target_raid_config):"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_ca1fffb4","line":303,"range":{"start_line":300,"start_character":0,"end_line":303,"end_character":25},"in_reply_to":"9a30ddce_77729312","updated":"2017-03-13 08:33:16.000000000","message":"no it is not the same, we also check response status.","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"c28d40d13a1607ea36de6b727adc5a163a86fd19","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        if maintenance_mode:"},{"line_number":298,"context_line":"            return self._put_request(\u0027nodes/%s/maintenance\u0027 % node_uuid,"},{"line_number":299,"context_line":"                                     reason)"},{"line_number":300,"context_line":"        uri \u003d self._get_uri(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)"},{"line_number":301,"context_line":"        resp, body \u003d self.delete(uri)"},{"line_number":302,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":303,"context_line":"        return resp, body"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @base.handle_errors"},{"line_number":306,"context_line":"    def set_node_raid_config(self, node_uuid, target_raid_config):"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_d67eb7e2","line":303,"range":{"start_line":300,"start_character":0,"end_line":303,"end_character":25},"in_reply_to":"9a30ddce_ca1fffb4","updated":"2017-03-13 15:36:55.000000000","message":"OK, thanks.","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"fb8a5b8cb262abace58b3f7c68fcbddadc704e1d","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    def update_node(self, uuid, patch\u003dNone, **kwargs):"},{"line_number":217,"context_line":"        \"\"\"Update the specified node."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        :param uuid: The unique identifier of the node."},{"line_number":220,"context_line":"        :return: A tuple with the server response and the updated node."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":81,"id":"9a30ddce_27b3710b","line":219,"updated":"2017-03-13 10:18:46.000000000","message":":param patch: ...","commit_id":"c9f9acfbe4c2d89ff05e8e2b5999be4fff6dc151"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"5d044075e6206f8f93c2f7ea97c3735ab801120b","unresolved":false,"context_lines":[{"line_number":216,"context_line":"    def update_node(self, uuid, patch\u003dNone, **kwargs):"},{"line_number":217,"context_line":"        \"\"\"Update the specified node."},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        :param uuid: The unique identifier of the node."},{"line_number":220,"context_line":"        :return: A tuple with the server response and the updated node."},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":81,"id":"9a30ddce_181888d2","line":219,"in_reply_to":"9a30ddce_27b3710b","updated":"2017-03-13 11:39:37.000000000","message":"Done","commit_id":"c9f9acfbe4c2d89ff05e8e2b5999be4fff6dc151"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"fb8a5b8cb262abace58b3f7c68fcbddadc704e1d","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        :param node_uuid: The unique identifier of the node."},{"line_number":298,"context_line":"        :param state: Desired maintenance state to set"},{"line_number":299,"context_line":"                      (\u0027on\u0027 or \u0027true\u0027 / \u0027off\u0027 or \u0027false\u0027 )."},{"line_number":300,"context_line":"        :param reason: Reason when setting maintenance mode."},{"line_number":301,"context_line":"        \"\"\""},{"line_number":302,"context_line":"        maintenance_mode \u003d strutils.bool_from_string(state)"},{"line_number":303,"context_line":"        reason \u003d {\u0027reason\u0027: reason}"}],"source_content_type":"text/x-python","patch_set":81,"id":"9a30ddce_479b0566","line":300,"updated":"2017-03-13 10:18:46.000000000","message":":returns: ...\n\nI see there\u0027s a mix and match in this whole file about what is returned. Some methods returns on the body (L352) others the response and body like this one (L388).\n\nI know it\u0027s not part of this patch to fix it all, but it would be good to properly document the methods this patch touches anyway.","commit_id":"c9f9acfbe4c2d89ff05e8e2b5999be4fff6dc151"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"5d044075e6206f8f93c2f7ea97c3735ab801120b","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        :param node_uuid: The unique identifier of the node."},{"line_number":298,"context_line":"        :param state: Desired maintenance state to set"},{"line_number":299,"context_line":"                      (\u0027on\u0027 or \u0027true\u0027 / \u0027off\u0027 or \u0027false\u0027 )."},{"line_number":300,"context_line":"        :param reason: Reason when setting maintenance mode."},{"line_number":301,"context_line":"        \"\"\""},{"line_number":302,"context_line":"        maintenance_mode \u003d strutils.bool_from_string(state)"},{"line_number":303,"context_line":"        reason \u003d {\u0027reason\u0027: reason}"}],"source_content_type":"text/x-python","patch_set":81,"id":"9a30ddce_d87b50bc","line":300,"in_reply_to":"9a30ddce_479b0566","updated":"2017-03-13 11:39:37.000000000","message":"The API doesn\u0027t return any body for this request, not sure we should return anything here.\nGood catch!","commit_id":"c9f9acfbe4c2d89ff05e8e2b5999be4fff6dc151"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e0aa94083e7479ef121c7473b5ecae87576e5fc0","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            configuration drive string."},{"line_number":283,"context_line":"        :param clean_steps: A list with clean steps to execute."},{"line_number":284,"context_line":"        \"\"\""},{"line_number":285,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":286,"context_line":"        # NOTE (vsaienk0): Add both here if specified, do not check anything"},{"line_number":287,"context_line":"        # API will return an error in case of invalid parameters."},{"line_number":288,"context_line":"        if configdrive:"}],"source_content_type":"text/x-python","patch_set":82,"id":"9a30ddce_e0e5addb","line":285,"updated":"2017-03-13 17:49:29.000000000","message":"Just curious on this. Was it broken before or does it not work if just did.\n\n data \u003d {\u0027target\u0027: state, \u0027configdrive\u0027: configdrive, \u0027clean_steps\u0027: clean_steps}\n\nWondering if we need all this logic.","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"73ec486e2f3e75dd2c72fa6dbc4b19deab356191","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            configuration drive string."},{"line_number":283,"context_line":"        :param clean_steps: A list with clean steps to execute."},{"line_number":284,"context_line":"        \"\"\""},{"line_number":285,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":286,"context_line":"        # NOTE (vsaienk0): Add both here if specified, do not check anything"},{"line_number":287,"context_line":"        # API will return an error in case of invalid parameters."},{"line_number":288,"context_line":"        if configdrive:"}],"source_content_type":"text/x-python","patch_set":82,"id":"7a25e98e_d0ba31c0","line":285,"in_reply_to":"7a25e98e_3068e5ba","updated":"2017-03-13 21:34:55.000000000","message":"I don\u0027t want to mix all into single request. Is there any issues if it will left as is?","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"6d44334610589397f9ab3c7f2aa316fd4dfa595e","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            configuration drive string."},{"line_number":283,"context_line":"        :param clean_steps: A list with clean steps to execute."},{"line_number":284,"context_line":"        \"\"\""},{"line_number":285,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":286,"context_line":"        # NOTE (vsaienk0): Add both here if specified, do not check anything"},{"line_number":287,"context_line":"        # API will return an error in case of invalid parameters."},{"line_number":288,"context_line":"        if configdrive:"}],"source_content_type":"text/x-python","patch_set":82,"id":"7a25e98e_d0c071e3","line":285,"in_reply_to":"7a25e98e_d0ba31c0","updated":"2017-03-13 21:45:51.000000000","message":"No issues, and I am fine with it. I was just curious as different from base.\n\nThank you.","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4301ffe36abdc8c86509b277683ceb2ad3d7ebd3","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            configuration drive string."},{"line_number":283,"context_line":"        :param clean_steps: A list with clean steps to execute."},{"line_number":284,"context_line":"        \"\"\""},{"line_number":285,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":286,"context_line":"        # NOTE (vsaienk0): Add both here if specified, do not check anything"},{"line_number":287,"context_line":"        # API will return an error in case of invalid parameters."},{"line_number":288,"context_line":"        if configdrive:"}],"source_content_type":"text/x-python","patch_set":82,"id":"7a25e98e_c3518910","line":285,"in_reply_to":"7a25e98e_d0c071e3","updated":"2017-03-13 21:53:09.000000000","message":"It will work\ndata \u003d {\u0027target\u0027: state, \u0027configdrive\u0027: configdrive, \u0027clean_steps\u0027: clean_steps}\n\nbut it will look strange if we set configdrive when set node to cleaning and vice versa.","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"db93802b3bd2a3465f6c22dc74fc3c84ceb03a64","unresolved":false,"context_lines":[{"line_number":282,"context_line":"            configuration drive string."},{"line_number":283,"context_line":"        :param clean_steps: A list with clean steps to execute."},{"line_number":284,"context_line":"        \"\"\""},{"line_number":285,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":286,"context_line":"        # NOTE (vsaienk0): Add both here if specified, do not check anything"},{"line_number":287,"context_line":"        # API will return an error in case of invalid parameters."},{"line_number":288,"context_line":"        if configdrive:"}],"source_content_type":"text/x-python","patch_set":82,"id":"7a25e98e_3068e5ba","line":285,"in_reply_to":"9a30ddce_e0e5addb","updated":"2017-03-13 21:24:45.000000000","message":"Can I assume that we can\u0027t do it like that?","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e0aa94083e7479ef121c7473b5ecae87576e5fc0","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":286,"context_line":"        # NOTE (vsaienk0): Add both here if specified, do not check anything"},{"line_number":287,"context_line":"        # API will return an error in case of invalid parameters."},{"line_number":288,"context_line":"        if configdrive:"},{"line_number":289,"context_line":"            data[\u0027configdrive\u0027] \u003d configdrive"},{"line_number":290,"context_line":"        if clean_steps:"},{"line_number":291,"context_line":"            data[\u0027clean_steps\u0027] \u003d clean_steps"}],"source_content_type":"text/x-python","patch_set":82,"id":"9a30ddce_00e9e1b6","line":288,"updated":"2017-03-13 17:49:29.000000000","message":"if configdrive is not None:","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"21c0ebea5f82245b57e4efef7b205b56086947e5","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":286,"context_line":"        # NOTE (vsaienk0): Add both here if specified, do not check anything"},{"line_number":287,"context_line":"        # API will return an error in case of invalid parameters."},{"line_number":288,"context_line":"        if configdrive:"},{"line_number":289,"context_line":"            data[\u0027configdrive\u0027] \u003d configdrive"},{"line_number":290,"context_line":"        if clean_steps:"},{"line_number":291,"context_line":"            data[\u0027clean_steps\u0027] \u003d clean_steps"}],"source_content_type":"text/x-python","patch_set":82,"id":"7a25e98e_a0172653","line":288,"in_reply_to":"9a30ddce_00e9e1b6","updated":"2017-03-13 20:39:45.000000000","message":"Done","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"c6ba03624069761bd70b127bf106dbb066404117","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        # API will return an error in case of invalid parameters."},{"line_number":288,"context_line":"        if configdrive:"},{"line_number":289,"context_line":"            data[\u0027configdrive\u0027] \u003d configdrive"},{"line_number":290,"context_line":"        if clean_steps:"},{"line_number":291,"context_line":"            data[\u0027clean_steps\u0027] \u003d clean_steps"},{"line_number":292,"context_line":"        return self._put_request(\u0027nodes/%s/states/provision\u0027 % node_uuid,"},{"line_number":293,"context_line":"                                 data)"}],"source_content_type":"text/x-python","patch_set":82,"id":"7a25e98e_06f9fac8","line":290,"updated":"2017-03-13 17:50:18.000000000","message":"if clean_steps is not None:","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"21c0ebea5f82245b57e4efef7b205b56086947e5","unresolved":false,"context_lines":[{"line_number":287,"context_line":"        # API will return an error in case of invalid parameters."},{"line_number":288,"context_line":"        if configdrive:"},{"line_number":289,"context_line":"            data[\u0027configdrive\u0027] \u003d configdrive"},{"line_number":290,"context_line":"        if clean_steps:"},{"line_number":291,"context_line":"            data[\u0027clean_steps\u0027] \u003d clean_steps"},{"line_number":292,"context_line":"        return self._put_request(\u0027nodes/%s/states/provision\u0027 % node_uuid,"},{"line_number":293,"context_line":"                                 data)"}],"source_content_type":"text/x-python","patch_set":82,"id":"7a25e98e_c01c227a","line":290,"in_reply_to":"7a25e98e_06f9fac8","updated":"2017-03-13 20:39:45.000000000","message":"Done","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e0aa94083e7479ef121c7473b5ecae87576e5fc0","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                                     reason)"},{"line_number":309,"context_line":"        uri \u003d self._get_uri(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)"},{"line_number":310,"context_line":"        resp, body \u003d self.delete(uri)"},{"line_number":311,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    @base.handle_errors"},{"line_number":314,"context_line":"    def set_node_raid_config(self, node_uuid, target_raid_config):"}],"source_content_type":"text/x-python","patch_set":82,"id":"9a30ddce_407af924","line":311,"range":{"start_line":311,"start_character":30,"end_line":311,"end_character":33},"updated":"2017-03-13 17:49:29.000000000","message":"this should use:\n http_client.WHATEVER_IS_THE_CODE","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"21c0ebea5f82245b57e4efef7b205b56086947e5","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                                     reason)"},{"line_number":309,"context_line":"        uri \u003d self._get_uri(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)"},{"line_number":310,"context_line":"        resp, body \u003d self.delete(uri)"},{"line_number":311,"context_line":"        self.expected_success(202, resp.status)"},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"    @base.handle_errors"},{"line_number":314,"context_line":"    def set_node_raid_config(self, node_uuid, target_raid_config):"}],"source_content_type":"text/x-python","patch_set":82,"id":"7a25e98e_bb9f5bb3","line":311,"range":{"start_line":311,"start_character":30,"end_line":311,"end_character":33},"in_reply_to":"9a30ddce_407af924","updated":"2017-03-13 20:39:45.000000000","message":"Done","commit_id":"13060b53312a9cef9c9d0db9a2a1b05a00de855e"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"50a257ce6fd706d61596208e35ac64d485ed600d","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        maintenance_mode \u003d strutils.bool_from_string(state)"},{"line_number":308,"context_line":"        reason \u003d {\u0027reason\u0027: reason}"},{"line_number":309,"context_line":"        if maintenance_mode:"},{"line_number":310,"context_line":"            return self._put_request(\u0027nodes/%s/maintenance\u0027 % node_uuid,"},{"line_number":311,"context_line":"                                     reason)"},{"line_number":312,"context_line":"        uri \u003d self._get_uri(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)"},{"line_number":313,"context_line":"        resp, body \u003d self.delete(uri)"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_66c8e375","line":310,"updated":"2017-03-13 22:33:10.000000000","message":"Should there be a self.expected_success for this call?","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"451f8758e306a3fd474cd2d9b5b1768091a43c22","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        maintenance_mode \u003d strutils.bool_from_string(state)"},{"line_number":308,"context_line":"        reason \u003d {\u0027reason\u0027: reason}"},{"line_number":309,"context_line":"        if maintenance_mode:"},{"line_number":310,"context_line":"            return self._put_request(\u0027nodes/%s/maintenance\u0027 % node_uuid,"},{"line_number":311,"context_line":"                                     reason)"},{"line_number":312,"context_line":"        uri \u003d self._get_uri(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)"},{"line_number":313,"context_line":"        resp, body \u003d self.delete(uri)"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_a6173b53","line":310,"in_reply_to":"7a25e98e_66c8e375","updated":"2017-03-13 23:10:41.000000000","message":"I will add this method in patch where actually using it https://review.openstack.org/#/c/429770/","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"50a257ce6fd706d61596208e35ac64d485ed600d","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        if maintenance_mode:"},{"line_number":310,"context_line":"            return self._put_request(\u0027nodes/%s/maintenance\u0027 % node_uuid,"},{"line_number":311,"context_line":"                                     reason)"},{"line_number":312,"context_line":"        uri \u003d self._get_uri(\u0027nodes/%s/maintenance\u0027 % node_uuid, None)"},{"line_number":313,"context_line":"        resp, body \u003d self.delete(uri)"},{"line_number":314,"context_line":"        self.expected_success(http_client.ACCEPTED, resp.status)"},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_a6365bb2","line":312,"range":{"start_line":312,"start_character":64,"end_line":312,"end_character":68},"updated":"2017-03-13 22:33:10.000000000","message":"This seems un-needed, as it is the default value.\n\nalso get on this uri doesn\u0027t seem documented at:\nhttps://developer.openstack.org/api-ref/baremetal/\n\nWhy not call delete directly on \"nodes/%s/maintenance\"?","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        :param uuid: The unique identifier of the node."},{"line_number":222,"context_line":"        :param patch: A JSON path that sets values of the specified attributes"},{"line_number":223,"context_line":"                      to the new ones."},{"line_number":224,"context_line":"        :return: A tuple with the server response and the updated node."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        \"\"\""},{"line_number":227,"context_line":"        node_attributes \u003d (\u0027properties/cpu_arch\u0027,"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_67bb8c0f","line":224,"updated":"2017-03-14 14:56:00.000000000","message":"it wasn\u0027t documented here before, but if you have a chance, maybe add a :param kwargs: description because we should mention that if patch is not set, the kwargs are used instead. (e.g. We aren\u0027t using both patch \u0026 kwargs, so I think it is worth documenting it.)\n\nFor the kwargs, I\u0027m assuming the keys are the attribute paths?","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        :param uuid: The unique identifier of the node."},{"line_number":222,"context_line":"        :param patch: A JSON path that sets values of the specified attributes"},{"line_number":223,"context_line":"                      to the new ones."},{"line_number":224,"context_line":"        :return: A tuple with the server response and the updated node."},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        \"\"\""},{"line_number":227,"context_line":"        node_attributes \u003d (\u0027properties/cpu_arch\u0027,"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_b154be54","line":224,"in_reply_to":"3a1ff146_67bb8c0f","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        :param clean_steps: A list with clean steps to execute."},{"line_number":286,"context_line":"        \"\"\""},{"line_number":287,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":288,"context_line":"        # NOTE (vsaienk0): Add both here if specified, do not check anything"},{"line_number":289,"context_line":"        # API will return an error in case of invalid parameters."},{"line_number":290,"context_line":"        if configdrive is not None:"},{"line_number":291,"context_line":"            data[\u0027configdrive\u0027] \u003d configdrive"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_6700ecab","line":288,"updated":"2017-03-14 14:56:00.000000000","message":"nit, add a period at the end.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        :param clean_steps: A list with clean steps to execute."},{"line_number":286,"context_line":"        \"\"\""},{"line_number":287,"context_line":"        data \u003d {\u0027target\u0027: state}"},{"line_number":288,"context_line":"        # NOTE (vsaienk0): Add both here if specified, do not check anything"},{"line_number":289,"context_line":"        # API will return an error in case of invalid parameters."},{"line_number":290,"context_line":"        if configdrive is not None:"},{"line_number":291,"context_line":"            data[\u0027configdrive\u0027] \u003d configdrive"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_31c7ee13","line":288,"in_reply_to":"3a1ff146_6700ecab","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"}],"ironic_tempest_plugin/tests/api/admin/base.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ed6855d096f42a43373d8d53bb17658f2bd2aca3","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        if not CONF.service_available.ironic:"},{"line_number":65,"context_line":"            raise cls.skipException(\u0027Ironic is not enabled.\u0027)"},{"line_number":66,"context_line":"        if not CONF.service_available.nova:"},{"line_number":67,"context_line":"            raise cls.skipException(\u0027Nova is not enabled.\u0027)"},{"line_number":68,"context_line":"        if CONF.baremetal.driver not in SUPPORTED_DRIVERS:"},{"line_number":69,"context_line":"            skip_msg \u003d (\u0027%s skipped as Ironic driver %s is not supported for \u0027"},{"line_number":70,"context_line":"                        \u0027testing.\u0027 %"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_3c9f1860","line":67,"updated":"2017-02-08 13:23:26.000000000","message":"isn\u0027t it done by @services decorators on test methods?","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b06e1b7226ad9b7677f112ac62db5eb824b8b47d","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        if not CONF.service_available.ironic:"},{"line_number":65,"context_line":"            raise cls.skipException(\u0027Ironic is not enabled.\u0027)"},{"line_number":66,"context_line":"        if not CONF.service_available.nova:"},{"line_number":67,"context_line":"            raise cls.skipException(\u0027Nova is not enabled.\u0027)"},{"line_number":68,"context_line":"        if CONF.baremetal.driver not in SUPPORTED_DRIVERS:"},{"line_number":69,"context_line":"            skip_msg \u003d (\u0027%s skipped as Ironic driver %s is not supported for \u0027"},{"line_number":70,"context_line":"                        \u0027testing.\u0027 %"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_e54a5054","line":67,"in_reply_to":"1a430d35_3c9f1860","updated":"2017-02-08 15:44:14.000000000","message":"yes, it is checked by services decorator.","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"}],"ironic_tempest_plugin/tests/scenario/baremetal_manager.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"1543069a19e71e2175c707a9ff48a47c81ffcf3f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    DELETING \u003d \u0027deleting\u0027"},{"line_number":65,"context_line":"    DELETED \u003d \u0027deleted\u0027"},{"line_number":66,"context_line":"    ERROR \u003d \u0027error\u0027"},{"line_number":67,"context_line":"    MANAGEABLE \u003d \u0027manageable\u0027"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class BaremetalScenarioTest(manager.ScenarioTest):"}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_0de7ecb0","line":67,"updated":"2017-03-08 22:54:33.000000000","message":"Does it matter that there are states missing here? I presume they\u0027re just being added as they\u0027re being used in tests?","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"374abdef1a656ba6f2a21018d8591493be9f53a4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    DELETING \u003d \u0027deleting\u0027"},{"line_number":65,"context_line":"    DELETED \u003d \u0027deleted\u0027"},{"line_number":66,"context_line":"    ERROR \u003d \u0027error\u0027"},{"line_number":67,"context_line":"    MANAGEABLE \u003d \u0027manageable\u0027"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class BaremetalScenarioTest(manager.ScenarioTest):"}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_06c5015a","line":67,"in_reply_to":"9a30ddce_0de7ecb0","updated":"2017-03-09 08:28:31.000000000","message":"correct, we adding new tests here once we using them in tests.","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":14614,"name":"Kyrylo Romanenko","display_name":"K.Romanenko","email":"romanenko-kv@hotmail.com","username":"kromanenko"},"change_message_id":"a466b25885415d02e687aeab6bca37aa433e72b0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"CONF \u003d config.CONF"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def retryonconflict(func):"},{"line_number":32,"context_line":"    def inner(*args, **kwargs):"},{"line_number":33,"context_line":"        for att in range(10):"},{"line_number":34,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":75,"id":"9a30ddce_ba6e0294","line":31,"range":{"start_line":31,"start_character":4,"end_line":31,"end_character":19},"updated":"2017-03-09 10:18:55.000000000","message":"Please divide words with underscores for readability: retry_on_conflict","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77994c2591e814cbd9558094f7d64908dc541478","unresolved":false,"context_lines":[{"line_number":28,"context_line":"CONF \u003d config.CONF"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def retryonconflict(func):"},{"line_number":32,"context_line":"    def inner(*args, **kwargs):"},{"line_number":33,"context_line":"        for att in range(10):"},{"line_number":34,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":75,"id":"9a30ddce_f0adcd84","line":31,"range":{"start_line":31,"start_character":4,"end_line":31,"end_character":19},"in_reply_to":"9a30ddce_1c960a93","updated":"2017-03-10 08:42:55.000000000","message":"Done","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"8d26944209caf61815b3f8c0916fe05573617885","unresolved":false,"context_lines":[{"line_number":28,"context_line":"CONF \u003d config.CONF"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def retryonconflict(func):"},{"line_number":32,"context_line":"    def inner(*args, **kwargs):"},{"line_number":33,"context_line":"        for att in range(10):"},{"line_number":34,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":75,"id":"9a30ddce_1c960a93","line":31,"range":{"start_line":31,"start_character":4,"end_line":31,"end_character":19},"in_reply_to":"9a30ddce_ba6e0294","updated":"2017-03-09 22:35:51.000000000","message":"+1","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"8d26944209caf61815b3f8c0916fe05573617885","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # allow any issues obtaining the node list to raise early"},{"line_number":98,"context_line":"        cls.baremetal_client.list_nodes()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @classmethod"},{"line_number":101,"context_line":"    def _node_state_timeout(cls, node_id, state_attr,"},{"line_number":102,"context_line":"                            target_states, timeout\u003d10, interval\u003d1):"},{"line_number":103,"context_line":"        if not isinstance(target_states, list):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9a30ddce_fcdf7666","line":100,"updated":"2017-03-09 22:35:51.000000000","message":"kind of unrelated, but I like these changes","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77994c2591e814cbd9558094f7d64908dc541478","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # allow any issues obtaining the node list to raise early"},{"line_number":98,"context_line":"        cls.baremetal_client.list_nodes()"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @classmethod"},{"line_number":101,"context_line":"    def _node_state_timeout(cls, node_id, state_attr,"},{"line_number":102,"context_line":"                            target_states, timeout\u003d10, interval\u003d1):"},{"line_number":103,"context_line":"        if not isinstance(target_states, list):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9a30ddce_50c93958","line":100,"in_reply_to":"9a30ddce_fcdf7666","updated":"2017-03-10 08:42:55.000000000","message":"It is related, please have look how all standalone tests works.","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"fb8a5b8cb262abace58b3f7c68fcbddadc704e1d","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def retry_on_conflict(func):"},{"line_number":32,"context_line":"    def inner(*args, **kwargs):"},{"line_number":33,"context_line":"        for att in range(10):"},{"line_number":34,"context_line":"            try:"},{"line_number":35,"context_line":"                return func(*args, **kwargs)"},{"line_number":36,"context_line":"            except lib_exc.Conflict as e:"}],"source_content_type":"text/x-python","patch_set":81,"id":"9a30ddce_c7d535e5","line":33,"range":{"start_line":33,"start_character":25,"end_line":33,"end_character":27},"updated":"2017-03-13 10:18:46.000000000","message":"nit: Should # of attempts and delay between then be configurable ? \n\nPerhaps at least adding a TODO note in this patch so we don\u0027t forget to do it","commit_id":"c9f9acfbe4c2d89ff05e8e2b5999be4fff6dc151"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"5d044075e6206f8f93c2f7ea97c3735ab801120b","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def retry_on_conflict(func):"},{"line_number":32,"context_line":"    def inner(*args, **kwargs):"},{"line_number":33,"context_line":"        for att in range(10):"},{"line_number":34,"context_line":"            try:"},{"line_number":35,"context_line":"                return func(*args, **kwargs)"},{"line_number":36,"context_line":"            except lib_exc.Conflict as e:"}],"source_content_type":"text/x-python","patch_set":81,"id":"9a30ddce_b8577c24","line":33,"range":{"start_line":33,"start_character":25,"end_line":33,"end_character":27},"in_reply_to":"9a30ddce_c7d535e5","updated":"2017-03-13 11:39:37.000000000","message":"Done","commit_id":"c9f9acfbe4c2d89ff05e8e2b5999be4fff6dc151"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def retry_on_conflict(func):"},{"line_number":33,"context_line":"    def inner(*args, **kwargs):"},{"line_number":34,"context_line":"        # TODO(vsaienko): make this configurable in future."},{"line_number":35,"context_line":"        for att in range(10):"},{"line_number":36,"context_line":"            try:"},{"line_number":37,"context_line":"                return func(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_27927458","line":34,"updated":"2017-03-14 14:56:00.000000000","message":"by \u0027this\u0027, you mean the number of iterations and the time to sleep between iterations? If so, would be good to be explicit so that someone else could make the change in the future :)\n\nMaybe we should just open bugs against all our TODOs...","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def retry_on_conflict(func):"},{"line_number":33,"context_line":"    def inner(*args, **kwargs):"},{"line_number":34,"context_line":"        # TODO(vsaienko): make this configurable in future."},{"line_number":35,"context_line":"        for att in range(10):"},{"line_number":36,"context_line":"            try:"},{"line_number":37,"context_line":"                return func(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_11e3d2a4","line":34,"in_reply_to":"3a1ff146_27927458","updated":"2017-03-15 09:19:12.000000000","message":"It is a tests, not sure if we need to make this configurable in future. I updated TODO here.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                return func(*args, **kwargs)"},{"line_number":38,"context_line":"            except lib_exc.Conflict as e:"},{"line_number":39,"context_line":"                time.sleep(1)"},{"line_number":40,"context_line":"        raise lib_exc.Conflict(e)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    return inner"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_27235407","line":40,"updated":"2017-03-14 14:56:00.000000000","message":"e won\u0027t exist outside of the above except?","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f1406699135d294224fad104de8faad27aae52eb","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                return func(*args, **kwargs)"},{"line_number":38,"context_line":"            except lib_exc.Conflict as e:"},{"line_number":39,"context_line":"                time.sleep(1)"},{"line_number":40,"context_line":"        raise lib_exc.Conflict(e)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    return inner"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_f540f709","line":40,"in_reply_to":"3a1ff146_27235407","updated":"2017-03-14 18:58:26.000000000","message":"Nope, it does work actually, if we hit an exception (and we do if we get to this point) variable e exists.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                return func(*args, **kwargs)"},{"line_number":38,"context_line":"            except lib_exc.Conflict as e:"},{"line_number":39,"context_line":"                time.sleep(1)"},{"line_number":40,"context_line":"        raise lib_exc.Conflict(e)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    return inner"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_112d92a7","line":40,"in_reply_to":"3a1ff146_d081424f","updated":"2017-03-15 09:19:12.000000000","message":"The minimum number of iterations should be 1. If we allow setting it to 0 we will not send anything. Added e\u003dNone at L35 to avoid confusion.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"b4b192894c17eb4e26fadcd099b86d5b79f4740b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                return func(*args, **kwargs)"},{"line_number":38,"context_line":"            except lib_exc.Conflict as e:"},{"line_number":39,"context_line":"                time.sleep(1)"},{"line_number":40,"context_line":"        raise lib_exc.Conflict(e)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    return inner"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_d081424f","line":40,"in_reply_to":"3a1ff146_f540f709","updated":"2017-03-14 23:35:12.000000000","message":"Oh. I learned something new; I had always assumed that e was valid in that scope only.\n\nIf in the future, the number of iterations is configurable and it gets set to zero and we don\u0027t code for that, this will fail. What I\u0027d like to see is e\u003dNone before L35, just in case. Or maybe not since it is hardcoded to 10 now. whatever.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    @retry_on_conflict"},{"line_number":141,"context_line":"    def update_node_driver(cls, node_id, driver):"},{"line_number":142,"context_line":"        _, body \u003d cls.baremetal_client.update_node("},{"line_number":143,"context_line":"            node_id, driver\u003ddriver)"},{"line_number":144,"context_line":"        return body"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_6790eced","line":143,"updated":"2017-03-14 14:56:00.000000000","message":"makes me wonder if we want optional interfaces to be also set here too, for dynamic drivers. but maybe that will happen later.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f1406699135d294224fad104de8faad27aae52eb","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    @retry_on_conflict"},{"line_number":141,"context_line":"    def update_node_driver(cls, node_id, driver):"},{"line_number":142,"context_line":"        _, body \u003d cls.baremetal_client.update_node("},{"line_number":143,"context_line":"            node_id, driver\u003ddriver)"},{"line_number":144,"context_line":"        return body"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_d5621bad","line":143,"in_reply_to":"3a1ff146_6790eced","updated":"2017-03-14 18:58:26.000000000","message":"++, I\u0027m for adding it along with the tests that will actually use it.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    @retry_on_conflict"},{"line_number":141,"context_line":"    def update_node_driver(cls, node_id, driver):"},{"line_number":142,"context_line":"        _, body \u003d cls.baremetal_client.update_node("},{"line_number":143,"context_line":"            node_id, driver\u003ddriver)"},{"line_number":144,"context_line":"        return body"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_dc107151","line":143,"in_reply_to":"3a1ff146_d5621bad","updated":"2017-03-15 09:19:12.000000000","message":"I don\u0027t want to introduce dead code. We will extend it when write appropriate tests.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @classmethod"},{"line_number":152,"context_line":"    @retry_on_conflict"},{"line_number":153,"context_line":"    def set_node_provision_state(cls, node_id, state, clean_steps\u003dNone):"},{"line_number":154,"context_line":"        cls.baremetal_client.set_node_provision_state("},{"line_number":155,"context_line":"            node_id, state, clean_steps\u003dclean_steps)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_a7c024e2","line":153,"updated":"2017-03-14 14:56:00.000000000","message":"no configdrive parameter?","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @classmethod"},{"line_number":152,"context_line":"    @retry_on_conflict"},{"line_number":153,"context_line":"    def set_node_provision_state(cls, node_id, state, clean_steps\u003dNone):"},{"line_number":154,"context_line":"        cls.baremetal_client.set_node_provision_state("},{"line_number":155,"context_line":"            node_id, state, clean_steps\u003dclean_steps)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_fc344ddf","line":153,"in_reply_to":"3a1ff146_9500a3ac","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @classmethod"},{"line_number":152,"context_line":"    @retry_on_conflict"},{"line_number":153,"context_line":"    def set_node_provision_state(cls, node_id, state, clean_steps\u003dNone):"},{"line_number":154,"context_line":"        cls.baremetal_client.set_node_provision_state("},{"line_number":155,"context_line":"            node_id, state, clean_steps\u003dclean_steps)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_1c3209f2","line":153,"in_reply_to":"3a1ff146_a7c024e2","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f1406699135d294224fad104de8faad27aae52eb","unresolved":false,"context_lines":[{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @classmethod"},{"line_number":152,"context_line":"    @retry_on_conflict"},{"line_number":153,"context_line":"    def set_node_provision_state(cls, node_id, state, clean_steps\u003dNone):"},{"line_number":154,"context_line":"        cls.baremetal_client.set_node_provision_state("},{"line_number":155,"context_line":"            node_id, state, clean_steps\u003dclean_steps)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_9500a3ac","line":153,"in_reply_to":"3a1ff146_a7c024e2","updated":"2017-03-14 18:58:26.000000000","message":"Hmm, yeah, I thought that it\u0027s because we plan to test configdrive in nova tests, not standalone... Although the client method has the argument, so I don\u0027t see why not add it here too.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"}],"ironic_tempest_plugin/tests/scenario/baremetal_standalone_manager.py":[{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"f1df6a44b82e515b53e3a012800b07bf96109a03","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def get_and_lock_node(self, node\u003dNone):"},{"line_number":129,"context_line":"        instance_uuid \u003d uuidutils.generate_uuid()"},{"line_number":130,"context_line":"        node \u003d []"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"        def _try_to_associate_instance():"},{"line_number":133,"context_line":"            n \u003d node or self.get_random_available_node()"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a461143_68980ac1","line":130,"range":{"start_line":130,"start_character":8,"end_line":130,"end_character":17},"updated":"2017-01-30 23:25:16.000000000","message":"I wonder if this override of node should be here, since we\u0027re not using the argument node. Or maybe renaming this method to get_and_lock_random_node() would be better.","commit_id":"8543dd20739ad55f91bc79630825aa79c5e02c6d"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"f1df6a44b82e515b53e3a012800b07bf96109a03","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                return False"},{"line_number":139,"context_line":"            return True"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        if (not tempest.test.call_until_true(_try_to_associate_instance,"},{"line_number":142,"context_line":"            CONF.baremetal.association_timeout, 1)):"},{"line_number":143,"context_line":"            msg \u003d (\u0027Timed out waiting to get Ironic node by instance uuid %s\u0027"},{"line_number":144,"context_line":"                   % instance_uuid)"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a461143_887616d5","line":141,"range":{"start_line":141,"start_character":16,"end_line":141,"end_character":44},"updated":"2017-01-30 23:25:16.000000000","message":"This function is being is being deprecated in Ocata.","commit_id":"8543dd20739ad55f91bc79630825aa79c5e02c6d"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"f1df6a44b82e515b53e3a012800b07bf96109a03","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            timeout\u003dCONF.baremetal.unprovision_timeout,"},{"line_number":178,"context_line":"            interval\u003d1)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def verify_partitions_disk_partitions(self, vm_name,"},{"line_number":181,"context_line":"                                          partition_expected\u003dTrue):"},{"line_number":182,"context_line":"        \"\"\"Verify if VM disk contain partition\u0027s table\"\"\""},{"line_number":183,"context_line":""}],"source_content_type":"text/x-python","patch_set":45,"id":"3a461143_a3c69365","line":180,"range":{"start_line":180,"start_character":8,"end_line":180,"end_character":41},"updated":"2017-01-30 23:25:16.000000000","message":"Probably could be renamed to: verify_disk_partition_table()","commit_id":"8543dd20739ad55f91bc79630825aa79c5e02c6d"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"f1df6a44b82e515b53e3a012800b07bf96109a03","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def verify_partitions_disk_partitions(self, vm_name,"},{"line_number":181,"context_line":"                                          partition_expected\u003dTrue):"},{"line_number":182,"context_line":"        \"\"\"Verify if VM disk contain partition\u0027s table\"\"\""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        # Validate we have a device with the given partition label, will return"},{"line_number":185,"context_line":"        # Name       Type       MBR  Size         Parent"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a461143_6322eb53","line":182,"range":{"start_line":182,"start_character":29,"end_line":182,"end_character":36},"updated":"2017-01-30 23:25:16.000000000","message":"nit: contains","commit_id":"8543dd20739ad55f91bc79630825aa79c5e02c6d"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                                 manager.NetworkScenarioTest):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":48,"context_line":"    min_microversion \u003d \u00271.28\u0027"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_ef38e73f","line":48,"range":{"start_line":48,"start_character":4,"end_line":48,"end_character":29},"updated":"2017-02-06 11:07:49.000000000","message":"What\u0027s the reason of specifying it here? The class setup does not use it in any way in scenario tests.","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                                 manager.NetworkScenarioTest):"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":48,"context_line":"    min_microversion \u003d \u00271.28\u0027"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_f7443975","line":48,"range":{"start_line":48,"start_character":4,"end_line":48,"end_character":29},"in_reply_to":"1a430d35_ef38e73f","updated":"2017-02-06 12:51:15.000000000","message":"standalone tests requires vif attach/detach, they won\u0027t work on previous api versions.\nAdded skip test based on microversion to BaremetalScenarioTest from baremetal_manager.","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def get_available_node(self):"},{"line_number":57,"context_line":"        fields \u003d [\u0027uuid\u0027, \u0027driver\u0027, \u0027instance_uuid\u0027, \u0027provision_state\u0027,"},{"line_number":58,"context_line":"                  \u0027name\u0027, \u0027maintenance\u0027]"},{"line_number":59,"context_line":"        _, body \u003d self.baremetal_client.list_nodes(api_version\u003d\u00271.26\u0027,"},{"line_number":60,"context_line":"                                                   provision_state\u003d\u0027available\u0027,"},{"line_number":61,"context_line":"                                                   associated\u003dFalse,"},{"line_number":62,"context_line":"                                                   maintenance\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_6fd797ed","line":59,"range":{"start_line":59,"start_character":51,"end_line":59,"end_character":69},"updated":"2017-02-06 11:07:49.000000000","message":"Any reason to use 1.26 here?","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def get_available_node(self):"},{"line_number":57,"context_line":"        fields \u003d [\u0027uuid\u0027, \u0027driver\u0027, \u0027instance_uuid\u0027, \u0027provision_state\u0027,"},{"line_number":58,"context_line":"                  \u0027name\u0027, \u0027maintenance\u0027]"},{"line_number":59,"context_line":"        _, body \u003d self.baremetal_client.list_nodes(api_version\u003d\u00271.26\u0027,"},{"line_number":60,"context_line":"                                                   provision_state\u003d\u0027available\u0027,"},{"line_number":61,"context_line":"                                                   associated\u003dFalse,"},{"line_number":62,"context_line":"                                                   maintenance\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_1272b3ad","line":59,"range":{"start_line":59,"start_character":51,"end_line":59,"end_character":69},"in_reply_to":"1a430d35_6fd797ed","updated":"2017-02-06 12:51:15.000000000","message":"1.9 should be enough.","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        port \u003d self.ports_client.create_port(*args, **kwargs)[\u0027port\u0027]"},{"line_number":73,"context_line":"        return port"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def associate_instance_with_node(self, node_id, instance_uuid):"},{"line_number":76,"context_line":"        _, body \u003d self.baremetal_client.update_node("},{"line_number":77,"context_line":"            node_id, instance_uuid\u003dinstance_uuid)"},{"line_number":78,"context_line":"        return body"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @retryonconflict"},{"line_number":81,"context_line":"    def update_node_driver(self, node_id, driver):"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_cf832bcb","line":78,"range":{"start_line":75,"start_character":4,"end_line":78,"end_character":19},"updated":"2017-02-06 11:07:49.000000000","message":"Shouldn\u0027t we retry here too? As it\u0027s possible that we\u0027ve just hit some periodic task. OTOH if node is already associated we will get 409 too... Maybe we can check the specific response string.\n\nAh, I see, you do retries in get_and_lock_node","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        port \u003d self.ports_client.create_port(*args, **kwargs)[\u0027port\u0027]"},{"line_number":73,"context_line":"        return port"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def associate_instance_with_node(self, node_id, instance_uuid):"},{"line_number":76,"context_line":"        _, body \u003d self.baremetal_client.update_node("},{"line_number":77,"context_line":"            node_id, instance_uuid\u003dinstance_uuid)"},{"line_number":78,"context_line":"        return body"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    @retryonconflict"},{"line_number":81,"context_line":"    def update_node_driver(self, node_id, driver):"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_370de13e","line":78,"range":{"start_line":75,"start_character":4,"end_line":78,"end_character":19},"in_reply_to":"1a430d35_cf832bcb","updated":"2017-02-06 12:51:15.000000000","message":"This method should be private. As it should be used only in get_and_lock where retries are implemented.","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        vifs \u003d [v[\u0027id\u0027] for v in body[\u0027vifs\u0027]]"},{"line_number":90,"context_line":"        return vifs"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def associate_floating_to_node(self, node_ident):"},{"line_number":93,"context_line":"        vif \u003d self.get_node_vifs(node_ident)[0]"},{"line_number":94,"context_line":"        body \u003d self.floating_ips_client.create_floatingip("},{"line_number":95,"context_line":"            floating_network_id\u003dCONF.network.public_network_id)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_afbfbf5e","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":34},"updated":"2017-02-06 11:07:49.000000000","message":"floating_ip","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        vifs \u003d [v[\u0027id\u0027] for v in body[\u0027vifs\u0027]]"},{"line_number":90,"context_line":"        return vifs"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def associate_floating_to_node(self, node_ident):"},{"line_number":93,"context_line":"        vif \u003d self.get_node_vifs(node_ident)[0]"},{"line_number":94,"context_line":"        body \u003d self.floating_ips_client.create_floatingip("},{"line_number":95,"context_line":"            floating_network_id\u003dCONF.network.public_network_id)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_925ea310","line":92,"range":{"start_line":92,"start_character":8,"end_line":92,"end_character":34},"in_reply_to":"1a430d35_afbfbf5e","updated":"2017-02-06 12:51:15.000000000","message":"Done","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                         api_version\u003d\u00271.28\u0027)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @retryonconflict"},{"line_number":115,"context_line":"    def set_node_maintenance(self, node_id, state):"},{"line_number":116,"context_line":"        self.baremetal_client.set_node_maintenance(node_id, state)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @retryonconflict"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_0f78d3c3","line":115,"updated":"2017-02-06 11:07:49.000000000","message":"How do you specify reason from here then?","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                         api_version\u003d\u00271.28\u0027)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    @retryonconflict"},{"line_number":115,"context_line":"    def set_node_maintenance(self, node_id, state):"},{"line_number":116,"context_line":"        self.baremetal_client.set_node_maintenance(node_id, state)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @retryonconflict"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_72ba1725","line":115,"in_reply_to":"1a430d35_0f78d3c3","updated":"2017-02-06 12:51:15.000000000","message":"Done","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        if (not tempest.test.call_until_true(_try_to_associate_instance,"},{"line_number":142,"context_line":"            CONF.baremetal.association_timeout, 1)):"},{"line_number":143,"context_line":"            msg \u003d (\u0027Timed out waiting to get Ironic node by instance uuid %s\u0027"},{"line_number":144,"context_line":"                   % instance_uuid)"},{"line_number":145,"context_line":"            raise lib_exc.TimeoutException(msg)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_4a1e4964","line":143,"range":{"start_line":143,"start_character":41,"end_line":143,"end_character":60},"updated":"2017-02-06 11:07:49.000000000","message":"associate ironic node to","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        if (not tempest.test.call_until_true(_try_to_associate_instance,"},{"line_number":142,"context_line":"            CONF.baremetal.association_timeout, 1)):"},{"line_number":143,"context_line":"            msg \u003d (\u0027Timed out waiting to get Ironic node by instance uuid %s\u0027"},{"line_number":144,"context_line":"                   % instance_uuid)"},{"line_number":145,"context_line":"            raise lib_exc.TimeoutException(msg)"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_12455316","line":143,"range":{"start_line":143,"start_character":41,"end_line":143,"end_character":60},"in_reply_to":"1a430d35_4a1e4964","updated":"2017-02-06 12:51:15.000000000","message":"Done","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                  \u0027value\u0027: image_ref}]"},{"line_number":158,"context_line":"        patch.append({\u0027path\u0027: \u0027/instance_info/root_gb\u0027,"},{"line_number":159,"context_line":"                      \u0027op\u0027: \u0027add\u0027,"},{"line_number":160,"context_line":"                      \u0027value\u0027: 10})"},{"line_number":161,"context_line":"        self.update_node(node[\u0027uuid\u0027], patch\u003dpatch)"},{"line_number":162,"context_line":"        self.set_node_provision_state(node[\u0027uuid\u0027], \u0027active\u0027)"},{"line_number":163,"context_line":"        self.wait_power_state(node[\u0027uuid\u0027], bm.BaremetalPowerStates.POWER_ON)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_aa3a4d96","line":160,"range":{"start_line":160,"start_character":31,"end_line":160,"end_character":33},"updated":"2017-02-06 11:07:49.000000000","message":"ugh, no config option defining this in tempest :( maybe ok for now.","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                  \u0027value\u0027: image_ref}]"},{"line_number":158,"context_line":"        patch.append({\u0027path\u0027: \u0027/instance_info/root_gb\u0027,"},{"line_number":159,"context_line":"                      \u0027op\u0027: \u0027add\u0027,"},{"line_number":160,"context_line":"                      \u0027value\u0027: 10})"},{"line_number":161,"context_line":"        self.update_node(node[\u0027uuid\u0027], patch\u003dpatch)"},{"line_number":162,"context_line":"        self.set_node_provision_state(node[\u0027uuid\u0027], \u0027active\u0027)"},{"line_number":163,"context_line":"        self.wait_power_state(node[\u0027uuid\u0027], bm.BaremetalPowerStates.POWER_ON)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_529fdb4f","line":160,"range":{"start_line":160,"start_character":31,"end_line":160,"end_character":33},"in_reply_to":"1a430d35_aa3a4d96","updated":"2017-02-06 12:51:15.000000000","message":"Done","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                      \u0027op\u0027: \u0027add\u0027,"},{"line_number":160,"context_line":"                      \u0027value\u0027: 10})"},{"line_number":161,"context_line":"        self.update_node(node[\u0027uuid\u0027], patch\u003dpatch)"},{"line_number":162,"context_line":"        self.set_node_provision_state(node[\u0027uuid\u0027], \u0027active\u0027)"},{"line_number":163,"context_line":"        self.wait_power_state(node[\u0027uuid\u0027], bm.BaremetalPowerStates.POWER_ON)"},{"line_number":164,"context_line":"        self.wait_provisioning_state(node[\u0027uuid\u0027],"},{"line_number":165,"context_line":"                                     bm.BaremetalProvisionStates.ACTIVE,"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_4aa009a0","line":162,"updated":"2017-02-06 11:07:49.000000000","message":"So I think if you intend to replace all jobs with this, apart from multinode/grenade that will still run nova, we might need to test configdrive too? for both whole disk and partition images.","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":159,"context_line":"                      \u0027op\u0027: \u0027add\u0027,"},{"line_number":160,"context_line":"                      \u0027value\u0027: 10})"},{"line_number":161,"context_line":"        self.update_node(node[\u0027uuid\u0027], patch\u003dpatch)"},{"line_number":162,"context_line":"        self.set_node_provision_state(node[\u0027uuid\u0027], \u0027active\u0027)"},{"line_number":163,"context_line":"        self.wait_power_state(node[\u0027uuid\u0027], bm.BaremetalPowerStates.POWER_ON)"},{"line_number":164,"context_line":"        self.wait_provisioning_state(node[\u0027uuid\u0027],"},{"line_number":165,"context_line":"                                     bm.BaremetalProvisionStates.ACTIVE,"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_1210f3a7","line":162,"in_reply_to":"1a430d35_4aa009a0","updated":"2017-02-06 12:51:15.000000000","message":"The idea is to not replace whole jobs, we still have to test options that are generated/used on nova side. Configdrive is one of them. Added todo here to cover configdrive by standalone tests also","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        self.set_node_provision_state(node_id, \u0027deleted\u0027)"},{"line_number":173,"context_line":"        self.wait_provisioning_state("},{"line_number":174,"context_line":"            node_id,"},{"line_number":175,"context_line":"            [bm.BaremetalProvisionStates.NOSTATE,"},{"line_number":176,"context_line":"             bm.BaremetalProvisionStates.AVAILABLE],"},{"line_number":177,"context_line":"            timeout\u003dCONF.baremetal.unprovision_timeout,"},{"line_number":178,"context_line":"            interval\u003d1)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_4a82c995","line":175,"updated":"2017-02-06 11:07:49.000000000","message":"I think this waiter uses version 1.1, so we won\u0027t see available state, it was introduced in 1.2. ditto for other such places.","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            [bm.BaremetalProvisionStates.NOSTATE,"},{"line_number":176,"context_line":"             bm.BaremetalProvisionStates.AVAILABLE],"},{"line_number":177,"context_line":"            timeout\u003dCONF.baremetal.unprovision_timeout,"},{"line_number":178,"context_line":"            interval\u003d1)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def verify_partitions_disk_partitions(self, vm_name,"},{"line_number":181,"context_line":"                                          partition_expected\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_3e421e3f","line":178,"range":{"start_line":178,"start_character":21,"end_line":178,"end_character":22},"updated":"2017-02-06 11:07:49.000000000","message":"Any reason why it\u0027s sometimes 1 and sometimes (L167) 30?","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            [bm.BaremetalProvisionStates.NOSTATE,"},{"line_number":176,"context_line":"             bm.BaremetalProvisionStates.AVAILABLE],"},{"line_number":177,"context_line":"            timeout\u003dCONF.baremetal.unprovision_timeout,"},{"line_number":178,"context_line":"            interval\u003d1)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def verify_partitions_disk_partitions(self, vm_name,"},{"line_number":181,"context_line":"                                          partition_expected\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_52d7dbbe","line":178,"range":{"start_line":178,"start_character":21,"end_line":178,"end_character":22},"in_reply_to":"1a430d35_3e421e3f","updated":"2017-02-06 12:51:15.000000000","message":"Done","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            timeout\u003dCONF.baremetal.unprovision_timeout,"},{"line_number":178,"context_line":"            interval\u003d1)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def verify_partitions_disk_partitions(self, vm_name,"},{"line_number":181,"context_line":"                                          partition_expected\u003dTrue):"},{"line_number":182,"context_line":"        \"\"\"Verify if VM disk contain partition\u0027s table\"\"\""},{"line_number":183,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_6a1ce5c1","line":180,"range":{"start_line":180,"start_character":8,"end_line":180,"end_character":41},"updated":"2017-02-06 11:07:49.000000000","message":"weird name","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":177,"context_line":"            timeout\u003dCONF.baremetal.unprovision_timeout,"},{"line_number":178,"context_line":"            interval\u003d1)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def verify_partitions_disk_partitions(self, vm_name,"},{"line_number":181,"context_line":"                                          partition_expected\u003dTrue):"},{"line_number":182,"context_line":"        \"\"\"Verify if VM disk contain partition\u0027s table\"\"\""},{"line_number":183,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_12ec738e","line":180,"range":{"start_line":180,"start_character":8,"end_line":180,"end_character":41},"in_reply_to":"1a430d35_6a1ce5c1","updated":"2017-02-06 12:51:15.000000000","message":"Done","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def verify_partitions_disk_partitions(self, vm_name,"},{"line_number":181,"context_line":"                                          partition_expected\u003dTrue):"},{"line_number":182,"context_line":"        \"\"\"Verify if VM disk contain partition\u0027s table\"\"\""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        # Validate we have a device with the given partition label, will return"},{"line_number":185,"context_line":"        # Name       Type       MBR  Size         Parent"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_ca995970","line":182,"range":{"start_line":182,"start_character":29,"end_line":182,"end_character":36},"updated":"2017-02-06 11:07:49.000000000","message":"contains","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def verify_partitions_disk_partitions(self, vm_name,"},{"line_number":181,"context_line":"                                          partition_expected\u003dTrue):"},{"line_number":182,"context_line":"        \"\"\"Verify if VM disk contain partition\u0027s table\"\"\""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        # Validate we have a device with the given partition label, will return"},{"line_number":185,"context_line":"        # Name       Type       MBR  Size         Parent"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_2a9f3d51","line":182,"range":{"start_line":182,"start_character":37,"end_line":182,"end_character":48},"updated":"2017-02-06 11:07:49.000000000","message":"partition","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def verify_partitions_disk_partitions(self, vm_name,"},{"line_number":181,"context_line":"                                          partition_expected\u003dTrue):"},{"line_number":182,"context_line":"        \"\"\"Verify if VM disk contain partition\u0027s table\"\"\""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        # Validate we have a device with the given partition label, will return"},{"line_number":185,"context_line":"        # Name       Type       MBR  Size         Parent"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_72fdb739","line":182,"range":{"start_line":182,"start_character":29,"end_line":182,"end_character":36},"in_reply_to":"1a430d35_ca995970","updated":"2017-02-06 12:51:15.000000000","message":"Done","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                          partition_expected\u003dTrue):"},{"line_number":182,"context_line":"        \"\"\"Verify if VM disk contain partition\u0027s table\"\"\""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        # Validate we have a device with the given partition label, will return"},{"line_number":185,"context_line":"        # Name       Type       MBR  Size         Parent"},{"line_number":186,"context_line":"        # /dev/sda1  partition  83   11795051520  /dev/sda"},{"line_number":187,"context_line":"        cmd \u003d [\u0027sudo\u0027, \u0027virt-filesystems\u0027, \u0027--partitions\u0027, \u0027-l\u0027, \u0027-d\u0027, vm_name]"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_6ac0652b","line":184,"range":{"start_line":184,"start_character":68,"end_line":184,"end_character":79},"updated":"2017-02-06 11:07:49.000000000","message":"the output of the following command looks like","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                          partition_expected\u003dTrue):"},{"line_number":182,"context_line":"        \"\"\"Verify if VM disk contain partition\u0027s table\"\"\""},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"        # Validate we have a device with the given partition label, will return"},{"line_number":185,"context_line":"        # Name       Type       MBR  Size         Parent"},{"line_number":186,"context_line":"        # /dev/sda1  partition  83   11795051520  /dev/sda"},{"line_number":187,"context_line":"        cmd \u003d [\u0027sudo\u0027, \u0027virt-filesystems\u0027, \u0027--partitions\u0027, \u0027-l\u0027, \u0027-d\u0027, vm_name]"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_12a39350","line":184,"range":{"start_line":184,"start_character":68,"end_line":184,"end_character":79},"in_reply_to":"1a430d35_6ac0652b","updated":"2017-02-06 12:51:15.000000000","message":"Done","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ed6855d096f42a43373d8d53bb17658f2bd2aca3","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def update_node_driver(self, node_id, driver):"},{"line_number":81,"context_line":"        _, body \u003d self.baremetal_client.update_node("},{"line_number":82,"context_line":"            node_id, driver\u003ddriver)"},{"line_number":83,"context_line":"        return body"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def get_node_vifs(self, node_uuid):"},{"line_number":86,"context_line":"        _, body \u003d self.baremetal_client.vif_list(node_uuid,"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_bcaa2883","line":83,"updated":"2017-02-08 13:23:26.000000000","message":"this can go to the parent class","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b06e1b7226ad9b7677f112ac62db5eb824b8b47d","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    def update_node_driver(self, node_id, driver):"},{"line_number":81,"context_line":"        _, body \u003d self.baremetal_client.update_node("},{"line_number":82,"context_line":"            node_id, driver\u003ddriver)"},{"line_number":83,"context_line":"        return body"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def get_node_vifs(self, node_uuid):"},{"line_number":86,"context_line":"        _, body \u003d self.baremetal_client.vif_list(node_uuid,"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_a5e0482a","line":83,"in_reply_to":"1a430d35_bcaa2883","updated":"2017-02-08 15:44:14.000000000","message":"Done","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ed6855d096f42a43373d8d53bb17658f2bd2aca3","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @retryonconflict"},{"line_number":114,"context_line":"    def update_node(self, node_id, patch):"},{"line_number":115,"context_line":"        self.baremetal_client.update_node(node_id, patch\u003dpatch)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @retryonconflict"},{"line_number":118,"context_line":"    def set_node_provision_state(self, node_id, state, clean_steps\u003dNone,"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_dcad349c","line":115,"updated":"2017-02-08 13:23:26.000000000","message":"ditto","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b06e1b7226ad9b7677f112ac62db5eb824b8b47d","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    @retryonconflict"},{"line_number":114,"context_line":"    def update_node(self, node_id, patch):"},{"line_number":115,"context_line":"        self.baremetal_client.update_node(node_id, patch\u003dpatch)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @retryonconflict"},{"line_number":118,"context_line":"    def set_node_provision_state(self, node_id, state, clean_steps\u003dNone,"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_253a9899","line":115,"in_reply_to":"1a430d35_dcad349c","updated":"2017-02-08 15:44:14.000000000","message":"Done","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ed6855d096f42a43373d8d53bb17658f2bd2aca3","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def set_node_provision_state(self, node_id, state, clean_steps\u003dNone,"},{"line_number":119,"context_line":"                                 api_version\u003dNone):"},{"line_number":120,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":121,"context_line":"            node_id, state, clean_steps\u003dclean_steps, api_version\u003dapi_version)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def get_and_lock_node(self, node\u003dNone):"},{"line_number":124,"context_line":"        instance_uuid \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_fc98307a","line":121,"updated":"2017-02-08 13:23:26.000000000","message":"this probably as well, as e.g. potentially we can cover things like inspection even in full tests","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b06e1b7226ad9b7677f112ac62db5eb824b8b47d","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def set_node_provision_state(self, node_id, state, clean_steps\u003dNone,"},{"line_number":119,"context_line":"                                 api_version\u003dNone):"},{"line_number":120,"context_line":"        self.baremetal_client.set_node_provision_state("},{"line_number":121,"context_line":"            node_id, state, clean_steps\u003dclean_steps, api_version\u003dapi_version)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def get_and_lock_node(self, node\u003dNone):"},{"line_number":124,"context_line":"        instance_uuid \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_a54e8838","line":121,"in_reply_to":"1a430d35_fc98307a","updated":"2017-02-08 15:44:14.000000000","message":"Done","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ed6855d096f42a43373d8d53bb17658f2bd2aca3","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def terminate_node(self, node_id):"},{"line_number":167,"context_line":"        self.detach_all_vifs_from_node(node_id)"},{"line_number":168,"context_line":"        self.set_node_provision_state(node_id, \u0027deleted\u0027)"},{"line_number":169,"context_line":"        # NOTE(vsaienko) We expect here fast switching from deleted to"},{"line_number":170,"context_line":"        # available as automated cleaning is disabled so poll status each 1s."},{"line_number":171,"context_line":"        self.wait_provisioning_state("}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_1c941c41","line":168,"updated":"2017-02-08 13:23:26.000000000","message":"this method is called in tearDown, in case of e.g. test failure, so there may be an exception here if the node did not reach \"active\" state","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b06e1b7226ad9b7677f112ac62db5eb824b8b47d","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def terminate_node(self, node_id):"},{"line_number":167,"context_line":"        self.detach_all_vifs_from_node(node_id)"},{"line_number":168,"context_line":"        self.set_node_provision_state(node_id, \u0027deleted\u0027)"},{"line_number":169,"context_line":"        # NOTE(vsaienko) We expect here fast switching from deleted to"},{"line_number":170,"context_line":"        # available as automated cleaning is disabled so poll status each 1s."},{"line_number":171,"context_line":"        self.wait_provisioning_state("}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_252ff83f","line":168,"in_reply_to":"1a430d35_1c941c41","updated":"2017-02-08 15:44:14.000000000","message":"If tearDown fails the test will be marked as failed.","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"733c8fdef063c6fcf58af4c92f879fe0b00e0608","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import random"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_utils import uuidutils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from tempest import config"},{"line_number":21,"context_line":"from tempest.lib.common.utils import test_utils"},{"line_number":22,"context_line":"from tempest.lib import exceptions as lib_exc"}],"source_content_type":"text/x-python","patch_set":66,"id":"ba2be162_40408734","line":19,"updated":"2017-03-03 14:04:41.000000000","message":"redundant empty line","commit_id":"37e8b4d6f45a4787ed8d1f6dcf61b96553022fe8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2100faf61b11c0b55858c99550223b38ee78f577","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import random"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from oslo_utils import uuidutils"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from tempest import config"},{"line_number":21,"context_line":"from tempest.lib.common.utils import test_utils"},{"line_number":22,"context_line":"from tempest.lib import exceptions as lib_exc"}],"source_content_type":"text/x-python","patch_set":66,"id":"ba2be162_576afdb3","line":19,"in_reply_to":"ba2be162_40408734","updated":"2017-03-03 18:57:00.000000000","message":"Done","commit_id":"37e8b4d6f45a4787ed8d1f6dcf61b96553022fe8"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"733c8fdef063c6fcf58af4c92f879fe0b00e0608","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        node \u003d self.get_and_lock_node()"},{"line_number":117,"context_line":"        self.update_node_driver(node[\u0027uuid\u0027], driver)"},{"line_number":118,"context_line":"        network, subnet, router \u003d self.create_networks()"},{"line_number":119,"context_line":"        n_port \u003d self.create_neutron_port(network_id\u003dnetwork[\u0027id\u0027])"},{"line_number":120,"context_line":"        self.vif_attach(node_id\u003dnode[\u0027uuid\u0027], vif_id\u003dn_port[\u0027id\u0027])"},{"line_number":121,"context_line":"        patch \u003d [{\u0027path\u0027: \u0027/instance_info/image_source\u0027,"},{"line_number":122,"context_line":"                  \u0027op\u0027: \u0027add\u0027,"},{"line_number":123,"context_line":"                  \u0027value\u0027: image_ref}]"}],"source_content_type":"text/x-python","patch_set":66,"id":"ba2be162_c018f7d5","line":120,"range":{"start_line":119,"start_character":8,"end_line":120,"end_character":66},"updated":"2017-03-03 14:04:41.000000000","message":"for detach, port deletion is done in the detach_vifs function itself, can we do the same here?","commit_id":"37e8b4d6f45a4787ed8d1f6dcf61b96553022fe8"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"2ebbe5483e54d026580c62967966ab54c6074658","unresolved":false,"context_lines":[{"line_number":100,"context_line":"    def cleanup_floating_ip(cls, ip_address):"},{"line_number":101,"context_line":"        body \u003d cls.admin_manager.floating_ips_client.list_floatingips()"},{"line_number":102,"context_line":"        floating_ip_id \u003d [f[\u0027id\u0027] for f in body[\u0027floatingips\u0027] if"},{"line_number":103,"context_line":"                          f[\u0027floating_ip_address\u0027] \u003d\u003d ip_address][0]"},{"line_number":104,"context_line":"        cls.admin_manager.floating_ips_client.delete_floatingip(floating_ip_id)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":74,"id":"9a30ddce_024d4d72","line":103,"updated":"2017-03-07 10:50:18.000000000","message":"it\u0027s a pity that we can\u0027t pass this as a filter in the request :(","commit_id":"9f975e6be4190e1c2a65f3f574493374a34947ad"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"8d26944209caf61815b3f8c0916fe05573617885","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                                 manager.NetworkScenarioTest):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":33,"context_line":"    min_microversion \u003d \u00271.28\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @classmethod"},{"line_number":36,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9a30ddce_bcc89ea9","line":33,"updated":"2017-03-09 22:35:51.000000000","message":"Is there a reason that this is the minimum microversion? Please leave a comment about it if so (i.e. standalone wasn\u0027t supported before 1.28 or something)","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77994c2591e814cbd9558094f7d64908dc541478","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                                 manager.NetworkScenarioTest):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":33,"context_line":"    min_microversion \u003d \u00271.28\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @classmethod"},{"line_number":36,"context_line":"    def skip_checks(cls):"}],"source_content_type":"text/x-python","patch_set":75,"id":"9a30ddce_f0fb0d79","line":33,"in_reply_to":"9a30ddce_bcc89ea9","updated":"2017-03-10 08:42:55.000000000","message":"Done","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"8d26944209caf61815b3f8c0916fe05573617885","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def get_available_node(cls):"},{"line_number":56,"context_line":"        fields \u003d [\u0027uuid\u0027, \u0027driver\u0027, \u0027instance_uuid\u0027, \u0027provision_state\u0027,"},{"line_number":57,"context_line":"                  \u0027name\u0027, \u0027maintenance\u0027]"},{"line_number":58,"context_line":"        _, body \u003d cls.baremetal_client.list_nodes(api_version\u003d\u00271.9\u0027,"},{"line_number":59,"context_line":"                                                  provision_state\u003d\u0027available\u0027,"},{"line_number":60,"context_line":"                                                  associated\u003dFalse,"},{"line_number":61,"context_line":"                                                  maintenance\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":75,"id":"9a30ddce_1c728a7b","line":58,"range":{"start_line":58,"start_character":50,"end_line":58,"end_character":67},"updated":"2017-03-09 22:35:51.000000000","message":"Why are you listing with version 1.9 if the minimum version we\u0027re testing is 1.28?","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77994c2591e814cbd9558094f7d64908dc541478","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    def get_available_node(cls):"},{"line_number":56,"context_line":"        fields \u003d [\u0027uuid\u0027, \u0027driver\u0027, \u0027instance_uuid\u0027, \u0027provision_state\u0027,"},{"line_number":57,"context_line":"                  \u0027name\u0027, \u0027maintenance\u0027]"},{"line_number":58,"context_line":"        _, body \u003d cls.baremetal_client.list_nodes(api_version\u003d\u00271.9\u0027,"},{"line_number":59,"context_line":"                                                  provision_state\u003d\u0027available\u0027,"},{"line_number":60,"context_line":"                                                  associated\u003dFalse,"},{"line_number":61,"context_line":"                                                  maintenance\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":75,"id":"9a30ddce_306f652c","line":58,"range":{"start_line":58,"start_character":50,"end_line":58,"end_character":67},"in_reply_to":"9a30ddce_1c728a7b","updated":"2017-03-10 08:42:55.000000000","message":"min_microversion - specifies the minimal version of API in the cloud to be available. It doesn\u0027t mean that we do all calls with min_microversion.\nWe using 1.9 here as in this microversion ability to filter nodes by provision_state was added https://github.com/openstack/ironic/blob/master/ironic/api/controllers/v1/versions.py#L39","commit_id":"0b34eda2b2ad323af4604efa49b6032dbe5f888a"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"340882066a58e719387ffc2b9fb266f4eb3d1a64","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                                 manager.NetworkScenarioTest):"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":34,"context_line":"    # NOTE(vsaienko): Standalone tests are using v1/node/\u003cn_id\u003e/vifs to attach"},{"line_number":35,"context_line":"    # VIF to a node."},{"line_number":36,"context_line":"    min_microversion \u003d \u00271.28\u0027"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_cd34904b","line":34,"range":{"start_line":34,"start_character":57,"end_line":34,"end_character":63},"updated":"2017-03-10 23:15:43.000000000","message":"nit: I\u0027d use the longer form \u003cnode_id\u003e","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b0df67f68e070c565492ca20015f92f114d5bfed","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                                 manager.NetworkScenarioTest):"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":34,"context_line":"    # NOTE(vsaienko): Standalone tests are using v1/node/\u003cn_id\u003e/vifs to attach"},{"line_number":35,"context_line":"    # VIF to a node."},{"line_number":36,"context_line":"    min_microversion \u003d \u00271.28\u0027"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_8a57c756","line":34,"range":{"start_line":34,"start_character":57,"end_line":34,"end_character":63},"in_reply_to":"9a30ddce_04e595a6","updated":"2017-03-13 08:33:16.000000000","message":"Done","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":19593,"name":"Anup Navare","email":"anup.d.navare@intel.com","username":"anup"},"change_message_id":"5b4dcc5e3416732fe31e2d35994720da61c4dfae","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                                 manager.NetworkScenarioTest):"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027admin\u0027]"},{"line_number":34,"context_line":"    # NOTE(vsaienko): Standalone tests are using v1/node/\u003cn_id\u003e/vifs to attach"},{"line_number":35,"context_line":"    # VIF to a node."},{"line_number":36,"context_line":"    min_microversion \u003d \u00271.28\u0027"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_04e595a6","line":34,"range":{"start_line":34,"start_character":57,"end_line":34,"end_character":63},"in_reply_to":"9a30ddce_cd34904b","updated":"2017-03-13 00:20:38.000000000","message":"+1","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"340882066a58e719387ffc2b9fb266f4eb3d1a64","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    @classmethod"},{"line_number":115,"context_line":"    @bm.retry_on_conflict"},{"line_number":116,"context_line":"    def vif_attach(cls, node_id, vif_id):"},{"line_number":117,"context_line":"        cls.baremetal_client.vif_attach(node_id, vif_id)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @classmethod"},{"line_number":120,"context_line":"    def get_and_lock_node(cls, node\u003dNone):"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_adbcbcbb","line":117,"range":{"start_line":117,"start_character":29,"end_line":117,"end_character":56},"updated":"2017-03-10 23:15:43.000000000","message":"Method signature expects node_uuid.\ndef vif_attach(self, node_uuid, vif_id):","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b0df67f68e070c565492ca20015f92f114d5bfed","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    @classmethod"},{"line_number":115,"context_line":"    @bm.retry_on_conflict"},{"line_number":116,"context_line":"    def vif_attach(cls, node_id, vif_id):"},{"line_number":117,"context_line":"        cls.baremetal_client.vif_attach(node_id, vif_id)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @classmethod"},{"line_number":120,"context_line":"    def get_and_lock_node(cls, node\u003dNone):"}],"source_content_type":"text/x-python","patch_set":80,"id":"9a30ddce_2acdfb30","line":117,"range":{"start_line":117,"start_character":29,"end_line":117,"end_character":56},"in_reply_to":"9a30ddce_adbcbcbb","updated":"2017-03-13 08:33:16.000000000","message":"Done","commit_id":"296cac50f331d12c810b63464c32a583fbc9d877"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"fb8a5b8cb262abace58b3f7c68fcbddadc704e1d","unresolved":false,"context_lines":[{"line_number":178,"context_line":"class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager):"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    # API microversion to use among all calls"},{"line_number":181,"context_line":"    api_microversion \u003d \u00271.28\u0027"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    # The node driver to use in the test"},{"line_number":184,"context_line":"    driver \u003d None"}],"source_content_type":"text/x-python","patch_set":81,"id":"9a30ddce_a74da1c5","line":181,"updated":"2017-03-13 10:18:46.000000000","message":"Will this version always be in sync with the one at The BaremetalStandaloneManager ? Right now both uses the 1.28. If they have to be in sync I would suggest to create a global variable with this version and just reference it on both classes, otherwise we may change one and forget the other.","commit_id":"c9f9acfbe4c2d89ff05e8e2b5999be4fff6dc151"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"5d044075e6206f8f93c2f7ea97c3735ab801120b","unresolved":false,"context_lines":[{"line_number":178,"context_line":"class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager):"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    # API microversion to use among all calls"},{"line_number":181,"context_line":"    api_microversion \u003d \u00271.28\u0027"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    # The node driver to use in the test"},{"line_number":184,"context_line":"    driver \u003d None"}],"source_content_type":"text/x-python","patch_set":81,"id":"9a30ddce_b3615fd5","line":181,"in_reply_to":"9a30ddce_a74da1c5","updated":"2017-03-13 11:39:37.000000000","message":"no they will not be in sync. The min_microversion defines a minimum required ironic API version where we can run standalone tests.\nWhile api_microversion defines actual API micorversion we are using in all API requests.\nWe may want to have a standalone tests that uses 1.29 ... 1.32 microversions.","commit_id":"c9f9acfbe4c2d89ff05e8e2b5999be4fff6dc151"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"da7185154951a5eee47cf4fb6b70b5454e46214e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def skip_checks(cls):"},{"line_number":40,"context_line":"        super(BaremetalStandaloneManager, cls).skip_checks()"},{"line_number":41,"context_line":"        if CONF.service_available.nova:"},{"line_number":42,"context_line":"            raise cls.skipException(\u0027Nova is enabled.\u0027)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @classmethod"},{"line_number":45,"context_line":"    def create_networks(cls):"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_03400156","line":42,"range":{"start_line":42,"start_character":37,"end_line":42,"end_character":53},"updated":"2017-03-13 22:23:36.000000000","message":"What do you think of this message?\n\nNova is enabled. Stand-alone tests will be skipped.","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"451f8758e306a3fd474cd2d9b5b1768091a43c22","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def skip_checks(cls):"},{"line_number":40,"context_line":"        super(BaremetalStandaloneManager, cls).skip_checks()"},{"line_number":41,"context_line":"        if CONF.service_available.nova:"},{"line_number":42,"context_line":"            raise cls.skipException(\u0027Nova is enabled.\u0027)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @classmethod"},{"line_number":45,"context_line":"    def create_networks(cls):"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_66062322","line":42,"range":{"start_line":42,"start_character":37,"end_line":42,"end_character":53},"in_reply_to":"7a25e98e_03400156","updated":"2017-03-13 23:10:41.000000000","message":"Done","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"da7185154951a5eee47cf4fb6b70b5454e46214e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    @classmethod"},{"line_number":45,"context_line":"    def create_networks(cls):"},{"line_number":46,"context_line":"        network \u003d None"},{"line_number":47,"context_line":"        subnet \u003d None"},{"line_number":48,"context_line":"        router \u003d None"},{"line_number":49,"context_line":"        if CONF.network.shared_physical_network:"},{"line_number":50,"context_line":"            if not CONF.compute.fixed_network_name:"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_8303110f","line":47,"updated":"2017-03-13 22:23:36.000000000","message":"This doesn\u0027t seem to be used. And the caller doesn\u0027t use it either.","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"da7185154951a5eee47cf4fb6b70b5454e46214e","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def create_networks(cls):"},{"line_number":46,"context_line":"        network \u003d None"},{"line_number":47,"context_line":"        subnet \u003d None"},{"line_number":48,"context_line":"        router \u003d None"},{"line_number":49,"context_line":"        if CONF.network.shared_physical_network:"},{"line_number":50,"context_line":"            if not CONF.compute.fixed_network_name:"},{"line_number":51,"context_line":"                m \u003d \u0027fixed_network_name must be specified in config\u0027"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_c603570c","line":48,"updated":"2017-03-13 22:23:36.000000000","message":"This doesn\u0027t seem to be used. And the caller doesn\u0027t use it either.","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"da7185154951a5eee47cf4fb6b70b5454e46214e","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        network \u003d None"},{"line_number":47,"context_line":"        subnet \u003d None"},{"line_number":48,"context_line":"        router \u003d None"},{"line_number":49,"context_line":"        if CONF.network.shared_physical_network:"},{"line_number":50,"context_line":"            if not CONF.compute.fixed_network_name:"},{"line_number":51,"context_line":"                m \u003d \u0027fixed_network_name must be specified in config\u0027"},{"line_number":52,"context_line":"                raise lib_exc.InvalidConfiguration(m)"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_86487f5d","line":49,"updated":"2017-03-13 22:23:36.000000000","message":"So if it is not a shared_physical_network then this functions ends up doing:\n\n return None, None, None\n\nA comment here might be useful as I don\u0027t understand it.","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"451f8758e306a3fd474cd2d9b5b1768091a43c22","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        network \u003d None"},{"line_number":47,"context_line":"        subnet \u003d None"},{"line_number":48,"context_line":"        router \u003d None"},{"line_number":49,"context_line":"        if CONF.network.shared_physical_network:"},{"line_number":50,"context_line":"            if not CONF.compute.fixed_network_name:"},{"line_number":51,"context_line":"                m \u003d \u0027fixed_network_name must be specified in config\u0027"},{"line_number":52,"context_line":"                raise lib_exc.InvalidConfiguration(m)"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_2125f5aa","line":49,"in_reply_to":"7a25e98e_86487f5d","updated":"2017-03-13 23:10:41.000000000","message":"added a comment","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"da7185154951a5eee47cf4fb6b70b5454e46214e","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    @classmethod"},{"line_number":120,"context_line":"    def get_and_lock_node(cls, node\u003dNone):"},{"line_number":121,"context_line":"        instance_uuid \u003d uuidutils.generate_uuid()"},{"line_number":122,"context_line":"        nodes \u003d []"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        def _try_to_associate_instance():"},{"line_number":125,"context_line":"            n \u003d node or cls.get_random_available_node()"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_4323d905","line":122,"updated":"2017-03-13 22:23:36.000000000","message":"Couldn\u0027t \u0027_try_to_associate_instance\u0027 return the node directly and then don\u0027t need this list or need to return nodes[0]\n\nOr maybe I\u0027m not fully understanding the test_utils.call_until_true() semantics.","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"451f8758e306a3fd474cd2d9b5b1768091a43c22","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    @classmethod"},{"line_number":120,"context_line":"    def get_and_lock_node(cls, node\u003dNone):"},{"line_number":121,"context_line":"        instance_uuid \u003d uuidutils.generate_uuid()"},{"line_number":122,"context_line":"        nodes \u003d []"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        def _try_to_associate_instance():"},{"line_number":125,"context_line":"            n \u003d node or cls.get_random_available_node()"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_c1b981ee","line":122,"in_reply_to":"7a25e98e_4323d905","updated":"2017-03-13 23:10:41.000000000","message":"this list is updated inside _try_to_associate_instance function. We can\u0027t just get return value from it in call_untill_true.","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"fb55937c3674e1151ae0ee2672202dbabeccef96","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    @classmethod"},{"line_number":120,"context_line":"    def get_and_lock_node(cls, node\u003dNone):"},{"line_number":121,"context_line":"        instance_uuid \u003d uuidutils.generate_uuid()"},{"line_number":122,"context_line":"        nodes \u003d []"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        def _try_to_associate_instance():"},{"line_number":125,"context_line":"            n \u003d node or cls.get_random_available_node()"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_c1626116","line":122,"in_reply_to":"7a25e98e_c1b981ee","updated":"2017-03-13 23:36:56.000000000","message":"Ah, call_until_true() return either True or False. Not the return value of the called function :(\n\nThanks\n\nI proposed a patch to tempest. See what they say:\nhttps://review.openstack.org/445240","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"da7185154951a5eee47cf4fb6b70b5454e46214e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                nodes.append(n)"},{"line_number":129,"context_line":"            except lib_exc.Conflict:"},{"line_number":130,"context_line":"                return False"},{"line_number":131,"context_line":"            return True"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        if (not test_utils.call_until_true(_try_to_associate_instance,"},{"line_number":134,"context_line":"            CONF.baremetal.association_timeout, 1)):"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_c32fc9f4","line":131,"updated":"2017-03-13 22:23:36.000000000","message":"What if this was:\n\n return n\n\nWould the \u0027nodes\u0027 list still be needed?","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"451f8758e306a3fd474cd2d9b5b1768091a43c22","unresolved":false,"context_lines":[{"line_number":128,"context_line":"                nodes.append(n)"},{"line_number":129,"context_line":"            except lib_exc.Conflict:"},{"line_number":130,"context_line":"                return False"},{"line_number":131,"context_line":"            return True"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        if (not test_utils.call_until_true(_try_to_associate_instance,"},{"line_number":134,"context_line":"            CONF.baremetal.association_timeout, 1)):"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_c19a61c5","line":131,"in_reply_to":"7a25e98e_c32fc9f4","updated":"2017-03-13 23:10:41.000000000","message":"yes, as we use that list ouside of _try_to_associate_instance function.","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"da7185154951a5eee47cf4fb6b70b5454e46214e","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            return True"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        if (not test_utils.call_until_true(_try_to_associate_instance,"},{"line_number":134,"context_line":"            CONF.baremetal.association_timeout, 1)):"},{"line_number":135,"context_line":"            msg \u003d (\u0027Timed out waiting to associate instance to ironic node \u0027"},{"line_number":136,"context_line":"                   \u0027uuid %s\u0027 % instance_uuid)"},{"line_number":137,"context_line":"            raise lib_exc.TimeoutException(msg)"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_436f5992","line":134,"updated":"2017-03-13 22:23:36.000000000","message":"Maybe easier to read in the future if.\n\n duration\u003dCONF.baremetal.association_timeout, sleep_for\u003d1)):","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"451f8758e306a3fd474cd2d9b5b1768091a43c22","unresolved":false,"context_lines":[{"line_number":131,"context_line":"            return True"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        if (not test_utils.call_until_true(_try_to_associate_instance,"},{"line_number":134,"context_line":"            CONF.baremetal.association_timeout, 1)):"},{"line_number":135,"context_line":"            msg \u003d (\u0027Timed out waiting to associate instance to ironic node \u0027"},{"line_number":136,"context_line":"                   \u0027uuid %s\u0027 % instance_uuid)"},{"line_number":137,"context_line":"            raise lib_exc.TimeoutException(msg)"}],"source_content_type":"text/x-python","patch_set":83,"id":"7a25e98e_a1bba50d","line":134,"in_reply_to":"7a25e98e_436f5992","updated":"2017-03-13 23:10:41.000000000","message":"Done","commit_id":"02416c2755f3e96a6028c74d1f79bc89a6eb21ef"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"125767891697dc3e18eebf2ce3adea43a2567e7f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                                    \u0027be skipped.\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def create_networks(cls):"},{"line_number":47,"context_line":"        network \u003d None"},{"line_number":48,"context_line":"        subnet \u003d None"},{"line_number":49,"context_line":"        router \u003d None"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_a17809fa","line":46,"updated":"2017-03-14 17:20:09.000000000","message":"A docstring would be useful. Maybe some of the info from line 50 could be here?","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                                    \u0027be skipped.\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def create_networks(cls):"},{"line_number":47,"context_line":"        network \u003d None"},{"line_number":48,"context_line":"        subnet \u003d None"},{"line_number":49,"context_line":"        router \u003d None"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_3c5ee5e9","line":46,"in_reply_to":"3a1ff146_a17809fa","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"125767891697dc3e18eebf2ce3adea43a2567e7f","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def create_networks(cls):"},{"line_number":47,"context_line":"        network \u003d None"},{"line_number":48,"context_line":"        subnet \u003d None"},{"line_number":49,"context_line":"        router \u003d None"},{"line_number":50,"context_line":"        # TODO(vsaienko) we support only flat scenario at the moment"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_c116e5a6","line":47,"updated":"2017-03-14 17:20:09.000000000","message":"It would be nice if subnet and router were documented that they are not used at this time.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"ba8ceafe0a9e86a24c5a631422815559fafabd56","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def create_networks(cls):"},{"line_number":47,"context_line":"        network \u003d None"},{"line_number":48,"context_line":"        subnet \u003d None"},{"line_number":49,"context_line":"        router \u003d None"},{"line_number":50,"context_line":"        # TODO(vsaienko) we support only flat scenario at the moment"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_367296e6","line":47,"in_reply_to":"3a1ff146_15e2f303","updated":"2017-03-14 20:01:02.000000000","message":"Ah, maybe the comment should be above these variables?","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f1406699135d294224fad104de8faad27aae52eb","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def create_networks(cls):"},{"line_number":47,"context_line":"        network \u003d None"},{"line_number":48,"context_line":"        subnet \u003d None"},{"line_number":49,"context_line":"        router \u003d None"},{"line_number":50,"context_line":"        # TODO(vsaienko) we support only flat scenario at the moment"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_15e2f303","line":47,"in_reply_to":"3a1ff146_c116e5a6","updated":"2017-03-14 18:58:26.000000000","message":"Hrm, there is a comment on L51, do you think it should be expanded?","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        # with multitenancy"},{"line_number":53,"context_line":"        if CONF.network.shared_physical_network:"},{"line_number":54,"context_line":"            if not CONF.compute.fixed_network_name:"},{"line_number":55,"context_line":"                m \u003d \u0027fixed_network_name must be specified in config\u0027"},{"line_number":56,"context_line":"                raise lib_exc.InvalidConfiguration(m)"},{"line_number":57,"context_line":"            network \u003d cls.admin_manager.networks_client.list_networks("},{"line_number":58,"context_line":"                name\u003dCONF.compute.fixed_network_name)[\u0027networks\u0027][0]"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_8a25efaf","line":55,"updated":"2017-03-14 14:56:00.000000000","message":"or maybe \u0027configuration option \"[compute]/fixed_network_name\" must be set\u0027 ?","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        # with multitenancy"},{"line_number":53,"context_line":"        if CONF.network.shared_physical_network:"},{"line_number":54,"context_line":"            if not CONF.compute.fixed_network_name:"},{"line_number":55,"context_line":"                m \u003d \u0027fixed_network_name must be specified in config\u0027"},{"line_number":56,"context_line":"                raise lib_exc.InvalidConfiguration(m)"},{"line_number":57,"context_line":"            network \u003d cls.admin_manager.networks_client.list_networks("},{"line_number":58,"context_line":"                name\u003dCONF.compute.fixed_network_name)[\u0027networks\u0027][0]"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_fc036db6","line":55,"in_reply_to":"3a1ff146_8a25efaf","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                m \u003d \u0027fixed_network_name must be specified in config\u0027"},{"line_number":56,"context_line":"                raise lib_exc.InvalidConfiguration(m)"},{"line_number":57,"context_line":"            network \u003d cls.admin_manager.networks_client.list_networks("},{"line_number":58,"context_line":"                name\u003dCONF.compute.fixed_network_name)[\u0027networks\u0027][0]"},{"line_number":59,"context_line":"        return network, subnet, router"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_0a41ff39","line":58,"updated":"2017-03-14 14:56:00.000000000","message":"this could fail if eg, the fixed_network_name is incorrect. Do we care to handle it or just let the exception be raised?","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f1406699135d294224fad104de8faad27aae52eb","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                m \u003d \u0027fixed_network_name must be specified in config\u0027"},{"line_number":56,"context_line":"                raise lib_exc.InvalidConfiguration(m)"},{"line_number":57,"context_line":"            network \u003d cls.admin_manager.networks_client.list_networks("},{"line_number":58,"context_line":"                name\u003dCONF.compute.fixed_network_name)[\u0027networks\u0027][0]"},{"line_number":59,"context_line":"        return network, subnet, router"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_b5875f11","line":58,"in_reply_to":"3a1ff146_0a41ff39","updated":"2017-03-14 18:58:26.000000000","message":"If the name is nonexistent, it will raise KeyError, some assert would be good to have here. OTOH this is not code, and I\u0027m fine with leaving it as is, people writing the scenario tests should know that they have to provide an existing network here :)","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                raise lib_exc.InvalidConfiguration(m)"},{"line_number":57,"context_line":"            network \u003d cls.admin_manager.networks_client.list_networks("},{"line_number":58,"context_line":"                name\u003dCONF.compute.fixed_network_name)[\u0027networks\u0027][0]"},{"line_number":59,"context_line":"        return network, subnet, router"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @classmethod"},{"line_number":62,"context_line":"    def get_available_node(cls):"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_6a5fd30e","line":59,"updated":"2017-03-14 14:56:00.000000000","message":"i would really like docstrings for all these methods but I don\u0027t know whether we are asking for that in the tempest files.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                raise lib_exc.InvalidConfiguration(m)"},{"line_number":57,"context_line":"            network \u003d cls.admin_manager.networks_client.list_networks("},{"line_number":58,"context_line":"                name\u003dCONF.compute.fixed_network_name)[\u0027networks\u0027][0]"},{"line_number":59,"context_line":"        return network, subnet, router"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @classmethod"},{"line_number":62,"context_line":"    def get_available_node(cls):"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_bc957541","line":59,"in_reply_to":"3a1ff146_6a5fd30e","updated":"2017-03-15 09:19:12.000000000","message":"We don\u0027t. I will add docstrings to other tempests method as follow-up.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        return network, subnet, router"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @classmethod"},{"line_number":62,"context_line":"    def get_available_node(cls):"},{"line_number":63,"context_line":"        fields \u003d [\u0027uuid\u0027, \u0027driver\u0027, \u0027instance_uuid\u0027, \u0027provision_state\u0027,"},{"line_number":64,"context_line":"                  \u0027name\u0027, \u0027maintenance\u0027]"},{"line_number":65,"context_line":"        _, body \u003d cls.baremetal_client.list_nodes(provision_state\u003d\u0027available\u0027,"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_ea802349","line":62,"updated":"2017-03-14 14:56:00.000000000","message":"you\u0027re getting a list of nodes, right? s/node/nodes/","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        return network, subnet, router"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    @classmethod"},{"line_number":62,"context_line":"    def get_available_node(cls):"},{"line_number":63,"context_line":"        fields \u003d [\u0027uuid\u0027, \u0027driver\u0027, \u0027instance_uuid\u0027, \u0027provision_state\u0027,"},{"line_number":64,"context_line":"                  \u0027name\u0027, \u0027maintenance\u0027]"},{"line_number":65,"context_line":"        _, body \u003d cls.baremetal_client.list_nodes(provision_state\u003d\u0027available\u0027,"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_3c88a522","line":62,"in_reply_to":"3a1ff146_ea802349","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        return port"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @classmethod"},{"line_number":83,"context_line":"    def _associate_instance_with_node(cls, node_id, instance_uuid):"},{"line_number":84,"context_line":"        _, body \u003d cls.baremetal_client.update_node("},{"line_number":85,"context_line":"            node_id, instance_uuid\u003dinstance_uuid)"},{"line_number":86,"context_line":"        return body"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_0ac49f90","line":83,"updated":"2017-03-14 14:56:00.000000000","message":"just curious. is node_id  a node name or UUID? (It isn\u0027t the id, right?)","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f1406699135d294224fad104de8faad27aae52eb","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        return port"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @classmethod"},{"line_number":83,"context_line":"    def _associate_instance_with_node(cls, node_id, instance_uuid):"},{"line_number":84,"context_line":"        _, body \u003d cls.baremetal_client.update_node("},{"line_number":85,"context_line":"            node_id, instance_uuid\u003dinstance_uuid)"},{"line_number":86,"context_line":"        return body"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_35a36fa0","line":83,"in_reply_to":"3a1ff146_0ac49f90","updated":"2017-03-14 18:58:26.000000000","message":"yup","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        return vifs"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @classmethod"},{"line_number":95,"context_line":"    def associate_floatingip_to_node(cls, node_ident):"},{"line_number":96,"context_line":"        vif \u003d cls.get_node_vifs(node_ident)[0]"},{"line_number":97,"context_line":"        body \u003d cls.floating_ips_client.create_floatingip("},{"line_number":98,"context_line":"            floating_network_id\u003dCONF.network.public_network_id)"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_ca40c70a","line":95,"updated":"2017-03-14 14:56:00.000000000","message":"here you use node_ident, in L89 you use node_uuid, and in L83 you use node_id. Would be good to be consistent unless they mean different things.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        return vifs"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @classmethod"},{"line_number":95,"context_line":"    def associate_floatingip_to_node(cls, node_ident):"},{"line_number":96,"context_line":"        vif \u003d cls.get_node_vifs(node_ident)[0]"},{"line_number":97,"context_line":"        body \u003d cls.floating_ips_client.create_floatingip("},{"line_number":98,"context_line":"            floating_network_id\u003dCONF.network.public_network_id)"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_bccad54d","line":95,"in_reply_to":"3a1ff146_ca40c70a","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @classmethod"},{"line_number":95,"context_line":"    def associate_floatingip_to_node(cls, node_ident):"},{"line_number":96,"context_line":"        vif \u003d cls.get_node_vifs(node_ident)[0]"},{"line_number":97,"context_line":"        body \u003d cls.floating_ips_client.create_floatingip("},{"line_number":98,"context_line":"            floating_network_id\u003dCONF.network.public_network_id)"},{"line_number":99,"context_line":"        floating_ip \u003d body[\u0027floatingip\u0027]"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_8a5defee","line":96,"updated":"2017-03-14 14:56:00.000000000","message":"what if there are no vifs? Do we want to handle that case?","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f1406699135d294224fad104de8faad27aae52eb","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    @classmethod"},{"line_number":95,"context_line":"    def associate_floatingip_to_node(cls, node_ident):"},{"line_number":96,"context_line":"        vif \u003d cls.get_node_vifs(node_ident)[0]"},{"line_number":97,"context_line":"        body \u003d cls.floating_ips_client.create_floatingip("},{"line_number":98,"context_line":"            floating_network_id\u003dCONF.network.public_network_id)"},{"line_number":99,"context_line":"        floating_ip \u003d body[\u0027floatingip\u0027]"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_f5af177b","line":96,"in_reply_to":"3a1ff146_8a5defee","updated":"2017-03-14 18:58:26.000000000","message":"same comment as for the fixed_network_name","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def cleanup_floating_ip(cls, ip_address):"},{"line_number":106,"context_line":"        body \u003d cls.admin_manager.floating_ips_client.list_floatingips()"},{"line_number":107,"context_line":"        floating_ip_id \u003d [f[\u0027id\u0027] for f in body[\u0027floatingips\u0027] if"},{"line_number":108,"context_line":"                          f[\u0027floating_ip_address\u0027] \u003d\u003d ip_address][0]"},{"line_number":109,"context_line":"        cls.admin_manager.floating_ips_client.delete_floatingip(floating_ip_id)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_2ae4fb0b","line":108,"updated":"2017-03-14 14:56:00.000000000","message":"again, here, if there is no floating ip, an exception will be raised.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def cleanup_floating_ip(cls, ip_address):"},{"line_number":106,"context_line":"        body \u003d cls.admin_manager.floating_ips_client.list_floatingips()"},{"line_number":107,"context_line":"        floating_ip_id \u003d [f[\u0027id\u0027] for f in body[\u0027floatingips\u0027] if"},{"line_number":108,"context_line":"                          f[\u0027floating_ip_address\u0027] \u003d\u003d ip_address][0]"},{"line_number":109,"context_line":"        cls.admin_manager.floating_ips_client.delete_floatingip(floating_ip_id)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_3c7985fd","line":108,"in_reply_to":"3a1ff146_2ae4fb0b","updated":"2017-03-15 09:19:12.000000000","message":"We will see this exception in the logs and it should lead to test failure. I don\u0027t think that we should have a safe wrappers here. It will just increase tests complexity which is not that we need.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        cls.baremetal_client.vif_attach(node_uuid, vif_id)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @classmethod"},{"line_number":124,"context_line":"    def get_and_lock_node(cls, node\u003dNone):"},{"line_number":125,"context_line":"        instance_uuid \u003d uuidutils.generate_uuid()"},{"line_number":126,"context_line":"        nodes \u003d []"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_ea9d835a","line":124,"updated":"2017-03-14 14:56:00.000000000","message":"would be good to have a docstring for this, it isn\u0027t a simple \u0027does this\u0027 method.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @classmethod"},{"line_number":124,"context_line":"    def get_and_lock_node(cls, node\u003dNone):"},{"line_number":125,"context_line":"        instance_uuid \u003d uuidutils.generate_uuid()"},{"line_number":126,"context_line":"        nodes \u003d []"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        def _try_to_associate_instance():"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_4a4937d0","line":125,"updated":"2017-03-14 14:56:00.000000000","message":"By \u0027locking\u0027 you mean something like \u0027get an available node and assign it some dummy instance uuid so that it is \"used\" (associated with an instance)\u0027. I\u0027m not sure what the wording is, but lock makes me think the node is locked by a conductor.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    @classmethod"},{"line_number":124,"context_line":"    def get_and_lock_node(cls, node\u003dNone):"},{"line_number":125,"context_line":"        instance_uuid \u003d uuidutils.generate_uuid()"},{"line_number":126,"context_line":"        nodes \u003d []"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        def _try_to_associate_instance():"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_c2ddea71","line":125,"in_reply_to":"3a1ff146_4a4937d0","updated":"2017-03-15 09:19:12.000000000","message":"Added a docstring here. this method is used in the tests, so locking node here means lock it by specific test.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @classmethod"},{"line_number":146,"context_line":"    def boot_node(cls, driver, image_ref):"},{"line_number":147,"context_line":"        node \u003d cls.get_and_lock_node()"},{"line_number":148,"context_line":"        cls.update_node_driver(node[\u0027uuid\u0027], driver)"},{"line_number":149,"context_line":"        network, subnet, router \u003d cls.create_networks()"},{"line_number":150,"context_line":"        n_port \u003d cls.create_neutron_port(network_id\u003dnetwork[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_8a5faf74","line":147,"updated":"2017-03-14 14:56:00.000000000","message":"I don\u0027t know how these tempest tests should be written. There\u0027s no need to check that node is not None?","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f1406699135d294224fad104de8faad27aae52eb","unresolved":false,"context_lines":[{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    @classmethod"},{"line_number":146,"context_line":"    def boot_node(cls, driver, image_ref):"},{"line_number":147,"context_line":"        node \u003d cls.get_and_lock_node()"},{"line_number":148,"context_line":"        cls.update_node_driver(node[\u0027uuid\u0027], driver)"},{"line_number":149,"context_line":"        network, subnet, router \u003d cls.create_networks()"},{"line_number":150,"context_line":"        n_port \u003d cls.create_neutron_port(network_id\u003dnetwork[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_d5085b94","line":147,"in_reply_to":"3a1ff146_8a5faf74","updated":"2017-03-14 18:58:26.000000000","message":"The way get_and_lock_node is written, we\u0027d fail with timeout exception if there was no node here.\n\nIf you mean the case when tempest run on an environment without nodes at all, I think this is obviously the problem of the one that is trying to do that :D","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":182,"context_line":"class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager):"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    # API microversion to use among all calls"},{"line_number":185,"context_line":"    api_microversion \u003d \u00271.28\u0027"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    # The node driver to use in the test"},{"line_number":188,"context_line":"    driver \u003d None"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_ea48238a","line":185,"updated":"2017-03-14 14:56:00.000000000","message":"is the idea that this gets incremented when new tests are added that use new features? Or do we want to clamp down on the tests to specific microversion? (I mean, why not just use \u0027latest\u0027?)","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f1406699135d294224fad104de8faad27aae52eb","unresolved":false,"context_lines":[{"line_number":182,"context_line":"class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager):"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    # API microversion to use among all calls"},{"line_number":185,"context_line":"    api_microversion \u003d \u00271.28\u0027"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    # The node driver to use in the test"},{"line_number":188,"context_line":"    driver \u003d None"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_f559d78f","line":185,"in_reply_to":"3a1ff146_ea48238a","updated":"2017-03-14 18:58:26.000000000","message":"I think it\u0027s better to make this a conscious choice and bump it only when needed. So that we can guarantee that eg version 1.999 changing the way vif list outputs the result does not break our tests. If there is a need to bump it, we\u0027ll fix the tests too.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":182,"context_line":"class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager):"},{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    # API microversion to use among all calls"},{"line_number":185,"context_line":"    api_microversion \u003d \u00271.28\u0027"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    # The node driver to use in the test"},{"line_number":188,"context_line":"    driver \u003d None"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_42057ac0","line":185,"in_reply_to":"3a1ff146_f559d78f","updated":"2017-03-15 09:19:12.000000000","message":"Those tests are not so fast (near 5 min per test) I left this configurable in case we want to selectively test specific microversion in future.\nTesting all combinations of microversion/image/driver etc will kill CI :)","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        if (cls.driver not in CONF.baremetal.enabled_drivers +"},{"line_number":202,"context_line":"                CONF.baremetal.enabled_hardware_types):"},{"line_number":203,"context_line":"            raise cls.skipException("},{"line_number":204,"context_line":"                \u0027No conductors registered with %s driver\u0027 % cls.driver)"},{"line_number":205,"context_line":"        if not cls.wholedisk_image and CONF.baremetal.use_provision_network:"},{"line_number":206,"context_line":"            raise cls.skipException("},{"line_number":207,"context_line":"                \u0027Partitioned images are not supported with multitenancy.\u0027)"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_6d1a8d70","line":204,"updated":"2017-03-14 14:56:00.000000000","message":"is it true that there are no conductors, or just that the driver isn\u0027t in the configs?","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        if (cls.driver not in CONF.baremetal.enabled_drivers +"},{"line_number":202,"context_line":"                CONF.baremetal.enabled_hardware_types):"},{"line_number":203,"context_line":"            raise cls.skipException("},{"line_number":204,"context_line":"                \u0027No conductors registered with %s driver\u0027 % cls.driver)"},{"line_number":205,"context_line":"        if not cls.wholedisk_image and CONF.baremetal.use_provision_network:"},{"line_number":206,"context_line":"            raise cls.skipException("},{"line_number":207,"context_line":"                \u0027Partitioned images are not supported with multitenancy.\u0027)"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_02ae2285","line":204,"in_reply_to":"3a1ff146_35db6fef","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f1406699135d294224fad104de8faad27aae52eb","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        if (cls.driver not in CONF.baremetal.enabled_drivers +"},{"line_number":202,"context_line":"                CONF.baremetal.enabled_hardware_types):"},{"line_number":203,"context_line":"            raise cls.skipException("},{"line_number":204,"context_line":"                \u0027No conductors registered with %s driver\u0027 % cls.driver)"},{"line_number":205,"context_line":"        if not cls.wholedisk_image and CONF.baremetal.use_provision_network:"},{"line_number":206,"context_line":"            raise cls.skipException("},{"line_number":207,"context_line":"                \u0027Partitioned images are not supported with multitenancy.\u0027)"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_35db6fef","line":204,"in_reply_to":"3a1ff146_6d1a8d70","updated":"2017-03-14 18:58:26.000000000","message":"the driver isn\u0027t in configs. these should be the same thing actually, but yeah, might be better to say about configs instead here.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        for v in cls.mandatory_attr:"},{"line_number":214,"context_line":"            if getattr(cls, v) is None:"},{"line_number":215,"context_line":"                raise lib_exc.InvalidConfiguration("},{"line_number":216,"context_line":"                    \"Mandatory attribute not set %s\" % v)"},{"line_number":217,"context_line":"        cls.node \u003d cls.boot_node(cls.driver, cls.image_ref)"},{"line_number":218,"context_line":"        cls.node_ip \u003d cls.associate_floatingip_to_node(cls.node[\u0027uuid\u0027])"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_8d818950","line":216,"updated":"2017-03-14 14:56:00.000000000","message":"maybe \"Mandatory attribute \u0027%s\u0027 is not set\u0027","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        for v in cls.mandatory_attr:"},{"line_number":214,"context_line":"            if getattr(cls, v) is None:"},{"line_number":215,"context_line":"                raise lib_exc.InvalidConfiguration("},{"line_number":216,"context_line":"                    \"Mandatory attribute not set %s\" % v)"},{"line_number":217,"context_line":"        cls.node \u003d cls.boot_node(cls.driver, cls.image_ref)"},{"line_number":218,"context_line":"        cls.node_ip \u003d cls.associate_floatingip_to_node(cls.node[\u0027uuid\u0027])"},{"line_number":219,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_62bb56c5","line":216,"in_reply_to":"3a1ff146_8d818950","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                raise lib_exc.InvalidConfiguration("},{"line_number":216,"context_line":"                    \"Mandatory attribute not set %s\" % v)"},{"line_number":217,"context_line":"        cls.node \u003d cls.boot_node(cls.driver, cls.image_ref)"},{"line_number":218,"context_line":"        cls.node_ip \u003d cls.associate_floatingip_to_node(cls.node[\u0027uuid\u0027])"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    @classmethod"},{"line_number":221,"context_line":"    def resource_cleanup(cls):"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_0d72f97c","line":218,"updated":"2017-03-14 14:56:00.000000000","message":"I wouldn\u0027t mind having these two at the top, with values \u003d None, so that I know they are class attributes.","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3210bb64c11cbd94a7d1739d1562feff3250db57","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                raise lib_exc.InvalidConfiguration("},{"line_number":216,"context_line":"                    \"Mandatory attribute not set %s\" % v)"},{"line_number":217,"context_line":"        cls.node \u003d cls.boot_node(cls.driver, cls.image_ref)"},{"line_number":218,"context_line":"        cls.node_ip \u003d cls.associate_floatingip_to_node(cls.node[\u0027uuid\u0027])"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    @classmethod"},{"line_number":221,"context_line":"    def resource_cleanup(cls):"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_e2f58683","line":218,"in_reply_to":"3a1ff146_0d72f97c","updated":"2017-03-15 09:19:12.000000000","message":"Done","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"358c40f0b7fd55685b31392ce6a1424471c51833","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            cls.ports_client.delete_port(vif)"},{"line_number":226,"context_line":"        cls.terminate_node(cls.node[\u0027uuid\u0027])"},{"line_number":227,"context_line":"        base.reset_baremetal_api_microversion()"},{"line_number":228,"context_line":"        super(BaremetalStandaloneManager, cls).resource_cleanup()"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_ed2afd2b","line":228,"updated":"2017-03-14 14:56:00.000000000","message":"there\u0027s no need to set cls.node \u0026 cls.node_ip to None, right?","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f1406699135d294224fad104de8faad27aae52eb","unresolved":false,"context_lines":[{"line_number":225,"context_line":"            cls.ports_client.delete_port(vif)"},{"line_number":226,"context_line":"        cls.terminate_node(cls.node[\u0027uuid\u0027])"},{"line_number":227,"context_line":"        base.reset_baremetal_api_microversion()"},{"line_number":228,"context_line":"        super(BaremetalStandaloneManager, cls).resource_cleanup()"}],"source_content_type":"text/x-python","patch_set":85,"id":"3a1ff146_55ff0b34","line":228,"in_reply_to":"3a1ff146_ed2afd2b","updated":"2017-03-14 18:58:26.000000000","message":"This happens when all the tests in class are finished, so no :)","commit_id":"1b151a087d3d753ddaa8c22842266e0b2a74293a"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fc3bb75a4e5d0613f454d3cb9fad7c176b699a3c","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @classmethod"},{"line_number":39,"context_line":"    def skip_checks(cls):"},{"line_number":40,"context_line":"        \"\"\"Defines a conditions to skip this tests.\"\"\""},{"line_number":41,"context_line":"        super(BaremetalStandaloneManager, cls).skip_checks()"},{"line_number":42,"context_line":"        if CONF.service_available.nova:"},{"line_number":43,"context_line":"            raise cls.skipException(\u0027Nova is enabled. Stand-alone tests will \u0027"}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_0e000134","line":40,"updated":"2017-03-15 14:39:29.000000000","message":"nit. s/a conditions/conditions/\n\ns/this tests/these tests/","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c0f7b5459d09012f7ec049e5ac3836a887048e91","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @classmethod"},{"line_number":39,"context_line":"    def skip_checks(cls):"},{"line_number":40,"context_line":"        \"\"\"Defines a conditions to skip this tests.\"\"\""},{"line_number":41,"context_line":"        super(BaremetalStandaloneManager, cls).skip_checks()"},{"line_number":42,"context_line":"        if CONF.service_available.nova:"},{"line_number":43,"context_line":"            raise cls.skipException(\u0027Nova is enabled. Stand-alone tests will \u0027"}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_548e0679","line":40,"in_reply_to":"3a1ff146_0e000134","updated":"2017-03-15 14:55:07.000000000","message":"Done","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fc3bb75a4e5d0613f454d3cb9fad7c176b699a3c","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        router \u003d None"},{"line_number":60,"context_line":"        if CONF.network.shared_physical_network:"},{"line_number":61,"context_line":"            if not CONF.compute.fixed_network_name:"},{"line_number":62,"context_line":"                m \u003d (\u0027onfiguration option \"[compute]/fixed_network_name\" \u0027"},{"line_number":63,"context_line":"                     \u0027must be set.\u0027)"},{"line_number":64,"context_line":"                raise lib_exc.InvalidConfiguration(m)"},{"line_number":65,"context_line":"            network \u003d cls.admin_manager.networks_client.list_networks("}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_0eae412e","line":62,"updated":"2017-03-15 14:39:29.000000000","message":"nit s/onfiguration/configuration/","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c0f7b5459d09012f7ec049e5ac3836a887048e91","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        router \u003d None"},{"line_number":60,"context_line":"        if CONF.network.shared_physical_network:"},{"line_number":61,"context_line":"            if not CONF.compute.fixed_network_name:"},{"line_number":62,"context_line":"                m \u003d (\u0027onfiguration option \"[compute]/fixed_network_name\" \u0027"},{"line_number":63,"context_line":"                     \u0027must be set.\u0027)"},{"line_number":64,"context_line":"                raise lib_exc.InvalidConfiguration(m)"},{"line_number":65,"context_line":"            network \u003d cls.admin_manager.networks_client.list_networks("}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_d4cf56ae","line":62,"in_reply_to":"3a1ff146_0eae412e","updated":"2017-03-15 14:55:07.000000000","message":"Done","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fc3bb75a4e5d0613f454d3cb9fad7c176b699a3c","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @classmethod"},{"line_number":70,"context_line":"    def get_available_nodes(cls):"},{"line_number":71,"context_line":"        \"\"\"Ge all ironic nodes that can be deployed."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        We can deploy on nodes when the following conditions are meat:"},{"line_number":74,"context_line":"          * provision_state is \u0027available\u0027"}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_ee7725d2","line":71,"updated":"2017-03-15 14:39:29.000000000","message":"nit s/Ge/Get/","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c0f7b5459d09012f7ec049e5ac3836a887048e91","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @classmethod"},{"line_number":70,"context_line":"    def get_available_nodes(cls):"},{"line_number":71,"context_line":"        \"\"\"Ge all ironic nodes that can be deployed."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        We can deploy on nodes when the following conditions are meat:"},{"line_number":74,"context_line":"          * provision_state is \u0027available\u0027"}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_743782b0","line":71,"in_reply_to":"3a1ff146_ee7725d2","updated":"2017-03-15 14:55:07.000000000","message":"Done","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fc3bb75a4e5d0613f454d3cb9fad7c176b699a3c","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def get_available_nodes(cls):"},{"line_number":71,"context_line":"        \"\"\"Ge all ironic nodes that can be deployed."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        We can deploy on nodes when the following conditions are meat:"},{"line_number":74,"context_line":"          * provision_state is \u0027available\u0027"},{"line_number":75,"context_line":"          * maintenance is False"},{"line_number":76,"context_line":"          * No instance_uuid is associated to node."}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_6e4a5585","line":73,"updated":"2017-03-15 14:39:29.000000000","message":"s/meat/met/ :D","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c0f7b5459d09012f7ec049e5ac3836a887048e91","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    def get_available_nodes(cls):"},{"line_number":71,"context_line":"        \"\"\"Ge all ironic nodes that can be deployed."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        We can deploy on nodes when the following conditions are meat:"},{"line_number":74,"context_line":"          * provision_state is \u0027available\u0027"},{"line_number":75,"context_line":"          * maintenance is False"},{"line_number":76,"context_line":"          * No instance_uuid is associated to node."}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_1449ee31","line":73,"in_reply_to":"3a1ff146_6e4a5585","updated":"2017-03-15 14:55:07.000000000","message":"Done :)","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fc3bb75a4e5d0613f454d3cb9fad7c176b699a3c","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @classmethod"},{"line_number":89,"context_line":"    def get_random_available_node(cls):"},{"line_number":90,"context_line":"        \"\"\"Randomly pick available for deployment node.\"\"\""},{"line_number":91,"context_line":"        nodes \u003d cls.get_available_nodes()"},{"line_number":92,"context_line":"        if nodes:"},{"line_number":93,"context_line":"            return random.choice(nodes)"}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_6e31750b","line":90,"updated":"2017-03-15 14:39:29.000000000","message":"maybe \u0027Randomly pick an available node for deployment\u0027 ?","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c0f7b5459d09012f7ec049e5ac3836a887048e91","unresolved":false,"context_lines":[{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @classmethod"},{"line_number":89,"context_line":"    def get_random_available_node(cls):"},{"line_number":90,"context_line":"        \"\"\"Randomly pick available for deployment node.\"\"\""},{"line_number":91,"context_line":"        nodes \u003d cls.get_available_nodes()"},{"line_number":92,"context_line":"        if nodes:"},{"line_number":93,"context_line":"            return random.choice(nodes)"}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_d45d96ea","line":90,"in_reply_to":"3a1ff146_6e31750b","updated":"2017-03-15 14:55:07.000000000","message":"Done","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fc3bb75a4e5d0613f454d3cb9fad7c176b699a3c","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    @classmethod"},{"line_number":157,"context_line":"    @bm.retry_on_conflict"},{"line_number":158,"context_line":"    def detach_all_vifs_from_node(cls, node_id):"},{"line_number":159,"context_line":"        \"\"\"Detach all VIFs from a give node."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        :param node_id: Name or UUID of the node."},{"line_number":162,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_a957e700","line":159,"updated":"2017-03-15 14:39:29.000000000","message":"s/give/given/","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c0f7b5459d09012f7ec049e5ac3836a887048e91","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    @classmethod"},{"line_number":157,"context_line":"    @bm.retry_on_conflict"},{"line_number":158,"context_line":"    def detach_all_vifs_from_node(cls, node_id):"},{"line_number":159,"context_line":"        \"\"\"Detach all VIFs from a give node."},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        :param node_id: Name or UUID of the node."},{"line_number":162,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_346d0a99","line":159,"in_reply_to":"3a1ff146_a957e700","updated":"2017-03-15 14:55:07.000000000","message":"Done","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fc3bb75a4e5d0613f454d3cb9fad7c176b699a3c","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        \"\"\"Attach VIF to a give node."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        :param node_id: Name or UUID of the node."},{"line_number":173,"context_line":"        :param vif_id: UUID of the VIF to attach."},{"line_number":174,"context_line":"        \"\"\""},{"line_number":175,"context_line":"        cls.baremetal_client.vif_attach(node_id, vif_id)"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_89eeab20","line":173,"updated":"2017-03-15 14:39:29.000000000","message":"I guess this is fine for the testing since it probably is a UUID. But I think in ironic, it could be a UUID or name.","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c0f7b5459d09012f7ec049e5ac3836a887048e91","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        \"\"\"Attach VIF to a give node."},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        :param node_id: Name or UUID of the node."},{"line_number":173,"context_line":"        :param vif_id: UUID of the VIF to attach."},{"line_number":174,"context_line":"        \"\"\""},{"line_number":175,"context_line":"        cls.baremetal_client.vif_attach(node_id, vif_id)"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_b4265a66","line":173,"in_reply_to":"3a1ff146_89eeab20","updated":"2017-03-15 14:55:07.000000000","message":"Done","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fc3bb75a4e5d0613f454d3cb9fad7c176b699a3c","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @classmethod"},{"line_number":178,"context_line":"    def get_and_lock_node(cls, node\u003dNone):"},{"line_number":179,"context_line":"        \"\"\"Pick available node and lock it."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Only one instance_uuid may be associated, use this behaviour as locking"},{"line_number":182,"context_line":"        node when tests are launched concurrently. If node is not passed"}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_496af381","line":179,"updated":"2017-03-15 14:39:29.000000000","message":"I still don\u0027t like the use of \u0027lock\u0027 here, since it doesn\u0027t mean the same thing as \u0027lock\u0027 does in ironic (eg, when a node is locked by a conductor). But if it is clear to others, ...\n\nIt seems more like \u0027reserve-available-node\u0027? Gets an available node and reserves it (via associating an instance to it) for use by a series of tests. (or whatever.)","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c0f7b5459d09012f7ec049e5ac3836a887048e91","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"    @classmethod"},{"line_number":178,"context_line":"    def get_and_lock_node(cls, node\u003dNone):"},{"line_number":179,"context_line":"        \"\"\"Pick available node and lock it."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Only one instance_uuid may be associated, use this behaviour as locking"},{"line_number":182,"context_line":"        node when tests are launched concurrently. If node is not passed"}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_54c28634","line":179,"in_reply_to":"3a1ff146_496af381","updated":"2017-03-15 14:55:07.000000000","message":"renamed to get_and_reserve_node","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fc3bb75a4e5d0613f454d3cb9fad7c176b699a3c","unresolved":false,"context_lines":[{"line_number":216,"context_line":"          * Create Neutron port and attach it to node."},{"line_number":217,"context_line":"          * Update node image_source/root_gb."},{"line_number":218,"context_line":"          * Deploy node."},{"line_number":219,"context_line":"          * Wait when node is deployed."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        :param driver: Node driver to use."},{"line_number":222,"context_line":"        :param image_ref: Reference to user image to boot node with."}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_898dcb33","line":219,"updated":"2017-03-15 14:39:29.000000000","message":"s/when/until/","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c0f7b5459d09012f7ec049e5ac3836a887048e91","unresolved":false,"context_lines":[{"line_number":216,"context_line":"          * Create Neutron port and attach it to node."},{"line_number":217,"context_line":"          * Update node image_source/root_gb."},{"line_number":218,"context_line":"          * Deploy node."},{"line_number":219,"context_line":"          * Wait when node is deployed."},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"        :param driver: Node driver to use."},{"line_number":222,"context_line":"        :param image_ref: Reference to user image to boot node with."}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_d403d671","line":219,"in_reply_to":"3a1ff146_898dcb33","updated":"2017-03-15 14:55:07.000000000","message":"Done","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fc3bb75a4e5d0613f454d3cb9fad7c176b699a3c","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        The following actions are executed:"},{"line_number":251,"context_line":"           * Detach all VIFs from the given node."},{"line_number":252,"context_line":"           * Unprovision node."},{"line_number":253,"context_line":"           * Wait when node become available."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        :param node_id: Name or UUID for the node."},{"line_number":256,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_09a1db94","line":253,"updated":"2017-03-15 14:39:29.000000000","message":"s/when/until/","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c0f7b5459d09012f7ec049e5ac3836a887048e91","unresolved":false,"context_lines":[{"line_number":250,"context_line":"        The following actions are executed:"},{"line_number":251,"context_line":"           * Detach all VIFs from the given node."},{"line_number":252,"context_line":"           * Unprovision node."},{"line_number":253,"context_line":"           * Wait when node become available."},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        :param node_id: Name or UUID for the node."},{"line_number":256,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_14f64e8f","line":253,"in_reply_to":"3a1ff146_09a1db94","updated":"2017-03-15 14:55:07.000000000","message":"Done","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fc3bb75a4e5d0613f454d3cb9fad7c176b699a3c","unresolved":false,"context_lines":[{"line_number":269,"context_line":"class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager):"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    # API microversion to use among all calls"},{"line_number":272,"context_line":"    api_microversion \u003d \u00271.28\u0027"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    # The node driver to use in the test"},{"line_number":275,"context_line":"    driver \u003d None"}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_c91183ae","line":272,"updated":"2017-03-15 14:39:29.000000000","message":"might be useful to put a note above this, to indicate that we bump this when testing features available in a new version.\n\nOr not. I guess someone might wonder, why not put this as \u0027latest\u0027 and be done with it.","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fc3bb75a4e5d0613f454d3cb9fad7c176b699a3c","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        if (cls.driver not in CONF.baremetal.enabled_drivers +"},{"line_number":292,"context_line":"                CONF.baremetal.enabled_hardware_types):"},{"line_number":293,"context_line":"            raise cls.skipException("},{"line_number":294,"context_line":"                \u0027The driver: %(driver)s, used in test is not in the list of \u0027"},{"line_number":295,"context_line":"                \u0027enabled_drivers %(enabled_drivers)s or \u0027"},{"line_number":296,"context_line":"                \u0027enabled_hardware_types %(enabled_hw_types)s \u0027"},{"line_number":297,"context_line":"                \u0027in the tempest config.\u0027 % {"}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_69c7af12","line":294,"updated":"2017-03-15 14:39:29.000000000","message":"nit, no need for comma. If you put the comma, there should be another comma after \u0027in test\u0027.","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c0f7b5459d09012f7ec049e5ac3836a887048e91","unresolved":false,"context_lines":[{"line_number":291,"context_line":"        if (cls.driver not in CONF.baremetal.enabled_drivers +"},{"line_number":292,"context_line":"                CONF.baremetal.enabled_hardware_types):"},{"line_number":293,"context_line":"            raise cls.skipException("},{"line_number":294,"context_line":"                \u0027The driver: %(driver)s, used in test is not in the list of \u0027"},{"line_number":295,"context_line":"                \u0027enabled_drivers %(enabled_drivers)s or \u0027"},{"line_number":296,"context_line":"                \u0027enabled_hardware_types %(enabled_hw_types)s \u0027"},{"line_number":297,"context_line":"                \u0027in the tempest config.\u0027 % {"}],"source_content_type":"text/x-python","patch_set":87,"id":"3a1ff146_14248e0b","line":294,"in_reply_to":"3a1ff146_69c7af12","updated":"2017-03-15 14:55:07.000000000","message":"Done","commit_id":"c26a2e0ebd4e62fa3912ff21e6fc673886f01a22"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"de9c5ea29a5ada6c35ed311c5ffd3a7a4bd93063","unresolved":false,"context_lines":[{"line_number":179,"context_line":"        \"\"\"Pick an available node for deployment and reserve it."},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        Only one instance_uuid may be associated, use this behaviour as"},{"line_number":182,"context_line":"        reservation node when tests are launched concurrently. If node is"},{"line_number":183,"context_line":"        not passed directly pick random available for deployment node."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        :param node: Ironic node to associate instance_uuid with."}],"source_content_type":"text/x-python","patch_set":88,"id":"3a1ff146_f477f2d1","line":182,"updated":"2017-03-15 15:00:10.000000000","message":"nit s/as reservation/to reserve a/ ?","commit_id":"e48375538c11a988e66fd9eadc944e82cb7f4b57"}],"ironic_tempest_plugin/tests/scenario/ironic_standalone/test_basic_ops.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    image_ref \u003d CONF.baremetal.image_partitioned_ref"},{"line_number":67,"context_line":"    wholedisk_image \u003d False"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @test.idempotent_id(\u0027549173a5-38ec-42bb-b0e2-c8b9f4a08945\u0027)"},{"line_number":70,"context_line":"    @test.services(\u0027image\u0027, \u0027network\u0027)"},{"line_number":71,"context_line":"    def test_ip_access_to_server(self):"},{"line_number":72,"context_line":"        self.ping_ip_address(self.node_ip, should_succeed\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_be828e50","line":69,"updated":"2017-02-06 11:07:49.000000000","message":"Same id as the previous one :) I think they should be autogenerated.","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"733c8fdef063c6fcf58af4c92f879fe0b00e0608","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class BaremetalAgentIpmitoolWholedisk(bsm.BaremetalStandaloneScenarioTest):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    driver \u003d \u0027agent_ipmitool\u0027"},{"line_number":30,"context_line":"    image_ref \u003d CONF.baremetal.whole_disk_image_ref"},{"line_number":31,"context_line":"    wholedisk_image \u003d True"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @test.idempotent_id(\u0027defff515-a6ff-44f6-9d8d-2ded51196d98\u0027)"},{"line_number":34,"context_line":"    @test.services(\u0027image\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":66,"id":"ba2be162_00476f77","line":31,"range":{"start_line":29,"start_character":4,"end_line":31,"end_character":26},"updated":"2017-03-03 14:04:41.000000000","message":"Could you add these 3 to BaremetalStandaloneScenarioTest as abstract properties for example? So that it is visible that these are the things that should be defined.","commit_id":"37e8b4d6f45a4787ed8d1f6dcf61b96553022fe8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2100faf61b11c0b55858c99550223b38ee78f577","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class BaremetalAgentIpmitoolWholedisk(bsm.BaremetalStandaloneScenarioTest):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    driver \u003d \u0027agent_ipmitool\u0027"},{"line_number":30,"context_line":"    image_ref \u003d CONF.baremetal.whole_disk_image_ref"},{"line_number":31,"context_line":"    wholedisk_image \u003d True"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    @test.idempotent_id(\u0027defff515-a6ff-44f6-9d8d-2ded51196d98\u0027)"},{"line_number":34,"context_line":"    @test.services(\u0027image\u0027, \u0027network\u0027)"}],"source_content_type":"text/x-python","patch_set":66,"id":"ba2be162_327f5767","line":31,"range":{"start_line":29,"start_character":4,"end_line":31,"end_character":26},"in_reply_to":"ba2be162_00476f77","updated":"2017-03-03 18:57:00.000000000","message":"Done","commit_id":"37e8b4d6f45a4787ed8d1f6dcf61b96553022fe8"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"733c8fdef063c6fcf58af4c92f879fe0b00e0608","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    wholedisk_image \u003d False"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @test.idempotent_id(\u002727b86130-d8dc-419d-880a-fbbbe4ce3f8c\u0027)"},{"line_number":46,"context_line":"    @test.services(\u0027image\u0027, \u0027network\u0027)"},{"line_number":47,"context_line":"    def test_ip_access_to_server(self):"},{"line_number":48,"context_line":"        self.ping_ip_address(self.node_ip, should_succeed\u003dTrue)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"ba2be162_c01e376f","line":46,"updated":"2017-03-03 14:04:41.000000000","message":"I guess we also need object_storage for agent* drivers?","commit_id":"37e8b4d6f45a4787ed8d1f6dcf61b96553022fe8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2100faf61b11c0b55858c99550223b38ee78f577","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    wholedisk_image \u003d False"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @test.idempotent_id(\u002727b86130-d8dc-419d-880a-fbbbe4ce3f8c\u0027)"},{"line_number":46,"context_line":"    @test.services(\u0027image\u0027, \u0027network\u0027)"},{"line_number":47,"context_line":"    def test_ip_access_to_server(self):"},{"line_number":48,"context_line":"        self.ping_ip_address(self.node_ip, should_succeed\u003dTrue)"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":66,"id":"ba2be162_32ae7798","line":46,"in_reply_to":"ba2be162_c01e376f","updated":"2017-03-03 18:57:00.000000000","message":"Done","commit_id":"37e8b4d6f45a4787ed8d1f6dcf61b96553022fe8"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"c078353293e58f2cc4f1cc9b008d35336b59c9a2","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from ironic_tempest_plugin.tests.scenario import \\"},{"line_number":21,"context_line":"    baremetal_standalone_manager as bsm"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":"CONF \u003d config.CONF"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":84,"id":"7a25e98e_bcd2ee32","line":23,"updated":"2017-03-13 23:41:08.000000000","message":"This doesn\u0027t seem to be used","commit_id":"206b7085b39d8e0cf026fc63be4792c17ec64982"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7c5b145fba2a0afea3cdec25d14b1ca4ed5c99f5","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from ironic_tempest_plugin.tests.scenario import \\"},{"line_number":21,"context_line":"    baremetal_standalone_manager as bsm"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":"CONF \u003d config.CONF"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":84,"id":"5a22e58a_1a206949","line":23,"in_reply_to":"7a25e98e_bcd2ee32","updated":"2017-03-14 09:10:29.000000000","message":"Done","commit_id":"206b7085b39d8e0cf026fc63be4792c17ec64982"}],"ironic_tempest_plugin/tests/scenario/ironic_standalone/test_cleaning.py":[{"author":{"_account_id":22860,"name":"Solio Sarabia","email":"solio.sarabia@intel.com","username":"ssarabia"},"change_message_id":"f1df6a44b82e515b53e3a012800b07bf96109a03","unresolved":false,"context_lines":[{"line_number":24,"context_line":"CONF \u003d config.CONF"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class BaremetalCleaningAgentIpmitoolWholedisk(bsm.BaremetalStandaloneManager):"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    driver \u003d \u0027agent_ipmitool\u0027"},{"line_number":30,"context_line":"    image_ref \u003d CONF.baremetal.image_wholedisk_ref"}],"source_content_type":"text/x-python","patch_set":45,"id":"3a461143_c3b47f36","line":27,"range":{"start_line":27,"start_character":6,"end_line":27,"end_character":45},"updated":"2017-01-30 23:25:16.000000000","message":"Should we have the cleaning test for partitioned images? For both agent_ipmitool and pxe_ipmitool.","commit_id":"8543dd20739ad55f91bc79630825aa79c5e02c6d"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"1d496f233d0d2cfe7049d73328dfb2af713466dd","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    driver \u003d \u0027agent_ipmitool\u0027"},{"line_number":30,"context_line":"    image_ref \u003d CONF.baremetal.image_wholedisk_ref"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @test.idempotent_id(\u0027549173a5-38ec-42bb-b0e2-c8b9f4a08945\u0027)"},{"line_number":33,"context_line":"    @test.services(\u0027image\u0027, \u0027network\u0027)"},{"line_number":34,"context_line":"    def test_manual_cleaning(self):"},{"line_number":35,"context_line":"        node \u003d self.boot_node(self.driver, self.image_ref)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_3e977e91","line":32,"updated":"2017-02-06 11:07:49.000000000","message":"ditto for both tests.\n\nYou could remove them and do ``check-uuid --fix`` as described here http://docs.openstack.org/developer/tempest/HACKING.html#test-identification-with-idempotent-id","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7b12a96a39b382d109bcb90a23d4cfe0f0a33c3c","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    driver \u003d \u0027agent_ipmitool\u0027"},{"line_number":30,"context_line":"    image_ref \u003d CONF.baremetal.image_wholedisk_ref"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @test.idempotent_id(\u0027549173a5-38ec-42bb-b0e2-c8b9f4a08945\u0027)"},{"line_number":33,"context_line":"    @test.services(\u0027image\u0027, \u0027network\u0027)"},{"line_number":34,"context_line":"    def test_manual_cleaning(self):"},{"line_number":35,"context_line":"        node \u003d self.boot_node(self.driver, self.image_ref)"}],"source_content_type":"text/x-python","patch_set":53,"id":"1a430d35_52ac3b35","line":32,"in_reply_to":"1a430d35_3e977e91","updated":"2017-02-06 12:51:15.000000000","message":"Done","commit_id":"93bb89f487ddb8b1638a375372298f2467fcfa05"}],"ironic_tempest_plugin/tests/scenario/test_baremetal_basic_ops.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ed6855d096f42a43373d8d53bb17658f2bd2aca3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def skip_checks(cls):"},{"line_number":49,"context_line":"        super(BaremetalBasicOps, cls).skip_checks()"},{"line_number":50,"context_line":"        if not CONF.service_available.nova:"},{"line_number":51,"context_line":"            raise cls.skipException(\u0027Nova is not enabled.\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def rebuild_instance(self, preserve_ephemeral\u003dFalse):"},{"line_number":54,"context_line":"        self.rebuild_server(server_id\u003dself.instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_5c9a246f","line":51,"updated":"2017-02-08 13:23:26.000000000","message":"ditto, isn\u0027t it done by @services?","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b06e1b7226ad9b7677f112ac62db5eb824b8b47d","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def skip_checks(cls):"},{"line_number":49,"context_line":"        super(BaremetalBasicOps, cls).skip_checks()"},{"line_number":50,"context_line":"        if not CONF.service_available.nova:"},{"line_number":51,"context_line":"            raise cls.skipException(\u0027Nova is not enabled.\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def rebuild_instance(self, preserve_ephemeral\u003dFalse):"},{"line_number":54,"context_line":"        self.rebuild_server(server_id\u003dself.instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_c51e340b","line":51,"in_reply_to":"1a430d35_5c9a246f","updated":"2017-02-08 15:44:14.000000000","message":"Done","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"}],"ironic_tempest_plugin/tests/scenario/test_baremetal_multitenancy.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"ed6855d096f42a43373d8d53bb17658f2bd2aca3","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            msg \u003d \u0027Ironic/Neutron tenant isolation is not configured.\u0027"},{"line_number":45,"context_line":"            raise cls.skipException(msg)"},{"line_number":46,"context_line":"        if not CONF.service_available.nova:"},{"line_number":47,"context_line":"            raise cls.skipException(\u0027Nova is not enabled.\u0027)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def create_tenant_network(self, clients, tenant_cidr):"},{"line_number":50,"context_line":"        network \u003d self._create_network("}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_7c8b601f","line":47,"updated":"2017-02-08 13:23:26.000000000","message":"ditto","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b06e1b7226ad9b7677f112ac62db5eb824b8b47d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"            msg \u003d \u0027Ironic/Neutron tenant isolation is not configured.\u0027"},{"line_number":45,"context_line":"            raise cls.skipException(msg)"},{"line_number":46,"context_line":"        if not CONF.service_available.nova:"},{"line_number":47,"context_line":"            raise cls.skipException(\u0027Nova is not enabled.\u0027)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def create_tenant_network(self, clients, tenant_cidr):"},{"line_number":50,"context_line":"        network \u003d self._create_network("}],"source_content_type":"text/x-python","patch_set":57,"id":"1a430d35_a5ea08d9","line":47,"in_reply_to":"1a430d35_7c8b601f","updated":"2017-02-08 15:44:14.000000000","message":"Done","commit_id":"5575e798115cf09d43064a8fb6aa540793266455"}]}
