Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 18b1232db4 | |||
|
|
6e5eb4da33 | ||
|
|
f7c085005d | ||
|
|
d9a3518f75 | ||
|
|
efa0ccb944 | ||
|
|
8f72d77812 | ||
|
|
a991ac87c7 | ||
| 01d0553ca4 | |||
|
|
66ccb4569d | ||
|
|
1aee34b246 | ||
|
|
01ffc4684a | ||
| 2f170ce6aa | |||
|
|
275924ecc8 | ||
|
|
5f7d102f0e | ||
|
|
905be917fe | ||
|
|
857b4b233c | ||
| 690bb97d9d | |||
|
|
7d998d2525 | ||
|
|
370bd215c7 | ||
|
|
dc026cd3d6 | ||
|
|
1d7a13ab11 | ||
| 636ac764d3 | |||
|
|
b2107dc867 | ||
|
|
75e112bc9b | ||
|
|
1befb3cd08 | ||
|
|
f882f1ddb6 | ||
|
|
8a2f07683b | ||
|
|
5438377b9c | ||
| d36a8a4a17 | |||
|
|
a10390c62e | ||
|
|
cb9aae55c8 | ||
| fb8de782bc | |||
|
|
2169b2bbab | ||
|
|
111713fd62 | ||
|
|
98d8d8b5cd | ||
|
|
1cdac483be | ||
| fe515adf35 | |||
| 41e7ea6e29 | |||
| 863c6031fc | |||
| 750afa1777 |
@@ -31,7 +31,6 @@
|
||||
- openstack/keystoneauth
|
||||
- openstack/neutron
|
||||
- openstack/neutron-lib
|
||||
- openstack/os-client-config
|
||||
- openstack/python-cinderclient
|
||||
- openstack/python-glanceclient
|
||||
- openstack/python-ironicclient
|
||||
|
||||
@@ -20,6 +20,7 @@ provides a Python API (the ``neutronclient`` module).
|
||||
.. note:: This project has been deprecated. The CLI code has been deleted
|
||||
and is not accessible anymore. The Python bindings are still in use by
|
||||
other projects but no new features will be added to this project.
|
||||
All projects under Openstack governance migrating to use OpenstackSDK.
|
||||
Any new feature should be proposed to OpenStack SDK and OpenStack
|
||||
Client.
|
||||
|
||||
|
||||
@@ -129,19 +129,19 @@ def _get_common_attrs(client_manager, parsed_args, is_create=True):
|
||||
if (parsed_args.ingress_firewall_policy and
|
||||
parsed_args.no_ingress_firewall_policy):
|
||||
attrs['ingress_firewall_policy_id'] = client.find_firewall_policy(
|
||||
parsed_args.ingress_firewall_policy)['id']
|
||||
parsed_args.ingress_firewall_policy, ignore_missing=False)['id']
|
||||
elif parsed_args.ingress_firewall_policy:
|
||||
attrs['ingress_firewall_policy_id'] = client.find_firewall_policy(
|
||||
parsed_args.ingress_firewall_policy)['id']
|
||||
parsed_args.ingress_firewall_policy, ignore_missing=False)['id']
|
||||
elif parsed_args.no_ingress_firewall_policy:
|
||||
attrs['ingress_firewall_policy_id'] = None
|
||||
if (parsed_args.egress_firewall_policy and
|
||||
parsed_args.no_egress_firewall_policy):
|
||||
attrs['egress_firewall_policy_id'] = client.find_firewall_policy(
|
||||
parsed_args.egress_firewall_policy)['id']
|
||||
parsed_args.egress_firewall_policy, ignore_missing=False)['id']
|
||||
elif parsed_args.egress_firewall_policy:
|
||||
attrs['egress_firewall_policy_id'] = client.find_firewall_policy(
|
||||
parsed_args.egress_firewall_policy)['id']
|
||||
parsed_args.egress_firewall_policy, ignore_missing=False)['id']
|
||||
elif parsed_args.no_egress_firewall_policy:
|
||||
attrs['egress_firewall_policy_id'] = None
|
||||
if parsed_args.share:
|
||||
@@ -165,7 +165,7 @@ def _get_common_attrs(client_manager, parsed_args, is_create=True):
|
||||
ports.append(client.find_port(p)['id'])
|
||||
if not is_create:
|
||||
ports += client.find_firewall_group(
|
||||
parsed_args.firewall_group)['ports']
|
||||
parsed_args.firewall_group, ignore_missing=False)['ports']
|
||||
attrs['ports'] = sorted(set(ports))
|
||||
elif parsed_args.no_port:
|
||||
attrs['ports'] = []
|
||||
@@ -220,7 +220,8 @@ class DeleteFirewallGroup(command.Command):
|
||||
result = 0
|
||||
for fwg in parsed_args.firewall_group:
|
||||
try:
|
||||
fwg_id = client.find_firewall_group(fwg)['id']
|
||||
fwg_id = client.find_firewall_group(
|
||||
fwg, ignore_missing=False)['id']
|
||||
client.delete_firewall_group(fwg_id)
|
||||
except Exception as e:
|
||||
result += 1
|
||||
@@ -281,7 +282,8 @@ class SetFirewallGroup(command.Command):
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
client = self.app.client_manager.network
|
||||
fwg_id = client.find_firewall_group(parsed_args.firewall_group)['id']
|
||||
fwg_id = client.find_firewall_group(
|
||||
parsed_args.firewall_group, ignore_missing=False)['id']
|
||||
attrs = _get_common_attrs(self.app.client_manager, parsed_args,
|
||||
is_create=False)
|
||||
try:
|
||||
@@ -305,7 +307,8 @@ class ShowFirewallGroup(command.ShowOne):
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
client = self.app.client_manager.network
|
||||
fwg_id = client.find_firewall_group(parsed_args.firewall_group)['id']
|
||||
fwg_id = client.find_firewall_group(
|
||||
parsed_args.firewall_group, ignore_missing=False)['id']
|
||||
obj = client.get_firewall_group(fwg_id)
|
||||
display_columns, columns = utils.get_osc_show_columns_for_sdk_resource(
|
||||
obj, _attr_map_dict, ['location', 'tenant_id'])
|
||||
@@ -366,7 +369,7 @@ class UnsetFirewallGroup(command.Command):
|
||||
attrs['admin_state_up'] = False
|
||||
if parsed_args.port:
|
||||
old = client.find_firewall_group(
|
||||
parsed_args.firewall_group)['ports']
|
||||
parsed_args.firewall_group, ignore_missing=False)['ports']
|
||||
new = [client.find_port(r)['id'] for r in parsed_args.port]
|
||||
attrs['ports'] = sorted(list(set(old) - set(new)))
|
||||
if parsed_args.all_port:
|
||||
@@ -375,7 +378,8 @@ class UnsetFirewallGroup(command.Command):
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
client = self.app.client_manager.network
|
||||
fwg_id = client.find_firewall_group(parsed_args.firewall_group)['id']
|
||||
fwg_id = client.find_firewall_group(
|
||||
parsed_args.firewall_group, ignore_missing=False)['id']
|
||||
attrs = self._get_attrs(client, parsed_args)
|
||||
try:
|
||||
client.update_firewall_group(fwg_id, **attrs)
|
||||
|
||||
@@ -67,16 +67,18 @@ def _get_common_attrs(client_manager, parsed_args, is_create=True):
|
||||
if parsed_args.firewall_rule and parsed_args.no_firewall_rule:
|
||||
_firewall_rules = []
|
||||
for f in parsed_args.firewall_rule:
|
||||
_firewall_rules.append(client.find_firewall_rule(f)['id'])
|
||||
_firewall_rules.append(
|
||||
client.find_firewall_rule(f, ignore_missing=False)['id'])
|
||||
attrs[const.FWRS] = _firewall_rules
|
||||
elif parsed_args.firewall_rule:
|
||||
rules = []
|
||||
if not is_create:
|
||||
foobar = client.find_firewall_policy(
|
||||
parsed_args.firewall_policy)
|
||||
parsed_args.firewall_policy, ignore_missing=False)
|
||||
rules += foobar[const.FWRS]
|
||||
for f in parsed_args.firewall_rule:
|
||||
rules.append(client.find_firewall_rule(f)['id'])
|
||||
rules.append(
|
||||
client.find_firewall_rule(f, ignore_missing=False)['id'])
|
||||
attrs[const.FWRS] = rules
|
||||
elif parsed_args.no_firewall_rule:
|
||||
attrs[const.FWRS] = []
|
||||
@@ -173,7 +175,8 @@ class DeleteFirewallPolicy(command.Command):
|
||||
result = 0
|
||||
for fwp in parsed_args.firewall_policy:
|
||||
try:
|
||||
fwp_id = client.find_firewall_policy(fwp)['id']
|
||||
fwp_id = client.find_firewall_policy(
|
||||
fwp, ignore_missing=False)['id']
|
||||
client.delete_firewall_policy(fwp_id)
|
||||
except Exception as e:
|
||||
result += 1
|
||||
@@ -220,12 +223,12 @@ class FirewallPolicyInsertRule(command.Command):
|
||||
if 'insert_before' in parsed_args:
|
||||
if parsed_args.insert_before:
|
||||
_insert_before = client.find_firewall_rule(
|
||||
parsed_args.insert_before)['id']
|
||||
parsed_args.insert_before, ignore_missing=False)['id']
|
||||
_insert_after = ''
|
||||
if 'insert_after' in parsed_args:
|
||||
if parsed_args.insert_after:
|
||||
_insert_after = client.find_firewall_rule(
|
||||
parsed_args.insert_after)['id']
|
||||
parsed_args.insert_after, ignore_missing=False)['id']
|
||||
return {'firewall_rule_id': _rule_id,
|
||||
'insert_before': _insert_before,
|
||||
'insert_after': _insert_after}
|
||||
@@ -233,9 +236,9 @@ class FirewallPolicyInsertRule(command.Command):
|
||||
def take_action(self, parsed_args):
|
||||
client = self.app.client_manager.network
|
||||
policy_id = client.find_firewall_policy(
|
||||
parsed_args.firewall_policy)['id']
|
||||
parsed_args.firewall_policy, ignore_missing=False)['id']
|
||||
body = self.args2body(parsed_args)
|
||||
client.insert_rule_into_policy(policy_id, body)
|
||||
client.insert_rule_into_policy(policy_id, **body)
|
||||
rule_id = body['firewall_rule_id']
|
||||
policy = parsed_args.firewall_policy
|
||||
print((_('Inserted firewall rule %(rule)s in firewall policy '
|
||||
@@ -261,10 +264,10 @@ class FirewallPolicyRemoveRule(command.Command):
|
||||
def take_action(self, parsed_args):
|
||||
client = self.app.client_manager.network
|
||||
policy_id = client.find_firewall_policy(
|
||||
parsed_args.firewall_policy)['id']
|
||||
parsed_args.firewall_policy, ignore_missing=False)['id']
|
||||
fwr_id = _get_required_firewall_rule(client, parsed_args)
|
||||
body = {'firewall_rule_id': fwr_id}
|
||||
client.remove_rule_from_policy(policy_id, body)
|
||||
client.remove_rule_from_policy(policy_id, **body)
|
||||
rule_id = body['firewall_rule_id']
|
||||
policy = parsed_args.firewall_policy
|
||||
print((_('Removed firewall rule %(rule)s from firewall policy '
|
||||
@@ -322,7 +325,7 @@ class SetFirewallPolicy(command.Command):
|
||||
def take_action(self, parsed_args):
|
||||
client = self.app.client_manager.network
|
||||
fwp_id = client.find_firewall_policy(
|
||||
parsed_args.firewall_policy)['id']
|
||||
parsed_args.firewall_policy, ignore_missing=False)['id']
|
||||
attrs = _get_common_attrs(self.app.client_manager,
|
||||
parsed_args, is_create=False)
|
||||
try:
|
||||
@@ -347,7 +350,7 @@ class ShowFirewallPolicy(command.ShowOne):
|
||||
def take_action(self, parsed_args):
|
||||
client = self.app.client_manager.network
|
||||
fwp_id = client.find_firewall_policy(
|
||||
parsed_args.firewall_policy)['id']
|
||||
parsed_args.firewall_policy, ignore_missing=False)['id']
|
||||
obj = client.get_firewall_policy(fwp_id)
|
||||
display_columns, columns = utils.get_osc_show_columns_for_sdk_resource(
|
||||
obj, _attr_map_dict, ['location', 'tenant_id'])
|
||||
@@ -359,7 +362,8 @@ def _get_required_firewall_rule(client, parsed_args):
|
||||
if not parsed_args.firewall_rule:
|
||||
msg = (_("Firewall rule (name or ID) is required."))
|
||||
raise exceptions.CommandError(msg)
|
||||
return client.find_firewall_rule(parsed_args.firewall_rule)['id']
|
||||
return client.find_firewall_rule(
|
||||
parsed_args.firewall_rule, ignore_missing=False)['id']
|
||||
|
||||
|
||||
class UnsetFirewallPolicy(command.Command):
|
||||
@@ -399,10 +403,11 @@ class UnsetFirewallPolicy(command.Command):
|
||||
|
||||
if parsed_args.firewall_rule:
|
||||
current = client.find_firewall_policy(
|
||||
parsed_args.firewall_policy)[const.FWRS]
|
||||
parsed_args.firewall_policy, ignore_missing=False)[const.FWRS]
|
||||
removed = []
|
||||
for f in set(parsed_args.firewall_rule):
|
||||
removed.append(client.find_firewall_rule(f)['id'])
|
||||
removed.append(
|
||||
client.find_firewall_rule(f, ignore_missing=False)['id'])
|
||||
attrs[const.FWRS] = [r for r in current if r not in removed]
|
||||
if parsed_args.all_firewall_rule:
|
||||
attrs[const.FWRS] = []
|
||||
@@ -415,7 +420,7 @@ class UnsetFirewallPolicy(command.Command):
|
||||
def take_action(self, parsed_args):
|
||||
client = self.app.client_manager.network
|
||||
fwp_id = client.find_firewall_policy(
|
||||
parsed_args.firewall_policy)['id']
|
||||
parsed_args.firewall_policy, ignore_missing=False)['id']
|
||||
attrs = self._get_attrs(self.app.client_manager, parsed_args)
|
||||
try:
|
||||
client.update_firewall_policy(fwp_id, **attrs)
|
||||
|
||||
@@ -86,9 +86,12 @@ def _get_common_parser(parser):
|
||||
help=_('Description of the firewall rule'))
|
||||
parser.add_argument(
|
||||
'--protocol',
|
||||
choices=['tcp', 'udp', 'icmp', 'any'],
|
||||
type=nc_utils.convert_to_lowercase,
|
||||
help=_('Protocol for the firewall rule'))
|
||||
help=_('IP protocol (ah, dccp, egp, esp, gre, icmp, igmp, '
|
||||
'ipv6-encap, ipv6-frag, ipv6-icmp, ipv6-nonxt, ipv6-opts, '
|
||||
'ipv6-route, ospf, pgm, rsvp, sctp, tcp, udp, udplite, '
|
||||
'vrrp and integer representations [0-255] or any; '
|
||||
'default: any (all protocols))'))
|
||||
parser.add_argument(
|
||||
'--action',
|
||||
choices=['allow', 'deny', 'reject'],
|
||||
@@ -226,12 +229,12 @@ def _get_common_attrs(client_manager, parsed_args, is_create=True):
|
||||
attrs['shared'] = False
|
||||
if parsed_args.source_firewall_group:
|
||||
attrs['source_firewall_group_id'] = client.find_firewall_group(
|
||||
parsed_args.source_firewall_group)['id']
|
||||
parsed_args.source_firewall_group, ignore_missing=False)['id']
|
||||
if parsed_args.no_source_firewall_group:
|
||||
attrs['source_firewall_group_id'] = None
|
||||
if parsed_args.destination_firewall_group:
|
||||
attrs['destination_firewall_group_id'] = client.find_firewall_group(
|
||||
parsed_args.destination_firewall_group)['id']
|
||||
parsed_args.destination_firewall_group, ignore_missing=False)['id']
|
||||
if parsed_args.no_destination_firewall_group:
|
||||
attrs['destination_firewall_group_id'] = None
|
||||
return attrs
|
||||
@@ -281,7 +284,8 @@ class DeleteFirewallRule(command.Command):
|
||||
result = 0
|
||||
for fwr in parsed_args.firewall_rule:
|
||||
try:
|
||||
fwr_id = client.find_firewall_rule(fwr)['id']
|
||||
fwr_id = client.find_firewall_rule(
|
||||
fwr, ignore_missing=False)['id']
|
||||
client.delete_firewall_rule(fwr_id)
|
||||
except Exception as e:
|
||||
result += 1
|
||||
@@ -358,7 +362,8 @@ class SetFirewallRule(command.Command):
|
||||
client = self.app.client_manager.network
|
||||
attrs = _get_common_attrs(self.app.client_manager,
|
||||
parsed_args, is_create=False)
|
||||
fwr_id = client.find_firewall_rule(parsed_args.firewall_rule)['id']
|
||||
fwr_id = client.find_firewall_rule(
|
||||
parsed_args.firewall_rule, ignore_missing=False)['id']
|
||||
try:
|
||||
client.update_firewall_rule(fwr_id, **attrs)
|
||||
except Exception as e:
|
||||
@@ -380,7 +385,8 @@ class ShowFirewallRule(command.ShowOne):
|
||||
|
||||
def take_action(self, parsed_args):
|
||||
client = self.app.client_manager.network
|
||||
fwr_id = client.find_firewall_rule(parsed_args.firewall_rule)['id']
|
||||
fwr_id = client.find_firewall_rule(
|
||||
parsed_args.firewall_rule, ignore_missing=False)['id']
|
||||
obj = client.get_firewall_rule(fwr_id)
|
||||
display_columns, columns = utils.get_osc_show_columns_for_sdk_resource(
|
||||
obj, _attr_map_dict, ['location', 'tenant_id'])
|
||||
@@ -458,7 +464,8 @@ class UnsetFirewallRule(command.Command):
|
||||
def take_action(self, parsed_args):
|
||||
client = self.app.client_manager.network
|
||||
attrs = self._get_attrs(self.app.client_manager, parsed_args)
|
||||
fwr_id = client.find_firewall_rule(parsed_args.firewall_rule)['id']
|
||||
fwr_id = client.find_firewall_rule(
|
||||
parsed_args.firewall_rule, ignore_missing=False)['id']
|
||||
try:
|
||||
client.update_firewall_rule(fwr_id, **attrs)
|
||||
except Exception as e:
|
||||
|
||||
@@ -75,10 +75,10 @@ class CreateBgpvpnResAssoc(command.ShowOne):
|
||||
body.update(
|
||||
arg2body(bgpvpn['id'], parsed_args))
|
||||
|
||||
if self._assoc_res_name == constants.NETWORK_ASSOC:
|
||||
if self._resource == constants.NETWORK_ASSOC:
|
||||
obj = client.create_bgpvpn_network_association(
|
||||
bgpvpn['id'], **body)
|
||||
elif self._assoc_res_name == constants.PORT_ASSOCS:
|
||||
elif self._resource == constants.PORT_ASSOC:
|
||||
obj = client.create_bgpvpn_port_association(bgpvpn['id'], **body)
|
||||
else:
|
||||
obj = client.create_bgpvpn_router_association(
|
||||
@@ -123,10 +123,10 @@ class SetBgpvpnResAssoc(command.Command):
|
||||
arg2body = getattr(self, '_args2body', None)
|
||||
if callable(arg2body):
|
||||
body = arg2body(bgpvpn['id'], parsed_args)
|
||||
if self._assoc_res_name == constants.NETWORK_ASSOC:
|
||||
if self._resource == constants.NETWORK_ASSOC:
|
||||
client.update_bgpvpn_network_association(
|
||||
bgpvpn['id'], parsed_args.resource_association_id, **body)
|
||||
elif self._assoc_res_name == constants.PORT_ASSOCS:
|
||||
elif self._resource == constants.PORT_ASSOC:
|
||||
client.update_bgpvpn_port_association(
|
||||
bgpvpn['id'], parsed_args.resource_association_id, **body)
|
||||
else:
|
||||
@@ -165,9 +165,9 @@ class DeleteBgpvpnResAssoc(command.Command):
|
||||
fails = 0
|
||||
for id in parsed_args.resource_association_ids:
|
||||
try:
|
||||
if self._assoc_res_name == constants.NETWORK_ASSOC:
|
||||
if self._resource == constants.NETWORK_ASSOC:
|
||||
client.delete_bgpvpn_network_association(bgpvpn['id'], id)
|
||||
elif self._assoc_res_name == constants.PORT_ASSOCS:
|
||||
elif self._resource == constants.PORT_ASSOC:
|
||||
client.delete_bgpvpn_port_association(bgpvpn['id'], id)
|
||||
else:
|
||||
client.delete_bgpvpn_router_association(bgpvpn['id'], id)
|
||||
@@ -221,10 +221,10 @@ class ListBgpvpnResAssoc(command.Lister):
|
||||
params = {}
|
||||
if parsed_args.property:
|
||||
params.update(parsed_args.property)
|
||||
if self._assoc_res_name == constants.NETWORK_ASSOC:
|
||||
if self._resource == constants.NETWORK_ASSOC:
|
||||
objs = client.bgpvpn_network_associations(
|
||||
bgpvpn['id'], retrieve_all=True, **params)
|
||||
elif self._assoc_res_name == constants.PORT_ASSOCS:
|
||||
elif self._resource == constants.PORT_ASSOC:
|
||||
objs = client.bgpvpn_port_associations(
|
||||
bgpvpn['id'], retrieve_all=True, **params)
|
||||
else:
|
||||
@@ -265,10 +265,10 @@ class ShowBgpvpnResAssoc(command.ShowOne):
|
||||
def take_action(self, parsed_args):
|
||||
client = self.app.client_manager.network
|
||||
bgpvpn = client.find_bgpvpn(parsed_args.bgpvpn)
|
||||
if self._assoc_res_name == constants.NETWORK_ASSOC:
|
||||
if self._resource == constants.NETWORK_ASSOC:
|
||||
obj = client.get_bgpvpn_network_association(
|
||||
bgpvpn['id'], parsed_args.resource_association_id)
|
||||
elif self._assoc_res_name == constants.PORT_ASSOCS:
|
||||
elif self._resource == constants.PORT_ASSOC:
|
||||
obj = client.get_bgpvpn_port_association(
|
||||
bgpvpn['id'], parsed_args.resource_association_id)
|
||||
else:
|
||||
|
||||
@@ -56,6 +56,66 @@ _attr_map_dict = {
|
||||
'project_id': 'Project',
|
||||
}
|
||||
|
||||
_auth_algorithms = [
|
||||
'sha1',
|
||||
'sha256',
|
||||
'sha384',
|
||||
'sha512',
|
||||
'aes-xcbc',
|
||||
'aes-cmac',
|
||||
]
|
||||
|
||||
_encryption_algorithms = [
|
||||
'3des',
|
||||
'aes-128',
|
||||
'aes-192',
|
||||
'aes-256',
|
||||
'aes-128-ccm-8',
|
||||
'aes-192-ccm-8',
|
||||
'aes-256-ccm-8',
|
||||
'aes-128-ccm-12',
|
||||
'aes-192-ccm-12',
|
||||
'aes-256-ccm-12',
|
||||
'aes-128-ccm-16',
|
||||
'aes-192-ccm-16',
|
||||
'aes-256-ccm-16',
|
||||
'aes-128-gcm-8',
|
||||
'aes-192-gcm-8',
|
||||
'aes-256-gcm-8',
|
||||
'aes-128-gcm-12',
|
||||
'aes-192-gcm-12',
|
||||
'aes-256-gcm-12',
|
||||
'aes-128-gcm-16',
|
||||
'aes-192-gcm-16',
|
||||
'aes-256-gcm-16',
|
||||
'aes-128-ctr',
|
||||
'aes-192-ctr',
|
||||
'aes-256-ctr',
|
||||
]
|
||||
|
||||
_pfs_groups = [
|
||||
'group2',
|
||||
'group5',
|
||||
'group14',
|
||||
'group15',
|
||||
'group16',
|
||||
'group17',
|
||||
'group18',
|
||||
'group19',
|
||||
'group20',
|
||||
'group21',
|
||||
'group22',
|
||||
'group23',
|
||||
'group24',
|
||||
'group25',
|
||||
'group26',
|
||||
'group27',
|
||||
'group28',
|
||||
'group29',
|
||||
'group30',
|
||||
'group31',
|
||||
]
|
||||
|
||||
|
||||
def _convert_to_lowercase(string):
|
||||
return string.lower()
|
||||
@@ -68,12 +128,12 @@ def _get_common_parser(parser):
|
||||
help=_('Description of the IKE policy'))
|
||||
parser.add_argument(
|
||||
'--auth-algorithm',
|
||||
choices=['sha1', 'sha256', 'sha384', 'sha512'],
|
||||
choices=_auth_algorithms,
|
||||
type=_convert_to_lowercase,
|
||||
help=_('Authentication algorithm'))
|
||||
parser.add_argument(
|
||||
'--encryption-algorithm',
|
||||
choices=['aes-128', '3des', 'aes-192', 'aes-256'],
|
||||
choices=_encryption_algorithms,
|
||||
type=_convert_to_lowercase,
|
||||
help=_('Encryption algorithm'))
|
||||
parser.add_argument(
|
||||
@@ -88,7 +148,7 @@ def _get_common_parser(parser):
|
||||
help=_('IKE version for the policy'))
|
||||
parser.add_argument(
|
||||
'--pfs',
|
||||
choices=['group5', 'group2', 'group14'],
|
||||
choices=_pfs_groups,
|
||||
type=_convert_to_lowercase,
|
||||
help=_('Perfect Forward Secrecy'))
|
||||
parser.add_argument(
|
||||
|
||||
@@ -54,6 +54,66 @@ _attr_map_dict = {
|
||||
'project_id': 'Project',
|
||||
}
|
||||
|
||||
_auth_algorithms = [
|
||||
'sha1',
|
||||
'sha256',
|
||||
'sha384',
|
||||
'sha512',
|
||||
'aes-xcbc',
|
||||
'aes-cmac',
|
||||
]
|
||||
|
||||
_encryption_algorithms = [
|
||||
'3des',
|
||||
'aes-128',
|
||||
'aes-192',
|
||||
'aes-256',
|
||||
'aes-128-ccm-8',
|
||||
'aes-192-ccm-8',
|
||||
'aes-256-ccm-8',
|
||||
'aes-128-ccm-12',
|
||||
'aes-192-ccm-12',
|
||||
'aes-256-ccm-12',
|
||||
'aes-128-ccm-16',
|
||||
'aes-192-ccm-16',
|
||||
'aes-256-ccm-16',
|
||||
'aes-128-gcm-8',
|
||||
'aes-192-gcm-8',
|
||||
'aes-256-gcm-8',
|
||||
'aes-128-gcm-12',
|
||||
'aes-192-gcm-12',
|
||||
'aes-256-gcm-12',
|
||||
'aes-128-gcm-16',
|
||||
'aes-192-gcm-16',
|
||||
'aes-256-gcm-16',
|
||||
'aes-128-ctr',
|
||||
'aes-192-ctr',
|
||||
'aes-256-ctr',
|
||||
]
|
||||
|
||||
_pfs_groups = [
|
||||
'group2',
|
||||
'group5',
|
||||
'group14',
|
||||
'group15',
|
||||
'group16',
|
||||
'group17',
|
||||
'group18',
|
||||
'group19',
|
||||
'group20',
|
||||
'group21',
|
||||
'group22',
|
||||
'group23',
|
||||
'group24',
|
||||
'group25',
|
||||
'group26',
|
||||
'group27',
|
||||
'group28',
|
||||
'group29',
|
||||
'group30',
|
||||
'group31',
|
||||
]
|
||||
|
||||
|
||||
def _convert_to_lowercase(string):
|
||||
return string.lower()
|
||||
@@ -66,7 +126,7 @@ def _get_common_parser(parser):
|
||||
help=_('Description of the IPsec policy'))
|
||||
parser.add_argument(
|
||||
'--auth-algorithm',
|
||||
choices=['sha1', 'sha256', 'sha384', 'sha512'],
|
||||
choices=_auth_algorithms,
|
||||
type=_convert_to_lowercase,
|
||||
help=_('Authentication algorithm for IPsec policy'))
|
||||
parser.add_argument(
|
||||
@@ -76,7 +136,7 @@ def _get_common_parser(parser):
|
||||
help=_('Encapsulation mode for IPsec policy'))
|
||||
parser.add_argument(
|
||||
'--encryption-algorithm',
|
||||
choices=['3des', 'aes-128', 'aes-192', 'aes-256'],
|
||||
choices=_encryption_algorithms,
|
||||
type=_convert_to_lowercase,
|
||||
help=_('Encryption algorithm for IPsec policy'))
|
||||
parser.add_argument(
|
||||
@@ -86,7 +146,7 @@ def _get_common_parser(parser):
|
||||
help=vpn_utils.lifetime_help("IPsec"))
|
||||
parser.add_argument(
|
||||
'--pfs',
|
||||
choices=['group2', 'group5', 'group14'],
|
||||
choices=_pfs_groups,
|
||||
type=_convert_to_lowercase,
|
||||
help=_('Perfect Forward Secrecy for IPsec policy'))
|
||||
parser.add_argument(
|
||||
|
||||
@@ -36,6 +36,8 @@ _attr_map = (
|
||||
('status', 'Status', column_util.LIST_BOTH),
|
||||
('description', 'Description', column_util.LIST_LONG_ONLY),
|
||||
('project_id', 'Project', column_util.LIST_LONG_ONLY),
|
||||
('external_v4_ip', 'Ext v4 IP', column_util.LIST_LONG_ONLY),
|
||||
('external_v6_ip', 'Ext v6 IP', column_util.LIST_LONG_ONLY),
|
||||
)
|
||||
|
||||
_attr_map_dict = {
|
||||
@@ -48,6 +50,8 @@ _attr_map_dict = {
|
||||
'status': 'Status',
|
||||
'description': 'Description',
|
||||
'project_id': 'Project',
|
||||
'external_v4_ip': 'Ext v4 IP',
|
||||
'external_v6_ip': 'Ext v6 IP',
|
||||
}
|
||||
|
||||
|
||||
@@ -135,8 +139,7 @@ class CreateVPNService(command.ShowOne):
|
||||
attrs['router_id'] = _router_id
|
||||
obj = client.create_vpn_service(**attrs)
|
||||
display_columns, columns = utils.get_osc_show_columns_for_sdk_resource(
|
||||
obj, _attr_map_dict, ['location', 'tenant_id', 'external_v4_ip',
|
||||
'external_v6_ip'])
|
||||
obj, _attr_map_dict, ['location', 'tenant_id'])
|
||||
data = utils.get_dict_properties(obj, columns)
|
||||
return display_columns, data
|
||||
|
||||
@@ -244,7 +247,6 @@ class ShowVPNService(command.ShowOne):
|
||||
ignore_missing=False)['id']
|
||||
obj = client.get_vpn_service(vpn_id)
|
||||
display_columns, columns = utils.get_osc_show_columns_for_sdk_resource(
|
||||
obj, _attr_map_dict, ['location', 'tenant_id', 'external_v4_ip',
|
||||
'external_v6_ip'])
|
||||
obj, _attr_map_dict, ['location', 'tenant_id'])
|
||||
data = utils.get_dict_properties(obj, columns)
|
||||
return (display_columns, data)
|
||||
|
||||
@@ -215,7 +215,7 @@ class TestCreateFirewallGroup(TestFirewallGroup, common.TestCreateFWaaS):
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
headers, data = self.cmd.take_action(parsed_args)
|
||||
self.networkclient.find_firewall_policy.assert_called_once_with(
|
||||
ingress_policy)
|
||||
ingress_policy, ignore_missing=False)
|
||||
|
||||
self.check_results(headers, data, request)
|
||||
|
||||
@@ -236,7 +236,7 @@ class TestCreateFirewallGroup(TestFirewallGroup, common.TestCreateFWaaS):
|
||||
headers, data = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.networkclient.find_firewall_policy.assert_called_once_with(
|
||||
egress_policy)
|
||||
egress_policy, ignore_missing=False)
|
||||
self.check_results(headers, data, request)
|
||||
|
||||
def test_create_with_all_params(self):
|
||||
@@ -398,15 +398,15 @@ class TestSetFirewallGroup(TestFirewallGroup, common.TestSetFWaaS):
|
||||
# 1. Find specified firewall_group
|
||||
if self.networkclient.find_firewall_group.call_count == 1:
|
||||
self.networkclient.find_firewall_group.assert_called_with(
|
||||
target)
|
||||
target, ignore_missing=False)
|
||||
# 2. Find specified 'ingress_firewall_policy'
|
||||
if self.networkclient.find_firewall_policy.call_count == 1:
|
||||
self.networkclient.find_firewall_policy.assert_called_with(
|
||||
ingress_policy)
|
||||
ingress_policy, ignore_missing=False)
|
||||
# 3. Find specified 'ingress_firewall_policy'
|
||||
if self.networkclient.find_firewall_policy.call_count == 2:
|
||||
self.networkclient.find_firewall_policy.assert_called_with(
|
||||
egress_policy)
|
||||
egress_policy, ignore_missing=False)
|
||||
return {'id': args[0]}
|
||||
|
||||
self.networkclient.find_firewall_group.side_effect = _mock_fwg_policy
|
||||
@@ -439,7 +439,7 @@ class TestSetFirewallGroup(TestFirewallGroup, common.TestSetFWaaS):
|
||||
# 1. Find specified firewall_group
|
||||
if self.networkclient.find_firewall_group.call_count in [1, 2]:
|
||||
self.networkclient.find_firewall_group.assert_called_with(
|
||||
target)
|
||||
target, ignore_missing=False)
|
||||
return {'id': args[0], 'ports': _fwg['ports']}
|
||||
# 2. Find specified 'port' #1
|
||||
if self.networkclient.find_port.call_count == 1:
|
||||
@@ -687,7 +687,7 @@ class TestUnsetFirewallGroup(TestFirewallGroup, common.TestUnsetFWaaS):
|
||||
# 1. Find specified firewall_group
|
||||
if self.networkclient.find_firewall_group.call_count in [1, 2]:
|
||||
self.networkclient.find_firewall_group.assert_called_with(
|
||||
target)
|
||||
target, ignore_missing=False)
|
||||
return {'id': args[0], 'ports': _fwg['ports']}
|
||||
# 2. Find specified firewall_group and refer 'ports' attribute
|
||||
if self.networkclient.find_port.call_count == 2:
|
||||
|
||||
@@ -507,12 +507,12 @@ class TestFirewallPolicyInsertRule(TestFirewallPolicy):
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
result = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.mocked.assert_called_once_with(
|
||||
target, {
|
||||
'firewall_rule_id': rule,
|
||||
'insert_before': before,
|
||||
'insert_after': after
|
||||
})
|
||||
body = {
|
||||
'firewall_rule_id': rule,
|
||||
'insert_before': before,
|
||||
'insert_after': after
|
||||
}
|
||||
self.mocked.assert_called_once_with(target, **body)
|
||||
self.assertIsNone(result)
|
||||
self.assertEqual(1, self.networkclient.find_firewall_policy.call_count)
|
||||
self.assertEqual(3, self.networkclient.find_firewall_rule.call_count)
|
||||
@@ -560,8 +560,8 @@ class TestFirewallPolicyRemoveRule(TestFirewallPolicy):
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
result = self.cmd.take_action(parsed_args)
|
||||
self.mocked.assert_called_once_with(
|
||||
target, {'firewall_rule_id': rule})
|
||||
body = {'firewall_rule_id': rule}
|
||||
self.mocked.assert_called_once_with(target, **body)
|
||||
self.assertIsNone(result)
|
||||
self.assertEqual(1, self.networkclient.find_firewall_policy.call_count)
|
||||
self.assertEqual(1, self.networkclient.find_firewall_rule.call_count)
|
||||
|
||||
@@ -125,6 +125,8 @@ class VPNService(FakeVPNaaS):
|
||||
('status', 'ACTIVE'),
|
||||
('description', 'my-desc-' + uuid.uuid4().hex),
|
||||
('project_id', 'project-id-' + uuid.uuid4().hex),
|
||||
('external_v4_ip', '192.0.2.42'),
|
||||
('external_v6_ip', '2001:0db8:207a:4a3a:053b:6fab:7df9:1afd'),
|
||||
))
|
||||
|
||||
|
||||
|
||||
@@ -106,10 +106,14 @@ class TestVPNService(test_fakes.TestNeutronClientOSCV2):
|
||||
'Status',
|
||||
'Description',
|
||||
'Project',
|
||||
'Ext v4 IP',
|
||||
'Ext v6 IP',
|
||||
)
|
||||
self.data = _generate_data()
|
||||
self.ordered_headers = (
|
||||
'Description',
|
||||
'Ext v4 IP',
|
||||
'Ext v6 IP',
|
||||
'Flavor',
|
||||
'ID',
|
||||
'Name',
|
||||
@@ -121,6 +125,8 @@ class TestVPNService(test_fakes.TestNeutronClientOSCV2):
|
||||
)
|
||||
self.ordered_data = (
|
||||
_vpnservice['description'],
|
||||
_vpnservice['external_v4_ip'],
|
||||
_vpnservice['external_v6_ip'],
|
||||
_vpnservice['flavor_id'],
|
||||
_vpnservice['id'],
|
||||
_vpnservice['name'],
|
||||
@@ -132,6 +138,8 @@ class TestVPNService(test_fakes.TestNeutronClientOSCV2):
|
||||
)
|
||||
self.ordered_columns = (
|
||||
'description',
|
||||
'external_v4_ip',
|
||||
'external_v6_ip',
|
||||
'flavor_id',
|
||||
'id',
|
||||
'name',
|
||||
|
||||
@@ -250,6 +250,9 @@ class ClientBase(object):
|
||||
def __init__(self, **kwargs):
|
||||
"""Initialize a new client for the Neutron v2.0 API."""
|
||||
super(ClientBase, self).__init__()
|
||||
_logger.warning("The python binding code in neutronclient is "
|
||||
"deprecated in favor of OpenstackSDK, please use "
|
||||
"that as this will be removed in a future release.")
|
||||
self.retries = kwargs.pop('retries', 0)
|
||||
self.raise_errors = kwargs.pop('raise_errors', True)
|
||||
self.httpclient = client.construct_http_client(**kwargs)
|
||||
@@ -847,7 +850,7 @@ class Client(ClientBase):
|
||||
|
||||
def list_port_bindings(self, port_id, retrieve_all=True, **_params):
|
||||
"""Fetches a list of all bindings for a certain port."""
|
||||
return self.list('port_bindings', self.port_bindings_path % port_id,
|
||||
return self.list('bindings', self.port_bindings_path % port_id,
|
||||
retrieve_all, **_params)
|
||||
|
||||
def activate_port_binding(self, port_id, host_id):
|
||||
|
||||
5
releasenotes/notes/remove-py38-26a1befde3f44b82.yaml
Normal file
5
releasenotes/notes/remove-py38-26a1befde3f44b82.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
upgrade:
|
||||
- |
|
||||
Python 3.8 support was dropped. The minimum version of Python now supported
|
||||
is Python 3.9.
|
||||
@@ -3,4 +3,4 @@
|
||||
===========================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/2023.1
|
||||
:branch: unmaintained/2023.1
|
||||
|
||||
6
releasenotes/source/2024.1.rst
Normal file
6
releasenotes/source/2024.1.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
===========================
|
||||
2024.1 Series Release Notes
|
||||
===========================
|
||||
|
||||
.. release-notes::
|
||||
:branch: unmaintained/2024.1
|
||||
6
releasenotes/source/2024.2.rst
Normal file
6
releasenotes/source/2024.2.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
===========================
|
||||
2024.2 Series Release Notes
|
||||
===========================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/2024.2
|
||||
6
releasenotes/source/2025.1.rst
Normal file
6
releasenotes/source/2025.1.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
===========================
|
||||
2025.1 Series Release Notes
|
||||
===========================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/2025.1
|
||||
6
releasenotes/source/2025.2.rst
Normal file
6
releasenotes/source/2025.2.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
===========================
|
||||
2025.2 Series Release Notes
|
||||
===========================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/2025.2
|
||||
6
releasenotes/source/2026.1.rst
Normal file
6
releasenotes/source/2026.1.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
===========================
|
||||
2026.1 Series Release Notes
|
||||
===========================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/2026.1
|
||||
@@ -6,6 +6,11 @@
|
||||
:maxdepth: 1
|
||||
|
||||
unreleased
|
||||
2026.1
|
||||
2025.2
|
||||
2025.1
|
||||
2024.2
|
||||
2024.1
|
||||
2023.2
|
||||
2023.1
|
||||
zed
|
||||
|
||||
@@ -3,4 +3,4 @@ Victoria Series Release Notes
|
||||
=============================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/victoria
|
||||
:branch: unmaintained/victoria
|
||||
|
||||
@@ -3,4 +3,4 @@ Wallaby Series Release Notes
|
||||
============================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/wallaby
|
||||
:branch: unmaintained/wallaby
|
||||
|
||||
@@ -3,4 +3,4 @@ Xena Series Release Notes
|
||||
=========================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/xena
|
||||
:branch: unmaintained/xena
|
||||
|
||||
@@ -3,4 +3,4 @@ Zed Series Release Notes
|
||||
========================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/zed
|
||||
:branch: unmaintained/zed
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
pbr!=2.1.0,>=2.0.0 # Apache-2.0
|
||||
cliff>=3.4.0 # Apache-2.0
|
||||
debtcollector>=1.2.0 # Apache-2.0
|
||||
iso8601>=0.1.11 # MIT
|
||||
netaddr>=0.7.18 # BSD
|
||||
openstacksdk>=1.5.0 # Apache-2.0
|
||||
osc-lib>=1.12.0 # Apache-2.0
|
||||
@@ -12,7 +11,6 @@ oslo.i18n>=3.15.3 # Apache-2.0
|
||||
oslo.log>=3.36.0 # Apache-2.0
|
||||
oslo.serialization!=2.19.1,>=2.18.0 # Apache-2.0
|
||||
oslo.utils>=3.33.0 # Apache-2.0
|
||||
os-client-config>=1.28.0 # Apache-2.0
|
||||
keystoneauth1>=3.8.0 # Apache-2.0
|
||||
# keystoneclient is used only by neutronclient.osc.utils
|
||||
# TODO(amotoki): Drop this after osc.utils has no dependency on keystoneclient
|
||||
|
||||
@@ -6,7 +6,7 @@ description_file =
|
||||
author = OpenStack Networking Project
|
||||
author_email = openstack-discuss@lists.openstack.org
|
||||
home_page = https://docs.openstack.org/python-neutronclient/latest/
|
||||
python_requires = >=3.8
|
||||
python_requires = >=3.9
|
||||
classifier =
|
||||
Environment :: OpenStack
|
||||
Intended Audience :: Developers
|
||||
@@ -18,8 +18,10 @@ classifier =
|
||||
Programming Language :: Python :: Implementation :: CPython
|
||||
Programming Language :: Python :: 3 :: Only
|
||||
Programming Language :: Python :: 3
|
||||
Programming Language :: Python :: 3.8
|
||||
Programming Language :: Python :: 3.9
|
||||
Programming Language :: Python :: 3.10
|
||||
Programming Language :: Python :: 3.11
|
||||
Programming Language :: Python :: 3.12
|
||||
|
||||
[files]
|
||||
packages =
|
||||
|
||||
@@ -3,13 +3,10 @@ hacking>=6.1.0,<6.2.0 # Apache-2.0
|
||||
bandit!=1.6.0,>=1.1.0 # Apache-2.0
|
||||
coverage!=4.4,>=4.0 # Apache-2.0
|
||||
fixtures>=3.0.0 # Apache-2.0/BSD
|
||||
flake8-import-order>=0.18.0,<0.19.0 # LGPLv3
|
||||
flake8-import-order>=0.19.0,<0.20.0 # LGPLv3
|
||||
oslotest>=3.2.0 # Apache-2.0
|
||||
osprofiler>=2.3.0 # Apache-2.0
|
||||
python-openstackclient>=3.12.0 # Apache-2.0
|
||||
python-subunit>=1.0.0 # Apache-2.0/BSD
|
||||
requests-mock>=1.2.0 # Apache-2.0
|
||||
stestr>=2.0.0 # Apache-2.0
|
||||
testtools>=2.2.0 # MIT
|
||||
testscenarios>=0.4 # Apache-2.0/BSD
|
||||
tempest>=17.1.0 # Apache-2.0
|
||||
|
||||
Reference in New Issue
Block a user