baremetal-introspection: add manage_boot argument to start_introspection
Change-Id: Ia4240db1aacd658c3ad42eca2391fec880b4efd9
This commit is contained in:
@@ -56,16 +56,23 @@ class Proxy(proxy.Proxy):
|
||||
"""
|
||||
return _introspect.Introspection.list(self, **query)
|
||||
|
||||
def start_introspection(self, node):
|
||||
def start_introspection(self, node, manage_boot=None):
|
||||
"""Create a new introspection from attributes.
|
||||
|
||||
:param node: The value can be either the name or ID of a node or
|
||||
a :class:`~openstack.baremetal.v1.node.Node` instance.
|
||||
:param bool manage_boot: Whether to manage boot parameters for the
|
||||
node. Defaults to the server default (which is `True`).
|
||||
|
||||
:returns: :class:`~.introspection.Introspection` instance.
|
||||
"""
|
||||
node = self._get_resource(_node.Node, node)
|
||||
return self._create(_introspect.Introspection, id=node.id)
|
||||
res = _introspect.Introspection.new(connection=self._get_connection(),
|
||||
id=node.id)
|
||||
kwargs = {}
|
||||
if manage_boot is not None:
|
||||
kwargs['manage_boot'] = manage_boot
|
||||
return res.create(self, **kwargs)
|
||||
|
||||
def get_introspection(self, introspection):
|
||||
"""Get a specific introspection.
|
||||
|
@@ -1217,7 +1217,7 @@ class Resource(dict):
|
||||
|
||||
return actual
|
||||
|
||||
def create(self, session, prepend_key=True, base_path=None):
|
||||
def create(self, session, prepend_key=True, base_path=None, **params):
|
||||
"""Create a remote resource based on this instance.
|
||||
|
||||
:param session: The session to use for making this request.
|
||||
@@ -1228,6 +1228,7 @@ class Resource(dict):
|
||||
:param str base_path: Base part of the URI for creating resources, if
|
||||
different from
|
||||
:data:`~openstack.resource.Resource.base_path`.
|
||||
:param dict params: Additional params to pass.
|
||||
:return: This :class:`Resource` instance.
|
||||
:raises: :exc:`~openstack.exceptions.MethodNotSupported` if
|
||||
:data:`Resource.allow_create` is not set to ``True``.
|
||||
@@ -1246,14 +1247,14 @@ class Resource(dict):
|
||||
base_path=base_path)
|
||||
response = session.put(request.url,
|
||||
json=request.body, headers=request.headers,
|
||||
microversion=microversion)
|
||||
microversion=microversion, params=params)
|
||||
elif self.create_method == 'POST':
|
||||
request = self._prepare_request(requires_id=requires_id,
|
||||
prepend_key=prepend_key,
|
||||
base_path=base_path)
|
||||
response = session.post(request.url,
|
||||
json=request.body, headers=request.headers,
|
||||
microversion=microversion)
|
||||
microversion=microversion, params=params)
|
||||
else:
|
||||
raise exceptions.ResourceFailure(
|
||||
msg="Invalid create method: %s" % self.create_method)
|
||||
|
@@ -297,7 +297,8 @@ class TestNodeCreate(base.TestCase):
|
||||
self.assertIs(result, self.node)
|
||||
self.session.post.assert_called_once_with(
|
||||
mock.ANY, json={'driver': FAKE['driver']},
|
||||
headers=mock.ANY, microversion=self.session.default_microversion)
|
||||
headers=mock.ANY, microversion=self.session.default_microversion,
|
||||
params={})
|
||||
self.assertFalse(mock_prov.called)
|
||||
|
||||
def test_available_new_version(self, mock_prov):
|
||||
@@ -313,7 +314,8 @@ class TestNodeCreate(base.TestCase):
|
||||
self.assertIs(result, self.node)
|
||||
self.session.post.assert_called_once_with(
|
||||
mock.ANY, json={'driver': FAKE['driver']},
|
||||
headers=mock.ANY, microversion=self.session.default_microversion)
|
||||
headers=mock.ANY, microversion=self.session.default_microversion,
|
||||
params={})
|
||||
mock_prov.assert_has_calls([
|
||||
mock.call(self.node, self.session, 'manage', wait=True),
|
||||
mock.call(self.node, self.session, 'provide', wait=True)
|
||||
@@ -335,7 +337,8 @@ class TestNodeCreate(base.TestCase):
|
||||
self.assertIs(result, self.node)
|
||||
self.session.post.assert_called_once_with(
|
||||
mock.ANY, json={'driver': FAKE['driver']},
|
||||
headers=mock.ANY, microversion=self.session.default_microversion)
|
||||
headers=mock.ANY, microversion=self.session.default_microversion,
|
||||
params={})
|
||||
self.assertFalse(mock_prov.called)
|
||||
|
||||
def test_no_manageable_in_old_version(self, mock_prov):
|
||||
@@ -354,7 +357,8 @@ class TestNodeCreate(base.TestCase):
|
||||
self.assertIs(result, self.node)
|
||||
self.session.post.assert_called_once_with(
|
||||
mock.ANY, json={'driver': FAKE['driver']},
|
||||
headers=mock.ANY, microversion=self.session.default_microversion)
|
||||
headers=mock.ANY, microversion=self.session.default_microversion,
|
||||
params={})
|
||||
mock_prov.assert_called_once_with(self.node, self.session, 'manage',
|
||||
wait=True)
|
||||
|
||||
@@ -367,7 +371,8 @@ class TestNodeCreate(base.TestCase):
|
||||
self.assertIs(result, self.node)
|
||||
self.session.post.assert_called_once_with(
|
||||
mock.ANY, json={'driver': FAKE['driver']},
|
||||
headers=mock.ANY, microversion=self.session.default_microversion)
|
||||
headers=mock.ANY, microversion=self.session.default_microversion,
|
||||
params={})
|
||||
mock_prov.assert_called_once_with(self.node, self.session, 'manage',
|
||||
wait=True)
|
||||
|
||||
|
@@ -22,24 +22,40 @@ from openstack.tests.unit import base
|
||||
from openstack.tests.unit import test_proxy_base
|
||||
|
||||
|
||||
@mock.patch.object(introspection.Introspection, 'create', autospec=True)
|
||||
class TestStartIntrospection(base.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestStartIntrospection, self).setUp()
|
||||
self.session = mock.Mock(spec=adapter.Adapter)
|
||||
self.proxy = _proxy.Proxy(self.session)
|
||||
|
||||
def test_create_introspection(self, mock_create):
|
||||
self.proxy.start_introspection('abcd')
|
||||
mock_create.assert_called_once_with(mock.ANY, self.proxy)
|
||||
introspect = mock_create.call_args[0][0]
|
||||
self.assertEqual('abcd', introspect.id)
|
||||
|
||||
def test_create_introspection_with_node(self, mock_create):
|
||||
self.proxy.start_introspection(_node.Node(id='abcd'))
|
||||
mock_create.assert_called_once_with(mock.ANY, self.proxy)
|
||||
introspect = mock_create.call_args[0][0]
|
||||
self.assertEqual('abcd', introspect.id)
|
||||
|
||||
def test_create_introspection_manage_boot(self, mock_create):
|
||||
self.proxy.start_introspection('abcd', manage_boot=False)
|
||||
mock_create.assert_called_once_with(mock.ANY, self.proxy,
|
||||
manage_boot=False)
|
||||
introspect = mock_create.call_args[0][0]
|
||||
self.assertEqual('abcd', introspect.id)
|
||||
|
||||
|
||||
class TestBaremetalIntrospectionProxy(test_proxy_base.TestProxyBase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestBaremetalIntrospectionProxy, self).setUp()
|
||||
self.proxy = _proxy.Proxy(self.session)
|
||||
|
||||
def test_create_introspection(self):
|
||||
self.verify_create(self.proxy.start_introspection,
|
||||
introspection.Introspection,
|
||||
method_kwargs={'node': 'abcd'},
|
||||
expected_kwargs={'id': 'abcd'})
|
||||
|
||||
def test_create_introspection_with_node(self):
|
||||
self.verify_create(self.proxy.start_introspection,
|
||||
introspection.Introspection,
|
||||
method_kwargs={'node': _node.Node(id='abcd')},
|
||||
expected_kwargs={'id': 'abcd'})
|
||||
|
||||
def test_get_introspection(self):
|
||||
self.verify_get(self.proxy.get_introspection,
|
||||
introspection.Introspection)
|
||||
|
@@ -96,7 +96,7 @@ class TestProxyBase(base.TestCase):
|
||||
expected_result="result", **kwargs):
|
||||
the_kwargs = {"x": 1, "y": 2, "z": 3}
|
||||
method_kwargs = kwargs.pop("method_kwargs", the_kwargs)
|
||||
expected_args = [resource_type]
|
||||
expected_args = kwargs.pop('expected_args', [resource_type])
|
||||
# Default the_kwargs should be copied, since we might need to extend it
|
||||
expected_kwargs = kwargs.pop("expected_kwargs", the_kwargs.copy())
|
||||
expected_kwargs["base_path"] = kwargs.pop("base_path", None)
|
||||
|
@@ -1372,14 +1372,15 @@ class TestResourceActions(base.TestCase):
|
||||
self.session.get_endpoint_data.return_value = self.endpoint_data
|
||||
|
||||
def _test_create(self, cls, requires_id=False, prepend_key=False,
|
||||
microversion=None, base_path=None):
|
||||
microversion=None, base_path=None, params=None):
|
||||
id = "id" if requires_id else None
|
||||
sot = cls(id=id)
|
||||
sot._prepare_request = mock.Mock(return_value=self.request)
|
||||
sot._translate_response = mock.Mock()
|
||||
|
||||
params = params or {}
|
||||
result = sot.create(self.session, prepend_key=prepend_key,
|
||||
base_path=base_path)
|
||||
base_path=base_path, **params)
|
||||
|
||||
sot._prepare_request.assert_called_once_with(
|
||||
requires_id=requires_id, prepend_key=prepend_key,
|
||||
@@ -1388,12 +1389,12 @@ class TestResourceActions(base.TestCase):
|
||||
self.session.put.assert_called_once_with(
|
||||
self.request.url,
|
||||
json=self.request.body, headers=self.request.headers,
|
||||
microversion=microversion)
|
||||
microversion=microversion, params=params)
|
||||
else:
|
||||
self.session.post.assert_called_once_with(
|
||||
self.request.url,
|
||||
json=self.request.body, headers=self.request.headers,
|
||||
microversion=microversion)
|
||||
microversion=microversion, params=params)
|
||||
|
||||
self.assertEqual(sot.microversion, microversion)
|
||||
sot._translate_response.assert_called_once_with(self.response,
|
||||
@@ -1420,6 +1421,16 @@ class TestResourceActions(base.TestCase):
|
||||
self._test_create(Test, requires_id=True, prepend_key=True,
|
||||
microversion='1.42')
|
||||
|
||||
def test_put_create_with_params(self):
|
||||
class Test(resource.Resource):
|
||||
service = self.service_name
|
||||
base_path = self.base_path
|
||||
allow_create = True
|
||||
create_method = 'PUT'
|
||||
|
||||
self._test_create(Test, requires_id=True, prepend_key=True,
|
||||
params={'answer': 42})
|
||||
|
||||
def test_post_create(self):
|
||||
class Test(resource.Resource):
|
||||
service = self.service_name
|
||||
@@ -1439,6 +1450,16 @@ class TestResourceActions(base.TestCase):
|
||||
self._test_create(Test, requires_id=False, prepend_key=True,
|
||||
base_path='dummy')
|
||||
|
||||
def test_post_create_with_params(self):
|
||||
class Test(resource.Resource):
|
||||
service = self.service_name
|
||||
base_path = self.base_path
|
||||
allow_create = True
|
||||
create_method = 'POST'
|
||||
|
||||
self._test_create(Test, requires_id=False, prepend_key=True,
|
||||
params={'answer': 42})
|
||||
|
||||
def test_fetch(self):
|
||||
result = self.sot.fetch(self.session)
|
||||
|
||||
|
Reference in New Issue
Block a user