diff options
author | Richard Ipsum <richard.ipsum@codethink.co.uk> | 2015-03-17 08:26:48 +0000 |
---|---|---|
committer | Richard Ipsum <richard.ipsum@codethink.co.uk> | 2015-03-17 16:12:36 +0000 |
commit | 82d094e788988072ad438f404446152f1a04832d (patch) | |
tree | f5aa349366453c62551476e3cf2ee8f997d61506 | |
parent | 6ed2ecf054cba181fb4600f2342597e5be83f7e0 (diff) | |
download | definitions-82d094e788988072ad438f404446152f1a04832d.tar.gz |
Add validation for SWIFT_STORAGE_DEVICES
We could probably do with a better format for specifying these devices
but this should do for now and this validation script should catch any
deployment errors during morph deploy.
-rwxr-xr-x | swift-storage-devices-validate.py | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/swift-storage-devices-validate.py b/swift-storage-devices-validate.py new file mode 100755 index 00000000..27fb6dbe --- /dev/null +++ b/swift-storage-devices-validate.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright © 2015 Codethink Limited +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# +# This is used by the openstack-swift.configure extension +# to validate any provided storage device specifiers +# under SWIFT_STORAGE_DEVICES +# + + +''' + This is used by the openstack-swift.configure extension + to validate any storage device specifiers specified + in the SWIFT_STORAGE_DEVICES environment variable +''' + +from __future__ import print_function + +import yaml +import sys + +EXAMPLE_DEVSPEC = '{device: sdb1, ip: 127.0.0.1, weight: 100}' +REQUIRED_KEYS = ['ip', 'device', 'weight'] + +def err(msg): + print(msg, file=sys.stderr) + sys.exit(1) + +if len(sys.argv) != 2: + err('usage: %s STRING_TO_BE_VALIDATED' % sys.argv[0]) + +o = yaml.load(sys.argv[1]) + +if not isinstance(o, list): + err('Expected list of device specifiers\n' + 'Example: [%s]' % EXAMPLE_DEVSPEC) + +for d in o: + if not isinstance(d, dict): + err("Invalid device specifier: `%s'\n" + 'Device specifier must be a dictionary\n' + 'Example: %s' % (d, EXAMPLE_DEVSPEC)) + + if set(d.keys()) != set(REQUIRED_KEYS): + err("Invalid device specifier: `%s'\n" + 'Specifier should contain: %s\n' + 'Example: %s' % (d, str(REQUIRED_KEYS)[1:-1], EXAMPLE_DEVSPEC)) |