summaryrefslogtreecommitdiff
path: root/tuskar_ui/infrastructure/parameters/forms.py
diff options
context:
space:
mode:
Diffstat (limited to 'tuskar_ui/infrastructure/parameters/forms.py')
-rw-r--r--tuskar_ui/infrastructure/parameters/forms.py281
1 files changed, 0 insertions, 281 deletions
diff --git a/tuskar_ui/infrastructure/parameters/forms.py b/tuskar_ui/infrastructure/parameters/forms.py
deleted file mode 100644
index a0e91e63..00000000
--- a/tuskar_ui/infrastructure/parameters/forms.py
+++ /dev/null
@@ -1,281 +0,0 @@
-# -*- coding: utf8 -*-
-#
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-
-import json
-import logging
-
-import django.forms
-from django.utils.datastructures import SortedDict
-from django.utils.translation import ugettext_lazy as _
-import horizon.exceptions
-import horizon.forms
-import horizon.messages
-
-from tuskar_ui import api
-import tuskar_ui.forms
-from tuskar_ui.utils import utils
-
-
-LOG = logging.getLogger(__name__)
-
-
-VIRT_TYPE_CHOICES = [
- ('qemu', _("Virtualized (qemu)")),
- ('kvm', _("Baremetal (kvm)")),
-]
-
-CINDER_ISCSI_HELPER_CHOICES = [
- ('tgtadm', _('tgtadm')),
- ('lioadm', _('lioadm')),
-]
-
-
-class ParameterAwareMixin(object):
- parameter = None
-
-
-def parameter_fields(request, prefix=None, read_only=False):
- fields = SortedDict()
- plan = api.tuskar.Plan.get_the_plan(request)
- parameters = plan.parameter_list(include_key_parameters=False)
-
- for p in parameters:
- if prefix and not p.name.startswith(prefix):
- continue
- Field = django.forms.CharField
- field_kwargs = {}
- widget = None
- if read_only:
- if p.hidden:
- widget = tuskar_ui.forms.StaticTextPasswordWidget
- else:
- widget = tuskar_ui.forms.StaticTextWidget
- else:
- if p.hidden:
- widget = django.forms.PasswordInput(render_value=True)
- elif p.parameter_type == 'number':
- Field = django.forms.IntegerField
- elif p.parameter_type == 'boolean':
- Field = django.forms.BooleanField
- elif (p.parameter_type == 'string' and
- p.get_constraint_by_type('allowed_values')):
- Field = django.forms.ChoiceField
- field_kwargs['choices'] = [
- (choice, choice) for choice in
- p.get_constraint_by_type('allowed_values')['definition']]
- elif (p.parameter_type in ['json', 'comma_delimited_list'] or
- 'Certificate' in p.name):
- widget = django.forms.Textarea
-
- fields[p.name] = Field(
- required=False,
- label=_parameter_label(p),
- initial=p.value,
- widget=widget,
- **field_kwargs
- )
- fields[p.name].__class__ = type('ParameterAwareField',
- (ParameterAwareMixin, Field), {})
- fields[p.name].parameter = p
- return fields
-
-
-def _parameter_label(parameter):
- return tuskar_ui.forms.label_with_tooltip(
- parameter.label or utils.de_camel_case(parameter.stripped_name),
- parameter.description)
-
-
-class ServiceConfig(horizon.forms.SelfHandlingForm):
- def __init__(self, *args, **kwargs):
- super(ServiceConfig, self).__init__(*args, **kwargs)
- self.fields.update(parameter_fields(self.request, read_only=True))
-
- def global_fieldset(self):
- return tuskar_ui.forms.fieldset(self, prefix='^(?!.*::)')
-
- def controller_fieldset(self):
- return tuskar_ui.forms.fieldset(self, prefix='Controller-1')
-
- def compute_fieldset(self):
- return tuskar_ui.forms.fieldset(self, prefix='Compute-1')
-
- def block_storage_fieldset(self):
- return tuskar_ui.forms.fieldset(self, prefix='Cinder-Storage-1')
-
- def object_storage_fieldset(self):
- return tuskar_ui.forms.fieldset(self, prefix='Swift-Storage-1')
-
- def ceph_storage_fieldset(self):
- return tuskar_ui.forms.fieldset(self, prefix='Ceph-Storage-1')
-
- def handle():
- pass
-
-
-class AdvancedEditServiceConfig(ServiceConfig):
- def __init__(self, *args, **kwargs):
- super(AdvancedEditServiceConfig, self).__init__(*args, **kwargs)
- self.fields.update(parameter_fields(self.request))
-
- def handle(self, request, data):
- plan = api.tuskar.Plan.get_the_plan(self.request)
-
- # TODO(bcrochet): Commenting this out.
- # For advanced config, we should have a whitelist of which params
- # must be synced across roles.
- # data = self._sync_common_params_across_roles(plan, data)
-
- try:
- plan.patch(request, plan.uuid, data)
- except Exception as e:
- horizon.exceptions.handle(
- request,
- _("Unable to update the service configuration."))
- LOG.exception(e)
- return False
- else:
- horizon.messages.success(
- request,
- _("Service configuration updated."))
- return True
-
- @staticmethod
- def _sync_common_params_across_roles(plan, parameters_dict):
- for (p_key, p_value) in parameters_dict.iteritems():
- for role in plan.role_list:
- role_parameter_key = (role.parameter_prefix +
- api.tuskar.strip_prefix(p_key))
- if role_parameter_key in parameters_dict:
- parameters_dict[role_parameter_key] = p_value
- return parameters_dict
-
-
-class SimpleEditServiceConfig(horizon.forms.SelfHandlingForm):
- virt_type = django.forms.ChoiceField(
- label=_("Deployment Type"),
- choices=VIRT_TYPE_CHOICES,
- required=True,
- help_text=_('If you are testing OpenStack in a virtual machine, '
- 'you must configure Compute to use qemu without KVM '
- 'and hardware virtualization.'))
- neutron_public_interface = django.forms.CharField(
- label=_("Public Interface"),
- required=True,
- initial='eth0',
- help_text=_('What interface to bridge onto br-ex for network nodes. '
- 'If you are testing OpenStack in a virtual machine'
- 'you must configure interface to eth0.'))
- snmp_password = django.forms.CharField(
- label=_("SNMP Password"),
- required=True,
- help_text=_('The user password for SNMPd with readonly '
- 'rights running on all Overcloud nodes'),
- widget=django.forms.PasswordInput(render_value=True))
- cloud_name = django.forms.CharField(
- label=_("Cloud name"),
- required=True,
- initial="overcloud",
- help_text=_('The DNS name of this cloud. '
- 'E.g. ci-overcloud.tripleo.org'))
- cinder_iscsi_helper = django.forms.ChoiceField(
- label=_("Cinder ISCSI helper"),
- choices=CINDER_ISCSI_HELPER_CHOICES,
- required=True,
- help_text=_('The iSCSI helper to use with cinder.'))
- ntp_server = django.forms.CharField(
- label=_("NTP server"),
- required=False,
- initial="",
- help_text=_('Address of the NTP server. If blank, public NTP servers '
- 'will be used.'))
- extra_config = django.forms.CharField(
- label=_("Extra Config"),
- required=False,
- widget=django.forms.Textarea(attrs={'rows': 2}),
- help_text=("Additional configuration to inject into the cluster."
- "The data format of this field is JSON."
- "See http://git.io/PuwLXQ for more information."))
-
- def clean_extra_config(self):
- data = self.cleaned_data['extra_config']
- try:
- json.loads(data)
- except Exception as json_error:
- raise django.forms.ValidationError(
- _("%(err_msg)s"), params={'err_msg': json_error.message})
- return data
-
- @staticmethod
- def _load_additional_parameters(plan, data, form_key, param_name):
- params = {}
- param_value = data.get(form_key)
- # Set the same parameter and value in all roles.
- for role in plan.role_list:
- key = role.parameter_prefix + param_name
- if key in [parameter.name
- for parameter in role.parameter_list(plan)]:
- params[key] = param_value
-
- return params
-
- def handle(self, request, data):
- plan = api.tuskar.Plan.get_the_plan(self.request)
- compute_prefix = plan.get_role_by_name('Compute').parameter_prefix
- controller_prefix = plan.get_role_by_name(
- 'Controller').parameter_prefix
- cinder_prefix = plan.get_role_by_name(
- 'Cinder-Storage').parameter_prefix
-
- virt_type = data.get('virt_type')
- neutron_public_interface = data.get('neutron_public_interface')
- cloud_name = data.get('cloud_name')
- cinder_iscsi_helper = data.get('cinder_iscsi_helper')
- ntp_server = data.get('ntp_server')
-
- parameters = {
- compute_prefix + 'NovaComputeLibvirtType': virt_type,
- controller_prefix + 'CinderISCSIHelper': cinder_iscsi_helper,
- cinder_prefix + 'CinderISCSIHelper': cinder_iscsi_helper,
- controller_prefix + 'CloudName': cloud_name,
- controller_prefix + 'NeutronPublicInterface':
- neutron_public_interface,
- compute_prefix + 'NeutronPublicInterface':
- neutron_public_interface,
- controller_prefix + 'NtpServer':
- ntp_server,
- compute_prefix + 'NtpServer':
- ntp_server,
- }
-
- parameters.update(self._load_additional_parameters(
- plan, data,
- 'snmp_password', 'SnmpdReadonlyUserPassword'))
- parameters.update(self._load_additional_parameters(
- plan, data,
- 'extra_config', 'ExtraConfig'))
-
- try:
- plan.patch(request, plan.uuid, parameters)
- except Exception as e:
- horizon.exceptions.handle(
- request,
- _("Unable to update the service configuration."))
- LOG.exception(e)
- return False
- else:
- horizon.messages.success(
- request,
- _("Service configuration updated."))
- return True