Compare commits

...

23 Commits

Author SHA1 Message Date
Bernard Cafarelli
c4d823cbcc Dropping lower constraints testing (stable Xena)
This topic was discussed on the ML and QA team proposed to
to test lower-constraints [1].

As decided in Neutron meeting, stable branches will drop this
CI job [2].

[1]http://lists.openstack.org/pipermail/openstack-discuss/2020-December/019390.html
[2]http://eavesdrop.openstack.org/meetings/networking/2021/networking.2021-01-12-14.00.log.html

To pass gates, this squashes the PEP8 fix from Change-Id
I8e58da2d88d727018c8d5af5949e34f8c0893c1f:

Skip B105 pep8 error: hardcoded passwords

Skip B105 pep8 error:
* https://bandit.readthedocs.io/en/latest/plugins/b105_hardcoded_password_string.html
* https://cwe.mitre.org/data/definitions/259.html

Trivial-Fix

(cherry picked from commit 28628e8f96)

Change-Id: Id2da075b367281bb5081333e37e472f1e8921e44
2022-03-07 15:25:34 +01:00
1e8f0cdae8 Update TOX_CONSTRAINTS_FILE for stable/xena
Update the URL to the upper-constraints file to point to the redirect
rule on releases.openstack.org so that anyone working on this branch
will switch to the correct upper-constraints list automatically when
the requirements repository branches.

Until the requirements repository has as stable/xena branch, tests will
continue to use the upper-constraints list on master.

Change-Id: I837de509972162b79c4e32f2c2d9cf3173ba7969
2021-09-10 14:32:55 +00:00
8adfc9d1e5 Update .gitreview for stable/xena
Change-Id: I4f8b7e11292dd941463914ebbbc22757f596168f
2021-09-10 14:32:53 +00:00
Zuul
983f0abc58 Merge "Use yaml.safe_load instead of yaml.load" 2021-09-02 02:27:46 +00:00
Takashi Kajinami
f83108d858 Use yaml.safe_load instead of yaml.load
Since PyYAML 5.1, yaml.load without specifying the Loader option is
deprecated and shows the following warning.

YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated,
as the default Loader is unsafe.
Please read https://msg.pyyaml.org/load for full details.

This change replaces usage of yaml.load by yaml.safe_load, to get rid
of that warning message.

Change-Id: Ibe25c4aaf3aa7226f28ec60b8a929ecc143face1
2021-09-01 17:53:41 +09:00
Zuul
e647baf4ca Merge "Ussuri+ is python3 only and update python to python3" 2021-09-01 07:43:35 +00:00
Bernard Cafarelli
2f047b1595 Set ML2/OVS backend explicitly for functional job
After default backend change to OVN, some client tests related to DHCP
or L3 agents are not working fine. Switch the job to ML2/OVS, as it was
done in openstack-client in changeset
Idf6466a59c6cf96be2f1d53e696f0564584fa233

test_neutron_dhcp_agent_list_hosting_net was skipped temporarily
to pass the gate in the parent commit. It is re-enabled now.

Change-Id: I91d03d13adcd38d46ba1b042239a290ae2c99ea4
Closes-Bug: #1936965
2021-07-27 15:29:10 +09:00
elajkat
23fb666f92 tests: change safe_hasattr to hasattr
testtools 2.5.0 removed the helper (see [0]) safe_hasattr, and assumes
that the hasattr implementation in python reliable enough now.

test_neutron_dhcp_agent_list_hosting_net is skipped temporarily
as there is no DHCP agent with ML2/OVN. It will be re-enabled [1].

[0] https://github.com/testing-cabal/testtools/blob/2.5.0/NEWS#L31
[1] https://review.opendev.org/c/openstack/python-neutronclient/+/801997

Change-Id: I4fe6fabc4f745e2c9a366e30dbea7e7200151f12
2021-07-27 14:56:36 +09:00
dengzhaosen
a1ebfaa7f2 Ussuri+ is python3 only and update python to python3
To remove the useless shebang

Change-Id: I611c5bc47562f8def9a8623117b7b0655474b555
2021-06-24 01:43:09 +00:00
Zuul
adf21f0288 Merge "Changed minversion in tox to 3.18.0" 2021-06-21 18:51:17 +00:00
Akihiro Motoki
ae397565be Add a release note on deprecation for removal of neutron CLI
Change-Id: I866ade23cd76cf1e44e10eeb15dcc02cc8d0dc66
2021-06-09 14:39:43 +09:00
wu.shiming
d6c211c139 Changed minversion in tox to 3.18.0
The patch bumps min version of tox to 3.18.0 in order to
replace tox's whitelist_externals by allowlist_externals option:
https://github.com/tox-dev/tox/blob/master/docs/changelog.rst#v3180-2020-07-23

