94 lines
2.6 KiB
Python
Raw Normal View History

#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
Parameterize iDRAC is ready retries at class level Web Services Management (WS-Management and WS-Man) requests/commands can fail or return invalid results when issued to an integrated Dell Remote Access Controller (iDRAC) whose Lifecycle Controller remote service is not "ready". Specifically, that applies to the WS-Man Enumerate and Invoke operations. A Dell technical white paper [0], "Lifecycle Controller Integration -- Best Practices Guide", states that for Lifecycle Controller firmware 1.5.0 and later "The Lifecycle Controller remote service must be in a 'ready' state before running any other WSMAN commands." That applies to almost all of the workflows and use cases documented by that paper and supported by this project, openstack/python-dracclient. That document describes how to determine the readiness of the Lifecycle Controller remote service. This patch parameterizes the iDRAC is ready retry behavior at the class level. That makes it possible for consumers of this project, such as project openstack/ironic, to configure it library API-wide. Additionally, this patch improves the names of the parameters to class __init__() methods that control the retry behavior on SSL errors, so that they are not confused with those added by this patch. Finally, it defines constants for the default values of the retry behavior on SSL errors and iDRAC is ready retry parameters, and utilizes those new constants. [0] http://en.community.dell.com/techcenter/extras/m/white_papers/20442332 Change-Id: Ie866466a8ddf587a24c6d25ab903ec7b24022ffd Partial-Bug: #1697558 Related-Bug: #1691272 Related-Bug: #1691808
2017-07-07 19:28:02 -04:00
# iDRAC is ready retry constants
DEFAULT_IDRAC_IS_READY_RETRIES = 96
Parameterize iDRAC is ready retries at class level Web Services Management (WS-Management and WS-Man) requests/commands can fail or return invalid results when issued to an integrated Dell Remote Access Controller (iDRAC) whose Lifecycle Controller remote service is not "ready". Specifically, that applies to the WS-Man Enumerate and Invoke operations. A Dell technical white paper [0], "Lifecycle Controller Integration -- Best Practices Guide", states that for Lifecycle Controller firmware 1.5.0 and later "The Lifecycle Controller remote service must be in a 'ready' state before running any other WSMAN commands." That applies to almost all of the workflows and use cases documented by that paper and supported by this project, openstack/python-dracclient. That document describes how to determine the readiness of the Lifecycle Controller remote service. This patch parameterizes the iDRAC is ready retry behavior at the class level. That makes it possible for consumers of this project, such as project openstack/ironic, to configure it library API-wide. Additionally, this patch improves the names of the parameters to class __init__() methods that control the retry behavior on SSL errors, so that they are not confused with those added by this patch. Finally, it defines constants for the default values of the retry behavior on SSL errors and iDRAC is ready retry parameters, and utilizes those new constants. [0] http://en.community.dell.com/techcenter/extras/m/white_papers/20442332 Change-Id: Ie866466a8ddf587a24c6d25ab903ec7b24022ffd Partial-Bug: #1697558 Related-Bug: #1691272 Related-Bug: #1691808
2017-07-07 19:28:02 -04:00
DEFAULT_IDRAC_IS_READY_RETRY_DELAY_SEC = 10
# Web Services Management (WS-Management and WS-Man) SSL retry on error
# behavior constants
DEFAULT_WSMAN_SSL_ERROR_RETRIES = 3
DEFAULT_WSMAN_SSL_ERROR_RETRY_DELAY_SEC = 0
NOT_SUPPORTED_MSG = " operation is not supported on th"
# power states
POWER_ON = 'POWER_ON'
POWER_OFF = 'POWER_OFF'
REBOOT = 'REBOOT'
PRIMARY_STATUS = {
'0': 'unknown',
'1': 'ok',
'2': 'degraded',
'3': 'error'
}
# binary unit constants
UNITS_KI = 2 ** 10
# Lifecycle Controller status constant
LC_IN_RECOVERY = '4'
# Reboot required indicator
# Note: When the iDRAC returns optional for this value, this indicates that
# either a reboot may be performed to complete the operation or a real time
# config job may be created to complete the operation without performing a
# reboot. This library does not currently support creating a real time config
# job, so a reboot must be performed when a value of "optional" is returned.
class RebootRequired(object):
true = 'true'
optional = 'optional'
false = 'false'
@classmethod
def all(cls):
return [cls.true, cls.optional, cls.false]
class RebootJobType(object):
"""Enumeration of different reboot job types."""
power_cycle = 'power_cycle'
"""Hard power off, power on cycle"""
graceful_reboot = 'graceful_reboot'
"""OS level reboot and wait for OS shutdown"""
reboot_forced_shutdown = 'reboot_forced_shutdown'
"""OS level reboot and force power cycle if OS does not shut
down
"""
@classmethod
def all(cls):
return [cls.power_cycle,
cls.graceful_reboot,
cls.reboot_forced_shutdown]
class RaidStatus(object):
"""Enumeration of different volume types."""
jbod = 'JBOD'
"""Just a Bunch of Disks"""
raid = 'RAID'
"""Redundant Array of Independent Disks"""
@classmethod
def all(cls):
return [cls.jbod,
cls.raid]