Merge "Ensure only one prompt for cidr and gateway_ip"
This commit is contained in:
commit
979dbff32b
|
@ -32,6 +32,19 @@ LOG = logging.getLogger(__name__)
|
|||
class CreateSubnetInfoAction(network_workflows.CreateSubnetInfoAction):
|
||||
with_subnet = forms.BooleanField(initial=True, required=False,
|
||||
widget=forms.HiddenInput())
|
||||
cidr = forms.IPField(label=_("Network Address"),
|
||||
initial="",
|
||||
error_messages={
|
||||
'required': _("Specify network address")},
|
||||
widget=forms.TextInput(attrs={
|
||||
'class': 'switched',
|
||||
'data-switch-on': 'source',
|
||||
'data-source-manual': _("Network Address"),
|
||||
}),
|
||||
help_text=_("Network address in CIDR format "
|
||||
"(e.g. 192.168.0.0/24, 2001:DB8::/48)"),
|
||||
version=forms.IPv4 | forms.IPv6,
|
||||
mask=True)
|
||||
|
||||
class Meta(object):
|
||||
name = _("Subnet")
|
||||
|
@ -41,7 +54,7 @@ class CreateSubnetInfoAction(network_workflows.CreateSubnetInfoAction):
|
|||
|
||||
def clean(self):
|
||||
cleaned_data = workflows.Action.clean(self)
|
||||
self._check_subnet_data(cleaned_data, with_network_form=False)
|
||||
self._check_subnet_data(cleaned_data)
|
||||
return cleaned_data
|
||||
|
||||
|
||||
|
@ -105,6 +118,23 @@ class UpdateSubnetInfoAction(CreateSubnetInfoAction):
|
|||
ip_version = forms.ThemableChoiceField(choices=[(4, 'IPv4'), (6, 'IPv6')],
|
||||
widget=forms.HiddenInput(),
|
||||
label=_("IP Version"))
|
||||
gateway_ip = forms.IPField(
|
||||
label=_("Gateway IP"),
|
||||
widget=forms.TextInput(attrs={
|
||||
'class': 'switched',
|
||||
'data-switch-on': 'gateway_ip',
|
||||
'data-source-manual': _("Gateway IP")
|
||||
}),
|
||||
initial="",
|
||||
error_messages={
|
||||
'required': _('Specify IP address of gateway or '
|
||||
'check "Disable Gateway" checkbox.')
|
||||
},
|
||||
help_text=_("IP address of Gateway (e.g. 192.168.0.254) "
|
||||
"If you do not want to use a gateway, "
|
||||
"check 'Disable Gateway' below."),
|
||||
version=forms.IPv4 | forms.IPv6,
|
||||
mask=False)
|
||||
|
||||
class Meta(object):
|
||||
name = _("Subnet")
|
||||
|
@ -114,8 +144,7 @@ class UpdateSubnetInfoAction(CreateSubnetInfoAction):
|
|||
|
||||
def clean(self):
|
||||
cleaned_data = workflows.Action.clean(self)
|
||||
self._check_subnet_data(cleaned_data, is_create=False,
|
||||
with_network_form=False)
|
||||
self._check_subnet_data(cleaned_data)
|
||||
return cleaned_data
|
||||
|
||||
|
||||
|
|
|
@ -139,11 +139,13 @@ class CreateSubnetInfoAction(workflows.Action):
|
|||
required=False)
|
||||
|
||||
cidr = forms.IPField(label=_("Network Address"),
|
||||
required=False,
|
||||
initial="",
|
||||
error_messages={
|
||||
'required': _('Specify "Network Address" or '
|
||||
'clear "Create Subnet" checkbox '
|
||||
'in previous step.')},
|
||||
widget=forms.TextInput(attrs={
|
||||
'class': 'switched',
|
||||
'data-required-when-shown': 'true',
|
||||
'data-switch-on': 'source',
|
||||
'data-source-manual': _("Network Address"),
|
||||
}),
|
||||
|
@ -202,13 +204,6 @@ class CreateSubnetInfoAction(workflows.Action):
|
|||
def __init__(self, request, context, *args, **kwargs):
|
||||
super(CreateSubnetInfoAction, self).__init__(request, context, *args,
|
||||
**kwargs)
|
||||
if 'with_subnet' in context:
|
||||
self.fields['with_subnet'] = forms.BooleanField(
|
||||
initial=context['with_subnet'],
|
||||
required=False,
|
||||
widget=forms.HiddenInput()
|
||||
)
|
||||
|
||||
if not getattr(settings, 'OPENSTACK_NEUTRON_NETWORK',
|
||||
{}).get('enable_ipv6', True):
|
||||
self.fields['ip_version'].widget = forms.HiddenInput()
|
||||
|
@ -279,8 +274,7 @@ class CreateSubnetInfoAction(workflows.Action):
|
|||
'allowed': range_str})
|
||||
raise forms.ValidationError(msg)
|
||||
|
||||
def _check_subnet_data(self, cleaned_data, is_create=True,
|
||||
with_network_form=True):
|
||||
def _check_subnet_data(self, cleaned_data):
|
||||
cidr = cleaned_data.get('cidr')
|
||||
ip_version = int(cleaned_data.get('ip_version'))
|
||||
gateway_ip = cleaned_data.get('gateway_ip')
|
||||
|
@ -293,14 +287,9 @@ class CreateSubnetInfoAction(workflows.Action):
|
|||
'"Enter Network Address manually" and specify '
|
||||
'"Network Address".')
|
||||
raise forms.ValidationError(msg)
|
||||
if not cidr and address_source != 'subnetpool':
|
||||
if with_network_form:
|
||||
msg = _('Specify "Network Address" or '
|
||||
'clear "Create Subnet" checkbox in previous step.')
|
||||
else:
|
||||
msg = _("Specify network address")
|
||||
raise forms.ValidationError(msg)
|
||||
if cidr:
|
||||
if address_source == 'subnetpool' and 'cidr' in self._errors:
|
||||
del self._errors['cidr']
|
||||
elif cidr:
|
||||
subnet = netaddr.IPNetwork(cidr)
|
||||
if subnet.version != ip_version:
|
||||
msg = _('Network Address and IP version are inconsistent.')
|
||||
|
@ -316,18 +305,18 @@ class CreateSubnetInfoAction(workflows.Action):
|
|||
if netaddr.IPAddress(gateway_ip).version is not ip_version:
|
||||
msg = _('Gateway IP and IP version are inconsistent.')
|
||||
raise forms.ValidationError(msg)
|
||||
if not is_create and not no_gateway and not gateway_ip:
|
||||
msg = _('Specify IP address of gateway or '
|
||||
'check "Disable Gateway" checkbox.')
|
||||
raise forms.ValidationError(msg)
|
||||
if no_gateway and 'gateway_ip' in self._errors:
|
||||
del self._errors['gateway_ip']
|
||||
|
||||
def _remove_fields_errors(self):
|
||||
self._errors = {}
|
||||
|
||||
def clean(self):
|
||||
cleaned_data = super(CreateSubnetInfoAction, self).clean()
|
||||
with_subnet = cleaned_data.get('with_subnet')
|
||||
with_subnet = self.initial.get('with_subnet')
|
||||
if not with_subnet:
|
||||
return cleaned_data
|
||||
self._remove_fields_errors()
|
||||
return None
|
||||
cleaned_data = super(CreateSubnetInfoAction, self).clean()
|
||||
self._check_subnet_data(cleaned_data)
|
||||
return cleaned_data
|
||||
|
||||
|
|
Loading…
Reference in New Issue