cant modify project quotas with manila-ui plugin

Bug #1798048 reported by Sebastian Lusenti
24
This bug affects 5 people
Affects Status Importance Assigned to Milestone
OpenStack Dashboard (Horizon)
Fix Released
Medium
Gloria Gu

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': []}

no longer affects: centos
description: updated
Ivan Kolodyazhny (e0ne)
Changed in horizon:
status: New → Confirmed
importance: Undecided → Medium
Revision history for this message
Ben O'Hara (bohara) wrote :

I still see this is rocky.

On the admin/defaults page, it lists the quotas, but when editing, only shares and share networks are pre filled.

Trying to save fails with the error above.

Also on project modify quota page, its not possible to edit any quotas as the share quotas are missing (all of them) and cant add as get the error above

Revision history for this message
Ben O'Hara (bohara) wrote :

Infact, on admin/defaults you can add the three missing values and edit, then it lists the new values on the page...click edit again and the 3 are missing

Revision history for this message
Ben O'Hara (bohara) wrote :

I've got this in the config, of which the first 5 are shown in horizon and appear to be the initial defaults?

quota_shares = 50
quota_gigabytes = 10000
quota_snapshots = 50
quota_snapshot_gigabytes = 10000
quota_share_networks = 10
quota_share_groups = 50
quota_share_group_snapshots = 50
max_gigabytes = 20000

Revision history for this message
Gary W. Smith (gary-w-smith) wrote :

FWIW, the line that is causing the TypeError is:

  raise ValueError('Unknown quota field names are included: %s'
       % set(targets) - QUOTA_FIELDS)

the problem is that the % is higher precedence that the set difference (-), so the % is yielding a string that is then passed into the set difference. That could be easily remedied with parentheses:

  raise ValueError('Unknown quota field names are included: %s'
       % (set(targets) - QUOTA_FIELDS))

But that really doesn't address the underlying cause.

Revision history for this message
Akihiro Motoki (amotoki) wrote :

You seem to use manila-ui. Does it happen when manila-ui is enabled or does it still happen when only horizon is enabled?

Revision history for this message
Noor Yameen (nooryameen19) wrote :

i am facing the same issue and it only appears when i manila-ui is enabled

Gloria Gu (gloria-gu)
Changed in horizon:
assignee: nobody → Gloria Gu (gloria-gu)
Revision history for this message
Gloria Gu (gloria-gu) wrote :

We have some customers complain about the issue. After a little bit digging, there are a couple of issues for manila-ui integration:

1) the block in openstack_dashboard/usage/quotas.py
@profiler.trace
def get_disabled_quotas(request, targets=None):
    if targets:
        if set(targets) - QUOTA_FIELDS:
            raise ValueError('Unknown quota field names are included: %s'
                             #% set(targets) - QUOTA_FIELDS)
                            %(set(targets) - QUOTA_FIELDS))
        candidates = set(targets)

in my opinion, if set(targets) - QUOTA_FIELDS: block should be removed.

targets are passed in from openstack_dashboard/dashboards/identity/projects/workflows.py

class CommonQuotaAction(workflows.Action):
       def clean(self):
        cleaned_data = super(CommonQuotaAction, self).clean()
        usages = quotas.tenant_quota_usages(
            self.request, tenant_id=self.initial['project_id'],
            targets=tuple(self._quota_fields))

as you can see targets=tuple(self._quota_fields)

Each QuotaAction has the implementation for that _quota_fields

_quota_fields = quotas.CINDER_QUOTA_FIELDS
_quota_fields = quotas.NEUTRON_QUOTA_FIELDS
_quota_fields = quotas.NOVA_QUOTA_FIELDS
_quota_fields = api_manila.MANILA_QUOTA_FIELDS

However in quotas.py QUOTA_FIELDS = NOVA_QUOTA_FIELDS | CINDER_QUOTA_FIELDS | NEUTRON_QUOTA_FIELDS

So it will always having problems for plugins. And will always ok for cinder, compute and neutron.

I removed the block and now save works. However the saved values can not be loaded when open the modal again since there are some data fields mismatched and manila-ui implementation missing the implementation to get quota. I will file a defect against manila-ui.

summary: - cant modify project quotas
+ cant modify project quotas with manila-ui plugin
Revision history for this message
Gloria Gu (gloria-gu) wrote :
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to horizon (master)

Fix proposed to branch: master
Review: https://review.opendev.org/679513

Gloria Gu (gloria-gu)
Changed in horizon:
status: Confirmed → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to horizon (master)

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 <email address hidden>
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
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to horizon (stable/stein)

Fix proposed to branch: stable/stein
Review: https://review.opendev.org/686005

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to horizon (stable/train)

Fix proposed to branch: stable/train
Review: https://review.opendev.org/686011

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to horizon (stable/train)

Reviewed: https://review.opendev.org/686011
Committed: https://git.openstack.org/cgit/openstack/horizon/commit/?id=5c284f228af2aafc2861f2035930e420991200dc
Submitter: Zuul
Branch: stable/train

commit 5c284f228af2aafc2861f2035930e420991200dc
Author: Gloria Gu <email address hidden>
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
    (cherry picked from commit 44987f02be671fd81b3dcd8d22f9fa1b219488c2)

tags: added: in-stable-train
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to horizon (stable/stein)

Reviewed: https://review.opendev.org/686005
Committed: https://git.openstack.org/cgit/openstack/horizon/commit/?id=be4d2301bb9654a772990d5d6f7bb2b126c7c127
Submitter: Zuul
Branch: stable/stein

commit be4d2301bb9654a772990d5d6f7bb2b126c7c127
Author: Gloria Gu <email address hidden>
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
    (cherry picked from commit 44987f02be671fd81b3dcd8d22f9fa1b219488c2)

tags: added: in-stable-stein
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/horizon 16.0.0.0rc2

This issue was fixed in the openstack/horizon 16.0.0.0rc2 release candidate.

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to horizon (stable/rocky)

Fix proposed to branch: stable/rocky
Review: https://review.opendev.org/687956

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to horizon (stable/rocky)

Reviewed: https://review.opendev.org/687956
Committed: https://git.openstack.org/cgit/openstack/horizon/commit/?id=93c4ded713c23832237f2c30974e0566574b8134
Submitter: Zuul
Branch: stable/rocky

commit 93c4ded713c23832237f2c30974e0566574b8134
Author: Gloria Gu <email address hidden>
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
    (cherry picked from commit 44987f02be671fd81b3dcd8d22f9fa1b219488c2)
    (cherry picked from commit be4d2301bb9654a772990d5d6f7bb2b126c7c127)

tags: added: in-stable-rocky
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/horizon 14.0.4

This issue was fixed in the openstack/horizon 14.0.4 release.

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/horizon 15.1.1

This issue was fixed in the openstack/horizon 15.1.1 release.

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/horizon 17.0.0

This issue was fixed in the openstack/horizon 17.0.0 release.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.