@microagi/alchemy-gcp 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +88 -0
- package/lib/Auth/AuthProvider.d.ts +48 -0
- package/lib/Auth/AuthProvider.d.ts.map +1 -0
- package/lib/Auth/AuthProvider.js +84 -0
- package/lib/Auth/AuthProvider.js.map +1 -0
- package/lib/Auth/Credentials.d.ts +28 -0
- package/lib/Auth/Credentials.d.ts.map +1 -0
- package/lib/Auth/Credentials.js +41 -0
- package/lib/Auth/Credentials.js.map +1 -0
- package/lib/CloudResourceManager/Project.d.ts +143 -0
- package/lib/CloudResourceManager/Project.d.ts.map +1 -0
- package/lib/CloudResourceManager/Project.js +272 -0
- package/lib/CloudResourceManager/Project.js.map +1 -0
- package/lib/CloudResourceManager/index.d.ts +3 -0
- package/lib/CloudResourceManager/index.d.ts.map +1 -0
- package/lib/CloudResourceManager/index.js +2 -0
- package/lib/CloudResourceManager/index.js.map +1 -0
- package/lib/Compute/GlobalAddress.d.ts +101 -0
- package/lib/Compute/GlobalAddress.d.ts.map +1 -0
- package/lib/Compute/GlobalAddress.js +134 -0
- package/lib/Compute/GlobalAddress.js.map +1 -0
- package/lib/Compute/Network.d.ts +114 -0
- package/lib/Compute/Network.d.ts.map +1 -0
- package/lib/Compute/Network.js +145 -0
- package/lib/Compute/Network.js.map +1 -0
- package/lib/Compute/Operations.d.ts +34 -0
- package/lib/Compute/Operations.d.ts.map +1 -0
- package/lib/Compute/Operations.js +62 -0
- package/lib/Compute/Operations.js.map +1 -0
- package/lib/Compute/SharedVpcHost.d.ts +44 -0
- package/lib/Compute/SharedVpcHost.d.ts.map +1 -0
- package/lib/Compute/SharedVpcHost.js +71 -0
- package/lib/Compute/SharedVpcHost.js.map +1 -0
- package/lib/Compute/SharedVpcServiceProject.d.ts +46 -0
- package/lib/Compute/SharedVpcServiceProject.d.ts.map +1 -0
- package/lib/Compute/SharedVpcServiceProject.js +96 -0
- package/lib/Compute/SharedVpcServiceProject.js.map +1 -0
- package/lib/Compute/Subnetwork.d.ts +108 -0
- package/lib/Compute/Subnetwork.d.ts.map +1 -0
- package/lib/Compute/Subnetwork.js +201 -0
- package/lib/Compute/Subnetwork.js.map +1 -0
- package/lib/Compute/index.d.ts +6 -0
- package/lib/Compute/index.d.ts.map +1 -0
- package/lib/Compute/index.js +6 -0
- package/lib/Compute/index.js.map +1 -0
- package/lib/Container/Cluster.d.ts +216 -0
- package/lib/Container/Cluster.d.ts.map +1 -0
- package/lib/Container/Cluster.js +326 -0
- package/lib/Container/Cluster.js.map +1 -0
- package/lib/Container/NodePool.d.ts +214 -0
- package/lib/Container/NodePool.d.ts.map +1 -0
- package/lib/Container/NodePool.js +344 -0
- package/lib/Container/NodePool.js.map +1 -0
- package/lib/Container/Operations.d.ts +50 -0
- package/lib/Container/Operations.d.ts.map +1 -0
- package/lib/Container/Operations.js +51 -0
- package/lib/Container/Operations.js.map +1 -0
- package/lib/Container/index.d.ts +5 -0
- package/lib/Container/index.d.ts.map +1 -0
- package/lib/Container/index.js +3 -0
- package/lib/Container/index.js.map +1 -0
- package/lib/Parallelstore/Instance.d.ts +119 -0
- package/lib/Parallelstore/Instance.d.ts.map +1 -0
- package/lib/Parallelstore/Instance.js +180 -0
- package/lib/Parallelstore/Instance.js.map +1 -0
- package/lib/Parallelstore/index.d.ts +2 -0
- package/lib/Parallelstore/index.d.ts.map +1 -0
- package/lib/Parallelstore/index.js +2 -0
- package/lib/Parallelstore/index.js.map +1 -0
- package/lib/Providers.d.ts +24 -0
- package/lib/Providers.d.ts.map +1 -0
- package/lib/Providers.js +51 -0
- package/lib/Providers.js.map +1 -0
- package/lib/ServiceNetworking/PsaConnection.d.ts +84 -0
- package/lib/ServiceNetworking/PsaConnection.d.ts.map +1 -0
- package/lib/ServiceNetworking/PsaConnection.js +130 -0
- package/lib/ServiceNetworking/PsaConnection.js.map +1 -0
- package/lib/ServiceNetworking/index.d.ts +2 -0
- package/lib/ServiceNetworking/index.d.ts.map +1 -0
- package/lib/ServiceNetworking/index.js +2 -0
- package/lib/ServiceNetworking/index.js.map +1 -0
- package/lib/ServiceUsage/ApiEnable.d.ts +78 -0
- package/lib/ServiceUsage/ApiEnable.d.ts.map +1 -0
- package/lib/ServiceUsage/ApiEnable.js +132 -0
- package/lib/ServiceUsage/ApiEnable.js.map +1 -0
- package/lib/ServiceUsage/index.d.ts +3 -0
- package/lib/ServiceUsage/index.d.ts.map +1 -0
- package/lib/ServiceUsage/index.js +2 -0
- package/lib/ServiceUsage/index.js.map +1 -0
- package/lib/Tags.d.ts +57 -0
- package/lib/Tags.d.ts.map +1 -0
- package/lib/Tags.js +106 -0
- package/lib/Tags.js.map +1 -0
- package/lib/index.d.ts +11 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +10 -0
- package/lib/index.js.map +1 -0
- package/package.json +70 -0
- package/src/Auth/AuthProvider.ts +180 -0
- package/src/Auth/Credentials.ts +69 -0
- package/src/CloudResourceManager/Project.ts +517 -0
- package/src/CloudResourceManager/index.ts +2 -0
- package/src/Compute/GlobalAddress.ts +283 -0
- package/src/Compute/Network.ts +306 -0
- package/src/Compute/Operations.ts +108 -0
- package/src/Compute/SharedVpcHost.ts +141 -0
- package/src/Compute/SharedVpcServiceProject.ts +185 -0
- package/src/Compute/Subnetwork.ts +375 -0
- package/src/Compute/index.ts +5 -0
- package/src/Container/Cluster.ts +599 -0
- package/src/Container/NodePool.ts +620 -0
- package/src/Container/Operations.ts +88 -0
- package/src/Container/index.ts +8 -0
- package/src/Parallelstore/Instance.ts +371 -0
- package/src/Parallelstore/index.ts +1 -0
- package/src/Providers.ts +84 -0
- package/src/ServiceNetworking/PsaConnection.ts +269 -0
- package/src/ServiceNetworking/index.ts +1 -0
- package/src/ServiceUsage/ApiEnable.ts +267 -0
- package/src/ServiceUsage/index.ts +2 -0
- package/src/Tags.ts +130 -0
- package/src/index.ts +16 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import * as cont from "@distilled.cloud/gcp/container-v1";
|
|
2
|
+
import { Resource } from "alchemy";
|
|
3
|
+
import * as Provider from "alchemy/Provider";
|
|
4
|
+
import type * as GCP from "../Providers.ts";
|
|
5
|
+
export type NodePoolProps = {
|
|
6
|
+
/** GCP project ID. Immutable — replace if changed. */
|
|
7
|
+
project: string;
|
|
8
|
+
/**
|
|
9
|
+
* Cluster zone (e.g. `us-central1-a`) for a zonal cluster, or region
|
|
10
|
+
* (e.g. `us-central1`) for a regional cluster. Immutable — replace.
|
|
11
|
+
*/
|
|
12
|
+
location: string;
|
|
13
|
+
/**
|
|
14
|
+
* Parent cluster name. Immutable — node pools cannot be reparented; a
|
|
15
|
+
* change here triggers a replace.
|
|
16
|
+
*/
|
|
17
|
+
clusterName: string;
|
|
18
|
+
/**
|
|
19
|
+
* Pool name. Defaults to `createPhysicalName({ id, lowercase: true,
|
|
20
|
+
* maxLength: 40 })`. Lowercase alphanumeric + hyphens, ≤40 chars.
|
|
21
|
+
* Immutable — replace if changed.
|
|
22
|
+
*/
|
|
23
|
+
name?: string;
|
|
24
|
+
/**
|
|
25
|
+
* Initial size at create time. GKE Standard rejects pool creation
|
|
26
|
+
* without a positive node count, so when omitted we default to
|
|
27
|
+
* `autoscaling.minNodeCount ?? 1` on the create path.
|
|
28
|
+
*
|
|
29
|
+
* Subsequent size changes go via `setSize` when `autoscaling` is
|
|
30
|
+
* disabled, or are GKE-managed when `autoscaling.enabled` is true
|
|
31
|
+
* (the size sync is skipped to avoid fighting the autoscaler).
|
|
32
|
+
*/
|
|
33
|
+
initialNodeCount?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Per-pool zones. Override the cluster default. Mutable via
|
|
36
|
+
* `update` — sent in a standalone update body to avoid the SDK's
|
|
37
|
+
* "do not combine with other fields" warning.
|
|
38
|
+
*/
|
|
39
|
+
nodeLocations?: ReadonlyArray<string>;
|
|
40
|
+
/** Node configuration (machine, disk, accelerators, taints, labels, …). */
|
|
41
|
+
config: {
|
|
42
|
+
/** GCE machine type, e.g. `n2-standard-4`. Mutable via `update`. */
|
|
43
|
+
machineType: string;
|
|
44
|
+
/** Boot disk size GB. Mutable via `update`. */
|
|
45
|
+
diskSizeGb?: number;
|
|
46
|
+
/** Boot disk type, e.g. `pd-balanced`. Mutable via `update`. */
|
|
47
|
+
diskType?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Image, e.g. `COS_CONTAINERD`, `UBUNTU_CONTAINERD`. Omit to let
|
|
50
|
+
* GCP apply the GKE default for the cluster's release channel.
|
|
51
|
+
* Mutable via `update`.
|
|
52
|
+
*/
|
|
53
|
+
imageType?: string;
|
|
54
|
+
/** GPUs / TPUs. Mutable via `update`. */
|
|
55
|
+
accelerators?: ReadonlyArray<{
|
|
56
|
+
type: string;
|
|
57
|
+
count: number;
|
|
58
|
+
gpuPartitionSize?: string;
|
|
59
|
+
gpuDriverInstallationConfig?: {
|
|
60
|
+
gpuDriverVersion?: string;
|
|
61
|
+
};
|
|
62
|
+
}>;
|
|
63
|
+
/**
|
|
64
|
+
* GCE service account. Omit to let GCP fall back to the project's
|
|
65
|
+
* default compute SA. **Replace-only** — not in `UpdateNodePoolRequest`.
|
|
66
|
+
*/
|
|
67
|
+
serviceAccount?: string;
|
|
68
|
+
/**
|
|
69
|
+
* GCP API scopes. Omit to let GCP apply its default. **Replace-only**.
|
|
70
|
+
*/
|
|
71
|
+
oauthScopes?: ReadonlyArray<string>;
|
|
72
|
+
/** Kubernetes node taints. Mutable via `update`. */
|
|
73
|
+
taints?: ReadonlyArray<{
|
|
74
|
+
key: string;
|
|
75
|
+
value: string;
|
|
76
|
+
effect: "NO_SCHEDULE" | "PREFER_NO_SCHEDULE" | "NO_EXECUTE";
|
|
77
|
+
}>;
|
|
78
|
+
/** Kubernetes node labels (NOT GCP labels). Mutable via `update`. */
|
|
79
|
+
labels?: Record<string, string>;
|
|
80
|
+
/**
|
|
81
|
+
* GCE resource labels. Alchemy internal labels are merged on top
|
|
82
|
+
* automatically. Mutable via `update`.
|
|
83
|
+
*/
|
|
84
|
+
resourceLabels?: Record<string, string>;
|
|
85
|
+
/** Custom GCE metadata. **Replace-only**. */
|
|
86
|
+
metadata?: Record<string, string>;
|
|
87
|
+
/** Custom GCE tags (firewall). Mutable via `update`. */
|
|
88
|
+
tags?: ReadonlyArray<string>;
|
|
89
|
+
/** Min CPU platform. **Replace-only**. */
|
|
90
|
+
minCpuPlatform?: string;
|
|
91
|
+
/** Boot disk CMEK. **Replace-only**. */
|
|
92
|
+
bootDiskKmsKey?: string;
|
|
93
|
+
/** GKE Sandbox (gVisor). **Replace-only**. */
|
|
94
|
+
sandboxConfig?: {
|
|
95
|
+
type: "GVISOR";
|
|
96
|
+
};
|
|
97
|
+
/** Spot or PVM. **Replace-only**. */
|
|
98
|
+
preemptible?: boolean;
|
|
99
|
+
/** Spot VM. **Replace-only**. */
|
|
100
|
+
spot?: boolean;
|
|
101
|
+
/** Reservation affinity. **Replace-only**. */
|
|
102
|
+
reservationAffinity?: {
|
|
103
|
+
consumeReservationType: string;
|
|
104
|
+
key?: string;
|
|
105
|
+
values?: ReadonlyArray<string>;
|
|
106
|
+
};
|
|
107
|
+
/** Shielded VM. **Replace-only**. */
|
|
108
|
+
shieldedInstanceConfig?: {
|
|
109
|
+
enableSecureBoot?: boolean;
|
|
110
|
+
enableIntegrityMonitoring?: boolean;
|
|
111
|
+
};
|
|
112
|
+
/** Local SSDs. **Replace-only**. */
|
|
113
|
+
localSsdCount?: number;
|
|
114
|
+
/** Workload Identity metadata. Mutable via `update`. */
|
|
115
|
+
workloadMetadataConfig?: {
|
|
116
|
+
mode: "GKE_METADATA" | "GCE_METADATA";
|
|
117
|
+
};
|
|
118
|
+
/** GVNIC. Mutable via `update`. */
|
|
119
|
+
gvnic?: {
|
|
120
|
+
enabled: boolean;
|
|
121
|
+
};
|
|
122
|
+
/** Confidential VM. Mutable via `update`. */
|
|
123
|
+
confidentialNodes?: {
|
|
124
|
+
enabled: boolean;
|
|
125
|
+
};
|
|
126
|
+
};
|
|
127
|
+
/** Cluster autoscaler. Mutable via `setAutoscaling`. */
|
|
128
|
+
autoscaling?: {
|
|
129
|
+
enabled: boolean;
|
|
130
|
+
minNodeCount?: number;
|
|
131
|
+
maxNodeCount?: number;
|
|
132
|
+
locationPolicy?: "BALANCED" | "ANY";
|
|
133
|
+
};
|
|
134
|
+
/** Auto-upgrade / auto-repair. Mutable via `setManagement`. */
|
|
135
|
+
management?: {
|
|
136
|
+
autoUpgrade?: boolean;
|
|
137
|
+
autoRepair?: boolean;
|
|
138
|
+
};
|
|
139
|
+
/** Surge upgrade settings. Mutable via `update`. */
|
|
140
|
+
upgradeSettings?: {
|
|
141
|
+
maxSurge?: number;
|
|
142
|
+
maxUnavailable?: number;
|
|
143
|
+
strategy?: "SURGE" | "BLUE_GREEN";
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
export type NodePoolAttributes = {
|
|
147
|
+
/** Pool name (matches the GKE resource). */
|
|
148
|
+
name: string;
|
|
149
|
+
/** Server-defined URL for the pool. */
|
|
150
|
+
selfLink: string;
|
|
151
|
+
/** GCP project ID, threaded through from props for `delete`/`read`. */
|
|
152
|
+
project: string;
|
|
153
|
+
/** Cluster zone or region, threaded through from props. */
|
|
154
|
+
location: string;
|
|
155
|
+
/** Parent cluster name. */
|
|
156
|
+
clusterName: string;
|
|
157
|
+
/** Current Kubernetes version of nodes in this pool. */
|
|
158
|
+
version: string | undefined;
|
|
159
|
+
/** Lifecycle status. */
|
|
160
|
+
status: string | undefined;
|
|
161
|
+
/** Managed instance group URLs backing the pool. */
|
|
162
|
+
instanceGroupUrls: ReadonlyArray<string>;
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* A node pool inside a GKE Standard cluster.
|
|
166
|
+
*
|
|
167
|
+
* Lifecycle is observe → ensure (create) → sync (size, autoscaling,
|
|
168
|
+
* management, generic update) → return.
|
|
169
|
+
*
|
|
170
|
+
* Adoption: a pool whose `config.resourceLabels` lack our `alchemy_*`
|
|
171
|
+
* keys is wrapped in `Unowned(attrs)`. Useful for adopting the inline
|
|
172
|
+
* bootstrap pool created by `GCP.Cluster.initialNodePool` (which
|
|
173
|
+
* intentionally carries no alchemy labels).
|
|
174
|
+
*
|
|
175
|
+
* @section Creating a node pool
|
|
176
|
+
* @example CPU pool
|
|
177
|
+
* ```typescript
|
|
178
|
+
* const compute = yield* GCP.NodePool("compute", {
|
|
179
|
+
* project: project.projectId,
|
|
180
|
+
* location: cluster.location,
|
|
181
|
+
* clusterName: cluster.name,
|
|
182
|
+
* initialNodeCount: 1,
|
|
183
|
+
* config: { machineType: "n2-standard-16" },
|
|
184
|
+
* });
|
|
185
|
+
* ```
|
|
186
|
+
*
|
|
187
|
+
* @example GPU pool with autoscaling
|
|
188
|
+
* ```typescript
|
|
189
|
+
* const rtx6000 = yield* GCP.NodePool("rtx6000", {
|
|
190
|
+
* project: project.projectId,
|
|
191
|
+
* location: cluster.location,
|
|
192
|
+
* clusterName: cluster.name,
|
|
193
|
+
* config: {
|
|
194
|
+
* machineType: "g2-standard-12",
|
|
195
|
+
* accelerators: [{ type: "nvidia-l40s", count: 1 }],
|
|
196
|
+
* },
|
|
197
|
+
* autoscaling: { enabled: true, minNodeCount: 0, maxNodeCount: 4 },
|
|
198
|
+
* });
|
|
199
|
+
* ```
|
|
200
|
+
*/
|
|
201
|
+
export type NodePool = Resource<"GCP.NodePool", NodePoolProps, NodePoolAttributes, never, GCP.Providers>;
|
|
202
|
+
export declare const NodePool: import("alchemy").ResourceClass<NodePool>;
|
|
203
|
+
/**
|
|
204
|
+
* Build the `NodeConfig` sub-object for a create body. Numbers stay as
|
|
205
|
+
* numbers; collections stay unwrapped (this is what GKE expects on
|
|
206
|
+
* create — see SDK NodeConfig at container-v1.ts:1583).
|
|
207
|
+
*
|
|
208
|
+
* Internal alchemy labels are merged into `resourceLabels` here so the
|
|
209
|
+
* pool is recognizable to `read`'s adoption gate. Exported for reuse by
|
|
210
|
+
* `Cluster.toInitialNodePoolBody`.
|
|
211
|
+
*/
|
|
212
|
+
export declare const toNodeConfigCreateBody: (config: NodePoolProps["config"], desiredResourceLabels: Record<string, string>) => cont.NodeConfig;
|
|
213
|
+
export declare const NodePoolProvider: () => import("effect/Layer").Layer<Provider.Provider<NodePool>, never, import("effect/unstable/http/HttpClient").HttpClient | import("alchemy").Stage | import("alchemy").Stack | import("@distilled.cloud/gcp").Credentials>;
|
|
214
|
+
//# sourceMappingURL=NodePool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodePool.d.ts","sourceRoot":"","sources":["../../src/Container/NodePool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,mCAAmC,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAG7C,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAG5C,MAAM,MAAM,aAAa,GAAG;IAC1B,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,2EAA2E;IAC3E,MAAM,EAAE;QACN,oEAAoE;QACpE,WAAW,EAAE,MAAM,CAAC;QACpB,+CAA+C;QAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,gEAAgE;QAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB;;;;WAIG;QACH,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,yCAAyC;QACzC,YAAY,CAAC,EAAE,aAAa,CAAC;YAC3B,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;YACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,2BAA2B,CAAC,EAAE;gBAAE,gBAAgB,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SAC7D,CAAC,CAAC;QACH;;;WAGG;QACH,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB;;WAEG;QACH,WAAW,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QACpC,oDAAoD;QACpD,MAAM,CAAC,EAAE,aAAa,CAAC;YACrB,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,aAAa,GAAG,oBAAoB,GAAG,YAAY,CAAC;SAC7D,CAAC,CAAC;QACH,qEAAqE;QACrE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC;;;WAGG;QACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,6CAA6C;QAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClC,wDAAwD;QACxD,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7B,0CAA0C;QAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,wCAAwC;QACxC,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,8CAA8C;QAC9C,aAAa,CAAC,EAAE;YAAE,IAAI,EAAE,QAAQ,CAAA;SAAE,CAAC;QACnC,qCAAqC;QACrC,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,iCAAiC;QACjC,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,8CAA8C;QAC9C,mBAAmB,CAAC,EAAE;YACpB,sBAAsB,EAAE,MAAM,CAAC;YAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;YACb,MAAM,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;SAChC,CAAC;QACF,qCAAqC;QACrC,sBAAsB,CAAC,EAAE;YACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;YAC3B,yBAAyB,CAAC,EAAE,OAAO,CAAC;SACrC,CAAC;QACF,oCAAoC;QACpC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,wDAAwD;QACxD,sBAAsB,CAAC,EAAE;YAAE,IAAI,EAAE,cAAc,GAAG,cAAc,CAAA;SAAE,CAAC;QACnE,mCAAmC;QACnC,KAAK,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC;QAC7B,6CAA6C;QAC7C,iBAAiB,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC;KAC1C,CAAC;IACF,wDAAwD;IACxD,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,cAAc,CAAC,EAAE,UAAU,GAAG,KAAK,CAAC;KACrC,CAAC;IACF,+DAA+D;IAC/D,UAAU,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7D,oDAAoD;IACpD,eAAe,CAAC,EAAE;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,OAAO,GAAG,YAAY,CAAC;KACnC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,wBAAwB;IACxB,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,oDAAoD;IACpD,iBAAiB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC1C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAC7B,cAAc,EACd,aAAa,EACb,kBAAkB,EAClB,KAAK,EACL,GAAG,CAAC,SAAS,CACd,CAAC;AACF,eAAO,MAAM,QAAQ,2CAAqC,CAAC;AAkB3D;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,aAAa,CAAC,QAAQ,CAAC,EAC/B,uBAAuB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAC5C,IAAI,CAAC,UAmCP,CAAC;AA6FF,eAAO,MAAM,gBAAgB,+NAiQ1B,CAAC"}
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
import * as cont from "@distilled.cloud/gcp/container-v1";
|
|
2
|
+
import { Resource } from "alchemy";
|
|
3
|
+
import { Unowned } from "alchemy/AdoptPolicy";
|
|
4
|
+
import { deepEqual, isResolved, somePropsAreDifferent } from "alchemy/Diff";
|
|
5
|
+
import { createPhysicalName } from "alchemy/PhysicalName";
|
|
6
|
+
import * as Provider from "alchemy/Provider";
|
|
7
|
+
import * as Effect from "effect/Effect";
|
|
8
|
+
import { gcpInternalLabels, hasAlchemyLabels } from "../Tags.js";
|
|
9
|
+
import { makeAwaitOperation, qualifyOperationName } from "./Operations.js";
|
|
10
|
+
export const NodePool = Resource("GCP.NodePool");
|
|
11
|
+
/**
|
|
12
|
+
* Translate a public `accelerators` spec into the SDK's
|
|
13
|
+
* `AcceleratorConfig`. Same shape on both create and update paths.
|
|
14
|
+
*/
|
|
15
|
+
const toAcceleratorConfig = (accelerators) => accelerators?.map((a) => ({
|
|
16
|
+
acceleratorType: a.type,
|
|
17
|
+
acceleratorCount: String(a.count),
|
|
18
|
+
...(a.gpuPartitionSize ? { gpuPartitionSize: a.gpuPartitionSize } : {}),
|
|
19
|
+
...(a.gpuDriverInstallationConfig
|
|
20
|
+
? { gpuDriverInstallationConfig: a.gpuDriverInstallationConfig }
|
|
21
|
+
: {}),
|
|
22
|
+
}));
|
|
23
|
+
/**
|
|
24
|
+
* Build the `NodeConfig` sub-object for a create body. Numbers stay as
|
|
25
|
+
* numbers; collections stay unwrapped (this is what GKE expects on
|
|
26
|
+
* create — see SDK NodeConfig at container-v1.ts:1583).
|
|
27
|
+
*
|
|
28
|
+
* Internal alchemy labels are merged into `resourceLabels` here so the
|
|
29
|
+
* pool is recognizable to `read`'s adoption gate. Exported for reuse by
|
|
30
|
+
* `Cluster.toInitialNodePoolBody`.
|
|
31
|
+
*/
|
|
32
|
+
export const toNodeConfigCreateBody = (config, desiredResourceLabels) => {
|
|
33
|
+
const accelerators = toAcceleratorConfig(config.accelerators);
|
|
34
|
+
return {
|
|
35
|
+
machineType: config.machineType,
|
|
36
|
+
...(config.diskSizeGb !== undefined ? { diskSizeGb: config.diskSizeGb } : {}),
|
|
37
|
+
...(config.diskType ? { diskType: config.diskType } : {}),
|
|
38
|
+
...(config.imageType ? { imageType: config.imageType } : {}),
|
|
39
|
+
...(accelerators ? { accelerators } : {}),
|
|
40
|
+
...(config.serviceAccount ? { serviceAccount: config.serviceAccount } : {}),
|
|
41
|
+
...(config.oauthScopes ? { oauthScopes: config.oauthScopes } : {}),
|
|
42
|
+
...(config.taints ? { taints: config.taints } : {}),
|
|
43
|
+
...(config.labels ? { labels: config.labels } : {}),
|
|
44
|
+
resourceLabels: desiredResourceLabels,
|
|
45
|
+
...(config.metadata ? { metadata: config.metadata } : {}),
|
|
46
|
+
...(config.tags ? { tags: config.tags } : {}),
|
|
47
|
+
...(config.minCpuPlatform ? { minCpuPlatform: config.minCpuPlatform } : {}),
|
|
48
|
+
...(config.bootDiskKmsKey ? { bootDiskKmsKey: config.bootDiskKmsKey } : {}),
|
|
49
|
+
...(config.sandboxConfig ? { sandboxConfig: config.sandboxConfig } : {}),
|
|
50
|
+
...(config.preemptible !== undefined ? { preemptible: config.preemptible } : {}),
|
|
51
|
+
...(config.spot !== undefined ? { spot: config.spot } : {}),
|
|
52
|
+
...(config.reservationAffinity
|
|
53
|
+
? { reservationAffinity: config.reservationAffinity }
|
|
54
|
+
: {}),
|
|
55
|
+
...(config.shieldedInstanceConfig
|
|
56
|
+
? { shieldedInstanceConfig: config.shieldedInstanceConfig }
|
|
57
|
+
: {}),
|
|
58
|
+
...(config.localSsdCount !== undefined
|
|
59
|
+
? { localSsdCount: config.localSsdCount }
|
|
60
|
+
: {}),
|
|
61
|
+
...(config.workloadMetadataConfig
|
|
62
|
+
? { workloadMetadataConfig: config.workloadMetadataConfig }
|
|
63
|
+
: {}),
|
|
64
|
+
...(config.gvnic ? { gvnic: config.gvnic } : {}),
|
|
65
|
+
...(config.confidentialNodes ? { confidentialNodes: config.confidentialNodes } : {}),
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Build a non-location `UpdateNodePoolRequest` body, populating only
|
|
70
|
+
* fields whose desired value differs from observed. Wrapping (NetworkTags
|
|
71
|
+
* / NodeLabels / NodeTaints / ResourceLabels) and number→string for
|
|
72
|
+
* `diskSizeGb` are applied at this boundary (SDK shapes diverge between
|
|
73
|
+
* create and update — see container-v1.ts:4289).
|
|
74
|
+
*
|
|
75
|
+
* Returns `undefined` if no field requires updating.
|
|
76
|
+
*/
|
|
77
|
+
const toNodePoolUpdateBody = (observed, news, desiredResourceLabels) => {
|
|
78
|
+
const body = {};
|
|
79
|
+
const oc = observed.config ?? {};
|
|
80
|
+
const nc = news.config;
|
|
81
|
+
if (nc.machineType !== undefined && nc.machineType !== oc.machineType) {
|
|
82
|
+
body.machineType = nc.machineType;
|
|
83
|
+
}
|
|
84
|
+
if (nc.imageType !== undefined && nc.imageType !== oc.imageType) {
|
|
85
|
+
body.imageType = nc.imageType;
|
|
86
|
+
}
|
|
87
|
+
if (nc.diskType !== undefined && nc.diskType !== oc.diskType) {
|
|
88
|
+
body.diskType = nc.diskType;
|
|
89
|
+
}
|
|
90
|
+
if (nc.diskSizeGb !== undefined &&
|
|
91
|
+
String(nc.diskSizeGb) !== String(oc.diskSizeGb ?? "")) {
|
|
92
|
+
body.diskSizeGb = String(nc.diskSizeGb);
|
|
93
|
+
}
|
|
94
|
+
const desiredAccelerators = toAcceleratorConfig(nc.accelerators);
|
|
95
|
+
if (desiredAccelerators &&
|
|
96
|
+
!deepEqual(oc.accelerators ?? [], desiredAccelerators)) {
|
|
97
|
+
body.accelerators = desiredAccelerators;
|
|
98
|
+
}
|
|
99
|
+
if (nc.tags && !deepEqual(oc.tags ?? [], nc.tags)) {
|
|
100
|
+
body.tags = { tags: nc.tags };
|
|
101
|
+
}
|
|
102
|
+
if (nc.labels && !deepEqual(oc.labels ?? {}, nc.labels)) {
|
|
103
|
+
body.labels = { labels: nc.labels };
|
|
104
|
+
}
|
|
105
|
+
if (nc.taints && !deepEqual(oc.taints ?? [], nc.taints)) {
|
|
106
|
+
body.taints = { taints: nc.taints };
|
|
107
|
+
}
|
|
108
|
+
if (!deepEqual(oc.resourceLabels ?? {}, desiredResourceLabels)) {
|
|
109
|
+
body.resourceLabels = { labels: desiredResourceLabels };
|
|
110
|
+
}
|
|
111
|
+
if (nc.gvnic && !deepEqual(oc.gvnic, nc.gvnic)) {
|
|
112
|
+
body.gvnic = nc.gvnic;
|
|
113
|
+
}
|
|
114
|
+
if (nc.confidentialNodes && !deepEqual(oc.confidentialNodes, nc.confidentialNodes)) {
|
|
115
|
+
body.confidentialNodes = nc.confidentialNodes;
|
|
116
|
+
}
|
|
117
|
+
if (nc.workloadMetadataConfig &&
|
|
118
|
+
!deepEqual(oc.workloadMetadataConfig, nc.workloadMetadataConfig)) {
|
|
119
|
+
body.workloadMetadataConfig = nc.workloadMetadataConfig;
|
|
120
|
+
}
|
|
121
|
+
if (news.upgradeSettings &&
|
|
122
|
+
!deepEqual(observed.upgradeSettings, news.upgradeSettings)) {
|
|
123
|
+
body.upgradeSettings = news.upgradeSettings;
|
|
124
|
+
}
|
|
125
|
+
return Object.keys(body).length === 0 ? undefined : body;
|
|
126
|
+
};
|
|
127
|
+
const toNodePoolAttributes = (pool, parent) => ({
|
|
128
|
+
name: pool.name ?? "",
|
|
129
|
+
selfLink: pool.selfLink ?? "",
|
|
130
|
+
project: parent.project,
|
|
131
|
+
location: parent.location,
|
|
132
|
+
clusterName: parent.clusterName,
|
|
133
|
+
version: pool.version,
|
|
134
|
+
status: pool.status,
|
|
135
|
+
instanceGroupUrls: pool.instanceGroupUrls ?? [],
|
|
136
|
+
});
|
|
137
|
+
export const NodePoolProvider = () => Provider.effect(NodePool, Effect.gen(function* () {
|
|
138
|
+
const getNodePools = yield* cont.getProjectsLocationsClustersNodePools;
|
|
139
|
+
const createNodePools = yield* cont.createProjectsLocationsClustersNodePools;
|
|
140
|
+
const updateNodePools = yield* cont.updateProjectsLocationsClustersNodePools;
|
|
141
|
+
const setSize = yield* cont.setSizeProjectsLocationsClustersNodePools;
|
|
142
|
+
const setAutoscaling = yield* cont.setAutoscalingProjectsLocationsClustersNodePools;
|
|
143
|
+
const setManagement = yield* cont.setManagementProjectsLocationsClustersNodePools;
|
|
144
|
+
const deleteNodePools = yield* cont.deleteProjectsLocationsClustersNodePools;
|
|
145
|
+
const getOperations = yield* cont.getProjectsLocationsOperations;
|
|
146
|
+
const awaitOperation = makeAwaitOperation(getOperations);
|
|
147
|
+
// Qualify a bare GKE operation id using the parent path of the
|
|
148
|
+
// resource it targets. NodePool fqNames have the shape
|
|
149
|
+
// `projects/{p}/locations/{l}/clusters/{c}/nodePools/{n}`; the
|
|
150
|
+
// first four segments give us the parent context for the
|
|
151
|
+
// operation, identical to Cluster's helper.
|
|
152
|
+
const qualifyOp = (fqName, opName) => qualifyOperationName(fqName.split("/")[1], fqName.split("/")[3], opName);
|
|
153
|
+
const syncNodePoolSize = Effect.fn(function* (args) {
|
|
154
|
+
// Skip when the autoscaler is enabled; fighting it creates churn.
|
|
155
|
+
if (args.news.autoscaling?.enabled)
|
|
156
|
+
return;
|
|
157
|
+
if (args.news.initialNodeCount === undefined)
|
|
158
|
+
return;
|
|
159
|
+
const observedCount = args.observed.initialNodeCount;
|
|
160
|
+
if (observedCount === args.news.initialNodeCount)
|
|
161
|
+
return;
|
|
162
|
+
const op = yield* setSize({
|
|
163
|
+
name: args.fqName,
|
|
164
|
+
body: { nodeCount: args.news.initialNodeCount },
|
|
165
|
+
});
|
|
166
|
+
if (op.name)
|
|
167
|
+
yield* awaitOperation(qualifyOp(args.fqName, op.name), args.session);
|
|
168
|
+
});
|
|
169
|
+
const syncNodePoolAutoscaling = Effect.fn(function* (args) {
|
|
170
|
+
if (!args.news.autoscaling)
|
|
171
|
+
return;
|
|
172
|
+
if (deepEqual(args.observed.autoscaling, args.news.autoscaling))
|
|
173
|
+
return;
|
|
174
|
+
const op = yield* setAutoscaling({
|
|
175
|
+
name: args.fqName,
|
|
176
|
+
body: { autoscaling: args.news.autoscaling },
|
|
177
|
+
});
|
|
178
|
+
if (op.name)
|
|
179
|
+
yield* awaitOperation(qualifyOp(args.fqName, op.name), args.session);
|
|
180
|
+
});
|
|
181
|
+
const syncNodePoolManagement = Effect.fn(function* (args) {
|
|
182
|
+
if (!args.news.management)
|
|
183
|
+
return;
|
|
184
|
+
if (deepEqual(args.observed.management, args.news.management))
|
|
185
|
+
return;
|
|
186
|
+
const op = yield* setManagement({
|
|
187
|
+
name: args.fqName,
|
|
188
|
+
body: { management: args.news.management },
|
|
189
|
+
});
|
|
190
|
+
if (op.name)
|
|
191
|
+
yield* awaitOperation(qualifyOp(args.fqName, op.name), args.session);
|
|
192
|
+
});
|
|
193
|
+
const syncNodePoolUpdate = Effect.fn(function* (args) {
|
|
194
|
+
// 1. Locations — sent as a standalone update body. The SDK
|
|
195
|
+
// explicitly warns not to combine `locations` with other
|
|
196
|
+
// fields; if you do, the other fields only apply to newly-
|
|
197
|
+
// created nodes.
|
|
198
|
+
if (args.news.nodeLocations &&
|
|
199
|
+
!deepEqual(args.observed.locations ?? [], args.news.nodeLocations)) {
|
|
200
|
+
const op = yield* updateNodePools({
|
|
201
|
+
name: args.fqName,
|
|
202
|
+
body: { locations: args.news.nodeLocations },
|
|
203
|
+
});
|
|
204
|
+
if (op.name)
|
|
205
|
+
yield* awaitOperation(qualifyOp(args.fqName, op.name), args.session);
|
|
206
|
+
}
|
|
207
|
+
// 2. Re-observe so the non-location update diffs against fresh
|
|
208
|
+
// state (the location update may have rewritten labels/taints
|
|
209
|
+
// on new nodes already).
|
|
210
|
+
const fresh = yield* getNodePools({ name: args.fqName });
|
|
211
|
+
const body = toNodePoolUpdateBody(fresh, args.news, args.desiredResourceLabels);
|
|
212
|
+
if (!body)
|
|
213
|
+
return;
|
|
214
|
+
const op = yield* updateNodePools({ name: args.fqName, body });
|
|
215
|
+
if (op.name)
|
|
216
|
+
yield* awaitOperation(qualifyOp(args.fqName, op.name), args.session);
|
|
217
|
+
});
|
|
218
|
+
return {
|
|
219
|
+
stables: ["name", "selfLink", "project", "location", "clusterName"],
|
|
220
|
+
diff: Effect.fn(function* ({ news, olds = {} }) {
|
|
221
|
+
if (!isResolved(news))
|
|
222
|
+
return undefined;
|
|
223
|
+
if (somePropsAreDifferent(olds, news, [
|
|
224
|
+
"project",
|
|
225
|
+
"location",
|
|
226
|
+
"clusterName",
|
|
227
|
+
"name",
|
|
228
|
+
])) {
|
|
229
|
+
return { action: "replace" };
|
|
230
|
+
}
|
|
231
|
+
const oc = olds.config ?? {};
|
|
232
|
+
const nc = news.config;
|
|
233
|
+
if (somePropsAreDifferent(oc, nc, [
|
|
234
|
+
"serviceAccount",
|
|
235
|
+
"minCpuPlatform",
|
|
236
|
+
"bootDiskKmsKey",
|
|
237
|
+
"preemptible",
|
|
238
|
+
"spot",
|
|
239
|
+
"localSsdCount",
|
|
240
|
+
])) {
|
|
241
|
+
return { action: "replace" };
|
|
242
|
+
}
|
|
243
|
+
if (!deepEqual(oc.oauthScopes, nc.oauthScopes) ||
|
|
244
|
+
!deepEqual(oc.metadata, nc.metadata) ||
|
|
245
|
+
!deepEqual(oc.sandboxConfig, nc.sandboxConfig) ||
|
|
246
|
+
!deepEqual(oc.reservationAffinity, nc.reservationAffinity) ||
|
|
247
|
+
!deepEqual(oc.shieldedInstanceConfig, nc.shieldedInstanceConfig)) {
|
|
248
|
+
return { action: "replace" };
|
|
249
|
+
}
|
|
250
|
+
return undefined;
|
|
251
|
+
}),
|
|
252
|
+
reconcile: Effect.fn(function* ({ id, news, session }) {
|
|
253
|
+
const internalLabels = yield* gcpInternalLabels(id);
|
|
254
|
+
const desiredName = news.name ??
|
|
255
|
+
(yield* createPhysicalName({ id, maxLength: 40 })).toLowerCase();
|
|
256
|
+
const clusterPath = `projects/${news.project}/locations/${news.location}/clusters/${news.clusterName}`;
|
|
257
|
+
const fqName = `${clusterPath}/nodePools/${desiredName}`;
|
|
258
|
+
const desiredResourceLabels = {
|
|
259
|
+
...(news.config.resourceLabels ?? {}),
|
|
260
|
+
...internalLabels,
|
|
261
|
+
};
|
|
262
|
+
// 1. Observe — collapse 403 to "missing" alongside 404, mirroring
|
|
263
|
+
// Project.observeProject's stance that GCP returns 403 for
|
|
264
|
+
// invisible resources.
|
|
265
|
+
let observed = yield* getNodePools({ name: fqName }).pipe(Effect.catchTag("NotFound", () => Effect.succeed(undefined)), Effect.catchTag("Forbidden", () => Effect.succeed(undefined)));
|
|
266
|
+
// 2. Ensure — create if missing. `Conflict` covers concurrent
|
|
267
|
+
// creates and state-persistence races; fall through and
|
|
268
|
+
// re-observe.
|
|
269
|
+
if (!observed) {
|
|
270
|
+
const config = toNodeConfigCreateBody(news.config, desiredResourceLabels);
|
|
271
|
+
// GKE Standard rejects creates without a positive node
|
|
272
|
+
// count. If the user didn't specify, fall back to the
|
|
273
|
+
// autoscaler floor (or 1 if there's no autoscaler config).
|
|
274
|
+
const createNodeCount = news.initialNodeCount ?? news.autoscaling?.minNodeCount ?? 1;
|
|
275
|
+
const op = yield* createNodePools({
|
|
276
|
+
parent: clusterPath,
|
|
277
|
+
body: {
|
|
278
|
+
nodePool: {
|
|
279
|
+
name: desiredName,
|
|
280
|
+
initialNodeCount: createNodeCount,
|
|
281
|
+
...(news.nodeLocations ? { locations: news.nodeLocations } : {}),
|
|
282
|
+
config,
|
|
283
|
+
...(news.autoscaling ? { autoscaling: news.autoscaling } : {}),
|
|
284
|
+
...(news.management ? { management: news.management } : {}),
|
|
285
|
+
...(news.upgradeSettings ? { upgradeSettings: news.upgradeSettings } : {}),
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
}).pipe(Effect.catchTag("Conflict", () => Effect.succeed(undefined)));
|
|
289
|
+
if (op?.name)
|
|
290
|
+
yield* awaitOperation(qualifyOp(fqName, op.name), session);
|
|
291
|
+
observed = yield* getNodePools({ name: fqName });
|
|
292
|
+
}
|
|
293
|
+
// 3. Sync — sequential, each aspect independently idempotent.
|
|
294
|
+
yield* syncNodePoolSize({ fqName, observed, news, session });
|
|
295
|
+
yield* syncNodePoolAutoscaling({ fqName, observed, news, session });
|
|
296
|
+
yield* syncNodePoolManagement({ fqName, observed, news, session });
|
|
297
|
+
yield* syncNodePoolUpdate({
|
|
298
|
+
fqName,
|
|
299
|
+
observed,
|
|
300
|
+
news,
|
|
301
|
+
desiredResourceLabels,
|
|
302
|
+
session,
|
|
303
|
+
});
|
|
304
|
+
const final = yield* getNodePools({ name: fqName });
|
|
305
|
+
return toNodePoolAttributes(final, {
|
|
306
|
+
project: news.project,
|
|
307
|
+
location: news.location,
|
|
308
|
+
clusterName: news.clusterName,
|
|
309
|
+
});
|
|
310
|
+
}),
|
|
311
|
+
delete: Effect.fn(function* ({ output, session }) {
|
|
312
|
+
const fqName = `projects/${output.project}/locations/${output.location}/clusters/${output.clusterName}/nodePools/${output.name}`;
|
|
313
|
+
yield* deleteNodePools({ name: fqName }).pipe(Effect.flatMap((op) => op.name
|
|
314
|
+
? awaitOperation(qualifyOp(fqName, op.name), session)
|
|
315
|
+
: Effect.succeed(op)), Effect.catchTag("NotFound", () => Effect.void));
|
|
316
|
+
}),
|
|
317
|
+
read: Effect.fn(function* ({ id, output, olds }) {
|
|
318
|
+
// ProviderService.read receives `{ id, instanceId, olds, output }`
|
|
319
|
+
// — no `news`. Identity must come from output (post-create
|
|
320
|
+
// cache) or olds (last-persisted props).
|
|
321
|
+
const project = output?.project ?? olds?.project;
|
|
322
|
+
const location = output?.location ?? olds?.location;
|
|
323
|
+
const clusterName = output?.clusterName ?? olds?.clusterName;
|
|
324
|
+
if (!project || !location || !clusterName)
|
|
325
|
+
return undefined;
|
|
326
|
+
const name = output?.name ??
|
|
327
|
+
olds?.name ??
|
|
328
|
+
(yield* createPhysicalName({ id, maxLength: 40 })).toLowerCase();
|
|
329
|
+
const fqName = `projects/${project}/locations/${location}/clusters/${clusterName}/nodePools/${name}`;
|
|
330
|
+
const observed = yield* getNodePools({ name: fqName }).pipe(Effect.catchTag("NotFound", () => Effect.succeed(undefined)), Effect.catchTag("Forbidden", () => Effect.succeed(undefined)));
|
|
331
|
+
if (!observed)
|
|
332
|
+
return undefined;
|
|
333
|
+
const attrs = toNodePoolAttributes(observed, {
|
|
334
|
+
project,
|
|
335
|
+
location,
|
|
336
|
+
clusterName,
|
|
337
|
+
});
|
|
338
|
+
return (yield* hasAlchemyLabels(id, observed.config?.resourceLabels))
|
|
339
|
+
? attrs
|
|
340
|
+
: Unowned(attrs);
|
|
341
|
+
}),
|
|
342
|
+
};
|
|
343
|
+
}));
|
|
344
|
+
//# sourceMappingURL=NodePool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodePool.js","sourceRoot":"","sources":["../../src/Container/NodePool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { ConfigError } from "@distilled.cloud/gcp";
|
|
2
|
+
import * as cont from "@distilled.cloud/gcp/container-v1";
|
|
3
|
+
import type { ScopedPlanStatusSession } from "alchemy/Cli/Cli";
|
|
4
|
+
import * as Effect from "effect/Effect";
|
|
5
|
+
/**
|
|
6
|
+
* Qualify a GKE operation name. The Container API returns
|
|
7
|
+
* `Operation.name` as a bare ID like `operation-1778057673333-...`,
|
|
8
|
+
* but `getProjectsLocationsOperations` expects the fully-qualified
|
|
9
|
+
* path `projects/{p}/locations/{l}/operations/{id}`. Already-qualified
|
|
10
|
+
* names are passed through unchanged so callers can stay agnostic.
|
|
11
|
+
*
|
|
12
|
+
* (CRM operations don't need this because CRM returns names as
|
|
13
|
+
* `operations/...` and its `getOperations` takes the bare path
|
|
14
|
+
* directly.)
|
|
15
|
+
*/
|
|
16
|
+
export declare const qualifyOperationName: (project: string, location: string, name: string) => string;
|
|
17
|
+
/**
|
|
18
|
+
* Resolved callable signature of `cont.getProjectsLocationsOperations`.
|
|
19
|
+
*
|
|
20
|
+
* `cont.getProjectsLocationsOperations` is itself an
|
|
21
|
+
* `Effect<callable, never, Credentials | HttpClient>`, so `Effect.Success`
|
|
22
|
+
* extracts the callable type — i.e. what you get back from
|
|
23
|
+
* `yield* cont.getProjectsLocationsOperations`. Using a derived alias
|
|
24
|
+
* keeps the helper aligned with the SDK without us hand-writing the
|
|
25
|
+
* input/output/error union, which would drift if the patch set changes.
|
|
26
|
+
*/
|
|
27
|
+
type GetOperations = Effect.Success<typeof cont.getProjectsLocationsOperations>;
|
|
28
|
+
/**
|
|
29
|
+
* Build the GKE long-running-operation polling helper.
|
|
30
|
+
*
|
|
31
|
+
* Container `Operation`s carry `.status: "PENDING" | "RUNNING" | "DONE"
|
|
32
|
+
* | "ABORTING"` (NOT `.done: boolean` like Cloud Resource Manager —
|
|
33
|
+
* verified at `vendor/distilled/packages/gcp/src/services/container-v1.ts:919–976`).
|
|
34
|
+
* The doneness predicate compares `.status === "DONE"` accordingly.
|
|
35
|
+
*
|
|
36
|
+
* Schedule: exponential 2s → 1.5× growth, capped per-poll at 15s via
|
|
37
|
+
* `Schedule.either`, then a hard count cap of 80 retries via
|
|
38
|
+
* `Schedule.both(Schedule.recurs(80))` → ~20 min wall ceiling, well
|
|
39
|
+
* above the worst observed GKE op time (cluster create runs 5–10 min).
|
|
40
|
+
*
|
|
41
|
+
* The helper is a factory — the caller resolves
|
|
42
|
+
* `cont.getProjectsLocationsOperations` once at provider construction
|
|
43
|
+
* (see `Project.ts` for the same idiom) and passes the resulting
|
|
44
|
+
* callable here, so we never re-resolve services on each await.
|
|
45
|
+
*/
|
|
46
|
+
export declare const makeAwaitOperation: (getOperations: GetOperations) => (operationName: string, session: ScopedPlanStatusSession) => Effect.Effect<cont.Operation, ConfigError | cont.GetProjectsLocationsOperationsError | {
|
|
47
|
+
_tag: "OperationPending";
|
|
48
|
+
}, never>;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=Operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Operations.d.ts","sourceRoot":"","sources":["../../src/Container/Operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,IAAI,MAAM,mCAAmC,CAAC;AAC1D,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,GAC/B,SAAS,MAAM,EACf,UAAU,MAAM,EAChB,MAAM,MAAM,KACX,MAGiE,CAAC;AAErE;;;;;;;;;GASG;AACH,KAAK,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,8BAA8B,CAAC,CAAC;AAEhF;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,kBAAkB,GAAI,eAAe,aAAa;;SA8B3D,CAAC"}
|