1import type * as ECS from "@distilled.cloud/aws/ecs";
2import type * as Effect from "effect/Effect";
3import * as Binding from "../../Binding.ts";
4import type { Cluster } from "./Cluster.ts";
5
6export interface DescribeContainerInstancesRequest extends Omit<
7 ECS.DescribeContainerInstancesRequest,
8 "cluster"
9> {}
10
11/**
12 * Runtime binding for `ecs:DescribeContainerInstances`.
13 *
14 * Bind this operation to a `Cluster` inside a function runtime to get a
15 * callable that describes container instances registered to the bound
16 * cluster — remaining resources, running-task counts, agent status. The
17 * cluster ARN is injected automatically and the host is granted
18 * `ecs:DescribeContainerInstances` on the cluster's container instances.
19 * ### Container Instances
20 * **Example:** Inspect Remaining Capacity
21 * ```typescript
22 * const describeContainerInstances =
23 * yield* AWS.ECS.DescribeContainerInstances(cluster);
24 *
25 * const response = yield* describeContainerInstances({
26 * containerInstances: [containerInstanceArn],
27 * });
28 * const remaining = response.containerInstances?.[0]?.remainingResources;
29 * ```
30 *
31 * @binding
32 */
33export interface DescribeContainerInstances extends Binding.Service<
34 DescribeContainerInstances,
35 "AWS.ECS.DescribeContainerInstances",
36 (
37 cluster: Cluster,
38 ) => Effect.Effect<
39 (
40 request: DescribeContainerInstancesRequest,
41 ) => Effect.Effect<
42 ECS.DescribeContainerInstancesResponse,
43 ECS.DescribeContainerInstancesError
44 >
45 >
46> {}
47export const DescribeContainerInstances =
48 Binding.Service<DescribeContainerInstances>(
49 "AWS.ECS.DescribeContainerInstances",
50 );