Beispiel #1
0
    def __init__(self, request, *args, **kwargs):
        super(AddNodesToHAClusterAction, self).__init__(request,
                                                        *args,
                                                        **kwargs)
        err_msg = _('Unable to get the available hosts')

        default_role_field_name = self.get_default_role_field_name()
        self.fields[default_role_field_name] = forms.CharField(required=False)
        self.fields[default_role_field_name].initial = 'member'

        field_name = self.get_member_field_name('member')
        self.fields[field_name] = forms.MultipleChoiceField(required=False)

        hosts = []
        try:
            hosts = api.nova.host_list(request)
        except Exception:
            exceptions.handle(request, err_msg)

        host_names = []
        for host in hosts:
            if host.host_name not in host_names and host.service == u'compute':
                host_names.append(host.host_name)
        host_names.sort()

        self.fields[field_name].choices = [(host_name, host_name) for host_name in host_names]
Beispiel #2
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))
Beispiel #3
0
class SetNetworkAction(workflows.Action):
    network = forms.MultipleChoiceField(label=_("Networks"),
                                        widget=forms.CheckboxSelectMultiple(),
                                        error_messages={
                                            'required':
                                            _("At least one network must"
                                              " be specified.")
                                        },
                                        help_text=_("Launch instance with"
                                                    " these networks"))
    if api.neutron.is_port_profiles_supported():
        widget = None
    else:
        widget = forms.HiddenInput()
    profile = forms.ChoiceField(label=_("Policy Profiles"),
                                required=False,
                                widget=widget,
                                help_text=_("Launch instance with "
                                            "this policy profile"))

    def __init__(self, request, *args, **kwargs):
        super(SetNetworkAction, self).__init__(request, *args, **kwargs)
        network_list = self.fields["network"].choices
        if len(network_list) == 1:
            self.fields['network'].initial = [network_list[0][0]]
        if api.neutron.is_port_profiles_supported():
            self.fields['profile'].choices = (
                self.get_policy_profile_choices(request))

    class Meta:
        name = _("Networking")
        permissions = ('openstack.services.network', )
        help_text = _("Select networks for your instance.")

    def populate_network_choices(self, request, context):
        try:
            tenant_id = self.request.user.tenant_id
            networks = api.neutron.network_list_for_tenant(request, tenant_id)
            for n in networks:
                n.set_id_as_name_if_empty()
            network_list = [(network.id, network.name) for network in networks]
        except Exception:
            network_list = []
            exceptions.handle(request, _('Unable to retrieve networks.'))
        return network_list

    def get_policy_profile_choices(self, request):
        profile_choices = [('', _("Select a profile"))]
        for profile in self._get_profiles(request, 'policy'):
            profile_choices.append((profile.id, profile.name))
        return profile_choices

    def _get_profiles(self, request, type_p):
        profiles = []
        try:
            profiles = api.neutron.profile_list(request, type_p)
        except Exception:
            msg = _('Network Profiles could not be retrieved.')
            exceptions.handle(request, msg)
        return profiles
    def __init__(self, request, *args, **kwargs):
        super(ManageAggregateHostsAction,
              self).__init__(request, *args, **kwargs)
        err_msg = _('Unable to get the available hosts')

        default_role_field_name = self.get_default_role_field_name()
        self.fields[default_role_field_name] = forms.CharField(required=False)
        self.fields[default_role_field_name].initial = 'member'

        field_name = self.get_member_field_name('member')
        self.fields[field_name] = forms.MultipleChoiceField(required=False)

        aggregate_id = self.initial['id']
        aggregate = api.nova.aggregate_get(request, aggregate_id)
        current_aggregate_hosts = aggregate.hosts

        hosts = []
        try:
            hosts = api.nova.host_list(request)
        except Exception:
            exceptions.handle(request, err_msg)

        host_names = []
        for host in hosts:
            if host.host_name not in host_names and host.service == u'compute':
                host_names.append(host.host_name)
        host_names.sort()

        self.fields[field_name].choices = \
            [(host_name, host_name) for host_name in host_names]

        self.fields[field_name].initial = current_aggregate_hosts
Beispiel #5
0
class SelectRoutersAction(workflows.Action):
    router = forms.MultipleChoiceField(
        label=_("Routers"),
        required=False,
        widget=forms.CheckboxSelectMultiple(),
        help_text=_("Create a firewall with selected routers."))

    class Meta(object):
        name = _("Routers")
        permissions = ('openstack.services.network', )
        help_text = _("Select routers for your firewall.")

    def populate_router_choices(self, request, context):
        try:
            tenant_id = self.request.user.tenant_id
            routers_list = api.fwaas.firewall_unassociated_routers_list(
                request, tenant_id)

        except Exception as e:
            routers_list = []
            exceptions.handle(
                request,
                _('Unable to retrieve routers (%(error)s).') %
                {'error': str(e)})
        routers_list = [(router.id, router.name_or_id)
                        for router in routers_list]
        return routers_list
Beispiel #6
0
class SelectRulesAction(workflows.Action):
    rule = forms.MultipleChoiceField(
        label=_("Rules"),
        required=False,
        widget=forms.CheckboxSelectMultiple(),
        help_text=_("Create a policy with selected rules."))

    class Meta:
        name = _("Rules")
        permissions = ('openstack.services.network', )
        help_text = _("Select rules for your policy.")

    def populate_rule_choices(self, request, context):
        try:
            tenant_id = self.request.user.tenant_id
            rules = api.fwaas.rules_list(request, tenant_id=tenant_id)
            for r in rules:
                r.set_id_as_name_if_empty()
            rules = sorted(rules, key=lambda rule: rule.name)
            rule_list = [(rule.id, rule.name) for rule in rules
                         if not rule.firewall_policy_id]
        except Exception as e:
            rule_list = []
            exceptions.handle(request, _('Unable to retrieve rules.') + str(e))
        return rule_list
