summaryrefslogtreecommitdiff
path: root/ironic/drivers/modules/ipmitool.py
Commit message (Collapse)AuthorAgeFilesLines
* Fixes console port conflict occurs in certain pathKaifeng Wang2023-02-151-0/+6
| | | | | | | | | | | | | | | The dynamically allocated console port for a node is saved into database and reused on subsequent console operations. In certain code path the port record cann't be trusted and we should do a re-allocation. This patch fixes the issue by ignores previous allocation record. The extra cleanup in the takeover is not required anymore and removed as well. Change-Id: I1a07ea9b30a2c760af7a6a4e39f3ff227df28fff Story: 2010489 Task: 47061
* Fixes log formatiing string.Peter Rudenko2022-04-241-1/+1
| | | | | | | Closes-Bug: 1970091 Signed-off-by: Peter Rudenko <petro.rudenko@gmail.com> Change-Id: Ibfc494874dedf418cf0eb2df95492bd0e3cda46d
* Fix Node Console Duplicate Sol Sessiontaoruizhe2022-01-201-0/+11
| | | | | | | | | | | | | | Restart node console may occasionally result in duplicated sol session. Especially, when a cluster deployed with multi ironic-conductor backends, stop_console action shutdown only one console process while another sol session remains. This patch adds "sol deactivate" action before start node console. Make sure the current connection always a success. Story: 2009762 Task: 44233 Change-Id: I5bc8666ff0b4ceab61ed6a8c794d6882783d6bce
* Use driver_internal_info methods for other driversSteve Baker2022-01-051-10/+10
| | | | | | | | | | | | | This change switches the rest of the driver classes to using set_driver_internal_info, del_driver_internal_info, timestamp_driver_internal_info node methods for modifying driver_internal_info. This completes the switchover to using these methods, outside of unit tests there should be no direct modifying of driver_internal_info values. Change-Id: I17772a3274f09ee02390cc6e941ca302f396a03c
* Follow-up Automaticaly set cipher suiteIury Gregory Melo Ferreira2021-03-311-9/+9
| | | | | | This commit is a follow-up to I6788585a83268e20ff6447e570995871bc9c25d5 Change-Id: I658b6b4eca7978473b08244c349ea5ac8bf37f76
* Automaticaly set cipher suiteIury Gregory Melo Ferreira2021-03-291-0/+78
| | | | | | | | | | | | | | In some cases the operator can't specify `ipmi_cipher_suite` for each node and the problem with session can still occour: `Error in open session response message : no matching cipher suite` This patch adds a new configuration option that will take a list of possible cipher suite versions that can be used when the error occurs and the node doesn't have the `ipmi_cipher_suite` set. Story: 2008739 Task: 42093 Change-Id: I6788585a83268e20ff6447e570995871bc9c25d5
* Refactor vendor detection and add Redfish implementationDmitry Tantsur2021-01-281-39/+6
| | | | | | | | | | | | | | | | Get rid of the TODO in the code and prepare for more management interfaces supporting detect_vendor(). Vendor detecting now runs during transition to manageable and on power state sync (essentially same as before but for all drivers not only IPMI). Update the IPMI implementation to no longer hide exceptions since they're not handled on the upper level. Simplify the regex and fix the docstring. Add the Redfish implementation as a foundation for future vendor-specific changes. Change-Id: Ie521cf2295613dde5842cbf9a053540a40be4b9c
* Remove detect_vendor decoratorJulia Kreger2020-12-161-1/+1
| | | | | | | | | | | | And move a lock creation to vendor storage, which... should be okay. mgoddard reported issues in one of his projects where ironic was reporting that there were errors on the power sync process, ultimately due to the decorator from the very first iteration of the detect vendor code. Change-Id: Icd0dc3fe59a3815d6f78d881eb280f406e7d0c69
* Merge "IPMI: Handle vendor set boot device differences"Zuul2020-12-141-10/+125
|\
| * IPMI: Handle vendor set boot device differencesJulia Kreger2020-12-141-10/+125
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Supermicro machines, when in UEFI mode, have a different device number, in binary, to represent the hard disk from other vendors such as Fujitsu which actually has somewhat similar code in their driver. This means we need to be somewhat cognizent of the vendor of the BMC and possibly update the device mapping based upon that vendor. This may ultimately fix a number of IPMI related problems, because there is a reliance upon the text output of ipmitool, which only reads the bytes retured by the BMC, which may not be reality after the next reset, espescialy if ipmitool doesn't know of the UEFI operating difference. Change-Id: Ie19db9e0cf1eafdfc9bb46248f4d457337821f94 Story: 2008241 Task: 41085
* | Fix ipmitool timing argument calculationSteve Baker2020-10-141-12/+30
|/ | | | | | | | | | | | Calculating the ipmitool `-N` and `-R` arguments from ironic.conf [ipmi] `command_retry_timeout` and `min_command_interval` now takes into account the 1 second interval increment that ipmitool adds on each retry event. Failure-path ipmitool run duration will now be just less than `command_retry_timeout` instead of much longer. Change-Id: Ia3d8d85497651290c62341ac121e2aa438b4ac50
* Allow configuring IPMI cipher suiteDmitry Tantsur2020-09-161-11/+24
| | | | | | Negotiation fails for some hardware, let's allow an explicit setting. Change-Id: I04a3391f85412dcabc6105bd91beb1da25bdfc19
* Fix console auto port allocation under IPv6Kaifeng Wang2020-08-051-3/+4
| | | | | | | | | | | | | | By default _verify_port() only works for IPv4 network, the same port can be allocated to multiple nodes in a IPv6 network because the port checking passed and be used for other nodes. This fix passes the socat_address to the port validation and use the correct address family to do the socket binding. Story: 2007946 Task: 40412 Change-Id: I1355afaa551baee7b9fd7883d2d29342d059c5a0
* Merge "Use native oslo.concurrency execution timeout in ipmitool"Zuul2020-07-221-35/+6
|\
| * Use native oslo.concurrency execution timeout in ipmitoolDmitry Tantsur2020-07-061-35/+6
| | | | | | | | | | | | | | | | | | This change replaces custom Popen-based code with the new argument (backed by the corresponding stdlib argument). Story: #2004449 Task: #40283 Change-Id: I6840b1caffd272ef12ab2b259a02376ec185bc3f
* | Use min_command_interval when ironic does IPMI retriesBob Fournier2020-07-101-4/+1
|/ | | | | | | | | | | For certain BMCs the default of 1 second is too short for the ipmitool minimum command interval (-N). The configured ``[ipmi]min_command_interval`` should be used. Story: 2007914 Task: 40317 Change-Id: I07f17a7321582e9829ac422efb51b571a17c5ca8
* New configuration parameter to use ipmitool retriesBob Fournier2020-05-281-3/+12
| | | | | | | | | | | | | | | | | | | | | Add a new ``[ipmi]use_ipmitool_retries`` option. When set to ``True`` and timing is supported by ipmitool, the number of retries and command interval will be passed to ipmitool so that ipmitool will do the retries. When set to ``False``, ironic will do the retries. The default is ``True``, so this will not change the current behaviour which is to have ipmitool do the retries when timing is supported. Setting to ``False`` will help with certain BMCs which do not support the Cipher Suites command. In this case ipmitool can take up to 10 seconds for each retry which results in a total time exceeding ``[ipmi]command_retry_timeout``. Change-Id: I1d0194e7c7ae9fcdd4665e6115ee26d10b14e480 Story: 2007632 Task: 39676
* Add my new address to .mailmapAeva Black2020-04-131-2/+2
| | | | | | | This commit updates the mailmap file and changes my alias in a few places within old comments. Change-Id: Ica0e184109d794b8e129d567b5606d7fe84ff384
* Fix the remaining hacking issuesDmitry Tantsur2020-03-311-4/+4
| | | | | | | | | | Fixes W504 and E117, resulting in some indentation changes. Also fixes code that exceeds the complexity requirement, that is bumped to 20 (mostly to avoid refactoring the agent heartbeat call, resulting in conflicts for the deploy steps work). Change-Id: I8e49f2c039b0ddfca9138f8e148708b7e8b5df7e
* Merge "Move ipmi logging to a separate option"Zuul2020-03-151-1/+1
|\
| * Move ipmi logging to a separate optionJulia Kreger2020-03-131-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | The IPMI verbose output being turned on by the debug option is confusing and misleading, and since many operators run ironic in debug mode anyway, it doesn't make much sense to spam logs with errors and information that can be misleading to a less experienced operator. Also... less logging output. Change-Id: I0fae7bad5613865dfd4d1c663be08d40debe157a
* | Follow up to console port allocationKaifeng Wang2020-03-071-2/+1
|/ | | | | | | | | Addressed a comment in https://review.opendev.org/#/c/706445 Change-Id: Icd7642285695e91e82e163c0bc3435b99a042a6f Story: 2007099 Task: 38135
* Automatic port allocation for the serial consoleKaifeng Wang2020-02-101-4/+35
| | | | | | | | | | | | | | | | | | | | | | | | Introduces [console]port_range configuration option and implements the feature of automatic port allocation for IPMI based serial console. The ipmi_terminal_port in driver_info takes precedance if specified, otherwise ironic will allocate free port from configured port range for underlying serial proxy tools. The implementation deviation with the original proposal is this patch doesn't validate whether user specified ipmi_terminal_port falls in the range, based on following considerations: a. ipmi_terminal_port is considered a resort for backwards compatibility, we will remove this eventually. b. different conductors may have different port range configured (rare, but could happen). c. force ipmi_terminal_port in the port range could raise the possibility of conflicts with ports in the configured range, this is not a desired result, so leave the choice to the end users. Change-Id: If8722d09dc74878f4da2e4a7f059d9b079c3e472 Story: 2007099 Task: 38135
* Stop using six libraryRiccardo Pittau2019-12-231-3/+2
| | | | | | | | | | Since we've dropped support for Python 2.7, it's time to look at the bright future that Python 3.x will bring and stop forcing compatibility with older versions. This patch removes the six library from requirements, not looking back. Change-Id: Ib546f16965475c32b2f8caabd560e2c7d382ac5a
* Allow to configure additional ipmitool retriable errorsVladyslav Drok2019-08-161-2/+5
| | | | | | | | | This change allows to configure more retriable errors for ipmitool execution that are specific to the environment it is run in. Task: 36296 Story: 2006410 Change-Id: I4bd06ad405f87f5fb974777fc3d84e4874b4f5bb
* ipmi: Ignore sensor debug dataJulia Kreger2019-03-291-0/+3
| | | | | | | | | | | | | | | When the conductor has debugging enabled, that command is passed to ipmitool to enable debugging of other commands. However, this means tons of extra data is dumped as part of the sensor data collection for ironic, which breaks string parsing and ultimately metrics collection. Since we can identify these lines, lets ignore them. Change-Id: Ife77707210f8289d8f2e0223fb9ee1909d798546 Story: 2005332 Task: 30267
* Kg key for IPMIv2 authenticationNikolay Fedotov2019-03-141-0/+13
| | | | | | | | | | | | | | | Support for the -y option of ipmitool Quote from docs: -y <hex key> Use supplied Kg key for IPMIv2 authentication. The key is expected in hexadecimal format and can be used to specify keys with non-printable characters. E.g. '-k PASSWORD' and '-y 50415353574F5244' are equivalent. The default is not to use any Kg key. Change-Id: Ie6a9fc1a41d924e30eff526b3eae929ce6e085c6 Story: #2005158 Task: #29876
* honor ipmi_port in serial console driversLars Kellogg-Stedman2019-03-131-35/+37
| | | | | | | | | | | | teach the ipmitool driver about _get_ipmitool_args and use that in all cases that we want to build an ipmitool command line. this solves the problem that the serial console drivers were failing to honor the ipmi_port setting in driver_info, while it was being correctly used for power state, etc. Change-Id: Ifbf6a92c2305567985cfbc41dbf76a076ecb8a7b Story: 2005138 Task: 29826
* Make ipmi_force_boot_device more user friendlyTony Breeds2019-01-151-2/+4
| | | | | | | | Look for boolean and string like booleans in driver_info['ipmi_force_boot_device'] to make setting the option more user friendly / less error prone. Change-Id: I2917761055db5286183ce265089c19dea98947ad Story: 2004444
* Introduce configuration option [ipmi]ipmi_disable_timeoutKaifeng Wang2018-12-101-9/+16
| | | | | | | | | | | | | | | | | | | Some type of BMCs don't support an IPMI option that disable the behavior of boot device timeout, which makes them never get booted from PXE. This patch extends the fix [1] by adding a configuration option, which provides the default ipmi behavior. [1] https://review.openstack.org/#/c/616053 Additionally revising the variable/setting names based upon review feedback and discussion that took place during the 20181210 weekly ironic team meeting. Change-Id: Ie049bbaf45aeab54c1272d1d561c5a6ca00dc34a Story: 2002977 Task: 22985
* Merge "Kill misbehaving `ipmitool` process"Zuul2018-12-051-6/+50
|\
| * Kill misbehaving `ipmitool` processIlya Etingof2018-12-051-6/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We can't trust ipmitool to terminate in time. We may have to kill the process if it's running for longer than we asked it to. On the other hand, abrupt IPMI exchange termination is said to be dangerous to the state of the BMC being managed. Therefore this patch only kills timed out IPMI "power status" call. For the purpose of killing hung `ipmitool` we inject the time-capped `popen.wait` call before the uncapped `popen.communicate` is called internally. Then just kill stuck `ipmitool` process and go on. Story: 2004449 Task: 28127 Change-Id: I7e1eafb334fe3a3337926aca27c14fe559ce0e39
* | Add ipmi_disable_timeout to avoid problematic IPMI commandTony Breeds2018-11-281-8/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | The IPMI driver unconditionally instructed the BMC not automatically clear boot flag valid bit if Chassis Control command not received within 60-second timeout (countdown restarts when a Chassis Control command is received). Some BMCs do not support setting this. Sending the command aborts the node boot. A new driver option ``ipmi_disable_timeout`` is added to bypass sending this command. Change-Id: I1dda3cf3e4b7b888ed9d8931c8ede3a918dd01f4 Story: 2004266
* | Recommend to set boot mode explicitlyHironori Shiina2018-11-031-1/+1
|/ | | | | | | | | | | | | | | | | | A future release will change the default boot mode from legacy BIOS to UEFI. The default boot mode can be set to [deploy]/default_boot_mode option for hardware types which support setting boot mode. Otherwise, the default boot mode is hard-coded as legacy BIOS. This patch recommends to set boot mode explicitly in a help message of [deploy]/default_boot_mode option. A warning message is also logged when a default hard-coded boot mode is used. This message is logged once even if there are multiple nodes whose boot modes are configured explicitly for not emitting too many messages. Change-Id: Ib90ebf59ba72d49cb757e44f3741b5373a411ddf Story: 2003936 Task: 27475
* Remove deprecated option [ipmi]retry_timeoutKaifeng Wang2018-07-211-8/+2
| | | | | | | | | The option [ipmi]retry_timeout is deprecated at Pike, now it's time to remove it from the tree. Change-Id: I921661db2a6f0c85e717e1a80e5f0c8b6c91d369 Story: #2003028 Task: #23052
* Move boot-related code to boot_mode_utils.pyIlya Etingof2018-06-201-2/+2
| | | | | | | | | This change collects boot-relalated functions into the `boot_mode_utils.py` module to improve code clarity. Change-Id: I1a2225d503deb382ba6021a6073c81cd03ca3175 Story: 1734131 Task: 10640
* Merge "Adds more `ipmitool` errors as retryable"Zuul2018-06-111-6/+16
|\
| * Adds more `ipmitool` errors as retryableIlya Etingof2018-06-061-6/+16
| | | | | | | | | | | | | | | | | | This change extends the list of `ipmitool` errors that ironic treats as retryable on failure. Change-Id: I5fddc95404a1725f03bd26da51932c3ece5a5a35 Story: 2001989 Task: 19611
* | Fix W504 errorsJulia Kreger2018-05-091-6/+6
|/ | | | | | | | Also a few related errors based on some earlier investigation may have been pulled in along the lines of E305. Story: #2001985 Change-Id: Ifb2d3b481202fbd8cbb472e02de0f14f4d0809fd
* ipmitool: reboot: Don't power off node if already offJohn L. Villalovos2017-09-271-1/+5
| | | | | | | | | | | | | | | | | | | Commit ee5d4942a1c33736ffe05ec01619142be400c2f4 changed the existing behavior so that if an ipmitool command fails when attempting to set the power state it causes a failure. The problem with that approach is that on some systems if the system is already in the desired power state, an error will be generated when ipmitool tries to change it to the desired power state. Now when doing a reboot command we check beforehand to see if the node is already off, if so then don't attempt to power off the node again. Also optimize ironic/conductor/utils.py node_power_action() so that it only checks a node's power status if it might perform an action based on the node's power status. Change-Id: If838aae871753ebfbdf359e0bbe3afcc54c4b559 Closes-Bug: #1718794
* Follow-up to fix for power action failureRuby Loo2017-07-131-2/+2
| | | | | | | | | | | | | This is a follow-up patch to the patch so that the power status is not retried if a power action fails: ee5d4942a1c33736ffe05ec01619142be400c2f4 It addresses the comments as well as adds more clarification and updates the documentation to refer to the new [ipmi]command_retry_timeout config option. Change-Id: Ib21544da260565ae399e2d07b32af9bd8b810280 Related-Bug: #1692895
* Don't retry power status if power action failsJulian Edwards2017-06-271-100/+40
| | | | | | | | | | | | | | The old code blindly required power status even if the power action failed. Now, it will retry the power action only when it detects a retryable failure, and will only poll for power status if the power action is successful. This patch also moves the logic for handling waiting for power status into the conductor so that the logic is standardised between drivers. Change-Id: Ib48056e05d359848386ac057b58921f40b7bdd60 Co-Authored-By: Sam Betts <sam@code-smash.net> Related-Bug: #1675529 Closes-Bug: #1692895
* Remove log translations from ironic/drivers Part-1Anup Navare2017-05-091-36/+34
| | | | | | | | Log messages are no longer being translated. This removes the use of _LE, _LI and _LW translation markers from ironic/drivers. Change-Id: Ie01c1a6a0e0232dce055767854a5d4385b392510 Partial-Bug: #1674374
* Merge "Ipmitool management driver for Inject NMI"Jenkins2017-01-231-0/+21
|\
| * Ipmitool management driver for Inject NMINaohiro Tamura2017-01-201-0/+21
| | | | | | | | | | | | | | This patch enhances ipmitool management driver to support Inject NMI. Partial-Bug: #1526226 Change-Id: I6def498a6f242b34f647bb670d3fbfcb99fb667a
* | Ipmitool power driver for soft reboot and soft power offNaohiro Tamura2017-01-131-30/+99
|/ | | | | | | | This patch enhances ipmitool power driver to support SOFT_REBOOT and SOFT_POWER_OFF. Partial-Bug: #1526226 Change-Id: If01721625c22a578b4311b82104cd895139e3a01
* Update to hacking 0.12.0 and use new checksJohn L. Villalovos2016-11-081-2/+2
| | | | | | | | | | | | | | Use hacking 0.12.0 Use the new checks that are available: [H106] Don’t put vim configuration in source files. [H203] Use assertIs(Not)None to check for None. [H904] Delay string interpolations at logging calls. Fix code so tests pass. Change-Id: I902e999687b066800e18fafd091571bf718b15f4 Depends-On: I2aa44b62f900d4dfd67701b01eadd0523fbfaf07
* Merge "IPMI command should depend on console type"Jenkins2016-10-201-8/+30
|\
| * IPMI command should depend on console typeAndrey Shestakov2016-10-191-8/+30
| | | | | | | | | | | | | | | | | | This change implements _get_impi_cmd method for IPMI consoles. Depends on type of console, ipmi command should contain different arguments. Change-Id: I55e712a1a91aed3d533f636e519f0bae1f9be2d4 Closes-bug: #1611285
* | Merge "Trivial: fix typo in docstring"Jenkins2016-10-181-1/+1
|\ \