Bug 1457222 - power management get status fails on python IndexError or cobbler exception
Summary: power management get status fails on python IndexError or cobbler exception
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Satellite 5
Classification: Red Hat
Component: Provisioning
Version: 580
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Jan Dobes
QA Contact: Pavel Studeník
URL:
Whiteboard:
Depends On:
Blocks: sat58-errata
TreeView+ depends on / blocked
 
Reported: 2017-05-31 11:25 UTC by Ales Dujicek
Modified: 2018-02-05 13:57 UTC (History)
4 users (show)

Fixed In Version: cobbler-2.0.7-72
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2018-02-05 13:57:18 UTC
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHBA-2018:0274 0 normal SHIPPED_LIVE Red Hat Satellite 5.8.0 bug fix update 2018-02-09 23:18:15 UTC

Description Ales Dujicek 2017-05-31 11:25:17 UTC
Description of problem:

In Power Management I cannot get IPMI power status

WebUI shows:
An error prevented retrieving the system's power status. Please check parameters and Cobbler log.

 - When it is ON:

/var/log/cobbler/cobbler.log:
Wed May 31 05:07:22 2017 - INFO | cobbler power configuration is:
Wed May 31 05:07:22 2017 - INFO |       type   : ipmilan
Wed May 31 05:07:22 2017 - INFO |       address: client-address-imm.redhat.com
Wed May 31 05:07:22 2017 - INFO |       user   : username
Wed May 31 05:07:22 2017 - INFO |       id     : -v
Wed May 31 05:07:22 2017 - INFO | running: ['fence_ipmilan', '-a', 'client-address-imm.redhat.com', '-v', '-l', 'username', '-p', 'password', '-o', 'status']
Wed May 31 05:07:24 2017 - INFO | received: Status: ON

Wed May 31 05:07:24 2017 - INFO | Exception occured: <type 'exceptions.IndexError'>
Wed May 31 05:07:24 2017 - INFO | Exception value: tuple index out of range
Wed May 31 05:07:24 2017 - INFO | Exception Info:
  File "/usr/lib/python2.6/site-packages/cobbler/remote.py", line 1762, in _dispatch
    return method_handle(*params)
   File "/usr/lib/python2.6/site-packages/cobbler/remote.py", line 1719, in power_system
    rc=self.api.power_status(obj, user=None, password=None, logger=logger)
   File "/usr/lib/python2.6/site-packages/cobbler/api.py", line 825, in power_status
    return action_power.PowerTool(self._config, system, self, user, password, logger = logger).power("status")
   File "/usr/lib/python2.6/site-packages/cobbler/action_power.py", line 115, in power
    power_status = match.groups()[2]

/usr/lib/python2.6/site-packages/cobbler/action_power.py:
  match = re.match('(^Status:\s)(ON|OFF)', output)
matches only 2 groups so
  power_status = match.groups()[2]
is out of range


 - When it is OFF:

Wed May 31 07:01:50 2017 - INFO | cobbler power configuration is:
Wed May 31 07:01:50 2017 - INFO |       type   : ipmilan
Wed May 31 07:01:50 2017 - INFO |       address: client-address-imm.redhat.com
Wed May 31 07:01:50 2017 - INFO |       user   : username
Wed May 31 07:01:50 2017 - INFO |       id     : 
Wed May 31 07:01:50 2017 - INFO | running: ['fence_ipmilan', '-a', 'client-address-imm.redhat.com', '-l', 'username', '-p', 'password', '-o', 'status']
Wed May 31 07:01:51 2017 - INFO | received: Status: OFF

Wed May 31 07:01:53 2017 - INFO | running: ['fence_ipmilan', '-a', 'client-address-imm.redhat.com', '-l', 'username', '-p', 'password', '-o', 'status']
Wed May 31 07:01:55 2017 - INFO | received: Status: OFF

Wed May 31 07:01:57 2017 - INFO | running: ['fence_ipmilan', '-a', 'client-address-imm.redhat.com', '-l', 'username', '-p', 'password', '-o', 'status']
Wed May 31 07:01:58 2017 - INFO | received: Status: OFF

Wed May 31 07:02:00 2017 - DEBUG | REMOTE expiring token; user(<DIRECT>)
Wed May 31 07:02:00 2017 - DEBUG | get_items; ['distro']
Wed May 31 07:02:00 2017 - DEBUG | get_items; ['profile']
Wed May 31 07:02:00 2017 - INFO | running: ['fence_ipmilan', '-a', 'client-address-imm.redhat.com', '-l', 'username', '-p', 'password', '-o', 'status']
Wed May 31 07:02:01 2017 - INFO | received: Status: OFF

