Drop deprecated settings
- HORIZON_IMAGES_ALLOW_UPLOAD (deprecated in Newton) - CUSTOM_THEME_PATH (deprecated in Mitaka) - DEFAULT_THEME_PATH (deprecated in Mitaka) - OPENSTACK_TOKEN_HASH_ENABLED (deprecated in Mitaka) - TOKEN_DELETION_DISABLED (not documented but it was marked as deprecated in Ocata in django-openstack-auth commit 5810f9c6) The related logics related to dropped deprecated settings have been dropped too. - custom_path and default_path of get_available_themes() were dropped as they are no longer needed in favor of the removal of CUSTOM_THEME_PATH and DEFAULT_THEME_PATH. - Unused remove_project_cache(), is_token_deletion_disabled() and delete_token() have been dropped. Change-Id: Ic9406623cc092884c4136f78fb967b129bfda487
This commit is contained in:
parent
0399e52e1e
commit
71993e3c98
@ -134,38 +134,6 @@ the GUI. For example themes, see: /horizon/openstack_dashboard/themes/
|
|||||||
Horizon ships with two themes configured. 'default' is the default theme,
|
Horizon ships with two themes configured. 'default' is the default theme,
|
||||||
and 'material' is based on Google's Material Design.
|
and 'material' is based on Google's Material Design.
|
||||||
|
|
||||||
.. _custom_theme_path:
|
|
||||||
|
|
||||||
CUSTOM_THEME_PATH
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
.. versionadded:: 2015.1(Kilo)
|
|
||||||
|
|
||||||
.. deprecated:: 9.0.0(Mitaka)
|
|
||||||
|
|
||||||
Themes are now controlled by `AVAILABLE_THEMES`_.
|
|
||||||
|
|
||||||
Default: ``"themes/default"``
|
|
||||||
|
|
||||||
This setting tells Horizon to use a directory as a custom theme.
|
|
||||||
|
|
||||||
By default, this directory will serve as the static root of the theme
|
|
||||||
and the entire contents of the directory will be served up at
|
|
||||||
``/static/custom``. If you wish to include content other than static
|
|
||||||
files in a theme directory, but do not wish that content to be served up,
|
|
||||||
then you can create a sub directory named ``static``. If the theme folder
|
|
||||||
contains a sub-directory with the name ``static``, then
|
|
||||||
``static/custom/static`` will be used as the root for the content
|
|
||||||
served at ``/static/custom``.
|
|
||||||
|
|
||||||
The static root of the theme folder must always contain a _variables.scss
|
|
||||||
file and a _styles.scss file. These must contain or import all the
|
|
||||||
bootstrap and horizon specific variables and styles which are used to style
|
|
||||||
the GUI. For example themes, see: /horizon/openstack_dashboard/themes/
|
|
||||||
|
|
||||||
Horizon ships with one alternate theme based on Google's Material Design. To
|
|
||||||
use the alternate theme, set your CUSTOM_THEME_PATH to ``themes/material``.
|
|
||||||
|
|
||||||
DEFAULT_THEME
|
DEFAULT_THEME
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
@ -182,24 +150,6 @@ must be configured as part of `SELECTABLE_THEMES`_. If it is not, then
|
|||||||
your ``DEFAULT_THEME`` will default to the first theme in
|
your ``DEFAULT_THEME`` will default to the first theme in
|
||||||
``SELECTABLE_THEMES``.
|
``SELECTABLE_THEMES``.
|
||||||
|
|
||||||
DEFAULT_THEME_PATH
|
|
||||||
------------------
|
|
||||||
|
|
||||||
.. versionadded:: 8.0.0(Liberty)
|
|
||||||
|
|
||||||
.. deprecated:: 9.0.0(Mitaka)
|
|
||||||
|
|
||||||
Themes are now controlled by `AVAILABLE_THEMES`_.
|
|
||||||
|
|
||||||
Default: ``"themes/default"``
|
|
||||||
|
|
||||||
This setting allows Horizon to collect an additional theme during static
|
|
||||||
collection and be served up via /static/themes/default. This is useful
|
|
||||||
if CUSTOM_THEME_PATH inherits from another theme (like 'default').
|
|
||||||
|
|
||||||
If DEFAULT_THEME_PATH is the same as CUSTOM_THEME_PATH, then collection
|
|
||||||
is skipped and /static/themes will not exist.
|
|
||||||
|
|
||||||
DISALLOW_IFRAME_EMBED
|
DISALLOW_IFRAME_EMBED
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
@ -1022,33 +972,6 @@ Valid values are ``"public"`` and ``"private"``. By default, the visibility
|
|||||||
option is public on create image modal. If it's set to ``"private"``, the
|
option is public on create image modal. If it's set to ``"private"``, the
|
||||||
default visibility option is private.
|
default visibility option is private.
|
||||||
|
|
||||||
HORIZON_IMAGES_ALLOW_UPLOAD
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. versionadded:: 2013.1(Grizzly)
|
|
||||||
|
|
||||||
.. deprecated:: 10.0.0(Newton)
|
|
||||||
|
|
||||||
Use `HORIZON_IMAGES_UPLOAD_MODE`_ instead.
|
|
||||||
|
|
||||||
Default: ``True``
|
|
||||||
|
|
||||||
If set to ``False``, this setting disables **local** uploads to prevent filling
|
|
||||||
up the disk on the dashboard server since uploads to the Glance image store
|
|
||||||
service tend to be particularly large - in the order of hundreds of megabytes
|
|
||||||
to multiple gigabytes.
|
|
||||||
|
|
||||||
The setting is marked as deprecated and will be removed in P or later release.
|
|
||||||
It is superseded by the setting HORIZON_IMAGES_UPLOAD_MODE. Until the removal
|
|
||||||
the ``False`` value of HORIZON_IMAGES_ALLOW_UPLOAD overrides the value of
|
|
||||||
HORIZON_IMAGES_UPLOAD_MODE.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
This will not disable image creation altogether, as this setting does not
|
|
||||||
affect images created by specifying an image location (URL) as the image
|
|
||||||
source.
|
|
||||||
|
|
||||||
HORIZON_IMAGES_UPLOAD_MODE
|
HORIZON_IMAGES_UPLOAD_MODE
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@ -1056,12 +979,10 @@ HORIZON_IMAGES_UPLOAD_MODE
|
|||||||
|
|
||||||
Default: ``"legacy"``
|
Default: ``"legacy"``
|
||||||
|
|
||||||
Valid values are ``"direct"``, ``"legacy"`` (default) and ``"off"``. ``"off"``
|
Valid values are ``"direct"``, ``"legacy"`` (default) and ``"off"``.
|
||||||
disables the ability to upload images via Horizon. It is equivalent to setting
|
``"off"`` disables the ability to upload images via Horizon.
|
||||||
``False`` on the deprecated setting ``HORIZON_IMAGES_ALLOW_UPLOAD``. ``legacy``
|
``legacy`` enables local file upload by piping the image file through the
|
||||||
enables local file upload by piping the image file through the Horizon's
|
Horizon's web-server. ``direct`` sends the image file directly from
|
||||||
web-server. It is equivalent to setting ``True`` on the deprecated setting
|
|
||||||
``HORIZON_IMAGES_ALLOW_UPLOAD``. ``direct`` sends the image file directly from
|
|
||||||
the web browser to Glance. This bypasses Horizon web-server which both reduces
|
the web browser to Glance. This bypasses Horizon web-server which both reduces
|
||||||
network hops and prevents filling up Horizon web-server's filesystem. ``direct``
|
network hops and prevents filling up Horizon web-server's filesystem. ``direct``
|
||||||
is the preferred mode, but due to the following requirements it is not the
|
is the preferred mode, but due to the following requirements it is not the
|
||||||
@ -1076,15 +997,6 @@ restart glance-api process.
|
|||||||
|
|
||||||
.. _here: https://docs.openstack.org/oslo.middleware/latest/reference/cors.html#configuration-for-oslo-config
|
.. _here: https://docs.openstack.org/oslo.middleware/latest/reference/cors.html#configuration-for-oslo-config
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
To maintain the compatibility with the deprecated HORIZON_IMAGES_ALLOW_UPLOAD
|
|
||||||
setting, neither ``"direct"``, nor ``"legacy"`` modes will have an effect if
|
|
||||||
HORIZON_IMAGES_ALLOW_UPLOAD is set to ``False`` - as if HORIZON_IMAGES_UPLOAD_MODE
|
|
||||||
was set to ``"off"`` itself. When HORIZON_IMAGES_ALLOW_UPLOAD is set to ``True``,
|
|
||||||
all three modes are considered, as if HORIZON_IMAGES_ALLOW_UPLOAD setting
|
|
||||||
was removed.
|
|
||||||
|
|
||||||
IMAGE_CUSTOM_PROPERTY_TITLES
|
IMAGE_CUSTOM_PROPERTY_TITLES
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
@ -1441,23 +1353,6 @@ algorithm that the identity (Keystone) server and the auth_token middleware
|
|||||||
are using. Allowed values are the algorithms supported by Python's hashlib
|
are using. Allowed values are the algorithms supported by Python's hashlib
|
||||||
library.
|
library.
|
||||||
|
|
||||||
OPENSTACK_TOKEN_HASH_ENABLED
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. versionadded:: 8.0.0(Liberty)
|
|
||||||
|
|
||||||
.. deprecated:: 9.0.0(Mitaka)
|
|
||||||
|
|
||||||
PKI tokens currently work with hashing, and Keystone will soon deprecate
|
|
||||||
usage of PKI tokens.
|
|
||||||
|
|
||||||
Default: ``True``
|
|
||||||
|
|
||||||
Hashing tokens from Keystone keeps the Horizon session data smaller, but it
|
|
||||||
doesn't work in some cases when using PKI tokens. Uncomment this value and
|
|
||||||
set it to False if using PKI tokens and there are 401 errors due to token
|
|
||||||
hashing.
|
|
||||||
|
|
||||||
PASSWORD_EXPIRES_WARNING_THRESHOLD_DAYS
|
PASSWORD_EXPIRES_WARNING_THRESHOLD_DAYS
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -26,7 +26,6 @@ from openstack_auth import utils
|
|||||||
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
_TOKEN_HASH_ENABLED = getattr(settings, 'OPENSTACK_TOKEN_HASH_ENABLED', True)
|
|
||||||
|
|
||||||
|
|
||||||
def set_session_from_user(request, user):
|
def set_session_from_user(request, user):
|
||||||
@ -91,7 +90,7 @@ class Token(object):
|
|||||||
# Token-related attributes
|
# Token-related attributes
|
||||||
self.id = auth_ref.auth_token
|
self.id = auth_ref.auth_token
|
||||||
self.unscoped_token = unscoped_token
|
self.unscoped_token = unscoped_token
|
||||||
if _TOKEN_HASH_ENABLED and self._is_pki_token(self.id):
|
if self._is_pki_token(self.id):
|
||||||
algorithm = getattr(settings, 'OPENSTACK_TOKEN_HASH_ALGORITHM',
|
algorithm = getattr(settings, 'OPENSTACK_TOKEN_HASH_ALGORITHM',
|
||||||
'md5')
|
'md5')
|
||||||
hasher = hashlib.new(algorithm)
|
hasher = hashlib.new(algorithm)
|
||||||
|
@ -116,13 +116,6 @@ def is_safe_url(url, host=None):
|
|||||||
return not netloc or netloc == host
|
return not netloc or netloc == host
|
||||||
|
|
||||||
|
|
||||||
# DEPRECATED -- Mitaka
|
|
||||||
# This method definition is included to prevent breaking backward compatibility
|
|
||||||
# The original functionality was problematic and has been removed.
|
|
||||||
def remove_project_cache(token):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
# Helper for figuring out keystone version
|
# Helper for figuring out keystone version
|
||||||
# Implementation will change when API version discovery is available
|
# Implementation will change when API version discovery is available
|
||||||
def get_keystone_version():
|
def get_keystone_version():
|
||||||
@ -146,11 +139,6 @@ def get_keystone_client():
|
|||||||
return client_v3
|
return client_v3
|
||||||
|
|
||||||
|
|
||||||
def is_token_deletion_disabled():
|
|
||||||
LOG.warning("Deprecated TOKEN_DELETION_DISABLED setting is no longer used")
|
|
||||||
return getattr(settings, 'TOKEN_DELETION_DISABLED', False)
|
|
||||||
|
|
||||||
|
|
||||||
def is_websso_enabled():
|
def is_websso_enabled():
|
||||||
"""Websso is supported in Keystone version 3."""
|
"""Websso is supported in Keystone version 3."""
|
||||||
websso_enabled = getattr(settings, 'WEBSSO_ENABLED', False)
|
websso_enabled = getattr(settings, 'WEBSSO_ENABLED', False)
|
||||||
|
@ -178,11 +178,6 @@ def logout(request, login_url=None, **kwargs):
|
|||||||
**kwargs)
|
**kwargs)
|
||||||
|
|
||||||
|
|
||||||
def delete_token(endpoint, token_id):
|
|
||||||
"""Delete a token."""
|
|
||||||
LOG.warning("The delete_token method is deprecated and now does nothing")
|
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def switch(request, tenant_id, redirect_field_name=auth.REDIRECT_FIELD_NAME):
|
def switch(request, tenant_id, redirect_field_name=auth.REDIRECT_FIELD_NAME):
|
||||||
"""Switches an authenticated user from one project to another."""
|
"""Switches an authenticated user from one project to another."""
|
||||||
|
@ -377,8 +377,6 @@ def image_update(request, image_id, **kwargs):
|
|||||||
|
|
||||||
|
|
||||||
def get_image_upload_mode():
|
def get_image_upload_mode():
|
||||||
if getattr(settings, 'HORIZON_IMAGES_ALLOW_UPLOAD', None) is False:
|
|
||||||
return 'off'
|
|
||||||
mode = getattr(settings, 'HORIZON_IMAGES_UPLOAD_MODE', 'legacy')
|
mode = getattr(settings, 'HORIZON_IMAGES_UPLOAD_MODE', 'legacy')
|
||||||
if mode not in ('off', 'legacy', 'direct'):
|
if mode not in ('off', 'legacy', 'direct'):
|
||||||
LOG.warning('HORIZON_IMAGES_UPLOAD_MODE has an unrecognized value of '
|
LOG.warning('HORIZON_IMAGES_UPLOAD_MODE has an unrecognized value of '
|
||||||
|
@ -20,7 +20,6 @@ import tempfile
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.files.uploadedfile import InMemoryUploadedFile
|
from django.core.files.uploadedfile import InMemoryUploadedFile
|
||||||
from django.forms.widgets import HiddenInput
|
|
||||||
from django.test.utils import override_settings
|
from django.test.utils import override_settings
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
|
|
||||||
@ -66,28 +65,6 @@ class CreateImageFormTests(test.ResetImageAPIVersionMixin, test.TestCase):
|
|||||||
self.assertFalse(form.is_valid())
|
self.assertFalse(form.is_valid())
|
||||||
mock_image_list.assert_has_calls(image_calls)
|
mock_image_list.assert_has_calls(image_calls)
|
||||||
|
|
||||||
@override_settings(HORIZON_IMAGES_ALLOW_UPLOAD=False)
|
|
||||||
@override_settings(IMAGES_ALLOW_LOCATION=True)
|
|
||||||
@mock.patch.object(api.glance, 'image_list_detailed')
|
|
||||||
def test_image_upload_disabled(self, mock_image_list):
|
|
||||||
mock_image_list.side_effect = [
|
|
||||||
[self.images.list(), False, False],
|
|
||||||
[self.images.list(), False, False]
|
|
||||||
]
|
|
||||||
|
|
||||||
image_calls = [
|
|
||||||
mock.call(test.IsA(dict), filters={'disk_format': 'aki'}),
|
|
||||||
mock.call(test.IsA(dict), filters={'disk_format': 'ari'})
|
|
||||||
]
|
|
||||||
|
|
||||||
form = forms.CreateImageForm({})
|
|
||||||
|
|
||||||
self.assertEqual(
|
|
||||||
isinstance(form.fields['image_file'].widget, HiddenInput), True)
|
|
||||||
source_type_dict = dict(form.fields['source_type'].choices)
|
|
||||||
self.assertNotIn('file', source_type_dict)
|
|
||||||
mock_image_list.assert_has_calls(image_calls)
|
|
||||||
|
|
||||||
@override_settings(OPENSTACK_API_VERSIONS={'image': 1})
|
@override_settings(OPENSTACK_API_VERSIONS={'image': 1})
|
||||||
def test_create_image_metadata_docker_v1(self):
|
def test_create_image_metadata_docker_v1(self):
|
||||||
form_data = {
|
form_data = {
|
||||||
|
@ -266,11 +266,6 @@ OPENSTACK_KEYSTONE_BACKEND = {
|
|||||||
# allowing Admin session password retrieval/decryption.
|
# allowing Admin session password retrieval/decryption.
|
||||||
#OPENSTACK_ENABLE_PASSWORD_RETRIEVE = False
|
#OPENSTACK_ENABLE_PASSWORD_RETRIEVE = False
|
||||||
|
|
||||||
# This setting allows deployers to control whether a token is deleted on log
|
|
||||||
# out. This can be helpful when there are often long running processes being
|
|
||||||
# run in the Horizon environment.
|
|
||||||
#TOKEN_DELETION_DISABLED = False
|
|
||||||
|
|
||||||
# The Launch Instance user experience has been significantly enhanced.
|
# The Launch Instance user experience has been significantly enhanced.
|
||||||
# You can choose whether to enable the new launch instance experience,
|
# You can choose whether to enable the new launch instance experience,
|
||||||
# the legacy experience, or both. The legacy experience will be removed
|
# the legacy experience, or both. The legacy experience will be removed
|
||||||
|
@ -309,10 +309,6 @@ USER_MENU_LINKS = [
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
# Deprecated Theme Settings
|
|
||||||
CUSTOM_THEME_PATH = None
|
|
||||||
DEFAULT_THEME_PATH = None
|
|
||||||
|
|
||||||
# 'key', 'label', 'path'
|
# 'key', 'label', 'path'
|
||||||
AVAILABLE_THEMES = [
|
AVAILABLE_THEMES = [
|
||||||
(
|
(
|
||||||
@ -439,21 +435,11 @@ if STATIC_URL is None:
|
|||||||
AVAILABLE_THEMES, SELECTABLE_THEMES, DEFAULT_THEME = (
|
AVAILABLE_THEMES, SELECTABLE_THEMES, DEFAULT_THEME = (
|
||||||
theme_settings.get_available_themes(
|
theme_settings.get_available_themes(
|
||||||
AVAILABLE_THEMES,
|
AVAILABLE_THEMES,
|
||||||
CUSTOM_THEME_PATH,
|
|
||||||
DEFAULT_THEME_PATH,
|
|
||||||
DEFAULT_THEME,
|
DEFAULT_THEME,
|
||||||
SELECTABLE_THEMES
|
SELECTABLE_THEMES
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
if CUSTOM_THEME_PATH is not None:
|
|
||||||
_LOG.warning("CUSTOM_THEME_PATH has been deprecated. Please convert "
|
|
||||||
"your settings to make use of AVAILABLE_THEMES.")
|
|
||||||
|
|
||||||
if DEFAULT_THEME_PATH is not None:
|
|
||||||
_LOG.warning("DEFAULT_THEME_PATH has been deprecated. Please convert "
|
|
||||||
"your settings to make use of AVAILABLE_THEMES.")
|
|
||||||
|
|
||||||
# Discover all the directories that contain static files
|
# Discover all the directories that contain static files
|
||||||
STATICFILES_DIRS = theme_settings.get_theme_static_dirs(
|
STATICFILES_DIRS = theme_settings.get_theme_static_dirs(
|
||||||
AVAILABLE_THEMES, THEME_COLLECTION_DIR, ROOT_PATH)
|
AVAILABLE_THEMES, THEME_COLLECTION_DIR, ROOT_PATH)
|
||||||
@ -516,11 +502,3 @@ if DEBUG:
|
|||||||
# Here comes the Django settings deprecation section. Being at the very end
|
# Here comes the Django settings deprecation section. Being at the very end
|
||||||
# of settings.py allows it to catch the settings defined in local_settings.py
|
# of settings.py allows it to catch the settings defined in local_settings.py
|
||||||
# or inside one of local_settings.d/ snippets.
|
# or inside one of local_settings.d/ snippets.
|
||||||
if 'HORIZON_IMAGES_ALLOW_UPLOAD' in globals():
|
|
||||||
message = 'The setting HORIZON_IMAGES_ALLOW_UPLOAD is deprecated in ' \
|
|
||||||
'Newton and will be removed in P release. Use the setting ' \
|
|
||||||
'HORIZON_IMAGES_UPLOAD_MODE instead.'
|
|
||||||
if not HORIZON_IMAGES_ALLOW_UPLOAD:
|
|
||||||
message += ' Keep in mind that HORIZON_IMAGES_ALLOW_UPLOAD set to ' \
|
|
||||||
'False overrides the value of HORIZON_IMAGES_UPLOAD_MODE.'
|
|
||||||
_LOG.warning(message)
|
|
||||||
|
@ -48,8 +48,6 @@ TEMPLATES[0]['OPTIONS']['context_processors'].append(
|
|||||||
'openstack_dashboard.context_processors.openstack'
|
'openstack_dashboard.context_processors.openstack'
|
||||||
)
|
)
|
||||||
|
|
||||||
CUSTOM_THEME_PATH = 'themes/default'
|
|
||||||
|
|
||||||
# 'key', 'label', 'path'
|
# 'key', 'label', 'path'
|
||||||
AVAILABLE_THEMES = [
|
AVAILABLE_THEMES = [
|
||||||
(
|
(
|
||||||
|
@ -17,8 +17,6 @@
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from django.utils.translation import pgettext_lazy
|
|
||||||
|
|
||||||
|
|
||||||
def get_theme_static_dirs(available_themes, collection_dir, root):
|
def get_theme_static_dirs(available_themes, collection_dir, root):
|
||||||
static_dirs = []
|
static_dirs = []
|
||||||
@ -40,64 +38,21 @@ def get_theme_static_dirs(available_themes, collection_dir, root):
|
|||||||
return static_dirs
|
return static_dirs
|
||||||
|
|
||||||
|
|
||||||
def get_available_themes(available_themes, custom_path, default_path,
|
def get_available_themes(available_themes, default_theme, selectable_themes):
|
||||||
default_theme, selectable_themes):
|
|
||||||
new_theme_list = []
|
new_theme_list = []
|
||||||
# We can only support one path at a time, because of static file
|
# We can only support one path at a time, because of static file
|
||||||
# collection.
|
# collection.
|
||||||
custom_ndx = -1
|
|
||||||
default_ndx = -1
|
|
||||||
default_theme_ndx = -1
|
default_theme_ndx = -1
|
||||||
for ndx, each_theme in enumerate(available_themes):
|
for ndx, each_theme in enumerate(available_themes):
|
||||||
|
|
||||||
# Maintain Backward Compatibility for CUSTOM_THEME_PATH
|
|
||||||
if custom_path:
|
|
||||||
if each_theme[2] == custom_path:
|
|
||||||
custom_ndx = ndx
|
|
||||||
|
|
||||||
# Maintain Backward Compatibility for DEFAULT_THEME_PATH
|
|
||||||
if default_path:
|
|
||||||
if each_theme[0] == 'default':
|
|
||||||
default_ndx = ndx
|
|
||||||
each_theme = (
|
|
||||||
'default',
|
|
||||||
pgettext_lazy('Default style theme', 'Default'),
|
|
||||||
default_path
|
|
||||||
)
|
|
||||||
|
|
||||||
# Make sure that DEFAULT_THEME is configured for use
|
# Make sure that DEFAULT_THEME is configured for use
|
||||||
if each_theme[0] == default_theme:
|
if each_theme[0] == default_theme:
|
||||||
default_theme_ndx = ndx
|
default_theme_ndx = ndx
|
||||||
|
|
||||||
new_theme_list.append(each_theme)
|
new_theme_list.append(each_theme)
|
||||||
|
|
||||||
if custom_ndx != -1:
|
|
||||||
# If CUSTOM_THEME_PATH is set, then we should set that as the default
|
|
||||||
# theme to make sure that upgrading Horizon doesn't jostle anyone
|
|
||||||
default_theme = available_themes[custom_ndx][0]
|
|
||||||
logging.warning("Your AVAILABLE_THEMES already contains your "
|
|
||||||
"CUSTOM_THEME_PATH, therefore using configuration in "
|
|
||||||
"AVAILABLE_THEMES for %s.", custom_path)
|
|
||||||
|
|
||||||
elif custom_path is not None:
|
|
||||||
new_theme_list.append(
|
|
||||||
('custom',
|
|
||||||
pgettext_lazy('Custom style theme', 'Custom'),
|
|
||||||
custom_path)
|
|
||||||
)
|
|
||||||
default_theme = 'custom'
|
|
||||||
|
|
||||||
# If 'default' isn't present at all, add it with the default_path
|
|
||||||
if default_ndx == -1 and default_path is not None:
|
|
||||||
new_theme_list.append(
|
|
||||||
('default',
|
|
||||||
pgettext_lazy('Default style theme', 'Default'),
|
|
||||||
default_path)
|
|
||||||
)
|
|
||||||
|
|
||||||
# If default is not configured, we have to set one,
|
# If default is not configured, we have to set one,
|
||||||
# just grab the first theme
|
# just grab the first theme
|
||||||
if default_theme_ndx == -1 and custom_ndx == -1:
|
if default_theme_ndx == -1:
|
||||||
default_theme = available_themes[0][0]
|
default_theme = available_themes[0][0]
|
||||||
|
|
||||||
if selectable_themes is None:
|
if selectable_themes is None:
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
upgrade:
|
||||||
|
- |
|
||||||
|
The following deprecated settings have been dropped.
|
||||||
|
|
||||||
|
* ``HORIZON_IMAGES_ALLOW_UPLOAD`` (deprecated in Newton):
|
||||||
|
Use ``HORIZON_IMAGES_UPLOAD_MODE`` instead.
|
||||||
|
* ``CUSTOM_THEME_PATH`` and ``DEFAULT_THEME_PATH``
|
||||||
|
(both deprecated in Mitaka): Use AVAILABLE_THEMES instead.
|
||||||
|
* ``OPENSTACK_TOKEN_HASH_ENABLED`` (deprecated in Mitaka):
|
||||||
|
PKI tokens currently work with hashing (before Ocata) and
|
||||||
|
Keystone already dropped PKI token support in Ocata.
|
||||||
|
* ``TOKEN_DELETION_DISABLED`` (deprecated in Ocata):
|
||||||
|
It was not marked as deprecated in the horizon documentation,
|
||||||
|
but this had no effect since Ocata release.
|
Loading…
Reference in New Issue
Block a user