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