Пример #1
0
class UpdateQuotas(forms.SelfHandlingForm):
    tenant_id = forms.CharField(label="ID (name)",
            widget=forms.TextInput(attrs={'readonly': 'readonly'}))
    metadata_items = forms.CharField(label="Metadata Items")
    injected_files = forms.CharField(label="Injected Files")
    injected_file_content_bytes = forms.CharField(label="Injected File "
                                                        "Content Bytes")
    cores = forms.CharField(label="VCPUs")
    instances = forms.CharField(label="Instances")
    volumes = forms.CharField(label="Volumes")
    gigabytes = forms.CharField(label="Gigabytes")
    ram = forms.CharField(label="RAM (in MB)")
    floating_ips = forms.CharField(label="Floating IPs")

    def handle(self, request, data):
        try:
            api.admin_api(request).quota_sets.update(data['tenant_id'],
               metadata_items=data['metadata_items'],
               injected_file_content_bytes=data['injected_file_content_bytes'],
               volumes=data['volumes'],
               gigabytes=data['gigabytes'],
               ram=int(data['ram']) * 100,
               floating_ips=data['floating_ips'],
               instances=data['instances'],
               injected_files=data['injected_files'],
               cores=data['cores'],
            )
            messages.success(request,
                             'Quotas for %s were successfully updated.'
                             % data['tenant_id'])
        except api_exceptions.ApiException, e:
            messages.error(request, 'Unable to update quotas: %s' % e.message)
        return redirect('syspanel_tenants')
Пример #2
0
class UploadObject(forms.SelfHandlingForm):
    name = forms.CharField(max_length="255", label="Object Name")
    object_file = forms.FileField(label="File")
    container_name = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            file = self.files['object_file']
            cont = data['container_name']
            cont = cont.encode('utf-8')
            obj = data['name']
            obj = obj.encode('utf-8')
            obj = obj.replace('/', '%2F')
            api.swift_upload_object_with_manifest(
                request, cont, obj, file,
                request.session.get('storage_url', None))
            messages.success(request, "Object was successfully uploaded.")
        except Exception as e:
            messages.error(request, "Upload Object was failed (%s)" % str(e))
        finally:
            try:
                if getattr(file, 'temporary_file_path', None):
                    name = file.temporary_file_path()
                    file.close()
                    os.remove(name)
            except Exception, e:
                LOG.exception('file delete failed %s' % str(e))

        return None
Пример #3
0
class FloatingIpAssociate(forms.SelfHandlingForm):
    floating_ip_id = forms.CharField(widget=forms.HiddenInput())
    floating_ip = forms.CharField(widget=forms.TextInput(
        attrs={'readonly': 'readonly'}))
    instance_id = forms.ChoiceField()

    def __init__(self, *args, **kwargs):
        super(FloatingIpAssociate, self).__init__(*args, **kwargs)
        instancelist = kwargs.get('initial', {}).get('instances', [])
        self.fields['instance_id'] = forms.ChoiceField(choices=instancelist,
                                                       label="Instance")

    def handle(self, request, data):
        try:
            api.server_add_floating_ip(request, data['instance_id'],
                                       data['floating_ip_id'])
            LOG.info('Associating Floating IP "%s" with Instance "%s"' %
                     (data['floating_ip'], data['instance_id']))
            messages.info(
                request, 'Successfully associated Floating IP: %s \
                                    with Instance: %s' %
                (data['floating_ip'], data['instance_id']))
        except novaclient_exceptions.ClientException, e:
            LOG.error("ClientException in FloatingIpAssociate", exc_info=True)
            messages.error(request,
                           'Error associating Floating IP: %s' % e.message)
        return shortcuts.redirect('dash_floating_ips', request.user.tenant)
Пример #4
0
class ContainerMetaRemove(forms.SelfHandlingForm):
    container_name = forms.CharField(widget=forms.HiddenInput())
    header_name = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        super(ContainerMetaRemove, self).__init__(*args, **kwargs)

    def handle(self, request, data):
        header = data['header_name']
        container_name = data['container_name']

        if not header.lower().startswith('x-container-meta'):
            messages.error(
                request,
                "Container metadata must begin with x-container-meta-")
        else:
            hdrs = {}
            hdrs[header] = ''
            try:
                api.swift_set_container_info(request, container_name, hdrs)
            except ResponseError, e:
                messages.error(
                    request,
                    'Unable to remove metadata from container : %s' % str(e))

        return None
Пример #5
0
class ObjectMeta(forms.SelfHandlingForm):
    container_name = forms.CharField(widget=forms.HiddenInput())
    object_name = forms.CharField(widget=forms.HiddenInput())
    header_name = forms.CharField(max_length="128", label="Name")
    header_value = forms.CharField(max_length="256", label="Value")

    def __init__(self, *args, **kwargs):
        super(ObjectMeta, self).__init__(*args, **kwargs)

    def handle(self, request, data):
        header = data['header_name']
        value = data['header_value']
        container_name = data['container_name']
        object_name = data['object_name']

        if not header.lower().startswith('x-object-meta-'):
            messages.error(request,
                           'Object metadata must begin with x-object-meta-')
        else:
            hdrs = {}
            hdrs[header[14:]] = value
            api.swift_set_object_info(request, container_name, object_name,
                                      hdrs)

        return shortcuts.redirect(request.build_absolute_uri())
Пример #6
0
class Login(forms.SelfHandlingForm):
    username = forms.CharField(max_length="20", label="User Name")
    password = forms.CharField(max_length="20",
                               label="Password",
                               widget=forms.PasswordInput(render_value=False))

    def handle(self, request, data):
        try:
            token = api.token_create(request, data.get('tenant', ''),
                                     data['username'], data['password'])
            info = api.token_info(request, token)

            request.session['token'] = token.id
            request.session['user'] = info['user']
            request.session['tenant'] = data.get('tenant', info['tenant'])
            request.session['admin'] = info['admin']
            request.session['serviceCatalog'] = token.serviceCatalog
            LOG.info('Login form for user "%s". Service Catalog data:\n%s' %
                     (data['username'], token.serviceCatalog))

            return shortcuts.redirect('dash_overview')

        except api_exceptions.Unauthorized as e:
            msg = 'Error authenticating: %s' % e.message
            LOG.error(msg, exc_info=True)
            messages.error(request, msg)
        except api_exceptions.ApiException as e:
            messages.error(
                request, 'Error authenticating with keystone: %s' % e.message)
Пример #7
0
class CopyObject(forms.SelfHandlingForm):
    new_container_name = forms.ChoiceField(
        label="Container to store object in")

    new_object_name = forms.CharField(max_length="255",
                                      label="New object name")
    orig_container_name = forms.CharField(widget=forms.HiddenInput())
    orig_object_name = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        containers = kwargs.pop('containers')

        super(CopyObject, self).__init__(*args, **kwargs)

        self.fields['new_container_name'].choices = containers

    def handle(self, request, data):
        orig_container_name = data['orig_container_name']
        orig_object_name = data['orig_object_name']
        new_container_name = data['new_container_name']
        new_object_name = data['new_object_name']

        api.swift_copy_object(request, orig_container_name,
                              orig_object_name, new_container_name,
                              new_object_name)

        messages.success(request,
                         'Object was successfully copied to %s\%s' %
                         (new_container_name, new_object_name))

        return shortcuts.redirect(request.build_absolute_uri())
Пример #8
0
class ToggleService(forms.SelfHandlingForm):
    service = forms.CharField(required=False)
    name = forms.CharField(required=False)

    def handle(self, request, data):
        try:
            service = api.service_get(request, data['service'])
            api.service_update(request, data['service'], not service.disabled)
            if service.disabled:
                messages.info(
                    request,
                    _("Service '%s' has been enabled") % data['name'])
            else:
                messages.info(
                    request,
                    _("Service '%s' has been disabled") % data['name'])
        except api_exceptions.ApiException, e:
            LOG.exception('ApiException while toggling service %s' %
                          data['service'])
            messages.error(
                request,
                _("Unable to update service '%(name)s': %(msg)s") % {
                    "name": data['name'],
                    "msg": e.message
                })

        return redirect(request.build_absolute_uri())
Пример #9
0
class ObjectMetaRemove(forms.SelfHandlingForm):
    container_name = forms.CharField(widget=forms.HiddenInput())
    object_name = forms.CharField(widget=forms.HiddenInput())
    header_name = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        super(ObjectMetaRemove, self).__init__(*args, **kwargs)

    def handle(self, request, data):
        header = data['header_name']
        container_name = data['container_name']
        object_name = data['object_name']

        if not header.lower().startswith('x-object-meta-'):
            messages.error(request,
                           'Object metadata must begin with x-object-meta-')
        else:
            hdrs = {}
            hdrs[header[14:]] = ''
            try:
                api.swift_remove_object_info(
                    request, container_name, object_name, hdrs,
                    request.session.get('storage_url', None))
            except ResponseError, e:
                messages.error(request,
                               'Removing Object Metadata fails %s' % str(e))

        return None
Пример #10
0
class CreateSnapshot(forms.SelfHandlingForm):
    tenant_id = forms.CharField(widget=forms.HiddenInput())
    instance_id = forms.CharField(widget=forms.TextInput(
        attrs={'readonly': 'readonly'}))
    name = forms.CharField(max_length="20", label=_("Snapshot Name"))

    def handle(self, request, data):
        try:
            LOG.info('Creating snapshot "%s"' % data['name'])
            snapshot = api.snapshot_create(request, data['instance_id'],
                                           data['name'])
            instance = api.server_get(request, data['instance_id'])

            messages.info(
                request,
                _('Snapshot "%(name)s" created for instance "%(inst)s"') % {
                    "name": data['name'],
                    "inst": instance.name
                })
            return shortcuts.redirect('dash_snapshots', data['tenant_id'])
        except api_exceptions.ApiException, e:
            msg = _('Error Creating Snapshot: %s') % e.message
            LOG.exception(msg)
            messages.error(request, msg)
            return shortcuts.redirect(request.build_absolute_uri())
Пример #11
0
class UpdateImageForm(forms.SelfHandlingForm):
    image_id = forms.CharField(widget=forms.HiddenInput())
    name = forms.CharField(max_length="25", label="Name")
    location = forms.CharField(label="Location")
    user = forms.CharField(label="User")
    password = forms.CharField(widget=forms.PasswordInput, label="Password")

    def handle(self, request, data):
        image_id = data['image_id']
        tenant_id = request.user.tenant_id
        error_retrieving = _('Unable to retreive image info from glance: %s' % image_id)
        error_updating = _('Error updating image with id: %s' % image_id)

        scheme, location = _parse_location(data['location'])
        auth = ":".join([data['user'] , data['password']])

        try:
            image = api.image_get_meta(request, image_id)
            #image = api.image_get(request, image_id)
        except glance_exception.ClientConnectionError, e:
            LOG.exception(_('Error connecting to glance'))
            messages.error(request, error_retrieving)
        except glance_exception.Error, e:
            LOG.exception(error_retrieving)
            messages.error(request, error_retrieving)
Пример #12
0
class AddRule(forms.SelfHandlingForm):
    ip_protocol = forms.ChoiceField(choices=[('tcp',
                                              'tcp'), ('udp',
                                                       'udp'), ('icmp',
                                                                'icmp')])
    from_port = forms.CharField()
    to_port = forms.CharField()
    cidr = forms.CharField()
    # TODO (anthony) source group support
    # group_id = forms.CharField()

    security_group_id = forms.CharField(widget=forms.HiddenInput())
    tenant_id = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        tenant_id = data['tenant_id']
        try:
            LOG.info('Add security_group_rule: "%s"' % data)

            rule = api.security_group_rule_create(
                request, data['security_group_id'], data['ip_protocol'],
                data['from_port'], data['to_port'], data['cidr'])
            messages.info(request, 'Successfully added rule: %s' \
                                    % rule.id)
        except novaclient_exceptions.ClientException, e:
            LOG.error("ClientException in AddRule", exc_info=True)
            messages.error(request,
                           'Error adding rule security group: %s' % e.message)
        return shortcuts.redirect(request.build_absolute_uri())
Пример #13
0
class UpdateTenant(forms.SelfHandlingForm):
    id = forms.CharField(
        label=_("ID"), widget=forms.TextInput(attrs={'readonly': 'readonly'}))
    name = forms.CharField(
        label=_("Name"),
        widget=forms.TextInput(attrs={'readonly': 'readonly'}))
    description = forms.CharField(widget=forms.widgets.Textarea(),
                                  label=_("Description"))
    enabled = forms.BooleanField(required=False, label=_("Enabled"))

    def handle(self, request, data):
        try:
            LOG.info('Updating tenant with id "%s"' % data['id'])
            api.tenant_update(request, data['id'], data['name'],
                              data['description'], data['enabled'])
            messages.success(request,
                             _('%s was successfully updated.') % data['name'])
        except api_exceptions.ApiException, e:
            LOG.exception(
                'ApiException while updating tenant\n'
                'Id: "%s", Name: "%s", Description: "%s", Enabled "%s"' %
                (data['id'], data['name'], data['description'],
                 data['enabled']))
            messages.error(request,
                           _('Unable to update tenant: %s') % e.message)
        return redirect('syspanel_tenants')
Пример #14
0
class ContainerMeta(forms.SelfHandlingForm):
    ''' Form that handles Swift Container Meta Data '''
    container_name = forms.CharField(widget=forms.HiddenInput())
    header_name = forms.CharField(
        max_length="128",
        label='Name',
        required=True,
        validators=[validators.MaxLengthValidator(128)])
    header_value = forms.CharField(
        max_length="256",
        label="Value",
        required=True,
        validators=[validators.MaxLengthValidator(256)])

    def __init__(self, *args, **kwargs):
        super(ContainerMeta, self).__init__(*args, **kwargs)

    def handle(self, request, data):
        header = data['header_name']
        value = data['header_value']
        container_name = data['container_name']

        if not header.lower().startswith('x-container-meta'):
            messages.error(
                request,
                "Container metadata must begin with x-container-meta-")
        else:
            hdrs = {}
            hdrs[header] = value
            api.swift_set_container_info(request, container_name, hdrs)

        return shortcuts.redirect(request.build_absolute_uri())
Пример #15
0
class MakePublicContainer(forms.SelfHandlingForm):
    index_object_name = forms.ChoiceField(label="Object used for index.html")
    css_object_name = forms.ChoiceField(
        label="Object used as a css file for listing Container")
    error = forms.CharField(max_length="255",
                            label="file suffix to be used when error occurs",
                            required=False)
    public_html = forms.BooleanField(label="Published as HTML", required=False)
    use_css_in_listing = forms.BooleanField(
        label="Use CSS file for listing Container", required=False)
    html_listing = forms.BooleanField(label="Enable Container listing",
                                      required=False)
    container_name = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        objects = kwargs.pop('objects')
        headers = kwargs.pop('headers')
        super(MakePublicContainer, self).__init__(*args, **kwargs)
        self.fields['index_object_name'].choices = objects
        self.fields['css_object_name'].choices = objects

        for name, value in headers:
            name = name.lower()
            if name == 'x-container-meta-web-index':
                self.fields['public_html'].initial = True
                self.fields['index_object_name'].initial = (value, value)
            if name == 'x-container-meta-web-listing':
                self.fields['html_listing'].initial = value == 'true'
            if name == 'x-container-meta-web-listing-css':
                self.fields['use_css_in_listing'].initial = True
                self.fields['css_object_name'].initial = (value, value)
            if name == 'x-container-meta-web-error':
                self.fields['error'].value = value

    def handle(self, request, data):
        hdrs = {}
        index_object_name = data['index_object_name']
        css_object_name = data['css_object_name']
        public_html = data['public_html']
        error = data['error']
        html_listing = data['html_listing']
        use_css_in_listing = data['use_css_in_listing']
        container_name = data['container_name']
        for name in ['Index', 'Listing', 'Listing-Css', 'Error']:
            hdrs['X-Container-Meta-Web-' + name] = ''
        if public_html:
            hdrs['X-Container-Meta-Web-Index'] = index_object_name
        if html_listing:
            hdrs['X-Container-Meta-Web-Listing'] = 'true'
        if use_css_in_listing:
            hdrs['X-Container-Meta-Web-Listing-Css'] = css_object_name
        if error:
            hdrs['X-Container-Meta-Web-Error'] = error

        api.swift_set_container_info(request, container_name, hdrs)

        return shortcuts.redirect("dash_containers", request.user.tenant_id)
Пример #16
0
class UploadObject(forms.SelfHandlingForm):
    name = forms.CharField(max_length="255", label=_("Object Name"))
    object_file = forms.FileField(label=_("File"))
    container_name = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        api.swift_upload_object(request, data['container_name'], data['name'],
                                self.files['object_file'].read())

        messages.success(request, _("Object was successfully uploaded."))
        return shortcuts.redirect(request.build_absolute_uri())
Пример #17
0
class DeleteObject(forms.SelfHandlingForm):
    object_name = forms.CharField(widget=forms.HiddenInput())
    container_name = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        api.swift_delete_object(request, data['container_name'],
                                data['object_name'])
        messages.info(request,
                      'Successfully deleted object: %s' % \
                      data['object_name'])
        return shortcuts.redirect(request.build_absolute_uri())
Пример #18
0
class DeleteObject(forms.SelfHandlingForm):
    object_name = forms.CharField(widget=forms.HiddenInput())
    container_name = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        api.swift_delete_object(request, data['container_name'],
                                data['object_name'],
                                request.session.get('storage_url', None))
        messages.info(request,
                      'Successfully deleted object: %s' % \
                      data['object_name'])
        return None
Пример #19
0
class Login(forms.SelfHandlingForm):
    username = forms.CharField(max_length="255", label="User Name")
    password = forms.CharField(max_length="255",
                               label="Password",
                               widget=forms.PasswordInput(render_value=False))

    def handle(self, request, data):

        # retrieve endpoints
        if getattr(settings, "KEYSTONE_USE_LOCAL_FOR_ENDPOINTS_ONLY", False):
            token = util.auth_with_token(
                request, data, getattr(settings, "KEYSTONE_ADMIN_TOKEN", ''))
        else:
            token = util.auth(request, data, data.get('region'), True)

        if not token:
            request.session.clear()
            return shortcuts.redirect('auth_login')

        # set default service catalog
        util.set_default_service_catalog(request, token.serviceCatalog)

        # region
        results = util.get_regions(request)
        LOG.info('results %s' % results)

        tokens = []
        for result in results:
            data['region'] = result
            token = util.auth(request, data, result, True)
            if token:
                tokens.append(result)

        if not tokens:
            request.session.clear()
            return shortcuts.redirect('auth_login')

        default_region = getattr(settings, 'SWIFT_DEFAULT_REGION', None)
        if default_region and api.token_for_region(request, default_region):
            request.session['region'] = default_region

        if not request.session.get('region', None):
            request.session['region'] = tokens[0]

        tenant = util.get_tenant_for_region(request)
        util.set_default_for_region(request)
        api.check_services_for_region(request)

        if not tenant:
            return shortcuts.redirect('dash_startup')

        return shortcuts.redirect('dash_containers', tenant)
Пример #20
0
class DetachPort(forms.SelfHandlingForm):
    network = forms.CharField(widget=forms.HiddenInput())
    port = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            LOG.info('Detaching port %s' % data['port'])
            api.quantum_detach_port(request, data['network'], data['port'])
        except Exception, e:
            messages.error(request,
                           'Unable to detach port %s: %s' %
                           (data['port'], e.message,))
        else:
Пример #21
0
class UserForm(forms.Form):
    def __init__(self, *args, **kwargs):
        tenant_list = kwargs.pop('tenant_list', None)
        super(UserForm, self).__init__(*args, **kwargs)
        self.fields['tenant_id'].choices = [[tenant.id, tenant.id]
                                            for tenant in tenant_list]

    id = forms.CharField(label="ID (username)")
    email = forms.CharField(label="Email")
    password = forms.CharField(label="Password",
                               widget=forms.PasswordInput(render_value=False),
                               required=False)
    tenant_id = forms.ChoiceField(label="Primary Tenant")
Пример #22
0
class LoginWithTenant(Login):
    username = forms.CharField(
        max_length="255",
        widget=forms.TextInput(attrs={'readonly': 'readonly'}))
    tenant = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        tenant = data['tenant']
        region = request.session.get('region', None)
        token = util.auth(request, data, region)
        if not token:
            return None
        if not tenant:
            return shortcuts.redirect('dash_startup')
        return shortcuts.redirect('dash_containers', tenant)
Пример #23
0
class CreateFlavor(forms.SelfHandlingForm):
    flavorid = forms.CharField(max_length="10", label="Flavor ID")
    name = forms.CharField(max_length="25", label="Name")
    vcpus = forms.CharField(max_length="5", label="VCPUs")
    memory_mb = forms.CharField(max_length="5", label="Memory MB")
    disk_gb = forms.CharField(max_length="5", label="Disk GB")

    def handle(self, request, data):
        api.flavor_create(request, data['name'], int(data['memory_mb']),
                          int(data['vcpus']), int(data['disk_gb']),
                          int(data['flavorid']))
        msg = '%s was successfully added to flavors.' % data['name']
        LOG.info(msg)
        messages.success(request, msg)
        return redirect('syspanel_flavors')
Пример #24
0
class RemoveUser(forms.SelfHandlingForm):
    user = forms.CharField()
    tenant = forms.CharField()

    def handle(self, request, data):
        try:
            api.account_api(request).role_refs.delete_for_tenant_user(
                data['tenant'], data['user'], 'Member')
            messages.success(
                request, '%s was successfully removed from %s.' %
                (data['user'], data['tenant']))
        except api_exceptions.ApiException, e:
            messages.error(request,
                           'Unable to create tenant: %s' % (e.message))
        return redirect('syspanel_tenants')
Пример #25
0
class TogglePort(forms.SelfHandlingForm):
    network = forms.CharField(widget=forms.HiddenInput())
    port = forms.CharField(widget=forms.HiddenInput())
    state = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            LOG.info('Toggling port state to %s' % data['state'])
            body = {'port': {'state': '%s' % data['state']}}
            api.quantum_set_port_state(request,
                                       data['network'], data['port'], body)
        except Exception, e:
            messages.error(request,
                           'Unable to set port state to %s: %s' %
                           (data['state'], e.message,))
        else:
Пример #26
0
class RemoveUser(forms.SelfHandlingForm):
    user = forms.CharField()
    tenant = forms.CharField()

    def handle(self, request, data):
        try:
            api.role_delete_for_tenant_user(
                request, data['tenant'], data['user'],
                settings.OPENSTACK_KEYSTONE_DEFAULT_ROLE)
            messages.success(
                request, '%s was successfully removed from %s.' %
                (data['user'], data['tenant']))
        except api_exceptions.ApiException, e:
            messages.error(request,
                           'Unable to create tenant: %s' % (e.message))
        return redirect('syspanel_tenant_users', tenant_id=data['tenant'])
Пример #27
0
class CreateContainer(forms.SelfHandlingForm):
    name = forms.CharField(max_length="255", label="Container Name")

    def handle(self, request, data):
        api.swift_create_container(request, data['name'])
        messages.success(request, "Container was successfully created.")
        return shortcuts.redirect("dash_containers", request.user.tenant_id)
Пример #28
0
class AddUser(forms.SelfHandlingForm):
    user = forms.CharField()
    tenant = forms.CharField()

    def handle(self, request, data):
        try:
            api.account_api(request).role_refs.add_for_tenant_user(
                data['tenant'], data['user'],
                settings.OPENSTACK_KEYSTONE_DEFAULT_ROLE)
            messages.success(
                request, '%s was successfully added to %s.' %
                (data['user'], data['tenant']))
        except api_exceptions.ApiException, e:
            messages.error(
                request, 'Unable to create user association: %s' % (e.message))
        return redirect('syspanel_tenants')
Пример #29
0
class UserUpdateForm(forms.Form):
    def __init__(self, *args, **kwargs):
        tenant_list = kwargs.pop('tenant_list', None)
        super(UserUpdateForm, self).__init__(*args, **kwargs)
        self.fields['tenant_id'].choices = [[tenant.id, tenant.name]
                for tenant in tenant_list]

    id = forms.CharField(label="ID",
            widget=forms.TextInput(attrs={'readonly': 'readonly'}))
    # FIXME: keystone doesn't return the username from a get API call.
    #name = forms.CharField(label="Name")
    email = forms.CharField(label="Email")
    password = forms.CharField(label="Password",
                               widget=forms.PasswordInput(render_value=False),
                               required=False)
    tenant_id = forms.ChoiceField(label="Primary Tenant")
Пример #30
0
class DeleteImage(forms.SelfHandlingForm):
    image_id = forms.CharField(required=True)

    def handle(self, request, data):
        image_id = data['image_id']
        tenant_id = request.user.tenant_id
        try:
            image = api.image_get(request, image_id)
            if image.owner == request.user.username:
                api.image_delete(request, image_id)
            else:
                messages.info(
                    request,
                    _("Unable to delete image, you are not \
                                         its owner."))
                return redirect('dash_images_update', tenant_id, image_id)
        except glance_exception.ClientConnectionError, e:
            LOG.exception("Error connecting to glance")
            messages.error(request,
                           _("Error connecting to glance: %s") % e.message)
        except glance_exception.Error, e:
            LOG.exception('Error deleting image with id "%s"' % image_id)
            messages.error(
                request,
                _("Error deleting image: %(image)s: %i(msg)s") % {
                    "image": image_id,
                    "msg": e.message
                })