masakari-dashboard/masakaridashboard/segments/forms.py

176 lines
6.7 KiB
Python

# Copyright (C) 2018 NTT DATA
# All Rights Reserved.
#
# 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.
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from horizon import exceptions
from horizon import forms
from horizon import messages
from masakaridashboard.api import api
class CreateSegmentForm(forms.SelfHandlingForm):
name = forms.CharField(
label=_('Segment Name'),
widget=forms.TextInput(attrs={'maxlength': 255}),
help_text=_('The segment name.'))
recovery_method = forms.ChoiceField(
label=_('Recovery Method'),
choices=[('auto', 'auto'),
('auto_priority', 'auto_priority'),
('reserved_host', 'reserved_host'),
('rh_priority', 'rh_priority')],
widget=forms.Select(
attrs={'class': 'switchable',
'data-slug': 'recovery_method'}),
required=True,
help_text=_('Type of recovery if any host in this segment goes down.')
)
service_type = forms.CharField(
label=_('Service Type'),
help_text=_('The name of service which will be deployed in this'
' segment. As of now user can mention COMPUTE as service'
' type.'),
widget=forms.TextInput(attrs={
'readonly': 'readonly', 'value': 'compute'}))
description = forms.CharField(
label=_("Description"), widget=forms.Textarea(
attrs={'rows': 4}), required=False)
def __init__(self, *args, **kwargs):
super(CreateSegmentForm, self).__init__(*args, **kwargs)
def handle(self, request, data):
try:
api.segment_create(request, data)
msg = _('Successfully created segment')
messages.success(request, msg)
except Exception as exc:
if exc.status_code == 409:
msg = _('Segment with name "%s" already exists') % data["name"]
else:
msg = _('Failed to create segment')
redirect = reverse('horizon:masakaridashboard:segments:index')
exceptions.handle(request, msg, redirect=redirect)
return True
class UpdateForm(forms.SelfHandlingForm):
uuid = forms.CharField(widget=forms.HiddenInput())
name = forms.CharField(
label=_('Segment Name'),
widget=forms.TextInput(attrs={'maxlength': 255}))
recovery_method = forms.ChoiceField(
label=_('Recovery Method'),
choices=[('auto', 'auto'),
('auto_priority', 'auto_priority'),
('reserved_host', 'reserved_host'),
('rh_priority', 'rh_priority')],
widget=forms.Select(
attrs={'class': 'switchable',
'data-slug': 'recovery_method'}),
required=False
)
description = forms.CharField(
label=_('Description'),
widget=forms.Textarea(
attrs={'width': "100%", 'cols': "80", 'rows': "5", }),
required=False
)
def handle(self, request, data):
try:
fields_to_update = {'name': data['name'],
'recovery_method': data['recovery_method'],
'description': data['description']}
api.segment_update(request, data['uuid'], fields_to_update)
msg = _('Successfully updated segment.')
messages.success(request, msg)
except Exception:
msg = _('Failed to update segment.')
redirect = reverse('horizon:masakaridashboard:segments:index')
exceptions.handle(request, msg, redirect=redirect)
return True
class AddHostForm(forms.SelfHandlingForm):
segment_id = forms.CharField(widget=forms.HiddenInput())
segment_name = forms.CharField(
label=_('Segment Name'), widget=forms.TextInput(
attrs={'readonly': 'readonly'}), required=False)
name = forms.ChoiceField(label=_('Host Name'),
choices=[])
reserved = forms.ChoiceField(
label=_('Reserved'),
choices=[('0', 'False'),
('1', 'True')],
widget=forms.Select(
attrs={'class': 'switchable',
'data-slug': 'available host'}),
required=False,
help_text=_("A boolean indicating whether this host is reserved or"
" not. Default value is set to False."))
type = forms.CharField(
label=_('Type'),
widget=forms.TextInput(attrs={'maxlength': 255}),
help_text=_("Type of host."))
control_attributes = forms.CharField(
label=_('Control Attribute'),
widget=forms.TextInput(),
help_text=_("Attributes to control host."))
on_maintenance = forms.ChoiceField(
label=_('On Maintenance'),
choices=[('0', 'False'),
('1', 'True')],
widget=forms.Select(
attrs={'class': 'switchable',
'data-slug': 'available host'}),
required=False,
help_text=_("A boolean indicating whether this host is on maintenance"
" or not. Default value is set to False."))
def __init__(self, *args, **kwargs):
super(AddHostForm, self).__init__(*args, **kwargs)
# Populate hypervisor name choices
hypervisor_list = kwargs.get('initial', {}).get("hypervisor_list", [])
hypervisor_name_list = []
for hypervisor in hypervisor_list:
hypervisor_name_list.append(
(hypervisor.hypervisor_hostname, '%(name)s (%(id)s)'
% {"name": hypervisor.hypervisor_hostname,
"id": hypervisor.id}))
if hypervisor_name_list:
hypervisor_name_list.insert(0, ("", _("Select a host")))
else:
hypervisor_name_list.insert(0, ("", _("No host available")))
self.fields['name'].choices = hypervisor_name_list
def handle(self, request, data):
try:
api.create_host(request, data)
msg = _('Host created successfully.')
messages.success(request, msg)
except Exception:
msg = _('Failed to create host.')
redirect = reverse('horizon:masakaridashboard:segments:index')
exceptions.handle(request, msg, redirect=redirect)
return True