diff --git a/neutronclient/osc/__init__.py b/neutronclient/osc/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutronclient/osc/plugin.py b/neutronclient/osc/plugin.py new file mode 100644 index 000000000..1efb6c5f7 --- /dev/null +++ b/neutronclient/osc/plugin.py @@ -0,0 +1,61 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +import logging + +# TODO(rtheis/amotoki): Add functional test infrastructure for OSC +# plugin commands. +# TODO(amotoki): Add and update document on OSC pluign. + +from osc_lib import utils + +LOG = logging.getLogger(__name__) + +DEFAULT_API_VERSION = '2.0' +API_VERSION_OPTION = 'os_network_api_version' +# NOTE(rtheis): API_NAME must NOT be set to 'network' since +# 'network' is owned by OSC! The OSC 'network' client uses +# the OpenStack SDK. +API_NAME = 'neutronclient' +API_VERSIONS = { + '2.0': 'neutronclient.v2_0.client.Client', + '2': 'neutronclient.v2_0.client.Client', +} + + +def make_client(instance): + """Returns an neutron client.""" + neutron_client = utils.get_client_class( + API_NAME, + instance._api_version[API_NAME], + API_VERSIONS) + LOG.debug('Instantiating neutron client: %s', neutron_client) + + # TODO(amotoki): Check the following arguments need to be passed + # to neutronclient class. Check keystoneauth code. + # - endpoint_type (do we need to specify it explicitly?) + # - auth (session object contains auth. Is it required?) + client = neutron_client(session=instance.session, + region_name=instance._region_name, + endpoint_type=instance._interface, + insecure=instance._insecure, + ca_cert=instance._cacert) + return client + + +def build_option_parser(parser): + """Hook to add global options""" + + # NOTE(amotoki): At now we register no option. + # OSC itself has an option for Network API version # and we refer to it. + return parser diff --git a/neutronclient/osc/v2/__init__.py b/neutronclient/osc/v2/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutronclient/osc/v2/dynamic_routing/__init__.py b/neutronclient/osc/v2/dynamic_routing/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutronclient/osc/v2/fwaas/__init__.py b/neutronclient/osc/v2/fwaas/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutronclient/osc/v2/lbaas/__init__.py b/neutronclient/osc/v2/lbaas/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutronclient/osc/v2/vpnaas/__init__.py b/neutronclient/osc/v2/vpnaas/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutronclient/tests/unit/osc/__init__.py b/neutronclient/tests/unit/osc/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutronclient/tests/unit/osc/v2/__init__.py b/neutronclient/tests/unit/osc/v2/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutronclient/tests/unit/osc/v2/dynamic_routing/__init__.py b/neutronclient/tests/unit/osc/v2/dynamic_routing/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutronclient/tests/unit/osc/v2/fakes.py b/neutronclient/tests/unit/osc/v2/fakes.py new file mode 100644 index 000000000..45f2b253b --- /dev/null +++ b/neutronclient/tests/unit/osc/v2/fakes.py @@ -0,0 +1,27 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +import argparse +import mock + +from openstackclient.tests import utils + + +class TestNeutronClientOSCV2(utils.TestCommand): + + def setUp(self): + super(TestNeutronClientOSCV2, self).setUp() + self.namespace = argparse.Namespace() + self.app.client_manager.session = mock.Mock() + self.app.client_manager.neutronclient = mock.Mock() + self.neutronclient = self.app.client_manager.neutronclient diff --git a/neutronclient/tests/unit/osc/v2/fwaas/__init__.py b/neutronclient/tests/unit/osc/v2/fwaas/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutronclient/tests/unit/osc/v2/lbaas/__init__.py b/neutronclient/tests/unit/osc/v2/lbaas/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/neutronclient/tests/unit/osc/v2/vpnaas/__init__.py b/neutronclient/tests/unit/osc/v2/vpnaas/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/requirements.txt b/requirements.txt index 84e3db43e..af9e0ddbd 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,6 +6,7 @@ cliff!=1.16.0,!=1.17.0,>=1.15.0 # Apache-2.0 debtcollector>=1.2.0 # Apache-2.0 iso8601>=0.1.11 # MIT netaddr!=0.7.16,>=0.7.12 # BSD +osc-lib>=0.1.0 # Apache-2.0 oslo.i18n>=2.1.0 # Apache-2.0 oslo.serialization>=1.10.0 # Apache-2.0 oslo.utils>=3.14.0 # Apache-2.0 diff --git a/setup.cfg b/setup.cfg index 2e4a3a6e8..89d31ec54 100644 --- a/setup.cfg +++ b/setup.cfg @@ -31,6 +31,11 @@ setup-hooks = console_scripts = neutron = neutronclient.shell:main +openstack.cli.extension = + neutronclient = neutronclient.osc.plugin + +openstack.neutronclient.v2 = + [build_sphinx] all_files = 1 build-dir = doc/build diff --git a/test-requirements.txt b/test-requirements.txt index 6b319581d..fa8057a94 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -10,6 +10,7 @@ mox3>=0.7.0 # Apache-2.0 mock>=2.0 # BSD oslosphinx!=3.4.0,>=2.5.0 # Apache-2.0 oslotest>=1.10.0 # Apache-2.0 +python-openstackclient>=2.1.0 # Apache-2.0 python-subunit>=0.0.18 # Apache-2.0/BSD reno>=1.8.0 # Apache2 requests-mock>=1.0 # Apache-2.0