Get a new OneView client when needed
OneView has the time to expire an active session defined through an idle time. This idle time is 24 hours by default. The previous client, python-oneviewclient, used by the hardware type OneView had a reauthentication mechanism that would ensure the new session was created when the old one expired. With the migration to python-hpOneView, the mechanism to reauthenticate does not exist. This solution creates a new instance of the client when it is needed. Change-Id: Id112e84f7d050d818e3cd9bf02cd9cfe4716ef32 Closes-Bug: 1693788
This commit is contained in:
parent
aa48dcd8ab
commit
faf3f6b210
@ -95,15 +95,15 @@ def get_hponeview_client():
|
|||||||
return hponeview_client.OneViewClient(config)
|
return hponeview_client.OneViewClient(config)
|
||||||
|
|
||||||
|
|
||||||
def get_ilorest_client(oneview_client, server_hardware):
|
def get_ilorest_client(server_hardware):
|
||||||
"""Generate an instance of the iLORest library client.
|
"""Generate an instance of the iLORest library client.
|
||||||
|
|
||||||
:param oneview_client: an instance of a python-hpOneView
|
:param server_hardware: a server hardware uuid or uri
|
||||||
:param: server_hardware: a server hardware uuid or uri
|
|
||||||
:returns: an instance of the iLORest client
|
:returns: an instance of the iLORest client
|
||||||
:raises: InvalidParameterValue if mandatory information is missing on the
|
:raises: InvalidParameterValue if mandatory information is missing on the
|
||||||
node or on invalid input.
|
node or on invalid input.
|
||||||
"""
|
"""
|
||||||
|
oneview_client = get_hponeview_client()
|
||||||
remote_console = oneview_client.server_hardware.get_remote_console_url(
|
remote_console = oneview_client.server_hardware.get_remote_console_url(
|
||||||
server_hardware
|
server_hardware
|
||||||
)
|
)
|
||||||
@ -196,7 +196,7 @@ def get_oneview_info(node):
|
|||||||
return oneview_info
|
return oneview_info
|
||||||
|
|
||||||
|
|
||||||
def validate_oneview_resources_compatibility(oneview_client, task):
|
def validate_oneview_resources_compatibility(task):
|
||||||
"""Validate if the node configuration is consistent with OneView.
|
"""Validate if the node configuration is consistent with OneView.
|
||||||
|
|
||||||
This method calls hpOneView functions to validate if the node
|
This method calls hpOneView functions to validate if the node
|
||||||
@ -205,11 +205,11 @@ def validate_oneview_resources_compatibility(oneview_client, task):
|
|||||||
serverProfileTemplateUri, enclosureGroupUri and node ports. If any
|
serverProfileTemplateUri, enclosureGroupUri and node ports. If any
|
||||||
validation fails, the driver will raise an appropriate OneViewError.
|
validation fails, the driver will raise an appropriate OneViewError.
|
||||||
|
|
||||||
:param oneview_client: an instance of the OneView client
|
|
||||||
:param: task: a TaskManager instance containing the node to act on.
|
:param: task: a TaskManager instance containing the node to act on.
|
||||||
:raises: OneViewError if any validation fails.
|
:raises: OneViewError if any validation fails.
|
||||||
"""
|
"""
|
||||||
ports = task.ports
|
ports = task.ports
|
||||||
|
oneview_client = get_hponeview_client()
|
||||||
oneview_info = get_oneview_info(task.node)
|
oneview_info = get_oneview_info(task.node)
|
||||||
|
|
||||||
_validate_node_server_profile_template(oneview_client, oneview_info)
|
_validate_node_server_profile_template(oneview_client, oneview_info)
|
||||||
@ -254,22 +254,22 @@ def node_has_server_profile(func):
|
|||||||
"""
|
"""
|
||||||
def inner(self, *args, **kwargs):
|
def inner(self, *args, **kwargs):
|
||||||
task = args[0]
|
task = args[0]
|
||||||
has_server_profile(task, self.client)
|
has_server_profile(task)
|
||||||
return func(self, *args, **kwargs)
|
return func(self, *args, **kwargs)
|
||||||
return inner
|
return inner
|
||||||
|
|
||||||
|
|
||||||
def has_server_profile(task, client):
|
def has_server_profile(task):
|
||||||
"""Checks if the node's Server Hardware has a Server Profile associated.
|
"""Checks if the node's Server Hardware has a Server Profile associated.
|
||||||
|
|
||||||
Function to check if the Server Profile is applied to the Server Hardware.
|
Function to check if the Server Profile is applied to the Server Hardware.
|
||||||
|
|
||||||
:param client: an instance of the OneView client
|
|
||||||
:param task: a TaskManager instance containing the node to act on.
|
:param task: a TaskManager instance containing the node to act on.
|
||||||
"""
|
"""
|
||||||
|
oneview_client = get_hponeview_client()
|
||||||
try:
|
try:
|
||||||
profile = task.node.driver_info.get('applied_server_profile_uri')
|
profile = task.node.driver_info.get('applied_server_profile_uri')
|
||||||
client.server_profiles.get(profile)
|
oneview_client.server_profiles.get(profile)
|
||||||
except client_exception.HPOneViewException as exc:
|
except client_exception.HPOneViewException as exc:
|
||||||
LOG.error(
|
LOG.error(
|
||||||
"Failed to get server profile from OneView appliance for"
|
"Failed to get server profile from OneView appliance for"
|
||||||
@ -279,10 +279,9 @@ def has_server_profile(task, client):
|
|||||||
raise exception.OneViewError(error=exc)
|
raise exception.OneViewError(error=exc)
|
||||||
|
|
||||||
|
|
||||||
def _get_server_hardware_mac_from_ilo(oneview_client, server_hardware):
|
def _get_server_hardware_mac_from_ilo(server_hardware):
|
||||||
"""Get the MAC of Server Hardware's iLO controller.
|
"""Get the MAC of Server Hardware's iLO controller.
|
||||||
|
|
||||||
:param: oneview_client: an instance of the HPE OneView client
|
|
||||||
:param: server_hardware: a server hardware uuid or uri
|
:param: server_hardware: a server hardware uuid or uri
|
||||||
:return: MAC of Server Hardware's iLO controller.
|
:return: MAC of Server Hardware's iLO controller.
|
||||||
:raises: InvalidParameterValue if required iLO credentials are missing.
|
:raises: InvalidParameterValue if required iLO credentials are missing.
|
||||||
@ -290,7 +289,7 @@ def _get_server_hardware_mac_from_ilo(oneview_client, server_hardware):
|
|||||||
if fails to get JSON object with the default path.
|
if fails to get JSON object with the default path.
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
client = get_ilorest_client(oneview_client, server_hardware)
|
client = get_ilorest_client(server_hardware)
|
||||||
ilo_path = "/rest/v1/systems/1"
|
ilo_path = "/rest/v1/systems/1"
|
||||||
hardware = jsonutils.loads(client.get(ilo_path).text)
|
hardware = jsonutils.loads(client.get(ilo_path).text)
|
||||||
hardware_mac = hardware['HostCorrelation']['HostMACAddress'][0]
|
hardware_mac = hardware['HostCorrelation']['HostMACAddress'][0]
|
||||||
@ -497,8 +496,7 @@ def _validate_node_port_mac_server_hardware(oneview_client,
|
|||||||
try:
|
try:
|
||||||
mac = _get_server_hardware_mac(server_hardware)
|
mac = _get_server_hardware_mac(server_hardware)
|
||||||
except exception.OneViewError:
|
except exception.OneViewError:
|
||||||
mac = _get_server_hardware_mac_from_ilo(
|
mac = _get_server_hardware_mac_from_ilo(server_hardware)
|
||||||
oneview_client, server_hardware)
|
|
||||||
|
|
||||||
incompatible_macs = []
|
incompatible_macs = []
|
||||||
for port in ports:
|
for port in ports:
|
||||||
|
@ -66,9 +66,7 @@ class OneViewPeriodicTasks(object):
|
|||||||
node = objects.Node.get(context, node_uuid)
|
node = objects.Node.get(context, node_uuid)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
oneview_using = deploy_utils.is_node_in_use_by_oneview(
|
oneview_using = deploy_utils.is_node_in_use_by_oneview(node)
|
||||||
self.client, node
|
|
||||||
)
|
|
||||||
except exception.OneViewError as e:
|
except exception.OneViewError as e:
|
||||||
# NOTE(xavierr): Skip this node and process the
|
# NOTE(xavierr): Skip this node and process the
|
||||||
# remaining nodes. This node will be checked in
|
# remaining nodes. This node will be checked in
|
||||||
@ -128,7 +126,7 @@ class OneViewPeriodicTasks(object):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
oneview_using = deploy_utils.is_node_in_use_by_oneview(
|
oneview_using = deploy_utils.is_node_in_use_by_oneview(
|
||||||
self.client, node
|
node
|
||||||
)
|
)
|
||||||
except exception.OneViewError as e:
|
except exception.OneViewError as e:
|
||||||
# NOTE(xavierr): Skip this node and process the
|
# NOTE(xavierr): Skip this node and process the
|
||||||
@ -218,10 +216,6 @@ class OneViewIscsiDeploy(iscsi_deploy.ISCSIDeploy, OneViewPeriodicTasks):
|
|||||||
|
|
||||||
oneview_driver = common.ISCSI_PXE_ONEVIEW
|
oneview_driver = common.ISCSI_PXE_ONEVIEW
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(OneViewIscsiDeploy, self).__init__()
|
|
||||||
self.client = common.get_hponeview_client()
|
|
||||||
|
|
||||||
def get_properties(self):
|
def get_properties(self):
|
||||||
return deploy_utils.get_properties()
|
return deploy_utils.get_properties()
|
||||||
|
|
||||||
@ -229,30 +223,30 @@ class OneViewIscsiDeploy(iscsi_deploy.ISCSIDeploy, OneViewPeriodicTasks):
|
|||||||
def validate(self, task):
|
def validate(self, task):
|
||||||
common.verify_node_info(task.node)
|
common.verify_node_info(task.node)
|
||||||
try:
|
try:
|
||||||
common.validate_oneview_resources_compatibility(self.client, task)
|
common.validate_oneview_resources_compatibility(task)
|
||||||
except exception.OneViewError as oneview_exc:
|
except exception.OneViewError as oneview_exc:
|
||||||
raise exception.InvalidParameterValue(oneview_exc)
|
raise exception.InvalidParameterValue(oneview_exc)
|
||||||
super(OneViewIscsiDeploy, self).validate(task)
|
super(OneViewIscsiDeploy, self).validate(task)
|
||||||
|
|
||||||
@METRICS.timer('OneViewIscsiDeploy.prepare')
|
@METRICS.timer('OneViewIscsiDeploy.prepare')
|
||||||
def prepare(self, task):
|
def prepare(self, task):
|
||||||
deploy_utils.prepare(self.client, task)
|
deploy_utils.prepare(task)
|
||||||
super(OneViewIscsiDeploy, self).prepare(task)
|
super(OneViewIscsiDeploy, self).prepare(task)
|
||||||
|
|
||||||
@METRICS.timer('OneViewIscsiDeploy.tear_down')
|
@METRICS.timer('OneViewIscsiDeploy.tear_down')
|
||||||
def tear_down(self, task):
|
def tear_down(self, task):
|
||||||
if not CONF.conductor.automated_clean:
|
if not CONF.conductor.automated_clean:
|
||||||
deploy_utils.tear_down(self.client, task)
|
deploy_utils.tear_down(task)
|
||||||
return super(OneViewIscsiDeploy, self).tear_down(task)
|
return super(OneViewIscsiDeploy, self).tear_down(task)
|
||||||
|
|
||||||
@METRICS.timer('OneViewIscsiDeploy.prepare_cleaning')
|
@METRICS.timer('OneViewIscsiDeploy.prepare_cleaning')
|
||||||
def prepare_cleaning(self, task):
|
def prepare_cleaning(self, task):
|
||||||
deploy_utils.prepare_cleaning(self.client, task)
|
deploy_utils.prepare_cleaning(task)
|
||||||
return super(OneViewIscsiDeploy, self).prepare_cleaning(task)
|
return super(OneViewIscsiDeploy, self).prepare_cleaning(task)
|
||||||
|
|
||||||
@METRICS.timer('OneViewIscsiDeploy.tear_down_cleaning')
|
@METRICS.timer('OneViewIscsiDeploy.tear_down_cleaning')
|
||||||
def tear_down_cleaning(self, task):
|
def tear_down_cleaning(self, task):
|
||||||
deploy_utils.tear_down_cleaning(self.client, task)
|
deploy_utils.tear_down_cleaning(task)
|
||||||
super(OneViewIscsiDeploy, self).tear_down_cleaning(task)
|
super(OneViewIscsiDeploy, self).tear_down_cleaning(task)
|
||||||
|
|
||||||
|
|
||||||
@ -261,10 +255,6 @@ class OneViewAgentDeploy(agent.AgentDeploy, OneViewPeriodicTasks):
|
|||||||
|
|
||||||
oneview_driver = common.AGENT_PXE_ONEVIEW
|
oneview_driver = common.AGENT_PXE_ONEVIEW
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(OneViewAgentDeploy, self).__init__()
|
|
||||||
self.client = common.get_hponeview_client()
|
|
||||||
|
|
||||||
def get_properties(self):
|
def get_properties(self):
|
||||||
return deploy_utils.get_properties()
|
return deploy_utils.get_properties()
|
||||||
|
|
||||||
@ -272,28 +262,28 @@ class OneViewAgentDeploy(agent.AgentDeploy, OneViewPeriodicTasks):
|
|||||||
def validate(self, task):
|
def validate(self, task):
|
||||||
common.verify_node_info(task.node)
|
common.verify_node_info(task.node)
|
||||||
try:
|
try:
|
||||||
common.validate_oneview_resources_compatibility(self.client, task)
|
common.validate_oneview_resources_compatibility(task)
|
||||||
except exception.OneViewError as oneview_exc:
|
except exception.OneViewError as oneview_exc:
|
||||||
raise exception.InvalidParameterValue(oneview_exc)
|
raise exception.InvalidParameterValue(oneview_exc)
|
||||||
super(OneViewAgentDeploy, self).validate(task)
|
super(OneViewAgentDeploy, self).validate(task)
|
||||||
|
|
||||||
@METRICS.timer('OneViewAgentDeploy.prepare')
|
@METRICS.timer('OneViewAgentDeploy.prepare')
|
||||||
def prepare(self, task):
|
def prepare(self, task):
|
||||||
deploy_utils.prepare(self.client, task)
|
deploy_utils.prepare(task)
|
||||||
super(OneViewAgentDeploy, self).prepare(task)
|
super(OneViewAgentDeploy, self).prepare(task)
|
||||||
|
|
||||||
@METRICS.timer('OneViewAgentDeploy.tear_down')
|
@METRICS.timer('OneViewAgentDeploy.tear_down')
|
||||||
def tear_down(self, task):
|
def tear_down(self, task):
|
||||||
if not CONF.conductor.automated_clean:
|
if not CONF.conductor.automated_clean:
|
||||||
deploy_utils.tear_down(self.client, task)
|
deploy_utils.tear_down(task)
|
||||||
return super(OneViewAgentDeploy, self).tear_down(task)
|
return super(OneViewAgentDeploy, self).tear_down(task)
|
||||||
|
|
||||||
@METRICS.timer('OneViewAgentDeploy.prepare_cleaning')
|
@METRICS.timer('OneViewAgentDeploy.prepare_cleaning')
|
||||||
def prepare_cleaning(self, task):
|
def prepare_cleaning(self, task):
|
||||||
deploy_utils.prepare_cleaning(self.client, task)
|
deploy_utils.prepare_cleaning(task)
|
||||||
return super(OneViewAgentDeploy, self).prepare_cleaning(task)
|
return super(OneViewAgentDeploy, self).prepare_cleaning(task)
|
||||||
|
|
||||||
@METRICS.timer('OneViewAgentDeploy.tear_down_cleaning')
|
@METRICS.timer('OneViewAgentDeploy.tear_down_cleaning')
|
||||||
def tear_down_cleaning(self, task):
|
def tear_down_cleaning(self, task):
|
||||||
deploy_utils.tear_down_cleaning(self.client, task)
|
deploy_utils.tear_down_cleaning(task)
|
||||||
super(OneViewAgentDeploy, self).tear_down_cleaning(task)
|
super(OneViewAgentDeploy, self).tear_down_cleaning(task)
|
||||||
|
@ -32,14 +32,13 @@ def get_properties():
|
|||||||
return common.COMMON_PROPERTIES
|
return common.COMMON_PROPERTIES
|
||||||
|
|
||||||
|
|
||||||
def prepare(client, task):
|
def prepare(task):
|
||||||
"""Apply Server Profile and update the node when preparing.
|
"""Apply Server Profile and update the node when preparing.
|
||||||
|
|
||||||
This method is responsible for applying a Server Profile to the Server
|
This method is responsible for applying a Server Profile to the Server
|
||||||
Hardware and add the uri of the applied Server Profile in the node's
|
Hardware and add the uri of the applied Server Profile in the node's
|
||||||
'applied_server_profile_uri' field on properties/capabilities.
|
'applied_server_profile_uri' field on properties/capabilities.
|
||||||
|
|
||||||
:param client: an instance of the OneView client
|
|
||||||
:param task: A TaskManager object
|
:param task: A TaskManager object
|
||||||
:raises InstanceDeployFailure: If the node doesn't have the needed OneView
|
:raises InstanceDeployFailure: If the node doesn't have the needed OneView
|
||||||
informations, if Server Hardware is in use by an OneView user, or
|
informations, if Server Hardware is in use by an OneView user, or
|
||||||
@ -55,14 +54,13 @@ def prepare(client, task):
|
|||||||
{"instance_name": instance_display_name,
|
{"instance_name": instance_display_name,
|
||||||
"instance_uuid": instance_uuid}
|
"instance_uuid": instance_uuid}
|
||||||
)
|
)
|
||||||
allocate_server_hardware_to_ironic(client, task.node,
|
allocate_server_hardware_to_ironic(task.node, server_profile_name)
|
||||||
server_profile_name)
|
|
||||||
except exception.OneViewError as e:
|
except exception.OneViewError as e:
|
||||||
raise exception.InstanceDeployFailure(node=task.node.uuid,
|
raise exception.InstanceDeployFailure(node=task.node.uuid,
|
||||||
reason=e)
|
reason=e)
|
||||||
|
|
||||||
|
|
||||||
def tear_down(client, task):
|
def tear_down(task):
|
||||||
"""Remove Server profile and update the node when tear down.
|
"""Remove Server profile and update the node when tear down.
|
||||||
|
|
||||||
This method is responsible for power a Server Hardware off, remove a Server
|
This method is responsible for power a Server Hardware off, remove a Server
|
||||||
@ -70,26 +68,24 @@ def tear_down(client, task):
|
|||||||
Profile from the node's 'applied_server_profile_uri' in
|
Profile from the node's 'applied_server_profile_uri' in
|
||||||
properties/capabilities.
|
properties/capabilities.
|
||||||
|
|
||||||
:param client: an instance of the OneView client
|
|
||||||
:param task: A TaskManager object
|
:param task: A TaskManager object
|
||||||
:raises InstanceDeployFailure: If node has no uri of applied Server
|
:raises InstanceDeployFailure: If node has no uri of applied Server
|
||||||
Profile, or if some error occur while deleting Server Profile.
|
Profile, or if some error occur while deleting Server Profile.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
deallocate_server_hardware_from_ironic(client, task)
|
deallocate_server_hardware_from_ironic(task)
|
||||||
except exception.OneViewError as e:
|
except exception.OneViewError as e:
|
||||||
raise exception.InstanceDeployFailure(node=task.node.uuid, reason=e)
|
raise exception.InstanceDeployFailure(node=task.node.uuid, reason=e)
|
||||||
|
|
||||||
|
|
||||||
def prepare_cleaning(client, task):
|
def prepare_cleaning(task):
|
||||||
"""Apply Server Profile and update the node when preparing cleaning.
|
"""Apply Server Profile and update the node when preparing cleaning.
|
||||||
|
|
||||||
This method is responsible for applying a Server Profile to the Server
|
This method is responsible for applying a Server Profile to the Server
|
||||||
Hardware and add the uri of the applied Server Profile in the node's
|
Hardware and add the uri of the applied Server Profile in the node's
|
||||||
'applied_server_profile_uri' field on properties/capabilities.
|
'applied_server_profile_uri' field on properties/capabilities.
|
||||||
|
|
||||||
:param client: an instance of the OneView client
|
|
||||||
:param task: A TaskManager object
|
:param task: A TaskManager object
|
||||||
:raises NodeCleaningFailure: If the node doesn't have the needed OneView
|
:raises NodeCleaningFailure: If the node doesn't have the needed OneView
|
||||||
informations, if Server Hardware is in use by an OneView user, or
|
informations, if Server Hardware is in use by an OneView user, or
|
||||||
@ -98,8 +94,7 @@ def prepare_cleaning(client, task):
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
server_profile_name = "Ironic Cleaning [%s]" % task.node.uuid
|
server_profile_name = "Ironic Cleaning [%s]" % task.node.uuid
|
||||||
allocate_server_hardware_to_ironic(client, task.node,
|
allocate_server_hardware_to_ironic(task.node, server_profile_name)
|
||||||
server_profile_name)
|
|
||||||
except exception.OneViewError as e:
|
except exception.OneViewError as e:
|
||||||
oneview_error = common.SERVER_HARDWARE_ALLOCATION_ERROR
|
oneview_error = common.SERVER_HARDWARE_ALLOCATION_ERROR
|
||||||
driver_internal_info = task.node.driver_internal_info
|
driver_internal_info = task.node.driver_internal_info
|
||||||
@ -110,7 +105,7 @@ def prepare_cleaning(client, task):
|
|||||||
reason=e)
|
reason=e)
|
||||||
|
|
||||||
|
|
||||||
def tear_down_cleaning(client, task):
|
def tear_down_cleaning(task):
|
||||||
"""Remove Server profile and update the node when tear down cleaning.
|
"""Remove Server profile and update the node when tear down cleaning.
|
||||||
|
|
||||||
This method is responsible for power a Server Hardware off, remove a Server
|
This method is responsible for power a Server Hardware off, remove a Server
|
||||||
@ -118,14 +113,13 @@ def tear_down_cleaning(client, task):
|
|||||||
Profile from the node's 'applied_server_profile_uri' in
|
Profile from the node's 'applied_server_profile_uri' in
|
||||||
properties/capabilities.
|
properties/capabilities.
|
||||||
|
|
||||||
:param client: an instance of the OneView client
|
|
||||||
:param task: A TaskManager object
|
:param task: A TaskManager object
|
||||||
:raises NodeCleaningFailure: If node has no uri of applied Server Profile,
|
:raises NodeCleaningFailure: If node has no uri of applied Server Profile,
|
||||||
or if some error occur while deleting Server Profile.
|
or if some error occur while deleting Server Profile.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
deallocate_server_hardware_from_ironic(client, task)
|
deallocate_server_hardware_from_ironic(task)
|
||||||
except exception.OneViewError as e:
|
except exception.OneViewError as e:
|
||||||
raise exception.NodeCleaningFailure(node=task.node.uuid, reason=e)
|
raise exception.NodeCleaningFailure(node=task.node.uuid, reason=e)
|
||||||
|
|
||||||
@ -171,10 +165,9 @@ def _is_node_in_use(server_hardware, applied_sp_uri, by_oneview=False):
|
|||||||
operation(applied_sp_uri, server_profile_uri))
|
operation(applied_sp_uri, server_profile_uri))
|
||||||
|
|
||||||
|
|
||||||
def is_node_in_use_by_oneview(client, node):
|
def is_node_in_use_by_oneview(node):
|
||||||
"""Check if node is in use by OneView user.
|
"""Check if node is in use by OneView user.
|
||||||
|
|
||||||
:param client: an instance of the OneView client
|
|
||||||
:param node: an ironic node object
|
:param node: an ironic node object
|
||||||
:returns: Boolean value. True if node is in use by OneView,
|
:returns: Boolean value. True if node is in use by OneView,
|
||||||
False otherwise.
|
False otherwise.
|
||||||
@ -185,6 +178,7 @@ def is_node_in_use_by_oneview(client, node):
|
|||||||
"""
|
"""
|
||||||
positive = _("Node '%s' is in use by OneView.") % node.uuid
|
positive = _("Node '%s' is in use by OneView.") % node.uuid
|
||||||
negative = _("Node '%s' is not in use by OneView.") % node.uuid
|
negative = _("Node '%s' is not in use by OneView.") % node.uuid
|
||||||
|
client = common.get_hponeview_client()
|
||||||
|
|
||||||
def predicate(server_hardware, applied_sp_uri):
|
def predicate(server_hardware, applied_sp_uri):
|
||||||
# Check if Profile exists in Oneview and it is different of the one
|
# Check if Profile exists in Oneview and it is different of the one
|
||||||
@ -196,10 +190,9 @@ def is_node_in_use_by_oneview(client, node):
|
|||||||
predicate, positive, negative)
|
predicate, positive, negative)
|
||||||
|
|
||||||
|
|
||||||
def is_node_in_use_by_ironic(client, node):
|
def is_node_in_use_by_ironic(node):
|
||||||
"""Check if node is in use by ironic in OneView.
|
"""Check if node is in use by ironic in OneView.
|
||||||
|
|
||||||
:param client: an instance of the HPE OneView client
|
|
||||||
:param node: an ironic node object
|
:param node: an ironic node object
|
||||||
:returns: Boolean value. True if node is in use by ironic,
|
:returns: Boolean value. True if node is in use by ironic,
|
||||||
False otherwise.
|
False otherwise.
|
||||||
@ -210,6 +203,7 @@ def is_node_in_use_by_ironic(client, node):
|
|||||||
"""
|
"""
|
||||||
positive = _("Node '%s' is in use by Ironic.") % node.uuid
|
positive = _("Node '%s' is in use by Ironic.") % node.uuid
|
||||||
negative = _("Node '%s' is not in use by Ironic.") % node.uuid
|
negative = _("Node '%s' is not in use by Ironic.") % node.uuid
|
||||||
|
client = common.get_hponeview_client()
|
||||||
|
|
||||||
def predicate(server_hardware, applied_sp_uri):
|
def predicate(server_hardware, applied_sp_uri):
|
||||||
# Check if Profile exists in Oneview and it is equals of the one
|
# Check if Profile exists in Oneview and it is equals of the one
|
||||||
@ -280,11 +274,9 @@ def _del_applied_server_profile_uri_field(node):
|
|||||||
node.save()
|
node.save()
|
||||||
|
|
||||||
|
|
||||||
def allocate_server_hardware_to_ironic(client, node,
|
def allocate_server_hardware_to_ironic(node, server_profile_name):
|
||||||
server_profile_name):
|
|
||||||
"""Allocate Server Hardware to ironic.
|
"""Allocate Server Hardware to ironic.
|
||||||
|
|
||||||
:param client: an instance of the OneView client
|
|
||||||
:param node: an ironic node object
|
:param node: an ironic node object
|
||||||
:param server_profile_name: a formatted string with the Server Profile
|
:param server_profile_name: a formatted string with the Server Profile
|
||||||
name
|
name
|
||||||
@ -292,7 +284,8 @@ def allocate_server_hardware_to_ironic(client, node,
|
|||||||
Hardware to ironic
|
Hardware to ironic
|
||||||
|
|
||||||
"""
|
"""
|
||||||
node_in_use_by_oneview = is_node_in_use_by_oneview(client, node)
|
client = common.get_hponeview_client()
|
||||||
|
node_in_use_by_oneview = is_node_in_use_by_oneview(node)
|
||||||
|
|
||||||
if not node_in_use_by_oneview:
|
if not node_in_use_by_oneview:
|
||||||
oneview_info = common.get_oneview_info(node)
|
oneview_info = common.get_oneview_info(node)
|
||||||
@ -347,17 +340,17 @@ def allocate_server_hardware_to_ironic(client, node,
|
|||||||
raise exception.OneViewError(error=msg)
|
raise exception.OneViewError(error=msg)
|
||||||
|
|
||||||
|
|
||||||
def deallocate_server_hardware_from_ironic(client, task):
|
def deallocate_server_hardware_from_ironic(task):
|
||||||
"""Deallocate Server Hardware from ironic.
|
"""Deallocate Server Hardware from ironic.
|
||||||
|
|
||||||
:param client: an instance of the OneView client
|
|
||||||
:param task: a TaskManager object
|
:param task: a TaskManager object
|
||||||
:raises OneViewError: if an error occurs while deallocating the Server
|
:raises OneViewError: if an error occurs while deallocating the Server
|
||||||
Hardware to ironic
|
Hardware to ironic
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
client = common.get_hponeview_client()
|
||||||
node = task.node
|
node = task.node
|
||||||
if is_node_in_use_by_ironic(client, node):
|
if is_node_in_use_by_ironic(node):
|
||||||
oneview_info = common.get_oneview_info(node)
|
oneview_info = common.get_oneview_info(node)
|
||||||
server_profile_uri = oneview_info.get('applied_server_profile_uri')
|
server_profile_uri = oneview_info.get('applied_server_profile_uri')
|
||||||
|
|
||||||
|
@ -30,10 +30,6 @@ METRICS = metrics_utils.get_metrics_logger(__name__)
|
|||||||
class OneViewInspect(inspector.Inspector):
|
class OneViewInspect(inspector.Inspector):
|
||||||
"""Interface for in band inspection."""
|
"""Interface for in band inspection."""
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(OneViewInspect, self).__init__()
|
|
||||||
self.client = common.get_hponeview_client()
|
|
||||||
|
|
||||||
def get_properties(self):
|
def get_properties(self):
|
||||||
return deploy_utils.get_properties()
|
return deploy_utils.get_properties()
|
||||||
|
|
||||||
@ -54,7 +50,7 @@ class OneViewInspect(inspector.Inspector):
|
|||||||
common.verify_node_info(task.node)
|
common.verify_node_info(task.node)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
common.validate_oneview_resources_compatibility(self.client, task)
|
common.validate_oneview_resources_compatibility(task)
|
||||||
except exception.OneViewError as oneview_exc:
|
except exception.OneViewError as oneview_exc:
|
||||||
raise exception.InvalidParameterValue(oneview_exc)
|
raise exception.InvalidParameterValue(oneview_exc)
|
||||||
|
|
||||||
@ -62,7 +58,7 @@ class OneViewInspect(inspector.Inspector):
|
|||||||
def inspect_hardware(self, task):
|
def inspect_hardware(self, task):
|
||||||
profile_name = 'Ironic Inspecting [%s]' % task.node.uuid
|
profile_name = 'Ironic Inspecting [%s]' % task.node.uuid
|
||||||
deploy_utils.allocate_server_hardware_to_ironic(
|
deploy_utils.allocate_server_hardware_to_ironic(
|
||||||
self.client, task.node, profile_name
|
task.node, profile_name
|
||||||
)
|
)
|
||||||
return super(OneViewInspect, self).inspect_hardware(task)
|
return super(OneViewInspect, self).inspect_hardware(task)
|
||||||
|
|
||||||
@ -93,8 +89,6 @@ class OneViewInspect(inspector.Inspector):
|
|||||||
if state_before == states.INSPECTING and state_after in [
|
if state_before == states.INSPECTING and state_after in [
|
||||||
states.MANAGEABLE, states.INSPECTFAIL
|
states.MANAGEABLE, states.INSPECTFAIL
|
||||||
]:
|
]:
|
||||||
deploy_utils.deallocate_server_hardware_from_ironic(
|
deploy_utils.deallocate_server_hardware_from_ironic(task.node)
|
||||||
self.client, task.node
|
|
||||||
)
|
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
@ -68,9 +68,8 @@ def set_onetime_boot(task):
|
|||||||
persistent = next_boot_device.get('persistent')
|
persistent = next_boot_device.get('persistent')
|
||||||
|
|
||||||
if not persistent:
|
if not persistent:
|
||||||
client = common.get_hponeview_client()
|
|
||||||
server_hardware = task.node.driver_info.get('server_hardware_uri')
|
server_hardware = task.node.driver_info.get('server_hardware_uri')
|
||||||
ilo_client = common.get_ilorest_client(client, server_hardware)
|
ilo_client = common.get_ilorest_client(server_hardware)
|
||||||
boot_device = BOOT_DEVICE_MAP_ILO.get(boot_device)
|
boot_device = BOOT_DEVICE_MAP_ILO.get(boot_device)
|
||||||
body = {
|
body = {
|
||||||
"Boot": {
|
"Boot": {
|
||||||
@ -93,9 +92,8 @@ def _is_onetime_boot(task):
|
|||||||
False otherwise.
|
False otherwise.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
client = common.get_hponeview_client()
|
|
||||||
server_hardware = task.node.driver_info.get('server_hardware_uri')
|
server_hardware = task.node.driver_info.get('server_hardware_uri')
|
||||||
ilo_client = common.get_ilorest_client(client, server_hardware)
|
ilo_client = common.get_ilorest_client(server_hardware)
|
||||||
response = ilo_client.get(path=ILO_SYSTEM_PATH,
|
response = ilo_client.get(path=ILO_SYSTEM_PATH,
|
||||||
headers=ILO_REQUEST_HEADERS)
|
headers=ILO_REQUEST_HEADERS)
|
||||||
boot = response.dict.get('Boot')
|
boot = response.dict.get('Boot')
|
||||||
@ -114,7 +112,7 @@ def set_boot_device(task):
|
|||||||
:raises: OneViewError if the communication with OneView fails
|
:raises: OneViewError if the communication with OneView fails
|
||||||
"""
|
"""
|
||||||
client = common.get_hponeview_client()
|
client = common.get_hponeview_client()
|
||||||
common.has_server_profile(task, client)
|
common.has_server_profile(task)
|
||||||
driver_internal_info = task.node.driver_internal_info
|
driver_internal_info = task.node.driver_internal_info
|
||||||
next_boot_device = driver_internal_info.get('next_boot_device')
|
next_boot_device = driver_internal_info.get('next_boot_device')
|
||||||
|
|
||||||
@ -163,10 +161,6 @@ def set_boot_device(task):
|
|||||||
|
|
||||||
class OneViewManagement(base.ManagementInterface):
|
class OneViewManagement(base.ManagementInterface):
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(OneViewManagement, self).__init__()
|
|
||||||
self.client = common.get_hponeview_client()
|
|
||||||
|
|
||||||
def get_properties(self):
|
def get_properties(self):
|
||||||
return deploy_utils.get_properties()
|
return deploy_utils.get_properties()
|
||||||
|
|
||||||
@ -187,12 +181,9 @@ class OneViewManagement(base.ManagementInterface):
|
|||||||
resources in OneView
|
resources in OneView
|
||||||
"""
|
"""
|
||||||
common.verify_node_info(task.node)
|
common.verify_node_info(task.node)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
common.validate_oneview_resources_compatibility(self.client, task)
|
common.validate_oneview_resources_compatibility(task)
|
||||||
if not deploy_utils.is_node_in_use_by_ironic(
|
if not deploy_utils.is_node_in_use_by_ironic(task.node):
|
||||||
self.client, task.node
|
|
||||||
):
|
|
||||||
raise exception.InvalidParameterValue(
|
raise exception.InvalidParameterValue(
|
||||||
_("Node %s is not in use by ironic.") % task.node.uuid)
|
_("Node %s is not in use by ironic.") % task.node.uuid)
|
||||||
except exception.OneViewError as oneview_exc:
|
except exception.OneViewError as oneview_exc:
|
||||||
@ -264,6 +255,7 @@ class OneViewManagement(base.ManagementInterface):
|
|||||||
"""
|
"""
|
||||||
driver_internal_info = task.node.driver_internal_info
|
driver_internal_info = task.node.driver_internal_info
|
||||||
next_boot_device = driver_internal_info.get('next_boot_device')
|
next_boot_device = driver_internal_info.get('next_boot_device')
|
||||||
|
client = common.get_hponeview_client()
|
||||||
|
|
||||||
if next_boot_device:
|
if next_boot_device:
|
||||||
return next_boot_device
|
return next_boot_device
|
||||||
@ -272,7 +264,7 @@ class OneViewManagement(base.ManagementInterface):
|
|||||||
server_profile = driver_info.get('applied_server_profile_uri')
|
server_profile = driver_info.get('applied_server_profile_uri')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
profile = self.client.server_profiles.get(server_profile)
|
profile = client.server_profiles.get(server_profile)
|
||||||
except client_exception.HPOneViewException as exc:
|
except client_exception.HPOneViewException as exc:
|
||||||
msg = _("Error getting boot device from OneView. Error: %s") % exc
|
msg = _("Error getting boot device from OneView. Error: %s") % exc
|
||||||
raise exception.OneViewError(msg)
|
raise exception.OneViewError(msg)
|
||||||
|
@ -56,10 +56,6 @@ SET_POWER_STATE_MAP = {
|
|||||||
|
|
||||||
class OneViewPower(base.PowerInterface):
|
class OneViewPower(base.PowerInterface):
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
super(OneViewPower, self).__init__()
|
|
||||||
self.client = common.get_hponeview_client()
|
|
||||||
|
|
||||||
def get_properties(self):
|
def get_properties(self):
|
||||||
return deploy_utils.get_properties()
|
return deploy_utils.get_properties()
|
||||||
|
|
||||||
@ -88,9 +84,9 @@ class OneViewPower(base.PowerInterface):
|
|||||||
common.verify_node_info(task.node)
|
common.verify_node_info(task.node)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
common.validate_oneview_resources_compatibility(self.client, task)
|
common.validate_oneview_resources_compatibility(task)
|
||||||
|
|
||||||
if deploy_utils.is_node_in_use_by_oneview(self.client, task.node):
|
if deploy_utils.is_node_in_use_by_oneview(task.node):
|
||||||
raise exception.InvalidParameterValue(
|
raise exception.InvalidParameterValue(
|
||||||
_("Node %s is in use by OneView.") % task.node.uuid)
|
_("Node %s is in use by OneView.") % task.node.uuid)
|
||||||
|
|
||||||
@ -108,8 +104,9 @@ class OneViewPower(base.PowerInterface):
|
|||||||
resource
|
resource
|
||||||
"""
|
"""
|
||||||
server_hardware = task.node.driver_info.get('server_hardware_uri')
|
server_hardware = task.node.driver_info.get('server_hardware_uri')
|
||||||
|
client = common.get_hponeview_client()
|
||||||
try:
|
try:
|
||||||
server_hardware = self.client.server_hardware.get(server_hardware)
|
server_hardware = client.server_hardware.get(server_hardware)
|
||||||
except client_exception.HPOneViewException as exc:
|
except client_exception.HPOneViewException as exc:
|
||||||
LOG.error(
|
LOG.error(
|
||||||
"Error getting power state for node %(node)s. Error:"
|
"Error getting power state for node %(node)s. Error:"
|
||||||
@ -135,7 +132,8 @@ class OneViewPower(base.PowerInterface):
|
|||||||
:raises: PowerStateFailure if the power couldn't be set to power_state.
|
:raises: PowerStateFailure if the power couldn't be set to power_state.
|
||||||
:raises: OneViewError if OneView fails setting the power state.
|
:raises: OneViewError if OneView fails setting the power state.
|
||||||
"""
|
"""
|
||||||
if deploy_utils.is_node_in_use_by_oneview(self.client, task.node):
|
client = common.get_hponeview_client()
|
||||||
|
if deploy_utils.is_node_in_use_by_oneview(task.node):
|
||||||
raise exception.PowerStateFailure(_(
|
raise exception.PowerStateFailure(_(
|
||||||
"Cannot set power state '%(power_state)s' to node %(node)s. "
|
"Cannot set power state '%(power_state)s' to node %(node)s. "
|
||||||
"The node is in use by OneView.") %
|
"The node is in use by OneView.") %
|
||||||
@ -157,19 +155,19 @@ class OneViewPower(base.PowerInterface):
|
|||||||
try:
|
try:
|
||||||
if power_state == states.POWER_ON:
|
if power_state == states.POWER_ON:
|
||||||
management.set_boot_device(task)
|
management.set_boot_device(task)
|
||||||
self.client.server_hardware.update_power_state(
|
client.server_hardware.update_power_state(
|
||||||
SET_POWER_STATE_MAP.get(power_state),
|
SET_POWER_STATE_MAP.get(power_state),
|
||||||
server_hardware, timeout=timeout)
|
server_hardware, timeout=timeout)
|
||||||
elif power_state == states.REBOOT:
|
elif power_state == states.REBOOT:
|
||||||
self.client.server_hardware.update_power_state(
|
client.server_hardware.update_power_state(
|
||||||
SET_POWER_STATE_MAP.get(states.POWER_OFF), server_hardware,
|
SET_POWER_STATE_MAP.get(states.POWER_OFF), server_hardware,
|
||||||
timeout=timeout)
|
timeout=timeout)
|
||||||
management.set_boot_device(task)
|
management.set_boot_device(task)
|
||||||
self.client.server_hardware.update_power_state(
|
client.server_hardware.update_power_state(
|
||||||
SET_POWER_STATE_MAP.get(states.POWER_ON), server_hardware,
|
SET_POWER_STATE_MAP.get(states.POWER_ON), server_hardware,
|
||||||
timeout=timeout)
|
timeout=timeout)
|
||||||
else:
|
else:
|
||||||
self.client.server_hardware.update_power_state(
|
client.server_hardware.update_power_state(
|
||||||
SET_POWER_STATE_MAP.get(power_state), server_hardware,
|
SET_POWER_STATE_MAP.get(power_state), server_hardware,
|
||||||
timeout=timeout)
|
timeout=timeout)
|
||||||
except client_exception.HPOneViewException as exc:
|
except client_exception.HPOneViewException as exc:
|
||||||
|
@ -285,8 +285,7 @@ class OneViewCommonTestCase(db_base.DbTestCase):
|
|||||||
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
task.ports = [fake_port]
|
task.ports = [fake_port]
|
||||||
common.validate_oneview_resources_compatibility(oneview_client,
|
common.validate_oneview_resources_compatibility(task)
|
||||||
task)
|
|
||||||
self.assertTrue(mock_sp_template.called)
|
self.assertTrue(mock_sp_template.called)
|
||||||
self.assertTrue(mock_sh_type.called)
|
self.assertTrue(mock_sh_type.called)
|
||||||
self.assertTrue(mock_enclosure.called)
|
self.assertTrue(mock_enclosure.called)
|
||||||
|
@ -81,9 +81,6 @@ def _setup_node_in_cleanfailed_state_without_oneview_error(node):
|
|||||||
class OneViewDriverDeploy(deploy.OneViewPeriodicTasks):
|
class OneViewDriverDeploy(deploy.OneViewPeriodicTasks):
|
||||||
oneview_driver = 'fake_oneview'
|
oneview_driver = 'fake_oneview'
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self.client = mock.MagicMock()
|
|
||||||
|
|
||||||
|
|
||||||
@mock.patch('ironic.objects.Node', spec_set=True, autospec=True)
|
@mock.patch('ironic.objects.Node', spec_set=True, autospec=True)
|
||||||
@mock.patch.object(deploy_utils, 'is_node_in_use_by_oneview')
|
@mock.patch.object(deploy_utils, 'is_node_in_use_by_oneview')
|
||||||
@ -114,9 +111,7 @@ class OneViewPeriodicTasks(db_base.DbTestCase):
|
|||||||
self.deploy._periodic_check_nodes_taken_by_oneview(
|
self.deploy._periodic_check_nodes_taken_by_oneview(
|
||||||
self.os_primary, self.context
|
self.os_primary, self.context
|
||||||
)
|
)
|
||||||
mock_is_node_in_use_by_oneview.assert_called_once_with(
|
mock_is_node_in_use_by_oneview.assert_called_once_with(self.node)
|
||||||
self.deploy.client, self.node
|
|
||||||
)
|
|
||||||
self.assertTrue(self.os_primary.update_node.called)
|
self.assertTrue(self.os_primary.update_node.called)
|
||||||
self.assertTrue(self.os_primary.do_provisioning_action.called)
|
self.assertTrue(self.os_primary.do_provisioning_action.called)
|
||||||
self.assertTrue(self.node.maintenance)
|
self.assertTrue(self.node.maintenance)
|
||||||
@ -133,9 +128,7 @@ class OneViewPeriodicTasks(db_base.DbTestCase):
|
|||||||
self.deploy._periodic_check_nodes_taken_by_oneview(
|
self.deploy._periodic_check_nodes_taken_by_oneview(
|
||||||
self.os_primary, self.context
|
self.os_primary, self.context
|
||||||
)
|
)
|
||||||
mock_is_node_in_use_by_oneview.assert_called_once_with(
|
mock_is_node_in_use_by_oneview.assert_called_once_with(self.node)
|
||||||
self.deploy.client, self.node
|
|
||||||
)
|
|
||||||
self.assertFalse(self.os_primary.update_node.called)
|
self.assertFalse(self.os_primary.update_node.called)
|
||||||
self.assertFalse(self.os_primary.do_provisioning_action.called)
|
self.assertFalse(self.os_primary.do_provisioning_action.called)
|
||||||
self.assertFalse(self.node.maintenance)
|
self.assertFalse(self.node.maintenance)
|
||||||
@ -151,9 +144,7 @@ class OneViewPeriodicTasks(db_base.DbTestCase):
|
|||||||
self.deploy._periodic_check_nodes_taken_by_oneview(
|
self.deploy._periodic_check_nodes_taken_by_oneview(
|
||||||
self.os_primary, self.context
|
self.os_primary, self.context
|
||||||
)
|
)
|
||||||
mock_is_node_in_use_by_oneview.assert_called_once_with(
|
mock_is_node_in_use_by_oneview.assert_called_once_with(self.node)
|
||||||
self.deploy.client, self.node
|
|
||||||
)
|
|
||||||
self.assertFalse(self.os_primary.update_node.called)
|
self.assertFalse(self.os_primary.update_node.called)
|
||||||
self.assertFalse(self.os_primary.do_provisioning_action.called)
|
self.assertFalse(self.os_primary.do_provisioning_action.called)
|
||||||
self.assertFalse(self.node.maintenance)
|
self.assertFalse(self.node.maintenance)
|
||||||
@ -169,9 +160,7 @@ class OneViewPeriodicTasks(db_base.DbTestCase):
|
|||||||
self.deploy._periodic_check_nodes_freed_by_oneview(
|
self.deploy._periodic_check_nodes_freed_by_oneview(
|
||||||
self.os_primary, self.context
|
self.os_primary, self.context
|
||||||
)
|
)
|
||||||
mock_is_node_in_use_by_oneview.assert_called_once_with(
|
mock_is_node_in_use_by_oneview.assert_called_once_with(self.node)
|
||||||
self.deploy.client, self.node
|
|
||||||
)
|
|
||||||
self.assertTrue(self.os_primary.update_node.called)
|
self.assertTrue(self.os_primary.update_node.called)
|
||||||
self.assertTrue(self.os_primary.do_provisioning_action.called)
|
self.assertTrue(self.os_primary.do_provisioning_action.called)
|
||||||
self.assertFalse(self.node.maintenance)
|
self.assertFalse(self.node.maintenance)
|
||||||
@ -186,9 +175,7 @@ class OneViewPeriodicTasks(db_base.DbTestCase):
|
|||||||
self.deploy._periodic_check_nodes_freed_by_oneview(
|
self.deploy._periodic_check_nodes_freed_by_oneview(
|
||||||
self.os_primary, self.context
|
self.os_primary, self.context
|
||||||
)
|
)
|
||||||
mock_is_node_in_use_by_oneview.assert_called_once_with(
|
mock_is_node_in_use_by_oneview.assert_called_once_with(self.node)
|
||||||
self.deploy.client, self.node
|
|
||||||
)
|
|
||||||
self.assertFalse(self.os_primary.update_node.called)
|
self.assertFalse(self.os_primary.update_node.called)
|
||||||
self.assertFalse(self.os_primary.do_provisioning_action.called)
|
self.assertFalse(self.os_primary.do_provisioning_action.called)
|
||||||
self.assertTrue(self.node.maintenance)
|
self.assertTrue(self.node.maintenance)
|
||||||
@ -205,9 +192,7 @@ class OneViewPeriodicTasks(db_base.DbTestCase):
|
|||||||
self.deploy._periodic_check_nodes_freed_by_oneview(
|
self.deploy._periodic_check_nodes_freed_by_oneview(
|
||||||
self.os_primary, self.context
|
self.os_primary, self.context
|
||||||
)
|
)
|
||||||
mock_is_node_in_use_by_oneview.assert_called_once_with(
|
mock_is_node_in_use_by_oneview.assert_called_once_with(self.node)
|
||||||
self.deploy.client, self.node
|
|
||||||
)
|
|
||||||
self.assertFalse(self.os_primary.update_node.called)
|
self.assertFalse(self.os_primary.update_node.called)
|
||||||
self.assertFalse(self.os_primary.do_provisioning_action.called)
|
self.assertFalse(self.os_primary.do_provisioning_action.called)
|
||||||
self.assertTrue(self.node.maintenance)
|
self.assertTrue(self.node.maintenance)
|
||||||
@ -246,7 +231,6 @@ class OneViewPeriodicTasks(db_base.DbTestCase):
|
|||||||
self.assertNotIn('oneview_error', self.node.driver_internal_info)
|
self.assertNotIn('oneview_error', self.node.driver_internal_info)
|
||||||
|
|
||||||
|
|
||||||
@mock.patch.object(common, 'get_hponeview_client')
|
|
||||||
class OneViewIscsiDeployTestCase(db_base.DbTestCase):
|
class OneViewIscsiDeployTestCase(db_base.DbTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -270,7 +254,7 @@ class OneViewIscsiDeployTestCase(db_base.DbTestCase):
|
|||||||
node_id=self.node.id)
|
node_id=self.node.id)
|
||||||
self.info = common.get_oneview_info(self.node)
|
self.info = common.get_oneview_info(self.node)
|
||||||
|
|
||||||
def test_get_properties(self, mock_get_ov_client):
|
def test_get_properties(self):
|
||||||
expected = common.COMMON_PROPERTIES
|
expected = common.COMMON_PROPERTIES
|
||||||
self.assertEqual(expected, self.driver.deploy.get_properties())
|
self.assertEqual(expected, self.driver.deploy.get_properties())
|
||||||
|
|
||||||
@ -278,19 +262,17 @@ class OneViewIscsiDeployTestCase(db_base.DbTestCase):
|
|||||||
spect_set=True, autospec=True)
|
spect_set=True, autospec=True)
|
||||||
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'validate',
|
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'validate',
|
||||||
spec_set=True, autospec=True)
|
spec_set=True, autospec=True)
|
||||||
def test_validate(self, iscsi_deploy_validate_mock,
|
def test_validate(self, iscsi_deploy_validate_mock, mock_validate):
|
||||||
mock_validate_resources, mock_ov_client):
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid,
|
with task_manager.acquire(self.context, self.node.uuid,
|
||||||
shared=False) as task:
|
shared=False) as task:
|
||||||
task.driver.deploy.validate(task)
|
task.driver.deploy.validate(task)
|
||||||
self.assertTrue(mock_validate_resources.called)
|
self.assertTrue(mock_validate.called)
|
||||||
iscsi_deploy_validate_mock.assert_called_once_with(mock.ANY, task)
|
iscsi_deploy_validate_mock.assert_called_once_with(mock.ANY, task)
|
||||||
|
|
||||||
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'prepare', autospec=True)
|
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'prepare', autospec=True)
|
||||||
@mock.patch.object(deploy_utils, 'allocate_server_hardware_to_ironic')
|
@mock.patch.object(deploy_utils, 'allocate_server_hardware_to_ironic')
|
||||||
def test_prepare(
|
def test_prepare(
|
||||||
self, allocate_server_hardware_mock, iscsi_deploy_prepare_mock,
|
self, allocate_server_hardware_mock, iscsi_deploy_prepare_mock):
|
||||||
mock_get_ov_client):
|
|
||||||
self.node.provision_state = states.DEPLOYING
|
self.node.provision_state = states.DEPLOYING
|
||||||
self.node.save()
|
self.node.save()
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
@ -299,8 +281,7 @@ class OneViewIscsiDeployTestCase(db_base.DbTestCase):
|
|||||||
self.assertTrue(allocate_server_hardware_mock.called)
|
self.assertTrue(allocate_server_hardware_mock.called)
|
||||||
|
|
||||||
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'prepare', autospec=True)
|
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'prepare', autospec=True)
|
||||||
def test_prepare_active_node(
|
def test_prepare_active_node(self, iscsi_deploy_prepare_mock):
|
||||||
self, iscsi_deploy_prepare_mock, mock_get_ov_client):
|
|
||||||
"""Ensure nodes in running states are not inadvertently changed."""
|
"""Ensure nodes in running states are not inadvertently changed."""
|
||||||
test_states = list(states.STABLE_STATES)
|
test_states = list(states.STABLE_STATES)
|
||||||
test_states.extend([
|
test_states.extend([
|
||||||
@ -318,13 +299,13 @@ class OneViewIscsiDeployTestCase(db_base.DbTestCase):
|
|||||||
mock.ANY, task)
|
mock.ANY, task)
|
||||||
|
|
||||||
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'deploy', autospec=True)
|
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'deploy', autospec=True)
|
||||||
def test_deploy(self, iscsi_deploy_mock, mock_get_ov_client):
|
def test_deploy(self, iscsi_deploy_mock):
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
task.driver.deploy.deploy(task)
|
task.driver.deploy.deploy(task)
|
||||||
iscsi_deploy_mock.assert_called_once_with(mock.ANY, task)
|
iscsi_deploy_mock.assert_called_once_with(mock.ANY, task)
|
||||||
|
|
||||||
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'tear_down', autospec=True)
|
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'tear_down', autospec=True)
|
||||||
def test_tear_down(self, iscsi_tear_down_mock, mock_get_ov_client):
|
def test_tear_down(self, iscsi_tear_down_mock):
|
||||||
iscsi_tear_down_mock.return_value = states.DELETED
|
iscsi_tear_down_mock.return_value = states.DELETED
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
returned_state = task.driver.deploy.tear_down(task)
|
returned_state = task.driver.deploy.tear_down(task)
|
||||||
@ -334,8 +315,7 @@ class OneViewIscsiDeployTestCase(db_base.DbTestCase):
|
|||||||
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'tear_down', autospec=True)
|
@mock.patch.object(iscsi_deploy.ISCSIDeploy, 'tear_down', autospec=True)
|
||||||
@mock.patch.object(deploy_utils, 'deallocate_server_hardware_from_ironic')
|
@mock.patch.object(deploy_utils, 'deallocate_server_hardware_from_ironic')
|
||||||
def test_tear_down_with_automated_clean_disabled(
|
def test_tear_down_with_automated_clean_disabled(
|
||||||
self, deallocate_server_hardware_mock, iscsi_tear_down_mock,
|
self, deallocate_server_hardware_mock, iscsi_tear_down_mock,):
|
||||||
mock_get_ov_client):
|
|
||||||
CONF.conductor.automated_clean = False
|
CONF.conductor.automated_clean = False
|
||||||
iscsi_tear_down_mock.return_value = states.DELETED
|
iscsi_tear_down_mock.return_value = states.DELETED
|
||||||
|
|
||||||
@ -349,8 +329,7 @@ class OneViewIscsiDeployTestCase(db_base.DbTestCase):
|
|||||||
autospec=True)
|
autospec=True)
|
||||||
@mock.patch.object(deploy_utils, 'allocate_server_hardware_to_ironic')
|
@mock.patch.object(deploy_utils, 'allocate_server_hardware_to_ironic')
|
||||||
def test_prepare_cleaning(
|
def test_prepare_cleaning(
|
||||||
self, allocate_server_hardware_mock, iscsi_prep_clean_mock,
|
self, allocate_server_hardware_mock, iscsi_prep_clean_mock):
|
||||||
mock_get_ov_client):
|
|
||||||
iscsi_prep_clean_mock.return_value = states.CLEANWAIT
|
iscsi_prep_clean_mock.return_value = states.CLEANWAIT
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
ret = task.driver.deploy.prepare_cleaning(task)
|
ret = task.driver.deploy.prepare_cleaning(task)
|
||||||
@ -362,8 +341,7 @@ class OneViewIscsiDeployTestCase(db_base.DbTestCase):
|
|||||||
autospec=True)
|
autospec=True)
|
||||||
@mock.patch.object(deploy_utils, 'deallocate_server_hardware_from_ironic')
|
@mock.patch.object(deploy_utils, 'deallocate_server_hardware_from_ironic')
|
||||||
def test_tear_down_cleaning(
|
def test_tear_down_cleaning(
|
||||||
self, deallocate_server_hardware_mock, iscsi_tear_down_clean_mock,
|
self, deallocate_server_hardware_mock, iscsi_tear_down_clean_mock):
|
||||||
mock_get_ov_client):
|
|
||||||
iscsi_tear_down_clean_mock.return_value = states.CLEANWAIT
|
iscsi_tear_down_clean_mock.return_value = states.CLEANWAIT
|
||||||
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
@ -372,7 +350,6 @@ class OneViewIscsiDeployTestCase(db_base.DbTestCase):
|
|||||||
self.assertTrue(deallocate_server_hardware_mock.called)
|
self.assertTrue(deallocate_server_hardware_mock.called)
|
||||||
|
|
||||||
|
|
||||||
@mock.patch.object(common, 'get_hponeview_client')
|
|
||||||
class OneViewAgentDeployTestCase(db_base.DbTestCase):
|
class OneViewAgentDeployTestCase(db_base.DbTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(OneViewAgentDeployTestCase, self).setUp()
|
super(OneViewAgentDeployTestCase, self).setUp()
|
||||||
@ -395,7 +372,7 @@ class OneViewAgentDeployTestCase(db_base.DbTestCase):
|
|||||||
node_id=self.node.id)
|
node_id=self.node.id)
|
||||||
self.info = common.get_oneview_info(self.node)
|
self.info = common.get_oneview_info(self.node)
|
||||||
|
|
||||||
def test_get_properties(self, mock_get_ov_client):
|
def test_get_properties(self):
|
||||||
expected = common.COMMON_PROPERTIES
|
expected = common.COMMON_PROPERTIES
|
||||||
self.assertEqual(expected, self.driver.deploy.get_properties())
|
self.assertEqual(expected, self.driver.deploy.get_properties())
|
||||||
|
|
||||||
@ -403,19 +380,17 @@ class OneViewAgentDeployTestCase(db_base.DbTestCase):
|
|||||||
spect_set=True, autospec=True)
|
spect_set=True, autospec=True)
|
||||||
@mock.patch.object(agent.AgentDeploy, 'validate',
|
@mock.patch.object(agent.AgentDeploy, 'validate',
|
||||||
spec_set=True, autospec=True)
|
spec_set=True, autospec=True)
|
||||||
def test_validate(self, agent_deploy_validate_mock,
|
def test_validate(self, agent_deploy_validate_mock, mock_validate):
|
||||||
mock_validate_resources, mock_ov_client):
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid,
|
with task_manager.acquire(self.context, self.node.uuid,
|
||||||
shared=False) as task:
|
shared=False) as task:
|
||||||
task.driver.deploy.validate(task)
|
task.driver.deploy.validate(task)
|
||||||
self.assertTrue(mock_validate_resources.called)
|
self.assertTrue(mock_validate.called)
|
||||||
agent_deploy_validate_mock.assert_called_once_with(mock.ANY, task)
|
agent_deploy_validate_mock.assert_called_once_with(mock.ANY, task)
|
||||||
|
|
||||||
@mock.patch.object(agent.AgentDeploy, 'prepare', autospec=True)
|
@mock.patch.object(agent.AgentDeploy, 'prepare', autospec=True)
|
||||||
@mock.patch.object(deploy_utils, 'allocate_server_hardware_to_ironic')
|
@mock.patch.object(deploy_utils, 'allocate_server_hardware_to_ironic')
|
||||||
def test_prepare(
|
def test_prepare(
|
||||||
self, allocate_server_hardware_mock, agent_deploy_prepare_mock,
|
self, allocate_server_hardware_mock, agent_deploy_prepare_mock):
|
||||||
mock_get_ov_client):
|
|
||||||
self.node.provision_state = states.DEPLOYING
|
self.node.provision_state = states.DEPLOYING
|
||||||
self.node.save()
|
self.node.save()
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
@ -424,8 +399,7 @@ class OneViewAgentDeployTestCase(db_base.DbTestCase):
|
|||||||
self.assertTrue(allocate_server_hardware_mock.called)
|
self.assertTrue(allocate_server_hardware_mock.called)
|
||||||
|
|
||||||
@mock.patch.object(agent.AgentDeploy, 'prepare', autospec=True)
|
@mock.patch.object(agent.AgentDeploy, 'prepare', autospec=True)
|
||||||
def test_prepare_active_node(
|
def test_prepare_active_node(self, agent_deploy_prepare_mock):
|
||||||
self, agent_deploy_prepare_mock, mock_get_ov_client):
|
|
||||||
"""Ensure nodes in running states are not inadvertently changed."""
|
"""Ensure nodes in running states are not inadvertently changed."""
|
||||||
test_states = list(states.STABLE_STATES)
|
test_states = list(states.STABLE_STATES)
|
||||||
test_states.extend([states.CLEANING,
|
test_states.extend([states.CLEANING,
|
||||||
@ -441,7 +415,7 @@ class OneViewAgentDeployTestCase(db_base.DbTestCase):
|
|||||||
mock.ANY, task)
|
mock.ANY, task)
|
||||||
|
|
||||||
@mock.patch.object(agent.AgentDeploy, 'deploy', autospec=True)
|
@mock.patch.object(agent.AgentDeploy, 'deploy', autospec=True)
|
||||||
def test_deploy(self, agent_deploy_mock, mock_get_ov_client):
|
def test_deploy(self, agent_deploy_mock):
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
task.driver.deploy.deploy(task)
|
task.driver.deploy.deploy(task)
|
||||||
agent_deploy_mock.assert_called_once_with(mock.ANY, task)
|
agent_deploy_mock.assert_called_once_with(mock.ANY, task)
|
||||||
@ -450,8 +424,7 @@ class OneViewAgentDeployTestCase(db_base.DbTestCase):
|
|||||||
autospec=True)
|
autospec=True)
|
||||||
@mock.patch.object(deploy_utils, 'deallocate_server_hardware_from_ironic')
|
@mock.patch.object(deploy_utils, 'deallocate_server_hardware_from_ironic')
|
||||||
def test_tear_down_with_automated_clean_disabled(
|
def test_tear_down_with_automated_clean_disabled(
|
||||||
self, deallocate_server_hardware_mock, agent_tear_down_mock,
|
self, deallocate_server_hardware_mock, agent_tear_down_mock):
|
||||||
mock_get_ov_client):
|
|
||||||
CONF.conductor.automated_clean = False
|
CONF.conductor.automated_clean = False
|
||||||
agent_tear_down_mock.return_value = states.DELETED
|
agent_tear_down_mock.return_value = states.DELETED
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
@ -463,8 +436,7 @@ class OneViewAgentDeployTestCase(db_base.DbTestCase):
|
|||||||
@mock.patch.object(agent.AgentDeploy, 'prepare_cleaning', autospec=True)
|
@mock.patch.object(agent.AgentDeploy, 'prepare_cleaning', autospec=True)
|
||||||
@mock.patch.object(deploy_utils, 'allocate_server_hardware_to_ironic')
|
@mock.patch.object(deploy_utils, 'allocate_server_hardware_to_ironic')
|
||||||
def test_prepare_cleaning(
|
def test_prepare_cleaning(
|
||||||
self, allocate_server_hardware_mock,
|
self, allocate_server_hardware_mock, agent_prep_clean_mock):
|
||||||
agent_prep_clean_mock, mock_get_ov_client):
|
|
||||||
agent_prep_clean_mock.return_value = states.CLEANWAIT
|
agent_prep_clean_mock.return_value = states.CLEANWAIT
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
ret = task.driver.deploy.prepare_cleaning(task)
|
ret = task.driver.deploy.prepare_cleaning(task)
|
||||||
@ -475,8 +447,7 @@ class OneViewAgentDeployTestCase(db_base.DbTestCase):
|
|||||||
@mock.patch.object(agent.AgentDeploy, 'tear_down_cleaning', autospec=True)
|
@mock.patch.object(agent.AgentDeploy, 'tear_down_cleaning', autospec=True)
|
||||||
@mock.patch.object(deploy_utils, 'deallocate_server_hardware_from_ironic')
|
@mock.patch.object(deploy_utils, 'deallocate_server_hardware_from_ironic')
|
||||||
def test_tear_down_cleaning(
|
def test_tear_down_cleaning(
|
||||||
self, deallocate_server_hardware_mock,
|
self, deallocate_server_hardware_mock, agent_tear_down_clean_mock):
|
||||||
agent_tear_down_clean_mock, mock_get_ov_client):
|
|
||||||
agent_tear_down_clean_mock.return_value = states.CLEANWAIT
|
agent_tear_down_clean_mock.return_value = states.CLEANWAIT
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
task.driver.deploy.tear_down_cleaning(task)
|
task.driver.deploy.tear_down_cleaning(task)
|
||||||
|
@ -55,14 +55,12 @@ class OneViewDeployUtilsTestCase(db_base.DbTestCase):
|
|||||||
# Tests for prepare
|
# Tests for prepare
|
||||||
def test_prepare_node_is_in_use_by_oneview(self, mock_oneview_client):
|
def test_prepare_node_is_in_use_by_oneview(self, mock_oneview_client):
|
||||||
"""`prepare` behavior when the node has a Profile on OneView."""
|
"""`prepare` behavior when the node has a Profile on OneView."""
|
||||||
client = mock_oneview_client()
|
|
||||||
deploy_utils.is_node_in_use_by_oneview.return_value = True
|
deploy_utils.is_node_in_use_by_oneview.return_value = True
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
task.node.provision_state = states.DEPLOYING
|
task.node.provision_state = states.DEPLOYING
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.InstanceDeployFailure,
|
exception.InstanceDeployFailure,
|
||||||
deploy_utils.prepare,
|
deploy_utils.prepare,
|
||||||
client,
|
|
||||||
task
|
task
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -72,7 +70,7 @@ class OneViewDeployUtilsTestCase(db_base.DbTestCase):
|
|||||||
"""`prepare` behavior when the node is free from OneView standpoint."""
|
"""`prepare` behavior when the node is free from OneView standpoint."""
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
task.node.provision_state = states.DEPLOYING
|
task.node.provision_state = states.DEPLOYING
|
||||||
deploy_utils.prepare(mock_oneview_client(), task)
|
deploy_utils.prepare(task)
|
||||||
self.assertTrue(mock_save.called)
|
self.assertTrue(mock_save.called)
|
||||||
|
|
||||||
# Tests for tear_down
|
# Tests for tear_down
|
||||||
@ -86,7 +84,7 @@ class OneViewDeployUtilsTestCase(db_base.DbTestCase):
|
|||||||
self.assertIn(
|
self.assertIn(
|
||||||
'applied_server_profile_uri', task.node.driver_info
|
'applied_server_profile_uri', task.node.driver_info
|
||||||
)
|
)
|
||||||
deploy_utils.tear_down(client, task)
|
deploy_utils.tear_down(task)
|
||||||
self.assertNotIn(
|
self.assertNotIn(
|
||||||
'applied_server_profile_uri', task.node.driver_info
|
'applied_server_profile_uri', task.node.driver_info
|
||||||
)
|
)
|
||||||
@ -101,7 +99,7 @@ class OneViewDeployUtilsTestCase(db_base.DbTestCase):
|
|||||||
self.assertFalse(
|
self.assertFalse(
|
||||||
'applied_server_profile_uri' in task.node.driver_info
|
'applied_server_profile_uri' in task.node.driver_info
|
||||||
)
|
)
|
||||||
deploy_utils.prepare_cleaning(mock_oneview_client(), task)
|
deploy_utils.prepare_cleaning(task)
|
||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
'applied_server_profile_uri' in task.node.driver_info
|
'applied_server_profile_uri' in task.node.driver_info
|
||||||
)
|
)
|
||||||
@ -118,7 +116,7 @@ class OneViewDeployUtilsTestCase(db_base.DbTestCase):
|
|||||||
task.node.driver_info['applied_server_profile_uri'] = (
|
task.node.driver_info['applied_server_profile_uri'] = (
|
||||||
'same/sp_applied'
|
'same/sp_applied'
|
||||||
)
|
)
|
||||||
deploy_utils.prepare_cleaning(client, task)
|
deploy_utils.prepare_cleaning(task)
|
||||||
self.assertFalse(mock_node_save.called)
|
self.assertFalse(mock_node_save.called)
|
||||||
|
|
||||||
def test_prepare_cleaning_node_is_in_use_by_oneview(
|
def test_prepare_cleaning_node_is_in_use_by_oneview(
|
||||||
@ -130,7 +128,6 @@ class OneViewDeployUtilsTestCase(db_base.DbTestCase):
|
|||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.NodeCleaningFailure,
|
exception.NodeCleaningFailure,
|
||||||
deploy_utils.prepare_cleaning,
|
deploy_utils.prepare_cleaning,
|
||||||
mock_oneview_client(),
|
|
||||||
task
|
task
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -145,7 +142,7 @@ class OneViewDeployUtilsTestCase(db_base.DbTestCase):
|
|||||||
self.assertTrue(
|
self.assertTrue(
|
||||||
'applied_server_profile_uri' in task.node.driver_info
|
'applied_server_profile_uri' in task.node.driver_info
|
||||||
)
|
)
|
||||||
deploy_utils.tear_down_cleaning(client, task)
|
deploy_utils.tear_down_cleaning(task)
|
||||||
self.assertFalse(
|
self.assertFalse(
|
||||||
'applied_server_profile_uri' in task.node.driver_info
|
'applied_server_profile_uri' in task.node.driver_info
|
||||||
)
|
)
|
||||||
@ -296,7 +293,7 @@ class OneViewDeployUtilsTestCase(db_base.DbTestCase):
|
|||||||
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
deploy_utils.allocate_server_hardware_to_ironic(
|
deploy_utils.allocate_server_hardware_to_ironic(
|
||||||
client, task.node, 'serverProfileName'
|
task.node, 'serverProfileName'
|
||||||
)
|
)
|
||||||
self.assertTrue(mock_node_save.called)
|
self.assertTrue(mock_node_save.called)
|
||||||
self.assertIn('applied_server_profile_uri', task.node.driver_info)
|
self.assertIn('applied_server_profile_uri', task.node.driver_info)
|
||||||
@ -320,7 +317,7 @@ class OneViewDeployUtilsTestCase(db_base.DbTestCase):
|
|||||||
'any/applied_sp_uri/'
|
'any/applied_sp_uri/'
|
||||||
)
|
)
|
||||||
deploy_utils.allocate_server_hardware_to_ironic(
|
deploy_utils.allocate_server_hardware_to_ironic(
|
||||||
client, task.node, 'serverProfileName'
|
task.node, 'serverProfileName'
|
||||||
)
|
)
|
||||||
self.assertTrue(mock_node_save.called)
|
self.assertTrue(mock_node_save.called)
|
||||||
|
|
||||||
@ -335,9 +332,7 @@ class OneViewDeployUtilsTestCase(db_base.DbTestCase):
|
|||||||
task.node.driver_info['applied_server_profile_uri'] = (
|
task.node.driver_info['applied_server_profile_uri'] = (
|
||||||
'any/applied_sp_uri/'
|
'any/applied_sp_uri/'
|
||||||
)
|
)
|
||||||
deploy_utils.deallocate_server_hardware_from_ironic(
|
deploy_utils.deallocate_server_hardware_from_ironic(task)
|
||||||
client, task
|
|
||||||
)
|
|
||||||
self.assertTrue(client.server_profiles.delete.called)
|
self.assertTrue(client.server_profiles.delete.called)
|
||||||
self.assertNotIn(
|
self.assertNotIn(
|
||||||
'applied_server_profile_uri', task.node.driver_info
|
'applied_server_profile_uri', task.node.driver_info
|
||||||
|
@ -214,7 +214,6 @@ class OneViewManagementDriverFunctionsTestCase(db_base.DbTestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@mock.patch.object(common, 'get_hponeview_client')
|
|
||||||
class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -237,7 +236,7 @@ class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
|||||||
spect_set=True, autospec=True)
|
spect_set=True, autospec=True)
|
||||||
@mock.patch.object(common, 'validate_oneview_resources_compatibility',
|
@mock.patch.object(common, 'validate_oneview_resources_compatibility',
|
||||||
spect_set=True, autospec=True)
|
spect_set=True, autospec=True)
|
||||||
def test_validate(self, mock_validate, mock_ironic_node, mock_ov_client):
|
def test_validate(self, mock_validate, mock_ironic_node):
|
||||||
mock_ironic_node.return_value = True
|
mock_ironic_node.return_value = True
|
||||||
with task_manager.acquire(self.context, self.node.uuid,
|
with task_manager.acquire(self.context, self.node.uuid,
|
||||||
shared=False) as task:
|
shared=False) as task:
|
||||||
@ -246,15 +245,13 @@ class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
|||||||
|
|
||||||
@mock.patch.object(deploy_utils, 'is_node_in_use_by_ironic',
|
@mock.patch.object(deploy_utils, 'is_node_in_use_by_ironic',
|
||||||
spect_set=True, autospec=True)
|
spect_set=True, autospec=True)
|
||||||
def test_validate_for_node_not_in_use_by_ironic(
|
def test_validate_for_node_not_in_use_by_ironic(self, mock_ironic_node):
|
||||||
self, mock_ironic_node, mock_get_ov_client
|
|
||||||
):
|
|
||||||
mock_ironic_node.return_value = False
|
mock_ironic_node.return_value = False
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(exception.InvalidParameterValue,
|
self.assertRaises(exception.InvalidParameterValue,
|
||||||
task.driver.management.validate, task)
|
task.driver.management.validate, task)
|
||||||
|
|
||||||
def test_validate_fail(self, mock_get_ov_client):
|
def test_validate_fail(self):
|
||||||
node = obj_utils.create_test_node(
|
node = obj_utils.create_test_node(
|
||||||
self.context, uuid=uuidutils.generate_uuid(),
|
self.context, uuid=uuidutils.generate_uuid(),
|
||||||
id=999, driver='fake_oneview'
|
id=999, driver='fake_oneview'
|
||||||
@ -264,19 +261,19 @@ class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
|||||||
task.driver.management.validate, task)
|
task.driver.management.validate, task)
|
||||||
|
|
||||||
@mock.patch.object(common, 'validate_oneview_resources_compatibility')
|
@mock.patch.object(common, 'validate_oneview_resources_compatibility')
|
||||||
def test_validate_fail_exception(self, mock_validate, mock_get_ov_client):
|
def test_validate_fail_exception(self, mock_validate):
|
||||||
mock_validate.side_effect = exception.OneViewError('message')
|
mock_validate.side_effect = exception.OneViewError('message')
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(exception.InvalidParameterValue,
|
self.assertRaises(exception.InvalidParameterValue,
|
||||||
task.driver.management.validate,
|
task.driver.management.validate,
|
||||||
task)
|
task)
|
||||||
|
|
||||||
def test_get_properties(self, mock_get_ov_client):
|
def test_get_properties(self):
|
||||||
expected = common.COMMON_PROPERTIES
|
expected = common.COMMON_PROPERTIES
|
||||||
self.assertItemsEqual(expected,
|
self.assertItemsEqual(expected,
|
||||||
self.driver.management.get_properties())
|
self.driver.management.get_properties())
|
||||||
|
|
||||||
def test_set_boot_device_persistent_true(self, mock_get_ov_client):
|
def test_set_boot_device_persistent_true(self):
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
task.driver.management.set_boot_device(
|
task.driver.management.set_boot_device(
|
||||||
task, boot_devices.PXE, True)
|
task, boot_devices.PXE, True)
|
||||||
@ -287,7 +284,7 @@ class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
|||||||
next_boot_device.get('boot_device'), boot_devices.PXE)
|
next_boot_device.get('boot_device'), boot_devices.PXE)
|
||||||
self.assertTrue(next_boot_device.get('persistent'))
|
self.assertTrue(next_boot_device.get('persistent'))
|
||||||
|
|
||||||
def test_set_boot_device_persistent_false(self, mock_get_ov_client):
|
def test_set_boot_device_persistent_false(self):
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
task.driver.management.set_boot_device(
|
task.driver.management.set_boot_device(
|
||||||
task, boot_devices.PXE, False)
|
task, boot_devices.PXE, False)
|
||||||
@ -298,7 +295,7 @@ class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
|||||||
next_boot_device.get('boot_device'), boot_devices.PXE)
|
next_boot_device.get('boot_device'), boot_devices.PXE)
|
||||||
self.assertFalse(next_boot_device.get('persistent'))
|
self.assertFalse(next_boot_device.get('persistent'))
|
||||||
|
|
||||||
def test_set_boot_device_invalid_device(self, mock_get_ov_client):
|
def test_set_boot_device_invalid_device(self):
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(exception.InvalidParameterValue,
|
self.assertRaises(exception.InvalidParameterValue,
|
||||||
task.driver.management.set_boot_device,
|
task.driver.management.set_boot_device,
|
||||||
@ -306,7 +303,7 @@ class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
|||||||
driver_internal_info = task.node.driver_internal_info
|
driver_internal_info = task.node.driver_internal_info
|
||||||
self.assertNotIn('next_boot_device', driver_internal_info)
|
self.assertNotIn('next_boot_device', driver_internal_info)
|
||||||
|
|
||||||
def test_get_supported_boot_devices(self, mock_get_ov_client):
|
def test_get_supported_boot_devices(self):
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
expected = [
|
expected = [
|
||||||
boot_devices.PXE, boot_devices.DISK, boot_devices.CDROM
|
boot_devices.PXE, boot_devices.DISK, boot_devices.CDROM
|
||||||
@ -316,10 +313,10 @@ class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
|||||||
task.driver.management.get_supported_boot_devices(task),
|
task.driver.management.get_supported_boot_devices(task),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
@mock.patch.object(common, 'get_ilorest_client')
|
@mock.patch.object(common, 'get_ilorest_client')
|
||||||
def test_get_boot_device(
|
def test_get_boot_device(self, mock_ilo_client, mock_ov_client):
|
||||||
self, mock_ilo_client, mock_get_ov_client):
|
client = mock_ov_client()
|
||||||
client = mock_get_ov_client()
|
|
||||||
ilo_client = mock_ilo_client()
|
ilo_client = mock_ilo_client()
|
||||||
self.driver.management.client = client
|
self.driver.management.client = client
|
||||||
device_mapping = management.BOOT_DEVICE_MAP_ONEVIEW.items()
|
device_mapping = management.BOOT_DEVICE_MAP_ONEVIEW.items()
|
||||||
@ -337,11 +334,8 @@ class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
|||||||
self.assertTrue(ilo_client.get.called)
|
self.assertTrue(ilo_client.get.called)
|
||||||
|
|
||||||
@mock.patch.object(common, 'get_ilorest_client')
|
@mock.patch.object(common, 'get_ilorest_client')
|
||||||
def test_get_boot_device_from_next_boot_device(
|
def test_get_boot_device_from_next_boot_device(self, mock_ilo_client):
|
||||||
self, mock_ilo_client, mock_get_ov_client):
|
|
||||||
client = mock_get_ov_client()
|
|
||||||
ilo_client = mock_ilo_client()
|
ilo_client = mock_ilo_client()
|
||||||
self.driver.management.client = client
|
|
||||||
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
driver_internal_info = task.node.driver_internal_info
|
driver_internal_info = task.node.driver_internal_info
|
||||||
@ -355,13 +349,12 @@ class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
|||||||
}
|
}
|
||||||
response = self.driver.management.get_boot_device(task)
|
response = self.driver.management.get_boot_device(task)
|
||||||
self.assertEqual(expected_response, response)
|
self.assertEqual(expected_response, response)
|
||||||
self.assertFalse(client.get_boot_order.called)
|
|
||||||
self.assertFalse(ilo_client.get.called)
|
self.assertFalse(ilo_client.get.called)
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
@mock.patch.object(common, 'get_ilorest_client')
|
@mock.patch.object(common, 'get_ilorest_client')
|
||||||
def test_get_boot_device_fail(
|
def test_get_boot_device_fail(self, mock_ilo_client, mock_ov_client):
|
||||||
self, mock_ilo_client, mock_get_ov_client):
|
client = mock_ov_client()
|
||||||
client = mock_get_ov_client()
|
|
||||||
ilo_client = mock_ilo_client()
|
ilo_client = mock_ilo_client()
|
||||||
self.driver.management.client = client
|
self.driver.management.client = client
|
||||||
exc = client_exception.HPOneViewException()
|
exc = client_exception.HPOneViewException()
|
||||||
@ -376,14 +369,8 @@ class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
|||||||
self.assertFalse(ilo_client.get.called)
|
self.assertFalse(ilo_client.get.called)
|
||||||
|
|
||||||
@mock.patch.object(common, 'get_ilorest_client')
|
@mock.patch.object(common, 'get_ilorest_client')
|
||||||
def test_get_boot_device_unknown_device(
|
def test_get_boot_device_unknown_device(self, mock_ilo_client):
|
||||||
self, mock_ilo_client, mock_get_ov_client):
|
|
||||||
client = mock_get_ov_client()
|
|
||||||
ilo_client = mock_ilo_client()
|
ilo_client = mock_ilo_client()
|
||||||
order = ['Eggs', 'Bacon']
|
|
||||||
profile = {'boot': {'order': order}}
|
|
||||||
client.server_profiles.get.return_value = profile
|
|
||||||
self.driver.management.client = client
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.InvalidParameterValue,
|
exception.InvalidParameterValue,
|
||||||
@ -392,7 +379,7 @@ class OneViewManagementDriverTestCase(db_base.DbTestCase):
|
|||||||
)
|
)
|
||||||
self.assertFalse(ilo_client.get.called)
|
self.assertFalse(ilo_client.get.called)
|
||||||
|
|
||||||
def test_get_sensors_data_not_implemented(self, mock_get_ov_client):
|
def test_get_sensors_data_not_implemented(self):
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
NotImplementedError,
|
NotImplementedError,
|
||||||
|
@ -33,7 +33,6 @@ from ironic.tests.unit.objects import utils as obj_utils
|
|||||||
client_exception = importutils.try_import('hpOneView.exceptions')
|
client_exception = importutils.try_import('hpOneView.exceptions')
|
||||||
|
|
||||||
|
|
||||||
@mock.patch.object(common, 'get_hponeview_client')
|
|
||||||
class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -54,12 +53,12 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
deploy_utils.is_node_in_use_by_oneview = mock.Mock(return_value=False)
|
deploy_utils.is_node_in_use_by_oneview = mock.Mock(return_value=False)
|
||||||
|
|
||||||
@mock.patch.object(common, 'validate_oneview_resources_compatibility')
|
@mock.patch.object(common, 'validate_oneview_resources_compatibility')
|
||||||
def test_validate(self, mock_validate, mock_get_ov_client):
|
def test_validate(self, mock_validate):
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
task.driver.power.validate(task)
|
task.driver.power.validate(task)
|
||||||
self.assertTrue(mock_validate.called)
|
self.assertTrue(mock_validate.called)
|
||||||
|
|
||||||
def test_validate_missing_parameter(self, mock_get_ov_client):
|
def test_validate_missing_parameter(self):
|
||||||
node = obj_utils.create_test_node(
|
node = obj_utils.create_test_node(
|
||||||
self.context, uuid=uuidutils.generate_uuid(),
|
self.context, uuid=uuidutils.generate_uuid(),
|
||||||
id=999, driver='fake_oneview')
|
id=999, driver='fake_oneview')
|
||||||
@ -70,7 +69,7 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
task)
|
task)
|
||||||
|
|
||||||
@mock.patch.object(common, 'validate_oneview_resources_compatibility')
|
@mock.patch.object(common, 'validate_oneview_resources_compatibility')
|
||||||
def test_validate_exception(self, mock_validate, mock_get_ov_client):
|
def test_validate_exception(self, mock_validate):
|
||||||
mock_validate.side_effect = exception.OneViewError('message')
|
mock_validate.side_effect = exception.OneViewError('message')
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
@ -78,7 +77,7 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
task.driver.power.validate,
|
task.driver.power.validate,
|
||||||
task)
|
task)
|
||||||
|
|
||||||
def test_validate_node_in_use_by_oneview(self, mock_get_ov_client):
|
def test_validate_node_in_use_by_oneview(self):
|
||||||
deploy_utils.is_node_in_use_by_oneview.return_value = True
|
deploy_utils.is_node_in_use_by_oneview.return_value = True
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
@ -86,34 +85,34 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
task.driver.power.validate,
|
task.driver.power.validate,
|
||||||
task)
|
task)
|
||||||
|
|
||||||
def test_get_properties(self, mock_get_ov_client):
|
def test_get_properties(self):
|
||||||
expected = common.COMMON_PROPERTIES
|
expected = common.COMMON_PROPERTIES
|
||||||
self.assertEqual(expected, self.driver.power.get_properties())
|
self.assertEqual(expected, self.driver.power.get_properties())
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
def test_get_power_state(self, mock_get_ov_client):
|
def test_get_power_state(self, mock_get_ov_client):
|
||||||
client = mock_get_ov_client()
|
client = mock_get_ov_client()
|
||||||
server_hardware = {'powerState': 'On'}
|
server_hardware = {'powerState': 'On'}
|
||||||
client.server_hardware.get.return_value = server_hardware
|
client.server_hardware.get.return_value = server_hardware
|
||||||
self.driver.power.client = client
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
power_state = self.driver.power.get_power_state(task)
|
power_state = self.driver.power.get_power_state(task)
|
||||||
self.assertEqual(states.POWER_ON, power_state)
|
self.assertEqual(states.POWER_ON, power_state)
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
def test_get_power_state_fail(self, mock_get_ov_client):
|
def test_get_power_state_fail(self, mock_get_ov_client):
|
||||||
client = mock_get_ov_client()
|
client = mock_get_ov_client()
|
||||||
exc = client_exception.HPOneViewException()
|
exc = client_exception.HPOneViewException()
|
||||||
client.server_hardware.get.side_effect = exc
|
client.server_hardware.get.side_effect = exc
|
||||||
self.driver.power.client = client
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.OneViewError,
|
exception.OneViewError,
|
||||||
self.driver.power.get_power_state,
|
self.driver.power.get_power_state,
|
||||||
task)
|
task)
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
@mock.patch.object(management, 'set_boot_device')
|
@mock.patch.object(management, 'set_boot_device')
|
||||||
def test_set_power_on(self, mock_set_boot_device, mock_get_ov_client):
|
def test_set_power_on(self, mock_set_boot_device, mock_get_ov_client):
|
||||||
client = mock_get_ov_client()
|
client = mock_get_ov_client()
|
||||||
self.driver.power.client = client
|
|
||||||
server_hardware = self.node.driver_info.get('server_hardware_uri')
|
server_hardware = self.node.driver_info.get('server_hardware_uri')
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.driver.power.set_power_state(task, states.POWER_ON)
|
self.driver.power.set_power_state(task, states.POWER_ON)
|
||||||
@ -122,10 +121,10 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
update.assert_called_once_with(power.POWER_ON, server_hardware,
|
update.assert_called_once_with(power.POWER_ON, server_hardware,
|
||||||
timeout=-1)
|
timeout=-1)
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
@mock.patch.object(management, 'set_boot_device')
|
@mock.patch.object(management, 'set_boot_device')
|
||||||
def test_set_power_off(self, mock_set_boot_device, mock_get_ov_client):
|
def test_set_power_off(self, mock_set_boot_device, mock_get_ov_client):
|
||||||
client = mock_get_ov_client()
|
client = mock_get_ov_client()
|
||||||
self.driver.power.client = client
|
|
||||||
server_hardware = self.node.driver_info.get('server_hardware_uri')
|
server_hardware = self.node.driver_info.get('server_hardware_uri')
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.driver.power.set_power_state(task, states.POWER_OFF)
|
self.driver.power.set_power_state(task, states.POWER_OFF)
|
||||||
@ -134,10 +133,10 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
update.assert_called_once_with(power.POWER_OFF, server_hardware,
|
update.assert_called_once_with(power.POWER_OFF, server_hardware,
|
||||||
timeout=-1)
|
timeout=-1)
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
@mock.patch.object(management, 'set_boot_device')
|
@mock.patch.object(management, 'set_boot_device')
|
||||||
def test_set_power_reboot(self, mock_set_boot_device, mock_get_ov_client):
|
def test_set_power_reboot(self, mock_set_boot_device, mock_get_ov_client):
|
||||||
client = mock_get_ov_client()
|
client = mock_get_ov_client()
|
||||||
self.driver.power.client = client
|
|
||||||
server_hardware = self.node.driver_info.get('server_hardware_uri')
|
server_hardware = self.node.driver_info.get('server_hardware_uri')
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.driver.power.set_power_state(task, states.REBOOT)
|
self.driver.power.set_power_state(task, states.REBOOT)
|
||||||
@ -146,12 +145,12 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
update = client.server_hardware.update_power_state
|
update = client.server_hardware.update_power_state
|
||||||
update.assert_has_calls(calls)
|
update.assert_has_calls(calls)
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
@mock.patch.object(management, 'set_boot_device')
|
@mock.patch.object(management, 'set_boot_device')
|
||||||
def test_set_power_on_fail(self, mock_set_boot_device, mock_get_ov_client):
|
def test_set_power_on_fail(self, mock_set_boot_device, mock_get_ov_client):
|
||||||
client = mock_get_ov_client()
|
client = mock_get_ov_client()
|
||||||
exc = client_exception.HPOneViewException()
|
exc = client_exception.HPOneViewException()
|
||||||
client.server_hardware.update_power_state.side_effect = exc
|
client.server_hardware.update_power_state.side_effect = exc
|
||||||
self.driver.power.client = client
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.OneViewError,
|
exception.OneViewError,
|
||||||
@ -160,13 +159,13 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
states.POWER_ON)
|
states.POWER_ON)
|
||||||
mock_set_boot_device.assert_called_once_with(task)
|
mock_set_boot_device.assert_called_once_with(task)
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
@mock.patch.object(management, 'set_boot_device')
|
@mock.patch.object(management, 'set_boot_device')
|
||||||
def test_set_power_off_fail(
|
def test_set_power_off_fail(
|
||||||
self, mock_set_boot_device, mock_get_ov_client):
|
self, mock_set_boot_device, mock_get_ov_client):
|
||||||
client = mock_get_ov_client()
|
client = mock_get_ov_client()
|
||||||
exc = client_exception.HPOneViewException()
|
exc = client_exception.HPOneViewException()
|
||||||
client.server_hardware.update_power_state.side_effect = exc
|
client.server_hardware.update_power_state.side_effect = exc
|
||||||
self.driver.power.client = client
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.OneViewError,
|
exception.OneViewError,
|
||||||
@ -175,16 +174,15 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
states.POWER_OFF)
|
states.POWER_OFF)
|
||||||
self.assertFalse(mock_set_boot_device.called)
|
self.assertFalse(mock_set_boot_device.called)
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
@mock.patch.object(management, 'set_boot_device')
|
@mock.patch.object(management, 'set_boot_device')
|
||||||
def test_reboot_fail_with_hardware_on(
|
def test_reboot_fail_with_hardware_on(
|
||||||
self, mock_set_boot_device, mock_get_ov_client):
|
self, mock_set_boot_device, mock_get_ov_client):
|
||||||
client = mock_get_ov_client()
|
client = mock_get_ov_client()
|
||||||
server_hardware = {'powerState': 'On'}
|
server_hardware = {'powerState': 'On'}
|
||||||
client.server_hardware.get.return_value = server_hardware
|
client.server_hardware.get.return_value = server_hardware
|
||||||
self.driver.power.client = client
|
|
||||||
exc = client_exception.HPOneViewException()
|
exc = client_exception.HPOneViewException()
|
||||||
client.server_hardware.update_power_state.side_effect = exc
|
client.server_hardware.update_power_state.side_effect = exc
|
||||||
self.driver.power.client = client
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.OneViewError,
|
exception.OneViewError,
|
||||||
@ -192,16 +190,15 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
task)
|
task)
|
||||||
self.assertFalse(mock_set_boot_device.called)
|
self.assertFalse(mock_set_boot_device.called)
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
@mock.patch.object(management, 'set_boot_device')
|
@mock.patch.object(management, 'set_boot_device')
|
||||||
def test_reboot_fail_with_hardware_off(
|
def test_reboot_fail_with_hardware_off(
|
||||||
self, mock_set_boot_device, mock_get_ov_client):
|
self, mock_set_boot_device, mock_get_ov_client):
|
||||||
client = mock_get_ov_client()
|
client = mock_get_ov_client()
|
||||||
server_hardware = {'powerState': 'Off'}
|
server_hardware = {'powerState': 'Off'}
|
||||||
client.server_hardware.get.return_value = server_hardware
|
client.server_hardware.get.return_value = server_hardware
|
||||||
self.driver.power.client = client
|
|
||||||
exc = client_exception.HPOneViewException()
|
exc = client_exception.HPOneViewException()
|
||||||
client.server_hardware.update_power_state.side_effect = exc
|
client.server_hardware.update_power_state.side_effect = exc
|
||||||
self.driver.power.client = client
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.OneViewError,
|
exception.OneViewError,
|
||||||
@ -210,8 +207,7 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
mock_set_boot_device.assert_called_once_with(task)
|
mock_set_boot_device.assert_called_once_with(task)
|
||||||
|
|
||||||
@mock.patch.object(management, 'set_boot_device')
|
@mock.patch.object(management, 'set_boot_device')
|
||||||
def test_set_power_invalid_state(
|
def test_set_power_invalid_state(self, mock_set_boot_device):
|
||||||
self, mock_set_boot_device, mock_get_ov_client):
|
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
exception.InvalidParameterValue,
|
exception.InvalidParameterValue,
|
||||||
@ -220,13 +216,13 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
'fake_state')
|
'fake_state')
|
||||||
self.assertFalse(mock_set_boot_device.called)
|
self.assertFalse(mock_set_boot_device.called)
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
@mock.patch.object(management, 'set_boot_device')
|
@mock.patch.object(management, 'set_boot_device')
|
||||||
def test_set_power_reboot_with_hardware_on(
|
def test_set_power_reboot_with_hardware_on(
|
||||||
self, mock_set_boot_device, mock_get_ov_client):
|
self, mock_set_boot_device, mock_get_ov_client):
|
||||||
client = mock_get_ov_client()
|
client = mock_get_ov_client()
|
||||||
server_hardware = {'powerState': 'On'}
|
server_hardware = {'powerState': 'On'}
|
||||||
client.server_hardware.get.return_value = server_hardware
|
client.server_hardware.get.return_value = server_hardware
|
||||||
self.driver.power.client = client
|
|
||||||
server_hardware = self.node.driver_info.get('server_hardware_uri')
|
server_hardware = self.node.driver_info.get('server_hardware_uri')
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.driver.power.reboot(task)
|
self.driver.power.reboot(task)
|
||||||
@ -236,13 +232,13 @@ class OneViewPowerDriverTestCase(db_base.DbTestCase):
|
|||||||
update.assert_has_calls(calls)
|
update.assert_has_calls(calls)
|
||||||
mock_set_boot_device.assert_called_once_with(task)
|
mock_set_boot_device.assert_called_once_with(task)
|
||||||
|
|
||||||
|
@mock.patch.object(common, 'get_hponeview_client')
|
||||||
@mock.patch.object(management, 'set_boot_device')
|
@mock.patch.object(management, 'set_boot_device')
|
||||||
def test_set_power_reboot_with_hardware_off(
|
def test_set_power_reboot_with_hardware_off(
|
||||||
self, mock_set_boot_device, mock_get_ov_client):
|
self, mock_set_boot_device, mock_get_ov_client):
|
||||||
client = mock_get_ov_client()
|
client = mock_get_ov_client()
|
||||||
server_hardware = {'powerState': 'Off'}
|
server_hardware = {'powerState': 'Off'}
|
||||||
client.server_hardware.get.return_value = server_hardware
|
client.server_hardware.get.return_value = server_hardware
|
||||||
self.driver.power.client = client
|
|
||||||
server_hardware = self.node.driver_info.get('server_hardware_uri')
|
server_hardware = self.node.driver_info.get('server_hardware_uri')
|
||||||
with task_manager.acquire(self.context, self.node.uuid) as task:
|
with task_manager.acquire(self.context, self.node.uuid) as task:
|
||||||
self.driver.power.reboot(task, timeout=-1)
|
self.driver.power.reboot(task, timeout=-1)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user