summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-01-04 20:58:06 +0000
committerGerrit Code Review <review@openstack.org>2022-01-04 20:58:06 +0000
commit4126936c4b3cea6100c6360c40f9118461c0d3dc (patch)
treeea5bd0d80c44f29bf3debe32c911060691717732
parentd3372784ea45ca971519587784c3de9c94fd1d7c (diff)
parentbd76a5766c76727109d67020696804efafea73f1 (diff)
downloadpython-ironicclient-4126936c4b3cea6100c6360c40f9118461c0d3dc.tar.gz
Merge "Validate path when passing a config-drive"4.11.0
-rw-r--r--ironicclient/tests/unit/v1/test_node.py12
-rw-r--r--ironicclient/v1/node.py8
2 files changed, 17 insertions, 3 deletions
diff --git a/ironicclient/tests/unit/v1/test_node.py b/ironicclient/tests/unit/v1/test_node.py
index 85352e9..83808d5 100644
--- a/ironicclient/tests/unit/v1/test_node.py
+++ b/ironicclient/tests/unit/v1/test_node.py
@@ -1556,7 +1556,7 @@ class NodeManagerTest(testtools.TestCase):
def test_node_set_provision_state_with_configdrive(self):
target_state = 'active'
self.mgr.set_provision_state(NODE1['uuid'], target_state,
- configdrive='foo')
+ configdrive=b'foo')
body = {'target': target_state, 'configdrive': 'foo'}
expect = [
('PUT', '/v1/nodes/%s/states/provision' % NODE1['uuid'], {}, body),
@@ -1616,6 +1616,16 @@ class NodeManagerTest(testtools.TestCase):
]
self.assertEqual(expect, self.api.calls)
+ def test_node_set_provision_state_fails_missing_dir_or_file(self):
+ target_state = 'active'
+
+ with common_utils.tempdir() as dirname:
+ self.assertRaisesRegex(ValueError,
+ 'Config drive',
+ self.mgr.set_provision_state,
+ NODE1['uuid'], target_state,
+ configdrive=dirname + "/thisdoesnotexist")
+
def test_node_set_provision_state_with_cleansteps(self):
cleansteps = [{"step": "upgrade", "interface": "deploy"}]
target_state = 'clean'
diff --git a/ironicclient/v1/node.py b/ironicclient/v1/node.py
index 84def25..80a32c8 100644
--- a/ironicclient/v1/node.py
+++ b/ironicclient/v1/node.py
@@ -714,12 +714,16 @@ class NodeManager(base.CreateManager):
path = "%s/states/provision" % node_uuid
body = {'target': state}
if configdrive:
- if not isinstance(configdrive, dict):
+ if isinstance(configdrive, str):
if os.path.isfile(configdrive):
with open(configdrive, 'rb') as f:
configdrive = f.read()
- if os.path.isdir(configdrive):
+ elif os.path.isdir(configdrive):
configdrive = utils.make_configdrive(configdrive)
+ else:
+ raise ValueError('Config drive seems to refer to a file '
+ 'or directory but this file/directory '
+ 'does not exist: %s.' % configdrive)
if isinstance(configdrive, bytes):
try: