Ignore case in security group rule --ethertype

Currently, this only allows 'IPv4' or 'IPv6', but one can imagine a user
frequently typing e.g. 'ipv6' and getting frustrated. Allow any case,
while still keeping correct case for the choices and the value sent to
Neutron.

Change-Id: I70ce1f43d32aad01b174437d03c984a5b608b161
This commit is contained in:
Jim Rollenhagen 2019-04-01 15:41:17 -04:00
parent c684fd926a
commit c53de3214e
2 changed files with 33 additions and 0 deletions

View File

@ -73,6 +73,14 @@ def _convert_to_lowercase(string):
return string.lower() return string.lower()
def _convert_ipvx_case(string):
if string.lower() == 'ipv4':
return 'IPv4'
if string.lower() == 'ipv6':
return 'IPv6'
return string
def _is_icmp_protocol(protocol): def _is_icmp_protocol(protocol):
# NOTE(rtheis): Neutron has deprecated protocol icmpv6. # NOTE(rtheis): Neutron has deprecated protocol icmpv6.
# However, while the OSC CLI doesn't document the protocol, # However, while the OSC CLI doesn't document the protocol,
@ -183,6 +191,7 @@ class CreateSecurityGroupRule(common.NetworkAndComputeShowOne):
'--ethertype', '--ethertype',
metavar='<ethertype>', metavar='<ethertype>',
choices=['IPv4', 'IPv6'], choices=['IPv4', 'IPv6'],
type=_convert_ipvx_case,
help=_("Ethertype of network traffic " help=_("Ethertype of network traffic "
"(IPv4, IPv6; default: based on IP protocol)") "(IPv4, IPv6; default: based on IP protocol)")
) )

View File

@ -125,6 +125,30 @@ class TestCreateSecurityGroupRuleNetwork(TestSecurityGroupRuleNetwork):
self.assertRaises(tests_utils.ParserException, self.assertRaises(tests_utils.ParserException,
self.check_parser, self.cmd, arglist, []) self.check_parser, self.cmd, arglist, [])
def test_lowercase_ethertype(self):
arglist = [
'--ethertype', 'ipv4',
self._security_group.id,
]
parsed_args = self.check_parser(self.cmd, arglist, [])
self.assertEqual('IPv4', parsed_args.ethertype)
def test_lowercase_v6_ethertype(self):
arglist = [
'--ethertype', 'ipv6',
self._security_group.id,
]
parsed_args = self.check_parser(self.cmd, arglist, [])
self.assertEqual('IPv6', parsed_args.ethertype)
def test_proper_case_ethertype(self):
arglist = [
'--ethertype', 'IPv6',
self._security_group.id,
]
parsed_args = self.check_parser(self.cmd, arglist, [])
self.assertEqual('IPv6', parsed_args.ethertype)
def test_create_all_protocol_options(self): def test_create_all_protocol_options(self):
arglist = [ arglist = [
'--protocol', 'tcp', '--protocol', 'tcp',