From b860ba0e42b942a1a5fb01b55d35a2edf062bf65 Mon Sep 17 00:00:00 2001
From: Huanxuan Ao <huanxuan.ao@easystack.cn>
Date: Sat, 14 Jan 2017 19:13:04 +0800
Subject: [PATCH] SDK refactor: Prepare network agent commands

Prepare the OSC "network agent" commands for the SDK refactor.

Partially-Implements: blueprint network-command-sdk-support
Closes-bug: #1656542
Change-Id: I6745f5ffb04b009487e6cb36d1807dce9b248b4c
---
 openstackclient/network/v2/network_agent.py   | 24 +++++++++++++++----
 .../tests/unit/network/v2/fakes.py            |  2 ++
 .../unit/network/v2/test_network_agent.py     |  2 ++
 3 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/openstackclient/network/v2/network_agent.py b/openstackclient/network/v2/network_agent.py
index 7d36e5e9f0..d429fa0830 100644
--- a/openstackclient/network/v2/network_agent.py
+++ b/openstackclient/network/v2/network_agent.py
@@ -20,6 +20,7 @@ from osc_lib import exceptions
 from osc_lib import utils
 
 from openstackclient.i18n import _
+from openstackclient.network import sdk_utils
 
 
 LOG = logging.getLogger(__name__)
@@ -31,10 +32,19 @@ def _format_admin_state(state):
 
 _formatters = {
     'admin_state_up': _format_admin_state,
+    'is_admin_state_up': _format_admin_state,
     'configurations': utils.format_dict,
 }
 
 
+def _get_network_columns(item):
+    column_map = {
+        'is_admin_state_up': 'admin_state_up',
+        'is_alive': 'alive',
+    }
+    return sdk_utils.get_osc_show_columns_for_sdk_resource(item, column_map)
+
+
 class DeleteNetworkAgent(command.Command):
     _description = _("Delete network agent(s)")
 
@@ -69,6 +79,8 @@ class DeleteNetworkAgent(command.Command):
             raise exceptions.CommandError(msg)
 
 
+# TODO(huanxuan): Use the SDK resource mapped attribute names once the
+# OSC minimum requirements include SDK 1.0.
 class ListNetworkAgent(command.Lister):
     _description = _("List network agents")
 
@@ -98,8 +110,8 @@ class ListNetworkAgent(command.Lister):
             'agent_type',
             'host',
             'availability_zone',
-            'alive',
-            'admin_state_up',
+            'is_alive',
+            'is_admin_state_up',
             'binary'
         )
         column_headers = (
@@ -138,6 +150,8 @@ class ListNetworkAgent(command.Lister):
                 ) for s in data))
 
 
+# TODO(huanxuan): Use the SDK resource mapped attribute names once the
+# OSC minimum requirements include SDK 1.0.
 class SetNetworkAgent(command.Command):
     _description = _("Set network agent properties")
 
@@ -172,6 +186,8 @@ class SetNetworkAgent(command.Command):
         attrs = {}
         if parsed_args.description is not None:
             attrs['description'] = str(parsed_args.description)
+        # TODO(huanxuan): Also update by the new attribute name
+        # "is_admin_state_up" after sdk 0.9.12
         if parsed_args.enable:
             attrs['admin_state_up'] = True
         if parsed_args.disable:
@@ -194,6 +210,6 @@ class ShowNetworkAgent(command.ShowOne):
     def take_action(self, parsed_args):
         client = self.app.client_manager.network
         obj = client.get_agent(parsed_args.network_agent)
-        columns = tuple(sorted(list(obj.keys())))
+        display_columns, columns = _get_network_columns(obj)
         data = utils.get_item_properties(obj, columns, formatters=_formatters,)
-        return columns, data
+        return display_columns, data
diff --git a/openstackclient/tests/unit/network/v2/fakes.py b/openstackclient/tests/unit/network/v2/fakes.py
index 98d5dea37b..524285ab18 100644
--- a/openstackclient/tests/unit/network/v2/fakes.py
+++ b/openstackclient/tests/unit/network/v2/fakes.py
@@ -565,6 +565,8 @@ class FakeNetworkAgent(object):
         agent_attrs.update(attrs)
         agent = fakes.FakeResource(info=copy.deepcopy(agent_attrs),
                                    loaded=True)
+        agent.is_admin_state_up = agent_attrs['admin_state_up']
+        agent.is_alive = agent_attrs['alive']
         return agent
 
     @staticmethod
diff --git a/openstackclient/tests/unit/network/v2/test_network_agent.py b/openstackclient/tests/unit/network/v2/test_network_agent.py
index 9964f14da5..2fc0c04328 100644
--- a/openstackclient/tests/unit/network/v2/test_network_agent.py
+++ b/openstackclient/tests/unit/network/v2/test_network_agent.py
@@ -195,6 +195,8 @@ class TestListNetworkAgent(TestNetworkAgent):
         self.assertEqual(self.data, list(data))
 
 
+# TODO(huanxuan): Also update by the new attribute name
+# "is_admin_state_up" after sdk 0.9.12
 class TestSetNetworkAgent(TestNetworkAgent):
 
     _network_agent = (