예제 #1
0
파일: forms.py 프로젝트: wendy-king/x7_venv
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.chase_copy_object(request, orig_container_name, orig_object_name,
                              new_container_name, new_object_name)

        messages.success(
            request,
            _('Object was successfully copied to %(container)s\%(obj)s') % {
                "container": new_container_name,
                "obj": new_object_name
            })

        return shortcuts.redirect("steer:engine:containers:object_index",
                                  data['new_container_name'])
예제 #2
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.success(request, _('Successfully added rule: %s') \
                                    % rule.id)
        except engineclient_exceptions.ClientException, e:
            LOG.exception("ClientException in AddRule")
            messages.error(request, _('Error adding rule security group: %s')
                                     % e.message)
        return shortcuts.redirect(request.build_absolute_uri())
예제 #3
0
class AttachPort(forms.SelfHandlingForm):
    network = forms.CharField(widget=forms.HiddenInput())
    port = forms.CharField(widget=forms.HiddenInput())
    vif_id = forms.ChoiceField(label=_("Select VIF to connect"))

    def __init__(self, request, *args, **kwargs):
        super(AttachPort, self).__init__(*args, **kwargs)
        # Populate VIF choices
        vif_choices = [('', "Select a VIF")]
        for vif in api.get_vif_ids(request):
            if vif['available']:
                name = "Instance %s VIF %s" % (vif['instance_name'], vif['id'])
                vif_choices.append((vif['id'], name,))
        self.fields['vif_id'].choices = vif_choices

    @classmethod
    def _instantiate(cls, request, *args, **kwargs):
        return cls(request, *args, **kwargs)

    def handle(self, request, data):
        try:
            LOG.info('Attaching %s port to VIF %s' %
                     (data['port'], data['vif_id']))
            body = {'attachment': {'id': '%s' % data['vif_id']}}
            api.quantum_attach_port(request,
                                        data['network'], data['port'], body)
        except Exception, e:
            if not hasattr(e, 'message'):
                e.message = str(e)
            messages.error(request,
                _('Unable to attach port %(port)s to VIF %(vif)s: %(msg)s') %
                {"port": data['port'],
                 "vif": data['vif_id'],
                 "msg": e.message})
        else:
예제 #4
0
파일: forms.py 프로젝트: wendy-king/x7_venv
class DeleteObject(forms.SelfHandlingForm):
    object_name = forms.CharField(widget=forms.HiddenInput())
    container_name = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        api.chase_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())
예제 #5
0
class DeleteForm(forms.SelfHandlingForm):
    volume_id = forms.CharField(widget=forms.HiddenInput())
    volume_name = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            api.volume_delete(request, data['volume_id'])
            message = 'Deleting volume "%s"' % data['volume_id']
            LOG.info(message)
            messages.info(request, message)
        except engineclient_exceptions.ClientException, e:
            LOG.exception("ClientException in DeleteVolume")
            messages.error(request, _('Error deleting volume: %s') % e.message)
        return shortcuts.redirect(request.build_absolute_uri())
예제 #6
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:
            if not hasattr(e, 'message'):
                e.message = str(e)
            messages.error(request,
                _('Unable to detach port %(port)s: %(message)s') %
                {"port": data['port'], "message": e.message})
        else:
예제 #7
0
class UpdateImageForm(forms.SelfHandlingForm):
    image_id = forms.CharField(widget=forms.HiddenInput())
    name = forms.CharField(max_length="25", label=_("Name"))
    kernel = forms.CharField(max_length="25",
                             label=_("Kernel ID"),
                             required=False)
    ramdisk = forms.CharField(max_length="25",
                              label=_("Ramdisk ID"),
                              required=False)
    architecture = forms.CharField(label=_("Architecture"), required=False)
    container_format = forms.CharField(label=_("Container Format"),
                                       required=False)
    disk_format = forms.CharField(label=_("Disk Format"))

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

        try:
            image = api.image_get_meta(request, image_id)
        except tank_exception.ClientConnectionError, e:
            LOG.exception(_('Error connecting to tank'))
            messages.error(request, error_retrieving)
        except tank_exception.Error, e:
            LOG.exception(error_retrieving)
            messages.error(request, error_retrieving)
예제 #8
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('steer:engine:images_and_snapshots'
                                      ':snapshots:index')
        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())