Beispiel #7
0
    def __init__(self, request, *args, **kwargs):
        super(BaseSecurityGroupsAction, self).__init__(request, *args,
                                                       **kwargs)
        err_msg = _('Unable to retrieve security group list. '
                    'Please try again later.')
        context = args[0]

        default_role_name = self.get_default_role_field_name()
        self.fields[default_role_name] = forms.CharField(required=False)
        self.fields[default_role_name].initial = 'member'

        # Get list of available security groups
        all_groups = []
        try:
            # target_tenant_id is required when the form is used as admin.
            # Owner of security group and port should match.
            tenant_id = context.get('target_tenant_id')
            all_groups = api.neutron.security_group_list(request,
                                                         tenant_id=tenant_id)
        except Exception:
            exceptions.handle(request, err_msg)
        groups_list = [(group.id, group.name) for group in all_groups]

        field_name = self.get_member_field_name('member')
        self.fields[field_name] = forms.MultipleChoiceField(required=False)
        self.fields[field_name].choices = groups_list
        sec_groups = []
        try:
            sec_groups = self._get_initial_security_groups(context)
        except Exception:
            exceptions.handle(request, err_msg)
        self.fields[field_name].initial = sec_groups
def anti_affinity_field():
    return forms.MultipleChoiceField(
        label=_("Use anti-affinity groups for: "),
        required=False,
        help_text=_("Use anti-affinity groups for processes"),
        widget=forms.CheckboxSelectMultiple()
    )
Beispiel #9
0
    def __init__(self, request, *args, **kwargs):
        super(SelectNodeProcessesAction, self).__init__(
            request, *args, **kwargs)

        plugin, hadoop_version = (
            workflow_helpers.get_plugin_and_hadoop_version(request))
        node_processes = {}
        try:
            version_details = saharaclient.plugin_get_version_details(
                request, plugin, hadoop_version)
            node_processes = version_details.node_processes
        except Exception:
            exceptions.handle(request,
                              _("Unable to generate process choices."))
        process_choices = []
        for service, processes in node_processes.items():
            for process in processes:
                choice_label = str(service) + ":" + str(process)
                process_choices.append((choice_label, process))

        self.fields["processes"] = forms.MultipleChoiceField(
            label=_("Select Node Group Processes"),
            widget=CheckboxSelectMultiple(),
            choices=process_choices,
            required=True)
Beispiel #10
0
class SetAccessControlsAction(workflows.Action):
    keypair = forms.ThemableDynamicChoiceField(
        label=_("Key Pair"),
        help_text=_("Key pair to use for "
                    "authentication."),
        add_item_link=KEYPAIR_IMPORT_URL)
    admin_pass = forms.RegexField(
        label=_("Admin Password"),
        required=False,
        widget=forms.PasswordInput(render_value=False),
        regex=validators.password_validator(),
        error_messages={'invalid': validators.password_validator_msg()})
    confirm_admin_pass = forms.CharField(
        label=_("Confirm Admin Password"),
        required=False,
        widget=forms.PasswordInput(render_value=False))
    groups = forms.MultipleChoiceField(
        label=_("Security Groups"),
        required=False,
        initial=["default"],
        widget=forms.ThemableCheckboxSelectMultiple(),
        help_text=_("Launch instance in these "
                    "security groups."))

    class Meta(object):
        name = _("Access & Security")
        help_text = _("Control access to your instance via key pairs, "
                      "security groups, and other mechanisms.")

    def __init__(self, request, *args, **kwargs):
        super(SetAccessControlsAction, self).__init__(request, *args, **kwargs)
        if not api.nova.can_set_server_password():
            del self.fields['admin_pass']
            del self.fields['confirm_admin_pass']
        self.fields['keypair'].required = api.nova.requires_keypair()

    def populate_keypair_choices(self, request, context):
        keypairs = instance_utils.keypair_field_data(request, True)
        if len(keypairs) == 2:
            self.fields['keypair'].initial = keypairs[1][0]
        return keypairs

    def populate_groups_choices(self, request, context):
        try:
            groups = api.neutron.security_group_list(request)
            security_group_list = [(sg.id, sg.name) for sg in groups]
        except Exception:
            exceptions.handle(request,
                              _('Unable to retrieve list of security groups'))
            security_group_list = []
        return security_group_list

    def clean(self):
        '''Check to make sure password fields match.'''
        cleaned_data = super(SetAccessControlsAction, self).clean()
        if 'admin_pass' in cleaned_data:
            if cleaned_data['admin_pass'] != cleaned_data.get(
                    'confirm_admin_pass', None):
                raise forms.ValidationError(_('Passwords do not match.'))
        return cleaned_data