Change-Id: I83717c5b2661df0d4288699903c38814cefb43d9
2021-06-03 07:00:38 +00:00
Slawek Kaplonski
76dd26f9fd Set when deprecated neutron client CLI will be removed
[1] was the last missing bit in OSC to have feature parity between
OpenStack client and Neutronclient CLI tools.
So now as [1] is merged we can really deprecate and specify that in Z
cycle we will remove neutronclient CLI.
This patch changes deprecation message to reflect that.

[1] https://review.opendev.org/c/openstack/python-openstackclient/+/768210

Change-Id: Ia68af29ea15bda7330fda1b18416798a0f4cb7a4
2021-05-27 12:09:32 +00:00
Slawek Kaplonski
439e290e95 Skip metering functional tests when metering extension is not enabled
Change-Id: I9e3f41a2be56c1fd5fc3aff9af8e5ff5163087bd
2021-05-27 14:07:21 +02:00
likui
10227b681f setup.cfg: Replace dashes with underscores
Setuptools v54.1.0 introduces a warning that the use of
dash-separated options in 'setup.cfg' will not be supported
in a future version [1].
Get ahead of the issue by replacing the dashes with underscores.
Without this, we see 'UserWarning' messages
like the following on new enough
versions of setuptools:

  UserWarning: Usage of dash-separated 'description-file' will not be
  supported in future versions. Please use the underscore name
  'description_file' instead

[1] https://github.com/pypa/setuptools/commit/a2e9ae4cb

Change-Id: I56804844c7438d7a5bffaaa363b9e3d79850c5c2
2021-05-11 17:43:33 +08:00
likui
2c2a1f4de7 Replace getargspec with getfullargspec
inspect.getargspec() is deprecated since py3

[1] https://docs.python.org/3/library/inspect.html#inspect.getargspec

Change-Id: I2ae460a7a7f01d7346d5e51ec6ccb44c22d0c53e
2021-05-10 18:09:17 +08:00
Zuul
f6d147e031 Merge "Support passing mTLS certificate/key to HTTPClient" 2021-03-26 19:51:12 +00:00
Zuul
7a1dca4131 Merge "Add Python3 xena unit tests" 2021-03-24 14:30:45 +00:00
Zuul
26ab1b1d0c Merge "Update master for stable/wallaby" 2021-03-24 08:32:47 +00:00
Elod Illes
d87683b59b Fix lower constraints
This patch updates lower-constraints.txt to eliminate contradictions.

keystoneauth1 lower constraint has to be bumped in requirements.txt as
another dependency, openstacksdk 0.15.0 depends on keystoneauth1>=3.8.0

dogpile.cache version bumped to 0.6.5 as older version had 'async' as
variable name which gives SyntaxError from py37.

Change-Id: I31464518cb7f76c0fa5275a4ef52b2a6b634cfa3
2021-03-19 14:01:54 +01:00
f3756a3d4a Add Python3 xena unit tests
This is an automatically generated patch to ensure unit testing
is in place for all the of the tested runtimes for xena.

See also the PTI in governance [1].

[1]: https://governance.openstack.org/tc/reference/project-testing-interface.html

Change-Id: I8475c835838bbd0d84540cef879b4769581ef06d
2021-03-18 12:56:37 +00:00
12373768da Update master for stable/wallaby
Add file to the reno documentation build to show release notes for
stable/wallaby.

Use pbr instruction to increment the minor version number
automatically so that master versions are higher than the versions on
stable/wallaby.

Sem-Ver: feature
Change-Id: I91d4355bb94ac18a80ff215796cd403be870986a
2021-03-18 12:56:13 +00:00
sri harsha mekala
3140fe014a Support passing mTLS certificate/key to HTTPClient
Change-Id: I00065293daf6b2e5d540e056c05f85b82f8bc72c
2021-03-05 11:48:03 -08:00
21 changed files with 93 additions and 43 deletions

View File

@@ -2,3 +2,4 @@
host=review.opendev.org
port=29418
project=openstack/python-neutronclient.git
defaultbranch=stable/xena

View File

