@microagi/alchemy-gcp 0.1.3 → 0.2.0

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.
Files changed (61) hide show
  1. package/README.md +0 -2
  2. package/lib/CloudResourceManager/Project.d.ts +16 -1
  3. package/lib/CloudResourceManager/Project.d.ts.map +1 -1
  4. package/lib/CloudResourceManager/Project.js +59 -1
  5. package/lib/CloudResourceManager/Project.js.map +1 -1
  6. package/lib/CloudResourceManager/ProjectIamMember.d.ts +25 -0
  7. package/lib/CloudResourceManager/ProjectIamMember.d.ts.map +1 -0
  8. package/lib/CloudResourceManager/ProjectIamMember.js +22 -0
  9. package/lib/CloudResourceManager/ProjectIamMember.js.map +1 -0
  10. package/lib/CloudResourceManager/index.d.ts +1 -0
  11. package/lib/CloudResourceManager/index.d.ts.map +1 -1
  12. package/lib/CloudResourceManager/index.js +1 -0
  13. package/lib/CloudResourceManager/index.js.map +1 -1
  14. package/lib/Compute/Network.d.ts +39 -2
  15. package/lib/Compute/Network.d.ts.map +1 -1
  16. package/lib/Compute/Network.js +12 -0
  17. package/lib/Compute/Network.js.map +1 -1
  18. package/lib/Compute/SharedVpcServiceProject.d.ts.map +1 -1
  19. package/lib/Compute/SharedVpcServiceProject.js +7 -1
  20. package/lib/Compute/SharedVpcServiceProject.js.map +1 -1
  21. package/lib/Compute/Subnetwork.d.ts +16 -1
  22. package/lib/Compute/Subnetwork.d.ts.map +1 -1
  23. package/lib/Compute/Subnetwork.js +74 -1
  24. package/lib/Compute/Subnetwork.js.map +1 -1
  25. package/lib/Compute/SubnetworkIamMember.d.ts +45 -0
  26. package/lib/Compute/SubnetworkIamMember.d.ts.map +1 -0
  27. package/lib/Compute/SubnetworkIamMember.js +46 -0
  28. package/lib/Compute/SubnetworkIamMember.js.map +1 -0
  29. package/lib/Compute/index.d.ts +1 -0
  30. package/lib/Compute/index.d.ts.map +1 -1
  31. package/lib/Compute/index.js +1 -0
  32. package/lib/Compute/index.js.map +1 -1
  33. package/lib/ManagedLustre/Instance.d.ts +173 -0
  34. package/lib/ManagedLustre/Instance.d.ts.map +1 -0
  35. package/lib/{Parallelstore → ManagedLustre}/Instance.js +39 -35
  36. package/lib/ManagedLustre/Instance.js.map +1 -0
  37. package/lib/ManagedLustre/index.d.ts.map +1 -0
  38. package/lib/ManagedLustre/index.js.map +1 -0
  39. package/lib/Providers.js +3 -3
  40. package/lib/index.d.ts +1 -1
  41. package/lib/index.js +1 -1
  42. package/package.json +4 -4
  43. package/src/CloudResourceManager/Project.ts +90 -2
  44. package/src/CloudResourceManager/ProjectIamMember.ts +29 -0
  45. package/src/CloudResourceManager/index.ts +1 -0
  46. package/src/Compute/Network.ts +58 -5
  47. package/src/Compute/SharedVpcServiceProject.ts +6 -1
  48. package/src/Compute/Subnetwork.ts +105 -2
  49. package/src/Compute/SubnetworkIamMember.ts +52 -0
  50. package/src/Compute/index.ts +1 -0
  51. package/src/{Parallelstore → ManagedLustre}/Instance.ts +163 -110
  52. package/src/Providers.ts +5 -5
  53. package/src/index.ts +1 -1
  54. package/lib/Parallelstore/Instance.d.ts +0 -119
  55. package/lib/Parallelstore/Instance.d.ts.map +0 -1
  56. package/lib/Parallelstore/Instance.js.map +0 -1
  57. package/lib/Parallelstore/index.d.ts.map +0 -1
  58. package/lib/Parallelstore/index.js.map +0 -1
  59. /package/lib/{Parallelstore → ManagedLustre}/index.d.ts +0 -0
  60. /package/lib/{Parallelstore → ManagedLustre}/index.js +0 -0
  61. /package/src/{Parallelstore → ManagedLustre}/index.ts +0 -0
@@ -1,61 +1,86 @@
1
1
  import { ConfigError } from "@distilled.cloud/gcp";
2
- import * as ps from "@distilled.cloud/gcp/parallelstore-v1";
2
+ import * as lustre from "@distilled.cloud/gcp/lustre-v1";
3
3
  import { Resource } from "alchemy";
4
4
  import { Unowned } from "alchemy/AdoptPolicy";