Beispiel #11
0
    def __init__(self, request, *args, **kwargs):
        super(UpdateInstanceSecurityGroupsAction,
              self).__init__(request, *args, **kwargs)
        err_msg = _('Unable to retrieve security group list. '
                    'Please try again later.')
        context = args[0]
        instance_id = context.get('instance_id', '')

        default_role_name = self.get_default_role_field_name()
        self.fields[default_role_name] = forms.CharField(required=False)
        self.fields[default_role_name].initial = 'member'

        # Get list of available security groups
        all_groups = []
        try:
            all_groups = api.network.security_group_list(request)
        except Exception:
            exceptions.handle(request, err_msg)
        groups_list = [(group.id, group.name) for group in all_groups]

        instance_groups = []
        try:
            instance_groups = api.network.server_security_groups(
                request, instance_id)
        except Exception:
            exceptions.handle(request, err_msg)
        field_name = self.get_member_field_name('member')
        self.fields[field_name] = forms.MultipleChoiceField(required=False)
        self.fields[field_name].choices = groups_list
        self.fields[field_name].initial = [
            group.id for group in instance_groups
        ]
Beispiel #12
0
class SetNetworkAction(workflows.Action):
    network = forms.MultipleChoiceField(label=_("Networks"),
                                        widget=forms.CheckboxSelectMultiple(),
                                        error_messages={
                                            'required':
                                            _("At least one network must"
                                              " be specified.")
                                        },
                                        help_text=_("Launch instance with"
                                                    " these networks"))

    def __init__(self, request, *args, **kwargs):
        super(SetNetworkAction, self).__init__(request, *args, **kwargs)
        network_list = self.fields["network"].choices
        if len(network_list) == 1:
            self.fields['network'].initial = [network_list[0][0]]

    class Meta(object):
        name = _("Networking")
        permissions = ('openstack.services.network', )
        help_text = _("Select networks for your instance.")

    def populate_network_choices(self, request, context):
        try:
            tenant_id = self.request.user.tenant_id
            networks = dash_api.neutron.network_list_for_tenant(
                request, tenant_id)
            network_list = [(network.id, network.name_or_id)
                            for network in networks]
        except Exception:
            network_list = []
            exceptions.handle(request, _('Unable to retrieve networks.'))
        return network_list
Beispiel #13
0
    def __init__(self, request, *args, **kwargs):
        super(AddProjectAction, self).__init__(request, *args, **kwargs)
        default_role_field_name = self.get_default_role_field_name()
        self.fields[default_role_field_name] = forms.CharField(required=False)
        self.fields[default_role_field_name].initial = 'member'

        field_name = self.get_member_field_name('member')
        self.fields[field_name] = forms.MultipleChoiceField(required=False)
        share_type_id = self.initial['id']

        # Get list of existing projects
        try:
            projects, __ = keystone.tenant_list(request)
        except Exception:
            err_msg = _('Unable to get list of projects.')
            exceptions.handle(request, err_msg)

        # Get list of projects with access to this Share Type
        try:
            share_type = manila.share_type_get(request, share_type_id)
            self.share_type_name = share_type.name
            projects_initial = manila.share_type_access_list(
                request, share_type)
        except Exception:
            err_msg = _('Unable to get information about share type access.')
            exceptions.handle(request, err_msg)

        self.fields[field_name].choices = [(project.id, project.name
                                            or project.id)
                                           for project in projects]
        self.fields[field_name].initial = [
            pr.project_id for pr in projects_initial
        ]
        self.projects_initial = set(self.fields[field_name].initial)
Beispiel #14
0
class LaunchBlessedAction(workflows.Action):
    name = forms.CharField(max_length="20", label=_("Launched Name"))

    user_data = forms.CharField(widget=forms.Textarea,
                                label=_("Customization Script"),
                                required=False,
                                help_text=_("A script or set of "
                                            "commands to be "
                                            "executed after the "
                                            "instance has been "
                                            "built (max 16kb)."))

    security_groups = forms.MultipleChoiceField(
        label=_("Security Groups"),
        required=True,
        initial=["default"],
        widget=forms.CheckboxSelectMultiple(),
        help_text=_("Launch instance in these "
                    "security groups."))

    class Meta:
        name = _("Launch from Blessed Instance")
        help_text = _("Enter the information for the new instance.")

    def populate_security_groups_choices(self, request, context):
        try:
            groups = api.api.nova.security_group_list(request)
            security_group_list = [(sg.name, sg.name) for sg in groups]
        except:
            exceptions.handle(request,
                              _('Unable to retrieve list of security groups'))
            security_group_list = []
        return security_group_list
Beispiel #15
0
class SetNetworkAction(workflows.Action):
    network = forms.MultipleChoiceField(label=_("Networks"),
                                        required=True,
                                        widget=forms.CheckboxSelectMultiple(),
                                        error_messages={
                                            'required':
                                            _("At least one network must"
                                              " be specified.")
                                        },
                                        help_text=_("Launch instance with"
                                                    "these networks"))

    class Meta:
        name = _("Networking")
        permissions = ('openstack.services.network', )
        help_text = _("Select networks for your instance.")

    def populate_network_choices(self, request, context):
        try:
            tenant_id = self.request.user.tenant_id
            networks = api.quantum.network_list_for_tenant(request, tenant_id)
            for n in networks:
                n.set_id_as_name_if_empty()
            network_list = [(network.id, network.name) for network in networks]
        except:
            network_list = []
            exceptions.handle(request, _('Unable to retrieve networks.'))
        return network_list
