mirror of
https://github.com/cisagov/manage.get.gov.git
synced 2025-08-18 07:24:10 +02:00
Merge pull request #2025 from cisagov/rh/1979-fix-unknown-state
ISSUE 1979 PT 2: Unknown State Remdiation Pt 2
This commit is contained in:
commit
61e6206c51
6 changed files with 150 additions and 23 deletions
|
@ -1689,6 +1689,59 @@ class Domain(TimeStampedModel, DomainHelper):
|
|||
else:
|
||||
logger.error("Error _delete_hosts_if_not_used, code was %s error was %s" % (e.code, e))
|
||||
|
||||
def _fix_unknown_state(self, cleaned):
|
||||
"""
|
||||
_fix_unknown_state: Calls _add_missing_contacts_if_unknown
|
||||
to add contacts in as needed (or return an error). Otherwise
|
||||
if we are able to add contacts and the state is out of UNKNOWN
|
||||
and (and should be into DNS_NEEDED), we double check the
|
||||
current state and # of nameservers and update the state from there
|
||||
"""
|
||||
try:
|
||||
self._add_missing_contacts_if_unknown(cleaned)
|
||||
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
"%s couldn't _add_missing_contacts_if_unknown, error was %s."
|
||||
"Domain will still be in UNKNOWN state." % (self.name, e)
|
||||
)
|
||||
if len(self.nameservers) >= 2 and (self.state != self.State.READY):
|
||||
self.ready()
|
||||
self.save()
|
||||
|
||||
@transition(field="state", source=State.UNKNOWN, target=State.DNS_NEEDED)
|
||||
def _add_missing_contacts_if_unknown(self, cleaned):
|
||||
"""
|
||||
_add_missing_contacts_if_unknown: Add contacts (SECURITY, TECHNICAL, and/or ADMINISTRATIVE)
|
||||
if they are missing, AND switch the state to DNS_NEEDED from UNKNOWN (if it
|
||||
is in an UNKNOWN state, that is an error state)
|
||||
Note: The transition state change happens at the end of the function
|
||||
"""
|
||||
|
||||
missingAdmin = True
|
||||
missingSecurity = True
|
||||
missingTech = True
|
||||
|
||||
if len(cleaned.get("_contacts")) < 3:
|
||||
for contact in cleaned.get("_contacts"):
|
||||
if contact.type == PublicContact.ContactTypeChoices.ADMINISTRATIVE:
|
||||
missingAdmin = False
|
||||
if contact.type == PublicContact.ContactTypeChoices.SECURITY:
|
||||
missingSecurity = False
|
||||
if contact.type == PublicContact.ContactTypeChoices.TECHNICAL:
|
||||
missingTech = False
|
||||
|
||||
# We are only creating if it doesn't exist so we don't overwrite
|
||||
if missingAdmin:
|
||||
administrative_contact = self.get_default_administrative_contact()
|
||||
administrative_contact.save()
|
||||
if missingSecurity:
|
||||
security_contact = self.get_default_security_contact()
|
||||
security_contact.save()
|
||||
if missingTech:
|
||||
technical_contact = self.get_default_technical_contact()
|
||||
technical_contact.save()
|
||||
|
||||
def _fetch_cache(self, fetch_hosts=False, fetch_contacts=False):
|
||||
"""Contact registry for info about a domain."""
|
||||
try:
|
||||
|
@ -1696,6 +1749,9 @@ class Domain(TimeStampedModel, DomainHelper):
|
|||
cache = self._extract_data_from_response(data_response)
|
||||
cleaned = self._clean_cache(cache, data_response)
|
||||
self._update_hosts_and_contacts(cleaned, fetch_hosts, fetch_contacts)
|
||||
|
||||
if self.state == self.State.UNKNOWN:
|
||||
self._fix_unknown_state(cleaned)
|
||||
if fetch_hosts:
|
||||
self._update_hosts_and_ips_in_db(cleaned)
|
||||
if fetch_contacts:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue