Skip to content

Commit e48c7af

Browse files
author
Steve Martinelli
committed
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
1 parent abaf711 commit e48c7af

4 files changed

Lines changed: 166 additions & 0 deletions

File tree

doc/source/command-objects/object.rst

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,31 @@ Save object locally
119119

120120
Object to save
121121

122+
object set
123+
----------
124+
125+
Set object properties
126+
127+
.. program:: object set
128+
.. code:: bash
129+
130+
os object set
131+
<container>
132+
[<object>]
133+
[--property <key=value> [...] ]
134+
135+
.. describe:: <container>
136+
137+
Modify <object> from <container>
138+
139+
.. describe:: <object>
140+
141+
Object to modify
142+
143+
.. option:: --property <key=value>
144+
145+
Set a property on this object (repeat option to set multiple properties)
146+
122147
object show
123148
-----------
124149

@@ -138,3 +163,28 @@ Display object details
138163
.. describe:: <object>
139164

140165
Object to display
166+
167+
object unset
168+
------------
169+
170+
Unset object properties
171+
172+
.. program:: object unset
173+
.. code:: bash
174+
175+
os object unset
176+
<container>
177+
[<object>]
178+
[--property <key>]
179+
180+
.. describe:: <container>
181+
182+
Modify <object> from <container>
183+
184+
.. describe:: <object>
185+
186+
Object to modify
187+
188+
.. option:: --property <key>
189+
190+
Property to remove from object (repeat option to remove multiple properties)

openstackclient/api/object_store_v1.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,46 @@ def object_save(
366366
for chunk in response.iter_content():
367367
f.write(chunk)
368368

369+
def object_set(
370+
self,
371+
container,
372+
object,
373+
properties,
374+
):
375+
"""Set object properties
376+
377+
:param string container:
378+
container name for object to modify
379+
:param string object:
380+
name of object to modify
381+
:param dict properties:
382+
properties to add or update for the container
383+
"""
384+
385+
headers = self._set_properties(properties, 'X-Object-Meta-%s')
386+
if headers:
387+
self.create("%s/%s" % (container, object), headers=headers)
388+
389+
def object_unset(
390+
self,
391+
container,
392+
object,
393+
properties,
394+
):
395+
"""Unset object properties
396+
397+
:param string container:
398+
container name for object to modify
399+
:param string object:
400+
name of object to modify
401+
:param dict properties:
402+
properties to remove from the object
403+
"""
404+
405+
headers = self._unset_properties(properties, 'X-Remove-Object-Meta-%s')
406+
if headers:
407+
self.create("%s/%s" % (container, object), headers=headers)
408+
369409
def object_show(
370410
self,
371411
container=None,

openstackclient/object/v1/object.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
from cliff import lister
2424
from cliff import show
2525

26+
from openstackclient.common import parseractions
2627
from openstackclient.common import utils
2728

2829

@@ -221,6 +222,42 @@ def take_action(self, parsed_args):
221222
)
222223

223224

225+
class SetObject(command.Command):
226+
"""Set object properties"""
227+
228+
log = logging.getLogger(__name__ + '.SetObject')
229+
230+
def get_parser(self, prog_name):
231+
parser = super(SetObject, self).get_parser(prog_name)
232+
parser.add_argument(
233+
'container',
234+
metavar='<container>',
235+
help='Modify <object> from <container>',
236+
)
237+
parser.add_argument(
238+
'object',
239+
metavar='<object>',
240+
help='Object to modify',
241+
)
242+
parser.add_argument(
243+
"--property",
244+
metavar="<key=value>",
245+
required=True,
246+
action=parseractions.KeyValueAction,
247+
help="Set a property on this object "
248+
"(repeat option to set multiple properties)"
249+
)
250+
return parser
251+
252+
@utils.log_method(log)
253+
def take_action(self, parsed_args):
254+
self.app.client_manager.object_store.object_set(
255+
parsed_args.container,
256+
parsed_args.object,
257+
properties=parsed_args.property,
258+
)
259+
260+
224261
class ShowObject(show.ShowOne):
225262
"""Display object details"""
226263

@@ -249,3 +286,40 @@ def take_action(self, parsed_args):
249286
)
250287

251288
return zip(*sorted(six.iteritems(data)))
289+
290+
291+
class UnsetObject(command.Command):
292+
"""Unset object properties"""
293+
294+
log = logging.getLogger(__name__ + '.UnsetObject')
295+
296+
def get_parser(self, prog_name):
297+
parser = super(UnsetObject, self).get_parser(prog_name)
298+
parser.add_argument(
299+
'container',
300+
metavar='<container>',
301+
help='Modify <object> from <container>',
302+
)
303+
parser.add_argument(
304+
'object',
305+
metavar='<object>',
306+
help='Object to modify',
307+
)
308+
parser.add_argument(
309+
'--property',
310+
metavar='<key>',
311+
required=True,
312+
action='append',
313+
default=[],
314+
help='Property to remove from object '
315+
'(repeat option to remove multiple properties)',
316+
)
317+
return parser
318+
319+
@utils.log_method(log)
320+
def take_action(self, parsed_args):
321+
self.app.client_manager.object_store.object_unset(
322+
parsed_args.container,
323+
parsed_args.object,
324+
properties=parsed_args.property,
325+
)

setup.cfg

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,9 @@ openstack.object_store.v1 =
346346
object_delete = openstackclient.object.v1.object:DeleteObject
347347
object_list = openstackclient.object.v1.object:ListObject
348348
object_save = openstackclient.object.v1.object:SaveObject
349+
object_set = openstackclient.object.v1.object:SetObject
349350
object_show = openstackclient.object.v1.object:ShowObject
351+
object_unset = openstackclient.object.v1.object:UnsetObject
350352

351353
openstack.volume.v1 =
352354
backup_create = openstackclient.volume.v1.backup:CreateBackup

0 commit comments

Comments
 (0)