5
5
  import type { ScopedPlanStatusSession } from "alchemy/Cli/Cli";
6
- import { deepEqual, isResolved, somePropsAreDifferent } from "alchemy/Diff";
6
+ import { isResolved, somePropsAreDifferent } from "alchemy/Diff";
7
7
  import { createPhysicalName } from "alchemy/PhysicalName";
8
8
  import * as Provider from "alchemy/Provider";
9
9
  import { diffTags } from "alchemy/Tags";
10
10
  import * as Duration from "effect/Duration";
11
11
  import * as Effect from "effect/Effect";
12
12
  import * as Schedule from "effect/Schedule";
13
- import type { NetworkRef } from "../Compute/Network.ts";
13
+ import type { NetworkRefById } from "../Compute/Network.ts";
14
14
  import { gcpInternalLabels, hasAlchemyLabels } from "../Tags.ts";
15
15
  import type * as GCP from "../Providers.ts";
16
16
 
17
17
  /**
18
- * A Parallelstore instance — a high-throughput, POSIX-style filesystem
19
- * Google sells for AI training/inference shared storage. Backed by DAOS
20
- * under the hood; mounted in clusters via the Parallelstore CSI driver.
18
+ * A Google Cloud Managed Lustre instance — a managed parallel POSIX
19
+ * filesystem (DDN EXAScaler under the hood) for AI training and HPC
20
+ * shared storage. Mounted in GKE clusters via the Managed Lustre CSI
21
+ * driver. The Google-blessed successor to Parallelstore (deprecated,
22
+ * EOS 2026-10-31).
21
23
  *
22
24
  * **Network preconditions.** The instance attaches to a VPC over PSA
23
- * (Private Services Access). The consumer VPC must already have:
25
+ * (Private Services Access) consumed via `servicenetworking`. The
26
+ * consumer VPC must already have:
24
27
  * 1. A `GCP.GlobalAddress` reservation (`purpose=VPC_PEERING`,
25
28
  * `addressType=INTERNAL`, ≥/24 prefix length).
26
- * 2. A `GCP.PsaConnection` to `servicenetworking.googleapis.com`
27
- * consuming that range.
28
- * See the Shared VPC + Parallelstore wiring in the apps/cluster stack.
29
+ * 2. A `GCP.PsaConnection` to `servicenetworking.googleapis.com`.
30
+ * Lustre does NOT take a `reservedIpRange` field — it auto-allocates
31
+ * from whichever PSA peering the network already has.
29
32
  *
30
- * **Capacity.** `capacityGib` must be a multiple of 12000 GiB and
31
- * between 12000 (12 TiB) and 100800 (98.4 TiB). Smaller deployments
32
- * may use 100 GiB increments depending on the SKU; the API surfaces
33
- * the floor at create time.
33
+ * **Capacity & tier.** Two tiering shapes:
34
+ * - **Dynamic tier** (`dynamicTierMode: "DEFAULT_CACHE"`) pay-per-GiB
35
+ * elastic capacity. `perUnitStorageThroughput` MUST be unset.
36
+ * - **Performance tier** `perUnitStorageThroughput` ∈ {125, 250,
37
+ * 500, 1000} MBps/TiB; `dynamicTierMode` left unset (or "DISABLED").
34
38
  *
35
- * Parallelstore operations use a CRM-style `Operation.done: boolean`
36
- * (verified at `parallelstore-v1.ts`).
39
+ * `capacityGib` floors and increments are tier-specific and **much
40
+ * higher than the Google docs imply**. Empirical limits (probed
41
+ * `europe-west4-a`, May 2026):
37
42
  *
38
- * @section Creating a Parallelstore instance
39
- * @example 20 TiB scratch instance
43
+ * | Tier | Min capacity | Increment |
44
+ * |----------------------------------------------|---------------------|-----------------|
45
+ * | `dynamicTierMode: "DEFAULT_CACHE"` | 472000 GiB (~461T) | unknown |
46
+ * | `perUnitStorageThroughput: "125"` | 72000 GiB (~70T) | unknown |
47
+ * | `perUnitStorageThroughput: "250"` | 36000 GiB (~35T) | unknown |
48
+ * | `perUnitStorageThroughput: "500"` | (≤18000 ok) | 18000 GiB |
49
+ * | `perUnitStorageThroughput: "1000"` | (≤18000 ok) | 9000 GiB |
50
+ *
51
+ * Each tier has its own quota metric
52
+ * (`StorageFor{125,250,500,1000}MBpThroughputPerTiB` for Performance);
53
+ * default is **zero** in `europe-west4-a` for new projects, so a
54
+ * quota request through the GCP console is required before any
55
+ * Performance-tier instance creates. Dynamic-tier quota was not
56
+ * probed but is likely the same.
57
+ *
58
+ * See <https://cloud.google.com/managed-lustre/docs/create-instance#performance-tiers>
59
+ * for the (incomplete) public documentation.
60
+ *
61
+ * Lustre operations use a CRM-style `Operation.done: boolean` (verified
62
+ * at `lustre-v1.ts`).
63
+ *
64
+ * @section Creating a Managed Lustre instance
65
+ * @example 20 TiB Performance-tier instance (125 MBps/TiB)
40
66
  * ```typescript
41
- * const fs = yield* GCP.ParallelstoreInstance("ModelsFs", {
67
+ * const fs = yield* GCP.ManagedLustreInstance("ModelsFs", {
42
68
  * project: hostProject.projectId,
43
- * location: "us-central1-a",
69
+ * location: "europe-west4-a",
70
+ * filesystem: "models",
44
71
  * capacityGib: "20480",
45
- * network: GCP.networkRef(hostProject.projectNumber, vpc.name),
46
- * reservedIpRange: psaRange.name,
47
- * deploymentType: "SCRATCH",
48
- * fileStripeLevel: "FILE_STRIPE_LEVEL_BALANCED",
49
- * directoryStripeLevel: "DIRECTORY_STRIPE_LEVEL_BALANCED",
72
+ * network: GCP.networkRefById(hostProject.projectId, vpc.name),
73
+ * perUnitStorageThroughput: "125",
74
+ * gkeSupportEnabled: true,
50
75
  * });
51
76
  * ```
52
77
  */
