@microagi/alchemy-gcp 0.1.4 → 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.
- package/lib/CloudResourceManager/Project.d.ts +16 -1
- package/lib/CloudResourceManager/Project.d.ts.map +1 -1
- package/lib/CloudResourceManager/Project.js +59 -1
- package/lib/CloudResourceManager/Project.js.map +1 -1
- package/lib/CloudResourceManager/ProjectIamMember.d.ts +25 -0
- package/lib/CloudResourceManager/ProjectIamMember.d.ts.map +1 -0
- package/lib/CloudResourceManager/ProjectIamMember.js +22 -0
- package/lib/CloudResourceManager/ProjectIamMember.js.map +1 -0
- package/lib/CloudResourceManager/index.d.ts +1 -0
- package/lib/CloudResourceManager/index.d.ts.map +1 -1
- package/lib/CloudResourceManager/index.js +1 -0
- package/lib/CloudResourceManager/index.js.map +1 -1
- package/lib/Compute/Network.d.ts +39 -2
- package/lib/Compute/Network.d.ts.map +1 -1
- package/lib/Compute/Network.js +12 -0
- package/lib/Compute/Network.js.map +1 -1
- package/lib/Compute/SharedVpcServiceProject.d.ts.map +1 -1
- package/lib/Compute/SharedVpcServiceProject.js +7 -1
- package/lib/Compute/SharedVpcServiceProject.js.map +1 -1
- package/lib/Compute/Subnetwork.d.ts +16 -1
- package/lib/Compute/Subnetwork.d.ts.map +1 -1
- package/lib/Compute/Subnetwork.js +74 -1
- package/lib/Compute/Subnetwork.js.map +1 -1
- package/lib/Compute/SubnetworkIamMember.d.ts +45 -0
- package/lib/Compute/SubnetworkIamMember.d.ts.map +1 -0
- package/lib/Compute/SubnetworkIamMember.js +46 -0
- package/lib/Compute/SubnetworkIamMember.js.map +1 -0
- package/lib/Compute/index.d.ts +1 -0
- package/lib/Compute/index.d.ts.map +1 -1
- package/lib/Compute/index.js +1 -0
- package/lib/Compute/index.js.map +1 -1
- package/lib/ManagedLustre/Instance.d.ts +173 -0
- package/lib/ManagedLustre/Instance.d.ts.map +1 -0
- package/lib/{Parallelstore → ManagedLustre}/Instance.js +39 -35
- package/lib/ManagedLustre/Instance.js.map +1 -0
- package/lib/ManagedLustre/index.d.ts.map +1 -0
- package/lib/ManagedLustre/index.js.map +1 -0
- package/lib/Providers.js +3 -3
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/package.json +4 -4
- package/src/CloudResourceManager/Project.ts +90 -2
- package/src/CloudResourceManager/ProjectIamMember.ts +29 -0
- package/src/CloudResourceManager/index.ts +1 -0
- package/src/Compute/Network.ts +58 -5
- package/src/Compute/SharedVpcServiceProject.ts +6 -1
- package/src/Compute/Subnetwork.ts +105 -2
- package/src/Compute/SubnetworkIamMember.ts +52 -0
- package/src/Compute/index.ts +1 -0
- package/src/{Parallelstore → ManagedLustre}/Instance.ts +163 -110
- package/src/Providers.ts +5 -5
- package/src/index.ts +1 -1
- package/lib/Parallelstore/Instance.d.ts +0 -119
- package/lib/Parallelstore/Instance.d.ts.map +0 -1
- package/lib/Parallelstore/Instance.js.map +0 -1
- package/lib/Parallelstore/index.d.ts.map +0 -1
- package/lib/Parallelstore/index.js.map +0 -1
- /package/lib/{Parallelstore → ManagedLustre}/index.d.ts +0 -0
- /package/lib/{Parallelstore → ManagedLustre}/index.js +0 -0
- /package/src/{Parallelstore → ManagedLustre}/index.ts +0 -0
|
@@ -1,61 +1,86 @@
|
|
|
1
1
|
import { ConfigError } from "@distilled.cloud/gcp";
|
|
2
|
-
import * as
|
|
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 {
|
|
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 {
|
|
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
|
|
19
|
-
*
|
|
20
|
-
*
|
|
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)
|
|
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
|
-
*
|
|
28
|
-
*
|
|
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
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
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
|
-
*
|
|
36
|
-
*
|
|
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
|
-
*
|
|
39
|
-
*
|
|
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.
|
|
67
|
+
* const fs = yield* GCP.ManagedLustreInstance("ModelsFs", {
|
|
42
68
|
* project: hostProject.projectId,
|
|
43
|
-
* location: "
|
|
69
|
+
* location: "europe-west4-a",
|
|
70
|
+
* filesystem: "models",
|
|
44
71
|
* capacityGib: "20480",
|
|
45
|
-
* network: GCP.
|
|
46
|
-
*
|
|
47
|
-
*
|
|
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
|
|
78
|
+
export type ManagedLustreInstanceProps = {
|
|
54
79
|
/** GCP project ID hosting the instance. Immutable — replace if changed. */
|
|
55
80
|
project: string;
|
|
56
81
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
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
|
-
*
|
|
72
|
-
*
|
|
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-
|
|
77
|
-
* `
|
|
78
|
-
*
|
|
79
|
-
*
|
|
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
|
-
|
|
122
|
+
dynamicTierMode?: "DEFAULT_CACHE" | "DISABLED";
|
|
82
123
|
/**
|
|
83
|
-
*
|
|
84
|
-
*
|
|
124
|
+
* Throughput in MBps per TiB for the fixed-throughput tier. Mutually
|
|
125
|
+
* exclusive with `dynamicTierMode === "DEFAULT_CACHE"`. Immutable —
|
|
126
|
+
* replace.
|
|
85
127
|
*/
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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
|
|
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-
|
|
121
|
-
network:
|
|
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
|
-
/**
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
|
137
|
-
"GCP.
|
|
138
|
-
|
|
139
|
-
|
|
184
|
+
export type ManagedLustreInstance = Resource<
|
|
185
|
+
"GCP.ManagedLustreInstance",
|
|
186
|
+
ManagedLustreInstanceProps,
|
|
187
|
+
ManagedLustreInstanceAttributes,
|
|
140
188
|
never,
|
|
141
189
|
GCP.Providers
|
|
142
190
|
>;
|
|
143
|
-
export const
|
|
144
|
-
"GCP.
|
|
191
|
+
export const ManagedLustreInstance = Resource<ManagedLustreInstance>(
|
|
192
|
+
"GCP.ManagedLustreInstance",
|
|
145
193
|
);
|
|
146
194
|
|
|
147
195
|
const toAttributes = (
|
|
148
|
-
i:
|
|
196
|
+
i: lustre.Instance,
|
|
149
197
|
parent: {
|
|
150
198
|
project: string;
|
|
151
199
|
location: string;
|
|
152
200
|
instanceId: string;
|
|
153
|
-
network:
|
|
201
|
+
network: NetworkRefById;
|
|
154
202
|
},
|
|
155
|
-
):
|
|
203
|
+
): ManagedLustreInstanceAttributes => ({
|
|
156
204
|
instanceId: parent.instanceId,
|
|
157
205
|
project: parent.project,
|
|
158
206
|
location: parent.location,
|
|
159
|
-
name:
|
|
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
|
-
//
|
|
163
|
-
//
|
|
164
|
-
// `
|
|
165
|
-
// location
|
|
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
|
-
|
|
172
|
-
|
|
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
|
|
227
|
+
export const ManagedLustreInstanceProvider = () =>
|
|
177
228
|
Provider.effect(
|
|
178
|
-
|
|
229
|
+
ManagedLustreInstance,
|
|
179
230
|
Effect.gen(function* () {
|
|
180
|
-
const getInstance = yield*
|
|
181
|
-
const createInstance = yield*
|
|
182
|
-
const patchInstance = yield*
|
|
183
|
-
const deleteInstance = yield*
|
|
184
|
-
const getOperation = yield*
|
|
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
|
-
//
|
|
201
|
-
//
|
|
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
|
|
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: `
|
|
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
|
|
276
|
+
Effect.succeed(undefined as lustre.Instance | undefined),
|
|
226
277
|
),
|
|
227
278
|
Effect.catchTag("Forbidden", () =>
|
|
228
|
-
Effect.succeed(undefined as
|
|
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:
|
|
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
|
|
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:
|
|
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.
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
...(news.
|
|
304
|
-
? {
|
|
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
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
} from "./
|
|
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
|
-
|
|
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
|
-
|
|
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 "./
|
|
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
|