Skip to content

Commit c377425

Browse files
Jenkinsopenstack-gerrit
Jenkins
authored andcommitted
Merge "Allow 'any' option for protocol in the firewall rule"
2 parents b1f348a + f208a89 commit c377425

File tree

2 files changed

+41
-4
lines changed

2 files changed

+41
-4
lines changed

neutronclient/neutron/v2_0/fw/firewallrule.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class ListFirewallRule(neutronv20.ListCommand):
3434
def extend_list(self, data, parsed_args):
3535
for d in data:
3636
val = []
37-
if 'protocol' in d:
37+
if d.get('protocol'):
3838
protocol = d['protocol'].upper()
3939
else:
4040
protocol = 'no-protocol'
@@ -102,7 +102,7 @@ def add_known_arguments(self, parser):
102102
action='store_false',
103103
help='to disable this rule')
104104
parser.add_argument(
105-
'--protocol', choices=['tcp', 'udp', 'icmp'],
105+
'--protocol', choices=['tcp', 'udp', 'icmp', 'any'],
106106
required=True,
107107
help='protocol for the firewall rule')
108108
parser.add_argument(
@@ -120,6 +120,10 @@ def args2body(self, parsed_args):
120120
'source_ip_address', 'destination_ip_address',
121121
'source_port', 'destination_port',
122122
'action', 'enabled', 'tenant_id'])
123+
protocol = parsed_args.protocol
124+
if protocol == 'any':
125+
protocol = None
126+
body[self.resource]['protocol'] = protocol
123127
return body
124128

125129

@@ -129,6 +133,23 @@ class UpdateFirewallRule(neutronv20.UpdateCommand):
129133
resource = 'firewall_rule'
130134
log = logging.getLogger(__name__ + '.UpdateFirewallRule')
131135

136+
def add_known_arguments(self, parser):
137+
parser.add_argument(
138+
'--protocol', choices=['tcp', 'udp', 'icmp', 'any'],
139+
required=False,
140+
help='protocol for the firewall rule')
141+
142+
def args2body(self, parsed_args):
143+
body = {
144+
self.resource: {},
145+
}
146+
protocol = parsed_args.protocol
147+
if protocol:
148+
if protocol == 'any':
149+
protocol = None
150+
body[self.resource]['protocol'] = protocol
151+
return body
152+
132153

133154
class DeleteFirewallRule(neutronv20.DeleteCommand):
134155
"""Delete a given firewall rule."""

neutronclient/tests/unit/fw/test_cli20_firewallrule.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,13 @@ def test_create_firewall_rule_with_mandatory_params(self):
4747
protocol=protocol, action=action,
4848
enabled=True, tenant_id=tenant_id)
4949

50-
def test_create_firewall_rule_with_all_params(self):
50+
def _setup_create_firewall_rule_with_all_params(self, protocol='tcp'):
5151
"""firewall-rule-create with all params set."""
5252
resource = 'firewall_rule'
5353
cmd = firewallrule.CreateFirewallRule(test_cli20.MyApp(sys.stdout),
5454
None)
5555
name = 'my-name'
5656
description = 'my-desc'
57-
protocol = 'tcp'
5857
source_ip = '192.168.1.0/24'
5958
destination_ip = '192.168.2.0/24'
6059
source_port = '0:65535'
@@ -75,6 +74,8 @@ def test_create_firewall_rule_with_all_params(self):
7574
'--tenant-id', tenant_id]
7675
position_names = []
7776
position_values = []
77+
if protocol == 'any':
78+
protocol = None
7879
self._test_create_resource(resource, cmd, name, my_id, args,
7980
position_names, position_values,
8081
description=description, shared=True,
@@ -86,6 +87,12 @@ def test_create_firewall_rule_with_all_params(self):
8687
action=action, enabled=True,
8788
tenant_id=tenant_id)
8889

90+
def test_create_firewall_rule_with_all_params(self):
91+
self._setup_create_firewall_rule_with_all_params()
92+
93+
def test_create_firewall_rule_with_proto_any(self):
94+
self._setup_create_firewall_rule_with_all_params(protocol='any')
95+
8996
def test_list_firewall_rules(self):
9097
"""firewall-rule-list."""
9198
resources = "firewall_rules"
@@ -144,6 +151,15 @@ def test_update_firewall_rule(self):
144151
['myid', '--name', 'newname'],
145152
{'name': 'newname', })
146153

154+
def test_update_firewall_rule_protocol(self):
155+
"""firewall-rule-update myid --protocol any."""
156+
resource = 'firewall_rule'
157+
cmd = firewallrule.UpdateFirewallRule(test_cli20.MyApp(sys.stdout),
158+
None)
159+
self._test_update_resource(resource, cmd, 'myid',
160+
['myid', '--protocol', 'any'],
161+
{'protocol': None, })
162+
147163
def test_delete_firewall_rule(self):
148164
"""firewall-rule-delete my-id."""
149165
resource = 'firewall_rule'

0 commit comments

Comments
 (0)