)]}'
{"doc/source/drivers/cimc.rst":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"24d6faaefd627617f192d42cb1dd5deaeab39b4d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deploy the image and uses CIMC to do all management operations on the"},{"line_number":15,"context_line":"baremetal node (instead of using IPMI)."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"``agent_cimc`` driver uses IPA ramdisk (just like ``agent_ipmitool`` and"},{"line_number":18,"context_line":"``agent_ipminative`` drivers.) to deploy the image and uses CIMC to do all"},{"line_number":19,"context_line":"management operations on the baremetal node (instead of using IPMI)."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"da20952f_2050b9d3","line":17,"updated":"2015-09-04 08:41:53.000000000","message":"The pxe_* drivers can also use the IPA ramdisk [1], in fact we want it to be the default deploy ramdisk for all drivers.\n\n[1] https://blueprints.launchpad.net/ironic/+spec/ipa-as-default-ramdisk","commit_id":"1b6a7ed28a6a53e09f01a4d820f5a249d71ec303"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1483783518ac87ba33e358db25d2e36852e12f2a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"deploy the image and uses CIMC to do all management operations on the"},{"line_number":15,"context_line":"baremetal node (instead of using IPMI)."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"``agent_cimc`` driver uses IPA ramdisk (just like ``agent_ipmitool`` and"},{"line_number":18,"context_line":"``agent_ipminative`` drivers.) to deploy the image and uses CIMC to do all"},{"line_number":19,"context_line":"management operations on the baremetal node (instead of using IPMI)."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"da20952f_2ab17047","line":17,"in_reply_to":"da20952f_2050b9d3","updated":"2015-09-04 11:41:30.000000000","message":"Done","commit_id":"1b6a7ed28a6a53e09f01a4d820f5a249d71ec303"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":10,"context_line":"These drivers enable you to take advantage of CIMC by using the"},{"line_number":11,"context_line":"python SDK."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"``pxe_cimc`` driver uses PXE boot + iSCSI deploy (just like ``pxe_ipmitool``"},{"line_number":14,"context_line":"driver) to deploy the image and uses CIMC to do all management operations on"},{"line_number":15,"context_line":"the baremetal node (instead of using IPMI)."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_89094a86","line":13,"updated":"2015-09-08 08:56:05.000000000","message":"Let us call it iscsi_cimc, wdyt? I know it\u0027s not 100% consistent, but it\u0027s much clearer, as agent_cimc also uses PXE... people on IRC even suggested pxe_iscsi_cimc, and I tent to agree.","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":10,"context_line":"These drivers enable you to take advantage of CIMC by using the"},{"line_number":11,"context_line":"python SDK."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"``pxe_cimc`` driver uses PXE boot + iSCSI deploy (just like ``pxe_ipmitool``"},{"line_number":14,"context_line":"driver) to deploy the image and uses CIMC to do all management operations on"},{"line_number":15,"context_line":"the baremetal node (instead of using IPMI)."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_f97bf7f2","line":13,"in_reply_to":"da20952f_89094a86","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"``agent_cimc`` driver uses PXE boot + Agent deploy (just like ``agent_ipmitool``"},{"line_number":18,"context_line":"and ``agent_ipminative`` drivers.) to deploy the image and uses CIMC to do all"},{"line_number":19,"context_line":"management operations on the baremetal node (instead of using IPMI)."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Prerequisites"},{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_a90c4e93","line":19,"updated":"2015-09-08 08:56:05.000000000","message":"That\u0027s the common problem we make, and you\u0027re not to blame it, but we have to start fixing things :) I don\u0027t think any person who is not an Ironic developer understands the difference between \"iSCSI deploy\" and \"Agent deploy\". Could you elaborate here, or link to some place where we explain it?","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"``agent_cimc`` driver uses PXE boot + Agent deploy (just like ``agent_ipmitool``"},{"line_number":18,"context_line":"and ``agent_ipminative`` drivers.) to deploy the image and uses CIMC to do all"},{"line_number":19,"context_line":"management operations on the baremetal node (instead of using IPMI)."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Prerequisites"},{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_9980bbc1","line":19,"in_reply_to":"da20952f_a90c4e93","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"  Install the ``ImcSdk`` module on the Ironic conductor node. Required version is"},{"line_number":28,"context_line":"  0.7.1. Download the tar.gz from: https://communities.cisco.com/docs/DOC-56257"},{"line_number":29,"context_line":"  Unpack it and then run::"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"   $ python setup.py install"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_492812e2","line":29,"updated":"2015-09-08 08:56:05.000000000","message":"Please PyPI it ASAP","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"2. Restart the Ironic conductor service::"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    service ironic-conductor restart"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Registering Standalone UCS node in Ironic"},{"line_number":51,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_69239605","line":48,"updated":"2015-09-08 08:56:05.000000000","message":"could you also add a variant for RHEL/CentOS/Fedora:\n\n sudo systemctl restart openstack-ironic-conductor","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"2. Restart the Ironic conductor service::"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    service ironic-conductor restart"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Registering Standalone UCS node in Ironic"},{"line_number":51,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_dcb381eb","line":48,"in_reply_to":"da20952f_69239605","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    service ironic-conductor restart"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Registering Standalone UCS node in Ironic"},{"line_number":51,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":52,"context_line":"Nodes configured for CIMC driver should have the ``driver`` property set to"},{"line_number":53,"context_line":"``pxe_cimc/agent_cimc``.  The following configuration values are also required in"},{"line_number":54,"context_line":"``driver_info``:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_091e9aba","line":51,"updated":"2015-09-08 08:56:05.000000000","message":"nit: add more ~~~ please :)","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    service ironic-conductor restart"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Registering Standalone UCS node in Ironic"},{"line_number":51,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":52,"context_line":"Nodes configured for CIMC driver should have the ``driver`` property set to"},{"line_number":53,"context_line":"``pxe_cimc/agent_cimc``.  The following configuration values are also required in"},{"line_number":54,"context_line":"``driver_info``:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_1307a482","line":51,"in_reply_to":"da20952f_091e9aba","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":50,"context_line":"Registering Standalone UCS node in Ironic"},{"line_number":51,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":52,"context_line":"Nodes configured for CIMC driver should have the ``driver`` property set to"},{"line_number":53,"context_line":"``pxe_cimc/agent_cimc``.  The following configuration values are also required in"},{"line_number":54,"context_line":"``driver_info``:"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"- ``cimc_address``: IP address or hostname for CIMC"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_29191ed1","line":53,"updated":"2015-09-08 08:56:05.000000000","message":"set to ``pxe_cimc`` or ``agent_cimc``. Otherwise looks like ``pxe_cimc/agent_cimc`` is a valid value on its own.","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":50,"context_line":"Registering Standalone UCS node in Ironic"},{"line_number":51,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":52,"context_line":"Nodes configured for CIMC driver should have the ``driver`` property set to"},{"line_number":53,"context_line":"``pxe_cimc/agent_cimc``.  The following configuration values are also required in"},{"line_number":54,"context_line":"``driver_info``:"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"- ``cimc_address``: IP address or hostname for CIMC"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_b3fb587b","line":53,"in_reply_to":"da20952f_29191ed1","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"  Associate port with the node created::"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    ironic port-create -n $NODE -a \u003cMAC_address_of_Ucs_server\u0027s_NIC\u003e"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_c97ae2f0","line":72,"updated":"2015-09-08 08:56:05.000000000","message":"please link to \"Enrolling nodes\" section of the main guide for details. There\u0027s much more fun there, including different API versins.","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"  Associate port with the node created::"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    ironic port-create -n $NODE -a \u003cMAC_address_of_Ucs_server\u0027s_NIC\u003e"}],"source_content_type":"text/x-rst","patch_set":6,"id":"da20952f_73f62092","line":72,"in_reply_to":"da20952f_c97ae2f0","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d52bbf099c8d868e9bee2588910e7c2331c02103","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"  Install the ``ImcSdk`` module on the Ironic conductor node. Required version is"},{"line_number":30,"context_line":"  0.7.1. Download the tar.gz from: https://communities.cisco.com/docs/DOC-56257"},{"line_number":31,"context_line":"  Unpack it and then run::"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"   $ python setup.py install"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ba15a1d1_332e74a5","line":31,"updated":"2015-09-18 16:23:16.000000000","message":"nit:\n\nLooks like this should be a enumerated list, otherwise the it will be all in the same line and will look weird, e.g\n\n\". Download the tar.gz from: https://communities.cisco.com/docs/DOC-56257 Unpack it and then run:\"\n\nWhat about having a small section about installing it the library?\n\n Install the ``ÌmcSdk`` module\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n .. note::\n     The ``ImcSdk`` module should be installed on the Ironic conductor node. And the required version is 0.7.1 \n\n #. Download the tar.gz from: https://communities.cisco.com/docs/DOC-56257\n\n #. Unpack it::\n\n    tar xvf \u003ctar file\u003e\n\n #. Install it::\n\n    python setup.py install","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"c501e03c7a3dbb6896dc75e25c2ffd773bbf8cde","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"  Install the ``ImcSdk`` module on the Ironic conductor node. Required version is"},{"line_number":30,"context_line":"  0.7.1. Download the tar.gz from: https://communities.cisco.com/docs/DOC-56257"},{"line_number":31,"context_line":"  Unpack it and then run::"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"   $ python setup.py install"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"ba15a1d1_7e003034","line":31,"in_reply_to":"ba15a1d1_332e74a5","updated":"2015-09-18 17:59:46.000000000","message":"Great suggestion!","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"91d31743c8d5ffaec3a4ac1f70c46cb73537fed5","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"   or for RHEL/CentOS/Fedora::"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"      $ systemctl restart openstack-ironic-conductor"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Registering Standalone UCS node in Ironic"},{"line_number":59,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ba15a1d1_b26cc2d0","line":56,"updated":"2015-09-18 15:13:12.000000000","message":"nit: would be nice to add \"sudo\" to both commands","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"c501e03c7a3dbb6896dc75e25c2ffd773bbf8cde","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"   or for RHEL/CentOS/Fedora::"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"      $ systemctl restart openstack-ironic-conductor"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Registering Standalone UCS node in Ironic"},{"line_number":59,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":9,"id":"ba15a1d1_5e98cc77","line":56,"in_reply_to":"ba15a1d1_b26cc2d0","updated":"2015-09-18 17:59:46.000000000","message":"Done","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"006c9d3bf943291496b5c8b26f08a8566160dcc5","unresolved":false,"context_lines":[{"line_number":32,"context_line":".. note::"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"  Install the ``ImcSdk`` module on the Ironic conductor node. Required version is"},{"line_number":35,"context_line":"  0.7.1."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"#. Download the tar.gz from: https://communities.cisco.com/docs/DOC-56257"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba15a1d1_0a518062","line":35,"updated":"2015-09-21 15:07:17.000000000","message":"Does this have any prerequisites to install? I wouldn\u0027t be shocked if lxml was required, for example. :)","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"006c9d3bf943291496b5c8b26f08a8566160dcc5","unresolved":false,"context_lines":[{"line_number":43,"context_line":"#. Install it::"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"   $ cd ImcSdk-0.7.1"},{"line_number":46,"context_line":"   $ python setup.py install"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Tested Platforms"},{"line_number":49,"context_line":"~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba15a1d1_4fd54ab7","line":46,"updated":"2015-09-21 15:07:17.000000000","message":"sudo?","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"006c9d3bf943291496b5c8b26f08a8566160dcc5","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"Configuring and Enabling the driver"},{"line_number":55,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":56,"context_line":"1. Add ``pxe_cimc`` and/or ``agent_cimc`` to the list of ``enabled_drivers`` in"},{"line_number":57,"context_line":"   ``/etc/ironic/ironic.conf``.  For example::"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    enabled_drivers \u003d pxe_ipmitool,pxe_cimc,agent_cimc"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba15a1d1_4f5eaa77","line":56,"updated":"2015-09-21 15:07:17.000000000","message":"pxe_iscsi_cimc\npxe_agent_cimc","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"006c9d3bf943291496b5c8b26f08a8566160dcc5","unresolved":false,"context_lines":[{"line_number":56,"context_line":"1. Add ``pxe_cimc`` and/or ``agent_cimc`` to the list of ``enabled_drivers`` in"},{"line_number":57,"context_line":"   ``/etc/ironic/ironic.conf``.  For example::"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    enabled_drivers \u003d pxe_ipmitool,pxe_cimc,agent_cimc"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"2. Restart the Ironic conductor service:"},{"line_number":62,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba15a1d1_cf4abaac","line":59,"updated":"2015-09-21 15:07:17.000000000","message":"Ditto","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"006c9d3bf943291496b5c8b26f08a8566160dcc5","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"      $ sudo systemctl restart openstack-ironic-conductor"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Registering Standalone UCS node in Ironic"},{"line_number":72,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":73,"context_line":"Nodes configured for CIMC driver should have the ``driver`` property set to"},{"line_number":74,"context_line":"``pxe_iscsi_cimc`` or ``pxe_agent_cimc``.  The following configuration values are"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba15a1d1_4fec6a8f","line":71,"updated":"2015-09-21 15:07:17.000000000","message":"What does \"standalone\" mean here?","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"3e09c32706c16b06883d1cae2d7c14e0212501d8","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"      $ sudo systemctl restart openstack-ironic-conductor"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Registering Standalone UCS node in Ironic"},{"line_number":72,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"},{"line_number":73,"context_line":"Nodes configured for CIMC driver should have the ``driver`` property set to"},{"line_number":74,"context_line":"``pxe_iscsi_cimc`` or ``pxe_agent_cimc``.  The following configuration values are"}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba15a1d1_3bf84d7c","line":71,"in_reply_to":"ba15a1d1_4fec6a8f","updated":"2015-09-21 17:47:10.000000000","message":"Done","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"006c9d3bf943291496b5c8b26f08a8566160dcc5","unresolved":false,"context_lines":[{"line_number":78,"context_line":"- ``cimc_username``: CIMC login user name"},{"line_number":79,"context_line":"- ``cimc_password``: CIMC login password for the above CIMC user."},{"line_number":80,"context_line":"- ``deploy_kernel``: The Glance UUID of the deployment kernel."},{"line_number":81,"context_line":"- ``deploy_ramdisk``: The Glance UUID of the deployment ramdisk."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"The following sequence of commands can be used to enroll a UCS Standalone node."},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba15a1d1_af050615","line":81,"updated":"2015-09-21 15:07:17.000000000","message":"We also support non-glance references here; not sure how we should mention it though. Maybe see what the rest of our docs do?","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"3e09c32706c16b06883d1cae2d7c14e0212501d8","unresolved":false,"context_lines":[{"line_number":78,"context_line":"- ``cimc_username``: CIMC login user name"},{"line_number":79,"context_line":"- ``cimc_password``: CIMC login password for the above CIMC user."},{"line_number":80,"context_line":"- ``deploy_kernel``: The Glance UUID of the deployment kernel."},{"line_number":81,"context_line":"- ``deploy_ramdisk``: The Glance UUID of the deployment ramdisk."},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"The following sequence of commands can be used to enroll a UCS Standalone node."},{"line_number":84,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba15a1d1_3bdb6def","line":81,"in_reply_to":"ba15a1d1_af050615","updated":"2015-09-21 17:47:10.000000000","message":"Other driver docs also refer directly to Glance here but I\u0027ve updated mine so its a bit more generic with an \"e.g. a Glance UUID\"","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"006c9d3bf943291496b5c8b26f08a8566160dcc5","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"  Create Node::"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    ironic node-create -d \u003cpxe_cimc/agent_cimc\u003e -i cimc_address\u003d\u003cCIMC hostname/ip-address\u003e -i cimc_username\u003d\u003ccimc_username\u003e -i cimc_password\u003d\u003ccimc_password\u003e -i deploy_kernel\u003d\u003cglance_uuid_of_deploy_kernel\u003e -i deploy_ramdisk\u003d\u003cglance_uuid_of_deploy_ramdisk\u003e -p cpus\u003d\u003cnumber_of_cpus\u003e -p memory_mb\u003d\u003cmemory_size_in_MB\u003e -p local_gb\u003d\u003clocal_disk_size_in_GB\u003e -p cpu_arch\u003d\u003ccpu_arch\u003e"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"  The above command \u0027ironic node-create\u0027 will return UUID of the node, which is the value of $NODE in the following command."},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba15a1d1_4fa30a50","line":87,"updated":"2015-09-21 15:07:17.000000000","message":"Again, pxe_iscsi_cimc and agent_iscsi_cimc.\n\nAlso probably the address part should say \"hostname OR ip address\" to avoid confusion.","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"3e09c32706c16b06883d1cae2d7c14e0212501d8","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"  Create Node::"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    ironic node-create -d \u003cpxe_cimc/agent_cimc\u003e -i cimc_address\u003d\u003cCIMC hostname/ip-address\u003e -i cimc_username\u003d\u003ccimc_username\u003e -i cimc_password\u003d\u003ccimc_password\u003e -i deploy_kernel\u003d\u003cglance_uuid_of_deploy_kernel\u003e -i deploy_ramdisk\u003d\u003cglance_uuid_of_deploy_ramdisk\u003e -p cpus\u003d\u003cnumber_of_cpus\u003e -p memory_mb\u003d\u003cmemory_size_in_MB\u003e -p local_gb\u003d\u003clocal_disk_size_in_GB\u003e -p cpu_arch\u003d\u003ccpu_arch\u003e"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"  The above command \u0027ironic node-create\u0027 will return UUID of the node, which is the value of $NODE in the following command."},{"line_number":90,"context_line":""}],"source_content_type":"text/x-rst","patch_set":10,"id":"ba15a1d1_3b892dcb","line":87,"in_reply_to":"ba15a1d1_4fa30a50","updated":"2015-09-21 17:47:10.000000000","message":"Done","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"}],"driver-requirements.txt":[{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# The CIMC driver uses the Cisco IMC SDK, which is avaliable from"},{"line_number":31,"context_line":"# https://communities.cisco.com/docs/DOC-37174"},{"line_number":32,"context_line":"ImcSdk\u003d\u003d0.7.1"}],"source_content_type":"text/plain","patch_set":3,"id":"da20952f_af866963","line":32,"updated":"2015-09-02 04:17:42.000000000","message":"should we make it part of PyPI?","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# The CIMC driver uses the Cisco IMC SDK, which is avaliable from"},{"line_number":31,"context_line":"# https://communities.cisco.com/docs/DOC-37174"},{"line_number":32,"context_line":"ImcSdk\u003d\u003d0.7.1"}],"source_content_type":"text/plain","patch_set":3,"id":"da20952f_26691a8c","line":32,"in_reply_to":"da20952f_af866963","updated":"2015-09-02 13:02:34.000000000","message":"I agree, this is something that we should aim to do in the future for the ImcSdk, but its not a blocker for this patch because the SDK is publicly available to download from the link listed.","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b2c608a2c2d9e77f19a42dc72770320a7fd5229d","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# The CIMC driver uses the Cisco IMC SDK, which is avaliable from"},{"line_number":31,"context_line":"# https://communities.cisco.com/docs/DOC-37174"},{"line_number":32,"context_line":"ImcSdk\u003d\u003d0.7.1"}],"source_content_type":"text/plain","patch_set":3,"id":"da20952f_6cafec7d","line":32,"in_reply_to":"da20952f_af866963","updated":"2015-09-02 12:46:17.000000000","message":"That would be a good thing but we can\u0027t require it. Other drivers such as iBoot also have no pypi","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# The CIMC driver uses the Cisco IMC SDK, which is avaliable from"},{"line_number":31,"context_line":"# https://communities.cisco.com/docs/DOC-37174"},{"line_number":32,"context_line":"ImcSdk\u003d\u003d0.7.1"}],"source_content_type":"text/plain","patch_set":6,"id":"da20952f_e9cb261c","line":32,"updated":"2015-09-08 08:56:05.000000000","message":"this isn\u0027t installable from PyPI (for now?), so please don\u0027t put it like that here. Just leave a comment with link.","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# The CIMC driver uses the Cisco IMC SDK, which is avaliable from"},{"line_number":31,"context_line":"# https://communities.cisco.com/docs/DOC-37174"},{"line_number":32,"context_line":"ImcSdk\u003d\u003d0.7.1"}],"source_content_type":"text/plain","patch_set":6,"id":"da20952f_4d9a5970","line":32,"in_reply_to":"da20952f_e9cb261c","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"006c9d3bf943291496b5c8b26f08a8566160dcc5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"# http://docs.openstack.org/developer/ironic/drivers/vbox.html"},{"line_number":28,"context_line":"pyremotevbox\u003e\u003d0.5.0"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# The CIMC drivers use the Cisco IMC SDK version 0.7.1, which is avaliable from"},{"line_number":31,"context_line":"# https://communities.cisco.com/docs/DOC-37174"}],"source_content_type":"text/plain","patch_set":10,"id":"ba15a1d1_cf72ba49","line":30,"updated":"2015-09-21 15:07:17.000000000","message":"Nit: s/avaliable/available","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"3e09c32706c16b06883d1cae2d7c14e0212501d8","unresolved":false,"context_lines":[{"line_number":27,"context_line":"# http://docs.openstack.org/developer/ironic/drivers/vbox.html"},{"line_number":28,"context_line":"pyremotevbox\u003e\u003d0.5.0"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# The CIMC drivers use the Cisco IMC SDK version 0.7.1, which is avaliable from"},{"line_number":31,"context_line":"# https://communities.cisco.com/docs/DOC-37174"}],"source_content_type":"text/plain","patch_set":10,"id":"ba15a1d1_9b487989","line":30,"in_reply_to":"ba15a1d1_cf72ba49","updated":"2015-09-21 17:47:10.000000000","message":"Done","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"}],"ironic/common/exception.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"006c9d3bf943291496b5c8b26f08a8566160dcc5","unresolved":false,"context_lines":[{"line_number":603,"context_line":""},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"class CIMCException(IronicException):"},{"line_number":606,"context_line":"    message \u003d _(\"Cisco IMC exception occured for node %(node)s: %(error)s\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_2aa48406","line":606,"updated":"2015-09-21 15:07:17.000000000","message":"Nit: s/occured/occurred/","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"3e09c32706c16b06883d1cae2d7c14e0212501d8","unresolved":false,"context_lines":[{"line_number":603,"context_line":""},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"class CIMCException(IronicException):"},{"line_number":606,"context_line":"    message \u003d _(\"Cisco IMC exception occured for node %(node)s: %(error)s\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_db3591f7","line":606,"in_reply_to":"ba15a1d1_2aa48406","updated":"2015-09-21 17:47:10.000000000","message":"Done","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"}],"ironic/drivers/agent.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"class AgentAndCIMCDriver(base.BaseDriver):"},{"line_number":143,"context_line":"    \"\"\"Agent + Cisco UCSM driver."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    This driver implements the `core` functionality, combining"},{"line_number":146,"context_line":"    :class:ironic.drivers.modules.ucs.power.Power for power"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_89806ac0","line":143,"updated":"2015-09-08 08:56:05.000000000","message":"s/UCSM/CIMC/ to avoid confusion?","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"class AgentAndCIMCDriver(base.BaseDriver):"},{"line_number":143,"context_line":"    \"\"\"Agent + Cisco UCSM driver."},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    This driver implements the `core` functionality, combining"},{"line_number":146,"context_line":"    :class:ironic.drivers.modules.ucs.power.Power for power"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_8dc5d13e","line":143,"in_reply_to":"da20952f_89806ac0","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"}],"ironic/drivers/fake.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    \"\"\"Fake UCS driver.\"\"\""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def __init__(self):"},{"line_number":277,"context_line":"        if not importutils.try_import(\u0027ImcSdk\u0027):"},{"line_number":278,"context_line":"            raise exception.DriverLoadError("},{"line_number":279,"context_line":"                driver\u003dself.__class__.__name__,"},{"line_number":280,"context_line":"                reason\u003d_(\"Unable to import ImcSdk library\"))"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_388ace64","line":277,"updated":"2015-09-01 14:07:58.000000000","message":"This library should be added to driver-requirements.txt","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":274,"context_line":"    \"\"\"Fake UCS driver.\"\"\""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def __init__(self):"},{"line_number":277,"context_line":"        if not importutils.try_import(\u0027ImcSdk\u0027):"},{"line_number":278,"context_line":"            raise exception.DriverLoadError("},{"line_number":279,"context_line":"                driver\u003dself.__class__.__name__,"},{"line_number":280,"context_line":"                reason\u003d_(\"Unable to import ImcSdk library\"))"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_9f109b5b","line":277,"in_reply_to":"da20952f_388ace64","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":271,"context_line":""},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"class FakeCIMCDriver(base.BaseDriver):"},{"line_number":274,"context_line":"    \"\"\"Fake UCS driver.\"\"\""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def __init__(self):"},{"line_number":277,"context_line":"        if not importutils.try_import(\u0027ImcSdk\u0027):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_e97d66e7","line":274,"updated":"2015-09-08 08:56:05.000000000","message":"s/UCS/CIMC/","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":271,"context_line":""},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"class FakeCIMCDriver(base.BaseDriver):"},{"line_number":274,"context_line":"    \"\"\"Fake UCS driver.\"\"\""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    def __init__(self):"},{"line_number":277,"context_line":"        if not importutils.try_import(\u0027ImcSdk\u0027):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_ade455e0","line":274,"in_reply_to":"da20952f_e97d66e7","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"}],"ironic/drivers/modules/cimc/common.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    handle \u003d CIMC_HANDLES.get(info[\u0027cimc_address\u0027])"},{"line_number":59,"context_line":"    if handle is None:"},{"line_number":60,"context_line":"        LOG.debug(\"Handle for %s doesn\u0027t exist,\""},{"line_number":61,"context_line":"                  \"creating one\" % info[\u0027cimc_address\u0027])"},{"line_number":62,"context_line":"        handle \u003d imcsdk.ImcHandle()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        handle.login(info[\u0027cimc_address\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_d89712ea","line":61,"updated":"2015-09-01 14:07:58.000000000","message":"Maybe better to use node uuid instead of address for logging?","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    handle \u003d CIMC_HANDLES.get(info[\u0027cimc_address\u0027])"},{"line_number":59,"context_line":"    if handle is None:"},{"line_number":60,"context_line":"        LOG.debug(\"Handle for %s doesn\u0027t exist,\""},{"line_number":61,"context_line":"                  \"creating one\" % info[\u0027cimc_address\u0027])"},{"line_number":62,"context_line":"        handle \u003d imcsdk.ImcHandle()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        handle.login(info[\u0027cimc_address\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_7f08272e","line":61,"in_reply_to":"da20952f_d89712ea","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"58b6b4d0831ab64b6902fb4f987a682231ad315f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":13,"context_line":"# limitations under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from contextlib import contextmanager"},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from oslo_utils import importutils"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_174682bf","line":15,"updated":"2015-09-02 11:29:16.000000000","message":"This is system library, should be in a separate group","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":13,"context_line":"# limitations under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from contextlib import contextmanager"},{"line_number":16,"context_line":"from oslo_log import log as logging"},{"line_number":17,"context_line":"from oslo_utils import importutils"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_3d960595","line":15,"in_reply_to":"da20952f_174682bf","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"@contextmanager"},{"line_number":55,"context_line":"def cimc_handle(task):"},{"line_number":56,"context_line":"    info \u003d parse_driver_info(task.node)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    handle \u003d CIMC_HANDLES.get(info[\u0027cimc_address\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_4459b48d","line":55,"updated":"2015-09-02 04:17:42.000000000","message":"missing docstring?","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"@contextmanager"},{"line_number":55,"context_line":"def cimc_handle(task):"},{"line_number":56,"context_line":"    info \u003d parse_driver_info(task.node)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    handle \u003d CIMC_HANDLES.get(info[\u0027cimc_address\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_c9dcef1a","line":55,"in_reply_to":"da20952f_4459b48d","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b2c608a2c2d9e77f19a42dc72770320a7fd5229d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    handle \u003d CIMC_HANDLES.get(info[\u0027cimc_address\u0027])"},{"line_number":59,"context_line":"    if handle is None:"},{"line_number":60,"context_line":"        LOG.debug(\"Handle for %s doesn\u0027t exist,\""},{"line_number":61,"context_line":"                  \"creating one\" % task.node.uuid)"},{"line_number":62,"context_line":"        handle \u003d imcsdk.ImcHandle()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        handle.login(info[\u0027cimc_address\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_8ceb60b0","line":61,"updated":"2015-09-02 12:46:17.000000000","message":"s/ %/, /\n\nInterpolation","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    handle \u003d CIMC_HANDLES.get(info[\u0027cimc_address\u0027])"},{"line_number":59,"context_line":"    if handle is None:"},{"line_number":60,"context_line":"        LOG.debug(\"Handle for %s doesn\u0027t exist,\""},{"line_number":61,"context_line":"                  \"creating one\" % task.node.uuid)"},{"line_number":62,"context_line":"        handle \u003d imcsdk.ImcHandle()"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        handle.login(info[\u0027cimc_address\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_ef8f6e73","line":61,"in_reply_to":"da20952f_8ceb60b0","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b2c608a2c2d9e77f19a42dc72770320a7fd5229d","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        handle.login(info[\u0027cimc_address\u0027],"},{"line_number":65,"context_line":"                     info[\u0027cimc_username\u0027],"},{"line_number":66,"context_line":"                     info[\u0027cimc_password\u0027],"},{"line_number":67,"context_line":"                     auto_refresh\u003dimcsdk.YesOrNo.TRUE)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        CIMC_HANDLES[info[\u0027cimc_address\u0027]] \u003d handle"},{"line_number":70,"context_line":"    yield handle"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_8c1040aa","line":67,"updated":"2015-09-02 12:46:17.000000000","message":"(nothing to do here)\n\nJust found it funny, \"YesOrNo.True\". I\u0027m confused.","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        handle.login(info[\u0027cimc_address\u0027],"},{"line_number":65,"context_line":"                     info[\u0027cimc_username\u0027],"},{"line_number":66,"context_line":"                     info[\u0027cimc_password\u0027],"},{"line_number":67,"context_line":"                     auto_refresh\u003dimcsdk.YesOrNo.TRUE)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        CIMC_HANDLES[info[\u0027cimc_address\u0027]] \u003d handle"},{"line_number":70,"context_line":"    yield handle"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_2fdd6670","line":67,"in_reply_to":"da20952f_8c1040aa","updated":"2015-09-02 13:02:34.000000000","message":"I agree its a weird thing in this SDK...","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"1057c5139ba8ee9e852004d25266d98a1aae5ec1","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \"\"\"Parses and creates Cisco driver info"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    :param node: An Ironic node object."},{"line_number":41,"context_line":"    :returns: dictonary that contains node.driver_info parameter/values."},{"line_number":42,"context_line":"    :raises: MissingParameterValue if any required parameters are missing."},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_b1bf665f","line":41,"updated":"2015-09-03 14:18:01.000000000","message":"s/dictonary/dictionary/","commit_id":"bce38fe816b2c115450666fa08c00cb8a5a2709d"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"15d61ae5e41f81bba5f7410c02a94455fe0a109d","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \"\"\"Parses and creates Cisco driver info"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    :param node: An Ironic node object."},{"line_number":41,"context_line":"    :returns: dictonary that contains node.driver_info parameter/values."},{"line_number":42,"context_line":"    :raises: MissingParameterValue if any required parameters are missing."},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_5712750a","line":41,"in_reply_to":"da20952f_b1bf665f","updated":"2015-09-03 16:36:37.000000000","message":"Done","commit_id":"bce38fe816b2c115450666fa08c00cb8a5a2709d"},{"author":{"_account_id":13997,"name":"SHIGEMATSU Mitsuhiro","email":"shigematsu.mitsuhiro@lab.ntt.co.jp","username":"pshige"},"change_message_id":"1057c5139ba8ee9e852004d25266d98a1aae5ec1","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"@contextmanager"},{"line_number":56,"context_line":"def cimc_handle(task):"},{"line_number":57,"context_line":"    \"\"\"Context manager for creating/retreving a CIMC handle"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    CIMC handles take a long time to login, so instead of logging in and"},{"line_number":60,"context_line":"    logging out a handle for every context that needs a handle, they are"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_f1a5de46","line":57,"updated":"2015-09-03 14:18:01.000000000","message":"s/retreving/retrieving/","commit_id":"bce38fe816b2c115450666fa08c00cb8a5a2709d"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"15d61ae5e41f81bba5f7410c02a94455fe0a109d","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"@contextmanager"},{"line_number":56,"context_line":"def cimc_handle(task):"},{"line_number":57,"context_line":"    \"\"\"Context manager for creating/retreving a CIMC handle"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    CIMC handles take a long time to login, so instead of logging in and"},{"line_number":60,"context_line":"    logging out a handle for every context that needs a handle, they are"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_17f5ddc9","line":57,"in_reply_to":"da20952f_f1a5de46","updated":"2015-09-03 16:36:37.000000000","message":"Done","commit_id":"bce38fe816b2c115450666fa08c00cb8a5a2709d"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"2ca7af17125bf9a93d13cec31d6cca742d7f75a4","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    CIMC handles take a long time to login, so instead of logging in and"},{"line_number":60,"context_line":"    logging out a handle for every context that needs a handle, they are"},{"line_number":61,"context_line":"    cached in the CIMC_HANDLES variable, and returned as required. The"},{"line_number":62,"context_line":"    handle supports a keep alive to ensure that it does not automatically"},{"line_number":63,"context_line":"    get logged out after a certain amount of time."},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_96fe0b04","line":61,"updated":"2015-09-02 14:27:34.000000000","message":"There is a problem, only one way for cleaning this cache is conductor restart. The handle will use keep alive even if node deleted for example.","commit_id":"bce38fe816b2c115450666fa08c00cb8a5a2709d"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"16851df3f694979a37da452bc20729193fe14eaf","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    CIMC handles take a long time to login, so instead of logging in and"},{"line_number":60,"context_line":"    logging out a handle for every context that needs a handle, they are"},{"line_number":61,"context_line":"    cached in the CIMC_HANDLES variable, and returned as required. The"},{"line_number":62,"context_line":"    handle supports a keep alive to ensure that it does not automatically"},{"line_number":63,"context_line":"    get logged out after a certain amount of time."},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_1ee8927b","line":61,"in_reply_to":"da20952f_0af5b0c9","updated":"2015-09-03 17:50:22.000000000","message":"OK, but this is not critical IMO, you can leave TODO comment if there will be problems with new code.","commit_id":"bce38fe816b2c115450666fa08c00cb8a5a2709d"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"15d61ae5e41f81bba5f7410c02a94455fe0a109d","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    CIMC handles take a long time to login, so instead of logging in and"},{"line_number":60,"context_line":"    logging out a handle for every context that needs a handle, they are"},{"line_number":61,"context_line":"    cached in the CIMC_HANDLES variable, and returned as required. The"},{"line_number":62,"context_line":"    handle supports a keep alive to ensure that it does not automatically"},{"line_number":63,"context_line":"    get logged out after a certain amount of time."},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_0af5b0c9","line":61,"in_reply_to":"da20952f_96fe0b04","updated":"2015-09-03 16:36:37.000000000","message":"I\u0027ve tried to address this in the latest patch, WDYT?","commit_id":"bce38fe816b2c115450666fa08c00cb8a5a2709d"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"95183b7732234e0ecf3e8b9edba10a4e19ecddf6","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    return info"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def cimc_handle_cleaner():"},{"line_number":62,"context_line":"    \"\"\"Cleans up CIMC_HANDLE cache periodically."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    When a node is removed from ironic its CIMC handle should be logged out"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_0c2851e1","line":61,"updated":"2015-09-04 08:28:59.000000000","message":"We have driver periodic task decorator, detail: http://docs.openstack.org/developer/ironic/dev/architecture.html","commit_id":"1b6a7ed28a6a53e09f01a4d820f5a249d71ec303"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"24d6faaefd627617f192d42cb1dd5deaeab39b4d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    return info"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def cimc_handle_cleaner():"},{"line_number":62,"context_line":"    \"\"\"Cleans up CIMC_HANDLE cache periodically."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    When a node is removed from ironic its CIMC handle should be logged out"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_206759b8","line":61,"in_reply_to":"da20952f_0c2851e1","updated":"2015-09-04 08:41:53.000000000","message":"+1","commit_id":"1b6a7ed28a6a53e09f01a4d820f5a249d71ec303"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1483783518ac87ba33e358db25d2e36852e12f2a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    return info"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def cimc_handle_cleaner():"},{"line_number":62,"context_line":"    \"\"\"Cleans up CIMC_HANDLE cache periodically."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    When a node is removed from ironic its CIMC handle should be logged out"}],"source_content_type":"text/x-python","patch_set":5,"id":"da20952f_34223b53","line":61,"in_reply_to":"da20952f_206759b8","updated":"2015-09-04 11:41:30.000000000","message":"Done, I hadn\u0027t realized that this could be used outside of an actual driver class. TIL.","commit_id":"1b6a7ed28a6a53e09f01a4d820f5a249d71ec303"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"a8464c05233a3bb3f77cd847e5147a47568b59ef","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                  \"creating one\", task.node.uuid)"},{"line_number":103,"context_line":"        handle \u003d imcsdk.ImcHandle()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        handle.login(info[\u0027cimc_address\u0027],"},{"line_number":106,"context_line":"                     info[\u0027cimc_username\u0027],"},{"line_number":107,"context_line":"                     info[\u0027cimc_password\u0027],"},{"line_number":108,"context_line":"                     auto_refresh\u003dimcsdk.YesOrNo.TRUE)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_3c187d75","line":105,"updated":"2015-09-08 09:25:14.000000000","message":"If user changes credentials for a node cached handle with old credentials will be used. User should recreate a node for change credential. Does handle support a method for validate login status (send keep alive immediately for example)?","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                  \"creating one\", task.node.uuid)"},{"line_number":103,"context_line":"        handle \u003d imcsdk.ImcHandle()"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        handle.login(info[\u0027cimc_address\u0027],"},{"line_number":106,"context_line":"                     info[\u0027cimc_username\u0027],"},{"line_number":107,"context_line":"                     info[\u0027cimc_password\u0027],"},{"line_number":108,"context_line":"                     auto_refresh\u003dimcsdk.YesOrNo.TRUE)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_489a4770","line":105,"in_reply_to":"da20952f_3c187d75","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d75914636795434ef279312f80a5bd9b5cec8854","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    exist."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    :param task: The current task object."},{"line_number":95,"context_line":"    :yields: A CIMC Handle for the node in the task."},{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":"    info \u003d parse_driver_info(task.node)"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_d7621816","line":95,"updated":"2015-09-10 10:37:49.000000000","message":"Raises imcsdk.ImcException now, better convert to CIMCException.","commit_id":"5fec69e5d7bfb41f38b633abfc990e823f5d6fd7"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"b9b38cd9ffbd583672c0fd58b614e6d98201d201","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    exist."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    :param task: The current task object."},{"line_number":95,"context_line":"    :yields: A CIMC Handle for the node in the task."},{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":"    info \u003d parse_driver_info(task.node)"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_ff484eb5","line":95,"in_reply_to":"da20952f_d7621816","updated":"2015-09-10 12:40:12.000000000","message":"Done","commit_id":"5fec69e5d7bfb41f38b633abfc990e823f5d6fd7"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d75914636795434ef279312f80a5bd9b5cec8854","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                handle.logout()"},{"line_number":106,"context_line":"            except imcsdk.ImcException:"},{"line_number":107,"context_line":"                pass"},{"line_number":108,"context_line":"            handle.login(info[\u0027cimc_address\u0027],"},{"line_number":109,"context_line":"                         info[\u0027cimc_username\u0027],"},{"line_number":110,"context_line":"                         info[\u0027cimc_password\u0027],"},{"line_number":111,"context_line":"                         auto_refresh\u003dimcsdk.YesOrNo.TRUE)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_d7ed388f","line":108,"updated":"2015-09-10 10:37:49.000000000","message":"Please convert exception from here to CIMCException. And makes sense add debug logging for this case like l113.","commit_id":"5fec69e5d7bfb41f38b633abfc990e823f5d6fd7"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"b9b38cd9ffbd583672c0fd58b614e6d98201d201","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                handle.logout()"},{"line_number":106,"context_line":"            except imcsdk.ImcException:"},{"line_number":107,"context_line":"                pass"},{"line_number":108,"context_line":"            handle.login(info[\u0027cimc_address\u0027],"},{"line_number":109,"context_line":"                         info[\u0027cimc_username\u0027],"},{"line_number":110,"context_line":"                         info[\u0027cimc_password\u0027],"},{"line_number":111,"context_line":"                         auto_refresh\u003dimcsdk.YesOrNo.TRUE)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_bfc97627","line":108,"in_reply_to":"da20952f_d7ed388f","updated":"2015-09-10 12:40:12.000000000","message":"Done","commit_id":"5fec69e5d7bfb41f38b633abfc990e823f5d6fd7"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d75914636795434ef279312f80a5bd9b5cec8854","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                  \"creating one\", task.node.uuid)"},{"line_number":115,"context_line":"        handle \u003d imcsdk.ImcHandle()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        handle.login(info[\u0027cimc_address\u0027],"},{"line_number":118,"context_line":"                     info[\u0027cimc_username\u0027],"},{"line_number":119,"context_line":"                     info[\u0027cimc_password\u0027],"},{"line_number":120,"context_line":"                     auto_refresh\u003dimcsdk.YesOrNo.TRUE)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_77fd4c3a","line":117,"updated":"2015-09-10 10:37:49.000000000","message":"ditto","commit_id":"5fec69e5d7bfb41f38b633abfc990e823f5d6fd7"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"b9b38cd9ffbd583672c0fd58b614e6d98201d201","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                  \"creating one\", task.node.uuid)"},{"line_number":115,"context_line":"        handle \u003d imcsdk.ImcHandle()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        handle.login(info[\u0027cimc_address\u0027],"},{"line_number":118,"context_line":"                     info[\u0027cimc_username\u0027],"},{"line_number":119,"context_line":"                     info[\u0027cimc_password\u0027],"},{"line_number":120,"context_line":"                     auto_refresh\u003dimcsdk.YesOrNo.TRUE)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_7fd3ded5","line":117,"in_reply_to":"da20952f_77fd4c3a","updated":"2015-09-10 12:40:12.000000000","message":"Done","commit_id":"5fec69e5d7bfb41f38b633abfc990e823f5d6fd7"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d52bbf099c8d868e9bee2588910e7c2331c02103","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    return info"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"@base.driver_periodic_task(spacing\u003d600)"},{"line_number":60,"context_line":"def cimc_handle_cleaner():"},{"line_number":61,"context_line":"    \"\"\"Cleans up CIMC_HANDLE cache periodically."},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_b88023f8","line":59,"updated":"2015-09-18 16:23:16.000000000","message":"nit: would be good to make it configurable","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"91d31743c8d5ffaec3a4ac1f70c46cb73537fed5","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"@base.driver_periodic_task(spacing\u003d600)"},{"line_number":60,"context_line":"def cimc_handle_cleaner():"},{"line_number":61,"context_line":"    \"\"\"Cleans up CIMC_HANDLE cache periodically."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    When a node is removed from ironic its CIMC handle should be logged out"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_f2eb1a11","line":60,"updated":"2015-09-18 15:13:12.000000000","message":"does it really works for you? IIRC it accepts some arguments: https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/inspector.py#L124-L126\n\nand then your don\u0027t need to create a context","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"91d31743c8d5ffaec3a4ac1f70c46cb73537fed5","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    admin_context \u003d context.RequestContext(\u0027admin\u0027, \u0027admin\u0027, is_admin\u003dTrue)"},{"line_number":70,"context_line":"    for key in CIMC_HANDLES:"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            node.Node.get_by_uuid(admin_context, key)"},{"line_number":73,"context_line":"        except exception.NodeNotFound:"},{"line_number":74,"context_line":"            try:"},{"line_number":75,"context_line":"                CIMC_HANDLES[key].logout()"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_f239daa4","line":72,"updated":"2015-09-18 15:13:12.000000000","message":"I wonder if it gives a big load on the database. won\u0027t it be easy to expire handles after some time? also, is it worth doing at all? you\u0027re trading access to CIMC for access to database...\n\nand finally, are these handles green-thread-safe?\n\nI would suggest dropping handle caching for now, and get back to it after a thorough check","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"c501e03c7a3dbb6896dc75e25c2ffd773bbf8cde","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    admin_context \u003d context.RequestContext(\u0027admin\u0027, \u0027admin\u0027, is_admin\u003dTrue)"},{"line_number":70,"context_line":"    for key in CIMC_HANDLES:"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            node.Node.get_by_uuid(admin_context, key)"},{"line_number":73,"context_line":"        except exception.NodeNotFound:"},{"line_number":74,"context_line":"            try:"},{"line_number":75,"context_line":"                CIMC_HANDLES[key].logout()"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_85e5b709","line":72,"in_reply_to":"ba15a1d1_93c8a056","updated":"2015-09-18 17:59:46.000000000","message":"Not sure of the green thread safety of the handles so I\u0027m removing the caching until I can find out some more info on that front.","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"c501e03c7a3dbb6896dc75e25c2ffd773bbf8cde","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    admin_context \u003d context.RequestContext(\u0027admin\u0027, \u0027admin\u0027, is_admin\u003dTrue)"},{"line_number":70,"context_line":"    for key in CIMC_HANDLES:"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            node.Node.get_by_uuid(admin_context, key)"},{"line_number":73,"context_line":"        except exception.NodeNotFound:"},{"line_number":74,"context_line":"            try:"},{"line_number":75,"context_line":"                CIMC_HANDLES[key].logout()"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_45147fe7","line":72,"in_reply_to":"ba15a1d1_f239daa4","updated":"2015-09-18 17:59:46.000000000","message":"Done","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d52bbf099c8d868e9bee2588910e7c2331c02103","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    admin_context \u003d context.RequestContext(\u0027admin\u0027, \u0027admin\u0027, is_admin\u003dTrue)"},{"line_number":70,"context_line":"    for key in CIMC_HANDLES:"},{"line_number":71,"context_line":"        try:"},{"line_number":72,"context_line":"            node.Node.get_by_uuid(admin_context, key)"},{"line_number":73,"context_line":"        except exception.NodeNotFound:"},{"line_number":74,"context_line":"            try:"},{"line_number":75,"context_line":"                CIMC_HANDLES[key].logout()"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_93c8a056","line":72,"in_reply_to":"ba15a1d1_f239daa4","updated":"2015-09-18 16:23:16.000000000","message":"Yeah, what you can do is to add a timestamp when the handle is created/used (you can do it in the cimc_handle() method). So this periodic task will just check the timestamps and if a handle is not being used within a certain period of time it removes it from the cache.","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"91d31743c8d5ffaec3a4ac1f70c46cb73537fed5","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                CIMC_HANDLES[key].logout()"},{"line_number":76,"context_line":"            except imcsdk.ImcException:"},{"line_number":77,"context_line":"                pass"},{"line_number":78,"context_line":"            del CIMC_HANDLES[key]"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"def handle_login(task, handle, info):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_b2c842a9","line":78,"updated":"2015-09-18 15:13:12.000000000","message":"you shouldn\u0027t modify a dict while iterating over it","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d52bbf099c8d868e9bee2588910e7c2331c02103","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                CIMC_HANDLES[key].logout()"},{"line_number":76,"context_line":"            except imcsdk.ImcException:"},{"line_number":77,"context_line":"                pass"},{"line_number":78,"context_line":"            del CIMC_HANDLES[key]"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"def handle_login(task, handle, info):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_18e34fda","line":78,"in_reply_to":"ba15a1d1_b2c842a9","updated":"2015-09-18 16:23:16.000000000","message":"++, this will give you a RunTimeError.\n\nYou may want to add the values to be delete to a separated list and remove it later","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"006c9d3bf943291496b5c8b26f08a8566160dcc5","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"@contextmanager"},{"line_number":73,"context_line":"def cimc_handle(task):"},{"line_number":74,"context_line":"    \"\"\"Context manager for creating a CIMC handle and logging into it"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    :param task: The current task object."},{"line_number":77,"context_line":"    :raises: CIMCException if login fails"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_6ad27c36","line":74,"updated":"2015-09-21 15:07:17.000000000","message":"Nit: end this sentence with a period.","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"3e09c32706c16b06883d1cae2d7c14e0212501d8","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"@contextmanager"},{"line_number":73,"context_line":"def cimc_handle(task):"},{"line_number":74,"context_line":"    \"\"\"Context manager for creating a CIMC handle and logging into it"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    :param task: The current task object."},{"line_number":77,"context_line":"    :raises: CIMCException if login fails"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_9b163954","line":74,"in_reply_to":"ba15a1d1_6ad27c36","updated":"2015-09-21 17:47:10.000000000","message":"Done","commit_id":"d616d9a8e081d28592eaa51092a3b9f7b047e2e7"}],"ironic/drivers/modules/cimc/management.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Ironic Cisco UCSM interfaces."},{"line_number":17,"context_line":"Provides Management interface operations of servers managed by Cisco UCSM using"},{"line_number":18,"context_line":"PyUcs Sdk."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_d8339212","line":17,"updated":"2015-09-01 14:07:58.000000000","message":"by CIMC","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Ironic Cisco UCSM interfaces."},{"line_number":17,"context_line":"Provides Management interface operations of servers managed by Cisco UCSM using"},{"line_number":18,"context_line":"PyUcs Sdk."},{"line_number":19,"context_line":"\"\"\""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_226134d4","line":17,"in_reply_to":"da20952f_d8339212","updated":"2015-09-01 15:49:19.000000000","message":"Removed this comment","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            method.InHierarchical \u003d \"true\""},{"line_number":65,"context_line":"            method.ClassId \u003d \"lsbootDef\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"            resp \u003d handle.xml_query(method, imcsdk.WriteXmlOption.DIRTY)"},{"line_number":68,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027, None)"},{"line_number":69,"context_line":"            if error:"},{"line_number":70,"context_line":"                raise imcsdk.ImcException(error)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_ce4f4869","line":67,"updated":"2015-09-01 14:07:58.000000000","message":"Custom exception from xml_query() (if any) should be converted to Ironic exception.","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            method.InHierarchical \u003d \"true\""},{"line_number":65,"context_line":"            method.ClassId \u003d \"lsbootDef\""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"            resp \u003d handle.xml_query(method, imcsdk.WriteXmlOption.DIRTY)"},{"line_number":68,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027, None)"},{"line_number":69,"context_line":"            if error:"},{"line_number":70,"context_line":"                raise imcsdk.ImcException(error)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_b3e598dd","line":67,"in_reply_to":"da20952f_ce4f4869","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            resp \u003d handle.xml_query(method, imcsdk.WriteXmlOption.DIRTY)"},{"line_number":68,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027, None)"},{"line_number":69,"context_line":"            if error:"},{"line_number":70,"context_line":"                raise imcsdk.ImcException(error)"},{"line_number":71,"context_line":"            bootDevs \u003d resp.OutConfigs.child[0].child"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"            ordered \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_f379d993","line":70,"updated":"2015-09-01 14:07:58.000000000","message":"You should raise Ironic exception in the Ironic code.","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            resp \u003d handle.xml_query(method, imcsdk.WriteXmlOption.DIRTY)"},{"line_number":68,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027, None)"},{"line_number":69,"context_line":"            if error:"},{"line_number":70,"context_line":"                raise imcsdk.ImcException(error)"},{"line_number":71,"context_line":"            bootDevs \u003d resp.OutConfigs.child[0].child"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"            ordered \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_adae957f","line":70,"in_reply_to":"da20952f_f379d993","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            ordered \u003d {}"},{"line_number":74,"context_line":"            for dev in bootDevs:"},{"line_number":75,"context_line":"                try:"},{"line_number":76,"context_line":"                    ordered[int(dev.Order)] \u003d dev"},{"line_number":77,"context_line":"                except (ValueError, AttributeError):"},{"line_number":78,"context_line":"                    pass"},{"line_number":79,"context_line":"            first_device \u003d ordered.get(1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_731e290d","line":76,"updated":"2015-09-01 14:07:58.000000000","message":"Dict is not needed here, you can do break immediately if first found.","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            ordered \u003d {}"},{"line_number":74,"context_line":"            for dev in bootDevs:"},{"line_number":75,"context_line":"                try:"},{"line_number":76,"context_line":"                    ordered[int(dev.Order)] \u003d dev"},{"line_number":77,"context_line":"                except (ValueError, AttributeError):"},{"line_number":78,"context_line":"                    pass"},{"line_number":79,"context_line":"            first_device \u003d ordered.get(1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_4da6d954","line":76,"in_reply_to":"da20952f_731e290d","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            first_device \u003d ordered.get(1)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"            boot_device \u003d None"},{"line_number":82,"context_line":"            if first_device:"},{"line_number":83,"context_line":"                boot_device \u003d CIMC_TO_IRONIC_BOOT_DEVICE.get(first_device.Rn)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"            persistent \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_f3a6b9bf","line":82,"updated":"2015-09-01 14:07:58.000000000","message":"nit: boot_device \u003d CIMC_TO_IRONIC_BOOT_DEVICE.get(first_device.Rn) if first_device else else None","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            first_device \u003d ordered.get(1)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"            boot_device \u003d None"},{"line_number":82,"context_line":"            if first_device:"},{"line_number":83,"context_line":"                boot_device \u003d CIMC_TO_IRONIC_BOOT_DEVICE.get(first_device.Rn)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"            persistent \u003d True"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_483007e9","line":82,"in_reply_to":"da20952f_f3a6b9bf","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                boot_device \u003d CIMC_TO_IRONIC_BOOT_DEVICE.get(first_device.Rn)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"            persistent \u003d True"},{"line_number":86,"context_line":"            if boot_device is None:"},{"line_number":87,"context_line":"                persistent \u003d None"},{"line_number":88,"context_line":"            return {\u0027boot_device\u0027: boot_device, \u0027persistent\u0027: persistent}"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_f3e239d4","line":86,"updated":"2015-09-01 14:07:58.000000000","message":"nit: persistent \u003d True if boot_device else None","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                boot_device \u003d CIMC_TO_IRONIC_BOOT_DEVICE.get(first_device.Rn)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"            persistent \u003d True"},{"line_number":86,"context_line":"            if boot_device is None:"},{"line_number":87,"context_line":"                persistent \u003d None"},{"line_number":88,"context_line":"            return {\u0027boot_device\u0027: boot_device, \u0027persistent\u0027: persistent}"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_c87f3765","line":86,"in_reply_to":"da20952f_f3e239d4","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            config.add_child(bootMode)"},{"line_number":108,"context_line":"            method.InConfig \u003d config"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"            resp \u003d handle.xml_query(method, imcsdk.WriteXmlOption.DIRTY)"},{"line_number":111,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027)"},{"line_number":112,"context_line":"            if error:"},{"line_number":113,"context_line":"                raise imcsdk.ImcException(error)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_0e0220b4","line":110,"updated":"2015-09-01 14:07:58.000000000","message":"ditto l67","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            config.add_child(bootMode)"},{"line_number":108,"context_line":"            method.InConfig \u003d config"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"            resp \u003d handle.xml_query(method, imcsdk.WriteXmlOption.DIRTY)"},{"line_number":111,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027)"},{"line_number":112,"context_line":"            if error:"},{"line_number":113,"context_line":"                raise imcsdk.ImcException(error)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_73d060f8","line":110,"in_reply_to":"da20952f_0e0220b4","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            resp \u003d handle.xml_query(method, imcsdk.WriteXmlOption.DIRTY)"},{"line_number":111,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027)"},{"line_number":112,"context_line":"            if error:"},{"line_number":113,"context_line":"                raise imcsdk.ImcException(error)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def get_sensors_data(self, task):"},{"line_number":116,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_73d949f2","line":113,"updated":"2015-09-01 14:07:58.000000000","message":"ditto l70","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            resp \u003d handle.xml_query(method, imcsdk.WriteXmlOption.DIRTY)"},{"line_number":111,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027)"},{"line_number":112,"context_line":"            if error:"},{"line_number":113,"context_line":"                raise imcsdk.ImcException(error)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def get_sensors_data(self, task):"},{"line_number":116,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_53519cd7","line":113,"in_reply_to":"da20952f_73d949f2","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def get_properties(self):"},{"line_number":46,"context_line":"        return common.COMMON_PROPERTIES"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def validate(self, task):"},{"line_number":49,"context_line":"        common.parse_driver_info(task.node)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_supported_boot_devices(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_c4e62444","line":48,"updated":"2015-09-02 04:17:42.000000000","message":"missing doc strings?","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def get_properties(self):"},{"line_number":46,"context_line":"        return common.COMMON_PROPERTIES"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def validate(self, task):"},{"line_number":49,"context_line":"        common.parse_driver_info(task.node)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_supported_boot_devices(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_09066720","line":48,"in_reply_to":"da20952f_c4e62444","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def validate(self, task):"},{"line_number":49,"context_line":"        common.parse_driver_info(task.node)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_supported_boot_devices(self):"},{"line_number":52,"context_line":"        return list(CIMC_TO_IRONIC_BOOT_DEVICE.values())"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_boot_device(self, task):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_84cfccb2","line":51,"updated":"2015-09-02 04:17:42.000000000","message":"ditto","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    def validate(self, task):"},{"line_number":49,"context_line":"        common.parse_driver_info(task.node)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def get_supported_boot_devices(self):"},{"line_number":52,"context_line":"        return list(CIMC_TO_IRONIC_BOOT_DEVICE.values())"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_boot_device(self, task):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_4c022d40","line":51,"in_reply_to":"da20952f_84cfccb2","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def get_supported_boot_devices(self):"},{"line_number":52,"context_line":"        return list(CIMC_TO_IRONIC_BOOT_DEVICE.values())"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_boot_device(self, task):"},{"line_number":55,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":56,"context_line":"            method \u003d imcsdk.ImcCore.ExternalMethod(\"ConfigResolveClass\")"},{"line_number":57,"context_line":"            method.Cookie \u003d handle.cookie"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_84e82c18","line":54,"updated":"2015-09-02 04:17:42.000000000","message":"ditto","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":51,"context_line":"    def get_supported_boot_devices(self):"},{"line_number":52,"context_line":"        return list(CIMC_TO_IRONIC_BOOT_DEVICE.values())"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_boot_device(self, task):"},{"line_number":55,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":56,"context_line":"            method \u003d imcsdk.ImcCore.ExternalMethod(\"ConfigResolveClass\")"},{"line_number":57,"context_line":"            method.Cookie \u003d handle.cookie"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_6cfff134","line":54,"in_reply_to":"da20952f_84e82c18","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def get_boot_device(self, task):"},{"line_number":55,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":56,"context_line":"            method \u003d imcsdk.ImcCore.ExternalMethod(\"ConfigResolveClass\")"},{"line_number":57,"context_line":"            method.Cookie \u003d handle.cookie"},{"line_number":58,"context_line":"            method.InDn \u003d \"sys/rack-unit-1\""},{"line_number":59,"context_line":"            method.InHierarchical \u003d \"true\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_4425345a","line":56,"updated":"2015-09-02 04:17:42.000000000","message":"should we separate the IMC SDK code from Ironic. I got this comment when I submitted UCS drivers patch, to keep vendor specific library code/implementation out of trunk.","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"b2c608a2c2d9e77f19a42dc72770320a7fd5229d","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            boot_device \u003d (CIMC_TO_IRONIC_BOOT_DEVICE.get("},{"line_number":82,"context_line":"                first_device.Rn) if first_device else None)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"            persistent \u003d True if boot_device else None"},{"line_number":85,"context_line":"            return {\u0027boot_device\u0027: boot_device, \u0027persistent\u0027: persistent}"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def set_boot_device(self, task, device, persistent\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_eca9bc25","line":84,"updated":"2015-09-02 12:46:17.000000000","message":"else False, no?\n\nUsually persistent \u003d\u003d None is when you don\u0027t know whether it\u0027s persistent or not.","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":81,"context_line":"            boot_device \u003d (CIMC_TO_IRONIC_BOOT_DEVICE.get("},{"line_number":82,"context_line":"                first_device.Rn) if first_device else None)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"            persistent \u003d True if boot_device else None"},{"line_number":85,"context_line":"            return {\u0027boot_device\u0027: boot_device, \u0027persistent\u0027: persistent}"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def set_boot_device(self, task, device, persistent\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_6faa7e87","line":84,"in_reply_to":"da20952f_eca9bc25","updated":"2015-09-02 13:02:34.000000000","message":"In this driver right now all boot devices are persistent, but its possible that CIMC is configured with no boot devices, so what this is saying is, if a boot device exists then it is persistent, if it doesn\u0027t exist then persistent is None because a non-existant boot device can\u0027t be or not be persistent.","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            persistent \u003d True if boot_device else None"},{"line_number":85,"context_line":"            return {\u0027boot_device\u0027: boot_device, \u0027persistent\u0027: persistent}"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def set_boot_device(self, task, device, persistent\u003dFalse):"},{"line_number":88,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":89,"context_line":"            dev \u003d IRONIC_TO_CIMC_BOOT_DEVICE[device]"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_c48f0474","line":87,"updated":"2015-09-02 04:17:42.000000000","message":"ditto","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            persistent \u003d True if boot_device else None"},{"line_number":85,"context_line":"            return {\u0027boot_device\u0027: boot_device, \u0027persistent\u0027: persistent}"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def set_boot_device(self, task, device, persistent\u003dFalse):"},{"line_number":88,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":89,"context_line":"            dev \u003d IRONIC_TO_CIMC_BOOT_DEVICE[device]"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_0cfc353d","line":87,"in_reply_to":"da20952f_c48f0474","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":89,"context_line":"            dev \u003d IRONIC_TO_CIMC_BOOT_DEVICE[device]"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            method \u003d imcsdk.ImcCore.ExternalMethod(\"ConfigConfMo\")"},{"line_number":92,"context_line":"            method.Cookie \u003d handle.cookie"},{"line_number":93,"context_line":"            method.Dn \u003d \"sys/rack-unit-1/boot-policy\""},{"line_number":94,"context_line":"            method.InHierarchical \u003d \"true\""}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_c4194424","line":91,"updated":"2015-09-02 04:17:42.000000000","message":"ditto:56","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        all drivers support this."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        :param task: a task from TaskManager."},{"line_number":77,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":78,"context_line":"        :returns: a dictionary containing:"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"            :boot_device:"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_e9648649","line":77,"updated":"2015-09-08 08:56:05.000000000","message":"also CIMCException","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        all drivers support this."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        :param task: a task from TaskManager."},{"line_number":77,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":78,"context_line":"        :returns: a dictionary containing:"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"            :boot_device:"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_889e1f53","line":77,"in_reply_to":"da20952f_e9648649","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            try:"},{"line_number":96,"context_line":"                resp \u003d handle.xml_query(method, imcsdk.WriteXmlOption.DIRTY)"},{"line_number":97,"context_line":"            except imcsdk.ImcException as e:"},{"line_number":98,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":99,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027, None)"},{"line_number":100,"context_line":"            if error:"},{"line_number":101,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003derror)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_89570a59","line":98,"updated":"2015-09-08 08:56:05.000000000","message":"s/id/uuid/","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            try:"},{"line_number":96,"context_line":"                resp \u003d handle.xml_query(method, imcsdk.WriteXmlOption.DIRTY)"},{"line_number":97,"context_line":"            except imcsdk.ImcException as e:"},{"line_number":98,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":99,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027, None)"},{"line_number":100,"context_line":"            if error:"},{"line_number":101,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003derror)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_e8da3b1d","line":98,"in_reply_to":"da20952f_89570a59","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":99,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027, None)"},{"line_number":100,"context_line":"            if error:"},{"line_number":101,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003derror)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"            bootDevs \u003d resp.OutConfigs.child[0].child"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_a95a0e80","line":101,"updated":"2015-09-08 08:56:05.000000000","message":"ditto","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":99,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027, None)"},{"line_number":100,"context_line":"            if error:"},{"line_number":101,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003derror)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"            bootDevs \u003d resp.OutConfigs.child[0].child"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_08e0cfcb","line":101,"in_reply_to":"da20952f_a95a0e80","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            boot_device \u003d (CIMC_TO_IRONIC_BOOT_DEVICE.get("},{"line_number":115,"context_line":"                first_device.Rn) if first_device else None)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            persistent \u003d True if boot_device else None"},{"line_number":118,"context_line":"            return {\u0027boot_device\u0027: boot_device, \u0027persistent\u0027: persistent}"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def set_boot_device(self, task, device, persistent\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_4956d25c","line":117,"updated":"2015-09-08 08:56:05.000000000","message":"does it mean that boot devices are always persistent? worth leaving a comment","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":114,"context_line":"            boot_device \u003d (CIMC_TO_IRONIC_BOOT_DEVICE.get("},{"line_number":115,"context_line":"                first_device.Rn) if first_device else None)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"            persistent \u003d True if boot_device else None"},{"line_number":118,"context_line":"            return {\u0027boot_device\u0027: boot_device, \u0027persistent\u0027: persistent}"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def set_boot_device(self, task, device, persistent\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_6824eb0d","line":117,"in_reply_to":"da20952f_4956d25c","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                       :mod:`ironic.common.boot_devices`."},{"line_number":128,"context_line":"        :param persistent: Boolean value. True if the boot device will"},{"line_number":129,"context_line":"                           persist to all future boots, False if not."},{"line_number":130,"context_line":"                           Default: False."},{"line_number":131,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is"},{"line_number":132,"context_line":"                 specified."},{"line_number":133,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_69515661","line":130,"updated":"2015-09-08 08:56:05.000000000","message":"I don\u0027t see this uses anywhere. I think it should be clarified here. We might even need to emulate non-persistent boot devices, but it can be done separately.","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                       :mod:`ironic.common.boot_devices`."},{"line_number":128,"context_line":"        :param persistent: Boolean value. True if the boot device will"},{"line_number":129,"context_line":"                           persist to all future boots, False if not."},{"line_number":130,"context_line":"                           Default: False."},{"line_number":131,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is"},{"line_number":132,"context_line":"                 specified."},{"line_number":133,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_08344ff9","line":130,"in_reply_to":"da20952f_69515661","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                           Default: False."},{"line_number":131,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is"},{"line_number":132,"context_line":"                 specified."},{"line_number":133,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":134,"context_line":"        \"\"\""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        with common.cimc_handle(task) as handle:"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_094c5ac6","line":133,"updated":"2015-09-08 08:56:05.000000000","message":"also CIMCException","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                           Default: False."},{"line_number":131,"context_line":"        :raises: InvalidParameterValue if an invalid boot device is"},{"line_number":132,"context_line":"                 specified."},{"line_number":133,"context_line":"        :raises: MissingParameterValue if a required parameter is missing"},{"line_number":134,"context_line":"        \"\"\""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        with common.cimc_handle(task) as handle:"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_a838c3ef","line":133,"in_reply_to":"da20952f_094c5ac6","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            try:"},{"line_number":156,"context_line":"                resp \u003d handle.xml_query(method, imcsdk.WriteXmlOption.DIRTY)"},{"line_number":157,"context_line":"            except imcsdk.ImcException as e:"},{"line_number":158,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":159,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027)"},{"line_number":160,"context_line":"            if error:"},{"line_number":161,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003derror)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_2947dea3","line":158,"updated":"2015-09-08 08:56:05.000000000","message":"s/id/uuid/","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            try:"},{"line_number":156,"context_line":"                resp \u003d handle.xml_query(method, imcsdk.WriteXmlOption.DIRTY)"},{"line_number":157,"context_line":"            except imcsdk.ImcException as e:"},{"line_number":158,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":159,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027)"},{"line_number":160,"context_line":"            if error:"},{"line_number":161,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003derror)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_e8155b4c","line":158,"in_reply_to":"da20952f_2947dea3","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":159,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027)"},{"line_number":160,"context_line":"            if error:"},{"line_number":161,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003derror)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def get_sensors_data(self, task):"},{"line_number":164,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_c9c8a224","line":161,"updated":"2015-09-08 08:56:05.000000000","message":"ditto","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":159,"context_line":"            error \u003d getattr(resp, \u0027error_code\u0027)"},{"line_number":160,"context_line":"            if error:"},{"line_number":161,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003derror)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def get_sensors_data(self, task):"},{"line_number":164,"context_line":"        raise NotImplementedError()"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_a80f6338","line":161,"in_reply_to":"da20952f_c9c8a224","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d75914636795434ef279312f80a5bd9b5cec8854","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            boot_device \u003d (CIMC_TO_IRONIC_BOOT_DEVICE.get("},{"line_number":116,"context_line":"                first_device.Rn) if first_device else None)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"            # Every boot device in CIMC is persistant right now"},{"line_number":119,"context_line":"            persistent \u003d True if boot_device else None"},{"line_number":120,"context_line":"            return {\u0027boot_device\u0027: boot_device, \u0027persistent\u0027: persistent}"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_f12decfd","line":118,"updated":"2015-09-10 10:37:49.000000000","message":"s/persistant/persistent","commit_id":"5fec69e5d7bfb41f38b633abfc990e823f5d6fd7"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"b9b38cd9ffbd583672c0fd58b614e6d98201d201","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            boot_device \u003d (CIMC_TO_IRONIC_BOOT_DEVICE.get("},{"line_number":116,"context_line":"                first_device.Rn) if first_device else None)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"            # Every boot device in CIMC is persistant right now"},{"line_number":119,"context_line":"            persistent \u003d True if boot_device else None"},{"line_number":120,"context_line":"            return {\u0027boot_device\u0027: boot_device, \u0027persistent\u0027: persistent}"},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_9c7360b4","line":118,"in_reply_to":"da20952f_f12decfd","updated":"2015-09-10 12:40:12.000000000","message":"Done","commit_id":"5fec69e5d7bfb41f38b633abfc990e823f5d6fd7"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d75914636795434ef279312f80a5bd9b5cec8854","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            persistent \u003d True if boot_device else None"},{"line_number":120,"context_line":"            return {\u0027boot_device\u0027: boot_device, \u0027persistent\u0027: persistent}"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def set_boot_device(self, task, device, **kwargs):"},{"line_number":123,"context_line":"        \"\"\"Set the boot device for a node."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        Set the boot device to use on next reboot of the node."}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_0c2f23a2","line":122,"updated":"2015-09-10 10:37:49.000000000","message":"Why \u0027persistent\u0027 parameter removed? It\u0027s parameter of base interface. If driver ignores it now please describe in docstring as Dmitry wrote.","commit_id":"5fec69e5d7bfb41f38b633abfc990e823f5d6fd7"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"b9b38cd9ffbd583672c0fd58b614e6d98201d201","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            persistent \u003d True if boot_device else None"},{"line_number":120,"context_line":"            return {\u0027boot_device\u0027: boot_device, \u0027persistent\u0027: persistent}"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def set_boot_device(self, task, device, **kwargs):"},{"line_number":123,"context_line":"        \"\"\"Set the boot device for a node."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        Set the boot device to use on next reboot of the node."}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_bc7664a1","line":122,"in_reply_to":"da20952f_0c2f23a2","updated":"2015-09-10 12:40:12.000000000","message":"Done","commit_id":"5fec69e5d7bfb41f38b633abfc990e823f5d6fd7"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"d52bbf099c8d868e9bee2588910e7c2331c02103","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":90,"context_line":"            method \u003d imcsdk.ImcCore.ExternalMethod(\"ConfigResolveClass\")"},{"line_number":91,"context_line":"            method.Cookie \u003d handle.cookie"},{"line_number":92,"context_line":"            method.InDn \u003d \"sys/rack-unit-1\""},{"line_number":93,"context_line":"            method.InHierarchical \u003d \"true\""},{"line_number":94,"context_line":"            method.ClassId \u003d \"lsbootDef\""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_73e06c29","line":92,"updated":"2015-09-18 16:23:16.000000000","message":"Just wondering, this \"unit-1\" will never increase? There\u0027s no rack-unit-{2 ,3, 4, ...} ?\n\nI\u0027ve seem some of these \"rack-unit-1\" hardcoded strings around this modules and other modules (power.py too)","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"c501e03c7a3dbb6896dc75e25c2ffd773bbf8cde","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":90,"context_line":"            method \u003d imcsdk.ImcCore.ExternalMethod(\"ConfigResolveClass\")"},{"line_number":91,"context_line":"            method.Cookie \u003d handle.cookie"},{"line_number":92,"context_line":"            method.InDn \u003d \"sys/rack-unit-1\""},{"line_number":93,"context_line":"            method.InHierarchical \u003d \"true\""},{"line_number":94,"context_line":"            method.ClassId \u003d \"lsbootDef\""},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba15a1d1_a5247b5f","line":92,"in_reply_to":"ba15a1d1_73e06c29","updated":"2015-09-18 17:59:46.000000000","message":"In this case we are talking to a UCS in standalone node, so it always refers to itself as rack-unit-1. It only changes if we install a central management solution like UCSM, but then you\u0027d be using a different driver, because you\u0027d need to talk to that and not the CIMC directly.","commit_id":"9f897f9dbf0e38f111f5ba7a56fc93efb2dc32e2"}],"ironic/drivers/modules/cimc/power.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        current_power_state \u003d None"},{"line_number":64,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":65,"context_line":"            rack_unit \u003d handle.get_imc_managedobject("},{"line_number":66,"context_line":"                None, None, params\u003d{\"Dn\": \"sys/rack-unit-1\"}"},{"line_number":67,"context_line":"            )"},{"line_number":68,"context_line":"            current_power_state \u003d rack_unit[0].get_attr(\"OperPower\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_ae0d3490","line":65,"updated":"2015-09-01 14:07:58.000000000","message":"We should catch imcsdk.ImcException here.","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        current_power_state \u003d None"},{"line_number":64,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":65,"context_line":"            rack_unit \u003d handle.get_imc_managedobject("},{"line_number":66,"context_line":"                None, None, params\u003d{\"Dn\": \"sys/rack-unit-1\"}"},{"line_number":67,"context_line":"            )"},{"line_number":68,"context_line":"            current_power_state \u003d rack_unit[0].get_attr(\"OperPower\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_8d47111d","line":65,"in_reply_to":"da20952f_ae0d3490","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    None, None, params\u003d{\"Dn\": \"sys/rack-unit-1\"}"},{"line_number":99,"context_line":"                )"},{"line_number":100,"context_line":"            except imcsdk.ImcException:"},{"line_number":101,"context_line":"                current_power_state \u003d None"},{"line_number":102,"context_line":"            else:"},{"line_number":103,"context_line":"                current_power_state \u003d rack_unit[0].get_attr(\"OperPower\")"},{"line_number":104,"context_line":"        return CIMC_TO_IRONIC_POWER_STATE.get(current_power_state,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_ee9a4c13","line":101,"updated":"2015-09-01 14:07:58.000000000","message":"Please reraise Ironic exception here, and also add some logging.","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    None, None, params\u003d{\"Dn\": \"sys/rack-unit-1\"}"},{"line_number":99,"context_line":"                )"},{"line_number":100,"context_line":"            except imcsdk.ImcException:"},{"line_number":101,"context_line":"                current_power_state \u003d None"},{"line_number":102,"context_line":"            else:"},{"line_number":103,"context_line":"                current_power_state \u003d rack_unit[0].get_attr(\"OperPower\")"},{"line_number":104,"context_line":"        return CIMC_TO_IRONIC_POWER_STATE.get(current_power_state,"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_4d51f9d7","line":101,"in_reply_to":"da20952f_ee9a4c13","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def set_power_state(self, task, pstate):"},{"line_number":109,"context_line":"        if pstate not in IRONIC_TO_CIMC_POWER_STATE:"},{"line_number":110,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":111,"context_line":"                \"set_power_state called with invalid state %s\" % pstate)"},{"line_number":112,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":113,"context_line":"            handle.set_imc_managedobject("},{"line_number":114,"context_line":"                None, class_id\u003d\"ComputeRackUnit\","}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_493d72c2","line":111,"updated":"2015-09-01 14:07:58.000000000","message":"Missing translation of string _()","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":108,"context_line":"    def set_power_state(self, task, pstate):"},{"line_number":109,"context_line":"        if pstate not in IRONIC_TO_CIMC_POWER_STATE:"},{"line_number":110,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":111,"context_line":"                \"set_power_state called with invalid state %s\" % pstate)"},{"line_number":112,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":113,"context_line":"            handle.set_imc_managedobject("},{"line_number":114,"context_line":"                None, class_id\u003d\"ComputeRackUnit\","}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_ad5695cc","line":111,"in_reply_to":"da20952f_493d72c2","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"5936b1366c7a390c3299699a3dc369e57f0e7ef4","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":111,"context_line":"                \"set_power_state called with invalid state %s\" % pstate)"},{"line_number":112,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":113,"context_line":"            handle.set_imc_managedobject("},{"line_number":114,"context_line":"                None, class_id\u003d\"ComputeRackUnit\","},{"line_number":115,"context_line":"                params\u003d{"},{"line_number":116,"context_line":"                    imcsdk.ComputeRackUnit.ADMIN_POWER:"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_b95b3ff6","line":113,"updated":"2015-09-01 14:07:58.000000000","message":"Custom exception from here (if any) should be converted to Ironic exception.","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"7784ba04d50df5bb2a304c6e3482accd4e8dd640","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":111,"context_line":"                \"set_power_state called with invalid state %s\" % pstate)"},{"line_number":112,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":113,"context_line":"            handle.set_imc_managedobject("},{"line_number":114,"context_line":"                None, class_id\u003d\"ComputeRackUnit\","},{"line_number":115,"context_line":"                params\u003d{"},{"line_number":116,"context_line":"                    imcsdk.ComputeRackUnit.ADMIN_POWER:"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_ad0d35ea","line":113,"in_reply_to":"da20952f_b95b3ff6","updated":"2015-09-01 15:49:19.000000000","message":"Done","commit_id":"1c0bb87d2f61cc1a565bd4afdcdc54c1567bfd29"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"58b6b4d0831ab64b6902fb4f987a682231ad315f","unresolved":false,"context_lines":[{"line_number":50,"context_line":"IRONIC_TO_CIMC_POWER_STATE \u003d {"},{"line_number":51,"context_line":"    states.POWER_ON: imcsdk.ComputeRackUnit.CONST_ADMIN_POWER_UP,"},{"line_number":52,"context_line":"    states.POWER_OFF: imcsdk.ComputeRackUnit.CONST_ADMIN_POWER_DOWN,"},{"line_number":53,"context_line":"    states.REBOOT: \u0027hard-reset-immediate\u0027  # \u0027cycle-immediate\u0027"},{"line_number":54,"context_line":"}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_d251f80f","line":53,"updated":"2015-09-02 11:29:16.000000000","message":"Why not CONST_ADMIN_POWER_HARD_RESET_IMMEDIATE?","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":50,"context_line":"IRONIC_TO_CIMC_POWER_STATE \u003d {"},{"line_number":51,"context_line":"    states.POWER_ON: imcsdk.ComputeRackUnit.CONST_ADMIN_POWER_UP,"},{"line_number":52,"context_line":"    states.POWER_OFF: imcsdk.ComputeRackUnit.CONST_ADMIN_POWER_DOWN,"},{"line_number":53,"context_line":"    states.REBOOT: \u0027hard-reset-immediate\u0027  # \u0027cycle-immediate\u0027"},{"line_number":54,"context_line":"}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_3841333a","line":53,"in_reply_to":"da20952f_d251f80f","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":54,"context_line":"}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def _wait_for_state_change(target_state, task):"},{"line_number":58,"context_line":"    \"\"\"Wait and check for the power state change.\"\"\""},{"line_number":59,"context_line":"    store \u003d {\u0027state\u0027: None, \u0027retries\u0027: CONF.cimc.max_retry}"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_c4ace48e","line":57,"updated":"2015-09-02 04:17:42.000000000","message":"missing doctoring?","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":54,"context_line":"}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def _wait_for_state_change(target_state, task):"},{"line_number":58,"context_line":"    \"\"\"Wait and check for the power state change.\"\"\""},{"line_number":59,"context_line":"    store \u003d {\u0027state\u0027: None, \u0027retries\u0027: CONF.cimc.max_retry}"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_97ecd290","line":57,"in_reply_to":"da20952f_c4ace48e","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def get_properties(self):"},{"line_number":92,"context_line":"        return common.COMMON_PROPERTIES"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def validate(self, task):"},{"line_number":95,"context_line":"        common.parse_driver_info(task.node)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def get_power_state(self, task):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_44af747d","line":94,"updated":"2015-09-02 04:17:42.000000000","message":"missing doctoring?","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def get_properties(self):"},{"line_number":92,"context_line":"        return common.COMMON_PROPERTIES"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def validate(self, task):"},{"line_number":95,"context_line":"        common.parse_driver_info(task.node)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def get_power_state(self, task):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_3702a63f","line":94,"in_reply_to":"da20952f_44af747d","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def validate(self, task):"},{"line_number":95,"context_line":"        common.parse_driver_info(task.node)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def get_power_state(self, task):"},{"line_number":98,"context_line":"        current_power_state \u003d None"},{"line_number":99,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":100,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_64b4f8d0","line":97,"updated":"2015-09-02 04:17:42.000000000","message":"missing doctoring?","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def validate(self, task):"},{"line_number":95,"context_line":"        common.parse_driver_info(task.node)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def get_power_state(self, task):"},{"line_number":98,"context_line":"        current_power_state \u003d None"},{"line_number":99,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":100,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_57ff1a34","line":97,"in_reply_to":"da20952f_64b4f8d0","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        current_power_state \u003d None"},{"line_number":99,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":100,"context_line":"            try:"},{"line_number":101,"context_line":"                rack_unit \u003d handle.get_imc_managedobject("},{"line_number":102,"context_line":"                    None, None, params\u003d{\"Dn\": \"sys/rack-unit-1\"}"},{"line_number":103,"context_line":"                )"},{"line_number":104,"context_line":"            except imcsdk.ImcException as e:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_64863815","line":101,"updated":"2015-09-02 04:17:42.000000000","message":"same as mentioned in management.py, should we separate ImcSdk code?","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":112,"context_line":"    def set_power_state(self, task, pstate):"},{"line_number":113,"context_line":"        if pstate not in IRONIC_TO_CIMC_POWER_STATE:"},{"line_number":114,"context_line":"            msg \u003d _(\"set_power_state called with invalid state %s\")"},{"line_number":115,"context_line":"            raise exception.InvalidParameterValue(msg % pstate)"},{"line_number":116,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":117,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_44fd346d","line":114,"updated":"2015-09-02 04:17:42.000000000","message":"better to include node uuid in error message?","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":112,"context_line":"    def set_power_state(self, task, pstate):"},{"line_number":113,"context_line":"        if pstate not in IRONIC_TO_CIMC_POWER_STATE:"},{"line_number":114,"context_line":"            msg \u003d _(\"set_power_state called with invalid state %s\")"},{"line_number":115,"context_line":"            raise exception.InvalidParameterValue(msg % pstate)"},{"line_number":116,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":117,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_d7c00ae3","line":114,"in_reply_to":"da20952f_44fd346d","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            raise exception.InvalidParameterValue(msg % pstate)"},{"line_number":116,"context_line":"        with common.cimc_handle(task) as handle:"},{"line_number":117,"context_line":"            try:"},{"line_number":118,"context_line":"                handle.set_imc_managedobject("},{"line_number":119,"context_line":"                    None, class_id\u003d\"ComputeRackUnit\","},{"line_number":120,"context_line":"                    params\u003d{"},{"line_number":121,"context_line":"                        imcsdk.ComputeRackUnit.ADMIN_POWER:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_24928058","line":118,"updated":"2015-09-02 04:17:42.000000000","message":"same as mentioned in management.py, should we separate ImcSdk code?","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            raise exception.PowerStateFailure(pstate\u003dpstate)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":136,"context_line":"    def reboot(self, task):"},{"line_number":137,"context_line":"        current_power_state \u003d self.get_power_state(task)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if current_power_state \u003d\u003d states.POWER_ON:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_e4c0082d","line":136,"updated":"2015-09-02 04:17:42.000000000","message":"ditto:L94","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":133,"context_line":"            raise exception.PowerStateFailure(pstate\u003dpstate)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    @task_manager.require_exclusive_lock"},{"line_number":136,"context_line":"    def reboot(self, task):"},{"line_number":137,"context_line":"        current_power_state \u003d self.get_power_state(task)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if current_power_state \u003d\u003d states.POWER_ON:"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_5293a8a3","line":136,"in_reply_to":"da20952f_e4c0082d","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if current_power_state \u003d\u003d states.POWER_ON:"},{"line_number":140,"context_line":"            self.set_power_state(task, states.REBOOT)"},{"line_number":141,"context_line":"        elif current_power_state \u003d\u003d states.POWER_OFF:"},{"line_number":142,"context_line":"            self.set_power_state(task, states.POWER_ON)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_24cb6074","line":141,"updated":"2015-09-02 04:17:42.000000000","message":"I think hard-reset-immediate takes care this check right?","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if current_power_state \u003d\u003d states.POWER_ON:"},{"line_number":140,"context_line":"            self.set_power_state(task, states.REBOOT)"},{"line_number":141,"context_line":"        elif current_power_state \u003d\u003d states.POWER_OFF:"},{"line_number":142,"context_line":"            self.set_power_state(task, states.POWER_ON)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_326874ba","line":141,"in_reply_to":"da20952f_24cb6074","updated":"2015-09-02 13:02:34.000000000","message":"In my experiments asking a c-series that is already off to reboot either with hard-reset or cycle-immediate, results in \"Error 2006: Host is powered OFF. Power ON host and try again\" so this logic is required.","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                    None, None, params\u003d{\"Dn\": \"sys/rack-unit-1\"}"},{"line_number":75,"context_line":"                )"},{"line_number":76,"context_line":"            except imcsdk.ImcException as e:"},{"line_number":77,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                current_power_state \u003d rack_unit[0].get_attr(\"OperPower\")"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_a983eec9","line":77,"updated":"2015-09-08 08:56:05.000000000","message":"s/id/uuid/","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                    None, None, params\u003d{\"Dn\": \"sys/rack-unit-1\"}"},{"line_number":75,"context_line":"                )"},{"line_number":76,"context_line":"            except imcsdk.ImcException as e:"},{"line_number":77,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                current_power_state \u003d rack_unit[0].get_attr(\"OperPower\")"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_f32310a9","line":77,"in_reply_to":"da20952f_a983eec9","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                    None, None, params\u003d{\"Dn\": \"sys/rack-unit-1\"}"},{"line_number":126,"context_line":"                )"},{"line_number":127,"context_line":"            except imcsdk.ImcException as e:"},{"line_number":128,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":129,"context_line":"            else:"},{"line_number":130,"context_line":"                current_power_state \u003d rack_unit[0].get_attr(\"OperPower\")"},{"line_number":131,"context_line":"        return CIMC_TO_IRONIC_POWER_STATE.get(current_power_state,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_496fb22a","line":128,"updated":"2015-09-08 08:56:05.000000000","message":"s/id/uuid/","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                    None, None, params\u003d{\"Dn\": \"sys/rack-unit-1\"}"},{"line_number":126,"context_line":"                )"},{"line_number":127,"context_line":"            except imcsdk.ImcException as e:"},{"line_number":128,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":129,"context_line":"            else:"},{"line_number":130,"context_line":"                current_power_state \u003d rack_unit[0].get_attr(\"OperPower\")"},{"line_number":131,"context_line":"        return CIMC_TO_IRONIC_POWER_STATE.get(current_power_state,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_f34a305b","line":128,"in_reply_to":"da20952f_496fb22a","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        \"\"\"Set the power state of the task\u0027s node."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":139,"context_line":"        :param power_state: Any power state from :mod:`ironic.common.states`."},{"line_number":140,"context_line":"        :raises: MissingParameterValue if a required parameter is missing."},{"line_number":141,"context_line":"        \"\"\""},{"line_number":142,"context_line":"        if pstate not in IRONIC_TO_CIMC_POWER_STATE:"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_696ab61b","line":139,"updated":"2015-09-08 08:56:05.000000000","message":"it\u0027s called pstate here","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        \"\"\"Set the power state of the task\u0027s node."},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":139,"context_line":"        :param power_state: Any power state from :mod:`ironic.common.states`."},{"line_number":140,"context_line":"        :raises: MissingParameterValue if a required parameter is missing."},{"line_number":141,"context_line":"        \"\"\""},{"line_number":142,"context_line":"        if pstate not in IRONIC_TO_CIMC_POWER_STATE:"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_1377a4a0","line":139,"in_reply_to":"da20952f_696ab61b","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":139,"context_line":"        :param power_state: Any power state from :mod:`ironic.common.states`."},{"line_number":140,"context_line":"        :raises: MissingParameterValue if a required parameter is missing."},{"line_number":141,"context_line":"        \"\"\""},{"line_number":142,"context_line":"        if pstate not in IRONIC_TO_CIMC_POWER_STATE:"},{"line_number":143,"context_line":"            msg \u003d _(\"set_power_state called for %(node)s with \""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_09753af8","line":140,"updated":"2015-09-08 08:56:05.000000000","message":"raises CIMCException and InvalidParameterValue","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":139,"context_line":"        :param power_state: Any power state from :mod:`ironic.common.states`."},{"line_number":140,"context_line":"        :raises: MissingParameterValue if a required parameter is missing."},{"line_number":141,"context_line":"        \"\"\""},{"line_number":142,"context_line":"        if pstate not in IRONIC_TO_CIMC_POWER_STATE:"},{"line_number":143,"context_line":"            msg \u003d _(\"set_power_state called for %(node)s with \""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_b36b58b9","line":140,"in_reply_to":"da20952f_09753af8","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                        imcsdk.ComputeRackUnit.DN: \"sys/rack-unit-1\""},{"line_number":155,"context_line":"                    })"},{"line_number":156,"context_line":"            except imcsdk.ImcException as e:"},{"line_number":157,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        if pstate is states.REBOOT:"},{"line_number":160,"context_line":"            pstate \u003d states.POWER_ON"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_29703e07","line":157,"updated":"2015-09-08 08:56:05.000000000","message":"s/id/uuid/","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                        imcsdk.ComputeRackUnit.DN: \"sys/rack-unit-1\""},{"line_number":155,"context_line":"                    })"},{"line_number":156,"context_line":"            except imcsdk.ImcException as e:"},{"line_number":157,"context_line":"                raise exception.CIMCException(node\u003dtask.node.id, error\u003de)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"        if pstate is states.REBOOT:"},{"line_number":160,"context_line":"            pstate \u003d states.POWER_ON"}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_f3e6b049","line":157,"in_reply_to":"da20952f_29703e07","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b3f96133bb0a77737fcf2c54806710f5552974c7","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        its off then the node will just be turned on."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":174,"context_line":"        :raises: MissingParameterValue if a required parameter is missing."},{"line_number":175,"context_line":"        \"\"\""},{"line_number":176,"context_line":"        current_power_state \u003d self.get_power_state(task)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_c961823a","line":174,"updated":"2015-09-08 08:56:05.000000000","message":"also CIMCException","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"91a3a976cf0ca00d2515a939e75a2933771bfdb3","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        its off then the node will just be turned on."},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        :param task: a TaskManager instance containing the node to act on."},{"line_number":174,"context_line":"        :raises: MissingParameterValue if a required parameter is missing."},{"line_number":175,"context_line":"        \"\"\""},{"line_number":176,"context_line":"        current_power_state \u003d self.get_power_state(task)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da20952f_b3f038ff","line":174,"in_reply_to":"da20952f_c961823a","updated":"2015-09-08 12:30:48.000000000","message":"Done","commit_id":"a991a25cf43648946846d9bda4673fe23b6c4113"}],"ironic/drivers/pxe.py":[{"author":{"_account_id":10662,"name":"Gopi Krishna S","email":"saripurigopi@gmail.com","username":"saripurigopi"},"change_message_id":"484400f67f79ad679058d5e377e57a286e815869","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        self.vendor \u003d iscsi_deploy.VendorPassthru()"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"class PXEAndCIMCDriver(base.BaseDriver):"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def __init__(self):"},{"line_number":327,"context_line":"        if not importutils.try_import(\u0027ImcSdk\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_84c6ec14","line":324,"updated":"2015-09-02 04:17:42.000000000","message":"missing docstring?","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"4fd6b4de33d4fc122afe6bd5ba21738172f65ee9","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        self.vendor \u003d iscsi_deploy.VendorPassthru()"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"class PXEAndCIMCDriver(base.BaseDriver):"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"    def __init__(self):"},{"line_number":327,"context_line":"        if not importutils.try_import(\u0027ImcSdk\u0027):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da20952f_52e4080c","line":324,"in_reply_to":"da20952f_84c6ec14","updated":"2015-09-02 13:02:34.000000000","message":"Done","commit_id":"04135f65f9e244647a09c9d3ac85198276620774"}],"ironic/tests/drivers/cimc/test_power.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"d75914636795434ef279312f80a5bd9b5cec8854","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class WaitForStateChangeTestCase(test_common.CIMCBaseTestCase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test__wait_for_state_change(self):"},{"line_number":32,"context_line":"        pass"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_97e6e0e6","line":31,"updated":"2015-09-10 10:37:49.000000000","message":"It does not test anything.","commit_id":"5fec69e5d7bfb41f38b633abfc990e823f5d6fd7"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"b9b38cd9ffbd583672c0fd58b614e6d98201d201","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class WaitForStateChangeTestCase(test_common.CIMCBaseTestCase):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test__wait_for_state_change(self):"},{"line_number":32,"context_line":"        pass"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da20952f_1f02e23e","line":31,"in_reply_to":"da20952f_97e6e0e6","updated":"2015-09-10 12:40:12.000000000","message":"Done","commit_id":"5fec69e5d7bfb41f38b633abfc990e823f5d6fd7"}]}
