Support fwaasrouterinsertion extension
fwaasrouterinsertion extension allows to specify which routers implement a firewall (on create/update). This changes adds its support by allowing to: * set routers with --router option in firewall-create/update commands, * unset routers with --no-routers option in firewall-update command. Change-Id: I654c1ddd4140a60b8a09237f7142ad211e951d92 Closes-Bug: #1435264
This commit is contained in:
parent
9b5d39789f
commit
6588c42430
neutronclient
@ -63,15 +63,27 @@ class CreateFirewall(neutronv20.CreateCommand):
|
|||||||
dest='admin_state',
|
dest='admin_state',
|
||||||
action='store_false',
|
action='store_false',
|
||||||
help=_('Set admin state up to false.'))
|
help=_('Set admin state up to false.'))
|
||||||
|
parser.add_argument(
|
||||||
|
'--router',
|
||||||
|
dest='routers',
|
||||||
|
metavar='ROUTER',
|
||||||
|
action='append',
|
||||||
|
help=_('Firewall associated router names or IDs (requires FWaaS '
|
||||||
|
'router insertion extension, this option can be repeated)'))
|
||||||
|
|
||||||
def args2body(self, parsed_args):
|
def args2body(self, parsed_args):
|
||||||
|
client = self.get_client()
|
||||||
_policy_id = neutronv20.find_resourceid_by_name_or_id(
|
_policy_id = neutronv20.find_resourceid_by_name_or_id(
|
||||||
self.get_client(), 'firewall_policy',
|
client, 'firewall_policy',
|
||||||
parsed_args.firewall_policy_id)
|
parsed_args.firewall_policy_id)
|
||||||
body = {
|
body = {
|
||||||
self.resource: {
|
self.resource: {
|
||||||
'firewall_policy_id': _policy_id,
|
'firewall_policy_id': _policy_id,
|
||||||
'admin_state_up': parsed_args.admin_state, }, }
|
'admin_state_up': parsed_args.admin_state, }, }
|
||||||
|
if parsed_args.routers:
|
||||||
|
body[self.resource]['router_ids'] = [
|
||||||
|
neutronv20.find_resourceid_by_name_or_id(client, 'router', r)
|
||||||
|
for r in parsed_args.routers]
|
||||||
neutronv20.update_dict(parsed_args, body[self.resource],
|
neutronv20.update_dict(parsed_args, body[self.resource],
|
||||||
['name', 'description', 'shared',
|
['name', 'description', 'shared',
|
||||||
'tenant_id'])
|
'tenant_id'])
|
||||||
@ -87,14 +99,34 @@ class UpdateFirewall(neutronv20.UpdateCommand):
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--policy', metavar='POLICY',
|
'--policy', metavar='POLICY',
|
||||||
help=_('Firewall policy name or ID.'))
|
help=_('Firewall policy name or ID.'))
|
||||||
|
router_sg = parser.add_mutually_exclusive_group()
|
||||||
|
router_sg.add_argument(
|
||||||
|
'--router',
|
||||||
|
dest='routers',
|
||||||
|
metavar='ROUTER',
|
||||||
|
action='append',
|
||||||
|
help=_('Firewall associated router names or IDs (requires FWaaS '
|
||||||
|
'router insertion extension, this option can be repeated)'))
|
||||||
|
router_sg.add_argument(
|
||||||
|
'--no-routers',
|
||||||
|
action='store_true',
|
||||||
|
help=_('Associate no routers with the firewall (requires FWaaS '
|
||||||
|
'router insertion extension)'))
|
||||||
|
|
||||||
def args2body(self, parsed_args):
|
def args2body(self, parsed_args):
|
||||||
data = {}
|
data = {}
|
||||||
|
client = self.get_client()
|
||||||
if parsed_args.policy:
|
if parsed_args.policy:
|
||||||
_policy_id = neutronv20.find_resourceid_by_name_or_id(
|
_policy_id = neutronv20.find_resourceid_by_name_or_id(
|
||||||
self.get_client(), 'firewall_policy',
|
client, 'firewall_policy',
|
||||||
parsed_args.policy)
|
parsed_args.policy)
|
||||||
data['firewall_policy_id'] = _policy_id
|
data['firewall_policy_id'] = _policy_id
|
||||||
|
if parsed_args.routers:
|
||||||
|
data['router_ids'] = [
|
||||||
|
neutronv20.find_resourceid_by_name_or_id(client, 'router', r)
|
||||||
|
for r in parsed_args.routers]
|
||||||
|
elif parsed_args.no_routers:
|
||||||
|
data['router_ids'] = []
|
||||||
return {self.resource: data}
|
return {self.resource: data}
|
||||||
|
|
||||||
|
|
||||||
|
@ -61,6 +61,19 @@ class CLITestV20FirewallJSON(test_cli20.CLITestV20Base):
|
|||||||
shared=True, admin_state_up=False,
|
shared=True, admin_state_up=False,
|
||||||
tenant_id=tenant_id)
|
tenant_id=tenant_id)
|
||||||
|
|
||||||
|
def test_create_firewall_with_routers(self):
|
||||||
|
resource = 'firewall'
|
||||||
|
cmd = firewall.CreateFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||||
|
name = 'my-name'
|
||||||
|
policy_id = 'my-policy-id'
|
||||||
|
my_id = 'my-id'
|
||||||
|
args = ['--router', 'fake-id', '--router', 'fake-name', policy_id]
|
||||||
|
router_ids = ['fake-id', 'fake-name']
|
||||||
|
position_names = ['firewall_policy_id', 'router_ids']
|
||||||
|
position_values = [policy_id, router_ids]
|
||||||
|
self._test_create_resource(resource, cmd, name, my_id, args,
|
||||||
|
position_names, position_values)
|
||||||
|
|
||||||
def test_list_firewalls(self):
|
def test_list_firewalls(self):
|
||||||
"""firewall-list."""
|
"""firewall-list."""
|
||||||
resources = "firewalls"
|
resources = "firewalls"
|
||||||
@ -120,6 +133,30 @@ class CLITestV20FirewallJSON(test_cli20.CLITestV20Base):
|
|||||||
['myid', '--policy', 'newpolicy'],
|
['myid', '--policy', 'newpolicy'],
|
||||||
{'firewall_policy_id': 'newpolicy'})
|
{'firewall_policy_id': 'newpolicy'})
|
||||||
|
|
||||||
|
def test_update_firewall_with_routers(self):
|
||||||
|
resource = 'firewall'
|
||||||
|
cmd = firewall.UpdateFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||||
|
self._test_update_resource(
|
||||||
|
resource, cmd, 'myid',
|
||||||
|
['myid', '--router', 'fake-id', '--router', 'fake-name'],
|
||||||
|
{'router_ids': ['fake-id', 'fake-name']})
|
||||||
|
|
||||||
|
def test_update_firewall_with_no_routers(self):
|
||||||
|
resource = 'firewall'
|
||||||
|
cmd = firewall.UpdateFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||||
|
self._test_update_resource(
|
||||||
|
resource, cmd, 'myid',
|
||||||
|
['myid', '--no-routers'], {'router_ids': []})
|
||||||
|
|
||||||
|
def test_update_firewall_with_bad_router_options(self):
|
||||||
|
resource = 'firewall'
|
||||||
|
cmd = firewall.UpdateFirewall(test_cli20.MyApp(sys.stdout), None)
|
||||||
|
self.assertRaises(
|
||||||
|
SystemExit,
|
||||||
|
self._test_update_resource,
|
||||||
|
resource, cmd, 'myid',
|
||||||
|
['myid', '--no-routers', '--router', 'fake-id'], {})
|
||||||
|
|
||||||
def test_delete_firewall(self):
|
def test_delete_firewall(self):
|
||||||
"""firewall-delete my-id."""
|
"""firewall-delete my-id."""
|
||||||
resource = 'firewall'
|
resource = 'firewall'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user