示例#1
0
    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.SelectMultiple(attrs={
                'class': 'chzn-select',
                'style': "min-width: 200px"
            }),
            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))
示例#2
0
文件: containers.py 项目: dais/colony
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)
示例#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 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())
示例#5
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())
示例#6
0
文件: users.py 项目: Lezval/horizon
class UserEnableDisableForm(forms.SelfHandlingForm):
    id = forms.CharField(label=_("ID (username)"), widget=forms.HiddenInput())
    enabled = forms.ChoiceField(label=_("enabled"),
                                widget=forms.HiddenInput(),
                                choices=[[c, c]
                                         for c in ("disable", "enable")])

    def handle(self, request, data):
        user_id = data['id']
        enabled = data['enabled'] == "enable"

        try:
            api.user_update_enabled(request, user_id, enabled)
            messages.info(
                request,
                _("User %(user)s %(state)s") % {
                    "user": user_id,
                    "state": "enabled" if enabled else "disabled"
                })
        except api_exceptions.ApiException:
            messages.error(
                request,
                _("Unable to %(state)s user %(user)s") % {
                    "state": "enable" if enabled else "disable",
                    "user": user_id
                })

        return redirect(request.build_absolute_uri())
示例#7
0
class BillForm(forms.Form):
    def __init__(self, *args, **kwargs):
        tenant_list = kwargs.pop('tenant_list', None)
        super(BillForm, self).__init__(*args, **kwargs)
        self.fields['tenant_id'].choices = [[tenant.id, tenant.id]
                for tenant in tenant_list]

    vcpu = forms.DecimalField(label="virtual CPU (1 - $)", max_digits=5, decimal_places=2)
    ram = forms.DecimalField(label="RAM (1 MB - $)", max_digits=5, decimal_places=2)
    vdisk = forms.DecimalField(label="virtual Disk (1 GB - $)", max_digits=5, decimal_places=2)
    tenant_id = forms.ChoiceField(label="Month-Year")
示例#8
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")
示例#9
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")
示例#10
0
class OtherContainer(forms.SelfHandlingForm):
    storage_url = forms.CharField(widget=forms.HiddenInput(), required=False)
    storage_urls = forms.ChoiceField(initial=1,
                                     widget=forms.Select,
                                     required=False)

    def __init__(self, *args, **kwargs):
        fields = kwargs.pop('storage_urls')
        storage_url = kwargs.pop('storage_url')
        super(OtherContainer, self).__init__(*args, **kwargs)
        self.fields['storage_urls'].choices = [(value, value)
                                               for value in fields]
        if storage_url:
            self.fields['storage_urls'].initial = (storage_url, storage_url)

    def handle(self, request, data):
        storage_url = data['storage_url']
        storage_urls = data['storage_urls']
        if storage_url:
            target_url = storage_url
        elif storage_urls:
            target_url = storage_urls
        containers = []
        try:
            containers = api.swift_get_containers(request, target_url)
            request.session['storage_url'] = target_url
            if not request.session.get('storage_url_list', None):
                request.session['storage_url_list'] = set()
            request.session['storage_url_list'].add(target_url)
        except Exception, e:
            msg = "Unable to retrieve containers from swift: %s" % str(e)
            LOG.exception(msg)
            messages.error(request, msg)
            return shortcuts.redirect('dash_containers',
                                      request.user.tenant_id)

        return shortcuts.render_to_response(
            'django_openstack/dash/containers/index.html', {
                'containers': containers,
                'storage_url_form': self,
                'storage_url': storage_url
            },
            context_instance=template.RequestContext(request))
示例#11
0
class ContainerAcl(forms.SelfHandlingForm):
    ''' Form that handles Swift Container Acl '''
    container_name = forms.CharField(widget=forms.HiddenInput())
    acl_type = forms.ChoiceField(label="ACL Type",
                                 choices=((1, 'ReadAcl'), (0, 'WriteAcl')),
                                 initial=1,
                                 widget=forms.RadioSelect)
    read_acl = forms.CharField(widget=forms.HiddenInput(), required=False)
    write_acl = forms.CharField(widget=forms.HiddenInput(), required=False)
    acl_add = forms.CharField(max_length="255", label="ACL", required=True)

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

    def handle(self, request, data):

        container_name = data['container_name']
        acl_type = data['acl_type']
        try:
            acl_add = data['acl_add']
            acl_add.encode('ascii')
        except UnicodeEncodeError, e:
            messages.error(
                request, "Container ACL contains non-ASCII \
            character %s" % str(e))
            return shortcuts.redirect(request.build_absolute_uri())

        if acl_type == "1":
            type = 'X-Container-Read'
            acl_value = data.get('read_acl', '')
        elif acl_type == "0":
            type = 'X-Container-Write'
            acl_value = data.get('write_acl', '')

        # clean and parse acl
        try:
            acl = clean_acl(type, acl_add)
            acl_orig = clean_acl(type, acl_value)
            ref_add, group_add = parse_acl(acl)
            ref_orig, group_orig = parse_acl(acl_orig)
        except ValueError, e:
            messages.error(request, 'ACL value is invalid %s' % str(e))
            return None
