From 6ebbd278cfcedc77402b66481762a2217953fa6e Mon Sep 17 00:00:00 2001
From: Dean Troyer <dtroyer@gmail.com>
Date: Wed, 31 Dec 2014 10:03:28 -0600
Subject: [PATCH] Command docs: add service

Co-Authored-By: Lin Hua Cheng <os.lcheng@gmail.com>

Change-Id: Icd39e6d769fd4c4797fcf4ef9eb97c71ed166b3b
Closes-Bug: #1404434
---
 doc/source/command-objects/service.rst   | 144 +++++++++++++++++++++++
 doc/source/commands.rst                  |   2 +-
 openstackclient/identity/v2_0/service.py |   6 +-
 openstackclient/identity/v3/service.py   |  32 +++--
 4 files changed, 170 insertions(+), 14 deletions(-)
 create mode 100644 doc/source/command-objects/service.rst

diff --git a/doc/source/command-objects/service.rst b/doc/source/command-objects/service.rst
new file mode 100644
index 0000000000..d4f63de883
--- /dev/null
+++ b/doc/source/command-objects/service.rst
@@ -0,0 +1,144 @@
+=======
+service
+=======
+
+Identity v2, v3
+
+service create
+--------------
+
+Create new service
+
+.. program:: service create
+.. code-block:: bash
+
+    os service create
+        [--name <name>]
+        [--description <description>]
+        [--enable | --disable]
+        <type>
+
+.. option:: --name <name>
+
+    New service name
+
+.. option:: --description <description>
+
+    New service description
+
+.. option:: --enable
+
+    Enable service (default)
+
+    *Identity version 3 only*
+
+.. option:: --disable
+
+    Disable service
+
+    *Identity version 3 only*
+
+.. _service_create-type:
+.. describe:: <type>
+
+    New service type (compute, image, identity, volume, etc)
+
+service delete
+--------------
+
+Delete service
+
+.. program:: service delete
+.. code-block:: bash
+
+    os service delete
+        <service>
+
+:option:`<service>`
+    Service to delete (type, name or ID)
+
+service list
+------------
+
+List services
+
+.. program:: service list
+.. code-block:: bash
+
+    os service list
+        [--long]
+
+.. option:: --long
+
+    List additional fields in output
+
+    *Identity version 2 only*
+
+Returns service fields ID and Name, `--long` adds Type and Description
+to the output.  When Identity API version 3 is selected all columns are
+always displayed, `--long` is silently accepted for backward-compatibility.
+
+service set
+-----------
+
+Set service properties
+
+* Identity version 3 only*
+
+.. program:: service set
+.. code-block:: bash
+
+    os service set
+        [--type <type>]
+        [--name <name>]
+        [--description <description>]
+        [--enable | --disable]
+        <service>
+
+.. option:: --type <type>
+
+    New service type (compute, image, identity, volume, etc)
+
+.. option:: --name <name>
+
+    New service name
+
+.. option:: --description <description>
+
+    New service description
+
+.. option:: --enable
+
+    Enable service
+
+.. option:: --disable
+
+    Disable service
+
+.. _service_set-service:
+.. describe:: <service>
+
+    Service to update (type, name or ID)
+
+service show
+------------
+
+Display service details
+
+.. program:: service show
+.. code-block:: bash
+
+    os service show
+        [--catalog]
+        <service>
+
+.. option:: --catalog
+
+    Show service catalog information
+
+    *Identity version 2 only*
+
+.. _service_show-service:
+.. describe:: <service>
+
+    Service to display (type, name or ID)
diff --git a/doc/source/commands.rst b/doc/source/commands.rst
index 3a7fdd231a..6fe91a1f76 100644
--- a/doc/source/commands.rst
+++ b/doc/source/commands.rst
@@ -109,7 +109,7 @@ referring to both Compute and Volume quotas.
 * ``security group rule``: Compute, Network - the individual rules that define protocol/IP/port access
 * ``server``: (**Compute**) virtual machine instance
 * ``server image``: (**Compute**) saved server disk image
-* ``service``: Identity - a cloud service
+* ``service``: (**Identity**) a cloud service
 * ``snapshot``: (**Volume**) a point-in-time copy of a volume
 * ``token``: (**Identity**) a bearer token managed by Identity service
 * ``usage``: (**Compute**) display host resources being consumed
diff --git a/openstackclient/identity/v2_0/service.py b/openstackclient/identity/v2_0/service.py
index 0b98a90360..208f7fbcee 100644
--- a/openstackclient/identity/v2_0/service.py
+++ b/openstackclient/identity/v2_0/service.py
@@ -44,7 +44,7 @@ class CreateService(show.ShowOne):
         type_or_name_group = parser.add_mutually_exclusive_group()
         type_or_name_group.add_argument(
             '--type',
-            metavar='<service-type>',
+            metavar='<type>',
             help=argparse.SUPPRESS,
         )
         type_or_name_group.add_argument(
@@ -54,7 +54,7 @@ class CreateService(show.ShowOne):
         )
         parser.add_argument(
             '--description',
-            metavar='<service-description>',
+            metavar='<description>',
             help=_('New service description'),
         )
         return parser
@@ -144,7 +144,7 @@ class ListService(lister.Lister):
 
 
 class ShowService(show.ShowOne):
-    """Show service details"""
+    """Display service details"""
 
     log = logging.getLogger(__name__ + '.ShowService')
 
diff --git a/openstackclient/identity/v3/service.py b/openstackclient/identity/v3/service.py
index f4c5d42629..126292538c 100644
--- a/openstackclient/identity/v3/service.py
+++ b/openstackclient/identity/v3/service.py
@@ -15,6 +15,7 @@
 
 """Identity v3 Service action implementations"""
 
+import argparse
 import logging
 import six
 
@@ -35,12 +36,12 @@ class CreateService(show.ShowOne):
         parser = super(CreateService, self).get_parser(prog_name)
         parser.add_argument(
             'type',
-            metavar='<service-type>',
+            metavar='<type>',
             help='New service type (compute, image, identity, volume, etc)',
         )
         parser.add_argument(
             '--name',
-            metavar='<service-name>',
+            metavar='<name>',
             help='New service name',
         )
         parser.add_argument(
@@ -52,12 +53,12 @@ class CreateService(show.ShowOne):
         enable_group.add_argument(
             '--enable',
             action='store_true',
-            help='Enable project',
+            help='Enable service (default)',
         )
         enable_group.add_argument(
             '--disable',
             action='store_true',
-            help='Disable project',
+            help='Disable service',
         )
         return parser
 
@@ -90,7 +91,7 @@ class DeleteService(command.Command):
         parser.add_argument(
             'service',
             metavar='<service>',
-            help='Service to delete (name or ID)',
+            help='Service to delete (type or ID)',
         )
         return parser
 
@@ -109,6 +110,17 @@ class ListService(lister.Lister):
 
     log = logging.getLogger(__name__ + '.ListService')
 
+    def get_parser(self, prog_name):
+        """The --long option is here for compatibility only."""
+        parser = super(ListService, self).get_parser(prog_name)
+        parser.add_argument(
+            '--long',
+            action='store_true',
+            default=False,
+            help=argparse.SUPPRESS,
+        )
+        return parser
+
     def take_action(self, parsed_args):
         self.log.debug('take_action(%s)', parsed_args)
 
@@ -131,11 +143,11 @@ class SetService(command.Command):
         parser.add_argument(
             'service',
             metavar='<service>',
-            help='Service to update (name or ID)',
+            help='Service to update (type, name or ID)',
         )
         parser.add_argument(
             '--type',
-            metavar='<service-type>',
+            metavar='<type>',
             help='New service type (compute, image, identity, volume, etc)',
         )
         parser.add_argument(
@@ -152,12 +164,12 @@ class SetService(command.Command):
         enable_group.add_argument(
             '--enable',
             action='store_true',
-            help='Enable project',
+            help='Enable service',
         )
         enable_group.add_argument(
             '--disable',
             action='store_true',
-            help='Disable project',
+            help='Disable service',
         )
         return parser
 
@@ -194,7 +206,7 @@ class SetService(command.Command):
 
 
 class ShowService(show.ShowOne):
-    """Show service details"""
+    """Display service details"""
 
     log = logging.getLogger(__name__ + '.ShowService')