Fix for 'Apply to' and 'Force' fields behavior

On 'Create Strategy' form the following fields are not usable when
selecting a subcloud:
* subcloud apply type
* maximum parallel subclouds
Now they are hidden in such case.

Input element for subcloud name was changed to a dropdown list.
If 'All subclouds' is selected, the strategy is applied to all
subclouds and the fields mentioned are hidden. If any other
subloud name is selected, such fields are shown.

It was created another 'force' element for kubernetes strategy
which shows a help message that is consistent with the expected
behavior. The original element is left for 'upgrade' strategy only.

Test Plan
PASS:
Build package
Install package on DC with at least one subcloud
Open gui on a browser and navigate to Distributed Cloud Admin ->
Orchestration -> Orchestration Stragegy -> Create Strategy:
* Check 'force' parameter is hidden for 'Patch' and 'Firmware' strategy
  types.
* Check 'force' help text describes actual behavior.
* Check 'subcloud' field is a dropdown menu and shows available
  subclouds.
* Check 'subcloud apply type' and 'maximum parallel subclouds' fields
  are not shown when a single subcloud is selected in the dropdown
  menu.

Closes-bug: 1973210
Closes-bug: 1973805

Signed-off-by: Agustin Carranza <agustin.carranza@windriver.com>
Change-Id: I909bb548f9b6454f6e556109165565394ec63114
This commit is contained in:
Agustin Carranza 2022-05-17 11:24:34 -04:00
parent 6a56d75356
commit 2dd7455be5

View File

@ -63,7 +63,12 @@ class CreateCloudStrategyForm(forms.SelfHandlingForm):
label=_("Strategy Type"),
required=True,
choices=STRATEGY_TYPES,
widget=forms.Select()
widget=forms.Select(
attrs={
'class': 'switchable',
'data-slug': 'strategy_types',
}
)
)
target = forms.ChoiceField(
@ -79,19 +84,19 @@ class CreateCloudStrategyForm(forms.SelfHandlingForm):
)
)
cloud_name = forms.CharField(
cloud_name = forms.ChoiceField(
label=_("Subcloud"),
required=False,
required=True,
help_text=_("Select subcloud to apply strategy."),
widget=forms.TextInput(
widget=forms.Select(
attrs={
'class': 'switched',
'class': 'switchable switched',
'data-switch-on': 'subcloud_types',
'data-subcloud_types-cloud_name': _("Subcloud")
'data-subcloud_types-cloud_name': _("Subcloud"),
'data-slug': 'subcloud_name'
}
)
)
subcloud_group = forms.CharField(
label=_("Subcloud Group"),
required=False,
@ -120,8 +125,8 @@ class CreateCloudStrategyForm(forms.SelfHandlingForm):
widget=forms.Select(
attrs={
'class': 'switched',
'data-switch-on': 'subcloud_types',
'data-subcloud_types-cloud_name': _("Subcloud Apply Type")
'data-switch-on': 'subcloud_name',
'data-subcloud_name-default': _("Subcloud Apply Type")
}
)
)
@ -137,8 +142,8 @@ class CreateCloudStrategyForm(forms.SelfHandlingForm):
widget=forms.TextInput(
attrs={
'class': 'switched',
'data-switch-on': 'subcloud_types',
'data-subcloud_types-cloud_name':
'data-switch-on': 'subcloud_name',
'data-subcloud_name-default':
_("Maximum Parallel Subclouds")
}
)
@ -148,17 +153,43 @@ class CreateCloudStrategyForm(forms.SelfHandlingForm):
label=_("Force"),
initial=False,
required=False,
help_text=_('Offline subcloud is skipped unless '
'force is set for Upgrade strategy'),
help_text=_('Offline subcloud is not skipped. '
'Applicable only when the strategy is created '
'to a single subcloud.'),
widget=forms.CheckboxInput(
attrs={
'class': 'switched',
'data-switch-on': 'subcloud_types',
'data-subcloud_types-cloud_name': _("Force")
'data-switch-on': 'strategy_types',
'data-strategy_types-upgrade': _("Force"),
}
)
)
force_kubernetes = forms.BooleanField(
label=_("Force"),
initial=False,
required=False,
help_text=_('Force Kube upgrade to a subcloud '
'which is in-sync with system controller'),
widget=forms.CheckboxInput(
attrs={
'class': 'switched',
'data-switch-on': 'strategy_types',
'data-strategy_types-kubernetes': _("Force")
}
)
)
def __init__(self, request, *args, **kwargs):
super(CreateCloudStrategyForm, self).__init__(request, *args,
**kwargs)
subcloud_list = [('default', 'All subclouds')]
subclouds = api.dc_manager.subcloud_list(self.request)
subcloud_list.extend([(c.name, c.name) for c in subclouds])
self.fields['cloud_name'].choices = subcloud_list
if self.initial.get('cloud_name', None):
self.fields['cloud_name'].widget.attrs['disabled'] = 'disabled'
def handle(self, request, data):
try:
# convert keys to use dashes
@ -168,7 +199,6 @@ class CreateCloudStrategyForm(forms.SelfHandlingForm):
elif '_' in k:
data[k.replace('_', '-')] = data[k]
del data[k]
if data['target'] == 'subcloud_group':
del data['cloud_name']
del data['force']
@ -176,10 +206,18 @@ class CreateCloudStrategyForm(forms.SelfHandlingForm):
del data['subcloud-apply-type']
else:
del data['subcloud_group']
data['force'] = str(data['force']).lower()
if data['cloud_name'] == 'default':
del data['cloud_name']
del data['force']
else:
del data['max-parallel-subclouds']
del data['subcloud-apply-type']
data['force'] = str(data['force']).lower()
del data['target']
data['stop-on-failure'] = str(data['stop-on-failure']).lower()
if data['type'] == 'kubernetes':
data['force'] = str(data['force-kubernetes']).lower()
del data['force-kubernetes']
response = api.dc_manager.strategy_create(request, data)
if not response: