StackExchange / dnscontrol

Infrastructure as code for DNS!
https://dnscontrol.org/
MIT License
3.07k stars 389 forks source link

Refactor how rtypes are implemented #3036

Open tlimoncelli opened 1 month ago

tlimoncelli commented 1 month ago

CC @cafferata

Problem statement:

Proposed solution:

Ideally everything related to a particular rtypes would be isolated to a single directory that includes code, documentation, tests, etc. exclusively for that rtype.

I don't think we can get there in one step, but I think we can improve the current situation.

Proposal:

  1. Move as much code out of helpers.js as possible. Simply gather the user input and send it to the Go code. Go can do the validation, create the RecordConfig, process any metadata, etc.
  2. rtypes should be defined in $git/rtypes/NAME/ or $git/providers/PROVIDERNAME/rtypes/NAME/ where NAME is the rtype name.
  3. rtypes documentation should be in $git/rtypes/NAME/documentation/ or $git/providers/PROVIDERNAME/rtypes/NAME/documentation/. The documentation system should find it there automagicallly.
  4. In places where rtype code must be included outside those directories, create Go interfaces

Implementation:

I'm using https://github.com/StackExchange/dnscontrol/pull/3035 (CF_SINGLE_REDIRECT) as an opportunity to improve some of these issues.

  1. I've implemented a new way to pass information about records from helpers.js to the Go code. To add CF_SINGLE_REDIRECT literally 1 line is added: var CF_SINGLE_REDIRECT = rawrecordBuilder('CF_SINGLE_REDIRECT');
  2. The code for CF_SINGLE_REDIRECT is in $git/providers/cloudflare/rtypes/cfsingleredirect/

No change to where documentation is (that's going to require changes to the go generate code) nor other changes. However this is a start.

cafferata commented 1 month ago

I am in favor of the proposed solution. πŸ‘ I am happy to help with redesigning the documentation generator. πŸ€“

tlimoncelli commented 1 month ago

I am in favor of the proposed solution. πŸ‘ I am happy to help with redesigning the documentation generator. πŸ€“

yes, please!