Merge "Do not boot nodes if not set in standalone tests"

This commit is contained in:
Zuul 2018-06-26 09:52:40 +00:00 committed by Gerrit Code Review
commit ccddbbcedf
2 changed files with 53 additions and 59 deletions

View File

@ -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))

View File

@ -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))