예제 #9
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 \
                                    %(ip)s with Instance: %(inst)s' % {
                    "ip": data['floating_ip'],
                    "inst": data['instance_id']
                }))
        except engineclient_exceptions.ClientException, e:
            LOG.exception("ClientException in FloatingIpAssociate")
            messages.error(request, _('Error associating Floating IP: %s') % e)
        return shortcuts.redirect('steer:engine:access_and_security:index')
예제 #10
0
class LoginWithTenant(Login):
    """
    Exactly like :class:`.Login` but includes the tenant id as a field
    so that the process of choosing a default tenant is bypassed.
    """
    username = forms.CharField(
        max_length="20",
        widget=forms.TextInput(attrs={'readonly': 'readonly'}))
    tenant = forms.CharField(widget=forms.HiddenInput())
예제 #11
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:
            if not hasattr(e, 'message'):
                e.message = str(e)
            messages.error(request,
                _('Unable to set port state to %(state)s: %(message)s') %
                {"state": data['state'], "message": e.message})
        else:
예제 #12
0
class DetachForm(forms.SelfHandlingForm):
    volume_id = forms.CharField(widget=forms.HiddenInput())
    instance_id = forms.CharField(widget=forms.HiddenInput())
    attachment_id = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            api.volume_detach(request, data['instance_id'],
                              data['attachment_id'])
            message = (_('Detaching volume %(vol)s from instance %(inst)s') % {
                "vol": data['volume_id'],
                "inst": data['instance_id']
            })
            LOG.info(message)
            messages.info(request, message)
        except engineclient_exceptions.ClientException, e:
            LOG.exception("ClientException in DetachVolume")
            messages.error(request,
                           _('Error detaching volume: %s') % e.message)
        return shortcuts.redirect(
            "steer:engine:instances_and_volumes:volumes:index")
예제 #13
0
파일: forms.py 프로젝트: wendy-king/x7_venv
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.chase_upload_object(request, data['container_name'], data['name'],
                                self.files['object_file'].read())

        messages.success(request, _("Object was successfully uploaded."))
        return shortcuts.redirect("steer:engine:containers:object_index",
                                  data['container_name'])
예제 #14
0
class DeleteNetwork(forms.SelfHandlingForm):
    network = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            LOG.info('Deleting network %s ' % data['network'])
            api.quantum_delete_network(request, data['network'])
        except Exception, e:
            if not hasattr(e, 'message'):
                e.message = str(e)
            messages.error(request,
                    _('Unable to delete network %(network)s: %(msg)s') %
                    {"network": data['network'], "msg": e.message})
        else:
예제 #15
0
파일: forms.py 프로젝트: wendy-king/x7_venv
class DeleteContainer(forms.SelfHandlingForm):
    container_name = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            api.chase_delete_container(request, data['container_name'])
        except ContainerNotEmpty, e:
            messages.error(
                request,
                _('Unable to delete non-empty container: %s') %
                data['container_name'])
            LOG.exception('Unable to delete container "%s".  Exception: "%s"' %
                          (data['container_name'], str(e)))
        else:
예제 #16
0
class RenameNetwork(forms.SelfHandlingForm):
    network = forms.CharField(widget=forms.HiddenInput())
    new_name = forms.CharField(required=True)

    def handle(self, request, data):
        try:
            LOG.info('Renaming network %s to %s' %
                     (data['network'], data['new_name']))
            send_data = {'network': {'name': '%s' % data['new_name']}}
            api.quantum_update_network(request, data['network'], send_data)
        except Exception, e:
            if not hasattr(e, 'message'):
                e.message = str(e)
            messages.error(request,
                    _('Unable to rename network %(network)s: %(msg)s') %
                    {"network": data['network'], "msg": e.message})
        else:
예제 #17
0
    def __init__(self, *args, **kwargs):
        super(AttachForm, self).__init__(*args, **kwargs)
        # populate volume_id
        volume_id = kwargs.get('initial', {}).get('volume_id', [])
        self.fields['volume_id'] = forms.CharField(widget=forms.HiddenInput(),
                                                   initial=volume_id)

        # Populate instance choices
        instance_list = kwargs.get('initial', {}).get('instances', [])
        instances = [('', "Select an instance")]
        for instance in instance_list:
            instances.append(
                (instance.id, '%s (%s)' % (instance.name, instance.id)))
        self.fields['instance'] = forms.ChoiceField(
            choices=instances,
            label="Attach to Instance",
            help_text="Select an instance to attach to.")