@@ -1,8 +1,7 @@
- project:
templates:
- openstack-cover-jobs
- openstack-lower-constraints-jobs
- openstack-python3-wallaby-jobs
- openstack-python3-xena-jobs
- publish-openstack-docs-pti
- check-requirements
- lib-forward-testing-python3
@@ -38,9 +37,31 @@
# 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-vpnaas: https://opendev.org/openstack/neutron-vpnaas

View File

@@ -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.

View File

@@ -14,18 +14,18 @@ debtcollector==1.2.0
decorator==3.4.0
deprecation==1.0
docutils==0.11
dogpile.cache==0.6.2
dogpile.cache==0.6.5
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
flake8==3.6.0
future==0.16.0
futurist==1.2.0
greenlet==0.4.10
hacking==1.1.0
hacking==3.0.1
idna==2.6
imagesize==0.7.1
iso8601==0.1.11
@@ -34,21 +34,21 @@ jmespath==0.9.0
jsonpatch==1.16
jsonpointer==1.13
jsonschema==2.6.0
keystoneauth1==3.4.0
keystoneauth1==3.8.0
kombu==4.0.0
linecache2==1.0.0
MarkupSafe==1.0
mccabe==0.2.1
mccabe==0.6.0
monotonic==0.6
msgpack-python==0.4.0
munch==2.1.0
netaddr==0.7.18
netifaces==0.10.4
openstacksdk==0.11.2
openstacksdk==0.15.0
os-client-config==1.28.0
os-service-types==1.2.0
osc-lib==1.12.0
oslo.concurrency==3.25.0
oslo.concurrency==3.26.0
oslo.config==5.2.0
oslo.context==2.19.2
oslo.i18n==3.15.3
@@ -69,9 +69,9 @@ pika==0.10.0
positional==1.2.1
prettytable==0.7.2
pyasn1==0.1.8
pycodestyle==2.3.1
pycodestyle==2.4.0
pycparser==2.18
pyflakes==0.8.1
pyflakes==2.0.0
Pygments==2.2.0
pyinotify==0.9.6
pyOpenSSL==17.1.0
@@ -86,7 +86,7 @@ python-novaclient==9.1.0
python-openstackclient==3.12.0
python-subunit==1.0.0
pytz==2013.6
PyYAML==3.13
PyYAML==5.3.1
repoze.lru==0.7
requests-mock==1.2.0
requests==2.14.2
@@ -97,7 +97,7 @@ simplejson==3.5.1
snowballstemmer==1.2.1
statsd==3.2.1
stestr==2.0.0
stevedore==1.20.0
stevedore==2.0.1
tempest==17.1.0
tenacity==3.2.1
testscenarios==0.4

View File

@@ -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)

View File

@@ -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:

View File

@@ -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

View File

@@ -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):

View File

@@ -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])

View File

@@ -1,4 +1,3 @@
#!/usr/bin/env python
# Copyright 2012 Red Hat
# All Rights Reserved.
#

View File

@@ -1,4 +1,3 @@
#!/usr/bin/env python
# Copyright 2012 Red Hat
# All Rights Reserved.
#

View File

@@ -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)

View File

@@ -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)

View File

@@ -1,4 +1,3 @@
#!/usr/bin/env python
# Copyright (C) 2013 Yahoo! Inc.
# All Rights Reserved.
#

View File

@@ -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).

View File

@@ -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.

View File

@@ -6,6 +6,7 @@
:maxdepth: 1
unreleased
wallaby
victoria
ussuri
train

View File

@@ -0,0 +1,6 @@
============================
Wallaby Series Release Notes
============================
.. release-notes::
:branch: stable/wallaby

View File

@@ -12,7 +12,7 @@ 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

View File

@@ -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.6
classifier =
Environment :: OpenStack
Intended Audience :: Developers

17
tox.ini
View File

@@ -1,6 +1,6 @@
[tox]
envlist = py38,pep8
minversion = 2.3.2
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:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/xena}
-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 =
@@ -52,14 +52,14 @@ commands =
[testenv:docs]
deps =
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/xena}
-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
@@ -67,7 +67,7 @@ commands =
[testenv:releasenotes]
deps =
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}
-c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/xena}
-r{toxinidir}/doc/requirements.txt
commands = sphinx-build -a -E -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
@@ -81,8 +81,11 @@ 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
commands = bandit -r neutronclient -x tests -n5 -s B303,B105
[testenv:lower-constraints]
deps =