App-FargateStack

 view release on metacpan or  search on metacpan

lib/App/ECS.pm  view on Meta::CPAN

########################################################################
  my ( $self, %args ) = @_;

  my ( $service_name, $cluster_name, $task_definition, $desired_count, $public_ip )
    = @args{qw(service_name cluster_name task_definition desired_count public_ip)};

  $cluster_name  //= $self->get_cluster_name;
  $desired_count //= 1;

  my ( $subnets, $security_groups ) = @args{qw(subnets security_groups)};

  croak "subnets is required and must be an array\n"
    if !$subnets || reftype($subnets) ne 'ARRAY';

  croak "security_groups is required and must be an array\n"
    if !$security_groups || reftype($security_groups) ne 'ARRAY';

  croak "no security groups defined\n"
    if !@{$security_groups};

  croak "service-name is required\n"
    if !$service_name;

  my $network_configuration = {
    awsvpcConfiguration => {
      subnets        => $subnets,
      securityGroups => $security_groups,
      assignPublicIp => $public_ip ? 'ENABLED' : 'DISABLED',
    }
  };

  my ( $target_group_arn, $container_name, $container_port ) = @args{qw(target_group_arn container_name container_port)};

  $container_port //= $DEFAULT_PORT;

  my $load_balancers;

  if ($target_group_arn) {
    $load_balancers = [
      { targetGroupArn => $target_group_arn,
        containerName  => $container_name,
        containerPort  => $container_port,
      }
    ];
  }

  return $self->command(
    'create-service' => [
      '--cluster'               => $cluster_name,
      '--service-name'          => $service_name,
      '--task-definition'       => $task_definition,
      '--desired-count'         => $desired_count,
      '--launch-type'           => 'FARGATE',
      '--network-configuration' => encode_json($network_configuration),
      $load_balancers ? ( '--load-balancers' => encode_json($load_balancers) ) : (),
    ]
  );
}

########################################################################
sub update_service {
########################################################################
  my ( $self, %args ) = @_;

  my ( $cluster_name, $service_name, $task_definition, $force, $desired_count, $query )
    = @args{qw(cluster_name service_name task_definition force desired_count query)};

  $cluster_name //= $self->get_cluster_name;
  $service_name //= $self->get_service_name;

  return $self->command(
    'update-service' => [
      '--cluster' => $cluster_name,
      '--service' => $service_name,
      $query                 ? ( '--query' => $query )                     : (),
      defined $desired_count ? ( '--desired-count' => $desired_count )     : (),
      ($task_definition)     ? ( '--task-definition' => $task_definition ) : (),
      $force                 ? '--force-new-deployment'                    : (),
    ]
  );
}

########################################################################
sub tag_resource {
########################################################################
  my ( $self, $arn, @tags ) = @_;

  my $tag_string = join q{}, map { sprintf 'Key=%s,Value=%s', @{$_} } pairs @tags;

  return $self->command(
    'add-tags',
    [ '--tags'         => $tag_string,
      '--resoure-arns' => $arn,
    ]
  );
}

1;



( run in 0.680 second using v1.01-cache-2.11-cpan-2398b32b56e )