Beispiel #16
0
class SetNetworkAction(workflows.Action):
    network = forms.MultipleChoiceField(
        label=_("Networks"),
        widget=forms.ThemableCheckboxSelectMultiple(),
        error_messages={
            'required': _("At least one network must"
                          " be specified.")
        },
        help_text=_("Launch instance with"
                    " these networks"))

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

        # NOTE(e0ne): we don't need 'required attribute for networks
        # checkboxes to be able to select only one network
        # NOTE(e0ne): we need it for compatibility with different
        # Django versions (prior to 1.11)
        self.use_required_attribute = False

        network_list = self.fields["network"].choices
        if len(network_list) == 1:
            self.fields['network'].initial = [network_list[0][0]]

    class Meta(object):
        name = _("Networking")
        permissions = ('openstack.services.network', )
        help_text = _("Select networks for your instance.")

    def populate_network_choices(self, request, context):
        return instance_utils.network_field_data(request, for_launch=True)
Beispiel #17
0
    def __init__(self, request, *args, **kwargs):
        super(EditTypeAccessForm, self).__init__(request, *args, **kwargs)
        err_msg = _('Unable to retrieve volume type access list.')

        self.fields["member"] = forms.MultipleChoiceField(
            required=False, widget=forms.ThemableCheckboxSelectMultiple())
        # Get list of available projects.
        try:
            all_projects, has_more = keystone.tenant_list(request)
        except Exception:
            exceptions.handle(request, err_msg)
        projects_list = [(project.id, project.name)
                         for project in all_projects]

        self.fields["member"].choices = projects_list

        volume_type_id = self.initial.get('volume_type_id')
        volume_type_access = []
        try:
            if volume_type_id:
                volume_type = cinder.volume_type_get(request, volume_type_id)
                if not volume_type.is_public:
                    volume_type_access = [
                        project.project_id
                        for project in cinder.volume_type_access_list(
                            request, volume_type_id)
                    ]
        except Exception:
            exceptions.handle(request, err_msg)

        self.fields["member"].initial = volume_type_access
Beispiel #18
0
class PolicyAddAction(workflows.Action):

    id= forms.CharField(widget=forms.HiddenInput(),
                                required=False)
    
        
    cloudids = forms.ChoiceField(
        label=_("Cloud Name"),
        required=True,
        widget=fields.SelectWidget(
                                   data_attrs=('platform','allowed'),
                                   transform=lambda x: ("%s" % (x.name)))
    )

    providers = forms.ChoiceField(label=_("Provider"),
                                 required=False,
                                 help_text=_("Choose Your Provider" "."),
                                 widget=fields.SelectWidget(data_attrs=('provider',),
                                                            transform=lambda x: ("%s" % (x.provider))))
    regions = forms.ChoiceField(label=_("Region"),
                                 required=False,
                                 help_text=_("Choose Your Region" "."),
                                 widget=fields.SelectWidget(data_attrs=('provider','name','allowed',),
                                                            transform=lambda x: ("%s(%s)" % ((x.name).title(),(x.provider).title()))))
    
    allowed = forms.MultipleChoiceField(label=_("Allowed Actions"),
                                       required=False,
                                       initial=["default"],
                                       widget=forms.CheckboxSelectMultiple(),
                                       help_text=_("Allowed Action for the Role."))
    
    
    def populate_cloudids_choices(self, request, context):
        try:
            cloudid = []
            cloudlist = tenantclouds.objects(tenantid=self.request.user.tenantid.id)
            roles = roledetail.objects(id = context['id']).first()
            for cloud in cloudlist:
                if roles.policy:
                    for a in roles.policy:
                        if cloud.name == a.cloudid.name:
                            if a.cloudid.platform != "Cnext":
                                cloud.__dict__['allowed'] = a.allowed
                            else:
                                pass
                            cloudid.append((cloud.id,cloud))
                        else:
                            cloudid.append((cloud.id,cloud))
                else:
                    cloudid.append((cloud.id,cloud))
            cloudid = set(cloudid)
            cloudid = list(cloudid)
            cloudid.insert(0, ("", _("Select Cloud")))
               
        except Exception,e:
            messages.error(request,_(e.message))
            LOG.error(e.message)
            cloudid = []
        return cloudid
Beispiel #19
0
class ServiceActionForm(forms.SelfHandlingForm):

    uuid = forms.CharField(label=_("Plugin ID"), widget=forms.HiddenInput)

    name = forms.CharField(
        label=_('Service Name'),
        widget=forms.TextInput(attrs={'readonly': 'readonly'})
    )

    board_list = forms.MultipleChoiceField(
        label=_("Boards List"),
        widget=forms.SelectMultiple(
            attrs={'class': 'switchable', 'data-slug': 'slug-select-boards'}),
        help_text=_("Select boards in this pool")
    )

    action = forms.ChoiceField(
        label=_("Action"),
        choices=[('ServiceEnable', _('Enable')),
                 ('ServiceDisable', _('Disable')),
                 ('ServiceRestore', _('Restore'))],
        widget=forms.Select(
            attrs={'class': 'switchable', 'data-slug': 'slug-action'},
        )
    )

    def __init__(self, *args, **kwargs):

        super(ServiceActionForm, self).__init__(*args, **kwargs)
        # input=kwargs.get('initial',{})

        self.fields["board_list"].choices = kwargs["initial"]["board_list"]

    def handle(self, request, data):

        counter = 0

        for board in data["board_list"]:
            for key, value in self.fields["board_list"].choices:
                if key == board:

                    try:
                        action = iotronic.service_action(request, key,
                                                         data["uuid"],
                                                         data["action"])
                        message_text = action
                        messages.success(request, _(message_text))

                        if counter != len(data["board_list"]) - 1:
                            counter += 1
                        else:
                            return True

                    except Exception:
                        message_text = "Unable to execute action on board " \
                                       + str(value) + "."
                        exceptions.handle(request, _(message_text))

                    break
