Merge "Do not boot nodes if not set in standalone tests"
This commit is contained in:
commit
ccddbbcedf
|
@ -35,6 +35,9 @@ class BaremetalStandaloneManager(bm.BaremetalScenarioTest,
|
|||
# attach VIF to a node.
|
||||
min_microversion = '1.28'
|
||||
|
||||
image_ref = None
|
||||
image_checksum = None
|
||||
|
||||
@classmethod
|
||||
def skip_checks(cls):
|
||||
"""Defines conditions to skip these tests."""
|
||||
|
@ -218,30 +221,28 @@ class BaremetalStandaloneManager(bm.BaremetalScenarioTest,
|
|||
return nodes[0]
|
||||
|
||||
@classmethod
|
||||
def boot_node(cls, driver, image_ref, image_checksum=None, **interfaces):
|
||||
def boot_node(cls, image_ref=None, image_checksum=None):
|
||||
"""Boot ironic node.
|
||||
|
||||
The following actions are executed:
|
||||
* Randomly pick an available node for deployment and reserve it.
|
||||
* Update node driver.
|
||||
* Create/Pick networks to boot node in.
|
||||
* Create Neutron port and attach it to node.
|
||||
* Update node image_source/root_gb.
|
||||
* Deploy node.
|
||||
* Wait until node is deployed.
|
||||
|
||||
:param driver: Node driver to use.
|
||||
:param image_ref: Reference to user image to boot node with.
|
||||
:param image_checksum: md5sum of image specified in image_ref.
|
||||
Needed only when direct HTTP link is provided.
|
||||
:param interfaces: driver interfaces to set on the node
|
||||
:returns: Ironic node.
|
||||
"""
|
||||
node = cls.get_and_reserve_node()
|
||||
cls.update_node_driver(node['uuid'], driver, **interfaces)
|
||||
if image_ref is None:
|
||||
image_ref = cls.image_ref
|
||||
if image_checksum is None:
|
||||
image_checksum = cls.image_checksum
|
||||
|
||||
network, subnet, router = cls.create_networks()
|
||||
n_port = cls.create_neutron_port(network_id=network['id'])
|
||||
cls.vif_attach(node_id=node['uuid'], vif_id=n_port['id'])
|
||||
cls.vif_attach(node_id=cls.node['uuid'], vif_id=n_port['id'])
|
||||
patch = [{'path': '/instance_info/image_source',
|
||||
'op': 'add',
|
||||
'value': image_ref}]
|
||||
|
@ -253,14 +254,14 @@ class BaremetalStandaloneManager(bm.BaremetalScenarioTest,
|
|||
'op': 'add',
|
||||
'value': CONF.baremetal.adjusted_root_disk_size_gb})
|
||||
# TODO(vsaienko) add testing for custom configdrive
|
||||
cls.update_node(node['uuid'], patch=patch)
|
||||
cls.set_node_provision_state(node['uuid'], 'active')
|
||||
cls.wait_power_state(node['uuid'], bm.BaremetalPowerStates.POWER_ON)
|
||||
cls.wait_provisioning_state(node['uuid'],
|
||||
cls.update_node(cls.node['uuid'], patch=patch)
|
||||
cls.set_node_provision_state(cls.node['uuid'], 'active')
|
||||
cls.wait_power_state(cls.node['uuid'],
|
||||
bm.BaremetalPowerStates.POWER_ON)
|
||||
cls.wait_provisioning_state(cls.node['uuid'],
|
||||
bm.BaremetalProvisionStates.ACTIVE,
|
||||
timeout=CONF.baremetal.active_timeout,
|
||||
interval=30)
|
||||
return node
|
||||
|
||||
@classmethod
|
||||
def terminate_node(cls, node_id):
|
||||
|
@ -347,13 +348,6 @@ class BaremetalStandaloneManager(bm.BaremetalScenarioTest,
|
|||
:param node: Ironic node to associate instance_uuid with, it is
|
||||
expected to be in 'active' state
|
||||
"""
|
||||
self.set_node_provision_state(node['uuid'], 'deleted')
|
||||
self.wait_provisioning_state(
|
||||
node['uuid'],
|
||||
[bm.BaremetalProvisionStates.NOSTATE,
|
||||
bm.BaremetalProvisionStates.AVAILABLE],
|
||||
timeout=CONF.baremetal.unprovision_timeout,
|
||||
interval=30)
|
||||
clean_steps = [
|
||||
{
|
||||
"interface": "deploy",
|
||||
|
@ -386,15 +380,9 @@ class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager):
|
|||
# been set via a different test).
|
||||
rescue_interface = None
|
||||
|
||||
# User image ref to boot node with.
|
||||
image_ref = None
|
||||
|
||||
# Boolean value specify if image is wholedisk or not.
|
||||
wholedisk_image = None
|
||||
|
||||
# Image checksum, required when image is stored on HTTP server.
|
||||
image_checksum = None
|
||||
|
||||
# If we need to set provision state 'deleted' for the node after test
|
||||
delete_node = True
|
||||
|
||||
|
@ -434,6 +422,18 @@ class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager):
|
|||
raise cls.skipException(
|
||||
'Partitioned images are not supported with multitenancy.')
|
||||
|
||||
@classmethod
|
||||
def set_node_to_active(cls, image_ref=None, image_checksum=None):
|
||||
cls.boot_node(image_ref, image_checksum)
|
||||
if CONF.validation.connect_method == 'floating':
|
||||
cls.node_ip = cls.add_floatingip_to_node(cls.node['uuid'])
|
||||
elif CONF.validation.connect_method == 'fixed':
|
||||
cls.node_ip = cls.get_server_ip(cls.node['uuid'])
|
||||
else:
|
||||
m = ('Configuration option "[validation]/connect_method" '
|
||||
'must be set.')
|
||||
raise lib_exc.InvalidConfiguration(m)
|
||||
|
||||
@classmethod
|
||||
def resource_setup(cls):
|
||||
super(BaremetalStandaloneScenarioTest, cls).resource_setup()
|
||||
|
@ -450,20 +450,17 @@ class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager):
|
|||
boot_kwargs['deploy_interface'] = cls.deploy_interface
|
||||
if cls.rescue_interface:
|
||||
boot_kwargs['rescue_interface'] = cls.rescue_interface
|
||||
cls.node = cls.boot_node(cls.driver, cls.image_ref, **boot_kwargs)
|
||||
if CONF.validation.connect_method == 'floating':
|
||||
cls.node_ip = cls.add_floatingip_to_node(cls.node['uuid'])
|
||||
elif CONF.validation.connect_method == 'fixed':
|
||||
cls.node_ip = cls.get_server_ip(cls.node['uuid'])
|
||||
else:
|
||||
m = ('Configuration option "[validation]/connect_method" '
|
||||
'must be set.')
|
||||
raise lib_exc.InvalidConfiguration(m)
|
||||
|
||||
# just get an available node
|
||||
cls.node = cls.get_and_reserve_node()
|
||||
cls.update_node_driver(cls.node['uuid'], cls.driver, **boot_kwargs)
|
||||
|
||||
@classmethod
|
||||
def resource_cleanup(cls):
|
||||
if CONF.validation.connect_method == 'floating':
|
||||
cls.cleanup_floating_ip(cls.node_ip)
|
||||
if cls.node_ip:
|
||||
cls.cleanup_floating_ip(cls.node_ip)
|
||||
|
||||
vifs = cls.get_node_vifs(cls.node['uuid'])
|
||||
# Remove ports before deleting node, to catch regression for cases
|
||||
# when user did this prior unprovision node.
|
||||
|
@ -475,3 +472,9 @@ class BaremetalStandaloneScenarioTest(BaremetalStandaloneManager):
|
|||
cls.terminate_node(cls.node['uuid'])
|
||||
base.reset_baremetal_api_microversion()
|
||||
super(BaremetalStandaloneManager, cls).resource_cleanup()
|
||||
|
||||
def boot_and_verify_node(self, image_ref=None, image_checksum=None,
|
||||
should_succeed=True):
|
||||
self.set_node_to_active(image_ref, image_checksum)
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=should_succeed))
|
||||
|
|
|
@ -32,8 +32,7 @@ class BaremetalAgentIpmitoolWholedisk(bsm.BaremetalStandaloneScenarioTest):
|
|||
@decorators.idempotent_id('defff515-a6ff-44f6-9d8d-2ded51196d98')
|
||||
@utils.services('image', 'network', 'object_storage')
|
||||
def test_ip_access_to_server(self):
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
self.boot_and_verify_node()
|
||||
|
||||
|
||||
class BaremetalAgentIpmitoolWholediskHttpLink(
|
||||
|
@ -54,8 +53,7 @@ class BaremetalAgentIpmitoolWholediskHttpLink(
|
|||
@decorators.idempotent_id('d926c683-1a32-44df-afd0-e60134346fd0')
|
||||
@utils.services('network')
|
||||
def test_ip_access_to_server(self):
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
self.boot_and_verify_node()
|
||||
|
||||
|
||||
class BaremetalAgentIpmitoolPartitioned(bsm.BaremetalStandaloneScenarioTest):
|
||||
|
@ -67,8 +65,7 @@ class BaremetalAgentIpmitoolPartitioned(bsm.BaremetalStandaloneScenarioTest):
|
|||
@decorators.idempotent_id('27b86130-d8dc-419d-880a-fbbbe4ce3f8c')
|
||||
@utils.services('image', 'network', 'object_storage')
|
||||
def test_ip_access_to_server(self):
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
self.boot_and_verify_node()
|
||||
|
||||
|
||||
class BaremetalPxeIpmitoolWholedisk(bsm.BaremetalStandaloneScenarioTest):
|
||||
|
@ -80,8 +77,7 @@ class BaremetalPxeIpmitoolWholedisk(bsm.BaremetalStandaloneScenarioTest):
|
|||
@decorators.idempotent_id('d8c5badd-45db-4d05-bbe8-35babbed6e86')
|
||||
@utils.services('image', 'network')
|
||||
def test_ip_access_to_server(self):
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
self.boot_and_verify_node()
|
||||
|
||||
|
||||
class BaremetalPxeIpmitoolWholediskHttpLink(
|
||||
|
@ -102,8 +98,7 @@ class BaremetalPxeIpmitoolWholediskHttpLink(
|
|||
@decorators.idempotent_id('71ccf06f-6765-40fd-8252-1b1bfa423b9b')
|
||||
@utils.services('network')
|
||||
def test_ip_access_to_server(self):
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
self.boot_and_verify_node()
|
||||
|
||||
|
||||
class BaremetalPxeIpmitoolPartitioned(bsm.BaremetalStandaloneScenarioTest):
|
||||
|
@ -115,8 +110,7 @@ class BaremetalPxeIpmitoolPartitioned(bsm.BaremetalStandaloneScenarioTest):
|
|||
@decorators.idempotent_id('ea85e19c-6869-4577-b9bb-2eb150f77c90')
|
||||
@utils.services('image', 'network')
|
||||
def test_ip_access_to_server(self):
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
self.boot_and_verify_node()
|
||||
|
||||
|
||||
class BaremetalIpmiIscsiWholedisk(bsm.BaremetalStandaloneScenarioTest):
|
||||
|
@ -130,8 +124,7 @@ class BaremetalIpmiIscsiWholedisk(bsm.BaremetalStandaloneScenarioTest):
|
|||
@decorators.idempotent_id('f25b71df-2150-45d7-a780-7f5b07124808')
|
||||
@utils.services('image', 'network')
|
||||
def test_ip_access_to_server(self):
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
self.boot_and_verify_node()
|
||||
|
||||
|
||||
class BaremetalIpmiDirectWholedisk(bsm.BaremetalStandaloneScenarioTest):
|
||||
|
@ -145,8 +138,7 @@ class BaremetalIpmiDirectWholedisk(bsm.BaremetalStandaloneScenarioTest):
|
|||
@decorators.idempotent_id('c2db24e7-07dc-4a20-8f93-d4efae2bfd4e')
|
||||
@utils.services('image', 'network')
|
||||
def test_ip_access_to_server(self):
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
self.boot_and_verify_node()
|
||||
|
||||
|
||||
class BaremetalIpmiIscsiPartitioned(bsm.BaremetalStandaloneScenarioTest):
|
||||
|
@ -160,8 +152,7 @@ class BaremetalIpmiIscsiPartitioned(bsm.BaremetalStandaloneScenarioTest):
|
|||
@decorators.idempotent_id('7d0b205e-edbc-4e2d-9f6d-95cd74eefecb')
|
||||
@utils.services('image', 'network')
|
||||
def test_ip_access_to_server(self):
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
self.boot_and_verify_node()
|
||||
|
||||
|
||||
class BaremetalIpmiDirectPartitioned(bsm.BaremetalStandaloneScenarioTest):
|
||||
|
@ -175,8 +166,7 @@ class BaremetalIpmiDirectPartitioned(bsm.BaremetalStandaloneScenarioTest):
|
|||
@decorators.idempotent_id('7b4b2dcd-2bbb-44f5-991f-0964300af6b7')
|
||||
@utils.services('image', 'network')
|
||||
def test_ip_access_to_server(self):
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
self.boot_and_verify_node()
|
||||
|
||||
|
||||
class BaremetalIpmiAnsibleWholedisk(bsm.BaremetalStandaloneScenarioTest):
|
||||
|
@ -190,8 +180,7 @@ class BaremetalIpmiAnsibleWholedisk(bsm.BaremetalStandaloneScenarioTest):
|
|||
@decorators.idempotent_id('cde532cc-81ba-4489-b374-b4a85cc203eb')
|
||||
@utils.services('image', 'network')
|
||||
def test_ip_access_to_server(self):
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
self.boot_and_verify_node()
|
||||
|
||||
|
||||
class BaremetalIpmiRescueWholedisk(bsm.BaremetalStandaloneScenarioTest):
|
||||
|
@ -212,6 +201,7 @@ class BaremetalIpmiRescueWholedisk(bsm.BaremetalStandaloneScenarioTest):
|
|||
@decorators.idempotent_id('d6a1780f-c4bb-4136-8144-29e822e14d66')
|
||||
@utils.services('image', 'network')
|
||||
def test_rescue_mode(self):
|
||||
self.set_node_to_active(self.image_ref)
|
||||
self.rescue_node(self.node['uuid'], 'abc123')
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
|
@ -239,6 +229,7 @@ class BaremetalIpmiRescuePartitioned(bsm.BaremetalStandaloneScenarioTest):
|
|||
@decorators.idempotent_id('113acd0a-9872-4631-b3ee-54da7e3bb262')
|
||||
@utils.services('image', 'network')
|
||||
def test_rescue_mode(self):
|
||||
self.set_node_to_active(self.image_ref)
|
||||
self.rescue_node(self.node['uuid'], 'abc123')
|
||||
self.assertTrue(self.ping_ip_address(self.node_ip,
|
||||
should_succeed=True))
|
||||
|
|
Loading…
Reference in New Issue