Reviewed: https://review.opendev.org/679513 Committed: https://git.openstack.org/cgit/openstack/horizon/commit/?id=44987f02be671fd81b3dcd8d22f9fa1b219488c2 Submitter: Zuul Branch: master
commit 44987f02be671fd81b3dcd8d22f9fa1b219488c2 Author: Gloria Gu <g...@suse.com> Date: Fri Aug 30 13:47:39 2019 -0700 Remove the check which causes plugin's quotas update failure The check causes external plugin's quotas fields unknown exception because the quotas fields are not part of QUOTA_FIELDS which only includes the fields for cinder, neutron and nova. Meanwhile the exception message throws TypeError. This commit removes the uncessary check. It also helps fix the manila-ui's bug #1842119 Change-Id: If093f4ecf1e344792b347c5c338b441b1ab42a04 Closes-bug: #1798048 Closes-bug: #1842119 ** Changed in: horizon Status: In Progress => Fix Released -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to OpenStack Dashboard (Horizon). https://bugs.launchpad.net/bugs/1798048 Title: cant modify project quotas with manila-ui plugin Status in OpenStack Dashboard (Horizon): Fix Released Bug description: error_log (httpd) [Tue Oct 16 04:42:47.473489 2018] [:error] [pid 4688] Traceback (most recent call last): [Tue Oct 16 04:42:47.473635 2018] [:error] [pid 4688] File "/usr/lib64/python2.7/logging/__init__.py", line 851, in emit [Tue Oct 16 04:42:47.473780 2018] [:error] [pid 4688] msg = self.format(record) [Tue Oct 16 04:42:47.473817 2018] [:error] [pid 4688] File "/usr/lib64/python2.7/logging/__init__.py", line 724, in format [Tue Oct 16 04:42:47.473867 2018] [:error] [pid 4688] return fmt.format(record) [Tue Oct 16 04:42:47.473896 2018] [:error] [pid 4688] File "/usr/lib64/python2.7/logging/__init__.py", line 464, in format [Tue Oct 16 04:42:47.473943 2018] [:error] [pid 4688] record.message = record.getMessage() [Tue Oct 16 04:42:47.473971 2018] [:error] [pid 4688] File "/usr/lib64/python2.7/logging/__init__.py", line 328, in getMessage [Tue Oct 16 04:42:47.474014 2018] [:error] [pid 4688] msg = msg % self.args [Tue Oct 16 04:42:47.474084 2018] [:error] [pid 4688] TypeError: not all arguments converted during string formatting [Tue Oct 16 04:42:47.474109 2018] [:error] [pid 4688] Logged from file quotas.py, line 242 [Tue Oct 16 04:42:47.474415 2018] [:error] [pid 4688] UnhashableKeyWarning: The key of openstack_dashboard.usage.quotas tenant_quota_usages is not hashable and cannot be memoized: ((<weakref at 0x7ff30e987e68; to 'WSGIRequest' at 0x7ff30eb6a8d0>,), (('targets', ('share_snapshots', 'share_gigabytes', 'share_snapshot_gigabytes', 'shares', 'share_networks')), ('tenant_id', u'81cc9c2be8a9476fbf81f9fbe4d2c86b'))) [Tue Oct 16 04:42:47.474589 2018] [:error] [pid 4688] Traceback (most recent call last): [Tue Oct 16 04:42:47.474635 2018] [:error] [pid 4688] File "/usr/lib64/python2.7/logging/__init__.py", line 851, in emit [Tue Oct 16 04:42:47.474685 2018] [:error] [pid 4688] msg = self.format(record) [Tue Oct 16 04:42:47.474713 2018] [:error] [pid 4688] File "/usr/lib64/python2.7/logging/__init__.py", line 724, in format [Tue Oct 16 04:42:47.474752 2018] [:error] [pid 4688] return fmt.format(record) [Tue Oct 16 04:42:47.474778 2018] [:error] [pid 4688] File "/usr/lib64/python2.7/logging/__init__.py", line 464, in format [Tue Oct 16 04:42:47.474827 2018] [:error] [pid 4688] record.message = record.getMessage() [Tue Oct 16 04:42:47.474856 2018] [:error] [pid 4688] File "/usr/lib64/python2.7/logging/__init__.py", line 328, in getMessage [Tue Oct 16 04:42:47.474895 2018] [:error] [pid 4688] msg = msg % self.args [Tue Oct 16 04:42:47.474931 2018] [:error] [pid 4688] TypeError: not all arguments converted during string formatting [Tue Oct 16 04:42:47.474951 2018] [:error] [pid 4688] Logged from file quotas.py, line 242 [Tue Oct 16 04:42:47.476646 2018] [:error] [pid 4688] ERROR django.request Internal Server Error: /dashboard/identity/81cc9c2be8a9476fbf81f9fbe4d2c86b/update_quotas/ [Tue Oct 16 04:42:47.476673 2018] [:error] [pid 4688] Traceback (most recent call last): [Tue Oct 16 04:42:47.476684 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/django/core/handlers/exception.py", line 41, in inner [Tue Oct 16 04:42:47.476694 2018] [:error] [pid 4688] response = get_response(request) [Tue Oct 16 04:42:47.476703 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response [Tue Oct 16 04:42:47.476712 2018] [:error] [pid 4688] response = self.process_exception_by_middleware(e, request) [Tue Oct 16 04:42:47.476721 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response [Tue Oct 16 04:42:47.476731 2018] [:error] [pid 4688] response = wrapped_callback(request, *callback_args, **callback_kwargs) [Tue Oct 16 04:42:47.476740 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/horizon/decorators.py", line 36, in dec [Tue Oct 16 04:42:47.476749 2018] [:error] [pid 4688] return view_func(request, *args, **kwargs) [Tue Oct 16 04:42:47.476758 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/horizon/decorators.py", line 52, in dec [Tue Oct 16 04:42:47.476767 2018] [:error] [pid 4688] return view_func(request, *args, **kwargs) [Tue Oct 16 04:42:47.476785 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/horizon/decorators.py", line 36, in dec [Tue Oct 16 04:42:47.476796 2018] [:error] [pid 4688] return view_func(request, *args, **kwargs) [Tue Oct 16 04:42:47.476805 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/horizon/decorators.py", line 113, in dec [Tue Oct 16 04:42:47.476814 2018] [:error] [pid 4688] return view_func(request, *args, **kwargs) [Tue Oct 16 04:42:47.476822 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/django/views/generic/base.py", line 68, in view [Tue Oct 16 04:42:47.476831 2018] [:error] [pid 4688] return self.dispatch(request, *args, **kwargs) [Tue Oct 16 04:42:47.476840 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/django/views/generic/base.py", line 88, in dispatch [Tue Oct 16 04:42:47.476849 2018] [:error] [pid 4688] return handler(request, *args, **kwargs) [Tue Oct 16 04:42:47.476858 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/horizon/workflows/views.py", line 172, in post [Tue Oct 16 04:42:47.476867 2018] [:error] [pid 4688] context = self.get_context_data(**kwargs) [Tue Oct 16 04:42:47.476876 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/horizon/workflows/views.py", line 92, in get_context_data [Tue Oct 16 04:42:47.476885 2018] [:error] [pid 4688] workflow = self.get_workflow() [Tue Oct 16 04:42:47.476893 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/horizon/workflows/views.py", line 82, in get_workflow [Tue Oct 16 04:42:47.476902 2018] [:error] [pid 4688] entry_point=entry_point) [Tue Oct 16 04:42:47.476910 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/horizon/workflows/base.py", line 687, in __init__ [Tue Oct 16 04:42:47.476919 2018] [:error] [pid 4688] valid = step.action.is_valid() [Tue Oct 16 04:42:47.476928 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/django/forms/forms.py", line 183, in is_valid [Tue Oct 16 04:42:47.476937 2018] [:error] [pid 4688] return self.is_bound and not self.errors [Tue Oct 16 04:42:47.476945 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/django/forms/forms.py", line 175, in errors [Tue Oct 16 04:42:47.476954 2018] [:error] [pid 4688] self.full_clean() [Tue Oct 16 04:42:47.476963 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/django/forms/forms.py", line 385, in full_clean [Tue Oct 16 04:42:47.476971 2018] [:error] [pid 4688] self._clean_form() [Tue Oct 16 04:42:47.476980 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/django/forms/forms.py", line 412, in _clean_form [Tue Oct 16 04:42:47.476989 2018] [:error] [pid 4688] cleaned_data = self.clean() [Tue Oct 16 04:42:47.476998 2018] [:error] [pid 4688] File "/usr/share/openstack-dashboard/openstack_dashboard/dashboards/identity/projects/workflows.py", line 68, in clean [Tue Oct 16 04:42:47.477007 2018] [:error] [pid 4688] targets=tuple(self._quota_fields)) [Tue Oct 16 04:42:47.477016 2018] [:error] [pid 4688] File "/usr/lib/python2.7/site-packages/horizon/utils/memoized.py", line 105, in wrapped [Tue Oct 16 04:42:47.477024 2018] [:error] [pid 4688] value = func(*args, **kwargs) [Tue Oct 16 04:42:47.477033 2018] [:error] [pid 4688] File "/usr/share/openstack-dashboard/openstack_dashboard/usage/quotas.py", line 425, in tenant_quota_usages [Tue Oct 16 04:42:47.477042 2018] [:error] [pid 4688] disabled_quotas = get_disabled_quotas(request, targets) [Tue Oct 16 04:42:47.477051 2018] [:error] [pid 4688] File "/usr/share/openstack-dashboard/openstack_dashboard/usage/quotas.py", line 244, in get_disabled_quotas [Tue Oct 16 04:42:47.477072 2018] [:error] [pid 4688] % set(targets) - QUOTA_FIELDS) [Tue Oct 16 04:42:47.477082 2018] [:error] [pid 4688] TypeError: unsupported operand type(s) for -: 'str' and 'set' my local_settings: import os from django.utils.translation import ugettext_lazy as _ from openstack_dashboard.settings import HORIZON_CONFIG DEBUG = False WEBROOT = '/dashboard/' ALLOWED_HOSTS = ['openstack.luselab.local'] SESSION_ENGINE = 'django.contrib.sessions.backends.cache' OPENSTACK_API_VERSIONS = { "identity": 3, "volume": 2, "compute": 2, } OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default' LOCAL_PATH = '/tmp' SECRET_KEY='f0b0174732bef7dc3d78' CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', }, } EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' OPENSTACK_HOST = "openstack.luselab.local" SESSION_ENGINE = 'django.contrib.sessions.backends.cache' OPENSTACK_KEYSTONE_URL = "http://controller:5000/v3" OPENSTACK_KEYSTONE_DEFAULT_ROLE = "myrole" OPENSTACK_KEYSTONE_BACKEND = { 'name': 'native', 'can_edit_user': True, 'can_edit_group': True, 'can_edit_project': True, 'can_edit_domain': True, 'can_edit_role': True, } OPENSTACK_HYPERVISOR_FEATURES = { 'can_set_mount_point': False, 'can_set_password': False, 'requires_keypair': False, 'enable_quotas': True } OPENSTACK_CINDER_FEATURES = { 'enable_backup': False, } OPENSTACK_SOURCE_BOOT = { 'enable_image': True, 'enable_snapshot': True, 'enable_volume': True, } OPENSTACK_NEUTRON_NETWORK = { 'enable_router': True, 'enable_quotas': True, 'enable_ipv6': True, 'enable_distributed_router': False, 'enable_ha_router': False, 'enable_fip_topology_check': True, # Default dns servers you would like to use when a subnet is # created. This is only a default, users can still choose a different # list of dns servers when creating a new subnet. # The entries below are examples only, and are not appropriate for # real deployments # 'default_dns_nameservers': ["8.8.8.8", "8.8.4.4", "208.67.222.222"], # Set which provider network types are supported. Only the network types # in this list will be available to choose from when creating a network. # Network types include local, flat, vlan, gre, vxlan and geneve. # 'supported_provider_types': ['*'], # You can configure available segmentation ID range per network type # in your deployment. # 'segmentation_id_range': { # 'vlan': [1024, 2048], # 'vxlan': [4094, 65536], # }, # You can define additional provider network types here. # 'extra_provider_types': { # 'awesome_type': { # 'display_name': 'Awesome New Type', # 'require_physical_network': False, # 'require_segmentation_id': True, # } # }, # Set which VNIC types are supported for port binding. Only the VNIC # types in this list will be available to choose from when creating a # port. # VNIC types include 'normal', 'direct', 'direct-physical', 'macvtap', # 'baremetal' and 'virtio-forwarder' # Set to empty list or None to disable VNIC type selection. 'supported_vnic_types': ['*'], # Set list of available physical networks to be selected in the physical # network field on the admin create network modal. If it's set to an empty # list, the field will be a regular input field. # e.g. ['default', 'test'] 'physical_networks': [], } OPENSTACK_HEAT_STACK = { 'enable_user_pass': True, } IMAGE_CUSTOM_PROPERTY_TITLES = { "architecture": _("Architecture"), "kernel_id": _("Kernel ID"), "ramdisk_id": _("Ramdisk ID"), "image_state": _("Euca2ools state"), "project_id": _("Project ID"), "image_type": _("Image Type"), } IMAGE_RESERVED_CUSTOM_PROPERTIES = [] API_RESULT_LIMIT = 1000 API_RESULT_PAGE_SIZE = 20 SWIFT_FILE_TRANSFER_CHUNK_SIZE = 512 * 1024 INSTANCE_LOG_LENGTH = 35 DROPDOWN_MAX_ITEMS = 30 TIME_ZONE = "America/New_York" POLICY_FILES_PATH = '/etc/openstack-dashboard' LOGGING = { 'version': 1, # When set to True this will disable all logging except # for loggers specified in this configuration dictionary. Note that # if nothing is specified here and disable_existing_loggers is True, # django.db.backends will still log unless it is disabled explicitly. 'disable_existing_loggers': False, # If apache2 mod_wsgi is used to deploy OpenStack dashboard # timestamp is output by mod_wsgi. If WSGI framework you use does not # output timestamp for logging, add %(asctime)s in the following # format definitions. 'formatters': { 'console': { 'format': '%(levelname)s %(name)s %(message)s' }, 'operation': { # The format of "%(message)s" is defined by # OPERATION_LOG_OPTIONS['format'] 'format': '%(message)s' }, }, 'handlers': { 'null': { 'level': 'DEBUG', 'class': 'logging.NullHandler', }, 'console': { # Set the level to "DEBUG" for verbose output logging. 'level': 'INFO', 'class': 'logging.StreamHandler', 'formatter': 'console', }, 'operation': { 'level': 'INFO', 'class': 'logging.StreamHandler', 'formatter': 'operation', }, }, 'loggers': { 'horizon': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'horizon.operation_log': { 'handlers': ['operation'], 'level': 'INFO', 'propagate': False, }, 'openstack_dashboard': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'novaclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'cinderclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'keystoneauth': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'keystoneclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'glanceclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'neutronclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'swiftclient': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'oslo_policy': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'openstack_auth': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, 'django': { 'handlers': ['console'], 'level': 'DEBUG', 'propagate': False, }, # Logging from django.db.backends is VERY verbose, send to null # by default. 'django.db.backends': { 'handlers': ['null'], 'propagate': False, }, 'requests': { 'handlers': ['null'], 'propagate': False, }, 'urllib3': { 'handlers': ['null'], 'propagate': False, }, 'chardet.charsetprober': { 'handlers': ['null'], 'propagate': False, }, 'iso8601': { 'handlers': ['null'], 'propagate': False, }, 'scss': { 'handlers': ['null'], 'propagate': False, }, }, } SECURITY_GROUP_RULES = { 'all_tcp': { 'name': _('All TCP'), 'ip_protocol': 'tcp', 'from_port': '1', 'to_port': '65535', }, 'all_udp': { 'name': _('All UDP'), 'ip_protocol': 'udp', 'from_port': '1', 'to_port': '65535', }, 'all_icmp': { 'name': _('All ICMP'), 'ip_protocol': 'icmp', 'from_port': '-1', 'to_port': '-1', }, 'ssh': { 'name': 'SSH', 'ip_protocol': 'tcp', 'from_port': '22', 'to_port': '22', }, 'smtp': { 'name': 'SMTP', 'ip_protocol': 'tcp', 'from_port': '25', 'to_port': '25', }, 'dns': { 'name': 'DNS', 'ip_protocol': 'tcp', 'from_port': '53', 'to_port': '53', }, 'http': { 'name': 'HTTP', 'ip_protocol': 'tcp', 'from_port': '80', 'to_port': '80', }, 'pop3': { 'name': 'POP3', 'ip_protocol': 'tcp', 'from_port': '110', 'to_port': '110', }, 'imap': { 'name': 'IMAP', 'ip_protocol': 'tcp', 'from_port': '143', 'to_port': '143', }, 'ldap': { 'name': 'LDAP', 'ip_protocol': 'tcp', 'from_port': '389', 'to_port': '389', }, 'https': { 'name': 'HTTPS', 'ip_protocol': 'tcp', 'from_port': '443', 'to_port': '443', }, 'smtps': { 'name': 'SMTPS', 'ip_protocol': 'tcp', 'from_port': '465', 'to_port': '465', }, 'imaps': { 'name': 'IMAPS', 'ip_protocol': 'tcp', 'from_port': '993', 'to_port': '993', }, 'pop3s': { 'name': 'POP3S', 'ip_protocol': 'tcp', 'from_port': '995', 'to_port': '995', }, 'ms_sql': { 'name': 'MS SQL', 'ip_protocol': 'tcp', 'from_port': '1433', 'to_port': '1433', }, 'mysql': { 'name': 'MYSQL', 'ip_protocol': 'tcp', 'from_port': '3306', 'to_port': '3306', }, 'rdp': { 'name': 'RDP', 'ip_protocol': 'tcp', 'from_port': '3389', 'to_port': '3389', }, } REST_API_REQUIRED_SETTINGS = ['OPENSTACK_HYPERVISOR_FEATURES', 'LAUNCH_INSTANCE_DEFAULTS', 'OPENSTACK_IMAGE_FORMATS', 'OPENSTACK_KEYSTONE_BACKEND', 'OPENSTACK_KEYSTONE_DEFAULT_DOMAIN', 'CREATE_IMAGE_DEFAULTS', 'ENFORCE_PASSWORD_CHECK'] ALLOWED_PRIVATE_SUBNET_CIDR = {'ipv4': [], 'ipv6': []} To manage notifications about this bug go to: https://bugs.launchpad.net/horizon/+bug/1798048/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : yahoo-eng-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp