Merge "Refactor for discoverd rename to inspector"

This commit is contained in:
Jenkins 2015-09-21 09:11:20 +00:00 committed by Gerrit Code Review
commit 69adf64994
5 changed files with 83 additions and 91 deletions

View File

@ -6,7 +6,7 @@ pbr>=0.6,!=0.7,<1.0
Babel>=1.3
cliff>=1.7.0 # Apache-2.0
ipaddress
ironic-discoverd==1.1.0
python-ironic-inspector-client>=1.0.1
os-cloud-config
python-heatclient>=0.3.0
python-ironicclient>=0.4.1

View File

@ -159,39 +159,39 @@ class TestWaitForStackUtil(TestCase):
self.assertEqual(complete, False)
class TestWaitForDiscovery(TestCase):
class TestWaitForIntrospection(TestCase):
def test_wait_for_discovery_success(self):
def test_wait_for_introspection_success(self):
mock_discoverd = mock.Mock()
mock_inspector = mock.Mock()
self.node_uuids = [
'NODE1',
'NODE2',
]
mock_discoverd.get_status.return_value = {
mock_inspector.get_status.return_value = {
'finished': True,
'error': None
}
result = utils.wait_for_node_discovery(mock_discoverd, "TOKEN",
"URL", self.node_uuids,
loops=4, sleep=0.01)
result = utils.wait_for_node_introspection(mock_inspector, "TOKEN",
"URL", self.node_uuids,
loops=4, sleep=0.01)
self.assertEqual(list(result), [
('NODE1', {'error': None, 'finished': True}),
('NODE2', {'error': None, 'finished': True})
])
def test_wait_for_discovery_partial_success(self):
def test_wait_for_introspection_partial_success(self):
mock_discoverd = mock.Mock()
mock_inspector = mock.Mock()
self.node_uuids = [
'NODE1',
'NODE2',
]
mock_discoverd.get_status.side_effect = [{
mock_inspector.get_status.side_effect = [{
'finished': True,
'error': None
}, {
@ -199,31 +199,31 @@ class TestWaitForDiscovery(TestCase):
'error': "Failed"
}]
result = utils.wait_for_node_discovery(mock_discoverd, "TOKEN",
"URL", self.node_uuids,
loops=4, sleep=0.01)
result = utils.wait_for_node_introspection(mock_inspector, "TOKEN",
"URL", self.node_uuids,
loops=4, sleep=0.01)
self.assertEqual(list(result), [
('NODE1', {'error': None, 'finished': True}),
('NODE2', {'error': "Failed", 'finished': True})
])
def test_wait_for_discovery_timeout(self):
def test_wait_for_introspection_timeout(self):
mock_discoverd = mock.Mock()
mock_inspector = mock.Mock()
self.node_uuids = [
'NODE1',
'NODE2',
]
mock_discoverd.get_status.return_value = {
mock_inspector.get_status.return_value = {
'finished': False,
'error': None
}
result = utils.wait_for_node_discovery(mock_discoverd, "TOKEN",
"URL", self.node_uuids,
loops=4, sleep=0.01)
result = utils.wait_for_node_introspection(mock_inspector, "TOKEN",
"URL", self.node_uuids,
loops=4, sleep=0.01)
self.assertEqual(list(result), [])

View File

@ -19,8 +19,6 @@ import json
import mock
import os
from ironic_discoverd import client as discoverd_client
from tripleoclient import exceptions
from tripleoclient.tests.v1.baremetal import fakes
from tripleoclient.v1 import baremetal
@ -452,9 +450,9 @@ class TestStartBaremetalIntrospectionBulk(fakes.TestBaremetal):
# Get the command object to test
self.cmd = baremetal.StartBaremetalIntrospectionBulk(self.app, None)
@mock.patch('ironic_discoverd.client.get_status', autospec=True)
@mock.patch('ironic_discoverd.client.introspect', autospec=True)
def test_introspect_bulk_one(self, introspect_mock, get_status_mock,):
@mock.patch.object(baremetal.inspector_client, 'get_status', autospec=True)
@mock.patch.object(baremetal.inspector_client, 'introspect', autospec=True)
def test_introspect_bulk_one(self, inspection_mock, get_status_mock):
client = self.app.client_manager.tripleoclient.baremetal()
client.node.list.return_value = [
@ -464,19 +462,19 @@ class TestStartBaremetalIntrospectionBulk(fakes.TestBaremetal):
parsed_args = self.check_parser(self.cmd, [], [])
self.cmd.take_action(parsed_args)
introspect_mock.assert_called_once_with(
inspection_mock.assert_called_once_with(
'ABCDEFGH', base_url=None, auth_token='TOKEN')
@mock.patch('tripleoclient.utils.wait_for_node_discovery',
@mock.patch('tripleoclient.utils.wait_for_node_introspection',
autospec=True)
@mock.patch('tripleoclient.utils.wait_for_provision_state',
autospec=True)
@mock.patch('ironic_discoverd.client.get_status', autospec=True)
@mock.patch('ironic_discoverd.client.introspect', autospec=True)
@mock.patch.object(baremetal.inspector_client, 'get_status', autospec=True)
@mock.patch.object(baremetal.inspector_client, 'introspect', autospec=True)
def test_introspect_bulk(self, introspect_mock, get_status_mock,
wait_for_state_mock, wait_for_discover_mock):
wait_for_state_mock, wait_for_inspect_mock):
wait_for_discover_mock.return_value = []
wait_for_inspect_mock.return_value = []
wait_for_state_mock.return_value = True
get_status_mock.return_value = {'finished': True, 'error': None}
@ -507,8 +505,8 @@ class TestStartBaremetalIntrospectionBulk(fakes.TestBaremetal):
mock.call('IJKLMNOP', base_url=None, auth_token='TOKEN'),
])
wait_for_discover_mock.assert_called_once_with(
discoverd_client, 'TOKEN', None,
wait_for_inspect_mock.assert_called_once_with(
baremetal.inspector_client, 'TOKEN', None,
['IJKLMNOP'])
# And lastly it will be set to available:
@ -525,30 +523,30 @@ class TestStatusBaremetalIntrospectionBulk(fakes.TestBaremetal):
# Get the command object to test
self.cmd = baremetal.StatusBaremetalIntrospectionBulk(self.app, None)
@mock.patch('ironic_discoverd.client.get_status', autospec=True)
def test_status_bulk_one(self, discoverd_mock):
@mock.patch.object(baremetal.inspector_client, 'get_status', autospec=True)
def test_status_bulk_one(self, get_status_mock):
client = self.app.client_manager.tripleoclient.baremetal()
client.node.list.return_value = [
mock.Mock(uuid="ABCDEFGH")
]
discoverd_mock.return_value = {
get_status_mock.return_value = {
'finished': False, 'error': None
}
parsed_args = self.check_parser(self.cmd, [], [])
result = self.cmd.take_action(parsed_args)
discoverd_mock.assert_called_once_with(
get_status_mock.assert_called_once_with(
'ABCDEFGH', base_url=None, auth_token='TOKEN')
self.assertEqual(result, (
('Node UUID', 'Finished', 'Error'),
[('ABCDEFGH', False, None)]))
@mock.patch('ironic_discoverd.client.get_status', autospec=True)
def test_status_bulk(self, discoverd_mock):
@mock.patch.object(baremetal.inspector_client, 'get_status', autospec=True)
def test_status_bulk(self, get_status_mock):
client = self.app.client_manager.tripleoclient.baremetal()
client.node.list.return_value = [
@ -557,14 +555,14 @@ class TestStatusBaremetalIntrospectionBulk(fakes.TestBaremetal):
mock.Mock(uuid="QRSTUVWX"),
]
discoverd_mock.return_value = {
get_status_mock.return_value = {
'finished': False, 'error': None
}
parsed_args = self.check_parser(self.cmd, [], [])
result = self.cmd.take_action(parsed_args)
discoverd_mock.assert_has_calls([
get_status_mock.assert_has_calls([
mock.call('ABCDEFGH', base_url=None, auth_token='TOKEN'),
mock.call('IJKLMNOP', base_url=None, auth_token='TOKEN'),
mock.call('QRSTUVWX', base_url=None, auth_token='TOKEN'),
@ -795,22 +793,22 @@ class TestConfigureReadyState(fakes.TestBaremetal):
bm_client.node.set_power_state.assert_called_once_with('foo', 'reboot')
@mock.patch('ironic_discoverd.client.introspect', autospec=True)
@mock.patch('tripleoclient.utils.wait_for_node_discovery',
@mock.patch.object(baremetal.inspector_client, 'introspect', autospec=True)
@mock.patch('tripleoclient.utils.wait_for_node_introspection',
autospec=True)
def test__run_introspection(self, mock_wait_for_node_discovery,
def test__run_introspection(self, mock_wait_for_node_introspection,
mock_introspect):
nodes = [mock.Mock(uuid='foo')]
bm_client = self.app.client_manager.tripleoclient.baremetal()
self.cmd.bm_client = bm_client
self.cmd.discoverd_url = None
self.cmd.inspector_url = None
self.cmd._run_introspection(nodes)
mock_introspect.assert_called_once_with('foo', base_url=None,
auth_token='TOKEN')
mock_wait_for_node_discovery.assert_called_once_with(mock.ANY, 'TOKEN',
None, ['foo'])
mock_wait_for_node_introspection.assert_called_once_with(
mock.ANY, 'TOKEN', None, ['foo'])
class TestConfigureBaremetalBoot(fakes.TestBaremetal):

View File

@ -161,7 +161,7 @@ def wait_for_stack_ready(orchestration_client, stack_name):
def wait_for_provision_state(baremetal_client, node_uuid, provision_state,
loops=10, sleep=1):
"""Wait for a given Provisioning state in Ironic Discoverd
"""Wait for a given Provisioning state in Ironic
Updating the provisioning state is an async operation, we
need to wait for it to be completed.
@ -199,22 +199,16 @@ def wait_for_provision_state(baremetal_client, node_uuid, provision_state,
return False
def wait_for_node_discovery(discoverd_client, auth_token, discoverd_url,
node_uuids, loops=220, sleep=10):
"""Check the status of Node discovery in Ironic discoverd
def wait_for_node_introspection(inspector_client, auth_token, inspector_url,
node_uuids, loops=220, sleep=10):
"""Check the status of Node introspection in Ironic inspector
Gets the status and waits for them to complete.
:param discoverd_client: Ironic Discoverd client
:type discoverd_client: ironic_discoverd.client
:param inspector_client: Ironic inspector client
:type inspector_client: ironic_inspector_client
:param auth_token: Authorisation token used by discoverd client
:type auth_token: string
:param discoverd_url: URL used by the discoverd client
:type discoverd_url: string
:param node_uuids: List of Node UUID's to wait for discovery
:param node_uuids: List of Node UUID's to wait for introspection
:type node_uuids: [string, ]
:param loops: How many times to loop
@ -224,21 +218,21 @@ def wait_for_node_discovery(discoverd_client, auth_token, discoverd_url,
:type sleep: int
"""
log = logging.getLogger(__name__ + ".wait_for_node_discovery")
log = logging.getLogger(__name__ + ".wait_for_node_introspection")
node_uuids = node_uuids[:]
for _ in range(0, loops):
for node_uuid in node_uuids:
status = discoverd_client.get_status(
status = inspector_client.get_status(
node_uuid,
base_url=discoverd_url,
base_url=inspector_url,
auth_token=auth_token)
if status['finished']:
log.debug("Discover finished for node {0} (Error: {1})".format(
node_uuid, status['error']))
log.debug("Introspection finished for node {0} "
"(Error: {1})".format(node_uuid, status['error']))
node_uuids.remove(node_uuid)
yield node_uuid, status
@ -247,7 +241,7 @@ def wait_for_node_discovery(discoverd_client, auth_token, discoverd_url,
time.sleep(sleep)
if len(node_uuids):
log.error("Discovery didn't finish for nodes {0}".format(
log.error("Introspection didn't finish for nodes {0}".format(
','.join(node_uuids)))

View File

@ -24,7 +24,7 @@ import time
from cliff import command
from cliff import lister
from ironic_discoverd import client as discoverd_client
from ironic_inspector_client import client as inspector_client
from openstackclient.common import utils as osc_utils
from os_cloud_config import nodes
@ -186,9 +186,9 @@ class IntrospectionParser(object):
def get_parser(self, prog_name):
parser = super(IntrospectionParser, self).get_parser(prog_name)
parser.add_argument(
'--discoverd-url',
default=osc_utils.env('DISCOVERD_URL', default=None),
help='discoverd URL, defaults to localhost (env: DISCOVERD_URL).')
'--inspector-url',
default=osc_utils.env('INSPECTOR_URL', default=None),
help='inspector URL, defaults to localhost (env: INSPECTOR_URL).')
return parser
@ -208,7 +208,6 @@ class StartBaremetalIntrospectionBulk(IntrospectionParser, command.Command):
client = self.app.client_manager.tripleoclient.baremetal()
auth_token = self.app.client_manager.auth_ref.auth_token
node_uuids = []
print("Setting available nodes to manageable...")
@ -226,9 +225,9 @@ class StartBaremetalIntrospectionBulk(IntrospectionParser, command.Command):
node_uuids.append(node.uuid)
print("Starting introspection of node: {0}".format(node.uuid))
discoverd_client.introspect(
inspector_client.introspect(
node.uuid,
base_url=parsed_args.discoverd_url,
base_url=parsed_args.inspector_url,
auth_token=auth_token)
# NOTE(dtantsur): PXE firmware on virtual machines misbehaves when
@ -237,16 +236,16 @@ class StartBaremetalIntrospectionBulk(IntrospectionParser, command.Command):
# around it by using sleep, anyway introspection takes much longer.
time.sleep(5)
print("Waiting for discovery to finish...")
print("Waiting for introspection to finish...")
has_errors = False
for uuid, status in utils.wait_for_node_discovery(
discoverd_client, auth_token, parsed_args.discoverd_url,
for uuid, status in utils.wait_for_node_introspection(
inspector_client, auth_token, parsed_args.inspector_url,
node_uuids):
if status['error'] is None:
print("Discovery for UUID {0} finished successfully."
print("Introspection for UUID {0} finished successfully."
.format(uuid))
else:
print("Discovery for UUID {0} finished with error: {1}"
print("Introspection for UUID {0} finished with error: {1}"
.format(uuid, status['error']))
has_errors = True
@ -263,9 +262,9 @@ class StartBaremetalIntrospectionBulk(IntrospectionParser, command.Command):
print("Node {0} has been set to available.".format(uuid))
if has_errors:
print("Discovery completed with errors.")
print("Introspection completed with errors.")
else:
print("Discovery completed.")
print("Introspection completed.")
class StatusBaremetalIntrospectionBulk(IntrospectionParser, lister.Lister):
@ -277,16 +276,17 @@ class StatusBaremetalIntrospectionBulk(IntrospectionParser, lister.Lister):
self.log.debug("take_action(%s)" % parsed_args)
client = self.app.client_manager.tripleoclient.baremetal()
auth_token = self.app.client_manager.auth_ref.auth_token
statuses = []
for node in client.node.list():
self.log.debug("Getting introspection status of Ironic node {0}"
.format(node.uuid))
auth_token = self.app.client_manager.auth_ref.auth_token
statuses.append((node.uuid, discoverd_client.get_status(
statuses.append((node.uuid, inspector_client.get_status(
node.uuid,
base_url=parsed_args.discoverd_url,
base_url=parsed_args.inspector_url,
auth_token=auth_token)))
return (
@ -395,21 +395,21 @@ class ConfigureReadyState(IntrospectionParser, command.Command):
for node in nodes:
print("Starting introspection on node {0}".format(node.uuid))
discoverd_client.introspect(
inspector_client.introspect(
node.uuid,
base_url=self.discoverd_url,
base_url=self.inspector_url,
auth_token=auth_token)
node_uuids.append(node.uuid)
print("Waiting for discovery to finish")
for uuid, status in utils.wait_for_node_discovery(
discoverd_client, auth_token, self.discoverd_url,
print("Waiting for introspection to finish")
for uuid, status in utils.wait_for_node_introspection(
inspector_client, auth_token, self.inspector_url,
node_uuids):
if status['error'] is None:
print("Discovery for node {0} finished successfully."
print("Introspection for node {0} finished successfully."
.format(uuid))
else:
print("Discovery for node {0} finished with error: {1}"
print("Introspection for node {0} finished with error: {1}"
.format(uuid, status['error']))
def get_parser(self, prog_name):
@ -424,7 +424,7 @@ class ConfigureReadyState(IntrospectionParser, command.Command):
self.bm_client = (
self.app.client_manager.tripleoclient.baremetal())
self.discoverd_url = parsed_args.discoverd_url
self.inspector_url = parsed_args.inspector_url
drac_nodes = [node for node in self.bm_client.node.list(detail=True)
if 'drac' in node.driver]