Marathon
view release on metacpan or search on metacpan
lib/Marathon/App.pm view on Meta::CPAN
package Marathon::App;
use strict;
use warnings;
use parent 'Marathon::Remote';
our @rw_values = qw(
id
labels
dependencies
healthchecks
requirePorts
cpus
backoffSeconds
upgradeStrategy
ports
constraints
cmd
args
env
container
executor
mem
maxLaunchDelaySeconds
backoffFactor
instances
);
sub new {
my ($class, $conf, $parent) = @_;
my $self = bless {};
$conf = {} unless $conf && ref $conf eq 'HASH';
$self->{data} = $conf;
$self->{parent} = $parent;
return $self;
}
sub create {
my $self = shift;
$self->_bail unless defined $self->{parent};
return $self->{parent}->_post('/v2/apps', $self->get_updateable_values);
}
sub update {
my ($self, $args) = @_;
my $param = $args && $args->{force} && $args->{force} && $args->{force} !~ /false/i ? '?force=true' : ''; #default is false
$self->_bail unless defined $self->{parent};
return $self->{parent}->_put('/v2/apps/' . $self->id . $param, $self->get_updateable_values);
}
sub delete {
my $self = shift;
$self->_bail unless defined $self->{parent};
return $self->{parent}->_delete('/v2/apps/' . $self->id);
}
sub restart {
my $self = shift;
$self->_bail unless defined $self->{parent};
return $self->{parent}->_post('/v2/apps/' . $self->id . '/restart' );
}
sub versions {
my ( $self, $extra ) = @_;
if ( defined $extra ) {
return $self->get_version( $extra );
}
$self->_bail unless defined $self->{parent};
return $self->{parent}->_get_obj('/v2/apps/' . $self->id . '/versions' );
}
sub get_version {
my ( $self, $version ) = @_;
$self->_bail unless defined $self->{parent};
return $self->{parent}->_get_obj('/v2/apps/' . $self->id . '/versions/' . $version );
}
sub kill_tasks {
my ( $self, $args ) = @_;
my %real_args = map {
$_ =~ m,^host|scale$, ?
( $_ => $args->{$_} ) : print(STDERR "Extraoneous value `$_' to kill_tasks will be ignored\n") && ()
} keys %{$args};
return $self->{parent}->_delete('/v2/apps/' . $self->id . '/tasks', \%real_args);
}
sub kill_task {
my ( $self, $task_id, $scale ) = @_;
return $self->{parent}->_delete('/v2/apps/' . $self->id . '/tasks/' . $task_id, {scale => $scale});
}
sub get_updateable_values {
my $self = shift;
my %kv = map { $self->{data}->{$_} ? ( $_ => $self->{data}->{$_} ) : () } @Marathon::App::rw_values;
return \%kv;
}
sub labels {
my ($self, $val) = @_;
if ( $val ) {
$self->{data}->{labels} = $val;
}
return $self->{data}->{labels};
}
( run in 0.812 second using v1.01-cache-2.11-cpan-9581c071862 )