Skip to content

Commit be83ae7

Browse files
author
Steve Martinelli
committed
Add container create and delete support
Add basic container create and delete support to OSC. Change-Id: Ia104db9d7e580d33097ea33a5690998f817995d1 implements: bp swift-client
1 parent 75e8490 commit be83ae7

4 files changed

Lines changed: 107 additions & 3 deletions

File tree

openstackclient/common/restapi.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,11 @@ def patch(self, url, data=None, json=None, **kwargs):
189189
:param \*\*kwargs: Optional arguments passed to ``request``
190190
"""
191191

192-
return self.request('PATCH', url, data=data, json=json, **kwargs)
192+
if json:
193+
kwargs['json'] = json
194+
if data:
195+
kwargs['data'] = data
196+
return self.request('PATCH', url, **kwargs)
193197

194198
def post(self, url, data=None, json=None, **kwargs):
195199
"""Send a POST request. Returns :class:`requests.Response` object.
@@ -201,7 +205,11 @@ def post(self, url, data=None, json=None, **kwargs):
201205
:param \*\*kwargs: Optional arguments passed to ``request``
202206
"""
203207

204-
return self.request('POST', url, data=data, json=json, **kwargs)
208+
if json:
209+
kwargs['json'] = json
210+
if data:
211+
kwargs['data'] = data
212+
return self.request('POST', url, **kwargs)
205213

206214
def put(self, url, data=None, json=None, **kwargs):
207215
"""Send a PUT request. Returns :class:`requests.Response` object.
@@ -213,7 +221,11 @@ def put(self, url, data=None, json=None, **kwargs):
213221
:param \*\*kwargs: Optional arguments passed to ``request``
214222
"""
215223

216-
return self.request('PUT', url, data=data, json=json, **kwargs)
224+
if json:
225+
kwargs['json'] = json
226+
if data:
227+
kwargs['data'] = data
228+
return self.request('PUT', url, **kwargs)
217229

218230
# Command verb methods
219231

openstackclient/object/v1/container.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,64 @@
1919
import logging
2020
import six
2121

22+
from cliff import command
2223
from cliff import lister
2324
from cliff import show
2425

2526
from openstackclient.common import utils
2627
from openstackclient.object.v1.lib import container as lib_container
2728

2829

30+
class CreateContainer(show.ShowOne):
31+
"""Create a container"""
32+
33+
log = logging.getLogger(__name__ + '.CreateContainer')
34+
35+
def get_parser(self, prog_name):
36+
parser = super(CreateContainer, self).get_parser(prog_name)
37+
parser.add_argument(
38+
'container',
39+
metavar='<container>',
40+
help='New container name',
41+
)
42+
return parser
43+
44+
def take_action(self, parsed_args):
45+
self.log.debug('take_action(%s)', parsed_args)
46+
47+
data = lib_container.create_container(
48+
self.app.restapi,
49+
self.app.client_manager.object_store.endpoint,
50+
parsed_args.container,
51+
)
52+
53+
return zip(*sorted(six.iteritems(data)))
54+
55+
56+
class DeleteContainer(command.Command):
57+
"""Delete a container"""
58+
59+
log = logging.getLogger(__name__ + '.DeleteContainer')
60+
61+
def get_parser(self, prog_name):
62+
parser = super(DeleteContainer, self).get_parser(prog_name)
63+
parser.add_argument(
64+
'container',
65+
metavar='<container>',
66+
help='Container name to delete',
67+
)
68+
return parser
69+
70+
def take_action(self, parsed_args):
71+
self.log.debug('take_action(%s)', parsed_args)
72+
73+
lib_container.delete_container(
74+
self.app.restapi,
75+
self.app.client_manager.object_store.endpoint,
76+
parsed_args.container,
77+
)
78+
79+
2980
class ListContainer(lister.Lister):
3081
"""List containers"""
3182

openstackclient/object/v1/lib/container.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,45 @@
2222
from urlparse import urlparse # noqa
2323

2424

25+
def create_container(
26+
api,
27+
url,
28+
container,
29+
):
30+
"""Create a container
31+
32+
:param api: a restapi object
33+
:param url: endpoint
34+
:param container: name of container to create
35+
:returns: dict of returned headers
36+
"""
37+
38+
response = api.put("%s/%s" % (url, container))
39+
url_parts = urlparse(url)
40+
data = {
41+
'account': url_parts.path.split('/')[-1],
42+
'container': container,
43+
}
44+
data['x-trans-id'] = response.headers.get('x-trans-id', None)
45+
46+
return data
47+
48+
49+
def delete_container(
50+
api,
51+
url,
52+
container,
53+
):
54+
"""Delete a container
55+
56+
:param api: a restapi object
57+
:param url: endpoint
58+
:param container: name of container to delete
59+
"""
60+
61+
api.delete("%s/%s" % (url, container))
62+
63+
2564
def list_containers(
2665
api,
2766
url,

setup.cfg

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,8 @@ openstack.network.v2 =
268268
network_show = openstackclient.network.v2.network:ShowNetwork
269269

270270
openstack.object_store.v1 =
271+
container_create = openstackclient.object.v1.container:CreateContainer
272+
container_delete = openstackclient.object.v1.container:DeleteContainer
271273
container_list = openstackclient.object.v1.container:ListContainer
272274
container_show = openstackclient.object.v1.container:ShowContainer
273275
object_list = openstackclient.object.v1.object:ListObject

0 commit comments

Comments
 (0)