diff --git a/src/registrar/forms/domain.py b/src/registrar/forms/domain.py index 8abc7e14a..d14ed41ba 100644 --- a/src/registrar/forms/domain.py +++ b/src/registrar/forms/domain.py @@ -25,7 +25,8 @@ class DomainNameserverForm(forms.Form): """Form for changing nameservers.""" server = forms.CharField(label="Name server", strip=True) - # when adding IPs to this form ensure they are stripped as well + + ip = forms.CharField(label="IP address", strip=True, required=False) NameserverFormset = formset_factory( diff --git a/src/registrar/models/domain.py b/src/registrar/models/domain.py index bab993b04..80bb1ab30 100644 --- a/src/registrar/models/domain.py +++ b/src/registrar/models/domain.py @@ -322,6 +322,7 @@ class Domain(TimeStampedModel, DomainHelper): ) elif ip is not None and ip != []: for addr in ip: + logger.info(f"ip address {addr}") if not self._valid_ip_addr(addr): raise NameserverError( code=nsErrorCodes.INVALID_IP, nameserver=nameserver, ip=ip @@ -334,7 +335,9 @@ class Domain(TimeStampedModel, DomainHelper): returns: isValid (boolean)-True for valid ip address""" try: + logger.info(f"in valid_ip_addr: {ipToTest}") ip = ipaddress.ip_address(ipToTest) + logger.info(ip.version) return ip.version == 6 or ip.version == 4 except ValueError: @@ -602,7 +605,7 @@ class Domain(TimeStampedModel, DomainHelper): if len(hosts) > 13: raise NameserverError(code=nsErrorCodes.TOO_MANY_HOSTS) - if self.state not in [self.State.DNS_NEEDED, self.State.READY]: + if self.state not in [self.State.DNS_NEEDED, self.State.READY, self.State.UNKNOWN]: raise ActionNotAllowed("Nameservers can not be " "set in the current state") logger.info("Setting nameservers") diff --git a/src/registrar/templates/domain_nameservers.html b/src/registrar/templates/domain_nameservers.html index 596eec524..37fa1eb85 100644 --- a/src/registrar/templates/domain_nameservers.html +++ b/src/registrar/templates/domain_nameservers.html @@ -22,15 +22,24 @@ {% for form in formset %}
- {% with sublabel_text="Example: ns"|concat:forloop.counter|concat:".example.com" %} - {% if forloop.counter <= 2 %} - {% with attr_required=True %} - {% input_with_errors form.server %} - {% endwith %} - {% else %} - {% input_with_errors form.server %} - {% endif %} - {% endwith %} +
+
+ {% with sublabel_text="Example: ns"|concat:forloop.counter|concat:".example.com" %} + {% if forloop.counter <= 2 %} + {% with attr_required=True %} + {% input_with_errors form.server %} + {% endwith %} + {% else %} + {% input_with_errors form.server %} + {% endif %} + {% endwith %} +
+
+ {% with sublabel_text="Example: ns"|concat:forloop.counter|concat:".example.com" %} + {% input_with_errors form.ip %} + {% endwith %} +
+
{% endfor %} diff --git a/src/registrar/views/domain.py b/src/registrar/views/domain.py index 36b7a9445..dbf65fe6b 100644 --- a/src/registrar/views/domain.py +++ b/src/registrar/views/domain.py @@ -173,7 +173,7 @@ class DomainNameserversView(DomainPermissionView, FormMixin): if nameservers is not None: # Add existing nameservers as initial data - initial_data.extend({"server": name} for name, *ip in nameservers) + initial_data.extend({"server": name, "ip": ip} for name, ip in nameservers) # Ensure at least 3 fields, filled or empty while len(initial_data) < 2: @@ -198,6 +198,7 @@ class DomainNameserversView(DomainPermissionView, FormMixin): for i, form in enumerate(formset): form.fields["server"].label += f" {i+1}" + form.fields["ip"].label += f" {i+1}" if i < 2: form.fields["server"].required = True else: @@ -221,7 +222,10 @@ class DomainNameserversView(DomainPermissionView, FormMixin): nameservers = [] for form in formset: try: - as_tuple = (form.cleaned_data["server"],) + as_tuple = ( + form.cleaned_data["server"], + [form.cleaned_data["ip"]] + ) nameservers.append(as_tuple) except KeyError: # no server information in this field, skip it