Compare commits
57 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
776e360e35 | ||
|
|
f67af3d9be | ||
| ec84aff516 | |||
| f060429cfc | |||
|
|
7467c710f6 | ||
|
|
b720fdaee7 | ||
|
|
143db0177a | ||
|
|
8c72cc87da | ||
| 4575bea5a6 | |||
|
|
28628e8f96 | ||
|
|
6ca3341352 | ||
|
|
517bef2c54 | ||
|
|
d75e1e05b7 | ||
|
|
a92d8db81c | ||
|
|
3b80135a3d | ||
|
|
3a65712b45 | ||
|
|
1df1f38a91 | ||
| 792ad115b3 | |||
| ee73a48881 | |||
|
|
4b29df7234 | ||
|
|
cff9c266c0 | ||
|
|
983f0abc58 | ||
|
|
f83108d858 | ||
|
|
e647baf4ca | ||
|
|
2f047b1595 | ||
|
|
23fb666f92 | ||
|
|
a1ebfaa7f2 | ||
|
|
adf21f0288 | ||
|
|
ae397565be | ||
|
|
d6c211c139 | ||
|
|
76dd26f9fd | ||
|
|
439e290e95 | ||
|
|
10227b681f | ||
|
|
2c2a1f4de7 | ||
|
|
f6d147e031 | ||
|
|
7a1dca4131 | ||
|
|
26ab1b1d0c | ||
|
|
d87683b59b | ||
| f3756a3d4a | |||
| 12373768da | |||
|
|
3140fe014a | ||
|
|
4963c7ae14 | ||
|
|
1a1ee061e8 | ||
|
|
49c8577d8b | ||
| b2ebc6cc9b | |||
| 13d2d130dd | |||
|
|
66462874d2 | ||
|
|
62c187f5c7 | ||
|
|
e999631422 | ||
|
|
34245e8c8a | ||
|
|
9ffa0ac14e | ||
|
|
ffc9ed8262 | ||
|
|
097106d8fb | ||
|
|
873e08597f | ||
|
|
d1e5afb351 | ||
|
|
ada4229691 | ||
|
|
c8d61703c2 |
53
.zuul.yaml
53
.zuul.yaml
@@ -1,8 +1,7 @@
|
||||
- project:
|
||||
templates:
|
||||
- openstack-cover-jobs
|
||||
- openstack-lower-constraints-jobs
|
||||
- openstack-python3-victoria-jobs
|
||||
- openstack-python3-jobs
|
||||
- publish-openstack-docs-pti
|
||||
- check-requirements
|
||||
- lib-forward-testing-python3
|
||||
@@ -16,7 +15,7 @@
|
||||
- neutronclient-functional
|
||||
experimental:
|
||||
jobs:
|
||||
- neutron-lib-grenade-dsvm:
|
||||
- neutronclient-grenade-neutron-lib:
|
||||
irrelevant-files:
|
||||
- ^(test-|)requirements.txt$
|
||||
- ^setup.cfg$
|
||||
@@ -38,22 +37,49 @@
|
||||
# NOTE: neutronclient.tests.functional.base.ClientTestBase does not
|
||||
# support HTTPS endpoints now, so tls-proxy needs to be disabled.
|
||||
tls-proxy: false
|
||||
# Disable OVN services
|
||||
br-ex-tcpdump: false
|
||||
br-int-flows: false
|
||||
ovn-controller: false
|
||||
ovn-northd: false
|
||||
ovs-vswitchd: false
|
||||
ovsdb-server: false
|
||||
q-ovn-metadata-agent: false
|
||||
# Neutron services
|
||||
q-agt: true
|
||||
q-dhcp: true
|
||||
q-l3: true
|
||||
q-meta: true
|
||||
neutron-network-segment-range: true
|
||||
neutron-segments: true
|
||||
q-metering: true
|
||||
q-qos: true
|
||||
neutron-tag-ports-during-bulk-creation: true
|
||||
neutron-conntrack-helper: true
|
||||
devstack_localrc:
|
||||
USE_PYTHON3: true
|
||||
LIBS_FROM_GIT: python-neutronclient
|
||||
Q_AGENT: openvswitch
|
||||
Q_ML2_TENANT_NETWORK_TYPE: vxlan
|
||||
Q_ML2_PLUGIN_MECHANISM_DRIVERS: openvswitch
|
||||
devstack_plugins:
|
||||
neutron: https://opendev.org/openstack/neutron
|
||||
neutron-vpnaas: https://opendev.org/openstack/neutron-vpnaas
|
||||
|
||||
- job:
|
||||
name: neutron-lib-grenade-dsvm
|
||||
# Old name: legacy-grenade-dsvm-neutron-libs
|
||||
parent: legacy-dsvm-base
|
||||
run: playbooks/legacy/grenade-dsvm-neutron-libs/run.yaml
|
||||
post-run: playbooks/legacy/grenade-dsvm-neutron-libs/post.yaml
|
||||
timeout: 10800
|
||||
name: neutronclient-grenade-neutron-lib
|
||||
parent: grenade
|
||||
description: |
|
||||
neutron-lib grenade job.
|
||||
The version of this job on the current branch is py3 based,
|
||||
while any branch before ussuri needs to use the py2 version,
|
||||
which is defined in openstack-zuul-jobs with the old name
|
||||
(legacy-grenade-dsvm-neutron-libs).
|
||||
Users of this job needs to pay attention of the version used.
|
||||
Former names for this job were:
|
||||
* legacy-grenade-dsvm-neutron-libs
|
||||
* neutron-lib-grenade-dsvm
|
||||
required-projects:
|
||||
- openstack/grenade
|
||||
- openstack/devstack-gate
|
||||
- openstack/keystoneauth
|
||||
- openstack/neutron
|
||||
- openstack/neutron-lib
|
||||
@@ -64,8 +90,3 @@
|
||||
- openstack/python-keystoneclient
|
||||
- openstack/python-neutronclient
|
||||
- openstack/python-novaclient
|
||||
# This is py3 version for ussuri onwards rest all branch needs to be py2
|
||||
# version which is present in openstack-zuul-jobs.
|
||||
# We need to take care of this branch variant and python version while
|
||||
# migrating these jobs to zuulv3.
|
||||
branches: ^(?!(stable/(ocata|pike|queens|rocky|stein|train))).*$
|
||||
|
||||
@@ -28,7 +28,7 @@ source_suffix = '.rst'
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
copyright = u'OpenStack Foundation'
|
||||
copyright = 'OpenStack Foundation'
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
add_function_parentheses = True
|
||||
@@ -53,8 +53,8 @@ htmlhelp_basename = 'neutronclientdoc'
|
||||
|
||||
latex_documents = [
|
||||
('index', 'doc-python-neutronclient.tex',
|
||||
u'python-neutronclient Documentation',
|
||||
u'Neutron Contributors', 'manual'),
|
||||
'python-neutronclient Documentation',
|
||||
'Neutron Contributors', 'manual'),
|
||||
]
|
||||
|
||||
# Disable usage of xindy https://bugzilla.redhat.com/show_bug.cgi?id=1643664
|
||||
|
||||
@@ -91,17 +91,17 @@ Transition Steps
|
||||
|
||||
* **Done** `Security Group Rule CRUD <https://bugs.launchpad.net/python-openstackclient/+bug/1519512>`_
|
||||
|
||||
6. **In Progress:** OSC continues enhancing its networking support.
|
||||
6. **Done** OSC continues enhancing its networking support.
|
||||
At this point and when applicable, enhancements to the ``neutron``
|
||||
CLI must also be made to the ``openstack`` CLI and possibly the
|
||||
OpenStack Python SDK. Users of the neutron client's command extensions
|
||||
should start their transition to the OSC plugin system. See the
|
||||
developer guide section below for more information on this step.
|
||||
|
||||
7. **In Progress:** Deprecate the ``neutron`` CLI. Running the CLI after
|
||||
7. **Done** Deprecate the ``neutron`` CLI. Running the CLI after
|
||||
it has been `deprecated <https://review.opendev.org/#/c/393903/>`_
|
||||
will issue a warning message:
|
||||
``neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead.``
|
||||
``neutron CLI is deprecated and will be removed in the Z cycle. Use openstack CLI instead.``
|
||||
In addition, no new features will be added to the CLI, though fixes to
|
||||
the CLI will be assessed on a case by case basis.
|
||||
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
alabaster==0.7.10
|
||||
amqp==2.1.1
|
||||
appdirs==1.3.0
|
||||
asn1crypto==0.23.0
|
||||
Babel==2.3.4
|
||||
cachetools==2.0.0
|
||||
cffi==1.7.0
|
||||
cliff==2.8.0
|
||||
cmd2==0.8.0
|
||||
contextlib2==0.4.0
|
||||
coverage==4.0
|
||||
cryptography==2.1
|
||||
debtcollector==1.2.0
|
||||
decorator==3.4.0
|
||||
deprecation==1.0
|
||||
docutils==0.11
|
||||
dogpile.cache==0.6.2
|
||||
dulwich==0.15.0
|
||||
eventlet==0.18.2
|
||||
extras==1.0.0
|
||||
fasteners==0.7.0
|
||||
fixtures==3.0.0
|
||||
flake8-import-order==0.12
|
||||
flake8==2.5.5
|
||||
future==0.16.0
|
||||
futurist==1.2.0
|
||||
greenlet==0.4.10
|
||||
hacking==1.1.0
|
||||
idna==2.6
|
||||
imagesize==0.7.1
|
||||
iso8601==0.1.11
|
||||
Jinja2==2.10
|
||||
jmespath==0.9.0
|
||||
jsonpatch==1.16
|
||||
jsonpointer==1.13
|
||||
jsonschema==2.6.0
|
||||
keystoneauth1==3.4.0
|
||||
kombu==4.0.0
|
||||
linecache2==1.0.0
|
||||
MarkupSafe==1.0
|
||||
mccabe==0.2.1
|
||||
monotonic==0.6
|
||||
mox3==0.20.0
|
||||
msgpack-python==0.4.0
|
||||
munch==2.1.0
|
||||
netaddr==0.7.18
|
||||
netifaces==0.10.4
|
||||
openstacksdk==0.11.2
|
||||
os-client-config==1.28.0
|
||||
os-service-types==1.2.0
|
||||
os-testr==1.0.0
|
||||
osc-lib==1.8.0
|
||||
oslo.concurrency==3.25.0
|
||||
oslo.config==5.2.0
|
||||
oslo.context==2.19.2
|
||||
oslo.i18n==3.15.3
|
||||
oslo.log==3.36.0
|
||||
oslo.messaging==5.29.0
|
||||
oslo.middleware==3.31.0
|
||||
oslo.serialization==2.18.0
|
||||
oslo.service==1.24.0
|
||||
oslo.utils==3.33.0
|
||||
oslotest==3.2.0
|
||||
osprofiler==2.3.0
|
||||
paramiko==2.0.0
|
||||
Paste==2.0.2
|
||||
PasteDeploy==1.5.0
|
||||
pbr==2.0.0
|
||||
pika-pool==0.1.3
|
||||
pika==0.10.0
|
||||
positional==1.2.1
|
||||
prettytable==0.7.2
|
||||
pyasn1==0.1.8
|
||||
pycodestyle==2.3.1
|
||||
pycparser==2.18
|
||||
pyflakes==0.8.1
|
||||
Pygments==2.2.0
|
||||
pyinotify==0.9.6
|
||||
pyOpenSSL==17.1.0
|
||||
pyparsing==2.1.0
|
||||
pyperclip==1.5.27
|
||||
python-cinderclient==3.3.0
|
||||
python-dateutil==2.5.3
|
||||
python-glanceclient==2.8.0
|
||||
python-keystoneclient==3.8.0
|
||||
python-mimeparse==1.6.0
|
||||
python-novaclient==9.1.0
|
||||
python-openstackclient==3.12.0
|
||||
python-subunit==1.0.0
|
||||
pytz==2013.6
|
||||
PyYAML==3.12
|
||||
repoze.lru==0.7
|
||||
requests-mock==1.2.0
|
||||
requests==2.14.2
|
||||
requestsexceptions==1.2.0
|
||||
rfc3986==0.3.1
|
||||
Routes==2.3.1
|
||||
simplejson==3.5.1
|
||||
snowballstemmer==1.2.1
|
||||
statsd==3.2.1
|
||||
stestr==2.0.0
|
||||
stevedore==1.20.0
|
||||
tempest==17.1.0
|
||||
tenacity==3.2.1
|
||||
testscenarios==0.4
|
||||
testtools==2.2.0
|
||||
traceback2==1.4.0
|
||||
unittest2==1.1.0
|
||||
urllib3==1.21.1
|
||||
vine==1.1.4
|
||||
warlock==1.2.0
|
||||
WebOb==1.7.1
|
||||
wrapt==1.7.0
|
||||
@@ -61,9 +61,9 @@ class HTTPClient(object):
|
||||
token=None, region_name=None, timeout=None,
|
||||
endpoint_url=None, insecure=False,
|
||||
endpoint_type='publicURL',
|
||||
auth_strategy='keystone', ca_cert=None, log_credentials=False,
|
||||
service_type='network', global_request_id=None,
|
||||
**kwargs):
|
||||
auth_strategy='keystone', ca_cert=None, cert=None,
|
||||
log_credentials=False, service_type='network',
|
||||
global_request_id=None, **kwargs):
|
||||
|
||||
self.username = username
|
||||
self.user_id = user_id
|
||||
@@ -82,6 +82,7 @@ class HTTPClient(object):
|
||||
self.auth_strategy = auth_strategy
|
||||
self.log_credentials = log_credentials
|
||||
self.global_request_id = global_request_id
|
||||
self.cert = cert
|
||||
if insecure:
|
||||
self.verify_cert = False
|
||||
else:
|
||||
@@ -167,6 +168,7 @@ class HTTPClient(object):
|
||||
data=body,
|
||||
headers=headers,
|
||||
verify=self.verify_cert,
|
||||
cert=self.cert,
|
||||
timeout=self.timeout,
|
||||
**kwargs)
|
||||
|
||||
@@ -399,6 +401,7 @@ def construct_http_client(username=None,
|
||||
log_credentials=None,
|
||||
auth_strategy='keystone',
|
||||
ca_cert=None,
|
||||
cert=None,
|
||||
service_type='network',
|
||||
session=None,
|
||||
global_request_id=None,
|
||||
@@ -430,6 +433,7 @@ def construct_http_client(username=None,
|
||||
endpoint_type=endpoint_type,
|
||||
service_type=service_type,
|
||||
ca_cert=ca_cert,
|
||||
cert=cert,
|
||||
log_credentials=log_credentials,
|
||||
auth_strategy=auth_strategy,
|
||||
global_request_id=global_request_id)
|
||||
|
||||
@@ -22,7 +22,7 @@ from neutronclient.neutron.v2_0.bgp import peer as bgp_peer
|
||||
|
||||
# Allowed BGP Autonomous number range
|
||||
MIN_AS_NUM = 1
|
||||
MAX_AS_NUM = 65535
|
||||
MAX_AS_NUM = 4294967295
|
||||
|
||||
|
||||
def get_network_id(client, id_or_name):
|
||||
|
||||
@@ -245,15 +245,15 @@ class CreatePort(neutronV20.CreateCommand, UpdatePortSecGroupMixin,
|
||||
parser.add_argument(
|
||||
'--vnic-type',
|
||||
metavar='<direct | direct-physical | macvtap '
|
||||
'| normal | baremetal>',
|
||||
'| normal | baremetal | smart-nic>',
|
||||
choices=['direct', 'direct-physical', 'macvtap',
|
||||
'normal', 'baremetal'],
|
||||
'normal', 'baremetal', 'smart-nic'],
|
||||
type=utils.convert_to_lowercase,
|
||||
help=_('VNIC type for this port.'))
|
||||
parser.add_argument(
|
||||
'--vnic_type',
|
||||
choices=['direct', 'direct-physical', 'macvtap',
|
||||
'normal', 'baremetal'],
|
||||
'normal', 'baremetal', 'smart-nic'],
|
||||
type=utils.convert_to_lowercase,
|
||||
help=argparse.SUPPRESS)
|
||||
parser.add_argument(
|
||||
|
||||
@@ -285,7 +285,7 @@ class SetBgpSpeaker(command.Command):
|
||||
)
|
||||
parser.add_argument(
|
||||
'--name',
|
||||
help=_("Name of the BGP speaker to update"))
|
||||
help=_("New name for the BGP speaker"))
|
||||
add_common_arguments(parser)
|
||||
return parser
|
||||
|
||||
|
||||
@@ -15,4 +15,4 @@ BGP_SPEAKER = 'bgp_speaker'
|
||||
BGP_PEERS = 'bgp_peers'
|
||||
BGP_PEER = 'bgp_peer'
|
||||
MIN_AS_NUM = 1
|
||||
MAX_AS_NUM = 65535
|
||||
MAX_AS_NUM = 4294967295
|
||||
|
||||
@@ -58,11 +58,11 @@ def _get_common_parser(parser):
|
||||
enable_group.add_argument(
|
||||
'--enable',
|
||||
action='store_true',
|
||||
help=_('Enable this log (default is disabled)'))
|
||||
help=_('Enable this log'))
|
||||
enable_group.add_argument(
|
||||
'--disable',
|
||||
action='store_true',
|
||||
help=_('Disable this log'))
|
||||
help=_('Disable this log (default is enabled)'))
|
||||
return parser
|
||||
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ def _get_common_parser(parser):
|
||||
help=_('Encryption algorithm'))
|
||||
parser.add_argument(
|
||||
'--phase1-negotiation-mode',
|
||||
choices=['main'],
|
||||
choices=['main', 'aggressive'],
|
||||
type=_convert_to_lowercase,
|
||||
help=_('IKE Phase1 negotiation mode'))
|
||||
parser.add_argument(
|
||||
|
||||
@@ -637,7 +637,7 @@ class NeutronShell(app.App):
|
||||
def main(argv=sys.argv[1:]):
|
||||
try:
|
||||
print(_("neutron CLI is deprecated and will be removed "
|
||||
"in the future. Use openstack CLI instead."), file=sys.stderr)
|
||||
"in the Z cycle. Use openstack CLI instead."), file=sys.stderr)
|
||||
return NeutronShell(NEUTRON_API_VERSION).run(
|
||||
list(map(encodeutils.safe_decode, argv)))
|
||||
except KeyboardInterrupt:
|
||||
|
||||
@@ -43,7 +43,7 @@ class TestCLIFormatter(base.ClientTestBase):
|
||||
result = self._create_net('yaml', ['name', 'admin_state_up'])
|
||||
self.assertDictEqual({'name': self.net_name,
|
||||
'admin_state_up': True},
|
||||
yaml.load(result))
|
||||
yaml.safe_load(result))
|
||||
|
||||
def test_net_create_with_value_formatter(self):
|
||||
# NOTE(amotoki): In 'value' formatter, there is no guarantee
|
||||
|
||||
@@ -64,9 +64,13 @@ class SimpleReadOnlyNeutronClientTest(base.ClientTestBase):
|
||||
self.neutron('floatingip-list')
|
||||
|
||||
def test_neutron_meter_label_list(self):
|
||||
if not self.is_extension_enabled('metering'):
|
||||
self.skipTest('metering is not enabled')
|
||||
self.neutron('meter-label-list')
|
||||
|
||||
def test_neutron_meter_label_rule_list(self):
|
||||
if not self.is_extension_enabled('metering'):
|
||||
self.skipTest('metering is not enabled')
|
||||
self.neutron('meter-label-rule-list')
|
||||
|
||||
def test_neutron_net_external_list(self):
|
||||
|
||||
@@ -96,7 +96,7 @@ class CLITestV20BGPPeerJSON(test_cli20.CLITestV20Base):
|
||||
name = 'my-name'
|
||||
my_id = 'my-id'
|
||||
peerip = '1.1.1.1'
|
||||
remote_asnum = '65536'
|
||||
remote_asnum = '4294967296'
|
||||
args = [name,
|
||||
'--peer-ip', peerip,
|
||||
'--remote-as', remote_asnum, ]
|
||||
@@ -107,7 +107,8 @@ class CLITestV20BGPPeerJSON(test_cli20.CLITestV20Base):
|
||||
self._test_create_resource,
|
||||
resource, cmd, name, my_id, args,
|
||||
position_names, position_values)
|
||||
self.assertEqual('remote-as "65536" should be an integer [%s:%s].' %
|
||||
self.assertEqual('remote-as "4294967296" should be an '
|
||||
'integer [%s:%s].' %
|
||||
(bgp_speaker.MIN_AS_NUM, bgp_speaker.MAX_AS_NUM),
|
||||
str(exc))
|
||||
|
||||
|
||||
@@ -108,7 +108,7 @@ class CLITestV20BGPSpeakerJSON(test_cli20.CLITestV20Base):
|
||||
None)
|
||||
name = 'my-name'
|
||||
my_id = 'my-id'
|
||||
local_asnum = '65536'
|
||||
local_asnum = '4294967296'
|
||||
args = [name,
|
||||
'--local-as', local_asnum]
|
||||
position_names = ['name', 'local_as', ]
|
||||
@@ -117,7 +117,8 @@ class CLITestV20BGPSpeakerJSON(test_cli20.CLITestV20Base):
|
||||
self._test_create_resource,
|
||||
resource, cmd, name, my_id, args,
|
||||
position_names, position_values)
|
||||
self.assertEqual('local-as "65536" should be an integer [%s:%s].' %
|
||||
self.assertEqual('local-as "4294967296" should be an '
|
||||
'integer [%s:%s].' %
|
||||
(bgp_speaker.MIN_AS_NUM, bgp_speaker.MAX_AS_NUM),
|
||||
str(exc))
|
||||
|
||||
|
||||
@@ -208,6 +208,10 @@ class TestCreateIKEPolicy(TestIKEPolicy, common.TestCreateVPNaaS):
|
||||
def test_create_with_all_params_name(self):
|
||||
self._test_create_with_all_params({'name': 'new_ikepolicy'})
|
||||
|
||||
def test_create_with_all_params_aggressive_mode(self):
|
||||
self._test_create_with_all_params(
|
||||
{'phase1_negotiation_mode': 'aggressive'})
|
||||
|
||||
|
||||
class TestDeleteIKEPolicy(TestIKEPolicy, common.TestDeleteVPNaaS):
|
||||
|
||||
@@ -292,6 +296,22 @@ class TestSetIKEPolicy(TestIKEPolicy, common.TestSetVPNaaS):
|
||||
target, {self.res: {'auth_algorithm': 'sha256'}})
|
||||
self.assertIsNone(result)
|
||||
|
||||
def test_set_phase1_negotiation_mode_with_aggressive(self):
|
||||
target = self.resource['id']
|
||||
phase1_negotiation_mode = 'aggressive'
|
||||
arglist = [target,
|
||||
'--phase1-negotiation-mode', phase1_negotiation_mode]
|
||||
verifylist = [
|
||||
(self.res, target),
|
||||
('phase1_negotiation_mode', phase1_negotiation_mode),
|
||||
]
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
result = self.cmd.take_action(parsed_args)
|
||||
|
||||
self.mocked.assert_called_once_with(
|
||||
target, {self.res: {'phase1_negotiation_mode': 'aggressive'}})
|
||||
self.assertIsNone(result)
|
||||
|
||||
|
||||
class TestShowIKEPolicy(TestIKEPolicy, common.TestShowVPNaaS):
|
||||
|
||||
|
||||
@@ -1159,7 +1159,7 @@ class CLITestV20OutputFormatter(CLITestV20Base):
|
||||
|
||||
def test_create_resource_yaml(self):
|
||||
self._test_create_resource_with_formatter('yaml')
|
||||
data = yaml.load(self.fake_stdout.make_string())
|
||||
data = yaml.safe_load(self.fake_stdout.make_string())
|
||||
self.assertEqual('myname', data['name'])
|
||||
self.assertEqual('myid', data['id'])
|
||||
|
||||
@@ -1184,7 +1184,7 @@ class CLITestV20OutputFormatter(CLITestV20Base):
|
||||
|
||||
def test_show_resource_yaml(self):
|
||||
self._test_show_resource_with_formatter('yaml')
|
||||
data = yaml.load(''.join(self.fake_stdout.content))
|
||||
data = yaml.safe_load(''.join(self.fake_stdout.content))
|
||||
self.assertEqual('myname', data['name'])
|
||||
self.assertEqual('myid', data['id'])
|
||||
|
||||
@@ -1211,5 +1211,5 @@ class CLITestV20OutputFormatter(CLITestV20Base):
|
||||
|
||||
def test_list_resources_yaml(self):
|
||||
self._test_list_resources_with_formatter('yaml')
|
||||
data = yaml.load(''.join(self.fake_stdout.content))
|
||||
data = yaml.safe_load(''.join(self.fake_stdout.content))
|
||||
self.assertEqual(['myid1', 'myid2'], [d['id'] for d in data])
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright 2012 Red Hat
|
||||
# All Rights Reserved.
|
||||
#
|
||||
|
||||
@@ -214,6 +214,26 @@ class CLITestV20PortJSON(test_cli20.CLITestV20Base):
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_port_vnic_type_smart_nic(self):
|
||||
# Create port: --vnic_type smart-nic netid.
|
||||
resource = 'port'
|
||||
cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
name = 'myname'
|
||||
myid = 'myid'
|
||||
netid = 'netid'
|
||||
args = ['--vnic_type', 'smart-nic', netid]
|
||||
position_names = ['binding:vnic_type', 'network_id']
|
||||
position_values = ['smart-nic', netid]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
# Test dashed options
|
||||
args = ['--vnic-type', 'smart-nic', netid]
|
||||
position_names = ['binding:vnic_type', 'network_id']
|
||||
position_values = ['smart-nic', netid]
|
||||
self._test_create_resource(resource, cmd, name, myid, args,
|
||||
position_names, position_values)
|
||||
|
||||
def test_create_port_with_binding_profile(self):
|
||||
resource = 'port'
|
||||
cmd = port.CreatePort(test_cli20.MyApp(sys.stdout), None)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright 2012 Red Hat
|
||||
# All Rights Reserved.
|
||||
#
|
||||
|
||||
@@ -217,5 +217,5 @@ class CLITestV20ExtensionJSONChildResource(test_cli20.CLITestV20Base):
|
||||
self.client.delete_parents_child,
|
||||
self.client.create_parents_child)
|
||||
for method in methods:
|
||||
argspec = inspect.getargspec(method)
|
||||
argspec = inspect.getfullargspec(method)
|
||||
self.assertIn("parent_id", argspec.args)
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
import logging
|
||||
|
||||
import testtools
|
||||
from testtools import helpers
|
||||
|
||||
from neutronclient.neutron import v2_0 as neutronV20
|
||||
|
||||
@@ -30,7 +29,7 @@ class TestCommandMeta(testtools.TestCase):
|
||||
class FakeCommand(neutronV20.NeutronCommand):
|
||||
pass
|
||||
|
||||
self.assertTrue(helpers.safe_hasattr(FakeCommand, 'log'))
|
||||
self.assertTrue(hasattr(FakeCommand, 'log'))
|
||||
self.assertIsInstance(FakeCommand.log, logging.getLoggerClass())
|
||||
self.assertEqual(__name__ + ".FakeCommand", FakeCommand.log.name)
|
||||
|
||||
@@ -38,5 +37,5 @@ class TestCommandMeta(testtools.TestCase):
|
||||
class FakeCommand(neutronV20.NeutronCommand):
|
||||
log = None
|
||||
|
||||
self.assertTrue(helpers.safe_hasattr(FakeCommand, 'log'))
|
||||
self.assertTrue(hasattr(FakeCommand, 'log'))
|
||||
self.assertIsNone(FakeCommand.log)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#!/usr/bin/env python
|
||||
# Copyright (C) 2013 Yahoo! Inc.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
|
||||
@@ -357,10 +357,10 @@ class ShellTest(testtools.TestCase):
|
||||
self.useFixture(fixtures.MockPatchObject(openstack_shell,
|
||||
'COMMANDS', None))
|
||||
openstack_shell.NeutronShell('2.0')
|
||||
self.assertDictContainsSubset(
|
||||
self.assertLessEqual(
|
||||
{'net-create': network.CreateNetwork,
|
||||
'net-delete': network.DeleteNetwork,
|
||||
'net-list': network.ListNetwork,
|
||||
'net-show': network.ShowNetwork,
|
||||
'net-update': network.UpdateNetwork},
|
||||
openstack_shell.COMMANDS['2.0'])
|
||||
'net-update': network.UpdateNetwork}.items(),
|
||||
openstack_shell.COMMANDS['2.0'].items())
|
||||
|
||||
@@ -216,6 +216,10 @@ class ClientBase(object):
|
||||
:param bool log_credentials: Allow for logging of passwords or not.
|
||||
Defaults to False. (optional)
|
||||
:param string ca_cert: SSL CA bundle file to use. (optional)
|
||||
:param cert: A client certificate to pass to requests. These are of the
|
||||
same form as requests expects. Either a single filename
|
||||
containing both the certificate and key or a tuple containing
|
||||
the path to the certificate then a path to the key. (optional)
|
||||
:param integer retries: How many times idempotent (GET, PUT, DELETE)
|
||||
requests to Neutron server should be retried if
|
||||
they fail (default: 0).
|
||||
@@ -246,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 will be "
|
||||
"deprecated in favor of OpenstackSDK, please use "
|
||||
"that!")
|
||||
self.retries = kwargs.pop('retries', 0)
|
||||
self.raise_errors = kwargs.pop('raise_errors', True)
|
||||
self.httpclient = client.construct_http_client(**kwargs)
|
||||
@@ -511,6 +518,8 @@ class Client(ClientBase):
|
||||
router_path = "/routers/%s"
|
||||
floatingips_path = "/floatingips"
|
||||
floatingip_path = "/floatingips/%s"
|
||||
port_forwardings_path = "/floatingips/%s/port_forwardings"
|
||||
port_forwarding_path = "/floatingips/%s/port_forwardings/%s"
|
||||
security_groups_path = "/security-groups"
|
||||
security_group_path = "/security-groups/%s"
|
||||
security_group_rules_path = "/security-group-rules"
|
||||
@@ -615,12 +624,20 @@ class Client(ClientBase):
|
||||
qos_policy_path = "/qos/policies/%s"
|
||||
qos_bandwidth_limit_rules_path = "/qos/policies/%s/bandwidth_limit_rules"
|
||||
qos_bandwidth_limit_rule_path = "/qos/policies/%s/bandwidth_limit_rules/%s"
|
||||
qos_packet_rate_limit_rules_path = \
|
||||
"/qos/policies/%s/packet_rate_limit_rules"
|
||||
qos_packet_rate_limit_rule_path = \
|
||||
"/qos/policies/%s/packet_rate_limit_rules/%s"
|
||||
qos_dscp_marking_rules_path = "/qos/policies/%s/dscp_marking_rules"
|
||||
qos_dscp_marking_rule_path = "/qos/policies/%s/dscp_marking_rules/%s"
|
||||
qos_minimum_bandwidth_rules_path = \
|
||||
"/qos/policies/%s/minimum_bandwidth_rules"
|
||||
qos_minimum_bandwidth_rule_path = \
|
||||
"/qos/policies/%s/minimum_bandwidth_rules/%s"
|
||||
qos_minimum_packet_rate_rules_path = \
|
||||
"/qos/policies/%s/minimum_packet_rate_rules"
|
||||
qos_minimum_packet_rate_rule_path = \
|
||||
"/qos/policies/%s/minimum_packet_rate_rules/%s"
|
||||
qos_rule_types_path = "/qos/rule-types"
|
||||
qos_rule_type_path = "/qos/rule-types/%s"
|
||||
flavors_path = "/flavors"
|
||||
@@ -704,7 +721,9 @@ class Client(ClientBase):
|
||||
'qos_policies': 'qos_policy',
|
||||
'policies': 'policy',
|
||||
'bandwidth_limit_rules': 'bandwidth_limit_rule',
|
||||
'packet_rate_limit_rules': 'packet_rate_limit_rule',
|
||||
'minimum_bandwidth_rules': 'minimum_bandwidth_rule',
|
||||
'minimum_packet_rate_rules': 'minimum_packet_rate_rule',
|
||||
'rules': 'rule',
|
||||
'dscp_marking_rules': 'dscp_marking_rule',
|
||||
'rule_types': 'rule_type',
|
||||
@@ -1005,6 +1024,32 @@ class Client(ClientBase):
|
||||
"""Deletes the specified floatingip."""
|
||||
return self.delete(self.floatingip_path % (floatingip))
|
||||
|
||||
def show_port_forwarding(self, floatingip, portforwarding):
|
||||
"""Fetches information of a certain portforwarding"""
|
||||
return self.get(self.port_forwarding_path % (floatingip,
|
||||
portforwarding))
|
||||
|
||||
def list_port_forwardings(self, floatingip, retrieve_all=True, **_params):
|
||||
"""Fetches a list of all portforwardings for a floatingip."""
|
||||
return self.list('port_forwardings',
|
||||
self.port_forwardings_path % floatingip, retrieve_all,
|
||||
**_params)
|
||||
|
||||
def create_port_forwarding(self, floatingip, body=None):
|
||||
"""Creates a new portforwarding."""
|
||||
return self.post(self.port_forwardings_path % floatingip, body=body)
|
||||
|
||||
def delete_port_forwarding(self, floatingip, portforwarding):
|
||||
"""Deletes the specified portforwarding."""
|
||||
return self.delete(self.port_forwarding_path % (floatingip,
|
||||
portforwarding))
|
||||
|
||||
def update_port_forwarding(self, floatingip, portforwarding, body=None):
|
||||
"""Updates a portforwarding."""
|
||||
return self.put(self.port_forwarding_path % (floatingip,
|
||||
portforwarding),
|
||||
body=body)
|
||||
|
||||
def create_security_group(self, body=None):
|
||||
"""Creates a new security group."""
|
||||
return self.post(self.security_groups_path, body=body)
|
||||
@@ -1968,6 +2013,35 @@ class Client(ClientBase):
|
||||
return self.post(self.qos_minimum_bandwidth_rules_path % policy,
|
||||
body=body)
|
||||
|
||||
def list_packet_rate_limit_rules(self, policy_id, retrieve_all=True,
|
||||
**_params):
|
||||
"""Fetches a list of all packet rate limit rules for the given policy
|
||||
|
||||
"""
|
||||
return self.list('packet_rate_limit_rules',
|
||||
self.qos_packet_rate_limit_rules_path %
|
||||
policy_id, retrieve_all, **_params)
|
||||
|
||||
def show_packet_rate_limit_rule(self, rule, policy, body=None):
|
||||
"""Fetches information of a certain packet rate limit rule."""
|
||||
return self.get(self.qos_packet_rate_limit_rule_path %
|
||||
(policy, rule), body=body)
|
||||
|
||||
def create_packet_rate_limit_rule(self, policy, body=None):
|
||||
"""Creates a new packet rate limit rule."""
|
||||
return self.post(self.qos_packet_rate_limit_rules_path % policy,
|
||||
body=body)
|
||||
|
||||
def update_packet_rate_limit_rule(self, rule, policy, body=None):
|
||||
"""Updates a packet rate limit rule."""
|
||||
return self.put(self.qos_packet_rate_limit_rule_path %
|
||||
(policy, rule), body=body)
|
||||
|
||||
def delete_packet_rate_limit_rule(self, rule, policy):
|
||||
"""Deletes a packet rate limit rule."""
|
||||
return self.delete(self.qos_packet_rate_limit_rule_path %
|
||||
(policy, rule))
|
||||
|
||||
def update_minimum_bandwidth_rule(self, rule, policy, body=None):
|
||||
"""Updates a minimum bandwidth rule."""
|
||||
return self.put(self.qos_minimum_bandwidth_rule_path %
|
||||
@@ -1978,6 +2052,35 @@ class Client(ClientBase):
|
||||
return self.delete(self.qos_minimum_bandwidth_rule_path %
|
||||
(policy, rule))
|
||||
|
||||
def list_minimum_packet_rate_rules(self, policy_id, retrieve_all=True,
|
||||
**_params):
|
||||
"""Fetches a list of all minimum packet rate rules for the given policy
|
||||
|
||||
"""
|
||||
return self.list('minimum_packet_rate_rules',
|
||||
self.qos_minimum_packet_rate_rules_path %
|
||||
policy_id, retrieve_all, **_params)
|
||||
|
||||
def show_minimum_packet_rate_rule(self, rule, policy, body=None):
|
||||
"""Fetches information of a certain minimum packet rate rule."""
|
||||
return self.get(self.qos_minimum_packet_rate_rule_path %
|
||||
(policy, rule), body=body)
|
||||
|
||||
def create_minimum_packet_rate_rule(self, policy, body=None):
|
||||
"""Creates a new minimum packet rate rule."""
|
||||
return self.post(self.qos_minimum_packet_rate_rules_path % policy,
|
||||
body=body)
|
||||
|
||||
def update_minimum_packet_rate_rule(self, rule, policy, body=None):
|
||||
"""Updates a minimum packet rate rule."""
|
||||
return self.put(self.qos_minimum_packet_rate_rule_path %
|
||||
(policy, rule), body=body)
|
||||
|
||||
def delete_minimum_packet_rate_rule(self, rule, policy):
|
||||
"""Deletes a minimum packet rate rule."""
|
||||
return self.delete(self.qos_minimum_packet_rate_rule_path %
|
||||
(policy, rule))
|
||||
|
||||
def create_flavor(self, body=None):
|
||||
"""Creates a new Neutron service flavor."""
|
||||
return self.post(self.flavors_path, body=body)
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
- hosts: primary
|
||||
tasks:
|
||||
|
||||
- name: Copy files from {{ ansible_user_dir }}/workspace/ on node
|
||||
synchronize:
|
||||
src: '{{ ansible_user_dir }}/workspace/'
|
||||
dest: '{{ zuul.executor.log_root }}'
|
||||
mode: pull
|
||||
copy_links: true
|
||||
verify_host: true
|
||||
rsync_opts:
|
||||
- --include=/logs/**
|
||||
- --include=*/
|
||||
- --exclude=*
|
||||
- --prune-empty-dirs
|
||||
@@ -1,52 +0,0 @@
|
||||
- hosts: all
|
||||
name: Autoconverted job legacy-grenade-dsvm-neutron-libs from old job gate-grenade-dsvm-neutron-libs-ubuntu-xenial-nv
|
||||
tasks:
|
||||
|
||||
- name: Ensure legacy workspace directory
|
||||
file:
|
||||
path: '{{ ansible_user_dir }}/workspace'
|
||||
state: directory
|
||||
|
||||
- shell:
|
||||
cmd: |
|
||||
set -e
|
||||
set -x
|
||||
cat > clonemap.yaml << EOF
|
||||
clonemap:
|
||||
- name: openstack/devstack-gate
|
||||
dest: devstack-gate
|
||||
EOF
|
||||
/usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \
|
||||
https://opendev.org \
|
||||
openstack/devstack-gate
|
||||
executable: /bin/bash
|
||||
chdir: '{{ ansible_user_dir }}/workspace'
|
||||
environment: '{{ zuul | zuul_legacy_vars }}'
|
||||
|
||||
- shell:
|
||||
cmd: |
|
||||
set -e
|
||||
set -x
|
||||
export PROJECTS="openstack/grenade $PROJECTS"
|
||||
export DEVSTACK_PROJECT_FROM_GIT="os-client-config"
|
||||
export DEVSTACK_PROJECT_FROM_GIT+=",keystoneauth"
|
||||
export DEVSTACK_PROJECT_FROM_GIT+=",python-novaclient"
|
||||
export DEVSTACK_PROJECT_FROM_GIT+=",python-keystoneclient"
|
||||
export DEVSTACK_PROJECT_FROM_GIT+=",python-glanceclient"
|
||||
export DEVSTACK_PROJECT_FROM_GIT+=",python-cinderclient"
|
||||
export DEVSTACK_PROJECT_FROM_GIT+=",python-neutronclient"
|
||||
export DEVSTACK_PROJECT_FROM_GIT+=",python-ironicclient"
|
||||
export PYTHONUNBUFFERED=true
|
||||
export DEVSTACK_GATE_TEMPEST=1
|
||||
export DEVSTACK_GATE_GRENADE=pullup
|
||||
export DEVSTACK_GATE_USE_PYTHON3=True
|
||||
export DEVSTACK_GATE_NEUTRON=1
|
||||
export BRANCH_OVERRIDE=default
|
||||
if [ "$BRANCH_OVERRIDE" != "default" ] ; then
|
||||
export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
|
||||
fi
|
||||
cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
|
||||
./safe-devstack-vm-gate-wrap.sh
|
||||
executable: /bin/bash
|
||||
chdir: '{{ ansible_user_dir }}/workspace'
|
||||
environment: '{{ zuul | zuul_legacy_vars }}'
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
The ``--phase1-negotiation-mode`` option supports ``aggressive`` mode
|
||||
in VPNaaS ikepolicy commands.
|
||||
@@ -0,0 +1,4 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Add support to floating ip port forwarding.
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
upgrade:
|
||||
- |
|
||||
Python 3.6 & 3.7 support has been dropped. The minimum version of Python now
|
||||
supported is Python 3.8.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Added new client methods for QoS minimum packet rate rule:
|
||||
``list_minimum_packet_rate_rules``, ``show_minimum_packet_rate_rule``,
|
||||
``create_minimum_packet_rate_rule``, ``update_minimum_packet_rate_rule``,
|
||||
``delete_minimum_packet_rate_rule``.
|
||||
@@ -0,0 +1,10 @@
|
||||
---
|
||||
deprecations:
|
||||
- |
|
||||
``neutron`` CLI will be removed in 'Z' release.
|
||||
While it has been marked as deprecated for removal for long,
|
||||
all features in ``neutron`` CLI have been supported in ``openstack`` CLI
|
||||
(OpenStackClient) as of Xena release and the neutron team plans to
|
||||
remove it in 'Z' release. Consider using ``openstack`` CLI and
|
||||
`Mapping Guide <https://docs.openstack.org/python-openstackclient/latest/cli/decoder.html#neutron-cli>`__
|
||||
in the OSC documentation would help you.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
prelude: >
|
||||
Openstack community decided to use one SDK for its services, that is
|
||||
in ``openstacksdk`` repository. To avoid duplication, sooner or later the
|
||||
python binding code in ``python-neutronclient`` will be deprecated, and
|
||||
``Neutron`` team decided on the ``2023.1 (Antelope)`` PTG to not allow
|
||||
new features\' bindings implemented here.
|
||||
@@ -0,0 +1,7 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Added new client methods for QoS packet rate limit rule:
|
||||
``list_packet_rate_limit_rules``, ``show_packet_rate_limit_rule``,
|
||||
``create_packet_rate_limit_rule``, ``update_packet_rate_limit_rule``,
|
||||
``delete_packet_rate_limit_rule``.
|
||||
@@ -61,8 +61,8 @@ source_suffix = '.rst'
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'Neutron Client Release Notes'
|
||||
copyright = u'2015, Neutron Developers'
|
||||
project = 'Neutron Client Release Notes'
|
||||
copyright = '2015, Neutron Developers'
|
||||
|
||||
# Release notes are version independent.
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
|
||||
@@ -6,6 +6,11 @@
|
||||
:maxdepth: 1
|
||||
|
||||
unreleased
|
||||
zed
|
||||
yoga
|
||||
xena
|
||||
wallaby
|
||||
victoria
|
||||
ussuri
|
||||
train
|
||||
stein
|
||||
|
||||
6
releasenotes/source/victoria.rst
Normal file
6
releasenotes/source/victoria.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
=============================
|
||||
Victoria Series Release Notes
|
||||
=============================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/victoria
|
||||
6
releasenotes/source/wallaby.rst
Normal file
6
releasenotes/source/wallaby.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
============================
|
||||
Wallaby Series Release Notes
|
||||
============================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/wallaby
|
||||
6
releasenotes/source/xena.rst
Normal file
6
releasenotes/source/xena.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
=========================
|
||||
Xena Series Release Notes
|
||||
=========================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/xena
|
||||
6
releasenotes/source/yoga.rst
Normal file
6
releasenotes/source/yoga.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
=========================
|
||||
Yoga Series Release Notes
|
||||
=========================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/yoga
|
||||
6
releasenotes/source/zed.rst
Normal file
6
releasenotes/source/zed.rst
Normal file
@@ -0,0 +1,6 @@
|
||||
========================
|
||||
Zed Series Release Notes
|
||||
========================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/zed
|
||||
@@ -1,18 +1,22 @@
|
||||
# Requirements lower bounds listed here are our best effort to keep them up to
|
||||
# date but we do not test them so no guarantee of having them all correct. If
|
||||
# you find any incorrect lower bounds, let us know or propose a fix.
|
||||
|
||||
# The order of packages is significant, because pip processes them in the order
|
||||
# of appearance. Changing the order has an impact on the overall integration
|
||||
# process, which may cause wedges in the gate later.
|
||||
pbr!=2.1.0,>=2.0.0 # Apache-2.0
|
||||
cliff!=2.9.0,>=2.8.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
|
||||
osc-lib>=1.8.0 # Apache-2.0
|
||||
osc-lib>=1.12.0 # Apache-2.0
|
||||
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.4.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
|
||||
python-keystoneclient>=3.8.0 # Apache-2.0
|
||||
|
||||
25
setup.cfg
25
setup.cfg
@@ -1,12 +1,12 @@
|
||||
[metadata]
|
||||
name = python-neutronclient
|
||||
summary = CLI and Client Library for OpenStack Networking
|
||||
description-file =
|
||||
description_file =
|
||||
README.rst
|
||||
author = OpenStack Networking Project
|
||||
author-email = openstack-discuss@lists.openstack.org
|
||||
home-page = https://docs.openstack.org/python-neutronclient/latest/
|
||||
python-requires = >=3.6
|
||||
author_email = openstack-discuss@lists.openstack.org
|
||||
home_page = https://docs.openstack.org/python-neutronclient/latest/
|
||||
python_requires = >=3.8
|
||||
classifier =
|
||||
Environment :: OpenStack
|
||||
Intended Audience :: Developers
|
||||
@@ -18,9 +18,8 @@ classifier =
|
||||
Programming Language :: Python :: Implementation :: CPython
|
||||
Programming Language :: Python :: 3 :: Only
|
||||
Programming Language :: Python :: 3
|
||||
Programming Language :: Python :: 3.6
|
||||
Programming Language :: Python :: 3.7
|
||||
Programming Language :: Python :: 3.8
|
||||
Programming Language :: Python :: 3.9
|
||||
|
||||
[files]
|
||||
packages =
|
||||
@@ -455,17 +454,3 @@ neutron.cli.v2 =
|
||||
vpn-ikepolicy-create = neutronclient.neutron.v2_0.vpn.ikepolicy:CreateIKEPolicy
|
||||
vpn-ikepolicy-update = neutronclient.neutron.v2_0.vpn.ikepolicy:UpdateIKEPolicy
|
||||
vpn-ikepolicy-delete = neutronclient.neutron.v2_0.vpn.ikepolicy:DeleteIKEPolicy
|
||||
|
||||
[extract_messages]
|
||||
keywords = _ gettext ngettext l_ lazy_gettext
|
||||
mapping_file = babel.cfg
|
||||
output_file = neutronclient/locale/neutronclient.pot
|
||||
|
||||
[compile_catalog]
|
||||
directory = neutronclient/locale
|
||||
domain = neutronclient
|
||||
|
||||
[update_catalog]
|
||||
domain = neutronclient
|
||||
output_dir = neutronclient/locale
|
||||
input_file = neutronclient/locale/neutronclient.pot
|
||||
|
||||
29
tox.ini
29
tox.ini
@@ -1,6 +1,6 @@
|
||||
[tox]
|
||||
envlist = py38,pep8
|
||||
minversion = 2.3.2
|
||||
envlist = py39,pep8
|
||||
minversion = 3.18.0
|
||||
skipsdist = True
|
||||
ignore_basepython_conflict = True
|
||||
|
||||
@@ -13,7 +13,7 @@ setenv = VIRTUAL_ENV={envdir}
|
||||
PYTHONWARNINGS=default::DeprecationWarning
|
||||
usedevelop = True
|
||||
install_command = pip install {opts} {packages}
|
||||
deps = -c{env:UPPER_CONSTRAINTS_FILE:https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt}
|
||||
deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
|
||||
-r{toxinidir}/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
# Delete bytecodes from normal directories before running tests.
|
||||
@@ -23,7 +23,7 @@ commands = sh -c "find . -type d -name '.?*' -prune -o \
|
||||
\( -type d -name '__pycache__' -o -type f -name '*.py[co]' \) \
|
||||
-print0 | xargs -0 rm -rf"
|
||||
stestr run {posargs}
|
||||
whitelist_externals = sh
|
||||
allowlist_externals = sh
|
||||
|
||||
[testenv:pep8]
|
||||
commands =
|
||||
@@ -51,20 +51,24 @@ commands =
|
||||
coverage report
|
||||
|
||||
[testenv:docs]
|
||||
deps = -r{toxinidir}/doc/requirements.txt
|
||||
deps =
|
||||
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
|
||||
-r{toxinidir}/doc/requirements.txt
|
||||
commands = sphinx-build -W -b html doc/source doc/build/html
|
||||
|
||||
[testenv:pdf-docs]
|
||||
envdir = {toxworkdir}/docs
|
||||
deps = {[testenv:docs]deps}
|
||||
whitelist_externals =
|
||||
allowlist_externals =
|
||||
make
|
||||
commands =
|
||||
sphinx-build -W -b latex doc/source doc/build/pdf
|
||||
make -C doc/build/pdf
|
||||
|
||||
[testenv:releasenotes]
|
||||
deps = -r{toxinidir}/doc/requirements.txt
|
||||
deps =
|
||||
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
|
||||
-r{toxinidir}/doc/requirements.txt
|
||||
commands = sphinx-build -a -E -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
|
||||
|
||||
[flake8]
|
||||
@@ -77,11 +81,8 @@ enable-extensions=H904
|
||||
|
||||
[testenv:bandit]
|
||||
# B303: blacklist calls: md5, sha1
|
||||
# B105: The software contains a hard-coded password, which it uses for its own
|
||||
# inbound authentication or for outbound communication to external
|
||||
# components.
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
commands = bandit -r neutronclient -x tests -n5 -s B303
|
||||
|
||||
[testenv:lower-constraints]
|
||||
deps =
|
||||
-c{toxinidir}/lower-constraints.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
-r{toxinidir}/requirements.txt
|
||||
commands = bandit -r neutronclient -x tests -n5 -s B303,B105
|
||||
|
||||
Reference in New Issue
Block a user