Correct parsing of volume metadata

Volume metadata supplied via the command line is incorrectly parsed,
converting each character into a key with “None” as the corresponding
value.  This bug fix corrects the parsing and also includes regression
tests when metadata is provided when creating a volume.

Change-Id: I8c093df59ea4de2e2a1b7cf3ac7c4624c159fb66
Implements: blueprint encrypt-cinder-volumes
This commit is contained in:
Nathan Reller
2013-02-05 19:00:26 -05:00
parent b49f72735e
commit 7053498f3d
2 changed files with 21 additions and 2 deletions

View File

@@ -94,7 +94,7 @@ def _translate_volume_snapshot_keys(collection):
def _extract_metadata(args):
metadata = {}
for metadatum in args.metadata[0]:
for metadatum in args.metadata:
# unset doesn't require a val, so we have the if/else
if '=' in metadatum:
(key, value) = metadatum.split('=', 1)
@@ -288,7 +288,6 @@ def do_rename(cs, args):
@utils.arg('metadata',
metavar='<key=value>',
nargs='+',
action='append',
default=[],
help='Metadata to set/unset (only key is necessary on unset)')
@utils.service_type('volume')

View File

@@ -21,6 +21,7 @@ import fixtures
from cinderclient import client
from cinderclient import shell
from cinderclient.v1 import shell as shell_v1
from tests.v1 import fakes
from tests import utils
@@ -70,6 +71,25 @@ class ShellTest(utils.TestCase):
def assert_called_anytime(self, method, url, body=None):
return self.shell.cs.assert_called_anytime(method, url, body)
def test_extract_metadata(self):
# mimic the result of argparse's parse_args() method
class Arguments:
def __init__(self, metadata=[]):
self.metadata = metadata
inputs = [
([], {}),
(["key=value"], {"key": "value"}),
(["key"], {"key": None}),
(["k1=v1", "k2=v2"], {"k1": "v1", "k2": "v2"}),
(["k1=v1", "k2"], {"k1": "v1", "k2": None}),
(["k1", "k2=v2"], {"k1": None, "k2": "v2"})
]
for input in inputs:
args = Arguments(metadata=input[0])
self.assertEquals(shell_v1._extract_metadata(args), input[1])
def test_list(self):
self.run_command('list')
# NOTE(jdg): we default to detail currently