Add minimal support for the v2 API
This only allows you to run image-list, but sets up a framework that we can use to fill in the rest of the v2 functionality. * Related to bp glance-client-v2 Change-Id: I8827e36fdcf79fe402990a6d05898ec00cbd54c6
This commit is contained in:
parent
b9b8972528
commit
4b62848a4c
glanceclient
22
glanceclient/client.py
Normal file
22
glanceclient/client.py
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# Copyright 2012 OpenStack LLC.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
from glanceclient.common import utils
|
||||||
|
|
||||||
|
|
||||||
|
def Client(version, *args, **kwargs):
|
||||||
|
module = utils.import_versioned_module(version, 'client')
|
||||||
|
client_class = getattr(module, 'Client')
|
||||||
|
return client_class(*args, **kwargs)
|
@ -19,6 +19,7 @@ import uuid
|
|||||||
import prettytable
|
import prettytable
|
||||||
|
|
||||||
from glanceclient.common import exceptions
|
from glanceclient.common import exceptions
|
||||||
|
from glanceclient.openstack.common import importutils
|
||||||
|
|
||||||
|
|
||||||
# Decorator for cli-args
|
# Decorator for cli-args
|
||||||
@ -115,3 +116,10 @@ def env(*vars, **kwargs):
|
|||||||
if value:
|
if value:
|
||||||
return value
|
return value
|
||||||
return kwargs.get('default', '')
|
return kwargs.get('default', '')
|
||||||
|
|
||||||
|
|
||||||
|
def import_versioned_module(version, submodule=None):
|
||||||
|
module = 'glanceclient.v%s' % version
|
||||||
|
if submodule:
|
||||||
|
module = '.'.join((module, submodule))
|
||||||
|
return importutils.import_module(module)
|
||||||
|
@ -24,10 +24,9 @@ import sys
|
|||||||
|
|
||||||
from keystoneclient.v2_0 import client as ksclient
|
from keystoneclient.v2_0 import client as ksclient
|
||||||
|
|
||||||
|
import glanceclient.client
|
||||||
from glanceclient.common import exceptions as exc
|
from glanceclient.common import exceptions as exc
|
||||||
from glanceclient.common import utils
|
from glanceclient.common import utils
|
||||||
from glanceclient.v1 import shell as shell_v1
|
|
||||||
from glanceclient.v1 import client as client_v1
|
|
||||||
|
|
||||||
|
|
||||||
class OpenStackImagesShell(object):
|
class OpenStackImagesShell(object):
|
||||||
@ -36,7 +35,7 @@ class OpenStackImagesShell(object):
|
|||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
prog='glance',
|
prog='glance',
|
||||||
description=__doc__.strip(),
|
description=__doc__.strip(),
|
||||||
epilog='See "glance help COMMAND" '\
|
epilog='See "glance help COMMAND" '
|
||||||
'for help on a specific command.',
|
'for help on a specific command.',
|
||||||
add_help=False,
|
add_help=False,
|
||||||
formatter_class=HelpFormatter,
|
formatter_class=HelpFormatter,
|
||||||
@ -90,6 +89,10 @@ class OpenStackImagesShell(object):
|
|||||||
default=utils.env('OS_IMAGE_URL'),
|
default=utils.env('OS_IMAGE_URL'),
|
||||||
help='Defaults to env[OS_IMAGE_URL]')
|
help='Defaults to env[OS_IMAGE_URL]')
|
||||||
|
|
||||||
|
parser.add_argument('--os-image-api-version',
|
||||||
|
default=utils.env('OS_IMAGE_API_VERSION', default='1'),
|
||||||
|
help='Defaults to env[OS_IMAGE_API_VERSION] or 1')
|
||||||
|
|
||||||
parser.add_argument('--os-service-type',
|
parser.add_argument('--os-service-type',
|
||||||
default=utils.env('OS_SERVICE_TYPE'),
|
default=utils.env('OS_SERVICE_TYPE'),
|
||||||
help='Defaults to env[OS_SERVICE_TYPE]')
|
help='Defaults to env[OS_SERVICE_TYPE]')
|
||||||
@ -101,7 +104,8 @@ class OpenStackImagesShell(object):
|
|||||||
|
|
||||||
self.subcommands = {}
|
self.subcommands = {}
|
||||||
subparsers = parser.add_subparsers(metavar='<subcommand>')
|
subparsers = parser.add_subparsers(metavar='<subcommand>')
|
||||||
self._find_actions(subparsers, shell_v1)
|
submodule = utils.import_versioned_module(version, 'shell')
|
||||||
|
self._find_actions(subparsers, submodule)
|
||||||
self._find_actions(subparsers, self)
|
self._find_actions(subparsers, self)
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
@ -172,7 +176,7 @@ class OpenStackImagesShell(object):
|
|||||||
(options, args) = parser.parse_known_args(argv)
|
(options, args) = parser.parse_known_args(argv)
|
||||||
|
|
||||||
# build available subcommands based on version
|
# build available subcommands based on version
|
||||||
api_version = '1'
|
api_version = options.os_image_api_version
|
||||||
subcommand_parser = self.get_subcommand_parser(api_version)
|
subcommand_parser = self.get_subcommand_parser(api_version)
|
||||||
self.parser = subcommand_parser
|
self.parser = subcommand_parser
|
||||||
|
|
||||||
@ -226,8 +230,8 @@ class OpenStackImagesShell(object):
|
|||||||
}
|
}
|
||||||
endpoint, token = self._authenticate(**kwargs)
|
endpoint, token = self._authenticate(**kwargs)
|
||||||
|
|
||||||
image_service = client_v1.Client(endpoint, token,
|
image_service = glanceclient.client.Client(
|
||||||
insecure=args.insecure)
|
api_version, endpoint, token, insecure=args.insecure)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
args.func(image_service, args)
|
args.func(image_service, args)
|
||||||
|
0
glanceclient/v2/__init__.py
Normal file
0
glanceclient/v2/__init__.py
Normal file
38
glanceclient/v2/client.py
Normal file
38
glanceclient/v2/client.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
# Copyright 2012 OpenStack LLC.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
from glanceclient.common import http
|
||||||
|
from glanceclient.v2 import images
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class Client(object):
|
||||||
|
"""Client for the OpenStack Images v2 API.
|
||||||
|
|
||||||
|
:param string endpoint: A user-supplied endpoint URL for the glance
|
||||||
|
service.
|
||||||
|
:param string token: Token for authentication.
|
||||||
|
:param integer timeout: Allows customization of the timeout for client
|
||||||
|
http requests. (optional)
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, endpoint, token=None, timeout=600):
|
||||||
|
self.http_client = http.HTTPClient(
|
||||||
|
endpoint, token=token, timeout=timeout)
|
||||||
|
self.images = images.Controller(self.http_client)
|
29
glanceclient/v2/images.py
Normal file
29
glanceclient/v2/images.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# Copyright 2012 OpenStack LLC.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
|
||||||
|
class Image(object):
|
||||||
|
def __init__(self, id, name):
|
||||||
|
self.id = id
|
||||||
|
self.name = name
|
||||||
|
|
||||||
|
|
||||||
|
class Controller(object):
|
||||||
|
def __init__(self, http_client):
|
||||||
|
self.http_client = http_client
|
||||||
|
|
||||||
|
def list(self):
|
||||||
|
resp, body = self.http_client.json_request('GET', '/v2/images')
|
||||||
|
return [Image(i['id'], i['name']) for i in body['images']]
|
0
glanceclient/v2/schemas.py
Normal file
0
glanceclient/v2/schemas.py
Normal file
23
glanceclient/v2/shell.py
Normal file
23
glanceclient/v2/shell.py
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# Copyright 2012 OpenStack LLC.
|
||||||
|
# All Rights Reserved.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
from glanceclient.common import utils
|
||||||
|
|
||||||
|
|
||||||
|
def do_image_list(gc, args):
|
||||||
|
"""List images."""
|
||||||
|
images = gc.images.list()
|
||||||
|
columns = ['ID', 'Name']
|
||||||
|
utils.print_list(images, columns)
|
Loading…
x
Reference in New Issue
Block a user