)]}'
{"etc/ironic/rootwrap.d/ironic-ilo.filters":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# This file should be owned by (and only-writeable by) the root user"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"[Filters]"},{"line_number":5,"context_line":"mount: PathFilter, /bin/mount, root, /tmp, /tmp"},{"line_number":6,"context_line":"umount: PathFilter, /bin/umount, root, /tmp"},{"line_number":7,"context_line":"mkfs: CommandFilter, /sbin/mkfs, root"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAAUX%2F%2FHFg%3D","line":5,"updated":"2014-02-17 04:53:58.000000000","message":"Please do not use absolute path here, to support different linux system with different path, this comments can be applied for following umount and mkfs commands also, thanks.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# This file should be owned by (and only-writeable by) the root user"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"[Filters]"},{"line_number":5,"context_line":"mount: PathFilter, /bin/mount, root, /tmp, /tmp"},{"line_number":6,"context_line":"umount: PathFilter, /bin/umount, root, /tmp"},{"line_number":7,"context_line":"mkfs: CommandFilter, /sbin/mkfs, root"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAAUX%2F%2B5Lo%3D","line":5,"in_reply_to":"AAAAUX%2F%2FHFg%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"8043001934e63426623b89251f1d67120d1bcf71","unresolved":false,"context_lines":[{"line_number":4,"context_line":"[Filters]"},{"line_number":5,"context_line":"mount: PathFilter, mount, root, /tmp, /tmp"},{"line_number":6,"context_line":"umount: PathFilter, umount, root, /tmp"},{"line_number":7,"context_line":"mkfs: CommandFilter, mkfs, root"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAU3%2F%2FwGA%3D","line":7,"updated":"2014-02-25 00:51:35.000000000","message":"the function that use these are in deploy_utils.py so they should be added to ironic-utils.filters.\n\nAlso mkfs is already in that file.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"}],"ironic/drivers/ilo.py":[{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"8043001934e63426623b89251f1d67120d1bcf71","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FwFs%3D","line":1,"updated":"2014-02-25 00:51:35.000000000","message":"please remove vim line.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bf069df329e726e499fdf12c1bde38f73c7c3675","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FsuI%3D","line":1,"in_reply_to":"AAAAU3%2F%2FwFs%3D","updated":"2014-02-25 10:16:32.000000000","message":"Done","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"}],"ironic/drivers/modules/deploy_utils.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    utils.execute(\u0027sfdisk\u0027, \u0027-uM\u0027, dev, process_input\u003dstdin_command,"},{"line_number":93,"context_line":"                  run_as_root\u003dTrue,"},{"line_number":94,"context_line":"                  attempts\u003d3,"},{"line_number":95,"context_line":"                  check_exit_code\u003d[0])"},{"line_number":96,"context_line":"    # avoid \"device is busy\""},{"line_number":97,"context_line":"    time.sleep(3)"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FHEU%3D","line":95,"updated":"2014-02-17 04:53:58.000000000","message":"please do not change the existing code if it is unnecessary and confusing, thanks.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    utils.execute(\u0027sfdisk\u0027, \u0027-uM\u0027, dev, process_input\u003dstdin_command,"},{"line_number":93,"context_line":"                  run_as_root\u003dTrue,"},{"line_number":94,"context_line":"                  attempts\u003d3,"},{"line_number":95,"context_line":"                  check_exit_code\u003d[0])"},{"line_number":96,"context_line":"    # avoid \"device is busy\""},{"line_number":97,"context_line":"    time.sleep(3)"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B5Lc%3D","line":95,"in_reply_to":"AAAAUX%2F%2FHEU%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done, will remove this.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"def mount(src, dest, *args):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    \"\"\"Mounts a device/image file on specified location.\"\"\""},{"line_number":127,"context_line":"    args \u003d (\u0027mount\u0027, ) + args + (src, dest)"},{"line_number":128,"context_line":"    utils.execute(*args,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FHE0%3D","line":125,"updated":"2014-02-17 04:53:58.000000000","message":"no space line required here.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"def mount(src, dest, *args):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    \"\"\"Mounts a device/image file on specified location.\"\"\""},{"line_number":127,"context_line":"    args \u003d (\u0027mount\u0027, ) + args + (src, dest)"},{"line_number":128,"context_line":"    utils.execute(*args,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B5LQ%3D","line":125,"in_reply_to":"AAAAUX%2F%2FHE0%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"8043001934e63426623b89251f1d67120d1bcf71","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    if not is_block_device(swap_part):"},{"line_number":205,"context_line":"        raise exception.InstanceDeployFailure(_(\"Swap device \u0027%s\u0027 not found\")"},{"line_number":206,"context_line":"                                              % swap_part)"},{"line_number":207,"context_line":"    dd(image_path, root_part, \u0027bs\u003d1M\u0027, \u0027oflag\u003ddirect\u0027)"},{"line_number":208,"context_line":"    mkswap(swap_part)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fv2M%3D","line":207,"updated":"2014-02-25 00:51:35.000000000","message":"I think these would be better set as a config value, then passing in like this.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"}],"ironic/drivers/modules/ilo_common.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from ironic.drivers.modules import ribcl_ilo"},{"line_number":24,"context_line":"from ironic.openstack.common import log as logging"},{"line_number":25,"context_line":"from oslo.config import cfg"},{"line_number":26,"context_line":"import re"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"opts \u003d ["},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027default_ilo_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FGtE%3D","line":26,"updated":"2014-02-17 04:53:58.000000000","message":"Please follow the import order and put space line between these groups:\n\n\u003cstdlib\u003e\n\n\u003cthird party\u003e\n\n\u003cthis code tree\u003e","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from ironic.drivers.modules import ribcl_ilo"},{"line_number":24,"context_line":"from ironic.openstack.common import log as logging"},{"line_number":25,"context_line":"from oslo.config import cfg"},{"line_number":26,"context_line":"import re"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"opts \u003d ["},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027default_ilo_timeout\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B5Ks%3D","line":26,"in_reply_to":"AAAAUX%2F%2FGtE%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"import re"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"opts \u003d ["},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027default_ilo_timeout\u0027,"},{"line_number":30,"context_line":"               default\u003d60,"},{"line_number":31,"context_line":"               help\u003d\u0027Default timeout for iLO operations\u0027),"},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027default_ilo_port\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FHC8%3D","line":29,"updated":"2014-02-17 04:53:58.000000000","message":"I think we can rename to \u0027ilo_timeout\u0027 without default, because we define the default value already, make sense?","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":26,"context_line":"import re"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"opts \u003d ["},{"line_number":29,"context_line":"    cfg.IntOpt(\u0027default_ilo_timeout\u0027,"},{"line_number":30,"context_line":"               default\u003d60,"},{"line_number":31,"context_line":"               help\u003d\u0027Default timeout for iLO operations\u0027),"},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027default_ilo_port\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BwXc%3D","line":29,"in_reply_to":"AAAAUX%2F%2FHC8%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    cfg.IntOpt(\u0027default_ilo_timeout\u0027,"},{"line_number":30,"context_line":"               default\u003d60,"},{"line_number":31,"context_line":"               help\u003d\u0027Default timeout for iLO operations\u0027),"},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027default_ilo_port\u0027,"},{"line_number":33,"context_line":"               default\u003d443,"},{"line_number":34,"context_line":"               help\u003d\u0027Default port to be used for iLO operations\u0027),"},{"line_number":35,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FHC4%3D","line":32,"updated":"2014-02-17 04:53:58.000000000","message":"I think we can rename to \u0027ilo_port\u0027 without default, make sense?","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    cfg.IntOpt(\u0027default_ilo_timeout\u0027,"},{"line_number":30,"context_line":"               default\u003d60,"},{"line_number":31,"context_line":"               help\u003d\u0027Default timeout for iLO operations\u0027),"},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027default_ilo_port\u0027,"},{"line_number":33,"context_line":"               default\u003d443,"},{"line_number":34,"context_line":"               help\u003d\u0027Default port to be used for iLO operations\u0027),"},{"line_number":35,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BwXU%3D","line":32,"in_reply_to":"AAAAUX%2F%2FHC4%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":35,"context_line":"]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":"CONF.register_opts(opts, group\u003d\u0027ilo\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FHDI%3D","line":38,"updated":"2014-02-17 04:53:58.000000000","message":"If we involved new options, have to checkin our \u0027etc/ironic/ironic.conf.sample\u0027 which is auto-generated by the script [1]:\n\n[1] ./tools/config/generate_sample.sh","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":35,"context_line":"]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"CONF \u003d cfg.CONF"},{"line_number":38,"context_line":"CONF.register_opts(opts, group\u003d\u0027ilo\u0027)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BwXA%3D","line":38,"in_reply_to":"AAAAUX%2F%2FHDI%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        \u0027password\u0027: password,"},{"line_number":76,"context_line":"        \u0027port\u0027: port,"},{"line_number":77,"context_line":"        \u0027timeout\u0027: timeout,"},{"line_number":78,"context_line":"        \u0027uuid\u0027: node.get(\u0027uuid\u0027)"},{"line_number":79,"context_line":"    }"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FHCY%3D","line":78,"updated":"2014-02-17 04:53:58.000000000","message":"Confusing why we need node uuid here, I dont think it is  IloDriver specific, can you help to explain?\n\nBTW, accessing uuid directly - node.uuid.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        \u0027password\u0027: password,"},{"line_number":76,"context_line":"        \u0027port\u0027: port,"},{"line_number":77,"context_line":"        \u0027timeout\u0027: timeout,"},{"line_number":78,"context_line":"        \u0027uuid\u0027: node.get(\u0027uuid\u0027)"},{"line_number":79,"context_line":"    }"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B5JI%3D","line":78,"in_reply_to":"AAAAUX%2F%2FHCY%3D","updated":"2014-02-24 10:33:34.000000000","message":"Yes, this is not required. Will remove it.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"class IloOperationError(exception.IronicException):"},{"line_number":127,"context_line":"    message \u003d \"iLo operation failed - %(msg)s \""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"class IloLicenseError(exception.IronicException):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FHBI%3D","line":127,"updated":"2014-02-17 04:53:58.000000000","message":"i18n is required for our message:\n\nmessage \u003d _(\"iLo operation failed, error: %(msg)s \")","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"class IloOperationError(exception.IronicException):"},{"line_number":127,"context_line":"    message \u003d \"iLo operation failed - %(msg)s \""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"class IloLicenseError(exception.IronicException):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B5I8%3D","line":127,"in_reply_to":"AAAAUX%2F%2FHBI%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"class IloLicenseError(exception.IronicException):"},{"line_number":131,"context_line":"    message \u003d \"%(msg)s\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FHA8%3D","line":131,"updated":"2014-02-17 04:53:58.000000000","message":"i18n is required for our message:\n\nmessage \u003d _(\"Invalid iLo License, error: %(msg)s \")","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"class IloLicenseError(exception.IronicException):"},{"line_number":131,"context_line":"    message \u003d \"%(msg)s\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B5I4%3D","line":131,"in_reply_to":"AAAAUX%2F%2FHA8%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"8043001934e63426623b89251f1d67120d1bcf71","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fv2A%3D","line":1,"updated":"2014-02-25 00:51:35.000000000","message":"please remove vim header.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9f1ff6bbb16e11196766b5ee85393ef1d3a00f83","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from ironic.common import exception"},{"line_number":25,"context_line":"from ironic.drivers.modules import ribcl_ilo"},{"line_number":26,"context_line":"from ironic.openstack.common.gettextutils import _"},{"line_number":27,"context_line":"from ironic.openstack.common import log as logging"},{"line_number":28,"context_line":"from oslo.config import cfg"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvX0%3D","line":26,"updated":"2014-02-25 01:47:14.000000000","message":"You don\u0027t need to \"import _\" -- this is done automatically in ironic/cmd/__init__.py","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bf069df329e726e499fdf12c1bde38f73c7c3675","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from ironic.common import exception"},{"line_number":25,"context_line":"from ironic.drivers.modules import ribcl_ilo"},{"line_number":26,"context_line":"from ironic.openstack.common.gettextutils import _"},{"line_number":27,"context_line":"from ironic.openstack.common import log as logging"},{"line_number":28,"context_line":"from oslo.config import cfg"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fssk%3D","line":26,"in_reply_to":"AAAAU3%2F%2FvX0%3D","updated":"2014-02-25 10:16:32.000000000","message":"Done","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"8043001934e63426623b89251f1d67120d1bcf71","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    raise IloLicenseError(msg\u003derror_msg)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class IloOperationError(exception.IronicException):"},{"line_number":128,"context_line":"    message \u003d _(\"iLO operation failed, error: %(msg)s \")"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fv1I%3D","line":127,"updated":"2014-02-25 00:51:35.000000000","message":"I think this should go in: https://github.com/openstack/ironic/blob/master/ironic/common/exception.py","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bf069df329e726e499fdf12c1bde38f73c7c3675","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    raise IloLicenseError(msg\u003derror_msg)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"class IloOperationError(exception.IronicException):"},{"line_number":128,"context_line":"    message \u003d _(\"iLO operation failed, error: %(msg)s \")"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fssc%3D","line":127,"in_reply_to":"AAAAU3%2F%2Fv1I%3D","updated":"2014-02-25 10:16:32.000000000","message":"Done","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"8043001934e63426623b89251f1d67120d1bcf71","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    message \u003d _(\"iLO operation failed, error: %(msg)s \")"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"class IloLicenseError(exception.IronicException):"},{"line_number":132,"context_line":"    message \u003d _(\"Invalid iLO license, error: %(msg)s\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fv1E%3D","line":131,"updated":"2014-02-25 00:51:35.000000000","message":"ditto.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bf069df329e726e499fdf12c1bde38f73c7c3675","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    message \u003d _(\"iLO operation failed, error: %(msg)s \")"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"class IloLicenseError(exception.IronicException):"},{"line_number":132,"context_line":"    message \u003d _(\"Invalid iLO license, error: %(msg)s\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FssY%3D","line":131,"in_reply_to":"AAAAU3%2F%2Fv1E%3D","updated":"2014-02-25 10:16:32.000000000","message":"Done","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"}],"ironic/drivers/modules/ilo_deploy.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"import scp"},{"line_number":38,"context_line":"import shutil"},{"line_number":39,"context_line":"import stat"},{"line_number":40,"context_line":"import tempfile"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"opts \u003d ["}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FGtA%3D","line":40,"updated":"2014-02-17 04:53:58.000000000","message":"Please follow the import order and put space line between these groups:\n\n\u003cstdlib\u003e\n\n\u003cthird party\u003e\n\n\u003cthis code tree\u003e","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":37,"context_line":"import scp"},{"line_number":38,"context_line":"import shutil"},{"line_number":39,"context_line":"import stat"},{"line_number":40,"context_line":"import tempfile"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"opts \u003d ["}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B5Io%3D","line":40,"in_reply_to":"AAAAUX%2F%2FGtA%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"opts \u003d ["},{"line_number":44,"context_line":"    cfg.IntOpt(\u0027ilo_deploy_poll_retry\u0027,"},{"line_number":45,"context_line":"               default\u003d20,"},{"line_number":46,"context_line":"               help\u003d\u0027Number of polls to perform to detect completion \u0027"},{"line_number":47,"context_line":"                    \u0027of deploy operation before timeout is confirmed.\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FHAQ%3D","line":44,"updated":"2014-02-17 04:53:58.000000000","message":"We have defined new \u0027ilo\u0027 options group, so suggest to remove \u0027ilo\u0027 in our option names:\n\n    cfg.IntOpt(\u0027deploy_poll_retry\u0027,","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"opts \u003d ["},{"line_number":44,"context_line":"    cfg.IntOpt(\u0027ilo_deploy_poll_retry\u0027,"},{"line_number":45,"context_line":"               default\u003d20,"},{"line_number":46,"context_line":"               help\u003d\u0027Number of polls to perform to detect completion \u0027"},{"line_number":47,"context_line":"                    \u0027of deploy operation before timeout is confirmed.\u0027),"},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027ilo_deploy_poll_wait\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FG%2Fk%3D","line":45,"updated":"2014-02-17 04:53:58.000000000","message":"Not sure if this 20 default value is experience or best practice? Just think this value is too big for retry times here.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"opts \u003d ["},{"line_number":44,"context_line":"    cfg.IntOpt(\u0027ilo_deploy_poll_retry\u0027,"},{"line_number":45,"context_line":"               default\u003d20,"},{"line_number":46,"context_line":"               help\u003d\u0027Number of polls to perform to detect completion \u0027"},{"line_number":47,"context_line":"                    \u0027of deploy operation before timeout is confirmed.\u0027),"},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027ilo_deploy_poll_wait\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B5IA%3D","line":45,"in_reply_to":"AAAAUX%2F%2FG%2Fk%3D","updated":"2014-02-24 10:33:34.000000000","message":"The poll_retry value is multiplied with poll_wait(just below) which makes it 20*3 \u003d 60 minutes to complete the deployment.  This is just a recommendation.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":45,"context_line":"               default\u003d20,"},{"line_number":46,"context_line":"               help\u003d\u0027Number of polls to perform to detect completion \u0027"},{"line_number":47,"context_line":"                    \u0027of deploy operation before timeout is confirmed.\u0027),"},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027ilo_deploy_poll_wait\u0027,"},{"line_number":49,"context_line":"               default\u003d180,"},{"line_number":50,"context_line":"               help\u003d\u0027Time interval in seconds between each poll for \u0027"},{"line_number":51,"context_line":"                    \u0027the deploy operation.\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FHAM%3D","line":48,"updated":"2014-02-17 04:53:58.000000000","message":"ditto","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":45,"context_line":"               default\u003d20,"},{"line_number":46,"context_line":"               help\u003d\u0027Number of polls to perform to detect completion \u0027"},{"line_number":47,"context_line":"                    \u0027of deploy operation before timeout is confirmed.\u0027),"},{"line_number":48,"context_line":"    cfg.IntOpt(\u0027ilo_deploy_poll_wait\u0027,"},{"line_number":49,"context_line":"               default\u003d180,"},{"line_number":50,"context_line":"               help\u003d\u0027Time interval in seconds between each poll for \u0027"},{"line_number":51,"context_line":"                    \u0027the deploy operation.\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BwWo%3D","line":48,"in_reply_to":"AAAAUX%2F%2FHAM%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"               default\u003d180,"},{"line_number":50,"context_line":"               help\u003d\u0027Time interval in seconds between each poll for \u0027"},{"line_number":51,"context_line":"                    \u0027the deploy operation.\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027image_web_server\u0027,"},{"line_number":53,"context_line":"               help\u003d\u0027The web server where to upload temporary images\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027image_web_server_dir\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027The dir of the web server to upload temporary images\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FG%2FA%3D","line":52,"updated":"2014-02-17 04:53:58.000000000","message":"Confusing, is this a filesystem path or web URL configuration? And It is better that we provide a default value, and have a more clear help message for our user.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":49,"context_line":"               default\u003d180,"},{"line_number":50,"context_line":"               help\u003d\u0027Time interval in seconds between each poll for \u0027"},{"line_number":51,"context_line":"                    \u0027the deploy operation.\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027image_web_server\u0027,"},{"line_number":53,"context_line":"               help\u003d\u0027The web server where to upload temporary images\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027image_web_server_dir\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027The dir of the web server to upload temporary images\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BwV0%3D","line":52,"in_reply_to":"AAAAUX%2F%2FG%2FA%3D","updated":"2014-02-24 10:33:34.000000000","message":"This is the IP address or hostname of the web server where the OS images for vmedia deployments will be stored. So I think we cannot provide a default value for this. We will add it in the documentation as part of the configuration as a separate webserver will be required to be setup.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                    \u0027the deploy operation.\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027image_web_server\u0027,"},{"line_number":53,"context_line":"               help\u003d\u0027The web server where to upload temporary images\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027image_web_server_dir\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027The dir of the web server to upload temporary images\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027image_web_server_username\u0027,"},{"line_number":57,"context_line":"               help\u003d\u0027The username to copy images\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FG%2Bk%3D","line":54,"updated":"2014-02-17 04:53:58.000000000","message":"How about if we can provide a default value for this option?","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":51,"context_line":"                    \u0027the deploy operation.\u0027),"},{"line_number":52,"context_line":"    cfg.StrOpt(\u0027image_web_server\u0027,"},{"line_number":53,"context_line":"               help\u003d\u0027The web server where to upload temporary images\u0027),"},{"line_number":54,"context_line":"    cfg.StrOpt(\u0027image_web_server_dir\u0027,"},{"line_number":55,"context_line":"               help\u003d\u0027The dir of the web server to upload temporary images\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027image_web_server_username\u0027,"},{"line_number":57,"context_line":"               help\u003d\u0027The username to copy images\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BwVc%3D","line":54,"in_reply_to":"AAAAUX%2F%2FG%2Bk%3D","updated":"2014-02-24 10:33:34.000000000","message":"Even for this, I guess it is not possible to provide a default value as user can configure any directory to be used for the web server root.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    \"\"\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    error_msg \u003d \"iLO Advanced License is required for performing \" + \\"},{"line_number":76,"context_line":"                \"deployment using virtual media feature in iLO.\""},{"line_number":77,"context_line":"    ilo_common._check_for_license(node,"},{"line_number":78,"context_line":"                                  \u0027iLO Advanced License\u0027,"},{"line_number":79,"context_line":"                                  error_msg\u003derror_msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FG9c%3D","line":76,"updated":"2014-02-17 04:53:58.000000000","message":"i18n enablement is required (by adding \u0027_(\"\")\u0027 for any msg) here:\n\n error_msg \u003d _(\"iLO Advanced License is required for performing \" + \\\n      \"deployment using virtual media feature in iLO.\")","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":73,"context_line":"    \"\"\""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    error_msg \u003d \"iLO Advanced License is required for performing \" + \\"},{"line_number":76,"context_line":"                \"deployment using virtual media feature in iLO.\""},{"line_number":77,"context_line":"    ilo_common._check_for_license(node,"},{"line_number":78,"context_line":"                                  \u0027iLO Advanced License\u0027,"},{"line_number":79,"context_line":"                                  error_msg\u003derror_msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B5H0%3D","line":76,"in_reply_to":"AAAAUX%2F%2FG9c%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"8043001934e63426623b89251f1d67120d1bcf71","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fvzw%3D","line":1,"updated":"2014-02-25 00:51:35.000000000","message":"please remove.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9f1ff6bbb16e11196766b5ee85393ef1d3a00f83","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"opts \u003d ["},{"line_number":45,"context_line":"    cfg.IntOpt(\u0027deploy_poll_retry\u0027,"},{"line_number":46,"context_line":"               default\u003d20,"},{"line_number":47,"context_line":"               help\u003d\u0027Number of polls to perform to detect completion \u0027"},{"line_number":48,"context_line":"                    \u0027of deploy operation before timeout is confirmed.\u0027),"},{"line_number":49,"context_line":"    cfg.IntOpt(\u0027deploy_poll_wait\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvSE%3D","line":46,"updated":"2014-02-25 01:47:14.000000000","message":"20 * 160 \u003d 3600 \u003d 1 hour\n\nThis seems like a very long deploy timeout. For comparison, nova-baremetal\u0027s PXE driver default timeout is 20 minutes, and on an uncongested network, a deploy takes ~ 12 minutes (including two power cycles).","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9f1ff6bbb16e11196766b5ee85393ef1d3a00f83","unresolved":false,"context_lines":[{"line_number":50,"context_line":"               default\u003d180,"},{"line_number":51,"context_line":"               help\u003d\u0027Time interval in seconds between each poll for \u0027"},{"line_number":52,"context_line":"                    \u0027the deploy operation.\u0027),"},{"line_number":53,"context_line":"    cfg.StrOpt(\u0027image_web_server\u0027,"},{"line_number":54,"context_line":"               help\u003d\u0027The hostname or IP address of the web server where to \u0027"},{"line_number":55,"context_line":"                    \u0027upload temporary images.\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027image_web_server_dir\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvaQ%3D","line":53,"updated":"2014-02-25 01:47:14.000000000","message":"I see the external dependency on a webserver here -- is this part of iLO Chassis Manager, or something else?","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9f1ff6bbb16e11196766b5ee85393ef1d3a00f83","unresolved":false,"context_lines":[{"line_number":370,"context_line":"    return final_state"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"def _wait_for_deploy_complete(node):"},{"line_number":374,"context_line":"    \"\"\"Polls for the completion status of deployment on the given node.\"\"\""},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    state \u003d [None]"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvPA%3D","line":373,"updated":"2014-02-25 01:47:14.000000000","message":"This looks like the same pattern that was used in the Nova baremetal code. However, it\u0027s not suitable for use in Ironic.\n\nEach deploy() operation is started in a worker thread which maintains a lock on the node until that operation completes. So there are two problems with this implementation:\n\n1. no other operation will be possible on the node until the deploy completes. This includes aborting the deploy.\n2. no more than rpc_thread_pool_size deploys will be able to run in parallel per conductor, because each one will be consuming a worker thread just waiting for the deploy to complete.\n\nThe Ironic PXE driver uses a call-back from the deploy ramdisk to signal the PXE driver that it is finished. See _continue_deploy() here\nhttp://git.openstack.org/cgit/openstack/ironic/tree/ironic/drivers/modules/pxe.py#n678","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9f1ff6bbb16e11196766b5ee85393ef1d3a00f83","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        _parse_deploy_info(node)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":442,"context_line":"    def deploy(self, task, node):"},{"line_number":443,"context_line":"        \"\"\"Perform a deployment to a node."},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"        This method deploys the given image by attaching it as virtual"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvMY%3D","line":442,"updated":"2014-02-25 01:47:14.000000000","message":"There is no error handling here. Drivers should catch all exceptions from utilities they consume, and transform them to a subclass of IronicException. There are also specific exceptions already defined in ironic.common.exceptions for specific types of events, eg InstanceDeployFailure, ImageNotFound, etc.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9f1ff6bbb16e11196766b5ee85393ef1d3a00f83","unresolved":false,"context_lines":[{"line_number":472,"context_line":"        final_deploy_state \u003d _wait_for_deploy_complete(node)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        # Do the final cleanup tasks for the deploy."},{"line_number":475,"context_line":"        _deploy_complete(node, task.context)"},{"line_number":476,"context_line":""},{"line_number":477,"context_line":"        return final_deploy_state"},{"line_number":478,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvOk%3D","line":475,"updated":"2014-02-25 01:47:14.000000000","message":"This wait should not happen inside of deploy(). See my comment on L373","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"}],"ironic/drivers/modules/ilo_power.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ironic.drivers.modules import ilo_common"},{"line_number":27,"context_line":"from ironic.openstack.common import log as logging"},{"line_number":28,"context_line":"from ironic.openstack.common import loopingcall"},{"line_number":29,"context_line":"from oslo.config import cfg"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"opts \u003d ["},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027ilo_power_retry\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FGs0%3D","line":29,"updated":"2014-02-17 04:53:58.000000000","message":"Please follow the import order and put space line between these groups:\n\n\u003cstdlib\u003e\n\n\u003cthird party\u003e\n\n\u003cthis code tree\u003e","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ironic.drivers.modules import ilo_common"},{"line_number":27,"context_line":"from ironic.openstack.common import log as logging"},{"line_number":28,"context_line":"from ironic.openstack.common import loopingcall"},{"line_number":29,"context_line":"from oslo.config import cfg"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"opts \u003d ["},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027ilo_power_retry\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B5Hs%3D","line":29,"in_reply_to":"AAAAUX%2F%2FGs0%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from oslo.config import cfg"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"opts \u003d ["},{"line_number":32,"context_line":"    cfg.IntOpt(\u0027ilo_power_retry\u0027,"},{"line_number":33,"context_line":"               default\u003d6,"},{"line_number":34,"context_line":"               help\u003d\u0027Number of times a power operation needs to be retried\u0027),"},{"line_number":35,"context_line":"    cfg.IntOpt(\u0027ilo_power_wait\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FG84%3D","line":32,"updated":"2014-02-17 04:53:58.000000000","message":"ditto, can we remove \u0027ilo\u0027 from option name?","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    cfg.IntOpt(\u0027ilo_power_retry\u0027,"},{"line_number":33,"context_line":"               default\u003d6,"},{"line_number":34,"context_line":"               help\u003d\u0027Number of times a power operation needs to be retried\u0027),"},{"line_number":35,"context_line":"    cfg.IntOpt(\u0027ilo_power_wait\u0027,"},{"line_number":36,"context_line":"               default\u003d2,"},{"line_number":37,"context_line":"               help\u003d\u0027Amount of time in seconds to wait in between power \u0027"},{"line_number":38,"context_line":"                    \u0027operations\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FG80%3D","line":35,"updated":"2014-02-17 04:53:58.000000000","message":"ditto","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"8043001934e63426623b89251f1d67120d1bcf71","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"# Copyright 2014 Hewlett-Packard Development Company, L.P."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvoE%3D","line":1,"updated":"2014-02-25 00:51:35.000000000","message":"please remove.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"}],"ironic/drivers/modules/ribcl_ilo.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class LoginFailException(iLO_Error):"},{"line_number":44,"context_line":"    iLO_messages \u003d [\u0027User login name was not found\u0027,"},{"line_number":45,"context_line":"                    \u0027Login failed\u0027, \u0027Login credentials rejected\u0027]"},{"line_number":46,"context_line":"    iLO_status \u003d [0x005f, 0x000a]"},{"line_number":47,"context_line":"    pass"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FG8k%3D","line":45,"updated":"2014-02-17 04:53:58.000000000","message":"missing i18n enablement with _(\"\") here.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class LoginFailException(iLO_Error):"},{"line_number":44,"context_line":"    iLO_messages \u003d [\u0027User login name was not found\u0027,"},{"line_number":45,"context_line":"                    \u0027Login failed\u0027, \u0027Login credentials rejected\u0027]"},{"line_number":46,"context_line":"    iLO_status \u003d [0x005f, 0x000a]"},{"line_number":47,"context_line":"    pass"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B5HY%3D","line":45,"in_reply_to":"AAAAUX%2F%2FG8k%3D","updated":"2014-02-24 10:33:34.000000000","message":"These messages belong to the exceptions generated from our internal ribcl_ilo module.  The exceptions thrown are already caught in the ironic code and then i18n enablement is done there. So we might not need to do it again.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"8043001934e63426623b89251f1d67120d1bcf71","unresolved":false,"context_lines":[{"line_number":1,"context_line":" # vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":" # -*- encoding: utf-8 -*-"},{"line_number":3,"context_line":" #"},{"line_number":4,"context_line":" # Copyright 2014 Hewlett-Packard Development Company, L.P."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fvnc%3D","line":1,"updated":"2014-02-25 00:51:35.000000000","message":"please remove.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9f1ff6bbb16e11196766b5ee85393ef1d3a00f83","unresolved":false,"context_lines":[{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class iLO_Error(Exception):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, message, errorcode\u003dNone):"},{"line_number":40,"context_line":"        super(iLO_Error, self).__init__(message)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvKM%3D","line":37,"updated":"2014-02-25 01:47:14.000000000","message":"Any exception which might be raised and propagate out of the iLO driver should be defined in ironic.common.exception. Exceptions which are local only to this file can be defined here.\n\nIt looks like all three of the following exception classes are raised from this file and they should be (but are not) trapped in ilo_power or ilo_deploy, and converted to other IronicException classes there.\n\nIf you need specific exceptions to communicate different types of failures within the iLO driver, I would move all your internal exception classes to drivers/modules/ilo_exception.py, and then be sure that they are all trapped appropriately in your driver code and converted to exceptions defined in ironic/common/exception.py before being re-raised.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bf069df329e726e499fdf12c1bde38f73c7c3675","unresolved":false,"context_lines":[{"line_number":34,"context_line":"}"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class iLO_Error(Exception):"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, message, errorcode\u003dNone):"},{"line_number":40,"context_line":"        super(iLO_Error, self).__init__(message)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FspU%3D","line":37,"in_reply_to":"AAAAU3%2F%2FvKM%3D","updated":"2014-02-25 10:16:32.000000000","message":"Sure. We would like to keep a set of exception only for ribcl_ilo module outside of ironic.  In the next patch, we will make sure that any exception from ribcl_ilo module is caught in ilo_power and ilo_deploy modules.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9f1ff6bbb16e11196766b5ee85393ef1d3a00f83","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        super(InvalidInputException, self).__init__(message)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class iLO(object):"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def __init__(self, host, login, password, timeout\u003d60, port\u003d443):"},{"line_number":65,"context_line":"        self.host \u003d host"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvHY%3D","line":62,"updated":"2014-02-25 01:47:14.000000000","message":"At a minimum, please add a python doc string to this class so that the auto-generated documentation is not blank. Doc strings for all the public methods would be appreciated as well.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9f1ff6bbb16e11196766b5ee85393ef1d3a00f83","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class iLO(object):"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def __init__(self, host, login, password, timeout\u003d60, port\u003d443):"},{"line_number":65,"context_line":"        self.host \u003d host"},{"line_number":66,"context_line":"        self.login \u003d login"},{"line_number":67,"context_line":"        self.password \u003d password"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvIE%3D","line":64,"updated":"2014-02-25 01:47:14.000000000","message":"defaults here should be CONF options, not hard-coded #\u0027s","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bf069df329e726e499fdf12c1bde38f73c7c3675","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class iLO(object):"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def __init__(self, host, login, password, timeout\u003d60, port\u003d443):"},{"line_number":65,"context_line":"        self.host \u003d host"},{"line_number":66,"context_line":"        self.login \u003d login"},{"line_number":67,"context_line":"        self.password \u003d password"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FsoY%3D","line":64,"in_reply_to":"AAAAU3%2F%2FvBs%3D","updated":"2014-02-25 10:16:32.000000000","message":"This is already done in ilo_common._parse_driver_info() method where the timeout and port values are retrieved from the CONF. \n\nWe would like to keep the module ribcl_ilo independent of ironic framework. So just removed the defaults and let it pass from the ironic_common.py with the default values picked from the conf file.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"8b297a1331f438fe6c10bea2e5a5785f75397d36","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class iLO(object):"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def __init__(self, host, login, password, timeout\u003d60, port\u003d443):"},{"line_number":65,"context_line":"        self.host \u003d host"},{"line_number":66,"context_line":"        self.login \u003d login"},{"line_number":67,"context_line":"        self.password \u003d password"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvBs%3D","line":64,"in_reply_to":"AAAAU3%2F%2FvIE%3D","updated":"2014-02-25 01:59:07.000000000","message":"Correcting my own comment -- optional parameters like these should default to None, and then have code which sets them to the CONF default. Eg:\n\n  def __init__(self, host, login, password, timeout\u003dNone, port\u003dNone):\n    self.timeout \u003d timeout if timeout is not None else CONF.timeout\n    self.port \u003d port if port is not None else CONF.port\n\nA longer explanation of why this should be done is in this bug report: https://bugs.launchpad.net/ironic/+bug/1279774","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"9f1ff6bbb16e11196766b5ee85393ef1d3a00f83","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        return root"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _serialize_xml(self, root):"},{"line_number":114,"context_line":"        #"},{"line_number":115,"context_line":"        # It serializes the dynamic xml created and converts"},{"line_number":116,"context_line":"        # it to a string. This is done before sending the"},{"line_number":117,"context_line":"        # xml to the ILO."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2FvHI%3D","line":114,"updated":"2014-02-25 01:47:14.000000000","message":"If these comments were converted to python doc headers, they would be automatically added to the sphinx documentation.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"bf069df329e726e499fdf12c1bde38f73c7c3675","unresolved":false,"context_lines":[{"line_number":111,"context_line":"        return root"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    def _serialize_xml(self, root):"},{"line_number":114,"context_line":"        #"},{"line_number":115,"context_line":"        # It serializes the dynamic xml created and converts"},{"line_number":116,"context_line":"        # it to a string. This is done before sending the"},{"line_number":117,"context_line":"        # xml to the ILO."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAU3%2F%2Fsn4%3D","line":114,"in_reply_to":"AAAAU3%2F%2FvHI%3D","updated":"2014-02-25 10:16:32.000000000","message":"Sure. We will convert them to python doc headers.","commit_id":"b823abd3ecaf51c81dcb2526006af2e0b82b799d"}],"ironic/tests/drivers/test_ilo_common.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ironic.tests.conductor import utils as mgr_utils"},{"line_number":27,"context_line":"from ironic.tests.db import utils as db_utils"},{"line_number":28,"context_line":"import mock"},{"line_number":29,"context_line":"from oslo.config import cfg"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"INFO_DICT \u003d db_utils.get_test_ilo_info()"},{"line_number":32,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FGuQ%3D","line":29,"updated":"2014-02-17 04:53:58.000000000","message":"Please follow the import order and put space line between these groups:\n\n\u003cstdlib\u003e\n\n\u003cthird party\u003e\n\n\u003cthis code tree\u003e","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from ironic.tests.conductor import utils as mgr_utils"},{"line_number":27,"context_line":"from ironic.tests.db import utils as db_utils"},{"line_number":28,"context_line":"import mock"},{"line_number":29,"context_line":"from oslo.config import cfg"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"INFO_DICT \u003d db_utils.get_test_ilo_info()"},{"line_number":32,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B5G0%3D","line":29,"in_reply_to":"AAAAUX%2F%2FGuQ%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"}],"ironic/tests/drivers/test_ilo_deploy.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from ironic.tests.db import utils as db_utils"},{"line_number":31,"context_line":"import mock"},{"line_number":32,"context_line":"import os"},{"line_number":33,"context_line":"from oslo.config import cfg"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"INFO_DICT \u003d db_utils.get_test_ilo_info()"},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FGt0%3D","line":33,"updated":"2014-02-17 04:53:58.000000000","message":"Please follow the import order and put space line between these groups:\n\n\u003cstdlib\u003e\n\n\u003cthird party\u003e\n\n\u003cthis code tree\u003e","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from ironic.tests.db import utils as db_utils"},{"line_number":31,"context_line":"import mock"},{"line_number":32,"context_line":"import os"},{"line_number":33,"context_line":"from oslo.config import cfg"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"INFO_DICT \u003d db_utils.get_test_ilo_info()"},{"line_number":36,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BwaE%3D","line":33,"in_reply_to":"AAAAUX%2F%2FGt0%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        image_info \u003d ilo_deploy._generate_config_image(self.node, self.context)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        self.assertEqual(image_info[\u0027image_url\u0027], image_web_location)"},{"line_number":110,"context_line":"        self.assertEqual(args[0].call_count, 1)"},{"line_number":111,"context_line":"        self.assertEqual(args[1].call_count, 1)"},{"line_number":112,"context_line":"        self.assertEqual(args[2].call_count, 1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FGts%3D","line":109,"updated":"2014-02-17 04:53:58.000000000","message":"assertEqual should put the expected parameter first. This will make it easier to read the error when it fails. ditto for all other assertEqual, too.\n\nself.assertEqual(image_web_location, image_info[\u0027image_url\u0027])","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        image_info \u003d ilo_deploy._generate_config_image(self.node, self.context)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        self.assertEqual(image_info[\u0027image_url\u0027], image_web_location)"},{"line_number":110,"context_line":"        self.assertEqual(args[0].call_count, 1)"},{"line_number":111,"context_line":"        self.assertEqual(args[1].call_count, 1)"},{"line_number":112,"context_line":"        self.assertEqual(args[2].call_count, 1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BwaA%3D","line":109,"in_reply_to":"AAAAUX%2F%2FGts%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        image_info \u003d ilo_deploy._generate_config_image(self.node, self.context)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        self.assertEqual(image_info[\u0027image_url\u0027], image_web_location)"},{"line_number":110,"context_line":"        self.assertEqual(args[0].call_count, 1)"},{"line_number":111,"context_line":"        self.assertEqual(args[1].call_count, 1)"},{"line_number":112,"context_line":"        self.assertEqual(args[2].call_count, 1)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FGto%3D","line":110,"updated":"2014-02-17 04:53:58.000000000","message":"ditto","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        image_info \u003d ilo_deploy._generate_config_image(self.node, self.context)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        self.assertEqual(image_info[\u0027image_url\u0027], image_web_location)"},{"line_number":110,"context_line":"        self.assertEqual(args[0].call_count, 1)"},{"line_number":111,"context_line":"        self.assertEqual(args[1].call_count, 1)"},{"line_number":112,"context_line":"        self.assertEqual(args[2].call_count, 1)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BwZ8%3D","line":110,"in_reply_to":"AAAAUX%2F%2FGto%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"}],"ironic/tests/drivers/test_ilo_power.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from ironic.tests.conductor import utils as mgr_utils"},{"line_number":29,"context_line":"from ironic.tests.db import utils as db_utils"},{"line_number":30,"context_line":"import mock"},{"line_number":31,"context_line":"from oslo.config import cfg"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"INFO_DICT \u003d db_utils.get_test_ilo_info()"},{"line_number":34,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FGtg%3D","line":31,"updated":"2014-02-17 04:53:58.000000000","message":"Please follow the import order and put space line between these groups:\n\n\u003cstdlib\u003e\n\n\u003cthird party\u003e\n\n\u003cthis code tree\u003e","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":28,"context_line":"from ironic.tests.conductor import utils as mgr_utils"},{"line_number":29,"context_line":"from ironic.tests.db import utils as db_utils"},{"line_number":30,"context_line":"import mock"},{"line_number":31,"context_line":"from oslo.config import cfg"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"INFO_DICT \u003d db_utils.get_test_ilo_info()"},{"line_number":34,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BwZ4%3D","line":31,"in_reply_to":"AAAAUX%2F%2FGtg%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            ilo_power._get_power_state(self.node), states.POWER_OFF)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        instance.get_host_power_status.return_value \u003d \u0027ERROR\u0027"},{"line_number":65,"context_line":"        self.assertEqual(ilo_power._get_power_state(self.node), states.ERROR)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.ribcl_ilo.iLO\u0027)"},{"line_number":68,"context_line":"    def test__set_power_state(self, ilomock):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2FGtc%3D","line":65,"updated":"2014-02-17 04:53:58.000000000","message":"assertEqual should put the expected parameter first. This will make it easier to read the error when it fails. ditto for all other assertEqual, too.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            ilo_power._get_power_state(self.node), states.POWER_OFF)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        instance.get_host_power_status.return_value \u003d \u0027ERROR\u0027"},{"line_number":65,"context_line":"        self.assertEqual(ilo_power._get_power_state(self.node), states.ERROR)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.ribcl_ilo.iLO\u0027)"},{"line_number":68,"context_line":"    def test__set_power_state(self, ilomock):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BwZ0%3D","line":65,"in_reply_to":"AAAAUX%2F%2FGtc%3D","updated":"2014-02-24 10:33:34.000000000","message":"Done","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"}],"requirements.txt":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"2bc8331cb8871aff111230fc1153b9d30c5d4d7c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"sqlalchemy-migrate\u003e\u003d0.8.2"},{"line_number":14,"context_line":"netaddr\u003e\u003d0.7.6"},{"line_number":15,"context_line":"paramiko\u003e\u003d1.9.0"},{"line_number":16,"context_line":"scp\u003e\u003d0.7.1"},{"line_number":17,"context_line":"iso8601\u003e\u003d0.1.8"},{"line_number":18,"context_line":"python-neutronclient\u003e\u003d2.3.3,\u003c3"},{"line_number":19,"context_line":"python-glanceclient\u003e\u003d0.9.0"}],"source_content_type":"text/plain","patch_set":2,"id":"AAAAUX%2F%2FHGI%3D","line":16,"updated":"2014-02-17 04:53:58.000000000","message":"Can not find this scp in our global requirements [1], so please ensure to add it to global requirements first.\n\n[1] https://github.com/openstack/requirements/blob/master/global-requirements.txt\n\nAnd if we have done already, please mark this as \u0027working in progress\u0027, and we will get back to review once the scp is merged into global requirements, thanks.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"41bdf6481b9cf8f5841e65d52fd4b6c292331abf","unresolved":false,"context_lines":[{"line_number":13,"context_line":"sqlalchemy-migrate\u003e\u003d0.8.2"},{"line_number":14,"context_line":"netaddr\u003e\u003d0.7.6"},{"line_number":15,"context_line":"paramiko\u003e\u003d1.9.0"},{"line_number":16,"context_line":"scp\u003e\u003d0.7.1"},{"line_number":17,"context_line":"iso8601\u003e\u003d0.1.8"},{"line_number":18,"context_line":"python-neutronclient\u003e\u003d2.3.3,\u003c3"},{"line_number":19,"context_line":"python-glanceclient\u003e\u003d0.9.0"}],"source_content_type":"text/plain","patch_set":2,"id":"AAAAUX%2F%2BwZg%3D","line":16,"in_reply_to":"AAAAUX%2F%2FHGI%3D","updated":"2014-02-24 10:33:34.000000000","message":"We are planning to use sftp instead of scp. sftp functionality is already in paramiko module. So we will abandon changes to this file.","commit_id":"3c98646ea2a90520687cfd1f043a9d02c8b96dc7"}]}
