From 7f84237263a31e8a3e14fdb55e4be83e54dcc8d5 Mon Sep 17 00:00:00 2001 From: Anusha Ramineni <anusha.ramineni@nectechnologies.in> Date: Wed, 23 Aug 2017 15:57:20 +0530 Subject: [PATCH] Add command to list pod managers 'openstack valence podmanager list' is added to list the podmanagers created by valence. Change-Id: Ifc9df95c525383abfcc85deaaf6b275ed82faa86 --- setup.cfg | 9 +++- valenceclient/__init__.py | 19 -------- valenceclient/osc/__init__.py | 0 valenceclient/osc/plugin.py | 70 ++++++++++++++++++++++++++++++ valenceclient/osc/v1/__init__.py | 0 valenceclient/osc/v1/podmanager.py | 34 +++++++++++++++ valenceclient/v1/__init__.py | 0 valenceclient/v1/client.py | 28 ++++++++++++ 8 files changed, 140 insertions(+), 20 deletions(-) create mode 100644 valenceclient/osc/__init__.py create mode 100644 valenceclient/osc/plugin.py create mode 100644 valenceclient/osc/v1/__init__.py create mode 100644 valenceclient/osc/v1/podmanager.py create mode 100644 valenceclient/v1/__init__.py create mode 100644 valenceclient/v1/client.py diff --git a/setup.cfg b/setup.cfg index ae19583..d4ec165 100644 --- a/setup.cfg +++ b/setup.cfg @@ -23,6 +23,13 @@ classifier = packages = valenceclient +[entry_points] +openstack.cli.extension = + valence = valenceclient.osc.plugin + +openstack.valence.v1 = + valence_podmanager_list = valenceclient.osc.v1.podmanager:ListPodManagers + [build_sphinx] source-dir = doc/source build-dir = doc/build @@ -48,4 +55,4 @@ output_file = valenceclient/locale/valenceclient.pot [build_releasenotes] all_files = 1 build-dir = releasenotes/build -source-dir = releasenotes/source \ No newline at end of file +source-dir = releasenotes/source diff --git a/valenceclient/__init__.py b/valenceclient/__init__.py index 1570ea4..e69de29 100644 --- a/valenceclient/__init__.py +++ b/valenceclient/__init__.py @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- - -# 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 pbr.version - - -__version__ = pbr.version.VersionInfo( - 'valenceclient').version_string() diff --git a/valenceclient/osc/__init__.py b/valenceclient/osc/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/valenceclient/osc/plugin.py b/valenceclient/osc/plugin.py new file mode 100644 index 0000000..c2cf338 --- /dev/null +++ b/valenceclient/osc/plugin.py @@ -0,0 +1,70 @@ +# Copyright 2017 NEC, Corp. +# +# 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. +# + +"""OpenStackClient plugin for Valence Client.""" + +import logging + +from osc_lib import utils + +LOG = logging.getLogger(__name__) + +DEFAULT_API_VERSION = '1' +API_VERSION_OPTION = 'os_valence_api_version' +API_NAME = 'valence' +API_VERSIONS = { + '1': 'valenceclient.v1.client.Client', +} + + +def make_client(instance): + """Returns a valence v1 client.""" + valence_client = utils.get_client_class(API_NAME, + instance._api_version[API_NAME], + API_VERSIONS) + + LOG.debug('Instantiating Valence client: %s', valence_client) + + client = valence_client( + valence_api_version=instance._cli_options.valence_api_version, + valence_url=instance._cli_options.valence_api_url, + auth_type=instance._cli_options.valence_auth_type, + os_cloud='openstack') + return client + + +def build_option_parser(parser): + """Hook to add global options""" + + parser.add_argument( + '--valence-api-version', + metavar='<valence-api-version>', + default=utils.env( + 'VALENCE_API_VERSION', + default=DEFAULT_API_VERSION), + help='VALENCE API version, default=' + + DEFAULT_API_VERSION + + ' (Env: VALENCE_API_VERSION)') + parser.add_argument( + '--valence-api-url', + metavar='<valence-api-url>', + default='http://localhost:8181/', + help='The base URL to Valence Server') + parser.add_argument( + '--valence-auth-type', + metavar='<auth-type>', + default='none', + help='Authentication type, default is none') + return parser diff --git a/valenceclient/osc/v1/__init__.py b/valenceclient/osc/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/valenceclient/osc/v1/podmanager.py b/valenceclient/osc/v1/podmanager.py new file mode 100644 index 0000000..b749f53 --- /dev/null +++ b/valenceclient/osc/v1/podmanager.py @@ -0,0 +1,34 @@ +# Copyright 2017 Intel, Inc. +# +# 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. +# + +from osc_lib.command import command +from osc_lib import utils + + +class ListPodManagers(command.Lister): + _description = "Lists all registered podmanagers" + auth_required = False + + def get_parser(self, prog_name): + parser = super(ListPodManagers, self).get_parser(prog_name) + return parser + + def take_action(self, parsed_args): + self.log.debug("take_action(%s)", parsed_args) + client = self.app.client_manager.valence + obj = client.list_podmanagers() + columns = ['uuid', 'name', 'url', 'driver', 'status', 'created_at', + 'updated_at'] + return (columns, (utils.get_dict_properties(s, columns) for s in obj)) diff --git a/valenceclient/v1/__init__.py b/valenceclient/v1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/valenceclient/v1/client.py b/valenceclient/v1/client.py new file mode 100644 index 0000000..84fd0eb --- /dev/null +++ b/valenceclient/v1/client.py @@ -0,0 +1,28 @@ +# Copyright 2017 Intel, Inc. +# +# 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. +# + +from valenceclient.common import http + + +class Client(object): + + podmanager_path = "/v1/pod_managers" + + def __init__(self, **kwargs): + self.http_client = http.HTTPClient(**kwargs) + + def list_podmanagers(self): + resp, body = self.http_client.json_request('get', self.podmanager_path) + return body