App-FargateStack

 view release on metacpan or  search on metacpan

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


  croak "no vpc_id found\n"
    if !$vpc_id;

  my $query = sprintf 'LoadBalancers[?Scheme == `%s` && VpcId == `%s`]', $type, $vpc_id;

  my $albs = $self->describe_load_balancers( query => $query );

  $self->get_logger->debug( Dumper( [ albs => $albs ] ) );

  croak "ERROR: No ALBs of type: $type\n"
    if !$no_error && !$albs || !@{$albs};

  croak sprintf "ERROR: More than one ALBs of type: $type\n%s\n", join "\n", map { $_->{LoadBalancerName} } @{$albs}
    if !$no_error && @{$albs} > 1;

  my $alb = $albs->[0];

  $self->set_alb($alb);

  $self->get_logger->debug( sub { return Dumper( [ alb => $alb ] ) } );

  return ( $alb->{LoadBalancerArn}, $alb->{SecurityGroups}->[0] );
}

########################################################################
sub get_listener_by_port {
########################################################################
  my ( $self, $alb_arn, $port ) = @_;

  my $query = sprintf 'Listeners[?Port == `%s`]', $port;

  my $result = $self->command(
    'describe-listeners' => [
      '--load-balancer' => $alb_arn,
      '--query',        => $query,
    ]
  );

  return @{$result};
}

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

  my ( $listener_arn, $priority, $conditions, $default_action ) = @args{qw(listener_arn priority conditions default_action)};

  return $self->command(
    'create-rule' => [
      '--listener-arn' => $listener_arn,
      '--priority'     => $priority,
      '--conditions'   => $conditions,
      '--actions'      => $default_action,
    ]
  );
}

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

  my ( $alb_arn, $scheme ) = @args{qw(arn scheme)};

  croak "usage: validate_alb(alb-arn, [ vpc-id ])\n"
    if !$alb_arn;

  my $query = sprintf 'LoadBalancers[?LoadBalancerArn == `%s` && Scheme == `%s`]', $alb_arn, $scheme;

  my $albs = $self->describe_load_balancers( query => $query );

  croak "ERROR: unable to find ALB: %s\n%s", $alb_arn, $self->get_error
    if !$albs;

  return $albs;
}

########################################################################
sub find_alb_subnets {
########################################################################
  my ( $self, $alb_arn ) = @_;

  my $query = sprintf "LoadBalancers[?LoadBalancerArn == `%s`] | [0].AvailabilityZones[].SubnetId", $alb_arn;

  my @cmd = qw(aws elbv2 describe-load-balancers);

  push @cmd,
    '--profile' => $self->profile,
    '--query'   => $query;

  my $result = $self->execute(@cmd);

  return $result ? decode_json($result) : $result;
}

########################################################################
sub target_group_exists {
########################################################################
  my ( $self, $target_group_name ) = @_;

  my $query = sprintf "TargetGroups[?TargetGroupName == `%s`]|[0]", $target_group_name;

  my @cmd = qw(aws elbv2 describe-target-groups);

  push @cmd,
    (
    '--query'   => $query,
    '--profile' => $self->profile,
    );

  my $result = $self->execute(@cmd);

  return $result ? decode_json($result) : $result;
}

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

  my ( $port, $protocol, $name, $vpc_id, $target_type, $health_check )
    = @args{qw(port protocol name vpc_id target_type health_check)};

  $port        //= '80';
  $protocol    //= 'HTTP';



( run in 0.746 second using v1.01-cache-2.11-cpan-39bf76dae61 )