The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package HTTP::Balancer::Command::Add::Backend;
use Modern::Perl;
use Moose;
with qw(HTTP::Balancer::Role::Command);

has name => (
    is      => "rw",
    traits  => [ 'NoGetopt' ],
    default => sub { shift->argv(2) },
);

has host => (
    is            => "rw",
    isa           => "Str",
    required      => 1,
    traits        => ['Getopt'],
    cmd_aliases   => 'h',
    documentation => "the virtual host this backend belongs to",
);

has address => (
    is            => "rw",
    isa           => "Str",
    required      => 1,
    traits        => ['Getopt'],
    cmd_aliases   => 'a',
    documentation => "the address of this backend",
);

has port => (
    is            => "rw",
    isa           => "Num",
    traits        => ['Getopt'],
    cmd_aliases   => 'p',
    default       => "80",
    documentation => "the port of this backend listens to. default: 80",
);

sub ordinary_args {
    qw(name)
};

sub run {
    my ($self, ) = @_;

    my $host = $self->model("Host")->find(name => $self->host);

    $self->model("Backend")
         ->new(
             name    => $self->name,
             address => $self->address,
             port    => $self->port,
             host_id => $host->id,
         )
         ->save;
}

1;