Beispiel #20
0
class SetAccessControlsAction(workflows.Action):
    keypair = forms.DynamicChoiceField(
        label=_("Keypair"),
        required=False,
        help_text=_("Which keypair to use for "
                    "authentication."),
        widget=fields.SelectWidget(data_attrs=('provider', 'region',
                                               'instanceId'),
                                   transform=lambda x:
                                   ("%s (%s)(%s)" %
                                    (x.name, x.provider, x.region))),
        add_item_link=KEYPAIR_IMPORT_URL)
    admin_pass = forms.RegexField(
        label=_("Admin Password"),
        required=False,
        widget=forms.PasswordInput(render_value=False),
        regex=validators.password_validator(),
        error_messages={'invalid': validators.password_validator_msg()})
    confirm_admin_pass = forms.CharField(
        label=_("Confirm Admin Password"),
        required=False,
        widget=forms.PasswordInput(render_value=False))
    groups = forms.MultipleChoiceField(label=_("Security Groups"),
                                       required=False,
                                       initial=["default"],
                                       widget=forms.CheckboxSelectMultiple(),
                                       help_text=_("Launch instance in these "
                                                   "security groups."))

    class Meta:
        name = _("Access & Security")
        help_text = _("Control access to your instance via keypairs, "
                      "security groups, and other mechanisms.")

    def populate_keypair_choices(self, request, context):
        try:
            keypairs = capi.keypairs(request)
            keypair_list = [(kp.id, kp) for kp in keypairs]
        except Exception:
            keypair_list = []
            exceptions.handle(request, _('Unable to retrieve keypairs.'))
        if keypair_list:
            keypair_list.insert(0, ("", _("Select a keypair")))
        else:
            keypair_list = (("", _("No keypairs available.")), )
        return keypair_list

    def populate_groups_choices(self, request, context):
        try:
            groups = capi.securitygroups(request)
            if groups:
                security_group_list = [(sg.id, sg.name) for sg in groups]
            else:
                security_group_list = []
        except Exception:
            exceptions.handle(request,
                              _('Unable to retrieve list of security groups'))
            security_group_list = []
        return security_group_list
Beispiel #21
0
    def __init__(self, request, *args, **kwargs):
        super(UpdateProjectMembersAction,
              self).__init__(request, *args, **kwargs)
        err_msg = _('Unable to retrieve user list. Please try again later.')
        project_id = ''
        if 'project_id' in args[0]:
            project_id = args[0]['project_id']

        # Get the default role
        try:
            default_role = api.keystone.get_default_role(self.request)
            # Default role is necessary to add members to a project
            if default_role is None:
                default = getattr(settings, "OPENSTACK_KEYSTONE_DEFAULT_ROLE",
                                  None)
                msg = _('Could not find default role "%s" in Keystone') % \
                        default
                raise exceptions.NotFound(msg)
        except:
            exceptions.handle(self.request,
                              err_msg,
                              redirect=reverse(INDEX_URL))
        self.fields['default_role'].initial = default_role.id

        # Get list of available users
        all_users = []
        domain_context = request.session.get('domain_context', None)
        try:
            all_users = api.keystone.user_list(request, domain=domain_context)
        except:
            exceptions.handle(request, err_msg)
        users_list = [(user.id, user.name) for user in all_users]

        # Get list of roles
        role_list = []
        try:
            role_list = api.keystone.role_list(request)
        except:
            exceptions.handle(request, err_msg, redirect=reverse(INDEX_URL))
        for role in role_list:
            field_name = "role_" + role.id
            label = _(role.name)
            self.fields[field_name] = forms.MultipleChoiceField(required=False,
                                                                label=label)
            self.fields[field_name].choices = users_list
            self.fields[field_name].initial = []

        # Figure out users & roles
        if project_id:
            for user in all_users:
                try:
                    roles = api.keystone.roles_for_user(
                        self.request, user.id, project_id)
                except:
                    exceptions.handle(request,
                                      err_msg,
                                      redirect=reverse(INDEX_URL))
                for role in roles:
                    self.fields["role_" + role.id].initial.append(user.id)
    def __init__(self, request, *args, **kwargs):
        super(GeneralConfigAction, self).__init__(request, *args, **kwargs)

        hlps = helpers.Helpers(request)

        plugin, hadoop_version = (
            workflow_helpers.get_plugin_and_hadoop_version(request))
        process_choices = []
        try:
            version_details = saharaclient.plugin_get_version_details(
                request, plugin, hadoop_version)
            for service, processes in version_details.node_processes.items():
                for process in processes:
                    process_choices.append(
                        (str(service) + ":" + str(process), process))
        except Exception:
            exceptions.handle(request,
                              _("Unable to generate process choices."))

        if not saharaclient.SAHARA_AUTO_IP_ALLOCATION_ENABLED:
            pools = network.floating_ip_pools_list(request)
            pool_choices = [(pool.id, pool.name) for pool in pools]
            pool_choices.insert(0, (None, "Do not assign floating IPs"))

            self.fields['floating_ip_pool'] = forms.ChoiceField(
                label=_("Floating IP Pool"),
                choices=pool_choices,
                required=False)

        self.fields["proxygateway"] = forms.BooleanField(
            label=_("Proxy Gateway"),
            widget=forms.CheckboxInput(),
            help_text=_("Sahara will use instances of this node group to "
                        "access other cluster instances."),
            required=False)

        self.fields["processes"] = forms.MultipleChoiceField(
            label=_("Processes"),
            widget=forms.CheckboxSelectMultiple(),
            help_text=_("Processes to be launched in node group"),
            choices=process_choices)

        self.fields["plugin_name"] = forms.CharField(
            widget=forms.HiddenInput(), initial=plugin)
        self.fields["hadoop_version"] = forms.CharField(
            widget=forms.HiddenInput(), initial=hadoop_version)

        node_parameters = hlps.get_general_node_group_configs(
            plugin, hadoop_version)
        for param in node_parameters:
            self.fields[param.name] = workflow_helpers.build_control(param)

        if request.REQUEST.get("guide_template_type"):
            self.fields["guide_template_type"] = forms.CharField(
                required=False,
                widget=forms.HiddenInput(),
                initial=request.REQUEST.get("guide_template_type"))