示例#12
0
class CopyObject(forms.SelfHandlingForm):
    new_container_name = forms.ChoiceField(
        label="Container to store object in")

    new_object_name = forms.CharField(max_length="1024",
                                      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):

        values = {}
        values['orig_cont'] = data['orig_container_name']
        values['orig_obj'] = data['orig_object_name']
        values['new_cont'] = data['new_container_name']
        values['new_obj'] = data['new_object_name']

        escaped = {}
        for key, value in values.iteritems():
            escaped[key] = value.encode('utf-8').replace('/', '%2F')
            #escaped[key] = value.encode('utf-8')

        try:
            api.swift_copy_object(request, escaped['orig_cont'],
                                  escaped['orig_obj'], escaped['new_cont'],
                                  escaped['new_obj'],
                                  request.session.get('storage_url', None))

            messages.success(
                request, 'Object was successfully copied to %s/%s' %
                (values['new_cont'], values['new_obj']))
        except NoSuchContainer, e:
            messages.error(request, 'Object copy is failed. %s' % str(e))
        except ResponseError, e:
            messages.error(request, 'Object copy is failed. %s' % str(e))
示例#13
0
 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")
示例#14
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-listings':
                self.fields['html_listing'].initial = value == 'true'
            if name == 'x-container-meta-web-listings-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']
        try:
            error = error.encode('ascii')
        except Exception, e:
            messages.error(
                request,
                'Container Public contains non-ASCII character %s' % str(e))
            return
        html_listing = data['html_listing']
        use_css_in_listing = data['use_css_in_listing']
        container_name = data['container_name']
        for name in ['Index', 'Listings', 'Listings-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-Listings'] = 'true'
        if use_css_in_listing:
            hdrs['X-Container-Meta-Web-Listings-Css'] = css_object_name
        if error:
            hdrs['X-Container-Meta-Web-Error'] = error

        try:
            api.swift_set_container_info(request, container_name, hdrs)
        except Exception, e:
            messages.error(
                request,
                'Unable to set container metadata for public : %s' % str(e))
            return
示例#15
0
文件: containers.py 项目: dais/colony
class ContainerAcl(forms.SelfHandlingForm):
    ''' Form that handles Swift Container Acl '''
    container_name = forms.CharField(widget=forms.HiddenInput())
    acl_type = forms.ChoiceField(label="ACL Type",
                                 choices=((1, 'ReadAcl'), (0, 'WriteAcl')),
                                 initial=1,
                                 widget=forms.RadioSelect)
    read_acl = forms.CharField(widget=forms.HiddenInput(), required=False)
    write_acl = forms.CharField(widget=forms.HiddenInput(), required=False)
    acl_add = forms.CharField(max_length="255", label="ACL", required=True)

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

    def handle(self, request, data):

        container_name = data['container_name']
        acl_type = data['acl_type']

        if acl_type == "1":
            type = 'X-Container-Read'
            acl_value = data.get('read_acl', '')
        elif acl_type == "0":
            type = 'X-Container-Write'
            acl_value = data.get('write_acl', '')

        # clean and parse acl
        try:
            acl = clean_acl(type, data['acl_add'])
            acl_orig = clean_acl(type, acl_value)
            ref_add, group_add = parse_acl(acl)
            ref_orig, group_orig = parse_acl(acl_orig)
        except ValueError, e:
            messages.error(request, 'ACL value is invalid %s' % str(e))
            print str(e)
            return

        # duplicate check
        ref_add = list(set(ref_add))
        ref_orig = list(set(ref_orig))
        group_add = list(set(group_add))
        group_orig = list(set(group_orig))

        acl_result = []
        acl_ref_result = []

        for item in group_add:
            if not item in group_orig:
                acl_result.append(item)
        for item in ref_add:
            if not item in ref_orig:
                acl_ref_result.append(item)

        group_result = group_orig + acl_result
        ref_result = acl_ref_result + ref_orig
        # re-calcurate referer string
        refs_result = map(lambda x: '.r:%s' % x, ref_result)

        # set header
        hdrs = {}
        hdrs[type] = ','.join(group_result + ref_result)

        api.swift_set_container_info(request, container_name, hdrs)

        return shortcuts.redirect(request.build_absolute_uri())