Remove deprecated cyborg.image.download.modules

This was deprecated from Queens. Remove it before we clean up the
image download code.

Change-Id: Ic765a2958f7a00f7b2bb6fb580dda064094817b4
This commit is contained in:
Monty Taylor 2020-06-18 16:28:07 -05:00
parent 8826575689
commit 9b99e56c67
5 changed files with 8 additions and 117 deletions

View File

@ -34,29 +34,6 @@ Enable glance operation retries.
Specifies the number of retries when uploading / downloading Specifies the number of retries when uploading / downloading
an image to / from glance. 0 means no retries. an image to / from glance. 0 means no retries.
"""),
cfg.ListOpt('allowed_direct_url_schemes',
default=[],
deprecated_for_removal=True,
deprecated_since='17.0.0',
deprecated_reason="""
This was originally added for the 'cyborg.image.download.file' FileTransfer
extension which was removed in the 16.0.0 Pike release. The
'cyborg.image.download.modules' extension point is not maintained
and there is no indication of its use in production clouds.
""",
help="""
List of url schemes that can be directly accessed.
This option specifies a list of url schemes that can be downloaded
directly via the direct_url. This direct_URL can be fetched from
Image metadata which can be used by cyborg to get the
image more efficiently. cyborg-compute could benefit from this by
invoking a copy when it has access to the same file system as glance.
Possible values:
* [file], Empty list (default)
"""), """),
cfg.BoolOpt('verify_glance_signatures', cfg.BoolOpt('verify_glance_signatures',
default=False, default=False,

View File

@ -149,11 +149,7 @@ class API(object):
again, None is returned from the method. If no data argument is again, None is returned from the method. If no data argument is
supplied and no dest_path argument is supplied (VMWare and XenAPI virt supplied and no dest_path argument is supplied (VMWare and XenAPI virt
drivers), then the method returns an iterator to the image bits that drivers), then the method returns an iterator to the image bits that
the caller uses to write to wherever location it wants. Finally, if the the caller uses to write to wherever location it wants.
allow_direct_url_schemes CONF option is set to something, then the
cyborg.image.download modules are used to attempt to do an SCP copy of
the image bits from a file location to the dest_path and None is
returned after retrying one or more download locations.
I think the above points to just how hacky/wacky all of this code is, I think the above points to just how hacky/wacky all of this code is,
and the reason it needs to be cleaned up and standardized across the and the reason it needs to be cleaned up and standardized across the

View File

@ -1,54 +0,0 @@
# Copyright 2013 Red Hat, Inc.
# 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 oslo_log import log as logging
import stevedore.driver
import stevedore.extension
LOG = logging.getLogger(__name__)
def load_transfer_modules():
module_dictionary = {}
ex = stevedore.extension.ExtensionManager('cyborg.image.download.modules')
for module_name in ex.names():
mgr = stevedore.driver.DriverManager(
namespace='cyborg.image.download.modules',
name=module_name,
invoke_on_load=False)
schemes_list = mgr.driver.get_schemes()
for scheme in schemes_list:
if scheme in module_dictionary:
LOG.error('%(scheme)s is registered as a module twice. '
'%(module_name)s is not being used.',
{'scheme': scheme,
'module_name': module_name})
else:
module_dictionary[scheme] = mgr.driver
if module_dictionary:
LOG.warning('The cyborg.image.download.modules extension point is '
'deprecated for removal starting in the 17.0.0 Queens '
'release and may be removed as early as the 18.0.0 Rocky '
'release. It is not maintained and there is no indication '
'of its use in production clouds. If you are using this '
'extension point, please make the cyborg development team '
'aware by contacting us in the #openstack-cyborg freenode '
'IRC channel or on the openstack-dev mailing list.')
return module_dictionary

View File

@ -36,12 +36,10 @@ from oslo_utils import excutils
from oslo_utils import timeutils from oslo_utils import timeutils
import six import six
from six.moves import range from six.moves import range
import six.moves.urllib.parse as urlparse
from cyborg.common import exception from cyborg.common import exception
from cyborg.common import utils from cyborg.common import utils
import cyborg.conf import cyborg.conf
import cyborg.image.download as image_xfers
from cyborg import objects from cyborg import objects
from cyborg import service_auth from cyborg import service_auth
@ -187,24 +185,6 @@ class GlanceImageServiceV2(object):
def __init__(self, client=None): def __init__(self, client=None):
self._client = client or GlanceClientWrapper() self._client = client or GlanceClientWrapper()
# NOTE(jbresnah) build the table of download handlers at the beginning
# so that operators can catch errors at load time rather than whenever
# a user attempts to use a module. Note this cannot be done in glance
# space when this python module is loaded because the download module
# may require configuration options to be parsed.
self._download_handlers = {}
download_modules = image_xfers.load_transfer_modules()
for scheme, mod in download_modules.items():
if scheme not in CONF.glance.allowed_direct_url_schemes:
continue
try:
self._download_handlers[scheme] = mod.get_download_handler()
except Exception as ex:
LOG.error('When loading the module %(module_str)s the '
'following error occurred: %(ex)s',
{'module_str': str(mod), 'ex': ex})
@staticmethod @staticmethod
def _safe_fsync(fh): def _safe_fsync(fh):
@ -234,21 +214,6 @@ class GlanceImageServiceV2(object):
def download(self, context, image_id, data=None, dst_path=None): def download(self, context, image_id, data=None, dst_path=None):
"""Calls out to Glance for data and writes data.""" """Calls out to Glance for data and writes data."""
if CONF.glance.allowed_direct_url_schemes and dst_path is not None:
image = self.show(context, image_id, include_locations=True)
for entry in image.get('locations', []):
loc_url = entry['url']
loc_meta = entry['metadata']
o = urlparse.urlparse(loc_url)
xfer_mod = self._get_transfer_module(o.scheme)
if xfer_mod:
try:
xfer_mod.download(context, o, dst_path, loc_meta)
LOG.info("Successfully transferred using %s", o.scheme)
return
except Exception:
LOG.exception("Download image error")
try: try:
image_chunks = self._client.call(context, 2, 'data', image_id) image_chunks = self._client.call(context, 2, 'data', image_id)
except Exception: except Exception:

View File

@ -0,0 +1,7 @@
---
upgrade:
- |
``cyborg.image.download.modules`` extension point and support
for ``allow_direct_url_schemes`` configuration setting, which
have been deprecated since the Queens release, have been
removed.