53
- export type ParallelstoreInstanceProps = {
78
+ export type ManagedLustreInstanceProps = {
54
79
  /** GCP project ID hosting the instance. Immutable — replace if changed. */
55
80
  project: string;
56
81
  /**
57
- * Parallelstore location. **Zone, not region** — Parallelstore is a
58
- * zonal product. Common: `us-central1-a`. Immutable — replace.
82
+ * Managed Lustre location. **Zone, not region** — Lustre is a zonal
83
+ * product (e.g. `europe-west4-a`). Immutable — replace.
59
84
  */
60
85
  location: string;
61
86
  /**
@@ -64,38 +89,54 @@ export type ParallelstoreInstanceProps = {
64
89
  * with a letter, end with a letter or number. Immutable — replace.
65
90
  */
66
91
  instanceId?: string;
92
+ /**
93
+ * Lustre filesystem name — what clients use when mounting. **Eight
94
+ * characters or less, letters and numbers only** (no hyphens). This
95
+ * is distinct from `instanceId`; clients see the filesystem name in
96
+ * the mount point string. Immutable — replace.
97
+ */
98
+ filesystem: string;
67
99
  /** User-visible description. Mutable via `patch`. */
68
100
  description?: string;
69
101
  /**
70
102
  * Capacity in **GiB** (1024-based). Sent to the API as a string per
71
- * Parallelstore's int64-encoded-as-string convention. Replace-only —
72
- * Parallelstore doesn't currently support online resize.
103
+ * Lustre's int64-encoded-as-string convention. Replace-only — Lustre
104
+ * doesn't currently support online resize.
73
105
  */
74
106
  capacityGib: string;
75
107
  /**
76
- * Fully-qualified consumer VPC in project-number form. Build with
77
- * `networkRef(project.projectNumber, vpc.name)` — the `NetworkRef`
78
- * template literal type rejects project-ID-form strings at compile
79
- * time. Immutable replace.
108
+ * Fully-qualified consumer VPC in **project-ID** form. Build with
109
+ * `networkRefById(project.projectId, vpc.name)` — Lustre's
110
+ * `instances.create` rejects the project-number form with a
111
+ * `BadRequest` error, so this prop is intentionally typed as
112
+ * `NetworkRefById` (a nominally branded sibling of `NetworkRef`) to
113
+ * surface the constraint at compile time. Immutable — replace.
114
+ */
115
+ network: NetworkRefById;
116
+ /**
117
+ * Dynamic tier mode. Set to `"DEFAULT_CACHE"` to opt into the elastic
118
+ * Dynamic tier; `"DISABLED"` (or omit) for the fixed-throughput tier.
119
+ * If `"DEFAULT_CACHE"`, leave `perUnitStorageThroughput` unset.
120
+ * Immutable — replace.
80
121
  */
81
- network: NetworkRef;
122
+ dynamicTierMode?: "DEFAULT_CACHE" | "DISABLED";
82
123
  /**
83
- * Name (or self-link) of a `GCP.GlobalAddress` PSA reservation in
84
- * the same VPC. Immutable — replace.
124
+ * Throughput in MBps per TiB for the fixed-throughput tier. Mutually
125
+ * exclusive with `dynamicTierMode === "DEFAULT_CACHE"`. Immutable —
126
+ * replace.
85
127
  */
86
- reservedIpRange?: string;
87
- /** `SCRATCH` (default) or `PERSISTENT`. Immutable — replace. */
88
- deploymentType?: "SCRATCH" | "PERSISTENT";
89
- /** File stripe level. Replace-only. */
90
- fileStripeLevel?:
91
- | "FILE_STRIPE_LEVEL_MIN"
92
- | "FILE_STRIPE_LEVEL_BALANCED"
93
- | "FILE_STRIPE_LEVEL_MAX";
94
- /** Directory stripe level. Replace-only. */
95
- directoryStripeLevel?:
96
- | "DIRECTORY_STRIPE_LEVEL_MIN"
97
- | "DIRECTORY_STRIPE_LEVEL_BALANCED"
98
- | "DIRECTORY_STRIPE_LEVEL_MAX";
128
+ perUnitStorageThroughput?: "125" | "250" | "500" | "1000";
129
+ /**
130
+ * Enable GKE-client support. Recommended `true` for instances mounted
131
+ * by GKE pods via the Managed Lustre CSI driver. Immutable — replace.
132
+ */
133
+ gkeSupportEnabled?: boolean;
134
+ /**
135
+ * Cloud KMS key for at-rest encryption. Format
136
+ * `projects/{p}/locations/{l}/keyRings/{r}/cryptoKeys/{k}`. Immutable
137
+ * — replace.
138
+ */
139
+ kmsKey?: string;
99
140
  /**
100
141
  * Resource labels. Alchemy internal labels (`alchemy_app`,
101
142
  * `alchemy_stage`, `alchemy_id`) are merged on top automatically.
@@ -104,7 +145,7 @@ export type ParallelstoreInstanceProps = {
104
145
  labels?: Record<string, string>;
105
146
  };
106
147
 
107
- export type ParallelstoreInstanceAttributes = {
148
+ export type ManagedLustreInstanceAttributes = {
108
149
  /** Bare instance id. */
109
150
  instanceId: string;
110
151
  /** Project ID. */
@@ -113,75 +154,85 @@ export type ParallelstoreInstanceAttributes = {
113
154
  location: string;
114
155
  /** Resource name `projects/{p}/locations/{l}/instances/{id}`. */
115
156
  name: string;
157
+ /** Lustre filesystem name (mirrors props). */
158
+ filesystem: string;
116
159
  /** Description, mirroring props. */
117
160
  description: string | undefined;
118
161
  /** Capacity in GiB. */
119
162
  capacityGib: string;
120
- /** Consumer VPC URL (project-number form). */
121
- network: NetworkRef;
122
- /** Reserved IP range used (server-resolved). */
123
- reservedIpRange: string | undefined;
124
- /** Effective reserved range (post-allocation). */
125
- effectiveReservedIpRange: string | undefined;
163
+ /** Consumer VPC URL (project-ID form). */
164
+ network: NetworkRefById;
126
165
  /** Lifecycle state — `ACTIVE` once ready. */
127
166
  state: string | undefined;
128
- /** Active deployment type. */
129
- deploymentType: string | undefined;
130
- /** DNS access points VMs mount via. */
131
- accessPoints: ReadonlyArray<string>;
167
+ /**
168
+ * Mount point string clients pass to `mount -t lustre`, of the form
169
+ * `IP_ADDRESS@tcp:/FILESYSTEM`. Output-only.
170
+ */
171
+ mountPoint: string | undefined;
172
+ /** Dynamic tier mode currently configured. */
173
+ dynamicTierMode: string | undefined;
174
+ /** Per-TiB throughput (string, MBps/TiB). */
175
+ perUnitStorageThroughput: string | undefined;
176
+ /** GKE-client support flag. */
177
+ gkeSupportEnabled: boolean | undefined;
178
+ /** KMS key, if set. */
179
+ kmsKey: string | undefined;
132
180
  /** Labels currently set, including internals. */
133
181
  labels: Record<string, string>;
134
182
  };
135
183
 
136
- export type ParallelstoreInstance = Resource<
137
- "GCP.ParallelstoreInstance",
138
- ParallelstoreInstanceProps,
139
- ParallelstoreInstanceAttributes,
184
+ export type ManagedLustreInstance = Resource<
185
+ "GCP.ManagedLustreInstance",
186
+ ManagedLustreInstanceProps,
187
+ ManagedLustreInstanceAttributes,
140
188
  never,
141
189
  GCP.Providers
142
190
  >;
143
- export const ParallelstoreInstance = Resource<ParallelstoreInstance>(
144
- "GCP.ParallelstoreInstance",
191
+ export const ManagedLustreInstance = Resource<ManagedLustreInstance>(
192
+ "GCP.ManagedLustreInstance",
145
193
  );
146
194
 
147
195
  const toAttributes = (
148
- i: ps.Instance,
196
+ i: lustre.Instance,
149
197
  parent: {
150
198
  project: string;
151
199
  location: string;
152
200
  instanceId: string;
153
- network: NetworkRef;
201
+ network: NetworkRefById;
154
202
  },
155
- ): ParallelstoreInstanceAttributes => ({
203
+ ): ManagedLustreInstanceAttributes => ({
156
204
  instanceId: parent.instanceId,
157
205
  project: parent.project,
158
206
  location: parent.location,
159
- name: i.name ?? `projects/${parent.project}/locations/${parent.location}/instances/${parent.instanceId}`,
207
+ name:
208
+ i.name ??
209
+ `projects/${parent.project}/locations/${parent.location}/instances/${parent.instanceId}`,
210
+ filesystem: i.filesystem ?? "",
160
211
  description: i.description,
161
212
  capacityGib: i.capacityGib ?? "",
162
- // The server-echoed `i.network` matches what we sent up at create
163
- // time, but we thread `parent.network` through to preserve the
164
- // `NetworkRef` type without a cast — same pattern as project /
165
- // location, both of which would otherwise lose their typing through
166
- // the SDK's `string | undefined` fields.
213
+ // Server-echoed `i.network` matches what we sent at create time, but
214
+ // we thread `parent.network` through to preserve the
215
+ // `NetworkRefById` brand without a cast — same pattern as project /
216
+ // location.
167
217
  network: parent.network,
168
- reservedIpRange: i.reservedIpRange,
169
- effectiveReservedIpRange: i.effectiveReservedIpRange,
170
218
  state: i.state,
171
- deploymentType: i.deploymentType,
172
- accessPoints: i.accessPoints ?? [],
219
+ mountPoint: i.mountPoint,
220
+ dynamicTierMode: i.dynamicTierOptions?.mode,
221
+ perUnitStorageThroughput: i.perUnitStorageThroughput,
222
+ gkeSupportEnabled: i.gkeSupportEnabled,
223
+ kmsKey: i.kmsKey,
173
224
  labels: { ...(i.labels ?? {}) },
174
225
  });
175
226
 
176
- export const ParallelstoreInstanceProvider = () =>
227
+ export const ManagedLustreInstanceProvider = () =>
177
228
  Provider.effect(
178
- ParallelstoreInstance,
229
+ ManagedLustreInstance,
179
230
  Effect.gen(function* () {
180
- const getInstance = yield* ps.getProjectsLocationsInstances;
181
- const createInstance = yield* ps.createProjectsLocationsInstances;
182
- const patchInstance = yield* ps.patchProjectsLocationsInstances;
183
- const deleteInstance = yield* ps.deleteProjectsLocationsInstances;
184
- const getOperation = yield* ps.getProjectsLocationsOperations;
231
+ const getInstance = yield* lustre.getProjectsLocationsInstances;
232
+ const createInstance = yield* lustre.createProjectsLocationsInstances;
233
+ const patchInstance = yield* lustre.patchProjectsLocationsInstances;
234
+ const deleteInstance = yield* lustre.deleteProjectsLocationsInstances;
235
+ const getOperation = yield* lustre.getProjectsLocationsOperations;
185
236
 
186
237
  const awaitOperation = Effect.fn(function* (
187
238
  operationName: string,
@@ -197,18 +248,18 @@ export const ParallelstoreInstanceProvider = () =>
197
248
  while: (e: { _tag?: string }) => e?._tag === "OperationPending",
198
249
  schedule: Schedule.exponential(Duration.seconds(5), 1.5).pipe(
199
250
  Schedule.either(Schedule.spaced(Duration.seconds(30))),
200
- // Parallelstore creates routinely run 10–25 min for
201
- // multi-TiB instances. 200 × 30s ≈ 100 min wall ceiling.
251
+ // Lustre creates run 10–25 min for multi-TiB instances.
252
+ // 200 × 30s ≈ 100 min wall ceiling.
202
253
  Schedule.both(Schedule.recurs(200)),
203
254
  Schedule.tapOutput(() =>
204
- session.note(`Waiting for Parallelstore operation ${operationName}…`),
255
+ session.note(`Waiting for Managed Lustre operation ${operationName}…`),
205
256
  ),
206
257
  ),
207
258
  }),
208
259
  );
209
260
  if (op.error) {
210
261
  return yield* new ConfigError({
211
- message: `Parallelstore operation ${operationName} failed: ${
262
+ message: `Managed Lustre operation ${operationName} failed: ${
212
263
  op.error.message ?? JSON.stringify(op.error)
213
264
  }`,
214
265
  });
@@ -222,16 +273,16 @@ export const ParallelstoreInstanceProvider = () =>
222
273
  const observe = (project: string, location: string, instanceId: string) =>
223
274
  getInstance({ name: fqName(project, location, instanceId) }).pipe(
224
275
  Effect.catchTag("NotFound", () =>
225
- Effect.succeed(undefined as ps.Instance | undefined),
276
+ Effect.succeed(undefined as lustre.Instance | undefined),
226
277
  ),
227
278
  Effect.catchTag("Forbidden", () =>
228
- Effect.succeed(undefined as ps.Instance | undefined),
279
+ Effect.succeed(undefined as lustre.Instance | undefined),
229
280
  ),
230
281
  );
231
282
 
232
283
  const syncMutable = Effect.fn(function* (args: {
233
284
  name: string;
234
- observed: ps.Instance;
285
+ observed: lustre.Instance;
235
286
  desired: { description: string | undefined; labels: Record<string, string> };
236
287
  session: ScopedPlanStatusSession;
237
288
  }) {
@@ -262,16 +313,17 @@ export const ParallelstoreInstanceProvider = () =>
262
313
  diff: Effect.fn(function* ({ news, olds = {} }) {
263
314
  if (!isResolved(news)) return undefined;
264
315
  if (
265
- somePropsAreDifferent(olds as ParallelstoreInstanceProps, news, [
316
+ somePropsAreDifferent(olds as ManagedLustreInstanceProps, news, [
266
317
  "project",
267
318
  "location",
268
319
  "instanceId",
320
+ "filesystem",
269
321
  "network",
270
- "reservedIpRange",
271
- "deploymentType",
272
- "fileStripeLevel",
273
- "directoryStripeLevel",
274
322
  "capacityGib",
323
+ "dynamicTierMode",
324
+ "perUnitStorageThroughput",
325
+ "gkeSupportEnabled",
326
+ "kmsKey",
275
327
  ])
276
328
  ) {
277
329
  return { action: "replace" } as const;
@@ -293,16 +345,21 @@ export const ParallelstoreInstanceProvider = () =>
293
345
  let observed = yield* observe(news.project, news.location, desiredId);
294
346
 
295
347
  if (!observed) {
296
- const body: ps.Instance = {
348
+ const body: lustre.Instance = {
349
+ filesystem: news.filesystem,
297
350
  capacityGib: news.capacityGib,
298
351
  network: news.network,
299
352
  ...(news.description ? { description: news.description } : {}),
300
- ...(news.reservedIpRange ? { reservedIpRange: news.reservedIpRange } : {}),
301
- ...(news.deploymentType ? { deploymentType: news.deploymentType } : {}),
302
- ...(news.fileStripeLevel ? { fileStripeLevel: news.fileStripeLevel } : {}),
303
- ...(news.directoryStripeLevel
304
- ? { directoryStripeLevel: news.directoryStripeLevel }
353
+ ...(news.dynamicTierMode
354
+ ? { dynamicTierOptions: { mode: news.dynamicTierMode } }
355
+ : {}),
356
+ ...(news.perUnitStorageThroughput
357
+ ? { perUnitStorageThroughput: news.perUnitStorageThroughput }
358
+ : {}),
359
+ ...(news.gkeSupportEnabled !== undefined
360
+ ? { gkeSupportEnabled: news.gkeSupportEnabled }
305
361
  : {}),
362
+ ...(news.kmsKey ? { kmsKey: news.kmsKey } : {}),
306
363
  labels: desiredLabels,
307
364
  };
308
365
  const op = yield* createInstance({
@@ -311,7 +368,7 @@ export const ParallelstoreInstanceProvider = () =>
311
368
  body,
312
369
  }).pipe(
313
370
  Effect.catchTag("Conflict", () =>
314
- Effect.succeed(undefined as ps.Operation | undefined),
371
+ Effect.succeed(undefined as lustre.Operation | undefined),
315
372
  ),
316
373
  );
317
374
  if (op?.name) yield* awaitOperation(op.name, session);
@@ -344,10 +401,6 @@ export const ParallelstoreInstanceProvider = () =>
344
401
  read: Effect.fn(function* ({ id, output, olds }) {
345
402
  const project = output?.project ?? olds?.project;
346
403
  const location = output?.location ?? olds?.location;
347
- // `network` only narrows to NetworkRef when it comes from
348
- // post-create `output`. `olds` is the snapshot of *props*
349
- // including a NetworkRef, so both feed into the same typed
350
- // pipeline.
351
404
  const network = output?.network ?? olds?.network;
352
405
  if (!project || !location || !network) return undefined;
353
406
  const instanceId =
package/src/Providers.ts CHANGED
@@ -14,9 +14,9 @@ import { Subnetwork, SubnetworkProvider } from "./Compute/Subnetwork.ts";
14
14
  import { Cluster, ClusterProvider } from "./Container/Cluster.ts";
15
15
  import { NodePool, NodePoolProvider } from "./Container/NodePool.ts";
16
16
  import {
17
- ParallelstoreInstance,
18
- ParallelstoreInstanceProvider,
19
- } from "./Parallelstore/Instance.ts";
17
+ ManagedLustreInstance,
18
+ ManagedLustreInstanceProvider,
19
+ } from "./ManagedLustre/Instance.ts";
20
20
  import {
21
21
  PsaConnection,
22
22
  PsaConnectionProvider,
@@ -56,7 +56,7 @@ export const providers = () =>
56
56
  SharedVpcHost,
57
57
  SharedVpcServiceProject,
58
58
  PsaConnection,
59
- ParallelstoreInstance,
59
+ ManagedLustreInstance,
60
60
  ]),
61
61
  ).pipe(
62
62
  Layer.provide(
@@ -71,7 +71,7 @@ export const providers = () =>
71
71
  SharedVpcHostProvider(),
72
72
  SharedVpcServiceProjectProvider(),
73
73
  PsaConnectionProvider(),
74
- ParallelstoreInstanceProvider(),
74
+ ManagedLustreInstanceProvider(),
75
75
  ),
76
76
  ),
77
77
  Layer.provideMerge(fromAuthProvider()),
package/src/index.ts CHANGED
@@ -10,7 +10,7 @@ export type {
10
10
  export * from "./CloudResourceManager/index.ts";
11
11
  export * from "./Compute/index.ts";
12
12
  export * from "./Container/index.ts";
13
- export * from "./Parallelstore/index.ts";
13
+ export * from "./ManagedLustre/index.ts";
14
14
  export * from "./ServiceNetworking/index.ts";
15
15
  export * from "./ServiceUsage/index.ts";
16
16
  export * from "./Providers.ts";
@@ -1,119 +0,0 @@
1
- import { Resource } from "alchemy";
2
- import * as Provider from "alchemy/Provider";
3
- import type { NetworkRef } from "../Compute/Network.ts";
4
- import type * as GCP from "../Providers.ts";
5
- /**
6
- * A Parallelstore instance — a high-throughput, POSIX-style filesystem
7
- * Google sells for AI training/inference shared storage. Backed by DAOS
8
- * under the hood; mounted in clusters via the Parallelstore CSI driver.
9
- *
10
- * **Network preconditions.** The instance attaches to a VPC over PSA
11
- * (Private Services Access). The consumer VPC must already have:
12
- * 1. A `GCP.GlobalAddress` reservation (`purpose=VPC_PEERING`,
13
- * `addressType=INTERNAL`, ≥/24 prefix length).
14
- * 2. A `GCP.PsaConnection` to `servicenetworking.googleapis.com`
15
- * consuming that range.
16
- * See the Shared VPC + Parallelstore wiring in the apps/cluster stack.
17
- *
18
- * **Capacity.** `capacityGib` must be a multiple of 12000 GiB and
19
- * between 12000 (12 TiB) and 100800 (98.4 TiB). Smaller deployments
20
- * may use 100 GiB increments depending on the SKU; the API surfaces
21
- * the floor at create time.
22
- *
23
- * Parallelstore operations use a CRM-style `Operation.done: boolean`
24
- * (verified at `parallelstore-v1.ts`).
25
- *
26
- * @section Creating a Parallelstore instance
27
- * @example 20 TiB scratch instance
28
- * ```typescript
29
- * const fs = yield* GCP.ParallelstoreInstance("ModelsFs", {
30
- * project: hostProject.projectId,
31
- * location: "us-central1-a",
32
- * capacityGib: "20480",
33
- * network: GCP.networkRef(hostProject.projectNumber, vpc.name),
34
- * reservedIpRange: psaRange.name,
35
- * deploymentType: "SCRATCH",
36
- * fileStripeLevel: "FILE_STRIPE_LEVEL_BALANCED",
37
- * directoryStripeLevel: "DIRECTORY_STRIPE_LEVEL_BALANCED",
38
- * });
39
- * ```
40
- */
41
- export type ParallelstoreInstanceProps = {
42
- /** GCP project ID hosting the instance. Immutable — replace if changed. */
43
- project: string;
44
- /**
45
- * Parallelstore location. **Zone, not region** — Parallelstore is a
46
- * zonal product. Common: `us-central1-a`. Immutable — replace.
47
- */
48
- location: string;
49
- /**
50
- * Instance ID. Defaults to `createPhysicalName({ id, lowercase: true,
51
- * maxLength: 63 })`. Lowercase letters/numbers/hyphens, must start
52
- * with a letter, end with a letter or number. Immutable — replace.
53
- */
54
- instanceId?: string;
55
- /** User-visible description. Mutable via `patch`. */
56
- description?: string;
57
- /**
58
- * Capacity in **GiB** (1024-based). Sent to the API as a string per
59
- * Parallelstore's int64-encoded-as-string convention. Replace-only —
60
- * Parallelstore doesn't currently support online resize.
61
- */
62
- capacityGib: string;
63
- /**
64
- * Fully-qualified consumer VPC in project-number form. Build with
65
- * `networkRef(project.projectNumber, vpc.name)` — the `NetworkRef`
66
- * template literal type rejects project-ID-form strings at compile
67
- * time. Immutable — replace.
68
- */
69
- network: NetworkRef;
70
- /**
71
- * Name (or self-link) of a `GCP.GlobalAddress` PSA reservation in
72
- * the same VPC. Immutable — replace.
73
- */
74
- reservedIpRange?: string;
75
- /** `SCRATCH` (default) or `PERSISTENT`. Immutable — replace. */
76
- deploymentType?: "SCRATCH" | "PERSISTENT";
77
- /** File stripe level. Replace-only. */
78
- fileStripeLevel?: "FILE_STRIPE_LEVEL_MIN" | "FILE_STRIPE_LEVEL_BALANCED" | "FILE_STRIPE_LEVEL_MAX";
79
- /** Directory stripe level. Replace-only. */
80
- directoryStripeLevel?: "DIRECTORY_STRIPE_LEVEL_MIN" | "DIRECTORY_STRIPE_LEVEL_BALANCED" | "DIRECTORY_STRIPE_LEVEL_MAX";
81
- /**
82
- * Resource labels. Alchemy internal labels (`alchemy_app`,
83
- * `alchemy_stage`, `alchemy_id`) are merged on top automatically.
84
- * Mutable via `patch`.
85
- */
86
- labels?: Record<string, string>;
87
- };
88
- export type ParallelstoreInstanceAttributes = {
89
- /** Bare instance id. */
90
- instanceId: string;
91
- /** Project ID. */
92
- project: string;
93
- /** Zone. */
94
- location: string;
95
- /** Resource name `projects/{p}/locations/{l}/instances/{id}`. */
96
- name: string;
97
- /** Description, mirroring props. */
98
- description: string | undefined;
99
- /** Capacity in GiB. */
100
- capacityGib: string;
101
- /** Consumer VPC URL (project-number form). */
102
- network: NetworkRef;
103
- /** Reserved IP range used (server-resolved). */
104
- reservedIpRange: string | undefined;
105
- /** Effective reserved range (post-allocation). */
106
- effectiveReservedIpRange: string | undefined;
107
- /** Lifecycle state — `ACTIVE` once ready. */
108
- state: string | undefined;
109
- /** Active deployment type. */
110
- deploymentType: string | undefined;
111
- /** DNS access points VMs mount via. */
112
- accessPoints: ReadonlyArray<string>;
113
- /** Labels currently set, including internals. */
114
- labels: Record<string, string>;
115
- };
116
- export type ParallelstoreInstance = Resource<"GCP.ParallelstoreInstance", ParallelstoreInstanceProps, ParallelstoreInstanceAttributes, never, GCP.Providers>;
117
- export declare const ParallelstoreInstance: import("alchemy").ResourceClass<ParallelstoreInstance>;
118
- export declare const ParallelstoreInstanceProvider: () => import("effect/Layer").Layer<Provider.Provider<ParallelstoreInstance>, never, import("effect/unstable/http/HttpClient").HttpClient | import("alchemy").Stage | import("alchemy").Stack | import("@distilled.cloud/gcp").Credentials>;
119
- //# sourceMappingURL=Instance.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Instance.d.ts","sourceRoot":"","sources":["../../src/Parallelstore/Instance.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKnC,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAK7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAC;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,OAAO,EAAE,UAAU,CAAC;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,cAAc,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IAC1C,uCAAuC;IACvC,eAAe,CAAC,EACZ,uBAAuB,GACvB,4BAA4B,GAC5B,uBAAuB,CAAC;IAC5B,4CAA4C;IAC5C,oBAAoB,CAAC,EACjB,4BAA4B,GAC5B,iCAAiC,GACjC,4BAA4B,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,wBAAwB;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,OAAO,EAAE,UAAU,CAAC;IACpB,gDAAgD;IAChD,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,kDAAkD;IAClD,wBAAwB,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7C,6CAA6C;IAC7C,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,8BAA8B;IAC9B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,uCAAuC;IACvC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC,iDAAiD;IACjD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAC1C,2BAA2B,EAC3B,0BAA0B,EAC1B,+BAA+B,EAC/B,KAAK,EACL,GAAG,CAAC,SAAS,CACd,CAAC;AACF,eAAO,MAAM,qBAAqB,wDAEjC,CAAC;AA+BF,eAAO,MAAM,6BAA6B,4OAmMvC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Instance.js","sourceRoot":"","sources":["../../src/Parallelstore/Instance.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Parallelstore/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Parallelstore/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
File without changes
File without changes
File without changes