@ornncompute/cli 1.0.114 → 1.0.116
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/README.md +2 -3
- package/package.json +1 -1
- package/src/mount-commands.mjs +0 -206
- package/vendor/api-client/commerce.js +60 -6
- package/vendor/capabilities/cli.js +1 -97
package/README.md
CHANGED
|
@@ -91,7 +91,6 @@ volumes files list | upload | download | delete
|
|
|
91
91
|
volumes folders delete
|
|
92
92
|
volume-mounts candidates | show | attach | wait | detach
|
|
93
93
|
external-buckets list | show | connect | update-credentials | verify | import | disconnect
|
|
94
|
-
filesystems deploy | show | wait | delete
|
|
95
94
|
```
|
|
96
95
|
|
|
97
96
|
`ssh-keys list` uses backend cursors; see [pagination](../../docs/cli.md#advanced-customer-resources).
|
|
@@ -273,7 +272,7 @@ as `--erase-local-data` or `--delete-node-record`. Machine retries require a
|
|
|
273
272
|
caller-stable idempotency key and reconcile against durable owner state.
|
|
274
273
|
|
|
275
274
|
Permanent deletion and teardown requests execute directly when explicitly
|
|
276
|
-
requested. Private networks, detached volumes,
|
|
275
|
+
requested. Private networks, detached volumes, and
|
|
277
276
|
Kubernetes or Slurm clusters use their command arguments to express the exact
|
|
278
277
|
operation. Clearing a volume or deleting nested content is live-terminal only
|
|
279
278
|
and does not prompt for consent.
|
|
@@ -365,7 +364,7 @@ with one replacement and <https://docs.ornn.com/cli#migrating-to-vnext>.
|
|
|
365
364
|
| `ornn storage volumes *` | `ornn volumes <verb>` |
|
|
366
365
|
| `ornn storage files *` | `ornn volumes files <verb>` |
|
|
367
366
|
| `ornn storage buckets *` | `ornn external-buckets <verb>` |
|
|
368
|
-
| Storage targets, deploy, status, detach
|
|
367
|
+
| Storage targets, deploy, status, detach | exact `ornn volume-mounts` leaf printed |
|
|
369
368
|
| `ornn billing` | Use the Ornn web app. |
|
|
370
369
|
| customer-root `facilities`, `tokens`, `users`, `node`, or staff `reservations *` | exact `ornn admin ...` command printed by the error |
|
|
371
370
|
| `ornn api`, `commerce`, `orchestrator`, `cache purge` | `ornn resources`; no generic replacement exists |
|
package/package.json
CHANGED
package/src/mount-commands.mjs
CHANGED
|
@@ -55,17 +55,6 @@ function accessMode(value, interaction) {
|
|
|
55
55
|
return candidate;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
function positiveInteger(value, field, interaction) {
|
|
59
|
-
const parsed = integer(value);
|
|
60
|
-
if (parsed === null || parsed < 1) {
|
|
61
|
-
interaction.usage(`--${field} must be a positive integer.`, {
|
|
62
|
-
code: "invalid_input",
|
|
63
|
-
field,
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
return parsed;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
58
|
function timeoutMilliseconds(value, interaction, fallback = DEFAULT_MOUNT_TIMEOUT) {
|
|
70
59
|
const candidate = text(value) ?? fallback;
|
|
71
60
|
const match = /^(\d+)(ms|s|m|h)$/.exec(candidate);
|
|
@@ -141,12 +130,6 @@ function reservationDeploymentPath(reservationId) {
|
|
|
141
130
|
);
|
|
142
131
|
}
|
|
143
132
|
|
|
144
|
-
function reservationFilesystemPath(reservationId) {
|
|
145
|
-
return computeEndpoint(
|
|
146
|
-
`/nodes/reservations/${encodeURIComponent(reservationId)}/filesystem-deployment`
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
133
|
function stableAttachmentPhase(value) {
|
|
151
134
|
const state = text(value)?.toLowerCase() ?? "pending";
|
|
152
135
|
if (["attached", "ready"].includes(state)) return state;
|
|
@@ -255,14 +238,6 @@ function mountSatisfied(mount, goal) {
|
|
|
255
238
|
);
|
|
256
239
|
}
|
|
257
240
|
|
|
258
|
-
function filesystemSatisfied(mount, performanceTier, capacityGib) {
|
|
259
|
-
return Boolean(
|
|
260
|
-
mount &&
|
|
261
|
-
mount.filesystem.performance_tier === performanceTier &&
|
|
262
|
-
mount.filesystem.capacity_gib === capacityGib
|
|
263
|
-
);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
241
|
function mountReady(mount) {
|
|
267
242
|
return Boolean(
|
|
268
243
|
mount && mount.readiness.expected > 0 && mount.readiness.ready === mount.readiness.expected
|
|
@@ -843,179 +818,6 @@ export async function detachVolumeMount(input, runtime) {
|
|
|
843
818
|
});
|
|
844
819
|
}
|
|
845
820
|
|
|
846
|
-
async function deployFilesystem(input, runtime) {
|
|
847
|
-
const [rawReservation] = positionals(
|
|
848
|
-
input,
|
|
849
|
-
1,
|
|
850
|
-
"ornn filesystems deploy <canonical-reservation-id> --performance-tier <tier> --capacity-gib <gib>",
|
|
851
|
-
runtime.interaction
|
|
852
|
-
);
|
|
853
|
-
requireMachineMutation(input, runtime.interaction);
|
|
854
|
-
const reservationId = canonical(rawReservation, "reservation", runtime.interaction);
|
|
855
|
-
const performanceTier = required(input.performanceTier, "performance-tier", runtime.interaction);
|
|
856
|
-
const capacityGib = positiveInteger(input.capacityGib, "capacity-gib", runtime.interaction);
|
|
857
|
-
const wait = shouldWait(input, runtime.interaction);
|
|
858
|
-
let current = await fetchMount(runtime, reservationId);
|
|
859
|
-
if (current && ["detached", "ended"].includes(current.lifecycle.phase)) current = null;
|
|
860
|
-
if (current) {
|
|
861
|
-
const sameGoal = filesystemSatisfied(current, performanceTier, capacityGib);
|
|
862
|
-
if (!sameGoal) {
|
|
863
|
-
runtime.interaction.error(
|
|
864
|
-
"This capacity reservation already has a different managed filesystem relationship.",
|
|
865
|
-
{
|
|
866
|
-
action: {
|
|
867
|
-
command: `ornn filesystems show ${reservationId}`,
|
|
868
|
-
description:
|
|
869
|
-
"Inspect the current deployment before changing its exact capacity or performance goal.",
|
|
870
|
-
type: "command",
|
|
871
|
-
},
|
|
872
|
-
code: "filesystem_deployment_conflict",
|
|
873
|
-
}
|
|
874
|
-
);
|
|
875
|
-
}
|
|
876
|
-
return wait && !mountReady(current)
|
|
877
|
-
? waitForMount(input, runtime, reservationId, current, "filesystems deploy")
|
|
878
|
-
: mountResult(runtime.interaction, current, reservationId, { replayed: true });
|
|
879
|
-
}
|
|
880
|
-
current = await fetchMount(runtime, reservationId);
|
|
881
|
-
if (current && ["detached", "ended"].includes(current.lifecycle.phase)) current = null;
|
|
882
|
-
if (current && !filesystemSatisfied(current, performanceTier, capacityGib)) {
|
|
883
|
-
runtime.interaction.error("The managed filesystem relationship changed before deployment.", {
|
|
884
|
-
code: "filesystem_deployment_conflict",
|
|
885
|
-
});
|
|
886
|
-
}
|
|
887
|
-
if (!current) {
|
|
888
|
-
try {
|
|
889
|
-
current = await withMachineCount(
|
|
890
|
-
runtime,
|
|
891
|
-
projectVolumeMount(
|
|
892
|
-
await runtime.fetch(reservationFilesystemPath(reservationId), {
|
|
893
|
-
method: "POST",
|
|
894
|
-
headers: idempotencyHeaders(input),
|
|
895
|
-
body: { performance_tier: performanceTier, capacity_gib: capacityGib },
|
|
896
|
-
}),
|
|
897
|
-
reservationId
|
|
898
|
-
),
|
|
899
|
-
reservationId
|
|
900
|
-
);
|
|
901
|
-
} catch (error) {
|
|
902
|
-
if (error instanceof CliApiError && (error.status === undefined || error.status >= 500)) {
|
|
903
|
-
current = await fetchMount(runtime, reservationId);
|
|
904
|
-
if (!filesystemSatisfied(current, performanceTier, capacityGib)) throw error;
|
|
905
|
-
} else {
|
|
906
|
-
safeFailure(runtime.interaction, error, "The filesystem could not be deployed safely.");
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
}
|
|
910
|
-
if (!filesystemSatisfied(current, performanceTier, capacityGib)) {
|
|
911
|
-
runtime.interaction.error(
|
|
912
|
-
"The accepted filesystem deployment did not match the reviewed goal.",
|
|
913
|
-
{
|
|
914
|
-
code: "filesystem_deployment_goal_mismatch",
|
|
915
|
-
}
|
|
916
|
-
);
|
|
917
|
-
}
|
|
918
|
-
return wait && !mountReady(current)
|
|
919
|
-
? waitForMount(input, runtime, reservationId, current, "filesystems deploy")
|
|
920
|
-
: mountResult(runtime.interaction, current, reservationId);
|
|
921
|
-
}
|
|
922
|
-
|
|
923
|
-
function filesystemExecution(result) {
|
|
924
|
-
if (!result?.data || !Object.hasOwn(result.data, "volume_mount")) return result;
|
|
925
|
-
const { volume_mount: filesystemDeployment, ...data } = result.data;
|
|
926
|
-
return {
|
|
927
|
-
...result,
|
|
928
|
-
data: {
|
|
929
|
-
...data,
|
|
930
|
-
filesystem_deployment: filesystemDeployment,
|
|
931
|
-
},
|
|
932
|
-
};
|
|
933
|
-
}
|
|
934
|
-
|
|
935
|
-
async function deleteFilesystem(input, runtime) {
|
|
936
|
-
const [rawReservation] = positionals(
|
|
937
|
-
input,
|
|
938
|
-
1,
|
|
939
|
-
"ornn filesystems delete <canonical-reservation-id>",
|
|
940
|
-
runtime.interaction
|
|
941
|
-
);
|
|
942
|
-
requireMachineMutation(input, runtime.interaction);
|
|
943
|
-
const reservationId = canonical(rawReservation, "reservation", runtime.interaction);
|
|
944
|
-
const current = await fetchMount(runtime, reservationId);
|
|
945
|
-
if (!current || ["detached", "ended"].includes(current.lifecycle.phase)) {
|
|
946
|
-
return runtime.interaction.result({
|
|
947
|
-
data: {
|
|
948
|
-
filesystem_deployment: current,
|
|
949
|
-
replayed: true,
|
|
950
|
-
reservation_id: reservationId,
|
|
951
|
-
volume_preserved: current?.volume ?? null,
|
|
952
|
-
},
|
|
953
|
-
outcome: { class: "ended", phase: "deleted" },
|
|
954
|
-
presentation: {
|
|
955
|
-
lines: [
|
|
956
|
-
`Capacity reservation ${reservationId} already has no managed filesystem deployment.`,
|
|
957
|
-
],
|
|
958
|
-
},
|
|
959
|
-
});
|
|
960
|
-
}
|
|
961
|
-
const refreshed = await fetchMount(runtime, reservationId);
|
|
962
|
-
if (!refreshed || refreshed.id !== current.id || refreshed.volume.id !== current.volume.id) {
|
|
963
|
-
runtime.interaction.error("The managed filesystem relationship changed before deletion.", {
|
|
964
|
-
code: "filesystem_deployment_changed",
|
|
965
|
-
});
|
|
966
|
-
}
|
|
967
|
-
let deleting;
|
|
968
|
-
try {
|
|
969
|
-
deleting = await withMachineCount(
|
|
970
|
-
runtime,
|
|
971
|
-
projectVolumeMount(
|
|
972
|
-
await runtime.fetch(reservationFilesystemPath(reservationId), {
|
|
973
|
-
headers: idempotencyHeaders(input),
|
|
974
|
-
method: "DELETE",
|
|
975
|
-
}),
|
|
976
|
-
reservationId
|
|
977
|
-
),
|
|
978
|
-
reservationId
|
|
979
|
-
);
|
|
980
|
-
} catch (error) {
|
|
981
|
-
if (error instanceof CliApiError && (error.status === undefined || error.status >= 500)) {
|
|
982
|
-
const reconciled = await fetchMount(runtime, reservationId);
|
|
983
|
-
const deletingState = reconciled?.filesystem?.phase;
|
|
984
|
-
if (
|
|
985
|
-
reconciled &&
|
|
986
|
-
!["deleting", "deleted", "ended"].includes(deletingState) &&
|
|
987
|
-
!["detached", "ended"].includes(reconciled.lifecycle.phase)
|
|
988
|
-
) {
|
|
989
|
-
throw error;
|
|
990
|
-
}
|
|
991
|
-
deleting = reconciled;
|
|
992
|
-
} else {
|
|
993
|
-
safeFailure(
|
|
994
|
-
runtime.interaction,
|
|
995
|
-
error,
|
|
996
|
-
"The filesystem deployment could not be deleted safely."
|
|
997
|
-
);
|
|
998
|
-
}
|
|
999
|
-
}
|
|
1000
|
-
return runtime.interaction.result({
|
|
1001
|
-
data: {
|
|
1002
|
-
filesystem_deployment: deleting,
|
|
1003
|
-
replayed: false,
|
|
1004
|
-
reservation_id: reservationId,
|
|
1005
|
-
volume_preserved: current.volume,
|
|
1006
|
-
},
|
|
1007
|
-
outcome: { class: "working", phase: "deleting" },
|
|
1008
|
-
resume: { kind: "filesystem_deployment", ref: reservationId },
|
|
1009
|
-
presentation: {
|
|
1010
|
-
lines: [
|
|
1011
|
-
`Filesystem deployment removal accepted for ${reservationId}.`,
|
|
1012
|
-
`Managed volume ${current.volume.name ?? current.volume.id} was preserved.`,
|
|
1013
|
-
],
|
|
1014
|
-
next: `ornn filesystems show ${reservationId}`,
|
|
1015
|
-
},
|
|
1016
|
-
});
|
|
1017
|
-
}
|
|
1018
|
-
|
|
1019
821
|
export async function executeMountCommand(command, input, runtime) {
|
|
1020
822
|
switch (command) {
|
|
1021
823
|
case "storage.volume-mounts.candidates":
|
|
@@ -1028,14 +830,6 @@ export async function executeMountCommand(command, input, runtime) {
|
|
|
1028
830
|
return waitCommand(input, runtime, "volume-mounts wait");
|
|
1029
831
|
case "storage.volume-mounts.detach":
|
|
1030
832
|
return detachVolumeMount(input, runtime);
|
|
1031
|
-
case "storage.filesystems.deploy":
|
|
1032
|
-
return filesystemExecution(await deployFilesystem(input, runtime));
|
|
1033
|
-
case "storage.filesystems.show":
|
|
1034
|
-
return filesystemExecution(await show(input, runtime, "filesystems show"));
|
|
1035
|
-
case "storage.filesystems.wait":
|
|
1036
|
-
return filesystemExecution(await waitCommand(input, runtime, "filesystems wait"));
|
|
1037
|
-
case "storage.filesystems.delete":
|
|
1038
|
-
return deleteFilesystem(input, runtime);
|
|
1039
833
|
default:
|
|
1040
834
|
runtime.interaction.error("Unknown mount command.", { code: "unknown_command" });
|
|
1041
835
|
}
|
|
@@ -4,6 +4,12 @@ var listingPath = (id2) => `${BASE}/${encodeURIComponent(id2)}`;
|
|
|
4
4
|
var termsPath = (id2) => `${listingPath(id2)}/terms`;
|
|
5
5
|
var nodePath = (id2, nodeId) => `${listingPath(id2)}/nodes/${encodeURIComponent(nodeId)}`;
|
|
6
6
|
var replayHeaders = (key) => key ? { headers: { "Idempotency-Key": key } } : {};
|
|
7
|
+
function getCapacityListingImage(fetcher, id2, signal) {
|
|
8
|
+
return fetcher(`${listingPath(id2)}/og.png`, { method: "GET", signal });
|
|
9
|
+
}
|
|
10
|
+
function getCapacityListingSpecPdf(fetcher, id2, signal) {
|
|
11
|
+
return fetcher(`${listingPath(id2)}/spec.pdf`, { method: "GET", signal });
|
|
12
|
+
}
|
|
7
13
|
function listCapacityListings(request, input = {}, signal) {
|
|
8
14
|
const query = new URLSearchParams();
|
|
9
15
|
for (const [key, value] of Object.entries(input)) {
|
|
@@ -105,6 +111,9 @@ function detachCapacityNode(request, id2, nodeId) {
|
|
|
105
111
|
// ../../packages/api-client/dist/commerce/reservations.js
|
|
106
112
|
var BASE2 = "/commerce/reservations";
|
|
107
113
|
var reservationPath = (id2) => `${BASE2}/${encodeURIComponent(id2)}`;
|
|
114
|
+
function getReservationSpecPdf(fetcher, id2, signal) {
|
|
115
|
+
return fetcher(`${reservationPath(id2)}/spec.pdf`, { method: "GET", signal });
|
|
116
|
+
}
|
|
108
117
|
function listReservations(request, input = {}, signal) {
|
|
109
118
|
const query = new URLSearchParams();
|
|
110
119
|
for (const [key, value] of Object.entries(input)) {
|
|
@@ -496,6 +505,16 @@ function listTicketActivity(request, recordId) {
|
|
|
496
505
|
|
|
497
506
|
// ../../packages/api-client/dist/commerce/contracts.js
|
|
498
507
|
var base2 = "/internal/v1/gtm/contracts";
|
|
508
|
+
function getContractFile(fetcher, id2, signal) {
|
|
509
|
+
return fetcher(`${base2}/${encodeURIComponent(id2)}`, { method: "GET", signal });
|
|
510
|
+
}
|
|
511
|
+
function uploadContractFile(fetcher, input, signal) {
|
|
512
|
+
const body = new FormData();
|
|
513
|
+
body.set("scopeType", input.scopeType);
|
|
514
|
+
body.set("scopeId", input.scopeId);
|
|
515
|
+
body.set("file", input.file);
|
|
516
|
+
return fetcher(base2, { method: "POST", body, signal });
|
|
517
|
+
}
|
|
499
518
|
function listContractFiles(request, input = {}, signal) {
|
|
500
519
|
return request(base2 + queryString(input), { method: "GET", signal });
|
|
501
520
|
}
|
|
@@ -593,6 +612,18 @@ function createSupplierAccountSession(request, body, signal) {
|
|
|
593
612
|
|
|
594
613
|
// ../../packages/api-client/dist/commerce/supplier-intake.js
|
|
595
614
|
var base3 = "/internal/v1/supplier-intake";
|
|
615
|
+
function getSupplierIntakeDocument(fetcher, id2, input = {}, signal) {
|
|
616
|
+
return fetcher(`${base3}/documents/${encodeURIComponent(id2)}${input.download ? "?download=1" : ""}`, {
|
|
617
|
+
method: "GET",
|
|
618
|
+
signal
|
|
619
|
+
});
|
|
620
|
+
}
|
|
621
|
+
function getSupplierIntakePacket(fetcher, id2, input = {}, signal) {
|
|
622
|
+
return fetcher(`${base3}/submissions/${encodeURIComponent(id2)}/packet${input.download ? "?download=1" : ""}`, {
|
|
623
|
+
method: "GET",
|
|
624
|
+
signal
|
|
625
|
+
});
|
|
626
|
+
}
|
|
596
627
|
function listSupplierIntakeLinks(request) {
|
|
597
628
|
return request(base3 + "/links", { method: "GET" });
|
|
598
629
|
}
|
|
@@ -614,21 +645,35 @@ function reviewSupplierIntakeSubmission(request, id2) {
|
|
|
614
645
|
});
|
|
615
646
|
}
|
|
616
647
|
|
|
648
|
+
// ../../packages/api-client/dist/commerce/supplier-documents.js
|
|
649
|
+
var base4 = "/commerce/supplier/documents";
|
|
650
|
+
function uploadSupplierDocument(fetcher, file, signal) {
|
|
651
|
+
const body = new FormData();
|
|
652
|
+
body.set("file", file);
|
|
653
|
+
return fetcher(base4, { method: "POST", body, signal });
|
|
654
|
+
}
|
|
655
|
+
function getSupplierDocument(fetcher, id2, input = {}, signal) {
|
|
656
|
+
return fetcher(`${base4}/${encodeURIComponent(id2)}` + queryString(input), {
|
|
657
|
+
method: "GET",
|
|
658
|
+
signal
|
|
659
|
+
});
|
|
660
|
+
}
|
|
661
|
+
|
|
617
662
|
// ../../packages/api-client/dist/commerce/licenses.js
|
|
618
|
-
var
|
|
663
|
+
var base5 = "/internal/v1/controlplane-licenses";
|
|
619
664
|
function listControlplaneLicenses(request, signal) {
|
|
620
|
-
return request(
|
|
665
|
+
return request(base5, { method: "GET", signal });
|
|
621
666
|
}
|
|
622
667
|
function getControlplaneLicense(request, id2) {
|
|
623
|
-
return request(`${
|
|
668
|
+
return request(`${base5}/${encodeURIComponent(id2)}`, {
|
|
624
669
|
method: "GET"
|
|
625
670
|
});
|
|
626
671
|
}
|
|
627
672
|
function createControlplaneLicense(request, body) {
|
|
628
|
-
return request(
|
|
673
|
+
return request(base5, { method: "POST", body });
|
|
629
674
|
}
|
|
630
675
|
function revokeControlplaneLicense(request, id2) {
|
|
631
|
-
return request(`${
|
|
676
|
+
return request(`${base5}/${encodeURIComponent(id2)}/revoke`, {
|
|
632
677
|
method: "POST",
|
|
633
678
|
body: {}
|
|
634
679
|
});
|
|
@@ -674,18 +719,25 @@ export {
|
|
|
674
719
|
getBillingPaymentMethod,
|
|
675
720
|
getBillingSummary,
|
|
676
721
|
getCapacityListing,
|
|
722
|
+
getCapacityListingImage,
|
|
723
|
+
getCapacityListingSpecPdf,
|
|
677
724
|
getCommerceOrganization,
|
|
725
|
+
getContractFile,
|
|
678
726
|
getControlplaneLicense,
|
|
679
727
|
getGTMPersonalWorkspace,
|
|
680
728
|
getGTMTicket,
|
|
681
729
|
getInferenceWallet,
|
|
682
730
|
getReservation,
|
|
683
731
|
getReservationHour,
|
|
732
|
+
getReservationSpecPdf,
|
|
684
733
|
getReservationUsage,
|
|
685
734
|
getShowback,
|
|
686
735
|
getStaffFacility,
|
|
687
736
|
getStorageAgreement,
|
|
688
737
|
getStorageBill,
|
|
738
|
+
getSupplierDocument,
|
|
739
|
+
getSupplierIntakeDocument,
|
|
740
|
+
getSupplierIntakePacket,
|
|
689
741
|
getSupplierIntakeSubmission,
|
|
690
742
|
getSupplierPaymentAccount,
|
|
691
743
|
listAdminInvoices,
|
|
@@ -741,5 +793,7 @@ export {
|
|
|
741
793
|
updateGTMComment,
|
|
742
794
|
updateGTMCompany,
|
|
743
795
|
updateGTMDeal,
|
|
744
|
-
updateGTMTask
|
|
796
|
+
updateGTMTask,
|
|
797
|
+
uploadContractFile,
|
|
798
|
+
uploadSupplierDocument
|
|
745
799
|
};
|
|
@@ -3327,7 +3327,6 @@ var launchCapability = cliOnly({
|
|
|
3327
3327
|
"machines list",
|
|
3328
3328
|
"clusters show",
|
|
3329
3329
|
"volume-mounts show",
|
|
3330
|
-
"filesystems show",
|
|
3331
3330
|
"ssh-keys list",
|
|
3332
3331
|
"ssh-keys assignments status"
|
|
3333
3332
|
]
|
|
@@ -4846,12 +4845,10 @@ import { z as z23 } from "zod";
|
|
|
4846
4845
|
var mountInput = z23.object({
|
|
4847
4846
|
$positionals: z23.array(z23.string()).default([]),
|
|
4848
4847
|
access: z23.string().optional(),
|
|
4849
|
-
capacityGib: z23.union([z23.string(), z23.number()]).optional(),
|
|
4850
4848
|
cursor: z23.string().optional(),
|
|
4851
4849
|
idempotencyKey: z23.string().optional(),
|
|
4852
4850
|
limit: z23.union([z23.string(), z23.number()]).optional(),
|
|
4853
4851
|
noWait: z23.boolean().optional(),
|
|
4854
|
-
performanceTier: z23.string().optional(),
|
|
4855
4852
|
timeout: z23.string().optional(),
|
|
4856
4853
|
volume: z23.string().optional(),
|
|
4857
4854
|
wait: z23.boolean().optional(),
|
|
@@ -4960,59 +4957,6 @@ var mountCapabilities = [
|
|
|
4960
4957
|
review: "Review the exact relationship and access loss; the managed volume remains.",
|
|
4961
4958
|
resumableStates: ["detaching", "ended"],
|
|
4962
4959
|
related: ["volumes show", "private-networks list"]
|
|
4963
|
-
}),
|
|
4964
|
-
mountCapability({
|
|
4965
|
-
id: "storage.filesystems.deploy",
|
|
4966
|
-
command: ["filesystems", "deploy"],
|
|
4967
|
-
description: "Deploy one managed filesystem for an exact capacity reservation.",
|
|
4968
|
-
mutation: "preview-confirm",
|
|
4969
|
-
order: 550,
|
|
4970
|
-
outcome: "Create or rediscover one filesystem deployment and expose every machine mount.",
|
|
4971
|
-
human: "ornn filesystems deploy <canonical-reservation-id> --performance-tier <tier> --capacity-gib <gib> [--no-wait]",
|
|
4972
|
-
automation: "ornn filesystems deploy <canonical-reservation-id> --performance-tier <tier> --capacity-gib <gib> --idempotency-key <key> --format json",
|
|
4973
|
-
acceptedReferences: ["canonical capacity-reservation ID"],
|
|
4974
|
-
review: "Review the exact reservation, performance tier, capacity, and managed filesystem consequence.",
|
|
4975
|
-
resumableStates: ["accepted", "partial", "ready"],
|
|
4976
|
-
related: ["filesystems wait", "filesystems delete"]
|
|
4977
|
-
}),
|
|
4978
|
-
mountCapability({
|
|
4979
|
-
id: "storage.filesystems.show",
|
|
4980
|
-
command: ["filesystems", "show"],
|
|
4981
|
-
description: "Summarize one filesystem deployment from its underlying per-machine mounts.",
|
|
4982
|
-
mutation: "read",
|
|
4983
|
-
order: 551,
|
|
4984
|
-
outcome: "Show actual per-machine filesystem readiness without changing volume state.",
|
|
4985
|
-
human: "ornn filesystems show <canonical-reservation-id>",
|
|
4986
|
-
automation: "ornn filesystems show <canonical-reservation-id> --format json",
|
|
4987
|
-
acceptedReferences: ["canonical capacity-reservation ID"],
|
|
4988
|
-
related: ["filesystems wait", "volume-mounts show"]
|
|
4989
|
-
}),
|
|
4990
|
-
mountCapability({
|
|
4991
|
-
id: "storage.filesystems.wait",
|
|
4992
|
-
command: ["filesystems", "wait"],
|
|
4993
|
-
description: "Wait locally for a filesystem deployment's per-machine mount goal.",
|
|
4994
|
-
mutation: "read",
|
|
4995
|
-
order: 552,
|
|
4996
|
-
outcome: "Wait for every filesystem member while retaining partial member data.",
|
|
4997
|
-
human: "ornn filesystems wait <canonical-reservation-id> [--timeout <duration>]",
|
|
4998
|
-
automation: "ornn filesystems wait <canonical-reservation-id> --timeout <duration> --format json",
|
|
4999
|
-
acceptedReferences: ["canonical capacity-reservation ID"],
|
|
5000
|
-
resumableStates: ["partial", "ready"],
|
|
5001
|
-
related: ["filesystems show", "filesystems delete"]
|
|
5002
|
-
}),
|
|
5003
|
-
mountCapability({
|
|
5004
|
-
id: "storage.filesystems.delete",
|
|
5005
|
-
command: ["filesystems", "delete"],
|
|
5006
|
-
description: "Remove one filesystem deployment relationship without deleting its managed volume.",
|
|
5007
|
-
mutation: "preview-confirm",
|
|
5008
|
-
order: 553,
|
|
5009
|
-
outcome: "Detach every filesystem member while preserving the underlying managed volume.",
|
|
5010
|
-
human: "ornn filesystems delete <canonical-reservation-id>",
|
|
5011
|
-
automation: "ornn filesystems delete <canonical-reservation-id> --idempotency-key <key> --format json",
|
|
5012
|
-
acceptedReferences: ["canonical capacity-reservation ID"],
|
|
5013
|
-
review: "Review the exact deployment and access loss; its managed volume remains.",
|
|
5014
|
-
resumableStates: ["detaching", "ended"],
|
|
5015
|
-
related: ["volumes show", "filesystems deploy"]
|
|
5016
4960
|
})
|
|
5017
4961
|
];
|
|
5018
4962
|
|
|
@@ -7510,7 +7454,7 @@ var storageVerbCapabilities = [
|
|
|
7510
7454
|
id: "storage.deployment_status",
|
|
7511
7455
|
domain: "storage",
|
|
7512
7456
|
roles: ["user"],
|
|
7513
|
-
description: "Show a reservation's storage
|
|
7457
|
+
description: "Show a reservation's storage deployment (attachment) status.",
|
|
7514
7458
|
mutation: "read",
|
|
7515
7459
|
http: {
|
|
7516
7460
|
method: "GET",
|
|
@@ -7522,42 +7466,6 @@ var storageVerbCapabilities = [
|
|
|
7522
7466
|
method: "GET"
|
|
7523
7467
|
})
|
|
7524
7468
|
}),
|
|
7525
|
-
defineCapability({
|
|
7526
|
-
id: "storage.filesystem_deploy",
|
|
7527
|
-
domain: "storage",
|
|
7528
|
-
roles: ["user"],
|
|
7529
|
-
description: "Deploy a managed filesystem (Filestore) onto a reservation. Both performanceTier and capacityGib are required. Capacity starts at 1024 GiB and must land on the tier's increment: standard accepts any GiB up to 65433, performance uses 256 GiB steps to 9984 GiB then 2560 GiB steps to 102400 GiB, enterprise uses 256 GiB steps to 10240 GiB.",
|
|
7530
|
-
mutation: "preview-confirm",
|
|
7531
|
-
http: {
|
|
7532
|
-
method: "POST",
|
|
7533
|
-
path: "/v1/workflows/compute/nodes/reservations/{reservationId}/filesystem-deployment"
|
|
7534
|
-
},
|
|
7535
|
-
input: reservationWrite.extend({
|
|
7536
|
-
performanceTier: z30.enum(["standard", "performance", "enterprise"]),
|
|
7537
|
-
capacityGib: z30.number().int().positive()
|
|
7538
|
-
}),
|
|
7539
|
-
slack: false,
|
|
7540
|
-
execute: (ctx, input) => ctx.fetch(reservationStorageRoute(input.reservationId, "filesystem-deployment"), {
|
|
7541
|
-
method: "POST",
|
|
7542
|
-
body: { performance_tier: input.performanceTier, capacity_gib: input.capacityGib }
|
|
7543
|
-
})
|
|
7544
|
-
}),
|
|
7545
|
-
defineCapability({
|
|
7546
|
-
id: "storage.filesystem_delete",
|
|
7547
|
-
domain: "storage",
|
|
7548
|
-
roles: ["user"],
|
|
7549
|
-
description: "Delete a reservation's managed filesystem (Filestore) deployment.",
|
|
7550
|
-
mutation: "preview-confirm",
|
|
7551
|
-
http: {
|
|
7552
|
-
method: "DELETE",
|
|
7553
|
-
path: "/v1/workflows/compute/nodes/reservations/{reservationId}/filesystem-deployment"
|
|
7554
|
-
},
|
|
7555
|
-
input: reservationWrite,
|
|
7556
|
-
slack: false,
|
|
7557
|
-
execute: (ctx, input) => ctx.fetch(reservationStorageRoute(input.reservationId, "filesystem-deployment"), {
|
|
7558
|
-
method: "DELETE"
|
|
7559
|
-
})
|
|
7560
|
-
}),
|
|
7561
7469
|
defineCapability({
|
|
7562
7470
|
id: "storage.targets",
|
|
7563
7471
|
domain: "storage",
|
|
@@ -8032,10 +7940,6 @@ var LEGACY_CLI_MIGRATIONS = [
|
|
|
8032
7940
|
{ legacy: ["storage", "deploy"], replacement: "ornn volume-mounts attach" },
|
|
8033
7941
|
{ legacy: ["storage", "status"], replacement: "ornn volume-mounts show" },
|
|
8034
7942
|
{ legacy: ["storage", "detach"], replacement: "ornn volume-mounts detach" },
|
|
8035
|
-
{ legacy: ["storage", "filesystem"], replacement: "ornn filesystems show" },
|
|
8036
|
-
{ legacy: ["storage", "filesystem", "deploy"], replacement: "ornn filesystems deploy" },
|
|
8037
|
-
{ legacy: ["storage", "filesystem", "status"], replacement: "ornn filesystems show" },
|
|
8038
|
-
{ legacy: ["storage", "filesystem", "delete"], replacement: "ornn filesystems delete" },
|
|
8039
7943
|
{
|
|
8040
7944
|
legacy: ["billing", "summary"],
|
|
8041
7945
|
replacement: "ornn capacity-offers list (use the Ornn web app for commercial workflows)"
|