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

Reply via email to