summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Martinelli <stevemar@ca.ibm.com>2015-09-11 00:38:56 -0500
committerSteve Martinelli <stevemar@ca.ibm.com>2015-10-06 00:52:24 -0400
commite48c7afee4d92f2dd37bb537d25f0f671cef1568 (patch)
tree0a4ba480fb0f02fe078202ccab8a8e8e523b1f90
parentabaf711e249c36b5fe75439691609c09fb9ef141 (diff)
downloadpython-openstackclient-e48c7afee4d92f2dd37bb537d25f0f671cef1568.tar.gz
add set/unset support for objects in object store
add docs and command support to set and unset metadata of objects that are stored in an object store (swift). Closes-Bug: #1501945 Change-Id: If838a4b3343b6ddb97cd4bd1cb63f0ba1c1a00a1
-rw-r--r--doc/source/command-objects/object.rst50
-rw-r--r--openstackclient/api/object_store_v1.py40
-rw-r--r--openstackclient/object/v1/object.py74
-rw-r--r--setup.cfg2
4 files changed, 166 insertions, 0 deletions
diff --git a/doc/source/command-objects/object.rst b/doc/source/command-objects/object.rst
index 90bcfa1c..a9c4049b 100644
--- a/doc/source/command-objects/object.rst
+++ b/doc/source/command-objects/object.rst
@@ -119,6 +119,31 @@ Save object locally
Object to save
+object set
+----------
+
+Set object properties
+
+.. program:: object set
+.. code:: bash
+
+ os object set
+ <container>
+ [<object>]
+ [--property <key=value> [...] ]
+
+.. describe:: <container>
+
+ Modify <object> from <container>
+
+.. describe:: <object>
+
+ Object to modify
+
+.. option:: --property <key=value>
+
+ Set a property on this object (repeat option to set multiple properties)
+
object show
-----------
@@ -138,3 +163,28 @@ Display object details
.. describe:: <object>
Object to display
+
+object unset
+------------
+
+Unset object properties
+
+.. program:: object unset
+.. code:: bash
+
+ os object unset
+ <container>
+ [<object>]
+ [--property <key>]
+
+.. describe:: <container>
+
+ Modify <object> from <container>
+
+.. describe:: <object>
+
+ Object to modify
+
+.. option:: --property <key>
+
+ Property to remove from object (repeat option to remove multiple properties)
diff --git a/openstackclient/api/object_store_v1.py b/openstackclient/api/object_store_v1.py
index b47f556b..c870332a 100644
--- a/openstackclient/api/object_store_v1.py
+++ b/openstackclient/api/object_store_v1.py
@@ -366,6 +366,46 @@ class APIv1(api.BaseAPI):
for chunk in response.iter_content():
f.write(chunk)
+ def object_set(
+ self,
+ container,
+ object,
+ properties,
+ ):
+ """Set object properties
+
+ :param string container:
+ container name for object to modify
+ :param string object:
+ name of object to modify
+ :param dict properties:
+ properties to add or update for the container
+ """
+
+ headers = self._set_properties(properties, 'X-Object-Meta-%s')
+ if headers:
+ self.create("%s/%s" % (container, object), headers=headers)
+
+ def object_unset(
+ self,
+ container,
+ object,
+ properties,
+ ):
+ """Unset object properties
+
+ :param string container:
+ container name for object to modify
+ :param string object:
+ name of object to modify
+ :param dict properties:
+ properties to remove from the object
+ """
+
+ headers = self._unset_properties(properties, 'X-Remove-Object-Meta-%s')
+ if headers:
+ self.create("%s/%s" % (container, object), headers=headers)
+
def object_show(
self,
container=None,
diff --git a/openstackclient/object/v1/object.py b/openstackclient/object/v1/object.py
index c90f0319..a023e3a0 100644
--- a/openstackclient/object/v1/object.py
+++ b/openstackclient/object/v1/object.py
@@ -23,6 +23,7 @@ from cliff import command
from cliff import lister
from cliff import show
+from openstackclient.common import parseractions
from openstackclient.common import utils
@@ -221,6 +222,42 @@ class SaveObject(command.Command):
)
+class SetObject(command.Command):
+ """Set object properties"""
+
+ log = logging.getLogger(__name__ + '.SetObject')
+
+ def get_parser(self, prog_name):
+ parser = super(SetObject, self).get_parser(prog_name)
+ parser.add_argument(
+ 'container',
+ metavar='<container>',
+ help='Modify <object> from <container>',
+ )
+ parser.add_argument(
+ 'object',
+ metavar='<object>',
+ help='Object to modify',
+ )
+ parser.add_argument(
+ "--property",
+ metavar="<key=value>",
+ required=True,
+ action=parseractions.KeyValueAction,
+ help="Set a property on this object "
+ "(repeat option to set multiple properties)"
+ )
+ return parser
+
+ @utils.log_method(log)
+ def take_action(self, parsed_args):
+ self.app.client_manager.object_store.object_set(
+ parsed_args.container,
+ parsed_args.object,
+ properties=parsed_args.property,
+ )
+
+
class ShowObject(show.ShowOne):
"""Display object details"""
@@ -249,3 +286,40 @@ class ShowObject(show.ShowOne):
)
return zip(*sorted(six.iteritems(data)))
+
+
+class UnsetObject(command.Command):
+ """Unset object properties"""
+
+ log = logging.getLogger(__name__ + '.UnsetObject')
+
+ def get_parser(self, prog_name):
+ parser = super(UnsetObject, self).get_parser(prog_name)
+ parser.add_argument(
+ 'container',
+ metavar='<container>',
+ help='Modify <object> from <container>',
+ )
+ parser.add_argument(
+ 'object',
+ metavar='<object>',
+ help='Object to modify',
+ )
+ parser.add_argument(
+ '--property',
+ metavar='<key>',
+ required=True,
+ action='append',
+ default=[],
+ help='Property to remove from object '
+ '(repeat option to remove multiple properties)',
+ )
+ return parser
+
+ @utils.log_method(log)
+ def take_action(self, parsed_args):
+ self.app.client_manager.object_store.object_unset(
+ parsed_args.container,
+ parsed_args.object,
+ properties=parsed_args.property,
+ )
diff --git a/setup.cfg b/setup.cfg
index 248c9c66..7265eb88 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -346,7 +346,9 @@ openstack.object_store.v1 =
object_delete = openstackclient.object.v1.object:DeleteObject
object_list = openstackclient.object.v1.object:ListObject
object_save = openstackclient.object.v1.object:SaveObject
+ object_set = openstackclient.object.v1.object:SetObject
object_show = openstackclient.object.v1.object:ShowObject
+ object_unset = openstackclient.object.v1.object:UnsetObject
openstack.volume.v1 =
backup_create = openstackclient.volume.v1.backup:CreateBackup