@serve.zone/interfaces 32.34.0 → 32.36.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/changelog.md +71 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/data/clusternode.d.ts +16 -2
- package/dist_ts/data/clusternode.js +11 -1
- package/dist_ts/data/deploymentlegacyimport.d.ts +92 -0
- package/dist_ts/data/deploymentlegacyimport.js +237 -0
- package/dist_ts/data/deploymentoperation.d.ts +63 -38
- package/dist_ts/data/deploymentoperation.js +12 -2
- package/dist_ts/data/deploymentpreflight.d.ts +42 -10
- package/dist_ts/data/deploymentpreflight.js +47 -10
- package/dist_ts/data/immutableimage.d.ts +26 -2
- package/dist_ts/data/immutableimage.js +12 -2
- package/dist_ts/data/index.d.ts +5 -0
- package/dist_ts/data/index.js +6 -1
- package/dist_ts/data/networknode.d.ts +16 -6
- package/dist_ts/data/networknode.js +1 -1
- package/dist_ts/data/runtimeassignmentexec.d.ts +110 -0
- package/dist_ts/data/runtimeassignmentexec.js +164 -0
- package/dist_ts/data/runtimeassignmentlogs.d.ts +121 -0
- package/dist_ts/data/runtimeassignmentlogs.js +139 -0
- package/dist_ts/data/runtimeassignmentstats.d.ts +60 -0
- package/dist_ts/data/runtimeassignmentstats.js +93 -0
- package/dist_ts/data/runtimelocalvolumearchive.d.ts +103 -0
- package/dist_ts/data/runtimelocalvolumearchive.js +111 -0
- package/dist_ts/data/user.d.ts +6 -1
- package/dist_ts/data/user.js +6 -1
- package/dist_ts/requests/runtimesession.d.ts +81 -0
- package/dist_ts/requests/service.d.ts +51 -0
- package/package.json +2 -2
- package/readme.md +109 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/data/clusternode.ts +17 -2
- package/ts/data/deploymentlegacyimport.ts +371 -0
- package/ts/data/deploymentoperation.ts +83 -39
- package/ts/data/deploymentpreflight.ts +86 -18
- package/ts/data/immutableimage.ts +42 -3
- package/ts/data/index.ts +5 -0
- package/ts/data/networknode.ts +12 -5
- package/ts/data/runtimeassignmentexec.ts +271 -0
- package/ts/data/runtimeassignmentlogs.ts +249 -0
- package/ts/data/runtimeassignmentstats.ts +149 -0
- package/ts/data/runtimelocalvolumearchive.ts +207 -0
- package/ts/data/user.ts +10 -0
- package/ts/requests/runtimesession.ts +102 -0
- package/ts/requests/service.ts +66 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { normalizeSha256Digest } from './immutableimage.js';
|
|
2
|
+
import { hasExactKeys, isPlainRecord } from '../private/dataproperties.js';
|
|
3
|
+
const identifierRegex = /^[A-Za-z0-9][A-Za-z0-9:._-]{0,199}$/;
|
|
4
|
+
/** An OCI tag, the mutable `latest` included: the source tag is whatever the legacy service ran. */
|
|
5
|
+
const ociTagRegex = /^[A-Za-z0-9_][A-Za-z0-9._-]{0,127}$/;
|
|
6
|
+
const registryHostRegex = /^[a-z0-9](?:[a-z0-9.-]{0,251}[a-z0-9])?(?::[0-9]{1,5})?$/;
|
|
7
|
+
const repositoryRegex = /^[a-z0-9]+(?:(?:[._]|__|-+)[a-z0-9]+)*(?:\/[a-z0-9]+(?:(?:[._]|__|-+)[a-z0-9]+)*)*$/;
|
|
8
|
+
const maximumManifestSize = 4 * 1024 * 1024;
|
|
9
|
+
const maximumReplicaCount = 64;
|
|
10
|
+
const legacyImagePlatformManifestMediaTypes = [
|
|
11
|
+
'application/vnd.oci.image.manifest.v1+json',
|
|
12
|
+
'application/vnd.docker.distribution.manifest.v2+json',
|
|
13
|
+
];
|
|
14
|
+
const legacyImageImportIndexMediaTypes = [
|
|
15
|
+
'application/vnd.oci.image.index.v1+json',
|
|
16
|
+
'application/vnd.docker.distribution.manifest.list.v2+json',
|
|
17
|
+
];
|
|
18
|
+
const legacyImagePlatforms = ['linux/amd64', 'linux/arm64'];
|
|
19
|
+
const isIdentifier = (valueArg) => (typeof valueArg === 'string' && identifierRegex.test(valueArg));
|
|
20
|
+
const isCanonicalDigest = (valueArg) => (typeof valueArg === 'string' && normalizeSha256Digest(valueArg) === valueArg);
|
|
21
|
+
const isPositiveSafeInteger = (valueArg, maximumArg) => (typeof valueArg === 'number'
|
|
22
|
+
&& Number.isSafeInteger(valueArg)
|
|
23
|
+
&& valueArg >= 1
|
|
24
|
+
&& valueArg <= maximumArg);
|
|
25
|
+
/** True when a media type names a single platform manifest rather than an index. */
|
|
26
|
+
export const isLegacyImagePlatformManifestMediaType = (valueArg) => (legacyImagePlatformManifestMediaTypes.some((mediaTypeArg) => mediaTypeArg === valueArg));
|
|
27
|
+
/** True when a media type names an index of either family. */
|
|
28
|
+
export const isLegacyImageImportIndexMediaType = (valueArg) => (legacyImageImportIndexMediaTypes.some((mediaTypeArg) => mediaTypeArg === valueArg));
|
|
29
|
+
export const validateLegacyImageImportReference = (referenceArg) => {
|
|
30
|
+
if (!isPlainRecord(referenceArg))
|
|
31
|
+
return ['legacyImport must be an object'];
|
|
32
|
+
const errors = [];
|
|
33
|
+
if (!hasExactKeys(referenceArg, ['legacyServiceId', 'attestationId', 'sourceRootDigest'])) {
|
|
34
|
+
errors.push('legacyImport must use its exact schema');
|
|
35
|
+
}
|
|
36
|
+
if (!isIdentifier(referenceArg.legacyServiceId)) {
|
|
37
|
+
errors.push('legacyImport.legacyServiceId must be a bounded canonical identifier');
|
|
38
|
+
}
|
|
39
|
+
if (!isIdentifier(referenceArg.attestationId)) {
|
|
40
|
+
errors.push('legacyImport.attestationId must be a bounded canonical identifier');
|
|
41
|
+
}
|
|
42
|
+
if (!isCanonicalDigest(referenceArg.sourceRootDigest)) {
|
|
43
|
+
errors.push('legacyImport.sourceRootDigest must be a canonical sha256 digest');
|
|
44
|
+
}
|
|
45
|
+
return errors;
|
|
46
|
+
};
|
|
47
|
+
const validatePlatformManifest = (manifestArg, indexArg) => {
|
|
48
|
+
const label = `source.platforms[${indexArg}]`;
|
|
49
|
+
if (!isPlainRecord(manifestArg))
|
|
50
|
+
return [`${label} must be an object`];
|
|
51
|
+
const errors = [];
|
|
52
|
+
if (!hasExactKeys(manifestArg, [
|
|
53
|
+
'platform',
|
|
54
|
+
'manifestDigest',
|
|
55
|
+
'manifestMediaType',
|
|
56
|
+
'manifestSize',
|
|
57
|
+
'imageConfigDigest',
|
|
58
|
+
])) {
|
|
59
|
+
errors.push(`${label} must use its exact schema`);
|
|
60
|
+
}
|
|
61
|
+
if (!legacyImagePlatforms.some((platformArg) => platformArg === manifestArg.platform)) {
|
|
62
|
+
errors.push(`${label}.platform must be linux/amd64 or linux/arm64`);
|
|
63
|
+
}
|
|
64
|
+
if (!isCanonicalDigest(manifestArg.manifestDigest)) {
|
|
65
|
+
errors.push(`${label}.manifestDigest must be a canonical sha256 digest`);
|
|
66
|
+
}
|
|
67
|
+
if (!isLegacyImagePlatformManifestMediaType(manifestArg.manifestMediaType)) {
|
|
68
|
+
errors.push(`${label}.manifestMediaType must name an OCI or Docker image manifest`);
|
|
69
|
+
}
|
|
70
|
+
if (!isPositiveSafeInteger(manifestArg.manifestSize, maximumManifestSize)) {
|
|
71
|
+
errors.push(`${label}.manifestSize must be a positive bounded byte length`);
|
|
72
|
+
}
|
|
73
|
+
if (!isCanonicalDigest(manifestArg.imageConfigDigest)) {
|
|
74
|
+
errors.push(`${label}.imageConfigDigest must be a canonical sha256 digest`);
|
|
75
|
+
}
|
|
76
|
+
return errors;
|
|
77
|
+
};
|
|
78
|
+
const validateImageSource = (sourceArg) => {
|
|
79
|
+
if (!isPlainRecord(sourceArg))
|
|
80
|
+
return ['source must be an object'];
|
|
81
|
+
const errors = [];
|
|
82
|
+
if (!hasExactKeys(sourceArg, [
|
|
83
|
+
'registryHost',
|
|
84
|
+
'repository',
|
|
85
|
+
'tag',
|
|
86
|
+
'rootDigest',
|
|
87
|
+
'rootMediaType',
|
|
88
|
+
'platforms',
|
|
89
|
+
])) {
|
|
90
|
+
errors.push('source must use its exact schema');
|
|
91
|
+
}
|
|
92
|
+
if (typeof sourceArg.registryHost !== 'string' || !registryHostRegex.test(sourceArg.registryHost)) {
|
|
93
|
+
errors.push('source.registryHost must be a canonical registry host');
|
|
94
|
+
}
|
|
95
|
+
if (typeof sourceArg.repository !== 'string'
|
|
96
|
+
|| sourceArg.repository.length > 255
|
|
97
|
+
|| !repositoryRegex.test(sourceArg.repository)) {
|
|
98
|
+
errors.push('source.repository must be a canonical OCI repository name');
|
|
99
|
+
}
|
|
100
|
+
if (typeof sourceArg.tag !== 'string' || !ociTagRegex.test(sourceArg.tag)) {
|
|
101
|
+
errors.push('source.tag must be an OCI tag');
|
|
102
|
+
}
|
|
103
|
+
if (!isCanonicalDigest(sourceArg.rootDigest)) {
|
|
104
|
+
errors.push('source.rootDigest must be a canonical sha256 digest');
|
|
105
|
+
}
|
|
106
|
+
const rootIsManifest = isLegacyImagePlatformManifestMediaType(sourceArg.rootMediaType);
|
|
107
|
+
const rootIsIndex = isLegacyImageImportIndexMediaType(sourceArg.rootMediaType);
|
|
108
|
+
if (!rootIsManifest && !rootIsIndex) {
|
|
109
|
+
errors.push('source.rootMediaType must name an OCI or Docker manifest or index');
|
|
110
|
+
}
|
|
111
|
+
if (!Array.isArray(sourceArg.platforms)
|
|
112
|
+
|| sourceArg.platforms.length < 1
|
|
113
|
+
|| sourceArg.platforms.length > legacyImagePlatforms.length) {
|
|
114
|
+
errors.push('source.platforms must carry one or two runnable Linux platforms');
|
|
115
|
+
return errors;
|
|
116
|
+
}
|
|
117
|
+
const platforms = sourceArg.platforms;
|
|
118
|
+
platforms.forEach((manifestArg, indexArg) => {
|
|
119
|
+
errors.push(...validatePlatformManifest(manifestArg, indexArg));
|
|
120
|
+
});
|
|
121
|
+
const platformNames = platforms.map((manifestArg) => (isPlainRecord(manifestArg) ? manifestArg.platform : undefined));
|
|
122
|
+
const sortedPlatformNames = legacyImagePlatforms.filter((platformArg) => (platformNames.includes(platformArg)));
|
|
123
|
+
if (JSON.stringify(platformNames) !== JSON.stringify(sortedPlatformNames)) {
|
|
124
|
+
errors.push('source.platforms must be unique and sorted by platform');
|
|
125
|
+
}
|
|
126
|
+
if (rootIsManifest) {
|
|
127
|
+
const onlyPlatform = platforms[0];
|
|
128
|
+
if (platforms.length !== 1
|
|
129
|
+
|| !isPlainRecord(onlyPlatform)
|
|
130
|
+
|| onlyPlatform.manifestDigest !== sourceArg.rootDigest
|
|
131
|
+
|| onlyPlatform.manifestMediaType !== sourceArg.rootMediaType) {
|
|
132
|
+
errors.push('a single-manifest source root must be its own one platform manifest');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (rootIsIndex && platforms.some((manifestArg) => (isPlainRecord(manifestArg) && manifestArg.manifestDigest === sourceArg.rootDigest))) {
|
|
136
|
+
errors.push('an index source root cannot also be one of its platform manifests');
|
|
137
|
+
}
|
|
138
|
+
return errors;
|
|
139
|
+
};
|
|
140
|
+
const validateRuntime = (runtimeArg, rootDigestArg) => {
|
|
141
|
+
if (!isPlainRecord(runtimeArg))
|
|
142
|
+
return ['runtime must be an object'];
|
|
143
|
+
const errors = [];
|
|
144
|
+
if (!hasExactKeys(runtimeArg, [
|
|
145
|
+
'requiredReplicaCount',
|
|
146
|
+
'healthyReplicaCount',
|
|
147
|
+
'runtimeDigest',
|
|
148
|
+
'tasks',
|
|
149
|
+
])) {
|
|
150
|
+
errors.push('runtime must use its exact schema');
|
|
151
|
+
}
|
|
152
|
+
if (!isPositiveSafeInteger(runtimeArg.requiredReplicaCount, maximumReplicaCount)) {
|
|
153
|
+
errors.push('runtime.requiredReplicaCount must be a positive bounded replica count');
|
|
154
|
+
}
|
|
155
|
+
if (runtimeArg.healthyReplicaCount !== runtimeArg.requiredReplicaCount) {
|
|
156
|
+
errors.push('runtime.healthyReplicaCount must equal the required replica count');
|
|
157
|
+
}
|
|
158
|
+
if (!isCanonicalDigest(runtimeArg.runtimeDigest)) {
|
|
159
|
+
errors.push('runtime.runtimeDigest must be a canonical sha256 digest');
|
|
160
|
+
}
|
|
161
|
+
else if (runtimeArg.runtimeDigest !== rootDigestArg) {
|
|
162
|
+
errors.push('runtime.runtimeDigest must be the attested source root digest');
|
|
163
|
+
}
|
|
164
|
+
if (!Array.isArray(runtimeArg.tasks) || runtimeArg.tasks.length !== runtimeArg.requiredReplicaCount) {
|
|
165
|
+
errors.push('runtime.tasks must hold exactly one task per required replica');
|
|
166
|
+
return errors;
|
|
167
|
+
}
|
|
168
|
+
const tasks = runtimeArg.tasks;
|
|
169
|
+
tasks.forEach((taskArg, indexArg) => {
|
|
170
|
+
const label = `runtime.tasks[${indexArg}]`;
|
|
171
|
+
if (!isPlainRecord(taskArg)) {
|
|
172
|
+
errors.push(`${label} must be an object`);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
if (!hasExactKeys(taskArg, ['deploymentId', 'nodeName', 'observedDigest'])) {
|
|
176
|
+
errors.push(`${label} must use its exact schema`);
|
|
177
|
+
}
|
|
178
|
+
if (!isIdentifier(taskArg.deploymentId)) {
|
|
179
|
+
errors.push(`${label}.deploymentId must be a bounded canonical identifier`);
|
|
180
|
+
}
|
|
181
|
+
if (typeof taskArg.nodeName !== 'string' || !taskArg.nodeName || taskArg.nodeName.length > 253) {
|
|
182
|
+
errors.push(`${label}.nodeName must be a bounded non-empty name`);
|
|
183
|
+
}
|
|
184
|
+
if (taskArg.observedDigest !== runtimeArg.runtimeDigest) {
|
|
185
|
+
errors.push(`${label}.observedDigest must be the attested runtime digest`);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
const deploymentIds = tasks.map((taskArg) => (isPlainRecord(taskArg) ? taskArg.deploymentId : undefined));
|
|
189
|
+
const sortedDeploymentIds = deploymentIds
|
|
190
|
+
.filter((idArg) => typeof idArg === 'string')
|
|
191
|
+
.sort();
|
|
192
|
+
if (new Set(deploymentIds).size !== deploymentIds.length
|
|
193
|
+
|| JSON.stringify(deploymentIds) !== JSON.stringify(sortedDeploymentIds)) {
|
|
194
|
+
errors.push('runtime.tasks must be unique and sorted by deploymentId');
|
|
195
|
+
}
|
|
196
|
+
return errors;
|
|
197
|
+
};
|
|
198
|
+
export const validateLegacyServiceRuntimeAttestation = (attestationArg) => {
|
|
199
|
+
if (!isPlainRecord(attestationArg))
|
|
200
|
+
return ['attestation must be an object'];
|
|
201
|
+
const errors = [];
|
|
202
|
+
if (!hasExactKeys(attestationArg, ['id', 'data'])) {
|
|
203
|
+
errors.push('attestation must use its exact schema');
|
|
204
|
+
}
|
|
205
|
+
if (!isIdentifier(attestationArg.id)) {
|
|
206
|
+
errors.push('id must be a bounded canonical identifier');
|
|
207
|
+
}
|
|
208
|
+
const data = attestationArg.data;
|
|
209
|
+
if (!isPlainRecord(data))
|
|
210
|
+
return [...errors, 'data must be an object'];
|
|
211
|
+
if (!hasExactKeys(data, [
|
|
212
|
+
'legacyServiceId',
|
|
213
|
+
'organizationId',
|
|
214
|
+
'source',
|
|
215
|
+
'runtime',
|
|
216
|
+
'capturedByUserId',
|
|
217
|
+
'capturedAt',
|
|
218
|
+
])) {
|
|
219
|
+
errors.push('data must use its exact schema');
|
|
220
|
+
}
|
|
221
|
+
if (!isIdentifier(data.legacyServiceId)) {
|
|
222
|
+
errors.push('legacyServiceId must be a bounded canonical identifier');
|
|
223
|
+
}
|
|
224
|
+
if (!isIdentifier(data.organizationId)) {
|
|
225
|
+
errors.push('organizationId must be a bounded canonical identifier');
|
|
226
|
+
}
|
|
227
|
+
if (!isIdentifier(data.capturedByUserId)) {
|
|
228
|
+
errors.push('capturedByUserId must be a bounded canonical identifier');
|
|
229
|
+
}
|
|
230
|
+
if (!isPositiveSafeInteger(data.capturedAt, Number.MAX_SAFE_INTEGER)) {
|
|
231
|
+
errors.push('capturedAt must be a positive timestamp');
|
|
232
|
+
}
|
|
233
|
+
errors.push(...validateImageSource(data.source));
|
|
234
|
+
errors.push(...validateRuntime(data.runtime, isPlainRecord(data.source) ? data.source.rootDigest : undefined));
|
|
235
|
+
return errors;
|
|
236
|
+
};
|
|
237
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudGxlZ2FjeWltcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2RhdGEvZGVwbG95bWVudGxlZ2FjeWltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBbUczRSxNQUFNLGVBQWUsR0FBRyxxQ0FBcUMsQ0FBQztBQUM5RCxvR0FBb0c7QUFDcEcsTUFBTSxXQUFXLEdBQUcscUNBQXFDLENBQUM7QUFDMUQsTUFBTSxpQkFBaUIsR0FBRywwREFBMEQsQ0FBQztBQUNyRixNQUFNLGVBQWUsR0FBRyxxRkFBcUYsQ0FBQztBQUM5RyxNQUFNLG1CQUFtQixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzVDLE1BQU0sbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBRS9CLE1BQU0scUNBQXFDLEdBQXFEO0lBQzlGLDRDQUE0QztJQUM1QyxzREFBc0Q7Q0FDdkQsQ0FBQztBQUNGLE1BQU0sZ0NBQWdDLEdBQWdEO0lBQ3BGLHlDQUF5QztJQUN6QywyREFBMkQ7Q0FDNUQsQ0FBQztBQUNGLE1BQU0sb0JBQW9CLEdBQTJDLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRXBHLE1BQU0sWUFBWSxHQUFHLENBQUMsUUFBaUIsRUFBc0IsRUFBRSxDQUFDLENBQzlELE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUMvRCxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFFBQWlCLEVBQTZCLEVBQUUsQ0FBQyxDQUMxRSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUkscUJBQXFCLENBQUMsUUFBUSxDQUFDLEtBQUssUUFBUSxDQUM3RSxDQUFDO0FBRUYsTUFBTSxx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
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { IDeploymentPreflightProposedConfiguration, IDeploymentPreflightRuntimeTask } from './deploymentpreflight.js';
|
|
2
2
|
import type { IGatewayRouteDnsResult } from './gateway.js';
|
|
3
3
|
import type { IImageRolloutStatus, IImmutableImageDeploymentPlan, TSha256Digest } from './immutableimage.js';
|
|
4
|
+
import type { ILegacyImageImportReference } from './deploymentlegacyimport.js';
|
|
4
5
|
import type { IRegistryTarget } from './registry.js';
|
|
5
6
|
import type { TServiceTargetPortRef } from './serviceports.js';
|
|
6
7
|
export type TDeploymentOperationMode = 'existing-service' | 'greenfield';
|
|
@@ -9,24 +10,42 @@ interface IDeploymentReservationInputBase {
|
|
|
9
10
|
organizationId: string;
|
|
10
11
|
serviceId: string;
|
|
11
12
|
idempotencyKey: string;
|
|
12
|
-
sourceRevision: string;
|
|
13
13
|
version: string;
|
|
14
14
|
intentDigest: TSha256Digest;
|
|
15
15
|
proposedConfiguration: IDeploymentPreflightProposedConfiguration;
|
|
16
16
|
releaseTag: string;
|
|
17
17
|
routes: IDeploymentRouteRequest[];
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
/** A deployment whose image its deployer builds and pushes from one source revision. */
|
|
20
|
+
interface ISourceDeploymentOrigin {
|
|
21
|
+
sourceRevision: string;
|
|
22
|
+
legacyImport?: never;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A greenfield deployment whose image Cloudly imports from an attested legacy service instead:
|
|
26
|
+
* there is no source revision, so none is stated.
|
|
27
|
+
*/
|
|
28
|
+
interface ILegacyImportDeploymentOrigin {
|
|
29
|
+
legacyImport: ILegacyImageImportReference;
|
|
30
|
+
sourceRevision?: never;
|
|
31
|
+
}
|
|
32
|
+
export interface IExistingServiceDeploymentReservationInput extends IDeploymentReservationInputBase, ISourceDeploymentOrigin {
|
|
20
33
|
mode: 'existing-service';
|
|
21
34
|
expectedRolloutGeneration: number;
|
|
22
35
|
expectedCurrentRolloutId?: string;
|
|
23
36
|
}
|
|
24
|
-
export interface IGreenfieldServiceDeploymentReservationInput extends IDeploymentReservationInputBase {
|
|
37
|
+
export interface IGreenfieldServiceDeploymentReservationInput extends IDeploymentReservationInputBase, ISourceDeploymentOrigin {
|
|
25
38
|
mode: 'greenfield';
|
|
26
39
|
expectedRolloutGeneration?: never;
|
|
27
40
|
expectedCurrentRolloutId?: never;
|
|
28
41
|
}
|
|
29
|
-
|
|
42
|
+
/** A greenfield successor slot whose image is a legacy service's attested image. */
|
|
43
|
+
export interface ILegacyImportServiceDeploymentReservationInput extends IDeploymentReservationInputBase, ILegacyImportDeploymentOrigin {
|
|
44
|
+
mode: 'greenfield';
|
|
45
|
+
expectedRolloutGeneration?: never;
|
|
46
|
+
expectedCurrentRolloutId?: never;
|
|
47
|
+
}
|
|
48
|
+
export type IDeploymentReservationInput = IExistingServiceDeploymentReservationInput | IGreenfieldServiceDeploymentReservationInput | ILegacyImportServiceDeploymentReservationInput;
|
|
30
49
|
export type TDeploymentOperationState = 'reserving' | 'reserved' | 'provisioning' | 'awaiting-image' | 'image-recorded' | 'promoting-image' | 'rolling-out' | 'ready-for-route' | 'promoting-route' | 'verifying-route' | 'succeeded' | 'rolling-back' | 'rolled-back' | 'failed' | 'cleaning' | 'cleaned';
|
|
31
50
|
export interface IDeploymentRouteRequest {
|
|
32
51
|
hostname: string;
|
|
@@ -107,40 +126,46 @@ export interface IDeploymentOperationFailure {
|
|
|
107
126
|
export interface IServiceDeploymentOperation {
|
|
108
127
|
id: string;
|
|
109
128
|
revision: number;
|
|
110
|
-
data:
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
129
|
+
data: IServiceDeploymentOperationData;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* An operation's durable state. It states where its image comes from exactly as its reservation
|
|
133
|
+
* did: a `sourceRevision` for an image its deployer builds, or a `legacyImport` (greenfield only)
|
|
134
|
+
* for a legacy service's attested image Cloudly imports.
|
|
135
|
+
*/
|
|
136
|
+
export type IServiceDeploymentOperationData = IServiceDeploymentOperationStateData & (ISourceDeploymentOrigin | ILegacyImportDeploymentOrigin);
|
|
137
|
+
interface IServiceDeploymentOperationStateData {
|
|
138
|
+
mode: TDeploymentOperationMode;
|
|
139
|
+
organizationId: string;
|
|
140
|
+
serviceId: string;
|
|
141
|
+
actorUserId: string;
|
|
142
|
+
idempotencyKey: string;
|
|
143
|
+
requestDigest: TSha256Digest;
|
|
144
|
+
version: string;
|
|
145
|
+
intentDigest: TSha256Digest;
|
|
146
|
+
configurationDigest: TSha256Digest;
|
|
147
|
+
proposedConfiguration: IDeploymentPreflightProposedConfiguration;
|
|
148
|
+
namespace: string;
|
|
149
|
+
registryTarget: IRegistryTarget;
|
|
150
|
+
releaseTag: string;
|
|
151
|
+
routes: IDeploymentRouteRequest[];
|
|
152
|
+
claimKeys: string[];
|
|
153
|
+
state: TDeploymentOperationState;
|
|
154
|
+
releaseId?: string;
|
|
155
|
+
registryRootDigest?: TSha256Digest;
|
|
156
|
+
rolloutId?: string;
|
|
157
|
+
rolloutGeneration?: number;
|
|
158
|
+
routeGeneration?: number;
|
|
159
|
+
routeVerification?: IDeploymentRouteVerificationEvidence[];
|
|
160
|
+
/**
|
|
161
|
+
* Most recent failure record. Set when the operation fails and retained
|
|
162
|
+
* as audit history through 'cleaning' and 'cleaned'; cleared only by a
|
|
163
|
+
* forward transition such as a successful retry. A populated failure does
|
|
164
|
+
* therefore NOT imply state === 'failed'.
|
|
165
|
+
*/
|
|
166
|
+
failure?: IDeploymentOperationFailure;
|
|
167
|
+
createdAt: number;
|
|
168
|
+
updatedAt: number;
|
|
144
169
|
}
|
|
145
170
|
export interface IServiceDeploymentStatus {
|
|
146
171
|
operation: IServiceDeploymentOperation;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { normalizeImmutableReleaseTag, normalizeSha256Digest } from './immutableimage.js';
|
|
2
|
+
import { validateLegacyImageImportReference } from './deploymentlegacyimport.js';
|
|
2
3
|
import { hasExactKeys } from '../private/dataproperties.js';
|
|
3
4
|
import { normalizeServiceAbsolutePath, validateServiceContainerArgs } from './service.js';
|
|
4
5
|
const canonicalHostnameRegex = /^(?:\*\.)?[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/;
|
|
@@ -144,7 +145,16 @@ export const validateDeploymentReservationInput = (inputArg) => {
|
|
|
144
145
|
errors.push(`${field} must be a bounded canonical identifier`);
|
|
145
146
|
}
|
|
146
147
|
}
|
|
147
|
-
if (
|
|
148
|
+
if (inputArg.legacyImport !== undefined) {
|
|
149
|
+
errors.push(...validateLegacyImageImportReference(inputArg.legacyImport));
|
|
150
|
+
if (inputArg.mode !== 'greenfield') {
|
|
151
|
+
errors.push('a legacy import reserves a greenfield successor');
|
|
152
|
+
}
|
|
153
|
+
if (inputArg.sourceRevision !== undefined) {
|
|
154
|
+
errors.push('a legacy import has no source revision');
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else if (typeof inputArg.sourceRevision !== 'string'
|
|
148
158
|
|| !fullGitRevisionRegex.test(inputArg.sourceRevision)) {
|
|
149
159
|
errors.push('sourceRevision must be a full lowercase git revision');
|
|
150
160
|
}
|
|
@@ -228,4 +238,4 @@ export const validateDeploymentReservationInput = (inputArg) => {
|
|
|
228
238
|
}
|
|
229
239
|
return errors;
|
|
230
240
|
};
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudG9wZXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2RhdGEvZGVwbG95bWVudG9wZXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBdUUxRixNQUFNLHNCQUFzQixHQUFHLDRGQUE0RixDQUFDO0FBRTVILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLENBQUMsV0FBb0IsRUFBc0IsRUFBRTtJQUN6RixJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN0RCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDcEUsQ0FBQyxDQUFDLFFBQVE7UUFDVixDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQzNDLFdBQW1CLEVBQ3NCLEVBQUU7SUFDM0MsTUFBTSxRQUFRLEdBQUcsOEJBQThCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0QsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNoQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUFHLENBQUMs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
|
|
241
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95bWVudG9wZXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2RhdGEvZGVwbG95bWVudG9wZXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUUxRixPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLDRCQUE0QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBOEYxRixNQUFNLHNCQUFzQixHQUFHLDRGQUE0RixDQUFDO0FBRTVILE1BQU0sQ0FBQyxNQUFNLDhCQUE4QixHQUFHLENBQUMsV0FBb0IsRUFBc0IsRUFBRTtJQUN6RixJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUN0RCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLElBQUksR0FBRyxJQUFJLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDcEUsQ0FBQyxDQUFDLFFBQVE7UUFDVixDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQzNDLFdBQW1CLEVBQ3NCLEVBQUU7SUFDM0MsTUFBTSxRQUFRLEdBQUcsOEJBQThCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDN0QsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNoQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVSxD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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { TImmutableContainerPlatform, TOciManifestMediaType, TSha256Digest } from './immutableimage.js';
|
|
2
2
|
import type { TServiceDeploymentCapability } from './user.js';
|
|
3
|
+
import type { ILegacyImageImportReference } from './deploymentlegacyimport.js';
|
|
3
4
|
import { type IProtocolOffer } from '../protocol.js';
|
|
4
5
|
import type { IDeploymentRouteRequest, IServiceDeploymentOperation, TDeploymentOperationMode, TDeploymentOperationPhase } from './deploymentoperation.js';
|
|
5
6
|
export type TDeploymentPreflightDecision = 'GO' | 'NO-GO';
|
|
@@ -8,13 +9,13 @@ export type TDeploymentPreflightDecision = 'GO' | 'NO-GO';
|
|
|
8
9
|
* judges a report's blockers reads the vocabulary from the contract instead of restating a list
|
|
9
10
|
* the contract could later disagree with.
|
|
10
11
|
*/
|
|
11
|
-
export declare const deploymentPreflightBlockerCodes: readonly ["INVALID_REQUEST", "AUTHORIZATION_MISSING", "DEPLOYMENT_MACHINE_IDENTITY_REQUIRED", "ORGANIZATION_SCOPE_MISSING", "SERVICE_OWNERSHIP_MISMATCH", "DEPLOYMENT_OPERATION_NOT_FOUND", "DEPLOYMENT_OPERATION_CONFLICT", "DEPLOY_ON_PUSH_MUST_BE_DISABLED", "REGISTRY_AUTHENTICATION_UNAVAILABLE", "REGISTRY_REPOSITORY_MISMATCH", "REGISTRY_TAG_CONFLICT", "SOURCE_REVISION_INVALID", "SOURCE_WORKTREE_DIRTY", "VERSION_NOT_RESERVED", "VERSION_COLLISION", "NAMESPACE_NOT_RESERVED", "NAMESPACE_COLLISION", "NAMESPACE_NOT_PROVEN_BLANK", "CONFIGURATION_DIGEST_INVALID", "INTENT_DIGEST_INVALID", "PROPOSED_CONFIGURATION_INCOMPLETE", "CURRENT_REFERENCE_MUTABLE", "CURRENT_RUNTIME_DIGEST_MISSING", "OCI_INDEX_DIGEST_REQUIRED", "OCI_INDEX_NOT_FOUND", "OCI_INDEX_MEDIA_TYPE_REQUIRED", "OCI_PLATFORM_MISSING", "OCI_PLATFORM_MANIFEST_MISSING", "IMMUTABLE_RELEASE_TAG_REQUIRED", "IMMUTABLE_RELEASE_TAG_NOT_RESERVED", "RELEASE_EVIDENCE_MISSING", "RELEASE_EVIDENCE_INVALID", "RELEASE_EVIDENCE_AMBIGUOUS", "RELEASE_NOT_AUTHORIZED", "GREENFIELD_EXECUTION_UNAVAILABLE", "ROUTE_PROMOTION_FENCE_UNAVAILABLE", "POST_DEPLOYMENT_VERIFICATION_UNAVAILABLE", "WOULD_REPLACE_EXISTING_STATE", "PLATFORM_CAPABILITY_UNAVAILABLE", "CORESTORE_INVENTORY_UNAVAILABLE", "RUNTIME_ATTESTATION_MISMATCH", "ROLLOUT_ACTIVE_CONFLICT", "ROLLOUT_NOT_SUCCEEDED", "ROUTE_UNAVAILABLE", "RELAY_NAME_RESERVED", "ROUTE_VERIFICATION_FAILED", "TLS_VERIFICATION_FAILED"];
|
|
12
|
+
export declare const deploymentPreflightBlockerCodes: readonly ["INVALID_REQUEST", "AUTHORIZATION_MISSING", "DEPLOYMENT_MACHINE_IDENTITY_REQUIRED", "ORGANIZATION_SCOPE_MISSING", "SERVICE_OWNERSHIP_MISMATCH", "DEPLOYMENT_OPERATION_NOT_FOUND", "DEPLOYMENT_OPERATION_CONFLICT", "DEPLOY_ON_PUSH_MUST_BE_DISABLED", "REGISTRY_AUTHENTICATION_UNAVAILABLE", "REGISTRY_REPOSITORY_MISMATCH", "REGISTRY_TAG_CONFLICT", "SOURCE_REVISION_INVALID", "SOURCE_WORKTREE_DIRTY", "VERSION_NOT_RESERVED", "VERSION_COLLISION", "NAMESPACE_NOT_RESERVED", "NAMESPACE_COLLISION", "NAMESPACE_NOT_PROVEN_BLANK", "CONFIGURATION_DIGEST_INVALID", "INTENT_DIGEST_INVALID", "PROPOSED_CONFIGURATION_INCOMPLETE", "CURRENT_REFERENCE_MUTABLE", "CURRENT_RUNTIME_DIGEST_MISSING", "OCI_INDEX_DIGEST_REQUIRED", "OCI_INDEX_NOT_FOUND", "OCI_INDEX_MEDIA_TYPE_REQUIRED", "OCI_PLATFORM_MISSING", "OCI_PLATFORM_MANIFEST_MISSING", "IMMUTABLE_RELEASE_TAG_REQUIRED", "IMMUTABLE_RELEASE_TAG_NOT_RESERVED", "RELEASE_EVIDENCE_MISSING", "RELEASE_EVIDENCE_INVALID", "RELEASE_EVIDENCE_AMBIGUOUS", "RELEASE_NOT_AUTHORIZED", "GREENFIELD_EXECUTION_UNAVAILABLE", "ROUTE_PROMOTION_FENCE_UNAVAILABLE", "POST_DEPLOYMENT_VERIFICATION_UNAVAILABLE", "WOULD_REPLACE_EXISTING_STATE", "PLATFORM_CAPABILITY_UNAVAILABLE", "CORESTORE_INVENTORY_UNAVAILABLE", "RUNTIME_ATTESTATION_MISMATCH", "ROLLOUT_ACTIVE_CONFLICT", "ROLLOUT_NOT_SUCCEEDED", "ROUTE_UNAVAILABLE", "RELAY_NAME_RESERVED", "ROUTE_VERIFICATION_FAILED", "TLS_VERIFICATION_FAILED", "LEGACY_IMPORT_ATTESTATION_MISSING", "LEGACY_IMPORT_SOURCE_MISMATCH", "LEGACY_IMPORT_PLATFORM_MISMATCH"];
|
|
12
13
|
export type TDeploymentPreflightBlockerCode = typeof deploymentPreflightBlockerCodes[number];
|
|
13
14
|
export interface IDeploymentPreflightBlocker {
|
|
14
15
|
code: TDeploymentPreflightBlockerCode;
|
|
15
16
|
message: string;
|
|
16
17
|
}
|
|
17
|
-
export type TDeploymentPreflightWarningCode = 'RECOVERY_REDEPLOY_OVER_FAILED_RUNTIME';
|
|
18
|
+
export type TDeploymentPreflightWarningCode = 'RECOVERY_REDEPLOY_OVER_FAILED_RUNTIME' | 'PLATFORM_BINDING_READINESS_DEFERRED';
|
|
18
19
|
/**
|
|
19
20
|
* Auditable non-blocking preflight finding. Warnings never veto a decision.
|
|
20
21
|
* `RECOVERY_REDEPLOY_OVER_FAILED_RUNTIME` documents that an existing-service
|
|
@@ -22,7 +23,16 @@ export type TDeploymentPreflightWarningCode = 'RECOVERY_REDEPLOY_OVER_FAILED_RUN
|
|
|
22
23
|
* RUNTIME_ATTESTATION_MISMATCH blockers because the current runtime provides
|
|
23
24
|
* no consistent attested digest and the service's most recent deployment
|
|
24
25
|
* operation ended 'failed' or 'cleaned' (a recovery redeploy over a known-bad
|
|
25
|
-
* runtime).
|
|
26
|
+
* runtime).
|
|
27
|
+
* `PLATFORM_BINDING_READINESS_DEFERRED` documents that the promote preflight
|
|
28
|
+
* of a held greenfield service that was never promoted accepted a Corestore
|
|
29
|
+
* `database` or `objectstorage` binding that is enabled but not yet `ready`.
|
|
30
|
+
* A held service receives no credential material, so its binding can become
|
|
31
|
+
* ready only after promotion releases the hold; for a binding that adopts a
|
|
32
|
+
* legacy resource the Corestore inventory proved the resource authorized for
|
|
33
|
+
* exactly that binding. The route preflight still requires the binding
|
|
34
|
+
* `ready`, so no traffic reaches the service before its binding is.
|
|
35
|
+
* No other blocker is ever relaxed.
|
|
26
36
|
*/
|
|
27
37
|
export interface IDeploymentPreflightWarning {
|
|
28
38
|
code: TDeploymentPreflightWarningCode;
|
|
@@ -102,21 +112,35 @@ export interface IDeploymentReleaseEvidence {
|
|
|
102
112
|
releaseAuthorized: boolean;
|
|
103
113
|
attestations: IDeploymentReleaseEvidenceReference[];
|
|
104
114
|
}
|
|
105
|
-
|
|
115
|
+
/**
|
|
116
|
+
* A preflight states where the deployment's image comes from, exactly as its reservation will:
|
|
117
|
+
* a clean source revision with its release evidence, or — for a greenfield successor only — a
|
|
118
|
+
* legacy import naming an attested legacy image, which has no revision, worktree or build
|
|
119
|
+
* evidence to state.
|
|
120
|
+
*/
|
|
121
|
+
export type IDeploymentPreflightRequestData = IDeploymentPreflightRequestDataBase & ({
|
|
122
|
+
sourceRevision: string;
|
|
123
|
+
sourceDirty: boolean;
|
|
124
|
+
releaseEvidence?: IDeploymentReleaseEvidence;
|
|
125
|
+
legacyImport?: never;
|
|
126
|
+
} | {
|
|
127
|
+
legacyImport: ILegacyImageImportReference;
|
|
128
|
+
sourceRevision?: never;
|
|
129
|
+
sourceDirty?: never;
|
|
130
|
+
releaseEvidence?: never;
|
|
131
|
+
});
|
|
132
|
+
interface IDeploymentPreflightRequestDataBase {
|
|
106
133
|
requestId: string;
|
|
107
134
|
serviceId: string;
|
|
108
135
|
organizationId?: string;
|
|
109
136
|
mode?: TDeploymentOperationMode;
|
|
110
137
|
phase?: TDeploymentOperationPhase;
|
|
111
138
|
operationId?: string;
|
|
112
|
-
sourceRevision: string;
|
|
113
|
-
sourceDirty: boolean;
|
|
114
139
|
version: string;
|
|
115
140
|
intentDigest: string;
|
|
116
141
|
proposedConfiguration: IDeploymentPreflightProposedConfiguration;
|
|
117
142
|
ociIndexDigest?: string;
|
|
118
143
|
releaseTag?: string;
|
|
119
|
-
releaseEvidence?: IDeploymentReleaseEvidence;
|
|
120
144
|
routes?: IDeploymentRouteRequest[];
|
|
121
145
|
/** Legacy v14 discriminator. Equivalent to mode: 'greenfield'. */
|
|
122
146
|
greenfield?: true;
|
|
@@ -157,13 +181,20 @@ export interface IDeploymentPreflightReport {
|
|
|
157
181
|
mode?: TDeploymentOperationMode;
|
|
158
182
|
phase?: TDeploymentOperationPhase;
|
|
159
183
|
operation?: IServiceDeploymentOperation;
|
|
184
|
+
/** The request's image origin as judged: a source revision, or a legacy import. */
|
|
160
185
|
source: {
|
|
161
|
-
revision: string;
|
|
162
|
-
dirty: boolean;
|
|
163
186
|
version: string;
|
|
164
187
|
intentDigest: TSha256Digest;
|
|
165
188
|
configurationDigest: TSha256Digest;
|
|
166
|
-
}
|
|
189
|
+
} & ({
|
|
190
|
+
revision: string;
|
|
191
|
+
dirty: boolean;
|
|
192
|
+
legacyImport?: never;
|
|
193
|
+
} | {
|
|
194
|
+
legacyImport: ILegacyImageImportReference;
|
|
195
|
+
revision?: never;
|
|
196
|
+
dirty?: never;
|
|
197
|
+
});
|
|
167
198
|
currentImage: {
|
|
168
199
|
tag?: string;
|
|
169
200
|
digest?: TSha256Digest;
|
|
@@ -224,3 +255,4 @@ export declare const validateDeploymentReleaseEvidence: (argsArg: {
|
|
|
224
255
|
configurationDigest: TSha256Digest;
|
|
225
256
|
ociIndexDigest: TSha256Digest;
|
|
226
257
|
}) => IDeploymentPreflightBlocker[];
|
|
258
|
+
export {};
|