The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package DNS::Oterica::NodeFamily::ExampleMX;
use Moose;
extends 'DNS::Oterica::NodeFamily';

sub name { 'com.example.mx' }

has mx_nodes => (
  is  => 'ro',
  isa => 'HashRef',
  default    => sub { {} },
);

after add_node => sub {
  my ($self, $node) = @_;
  my $nodes = $self->mx_nodes;
  my $i = keys %$nodes;
  
  my $next_name = sprintf 'mx-%s.example.com', $i+1;

  $self->mx_nodes->{ $next_name } = $node;
};

augment as_data_lines => sub {
  my ($self) = @_;
  my @lines;

  my $mx = $self->mx_nodes;
  for my $mxname (sort keys %$mx) {
    push @lines, $self->rec->a({
      name => $mxname,
      node => $mx->{$mxname},
    });
  }
  return @lines;
};

__PACKAGE__->meta->make_immutable;
no Moose;
1;