Add 'is_enabled' attr to segment

Implements: blueprint enable-to-segment
Change-Id: I378d98cc17afbfa9e56deb79ae479117dd231a7b
This commit is contained in:
Radosław Piliszek 2021-03-24 08:58:40 +00:00
parent 1a6d07c683
commit fce116082b
7 changed files with 66 additions and 19 deletions

View File

@ -50,6 +50,11 @@ class CreateSegmentForm(forms.SelfHandlingForm):
description = forms.CharField( description = forms.CharField(
label=_("Description"), widget=forms.Textarea( label=_("Description"), widget=forms.Textarea(
attrs={'rows': 4}), required=False) attrs={'rows': 4}), required=False)
is_enabled = forms.BooleanField(
label=_("Enabled"),
required=False,
initial=True,
)
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(CreateSegmentForm, self).__init__(*args, **kwargs) super(CreateSegmentForm, self).__init__(*args, **kwargs)
@ -91,12 +96,19 @@ class UpdateForm(forms.SelfHandlingForm):
attrs={'width': "100%", 'cols': "80", 'rows': "5", }), attrs={'width': "100%", 'cols': "80", 'rows': "5", }),
required=False required=False
) )
is_enabled = forms.BooleanField(
label=_("Enabled"),
required=False,
)
def handle(self, request, data): def handle(self, request, data):
try: try:
fields_to_update = {'name': data['name'], fields_to_update = {
'recovery_method': data['recovery_method'], 'name': data['name'],
'description': data['description']} 'recovery_method': data['recovery_method'],
'description': data['description'],
'is_enabled': data['is_enabled'],
}
api.segment_update(request, data['uuid'], fields_to_update) api.segment_update(request, data['uuid'], fields_to_update)
msg = _('Successfully updated segment.') msg = _('Successfully updated segment.')
messages.success(request, msg) messages.success(request, msg)

View File

@ -13,6 +13,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from django.template import defaultfilters as filters
from django.urls import reverse from django.urls import reverse
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from django.utils.translation import ungettext_lazy from django.utils.translation import ungettext_lazy
@ -45,6 +46,7 @@ class CreateSegment(tables.LinkAction):
SEGMENT_FILTER_CHOICES = ( SEGMENT_FILTER_CHOICES = (
('recovery_method', _("Recovery Method ="), True), ('recovery_method', _("Recovery Method ="), True),
('service_type', _("Service Type ="), True), ('service_type', _("Service Type ="), True),
('is_enabled', _("Enabled ="), True, _('e.g. Yes/No')),
) )
@ -100,6 +102,9 @@ class FailoverSegmentTable(tables.DataTable):
description = tables.WrappingColumn( description = tables.WrappingColumn(
'description', verbose_name=_("Description"), 'description', verbose_name=_("Description"),
truncate=40) truncate=40)
is_enabled = tables.Column('is_enabled', verbose_name=_('Enabled'),
status=True,
filters=(filters.yesno, filters.capfirst))
def get_object_id(self, datum): def get_object_id(self, datum):
return datum.uuid return datum.uuid

View File

@ -13,6 +13,8 @@
<dd>{{ segment.recovery_method }}</dd> <dd>{{ segment.recovery_method }}</dd>
<dt>{% trans "Service Type" %}</dt> <dt>{% trans "Service Type" %}</dt>
<dd>{{ segment.service_type }}</dd> <dd>{{ segment.service_type }}</dd>
<dt>{% trans "Enabled" %}</dt>
<dd>{{ segment.is_enabled|yesno|capfirst }}</dd>
<dt>{% trans "Created at" %}</dt> <dt>{% trans "Created at" %}</dt>
<dd>{{ segment.created_at|parse_isotime }}</dd> <dd>{{ segment.created_at|parse_isotime }}</dd>
<dt>{% trans "Updated at" %}</dt> <dt>{% trans "Updated at" %}</dt>

