[Freeipa-devel] [PATCH] [WIP] 172+173+175 Create per-type DNS API

Martin Kosek mkosek at redhat.com
Wed Dec 14 20:47:59 UTC 2011


On Wed, 2011-12-14 at 12:43 -0600, Endi Sukma Dewata wrote:
> On 12/14/2011 12:53 AM, Martin Kosek wrote:
> >> I found this works ok and adding records is definitely clearer but it
> >> seems odd to add with one command and delete/find with another. I could
> >> get used to it I suppose.
> >
> > Hm, we could add dnsrecord-<rr>-del ZONE RECORD VALUE command, but this
> > would increase the already high number of DNS commands.
> 
> As suggested in the meeting, instead of having a separate command for 
> each type:
> 
>    dnsrecordsrv-add ZONE NAME [srv-specific parameters...]
>    dnsrecordmx-add ZONE NAME [mx-specific parameters...]
> 
> we could use the same command but we specify the type as a parameter:
> 
>    dnsrecord-add ZONE NAME --rec-type=srv [srv-specific parameters...]
>    dnsrecord-add ZONE NAME --rec-type=mx [mx-specific parameters...]
> 
> This will keep the number of commands low regardless of the number of 
> rrtypes we support now or in the future. Same thing for mod and del.
> 
> All type-specific options can be made optional, or we can require some 
> options depending on the type specified. The doc needs to specify which 
> options are needed for each type.
> 
> The interactive mode should still work too based on the type specified. 
> If the user doesn't specify a type the command can even ask for it.
> 
> > Endi and Petr had an idea to add a new --structured option for
> > dnsrecord-find/dnsrecord-show which would show structured DNS records
> > instead of raw DNS records. But I think our current framework is not
> > ready for this. While a raw DNS record is basically one entry item
> > (label : value), structured DNS record is an entry on its own
> > ({label1:value1, label2:value2, ...}):
> >   - dnsrecord-find's output is ListOfEntries, but with use of
> > --structured option it would have to be changed to something like
> > ListOfListsOfEntries
> >   - dnsrecord-show's output would have to be changed with a use of
> > --structured option from Entry to ListOfEntries
> 
> I think we're mixing up several alternatives in the discussion. Never 
> mind about dnsrecord<rrtype>-find/show returning record data in separate 
> entries. I don't think right now it will be a good idea since they are 
> actually attributes (no filter for certain param in the type, no primary 
> key).
> 
> What we're suggesting is the find command should always return a 
> ListOfEntries and the show command should always return an Entry, which 
> will be consistent with other commands. So when you call dnsrecord-show 
> ZONE NAME without --structured, it will return a single Entry like before:
> 
> {
>      idnsname: 'foo',
>      arecord: [
>          '10.10.10.10'
>      ],
>      cnamerecord: [
>          'bar.example.com.',
>          'bar2.example.com.'
>      ]
> }
> 
> But when you specify --structured, it still returns a single Entry 'foo' 
> but the structure of the attributes will change like this (or like the 
> one suggested by Petr):
> 
> {
>      idnsname: 'foo',
>      records: [
>          {
>              type: 'a',
>              data: '10.10.10.10',
>              ip_address: '10.10.10.10'
>          },
>          {
>              type: 'cname',
>              data: 'bar.example.com.',
>              hostname: 'bar.example.com.'
>          },
>          {
>              type: 'cname',
>              data: 'bar2.example.com.',
>              hostname: 'bar2.example.com.'
>          },
>      ]
> }
> 
> If you call dnsrecord-find ZONE --structured the output will be a 
> ListOfEntries like before, but each Entry will have a structure like above.
> 
> > Another problem I see is that different RR types have parts with the
> > same name (e.g. "preference" is both in MX, KX and NAPTR records). If
> > any record could appear in an output entry, we would break current rule
> > that every output parameter in an entry is uniquely defined. Though this
> > issue could be solved with a prefix for every structured DNS record
> > part, i.e. KX record would have "kxpreference" and "kxechanger" parts.
> 
> Since the 'records' attribute is an array in an Entry, there shouldn't 
> be any issue about uniqueness.
> 
> Also as suggested in my previous email, we can also add a --rec-types 
> parameter to the find/show command to select which rrtypes we want to 
> see in the result. If not specified it should return all types.
> 

I think this all are valid points, I will summarize the proposad
approach to DNS API based on options instead of commands to separate
mail. It is too important to get lost in this long thread :-)

Martin




More information about the Freeipa-devel mailing list