예제 #18
0
class CreatePort(forms.SelfHandlingForm):
    network = forms.CharField(widget=forms.HiddenInput())
    ports_num = forms.IntegerField(required=True, label=_("Number of Ports"))

    def handle(self, request, data):
        try:
            LOG.info('Creating %s ports on network %s' %
                     (data['ports_num'], data['network']))
            for i in range(0, data['ports_num']):
                api.quantum_create_port(request, data['network'])
        except Exception, e:
            if not hasattr(e, 'message'):
                e.message = str(e)
            messages.error(request,
                _('Unable to create ports on network %(network)s: %(msg)s') %
                {"network": data['network'], "msg": e.message})
        else:
예제 #19
0
파일: forms.py 프로젝트: wendy-king/x7_venv
class FilterObjects(forms.SelfHandlingForm):
    container_name = forms.CharField(widget=forms.HiddenInput())
    object_prefix = forms.CharField(required=False)

    def handle(self, request, data):
        object_prefix = data['object_prefix'] or None

        objects, more = api.chase_get_objects(request,
                                              data['container_name'],
                                              prefix=object_prefix)

        if not objects:
            messages.info(
                request,
                _('There are no objects matching that prefix in %s') %
                data['container_name'])

        return (objects, more)
예제 #20
0
class CreateGroup(forms.SelfHandlingForm):
    name = forms.CharField(validators=[validators.validate_slug])
    description = forms.CharField()
    tenant_id = forms.CharField(widget=forms.HiddenInput())

    def handle(self, request, data):
        try:
            LOG.info('Add security_group: "%s"' % data)

            security_group = api.security_group_create(request,
                                                       data['name'],
                                                       data['description'])
            messages.success(request,
                             _('Successfully created security_group: %s')
                                    % data['name'])
            return shortcuts.redirect(
                    'steer:engine:access_and_security:index')
        except engineclient_exceptions.ClientException, e:
            LOG.exception("ClientException in CreateGroup")
            messages.error(request, _('Error creating security group: %s') %
                                     e.message)
예제 #21
0
class LaunchForm(forms.SelfHandlingForm):
    name = forms.CharField(max_length=80, label=_("Server Name"))
    image_id = forms.CharField(widget=forms.HiddenInput())
    tenant_id = forms.CharField(widget=forms.HiddenInput())
    user_data = forms.CharField(widget=forms.Textarea,
                                label=_("User Data"),
                                required=False)

    # make the dropdown populate when the form is loaded not when django is
    # started
    def __init__(self, *args, **kwargs):
        super(LaunchForm, self).__init__(*args, **kwargs)
        flavorlist = kwargs.get('initial', {}).get('flavorlist', [])
        self.fields['flavor'] = forms.ChoiceField(
            choices=flavorlist,
            label=_("Flavor"),
            help_text="Size of Image to launch")

        keynamelist = kwargs.get('initial', {}).get('keynamelist', [])
        self.fields['key_name'] = forms.ChoiceField(
            choices=keynamelist,
            label=_("Key Name"),
            required=False,
            help_text="Which keypair to use for authentication")

        securitygrouplist = kwargs.get('initial',
                                       {}).get('securitygrouplist', [])
        self.fields['security_groups'] = forms.MultipleChoiceField(
            choices=securitygrouplist,
            label=_("Security Groups"),
            required=True,
            initial=['default'],
            widget=forms.CheckboxSelectMultiple(),
            help_text="Launch instance in these Security Groups")
        # setting self.fields.keyOrder seems to break validation,
        # so ordering fields manually
        field_list = ('name', 'user_data', 'flavor', 'key_name')
        for field in field_list[::-1]:
            self.fields.insert(0, field, self.fields.pop(field))

    def handle(self, request, data):
        image_id = data['image_id']
        tenant_id = data['tenant_id']
        try:
            image = api.image_get_meta(request, image_id)
            flavor = api.flavor_get(request, data['flavor'])
            api.server_create(request, data['name'], image, flavor,
                              data.get('key_name'),
                              normalize_newlines(data.get('user_data')),
                              data.get('security_groups'))

            msg = _('Instance was successfully launched')
            LOG.info(msg)
            messages.success(request, msg)
            return redirect(
                'steer:engine:instances_and_volumes:instances:index')

        except api_exceptions.ApiException, e:
            LOG.exception(
                'ApiException while creating instances of image "%s"' %
                image_id)
            messages.error(request,
                           _('Unable to launch instance: %s') % e.message)