Wed May 31 07:02:03 2017 - INFO | running: ['fence_ipmilan', '-a', 'client-address-imm.redhat.com', '-l', 'username', '-p', 'password', '-o', 'status']
Wed May 31 07:02:05 2017 - INFO | received: Status: OFF

Wed May 31 07:02:07 2017 - INFO | Exception occured: <class 'cobbler.cexceptions.CX'>
Wed May 31 07:02:07 2017 - INFO | Exception value: 'command failed (rc=2), please validate the physical setup and cobbler config'
Wed May 31 07:02:07 2017 - INFO | Exception Info:
  File "/usr/lib/python2.6/site-packages/cobbler/utils.py", line 123, in die
    raise CX(msg)

Wed May 31 07:02:07 2017 - INFO | Exception occured: <class 'cobbler.cexceptions.CX'>
Wed May 31 07:02:07 2017 - INFO | Exception value: 'command failed (rc=2), please validate the physical setup and cobbler config'
Wed May 31 07:02:07 2017 - INFO | Exception Info:
  File "/usr/lib/python2.6/site-packages/cobbler/remote.py", line 1762, in _dispatch
    return method_handle(*params)
   File "/usr/lib/python2.6/site-packages/cobbler/remote.py", line 1719, in power_system
    rc=self.api.power_status(obj, user=None, password=None, logger=logger)
   File "/usr/lib/python2.6/site-packages/cobbler/api.py", line 825, in power_status
    return action_power.PowerTool(self._config, system, self, user, password, logger = logger).power("status")
   File "/usr/lib/python2.6/site-packages/cobbler/action_power.py", line 127, in power
    utils.die(self.logger,"command failed (rc=%s), please validate the physical setup and cobbler config" % rc)
   File "/usr/lib/python2.6/site-packages/cobbler/utils.py", line 131, in die
    raise CX(msg)

It looks like it does not expect 'Status: OFF' so it reruns the command several times




Version-Release number of selected component (if applicable):
cobbler-2.0.7-66.el6sat.noarch
spacewalk-java-2.5.14-88.el6sat.noarch


How reproducible:
always

Steps to Reproduce:
1. setup IPMI power management for a client
2. Provisioning > Power Management > Get Status (/rhn/systems/details/kickstart/PowerManagement.do?sid=1000010004&)
3. or cobbler system powerstatus --name <profilename>

Comment 1 Jan Dobes 2017-07-28 16:29:01 UTC
This is a regression introduced by spacewalk.git(master):

4569ac912cf597273ca7a75d6e51a15ecdd45817

in 1169741

Comment 2 Jan Dobes 2017-07-31 12:04:26 UTC
First indexing error fixed in spacewalk.git(master):

ec89a3eb61f6f567fdec3ea20359201910191492

it now extracts the value from both output string types - e.g. "Status: ON" and "Chassis power is on" - however I don't know how to get the second output text when using default type ipmilan.

Second failure when "Status: OFF" is not understood is caused by return code 2 of fence_ipmilan command while cobbler code expects return code 0 to evaluate command as successful, fixed (workarounded) in spacewalk.git(master):

694dc8060060ef82402ad5b7c52109368ed3543f

Comment 5 Pavel Studeník 2018-01-18 11:17:50 UTC
It doesn't work cobbler-2.0.7-71.el6sat.noarch

Thu Jan 18 05:58:25 2018 - INFO | received: 

Thu Jan 18 05:58:27 2018 - INFO | Exception Info:
  File "/usr/lib/python2.6/site-packages/cobbler/remote.py", line 1762, in _dispatch
    return method_handle(*params)
   File "/usr/lib/python2.6/site-packages/cobbler/remote.py", line 1719, in power_system
    rc=self.api.power_status(obj, user=None, password=None, logger=logger)
   File "/usr/lib/python2.6/site-packages/cobbler/api.py", line 825, in power_status
    return action_power.PowerTool(self._config, system, self, user, password, logger = logger).power("status")
   File "/usr/lib/python2.6/site-packages/cobbler/action_power.py", line 129, in power
    utils.die(self.logger,"command failed (rc=%s), please validate the physical setup and cobbler config" % rc)
   File "/usr/lib/python2.6/site-packages/cobbler/utils.py", line 131, in die
    raise CX(msg)

Comment 9 Pavel Studeník 2018-01-25 14:58:54 UTC
Verified with cobbler-2.0.7-72.el6sat.noarch

Comment 12 errata-xmlrpc 2018-02-05 13:57:18 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2018:0274


Note You need to log in before you can comment on or make changes to this bug.