diff options
author | Zuul <zuul@review.opendev.org> | 2022-01-04 20:58:06 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2022-01-04 20:58:06 +0000 |
commit | 4126936c4b3cea6100c6360c40f9118461c0d3dc (patch) | |
tree | ea5bd0d80c44f29bf3debe32c911060691717732 | |
parent | d3372784ea45ca971519587784c3de9c94fd1d7c (diff) | |
parent | bd76a5766c76727109d67020696804efafea73f1 (diff) | |
download | python-ironicclient-4126936c4b3cea6100c6360c40f9118461c0d3dc.tar.gz |
Merge "Validate path when passing a config-drive"4.11.0
-rw-r--r-- | ironicclient/tests/unit/v1/test_node.py | 12 | ||||
-rw-r--r-- | ironicclient/v1/node.py | 8 |
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: |