Beispiel #23
0
class CreateNetworkInfoAction(workflows.Action):
    net_name = forms.CharField(max_length=255,
                               label=_("Network Name"),
                               required=False)
    admin_state = forms.BooleanField(
        label=_("Enable Admin State"),
        initial=True,
        required=False,
        help_text=_("The state to start the network in."))
    shared = forms.BooleanField(label=_("Shared"), initial=False,
                                required=False)
    with_subnet = forms.BooleanField(label=_("Create Subnet"),
                                     widget=forms.CheckboxInput(attrs={
                                         'class': 'switchable',
                                         'data-slug': 'with_subnet',
                                         'data-hide-tab': 'create_network__'
                                                          'createsubnetinfo'
                                                          'action,'
                                                          'create_network__'
                                                          'createsubnetdetail'
                                                          'action',
                                         'data-hide-on-checked': 'false'
                                     }),
                                     initial=True,
                                     required=False)
    az_hints = forms.MultipleChoiceField(
        label=_("Availability Zone Hints"),
        required=False,
        help_text=_("Availability zones where the DHCP agents may be "
                    "scheduled. Leaving this unset is equivalent to "
                    "selecting all availability zones"))

    def __init__(self, request, *args, **kwargs):
        super(CreateNetworkInfoAction, self).__init__(request,
                                                      *args, **kwargs)
        if not policy.check((("network", "create_network:shared"),), request):
            self.fields['shared'].widget = forms.HiddenInput()
        try:
            if api.neutron.is_extension_supported(request,
                                                  'network_availability_zone'):
                zones = api.neutron.list_availability_zones(
                    self.request, 'network', 'available')
                self.fields['az_hints'].choices = [(zone['name'], zone['name'])
                                                   for zone in zones]
            else:
                del self.fields['az_hints']
        except Exception:
            msg = _('Failed to get availability zone list.')
            messages.warning(request, msg)
            del self.fields['az_hints']

    class Meta(object):
        name = _("Network")
        help_text = _('Create a new network. '
                      'In addition, a subnet associated with the network '
                      'can be created in the following steps of this wizard.')
Beispiel #24
0
class AddRouterToFirewall(forms.SelfHandlingForm):
    router_ids = forms.MultipleChoiceField(
        label=_("Add Routers"),
        required=False,
        widget=forms.ThemableCheckboxSelectMultiple(),
        help_text=_("Add selected router(s) to the firewall."))

    failure_url = 'horizon:project:firewalls:index'

    def __init__(self, request, *args, **kwargs):
        super(AddRouterToFirewall, self).__init__(request, *args, **kwargs)
        try:
            router_choices = self.get_router_choices(request, kwargs)
            self.fields['router_ids'].choices = router_choices
        except Exception as e:
            LOG.error('Failed to retrieve available routers: %s', e)
            msg = _('Failed to retrieve available routers: %s') % e
            redirect = reverse(self.failure_url)
            exceptions.handle(request, msg, redirect=redirect)

    def get_router_choices(self, request, kwargs):
        tenant_id = self.request.user.tenant_id
        routers_list = api.fwaas.firewall_unassociated_routers_list(
            request, tenant_id)
        return [(r.id, r.name_or_id) for r in routers_list]

    def get_new_router_ids(self, context):
        existing_router_ids = self.initial['router_ids']
        add_router_ids = context['router_ids']
        return add_router_ids + existing_router_ids

    def handle(self, request, context):
        firewall_id = self.initial['firewall_id']
        firewall_name_or_id = self.initial['name'] or firewall_id
        try:
            body = {'router_ids': self.get_new_router_ids(context)}
            firewall = api.fwaas.firewall_update(request, firewall_id, **body)
            msg = (_('Router(s) was/were successfully added to firewall '
                     '%(firewall)s.') % {
                         'firewall': firewall_name_or_id
                     })
            messages.success(request, msg)
            return firewall
        except Exception as e:
            LOG.error('Failed to add router(s) to firewall %(id)s: %(reason)s',
                      {
                          'id': firewall_id,
                          'reason': e
                      })
            msg = (_('Failed to add router(s) to firewall %(name)s: '
                     '%(reason)s') % {
                         'name': firewall_name_or_id,
                         'reason': e
                     })
            redirect = reverse(self.failure_url)
            exceptions.handle(request, msg, redirect=redirect)
Beispiel #25
0
class InjectPluginForm(forms.SelfHandlingForm):

    uuid = forms.CharField(label=_("Plugin ID"), widget=forms.HiddenInput)

    name = forms.CharField(
        label=_('Plugin Name'),
        widget=forms.TextInput(attrs={'readonly': 'readonly'})
    )

    onboot = forms.BooleanField(label=_("On Boot"), required=False)

    board_list = forms.MultipleChoiceField(
        label=_("Boards List"),
        widget=forms.SelectMultiple(
            attrs={'class': 'switchable', 'data-slug': 'slug-inject-boards'}),
        help_text=_("Select boards in this pool ")
    )

    def __init__(self, *args, **kwargs):

        super(InjectPluginForm, self).__init__(*args, **kwargs)
        # input=kwargs.get('initial',{})

        boardslist_length = len(kwargs["initial"]["board_list"])

        self.fields["board_list"].choices = kwargs["initial"]["board_list"]
        self.fields["board_list"].max_length = boardslist_length

    def handle(self, request, data):

        counter = 0

        for board in data["board_list"]:
            for key, value in self.fields["board_list"].choices:
                if key == board:

                    try:
                        plugin = None
                        plugin = iotronic.plugin_inject(request, key,
                                                        data["uuid"],
                                                        data["onboot"])
                        # LOG.debug("API: %s %s", plugin, request)
                        message_text = "Plugin injected successfully on " \
                                       "board " + str(value) + "."
                        messages.success(request, _(message_text))

                        if counter != len(data["board_list"]) - 1:
                            counter += 1
                        else:
                            return plugin
                    except Exception:
                        message_text = "Unable to inject plugin on board " \
                                       + str(value) + "."
                        exceptions.handle(request, _(message_text))

                    break
Beispiel #26
0
    def __init__(self, request, *args, **kwargs):
        super(UpdateProjectMembersAction, self).__init__(request,
                                                         *args,
                                                         **kwargs)
        err_msg = _('Unable to retrieve user list. Please try again later.')
        project_id = ''
        if 'project_id' in args[0]:
            project_id = args[0]['project_id']

        # Get the default role
        try:
            default_role = api.get_default_role(self.request).id
        except:
            exceptions.handle(self.request,
                              err_msg,
                              redirect=reverse(INDEX_URL))
        self.fields['default_role'].initial = default_role

        # Get list of available users
        all_users = []
        try:
            all_users = api.keystone.user_list(request)
        except:
            exceptions.handle(request, err_msg)
        users_list = [(user.id, user.name) for user in all_users]

        # Get list of roles
        role_list = []
        try:
            role_list = api.keystone.role_list(request)
        except:
            exceptions.handle(request,
                              err_msg,
                              redirect=reverse(INDEX_URL))
        for role in role_list:
            field_name = "role_" + role.id
            label = _(role.name)
            self.fields[field_name] = forms.MultipleChoiceField(required=False,
                                                                label=label)
            self.fields[field_name].choices = users_list
            self.fields[field_name].initial = []

        # Figure out users & roles
        if project_id:
            for user in all_users:
                try:
                    roles = api.roles_for_user(self.request,
                                               user.id,
                                               project_id)
                except:
                    exceptions.handle(request,
                                      err_msg,
                                      redirect=reverse(INDEX_URL))
                if roles:
                    primary_role = roles[0].id
                    self.fields["role_" + primary_role].initial.append(user.id)
Beispiel #27
0
class CreateVPNInfoAction(workflows.Action):
    #CHOICES = (('L2VPN', 'L2VPN (over Fiber, MetroEthernet, VPLS, MPLS, L3/GRE/L2TP, SSL)'), ('L3VPN', 'L3VPN (over Fiber, MetroEthernet, VPLS, MPLS, L3/GRE/L2TP, SSL)'))
    CHOICES = (('L2VPN', 'L3VPN plugin'), ('L3VPN',
                                           'L3VPN (plugin not implemented)'))
    #vpntype = forms.ChoiceField(widget=forms.RadioSelect, required=True, label='Type', choices=CHOICES)
    vpntype = forms.ChoiceField(required=True,
                                label='VPN Type',
                                choices=CHOICES)

    net_name = forms.CharField(max_length=255,
                               label=_("VPN Name"),
                               help_text=_("VPN Name. This field is "
                                           "optional."),
                               required=False)

    private_network = forms.MultipleChoiceField(
        label=
        _("Private Networks to Connect to (Note: only non-Shared networks can be connected to by this VPN)"
          ),
        required=True,
        error_messages={
            'required': _("At least one network must"
                          " be specified.")
        },
        help_text=_("Connect VPN to this private network"))

    #bw = forms.IntegerField(label=_("Aggregate Bandwidth (Kbps)"), min_value=1000, initial=10000, help_text=_("Aggregate bandwidth (Kbps)"))

    private = forms.BooleanField(
        label=_("Private to this tenant (Isolated from other tenants)"),
        initial=True,
        required=False)

    class Meta:
        name = ("VPN")
        permissions = ('openstack.services.network', )
        help_text = _(
            "From here you can create a new VPN from a Cloud Site to your Enterprise Branch Site.\n"
            "A Provider Site and your Enterprise Site associated with this VPN "
            "can be add in the next panel. All Enterprise Sites require to run OpenStack with a reacheable Keystone v2 Service."
        )

    def populate_private_network_choices(self, request, context):
        try:
            tenant_name = self.request.user.tenant_name
            networks = api.neutron.network_list(request,
                                                tenant_name=tenant_name,
                                                shared=False)
            for n in networks:
                n.set_id_as_name_if_empty()
            network_list = [(network.id, network.name) for network in networks]
        except:
            network_list = []
            exceptions.handle(request, _('Unable to retrieve networks.'))
        return network_list