View File

@ -55,7 +55,8 @@ class SegmentTest(test.TestCase):
'name': segment.name, 'name': segment.name,
'recovery_method': segment.recovery_method, 'recovery_method': segment.recovery_method,
'service_type': segment.service_type, 'service_type': segment.service_type,
'description': segment.description 'description': segment.description,
'is_enabled': segment.is_enabled,
} }
with mock.patch('masakaridashboard.api.api.segment_create', with mock.patch('masakaridashboard.api.api.segment_create',
return_value=segment) as mocked_create: return_value=segment) as mocked_create:
@ -199,7 +200,9 @@ class SegmentTest(test.TestCase):
'uuid': segment_obj.uuid, 'uuid': segment_obj.uuid,
'name': segment_obj.name, 'name': segment_obj.name,
'recovery_method': segment_obj.recovery_method, 'recovery_method': segment_obj.recovery_method,
'description': segment_obj.description} 'description': segment_obj.description,
'is_enabled': segment_obj.is_enabled,
}
with mock.patch( with mock.patch(
'masakaridashboard.api.api.get_segment', 'masakaridashboard.api.api.get_segment',
@ -213,7 +216,9 @@ class SegmentTest(test.TestCase):
data_to_update = { data_to_update = {
'name': segment_obj.name, 'name': segment_obj.name,
'recovery_method': segment_obj.recovery_method, 'recovery_method': segment_obj.recovery_method,
'description': segment_obj.description} 'description': segment_obj.description,
'is_enabled': segment_obj.is_enabled,
}
mocked_update.assert_called_once_with( mocked_update.assert_called_once_with(
helpers.IsHttpRequest(), helpers.IsHttpRequest(),

View File

@ -171,10 +171,13 @@ class UpdateView(forms.ModalFormView):
def get_initial(self, **kwargs): def get_initial(self, **kwargs):
segment = self.get_object() segment = self.get_object()
return {'uuid': self.kwargs['segment_id'], return {
'name': segment.name, 'uuid': self.kwargs['segment_id'],
'recovery_method': segment.recovery_method, 'name': segment.name,
'description': segment.description} 'recovery_method': segment.recovery_method,
'description': segment.description,
'is_enabled': segment.is_enabled,
}
class AddHostView(forms.ModalFormView): class AddHostView(forms.ModalFormView):

View File

@ -32,15 +32,30 @@ def data(TEST):
TEST.masakari_segment = test_data_utils.TestDataContainer() TEST.masakari_segment = test_data_utils.TestDataContainer()
segment1 = segment.Segment(uuid=uuidsentinel.segment1, name='test', segment1 = segment.Segment(
recovery_method='auto', uuid=uuidsentinel.segment1,
service_type='service', description='demo') name='test',
segment2 = segment.Segment(uuid=uuidsentinel.segment2, recovery_method='auto',
name='test2', recovery_method='auto', service_type='service',
service_type='service', description='demo') description='demo',
segment3 = segment.Segment(uuid=uuidsentinel.segment3, name='test3', is_enabled=True,
recovery_method='auto', )
service_type='service', description='demo') segment2 = segment.Segment(
uuid=uuidsentinel.segment2,
name='test2',
recovery_method='auto',
service_type='service',
description='demo',
is_enabled=False,
)
segment3 = segment.Segment(
uuid=uuidsentinel.segment3,
name='test3',
recovery_method='auto',
service_type='service',
description='demo',
is_enabled=True,
)
TEST.masakari_segment.add(segment1) TEST.masakari_segment.add(segment1)
TEST.masakari_segment.add(segment2) TEST.masakari_segment.add(segment2)

View File

@ -0,0 +1,5 @@
---
features:
- |
Adds support for API microversion 1.2 with ``enabled`` flag for segments.
`Blueprint enable-to-segment <https://blueprints.launchpad.net/masakari/+spec/enable-to-segment>`__