class CreateUserAction(workflows.Action):
    username = forms.CharField(max_length=80, label=_("User Name"),
                               validators=[RegexValidator(r'^[\w]*$',
                                                          message='Username must be alphanumeric without spaces',
                                                          code='Invalid Username')]
                               )
    
    roles = forms.MultipleChoiceField(label=_("Roles"),
                                       required=False,
                                       initial=["default"],
                                       widget=forms.CheckboxSelectMultiple(),
                                       help_text=_("Create user with these "
                                                   "roles."))
    password = forms.RegexField(
        label=_("Password"),
        required=False,
        widget=forms.PasswordInput(render_value=False),
        regex=validators.password_validator(),
        error_messages={'invalid': validators.password_validator_msg()})
    confirm_password = forms.CharField(
        label=_("Confirm Password"),
        required=False,
        widget=forms.PasswordInput(render_value=False))
    email = forms.EmailField(label=_("Email ID"),
             required=True)


    def populate_roles_choices(self, request, context):
        roles = []
        success = []
        try:
            if request.user.roles:
                for role in  request.user.roles:
                    if (role.name == "Tenant Admin") & (role.roletype == "Tenant Admin"):
                        success.append("Tenant Admin")
                    else:
                        success.append("Member")
                if "Tenant Admin" in success:
                    rolelist = roledetail.objects(tenantid=request.user.tenantid.id)
                    roles = [(role.id, role.name) for role in rolelist]
                else:   
                    rolelist = roledetail.objects(tenantid=request.user.tenantid.id)
                    for role in rolelist:
                        if (role.name == "Tenant Admin") & (role.roletype == "Tenant Admin"):
                            pass
                        else:
                            roles.append((role.id, role.name))
            else:
                roles = []
                                  
        except Exception, e:
            messages.error(request,_(e.message))
            LOG.error(e.message)
            roles = []
        return roles
Beispiel #29
0
def add_unit_combos(newprjform):

    unit_table = get_unit_table()
    org_table = settings.HORIZON_CONFIG.get('organization', {})

    if len(unit_table) > 0:

        avail_nets = get_avail_networks(newprjform.request)

        choices_u = list()
        for k, v in unit_table.items():
            if len(avail_nets[k]) > 0:
                choices_u.append((k,v['name']))

        
        newprjform.fields['unit'] = forms.ChoiceField(
            label=_('Available units'),
            required=True,
            choices=choices_u,
            widget=forms.Select(attrs={
                'class': 'switchable',
                'data-slug': 'unitselector'
            })
        )

        for unit_id, unit_data in unit_table.items():

            if len(avail_nets[unit_id]) == 0:
                continue

            newprjform.fields["%s-net" % unit_id] = forms.ChoiceField(
                label=_('Available networks'),
                required=False,
                choices=[ (k,k) for k in avail_nets[unit_id] ],
                widget=forms.Select(attrs={
                    'class': 'switched',
                    'data-switch-on': 'unitselector',
                    'data-unitselector-%s' % unit_id : _('Available networks')
                })
            )

            ou_list = org_table.get(unit_data.get('organization', ""), None)
            if not ou_list:
                continue

            newprjform.fields["%s-ou" % unit_id] = forms.MultipleChoiceField(
                label=_('Unit or department'),
                required=False,
                choices=[ x[:2] for x in ou_list ],
                widget=forms.SelectMultiple(attrs={
                    'class': 'switched',
                    'data-switch-on': 'unitselector',
                    'data-unitselector-%s' % unit_id : _('Unit or department')
                })
            )
Beispiel #30
0
class LoadBalancerForm(forms.SelfHandlingForm):

    lb_name = forms.CharField(label=_("Load Balancer Name"),
                              max_length=255,
                              error_messages={
                                  'required':
                                  _('This field is required.'),
                                  'invalid':
                                  _("The string may only contain"
                                    " ASCII characters and numbers.")
                              })

    pool_id = forms.CharField(label=_("Pool id"),
                              max_length=255,
                              error_messages={
                                  'required':
                                  _('This field is required.'),
                                  'invalid':
                                  _("The string may only contain"
                                    " ASCII characters and numbers.")
                              })

    protocol_port = forms.IntegerField(
        label=_('Protocol_port'),
        help_text=_(
            'Port number on which the servers are running on the members'))

    #  base_choices =  [('nano', _('m1.nano')),
    #            ('micro', _('m1.micro')),
    #           ('tiny', _('m1.tiny')),
    #          ('heat', _('m1.heat')),
    #         ('small', _('m1.small')),]
    attributes = {'class': 'image_selector', 'data-slug': 'templatesource'}

    members = forms.MultipleChoiceField(label=_('Instance Members'),
                                        widget=forms.SelectMultiple,
                                        choices=[])

    def __init__(self, *args, **kwargs):
        super(LoadBalancerForm, self).__init__(*args, **kwargs)
        temp = project_api.get_lb_members()
        #tkMessageBox.showinfo(title="Greetings", message="\n" + str(temp))
        self.fields['members'].choices = temp
        #tkMessageBox.showinfo(title="Greetings", message="\n" + str(temp))

    def handle(self, request, data):
        kwargs = {
            'lb_name': data['lb_name'],
            'pool_id': data['pool_id'],
            'protocol_port': data['protocol_port'],
            'members': data['members'],
        }
        project_api.create_ins(kwargs)
        return True