@namewta/speculo 1.0.4 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +1 -1
  2. package/dist/src/kernel.d.ts +23 -2
  3. package/dist/src/kernel.js +9 -0
  4. package/dist/src/kernel.js.map +1 -1
  5. package/dist/src/ops-resources.d.ts +3 -0
  6. package/dist/src/ops-resources.js +188 -0
  7. package/dist/src/ops-resources.js.map +1 -0
  8. package/dist/src/refresh.js +20 -2
  9. package/dist/src/refresh.js.map +1 -1
  10. package/dist/src/structured.js +8 -1
  11. package/dist/src/structured.js.map +1 -1
  12. package/dist/src/workflows.js +1 -1
  13. package/dist/src/workflows.js.map +1 -1
  14. package/package.json +1 -1
  15. package/template/.speculo/README.md +3 -3
  16. package/template/.speculo/kernel/README.md +3 -0
  17. package/template/.speculo/kernel/checkpoint.schema.json +138 -4
  18. package/template/commands/archive-and-consolidate.md +5 -1
  19. package/template/commands/status.md +2 -2
  20. package/template/workflows/ops/D-project-deploy/D-project-deploy.md +34 -0
  21. package/template/workflows/ops/H-host-manage/H-host-manage.md +30 -0
  22. package/template/workflows/ops/I-initialize/I-initialize.md +28 -0
  23. package/template/workflows/ops/INDEX.md +15 -17
  24. package/template/workflows/ops/README.md +59 -87
  25. package/template/workflows/ops/_state/status.json +15 -3
  26. package/template/workflows/ops/common/CAPABILITIES.md +23 -0
  27. package/template/workflows/ops/common/USAGE.md +112 -0
  28. package/template/workflows/ops/common/examples/README.md +7 -0
  29. package/template/workflows/ops/common/examples/binding.example.json +12 -0
  30. package/template/workflows/ops/common/examples/compose-app.example.json +56 -0
  31. package/template/workflows/ops/common/examples/credential.example.json +9 -0
  32. package/template/workflows/ops/common/examples/environment-request.example.json +7 -0
  33. package/template/workflows/ops/common/examples/register.example.json +44 -0
  34. package/template/workflows/ops/common/examples/shared-allocation.example.json +37 -0
  35. package/template/workflows/ops/common/rules/activation-and-memory.md +5 -20
  36. package/template/workflows/ops/common/rules/persistence-and-secrets.md +27 -0
  37. package/template/workflows/ops/common/rules/recovery.md +15 -0
  38. package/template/workflows/ops/common/rules/shared-services.md +13 -0
  39. package/template/workflows/ops/common/schemas/allocation.schema.json +92 -0
  40. package/template/workflows/ops/common/schemas/approval.schema.json +41 -21
  41. package/template/workflows/ops/common/schemas/binding.schema.json +73 -0
  42. package/template/workflows/ops/common/schemas/deployment.schema.json +244 -0
  43. package/template/workflows/ops/common/schemas/host.schema.json +88 -0
  44. package/template/workflows/ops/common/schemas/plan.schema.json +1573 -0
  45. package/template/workflows/ops/common/schemas/project.schema.json +55 -11
  46. package/template/workflows/ops/common/schemas/spec.schema.json +1032 -0
  47. package/template/workflows/ops/common/schemas/status.schema.json +758 -17
  48. package/template/workflows/ops/common/service-profiles/custom.md +5 -0
  49. package/template/workflows/ops/common/service-profiles/docker-engine.md +11 -0
  50. package/template/workflows/ops/common/service-profiles/minio.md +7 -0
  51. package/template/workflows/ops/common/service-profiles/mysql.md +7 -0
  52. package/template/workflows/ops/common/service-profiles/redis.md +7 -0
  53. package/template/workflows/ops/common/templates/CONTROLLER-RECORD.md +13 -0
  54. package/template/workflows/ops/common/templates/EXECUTION-PLAN.md +15 -0
  55. package/template/workflows/ops/common/templates/HOST-README.md +11 -0
  56. package/template/workflows/ops/common/templates/PROJECT-README.md +15 -0
  57. package/template/workflows/ops/common/tests/test_ops.py +392 -0
  58. package/template/workflows/ops/common/tools/bootstrap.ps1 +18 -0
  59. package/template/workflows/ops/common/tools/bootstrap.sh +27 -0
  60. package/template/workflows/ops/common/tools/demo-local.py +64 -0
  61. package/template/workflows/ops/common/tools/ops.py +7 -0
  62. package/template/workflows/ops/common/tools/opslib/__init__.py +2 -0
  63. package/template/workflows/ops/common/tools/opslib/__pycache__/__init__.cpython-312.pyc +0 -0
  64. package/template/workflows/ops/common/tools/opslib/__pycache__/core.cpython-312.pyc +0 -0
  65. package/template/workflows/ops/common/tools/opslib/__pycache__/model.cpython-312.pyc +0 -0
  66. package/template/workflows/ops/common/tools/opslib/agent.py +510 -0
  67. package/template/workflows/ops/common/tools/opslib/cli.py +172 -0
  68. package/template/workflows/ops/common/tools/opslib/core.py +199 -0
  69. package/template/workflows/ops/common/tools/opslib/docs.py +199 -0
  70. package/template/workflows/ops/common/tools/opslib/execution.py +248 -0
  71. package/template/workflows/ops/common/tools/opslib/host_recipes.py +67 -0
  72. package/template/workflows/ops/common/tools/opslib/model.py +199 -0
  73. package/template/workflows/ops/common/tools/opslib/native_windows.py +32 -0
  74. package/template/workflows/ops/common/tools/opslib/planner.py +497 -0
  75. package/template/workflows/ops/common/tools/opslib/services.py +47 -0
  76. package/template/workflows/ops/common/tools/opslib/sources.py +27 -0
  77. package/template/workflows/ops/common/tools/opslib/transport.py +55 -0
  78. package/template/workflows/ops/common/tools/validate-ops.mjs +32 -991
  79. package/template/workflows/ops/manifest.json +60 -1
  80. package/template/workflows/ops/runtime-contract.json +1 -6
  81. package/template/workflows/ops/A-archive-and-learn/A-archive-and-learn.md +0 -71
  82. package/template/workflows/ops/A-archive-and-learn/promotion-plan-template.md +0 -41
  83. package/template/workflows/ops/A-archive-and-learn/retrospective-template.md +0 -53
  84. package/template/workflows/ops/E-execute-and-stabilize/E-execute-and-stabilize.md +0 -82
  85. package/template/workflows/ops/E-execute-and-stabilize/attempt-summary-template.md +0 -44
  86. package/template/workflows/ops/E-execute-and-stabilize/diagnosis-template.md +0 -24
  87. package/template/workflows/ops/E-execute-and-stabilize/handoff-template.md +0 -32
  88. package/template/workflows/ops/E-execute-and-stabilize/rollback-template.md +0 -26
  89. package/template/workflows/ops/E-execute-and-stabilize/verification-state-template.json +0 -30
  90. package/template/workflows/ops/E-execute-and-stabilize/verification-template.md +0 -55
  91. package/template/workflows/ops/I-intake-and-assess/I-intake-and-assess.md +0 -73
  92. package/template/workflows/ops/I-intake-and-assess/change-status-template.json +0 -26
  93. package/template/workflows/ops/I-intake-and-assess/collector-catalog.md +0 -28
  94. package/template/workflows/ops/I-intake-and-assess/deployment-dossier-template.md +0 -62
  95. package/template/workflows/ops/I-intake-and-assess/global-change-status-template.json +0 -26
  96. package/template/workflows/ops/I-intake-and-assess/project-detection.md +0 -38
  97. package/template/workflows/ops/I-intake-and-assess/request-template.md +0 -44
  98. package/template/workflows/ops/I-intake-and-assess/system-report-template.md +0 -34
  99. package/template/workflows/ops/I-intake-and-assess/target-profile-template.json +0 -24
  100. package/template/workflows/ops/P-plan-and-approve/P-plan-and-approve.md +0 -72
  101. package/template/workflows/ops/P-plan-and-approve/plan-review-template.md +0 -78
  102. package/template/workflows/ops/_state/archive/.gitkeep +0 -1
  103. package/template/workflows/ops/_state/changes/.gitkeep +0 -1
  104. package/template/workflows/ops/common/rules/artifact-contract.md +0 -37
  105. package/template/workflows/ops/common/rules/closure-and-learning.md +0 -25
  106. package/template/workflows/ops/common/rules/evidence-and-redaction.md +0 -22
  107. package/template/workflows/ops/common/rules/execution-loop.md +0 -27
  108. package/template/workflows/ops/common/rules/path-and-scope-contract.md +0 -21
  109. package/template/workflows/ops/common/rules/plan-and-approval.md +0 -25
  110. package/template/workflows/ops/common/rules/project-and-change-scope.md +0 -20
  111. package/template/workflows/ops/common/rules/target-profile-and-release-gates.md +0 -44
  112. package/template/workflows/ops/common/schemas/attempt.schema.json +0 -42
  113. package/template/workflows/ops/common/schemas/change-status.schema.json +0 -43
  114. package/template/workflows/ops/common/schemas/deployment-model.schema.json +0 -26
  115. package/template/workflows/ops/common/schemas/implementation-plan.schema.json +0 -221
  116. package/template/workflows/ops/common/schemas/inventory-snapshot.schema.json +0 -31
  117. package/template/workflows/ops/common/schemas/journal-event.schema.json +0 -22
  118. package/template/workflows/ops/common/schemas/promotion-approval.schema.json +0 -20
  119. package/template/workflows/ops/common/schemas/promotion-manifest.schema.json +0 -22
  120. package/template/workflows/ops/common/schemas/target-profile.schema.json +0 -32
  121. package/template/workflows/ops/common/schemas/verification-state.schema.json +0 -30
  122. package/template/workflows/ops/common/tools/close-change.mjs +0 -177
@@ -0,0 +1,1573 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:speculo:ops:plan:v1",
4
+ "type": "object",
5
+ "properties": {
6
+ "schema_version": {
7
+ "const": 1
8
+ },
9
+ "artifact": {
10
+ "const": "ops-resource-plan"
11
+ },
12
+ "run_id": {
13
+ "type": "string",
14
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
15
+ "maxLength": 80
16
+ },
17
+ "worker": {
18
+ "enum": [
19
+ "I",
20
+ "H",
21
+ "D"
22
+ ]
23
+ },
24
+ "operation": {
25
+ "type": "string",
26
+ "minLength": 1
27
+ },
28
+ "reason": {
29
+ "type": "string",
30
+ "minLength": 1
31
+ },
32
+ "created_at": {
33
+ "type": "string",
34
+ "minLength": 1
35
+ },
36
+ "expires_at": {
37
+ "type": "string",
38
+ "minLength": 1
39
+ },
40
+ "controller_id": {
41
+ "type": "string",
42
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
43
+ "maxLength": 80
44
+ },
45
+ "registry_digest": {
46
+ "type": "string",
47
+ "minLength": 1
48
+ },
49
+ "registry_revision": {
50
+ "type": "integer"
51
+ },
52
+ "hosts": {
53
+ "type": "object",
54
+ "propertyNames": {
55
+ "type": "string",
56
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
57
+ "maxLength": 80
58
+ },
59
+ "additionalProperties": {
60
+ "type": "object",
61
+ "properties": {
62
+ "host_id": {
63
+ "type": "string",
64
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
65
+ "maxLength": 80
66
+ },
67
+ "display_name": {
68
+ "type": "string",
69
+ "minLength": 1
70
+ },
71
+ "platform": {
72
+ "enum": [
73
+ "linux",
74
+ "windows",
75
+ "darwin"
76
+ ]
77
+ },
78
+ "transport": {
79
+ "enum": [
80
+ "local",
81
+ "ssh"
82
+ ]
83
+ },
84
+ "root": {
85
+ "type": "string",
86
+ "minLength": 1
87
+ },
88
+ "identity": {
89
+ "type": "string",
90
+ "pattern": "^[a-f0-9]{64}$"
91
+ },
92
+ "connection": {
93
+ "type": "object",
94
+ "properties": {
95
+ "hostname": {
96
+ "type": "string",
97
+ "minLength": 1
98
+ },
99
+ "username": {
100
+ "type": "string",
101
+ "minLength": 1
102
+ },
103
+ "port": {
104
+ "type": "integer",
105
+ "minimum": 1,
106
+ "maximum": 65535
107
+ },
108
+ "known_hosts": {
109
+ "type": "string",
110
+ "minLength": 1
111
+ },
112
+ "identity_file": {
113
+ "type": "string",
114
+ "minLength": 1
115
+ },
116
+ "python": {
117
+ "type": "string",
118
+ "minLength": 1
119
+ },
120
+ "sudo": {
121
+ "type": "boolean"
122
+ },
123
+ "shell": {
124
+ "enum": [
125
+ "posix",
126
+ "powershell"
127
+ ]
128
+ }
129
+ },
130
+ "required": [],
131
+ "additionalProperties": false
132
+ }
133
+ },
134
+ "required": [
135
+ "host_id",
136
+ "display_name",
137
+ "platform",
138
+ "transport",
139
+ "root",
140
+ "identity",
141
+ "connection"
142
+ ],
143
+ "additionalProperties": false
144
+ }
145
+ },
146
+ "transport_digests": {
147
+ "type": "object",
148
+ "propertyNames": {
149
+ "type": "string",
150
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
151
+ "maxLength": 80
152
+ },
153
+ "additionalProperties": {
154
+ "type": "string",
155
+ "minLength": 1
156
+ }
157
+ },
158
+ "inventories": {
159
+ "type": "object"
160
+ },
161
+ "engine_digest": {
162
+ "type": "string",
163
+ "minLength": 1
164
+ },
165
+ "document_preconditions": {
166
+ "type": "object"
167
+ },
168
+ "operations": {
169
+ "type": "array",
170
+ "items": {
171
+ "type": "object"
172
+ }
173
+ },
174
+ "registry_after": {
175
+ "type": "object",
176
+ "properties": {
177
+ "schema_version": {
178
+ "const": 3
179
+ },
180
+ "workflow": {
181
+ "const": "ops"
182
+ },
183
+ "revision": {
184
+ "type": "integer",
185
+ "minimum": 0
186
+ },
187
+ "controller": {
188
+ "oneOf": [
189
+ {
190
+ "type": "object",
191
+ "properties": {
192
+ "controller_id": {
193
+ "type": "string",
194
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
195
+ "maxLength": 80
196
+ },
197
+ "state_root": {
198
+ "type": "string",
199
+ "minLength": 1
200
+ },
201
+ "created_at": {
202
+ "type": "string",
203
+ "minLength": 1
204
+ }
205
+ },
206
+ "required": [
207
+ "controller_id",
208
+ "state_root",
209
+ "created_at"
210
+ ],
211
+ "additionalProperties": false
212
+ },
213
+ {
214
+ "type": "null"
215
+ }
216
+ ]
217
+ },
218
+ "hosts": {
219
+ "type": "object",
220
+ "propertyNames": {
221
+ "type": "string",
222
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
223
+ "maxLength": 80
224
+ },
225
+ "additionalProperties": {
226
+ "$ref": "#/$defs/host"
227
+ }
228
+ },
229
+ "projects": {
230
+ "type": "object",
231
+ "propertyNames": {
232
+ "type": "string",
233
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
234
+ "maxLength": 80
235
+ },
236
+ "additionalProperties": {
237
+ "$ref": "#/$defs/project"
238
+ }
239
+ },
240
+ "deployments": {
241
+ "type": "object",
242
+ "propertyNames": {
243
+ "type": "string",
244
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
245
+ "maxLength": 80
246
+ },
247
+ "additionalProperties": {
248
+ "$ref": "#/$defs/deployment"
249
+ }
250
+ },
251
+ "allocations": {
252
+ "type": "object",
253
+ "propertyNames": {
254
+ "type": "string",
255
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
256
+ "maxLength": 80
257
+ },
258
+ "additionalProperties": {
259
+ "$ref": "#/$defs/allocation"
260
+ }
261
+ },
262
+ "bindings": {
263
+ "type": "object",
264
+ "propertyNames": {
265
+ "type": "string",
266
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
267
+ "maxLength": 80
268
+ },
269
+ "additionalProperties": {
270
+ "$ref": "#/$defs/binding"
271
+ }
272
+ },
273
+ "releases": {
274
+ "type": "object",
275
+ "propertyNames": {
276
+ "type": "string",
277
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
278
+ "maxLength": 80
279
+ },
280
+ "additionalProperties": {
281
+ "type": "object",
282
+ "properties": {
283
+ "run_id": {
284
+ "type": "string",
285
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
286
+ "maxLength": 80
287
+ },
288
+ "worker": {
289
+ "enum": [
290
+ "I",
291
+ "H",
292
+ "D"
293
+ ]
294
+ },
295
+ "status": {
296
+ "enum": [
297
+ "planned",
298
+ "approved",
299
+ "executing",
300
+ "partial",
301
+ "failed",
302
+ "unknown",
303
+ "docs_pending",
304
+ "completed"
305
+ ]
306
+ },
307
+ "plan_path": {
308
+ "type": "string",
309
+ "minLength": 1
310
+ },
311
+ "host_ids": {
312
+ "type": "array",
313
+ "items": {
314
+ "type": "string",
315
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
316
+ "maxLength": 80
317
+ }
318
+ },
319
+ "deployment_ids": {
320
+ "type": "array",
321
+ "items": {
322
+ "type": "string",
323
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
324
+ "maxLength": 80
325
+ }
326
+ },
327
+ "updated_at": {
328
+ "type": "string",
329
+ "minLength": 1
330
+ },
331
+ "results": {
332
+ "type": "object"
333
+ }
334
+ },
335
+ "required": [
336
+ "run_id",
337
+ "worker",
338
+ "status",
339
+ "plan_path",
340
+ "host_ids",
341
+ "deployment_ids",
342
+ "updated_at",
343
+ "results"
344
+ ],
345
+ "additionalProperties": false
346
+ }
347
+ },
348
+ "policies": {
349
+ "type": "object",
350
+ "properties": {
351
+ "server_readme_credentials": {
352
+ "type": "boolean"
353
+ },
354
+ "server_operations": {
355
+ "type": "boolean"
356
+ },
357
+ "strict_docker_root": {
358
+ "const": true
359
+ }
360
+ },
361
+ "required": [
362
+ "server_readme_credentials",
363
+ "server_operations",
364
+ "strict_docker_root"
365
+ ],
366
+ "additionalProperties": false
367
+ },
368
+ "updated_at": {
369
+ "type": [
370
+ "string",
371
+ "null"
372
+ ]
373
+ }
374
+ },
375
+ "required": [
376
+ "schema_version",
377
+ "workflow",
378
+ "revision",
379
+ "controller",
380
+ "hosts",
381
+ "projects",
382
+ "deployments",
383
+ "allocations",
384
+ "bindings",
385
+ "releases",
386
+ "policies",
387
+ "updated_at"
388
+ ],
389
+ "additionalProperties": false,
390
+ "$defs": {
391
+ "host": {
392
+ "type": "object",
393
+ "properties": {
394
+ "host_id": {
395
+ "type": "string",
396
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
397
+ "maxLength": 80
398
+ },
399
+ "display_name": {
400
+ "type": "string",
401
+ "minLength": 1
402
+ },
403
+ "platform": {
404
+ "enum": [
405
+ "linux",
406
+ "windows",
407
+ "darwin"
408
+ ]
409
+ },
410
+ "transport": {
411
+ "enum": [
412
+ "local",
413
+ "ssh"
414
+ ]
415
+ },
416
+ "root": {
417
+ "type": "string",
418
+ "minLength": 1
419
+ },
420
+ "identity": {
421
+ "type": "string",
422
+ "pattern": "^[a-f0-9]{64}$"
423
+ },
424
+ "connection": {
425
+ "type": "object",
426
+ "properties": {
427
+ "hostname": {
428
+ "type": "string",
429
+ "minLength": 1
430
+ },
431
+ "username": {
432
+ "type": "string",
433
+ "minLength": 1
434
+ },
435
+ "port": {
436
+ "type": "integer",
437
+ "minimum": 1,
438
+ "maximum": 65535
439
+ },
440
+ "known_hosts": {
441
+ "type": "string",
442
+ "minLength": 1
443
+ },
444
+ "identity_file": {
445
+ "type": "string",
446
+ "minLength": 1
447
+ },
448
+ "python": {
449
+ "type": "string",
450
+ "minLength": 1
451
+ },
452
+ "sudo": {
453
+ "type": "boolean"
454
+ },
455
+ "shell": {
456
+ "enum": [
457
+ "posix",
458
+ "powershell"
459
+ ]
460
+ }
461
+ },
462
+ "required": [],
463
+ "additionalProperties": false
464
+ }
465
+ },
466
+ "required": [
467
+ "host_id",
468
+ "display_name",
469
+ "platform",
470
+ "transport",
471
+ "root",
472
+ "identity",
473
+ "connection"
474
+ ],
475
+ "additionalProperties": false
476
+ },
477
+ "project": {
478
+ "type": "object",
479
+ "properties": {
480
+ "project_id": {
481
+ "type": "string",
482
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
483
+ "maxLength": 80
484
+ },
485
+ "display_name": {
486
+ "type": "string",
487
+ "minLength": 1
488
+ },
489
+ "kind": {
490
+ "enum": [
491
+ "app",
492
+ "shared-service"
493
+ ]
494
+ },
495
+ "service_type": {
496
+ "type": [
497
+ "string",
498
+ "null"
499
+ ]
500
+ },
501
+ "source": {
502
+ "type": "object",
503
+ "properties": {
504
+ "type": {
505
+ "enum": [
506
+ "local",
507
+ "git",
508
+ "image",
509
+ "manual"
510
+ ]
511
+ },
512
+ "location": {
513
+ "type": "string",
514
+ "minLength": 1
515
+ },
516
+ "revision": {
517
+ "type": "string",
518
+ "minLength": 1
519
+ }
520
+ },
521
+ "required": [
522
+ "type",
523
+ "location",
524
+ "revision"
525
+ ],
526
+ "additionalProperties": false
527
+ }
528
+ },
529
+ "required": [
530
+ "project_id",
531
+ "display_name",
532
+ "kind",
533
+ "service_type",
534
+ "source"
535
+ ],
536
+ "additionalProperties": false
537
+ },
538
+ "deployment": {
539
+ "type": "object",
540
+ "properties": {
541
+ "deployment_id": {
542
+ "type": "string",
543
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
544
+ "maxLength": 80
545
+ },
546
+ "project_id": {
547
+ "type": "string",
548
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
549
+ "maxLength": 80
550
+ },
551
+ "host_id": {
552
+ "type": "string",
553
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
554
+ "maxLength": 80
555
+ },
556
+ "environment": {
557
+ "type": "string",
558
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
559
+ "maxLength": 80
560
+ },
561
+ "instance": {
562
+ "type": "string",
563
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
564
+ "maxLength": 80
565
+ },
566
+ "layout": {
567
+ "enum": [
568
+ "flat",
569
+ "instances"
570
+ ]
571
+ },
572
+ "method": {
573
+ "enum": [
574
+ "compose",
575
+ "native"
576
+ ]
577
+ },
578
+ "version": {
579
+ "type": "string",
580
+ "minLength": 1
581
+ },
582
+ "observed_version": {
583
+ "type": [
584
+ "string",
585
+ "null"
586
+ ]
587
+ },
588
+ "root": {
589
+ "type": "string",
590
+ "minLength": 1
591
+ },
592
+ "status": {
593
+ "enum": [
594
+ "planned",
595
+ "running",
596
+ "configured",
597
+ "docs_pending",
598
+ "completed",
599
+ "failed",
600
+ "unknown",
601
+ "retired"
602
+ ]
603
+ },
604
+ "installed_at": {
605
+ "type": [
606
+ "string",
607
+ "null"
608
+ ]
609
+ },
610
+ "updated_at": {
611
+ "type": [
612
+ "string",
613
+ "null"
614
+ ]
615
+ },
616
+ "run_id": {
617
+ "type": [
618
+ "string",
619
+ "null"
620
+ ]
621
+ },
622
+ "compose_name": {
623
+ "type": [
624
+ "string",
625
+ "null"
626
+ ]
627
+ },
628
+ "storage": {
629
+ "type": "array",
630
+ "items": {
631
+ "type": "object",
632
+ "properties": {
633
+ "component": {
634
+ "type": "string",
635
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
636
+ "maxLength": 80
637
+ },
638
+ "purpose": {
639
+ "type": "string",
640
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
641
+ "maxLength": 80
642
+ },
643
+ "path": {
644
+ "type": "string",
645
+ "minLength": 1
646
+ },
647
+ "owner": {
648
+ "type": "string"
649
+ }
650
+ },
651
+ "required": [
652
+ "component",
653
+ "purpose",
654
+ "path"
655
+ ],
656
+ "additionalProperties": false
657
+ }
658
+ },
659
+ "commands": {
660
+ "type": "object",
661
+ "properties": {
662
+ "start": {
663
+ "type": "array",
664
+ "items": {
665
+ "type": "array",
666
+ "items": {
667
+ "type": "string",
668
+ "minLength": 1
669
+ }
670
+ }
671
+ },
672
+ "stop": {
673
+ "type": "array",
674
+ "items": {
675
+ "type": "array",
676
+ "items": {
677
+ "type": "string",
678
+ "minLength": 1
679
+ }
680
+ }
681
+ },
682
+ "verify": {
683
+ "type": "array",
684
+ "items": {
685
+ "type": "array",
686
+ "items": {
687
+ "type": "string",
688
+ "minLength": 1
689
+ }
690
+ }
691
+ }
692
+ },
693
+ "required": [
694
+ "start",
695
+ "stop",
696
+ "verify"
697
+ ],
698
+ "additionalProperties": false
699
+ },
700
+ "credential_refs": {
701
+ "type": "array",
702
+ "items": {
703
+ "type": "string",
704
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*@[1-9][0-9]*$"
705
+ },
706
+ "uniqueItems": true
707
+ },
708
+ "backup": {
709
+ "type": "string",
710
+ "minLength": 1
711
+ },
712
+ "recovery": {
713
+ "type": "string",
714
+ "minLength": 1
715
+ },
716
+ "notes": {
717
+ "type": "array",
718
+ "items": {
719
+ "type": "string"
720
+ }
721
+ },
722
+ "source": {
723
+ "type": "object",
724
+ "properties": {
725
+ "type": {
726
+ "enum": [
727
+ "local",
728
+ "git",
729
+ "image",
730
+ "manual"
731
+ ]
732
+ },
733
+ "location": {
734
+ "type": "string",
735
+ "minLength": 1
736
+ },
737
+ "revision": {
738
+ "type": "string",
739
+ "minLength": 1
740
+ }
741
+ },
742
+ "required": [
743
+ "type",
744
+ "location",
745
+ "revision"
746
+ ],
747
+ "additionalProperties": false
748
+ },
749
+ "service": {
750
+ "type": "object"
751
+ }
752
+ },
753
+ "required": [
754
+ "deployment_id",
755
+ "project_id",
756
+ "host_id",
757
+ "environment",
758
+ "instance",
759
+ "layout",
760
+ "method",
761
+ "version",
762
+ "observed_version",
763
+ "root",
764
+ "status",
765
+ "installed_at",
766
+ "updated_at",
767
+ "run_id",
768
+ "compose_name",
769
+ "storage",
770
+ "commands",
771
+ "credential_refs",
772
+ "backup",
773
+ "recovery",
774
+ "notes",
775
+ "source",
776
+ "service"
777
+ ],
778
+ "additionalProperties": false
779
+ },
780
+ "allocation": {
781
+ "type": "object",
782
+ "properties": {
783
+ "allocation_id": {
784
+ "type": "string",
785
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
786
+ "maxLength": 80
787
+ },
788
+ "provider_deployment_id": {
789
+ "type": "string",
790
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
791
+ "maxLength": 80
792
+ },
793
+ "owner_project_id": {
794
+ "type": "string",
795
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
796
+ "maxLength": 80
797
+ },
798
+ "environment": {
799
+ "type": "string",
800
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
801
+ "maxLength": 80
802
+ },
803
+ "data_group": {
804
+ "type": "string",
805
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
806
+ "maxLength": 80
807
+ },
808
+ "resource_kind": {
809
+ "enum": [
810
+ "database",
811
+ "bucket",
812
+ "redis-acl",
813
+ "generic"
814
+ ]
815
+ },
816
+ "resource_name": {
817
+ "type": "string",
818
+ "minLength": 1
819
+ },
820
+ "credential_ref": {
821
+ "type": "string",
822
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*@[1-9][0-9]*$"
823
+ },
824
+ "shared_owners": {
825
+ "type": "array",
826
+ "items": {
827
+ "type": "string",
828
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
829
+ "maxLength": 80
830
+ },
831
+ "uniqueItems": true
832
+ },
833
+ "status": {
834
+ "enum": [
835
+ "planned",
836
+ "active",
837
+ "retained",
838
+ "retired"
839
+ ]
840
+ },
841
+ "recovery_scope": {
842
+ "enum": [
843
+ "logical",
844
+ "provider-wide",
845
+ "application-export",
846
+ "unverified"
847
+ ]
848
+ },
849
+ "notes": {
850
+ "type": "string",
851
+ "minLength": 1
852
+ }
853
+ },
854
+ "required": [
855
+ "allocation_id",
856
+ "provider_deployment_id",
857
+ "owner_project_id",
858
+ "environment",
859
+ "data_group",
860
+ "resource_kind",
861
+ "resource_name",
862
+ "credential_ref",
863
+ "shared_owners",
864
+ "status",
865
+ "recovery_scope",
866
+ "notes"
867
+ ],
868
+ "additionalProperties": false
869
+ },
870
+ "binding": {
871
+ "type": "object",
872
+ "properties": {
873
+ "binding_id": {
874
+ "type": "string",
875
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
876
+ "maxLength": 80
877
+ },
878
+ "consumer_deployment_id": {
879
+ "type": "string",
880
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
881
+ "maxLength": 80
882
+ },
883
+ "mode": {
884
+ "enum": [
885
+ "dedicated",
886
+ "shared",
887
+ "external"
888
+ ]
889
+ },
890
+ "provider_deployment_id": {
891
+ "type": [
892
+ "string",
893
+ "null"
894
+ ]
895
+ },
896
+ "allocation_id": {
897
+ "type": [
898
+ "string",
899
+ "null"
900
+ ]
901
+ },
902
+ "endpoint": {
903
+ "type": "string",
904
+ "minLength": 1
905
+ },
906
+ "credential_ref": {
907
+ "type": "string",
908
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*@[1-9][0-9]*$"
909
+ },
910
+ "status": {
911
+ "enum": [
912
+ "planned",
913
+ "active",
914
+ "retired"
915
+ ]
916
+ },
917
+ "component": {
918
+ "type": "string",
919
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
920
+ "maxLength": 80
921
+ },
922
+ "network": {
923
+ "type": "string",
924
+ "minLength": 1
925
+ }
926
+ },
927
+ "required": [
928
+ "binding_id",
929
+ "consumer_deployment_id",
930
+ "mode",
931
+ "provider_deployment_id",
932
+ "allocation_id",
933
+ "endpoint",
934
+ "credential_ref",
935
+ "status",
936
+ "component",
937
+ "network"
938
+ ],
939
+ "additionalProperties": false
940
+ }
941
+ }
942
+ },
943
+ "credential_versions": {
944
+ "type": "object"
945
+ },
946
+ "document_targets": {
947
+ "type": "array",
948
+ "items": {
949
+ "type": "string",
950
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
951
+ "maxLength": 80
952
+ }
953
+ },
954
+ "allow_adopt_roots": {
955
+ "type": "array",
956
+ "items": {
957
+ "type": "string",
958
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
959
+ "maxLength": 80
960
+ }
961
+ },
962
+ "external_files": {
963
+ "type": "object",
964
+ "additionalProperties": {
965
+ "type": "array",
966
+ "items": {
967
+ "type": "string",
968
+ "minLength": 1
969
+ }
970
+ }
971
+ },
972
+ "affected_consumers": {
973
+ "type": "array",
974
+ "items": {
975
+ "type": "string",
976
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
977
+ "maxLength": 80
978
+ }
979
+ },
980
+ "rollback_note": {
981
+ "type": "string",
982
+ "minLength": 1
983
+ },
984
+ "risk": {
985
+ "type": "string",
986
+ "minLength": 1
987
+ },
988
+ "source_digests": {
989
+ "type": "object"
990
+ }
991
+ },
992
+ "required": [
993
+ "schema_version",
994
+ "artifact",
995
+ "run_id",
996
+ "worker",
997
+ "operation",
998
+ "reason",
999
+ "created_at",
1000
+ "expires_at",
1001
+ "controller_id",
1002
+ "registry_digest",
1003
+ "registry_revision",
1004
+ "hosts",
1005
+ "transport_digests",
1006
+ "inventories",
1007
+ "engine_digest",
1008
+ "document_preconditions",
1009
+ "operations",
1010
+ "registry_after",
1011
+ "credential_versions",
1012
+ "document_targets",
1013
+ "allow_adopt_roots",
1014
+ "external_files",
1015
+ "affected_consumers",
1016
+ "rollback_note",
1017
+ "risk",
1018
+ "source_digests"
1019
+ ],
1020
+ "additionalProperties": false,
1021
+ "$defs": {
1022
+ "host": {
1023
+ "type": "object",
1024
+ "properties": {
1025
+ "host_id": {
1026
+ "type": "string",
1027
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1028
+ "maxLength": 80
1029
+ },
1030
+ "display_name": {
1031
+ "type": "string",
1032
+ "minLength": 1
1033
+ },
1034
+ "platform": {
1035
+ "enum": [
1036
+ "linux",
1037
+ "windows",
1038
+ "darwin"
1039
+ ]
1040
+ },
1041
+ "transport": {
1042
+ "enum": [
1043
+ "local",
1044
+ "ssh"
1045
+ ]
1046
+ },
1047
+ "root": {
1048
+ "type": "string",
1049
+ "minLength": 1
1050
+ },
1051
+ "identity": {
1052
+ "type": "string",
1053
+ "pattern": "^[a-f0-9]{64}$"
1054
+ },
1055
+ "connection": {
1056
+ "type": "object",
1057
+ "properties": {
1058
+ "hostname": {
1059
+ "type": "string",
1060
+ "minLength": 1
1061
+ },
1062
+ "username": {
1063
+ "type": "string",
1064
+ "minLength": 1
1065
+ },
1066
+ "port": {
1067
+ "type": "integer",
1068
+ "minimum": 1,
1069
+ "maximum": 65535
1070
+ },
1071
+ "known_hosts": {
1072
+ "type": "string",
1073
+ "minLength": 1
1074
+ },
1075
+ "identity_file": {
1076
+ "type": "string",
1077
+ "minLength": 1
1078
+ },
1079
+ "python": {
1080
+ "type": "string",
1081
+ "minLength": 1
1082
+ },
1083
+ "sudo": {
1084
+ "type": "boolean"
1085
+ },
1086
+ "shell": {
1087
+ "enum": [
1088
+ "posix",
1089
+ "powershell"
1090
+ ]
1091
+ }
1092
+ },
1093
+ "required": [],
1094
+ "additionalProperties": false
1095
+ }
1096
+ },
1097
+ "required": [
1098
+ "host_id",
1099
+ "display_name",
1100
+ "platform",
1101
+ "transport",
1102
+ "root",
1103
+ "identity",
1104
+ "connection"
1105
+ ],
1106
+ "additionalProperties": false
1107
+ },
1108
+ "project": {
1109
+ "type": "object",
1110
+ "properties": {
1111
+ "project_id": {
1112
+ "type": "string",
1113
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1114
+ "maxLength": 80
1115
+ },
1116
+ "display_name": {
1117
+ "type": "string",
1118
+ "minLength": 1
1119
+ },
1120
+ "kind": {
1121
+ "enum": [
1122
+ "app",
1123
+ "shared-service"
1124
+ ]
1125
+ },
1126
+ "service_type": {
1127
+ "type": [
1128
+ "string",
1129
+ "null"
1130
+ ]
1131
+ },
1132
+ "source": {
1133
+ "type": "object",
1134
+ "properties": {
1135
+ "type": {
1136
+ "enum": [
1137
+ "local",
1138
+ "git",
1139
+ "image",
1140
+ "manual"
1141
+ ]
1142
+ },
1143
+ "location": {
1144
+ "type": "string",
1145
+ "minLength": 1
1146
+ },
1147
+ "revision": {
1148
+ "type": "string",
1149
+ "minLength": 1
1150
+ }
1151
+ },
1152
+ "required": [
1153
+ "type",
1154
+ "location",
1155
+ "revision"
1156
+ ],
1157
+ "additionalProperties": false
1158
+ }
1159
+ },
1160
+ "required": [
1161
+ "project_id",
1162
+ "display_name",
1163
+ "kind",
1164
+ "service_type",
1165
+ "source"
1166
+ ],
1167
+ "additionalProperties": false
1168
+ },
1169
+ "deployment": {
1170
+ "type": "object",
1171
+ "properties": {
1172
+ "deployment_id": {
1173
+ "type": "string",
1174
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1175
+ "maxLength": 80
1176
+ },
1177
+ "project_id": {
1178
+ "type": "string",
1179
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1180
+ "maxLength": 80
1181
+ },
1182
+ "host_id": {
1183
+ "type": "string",
1184
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1185
+ "maxLength": 80
1186
+ },
1187
+ "environment": {
1188
+ "type": "string",
1189
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1190
+ "maxLength": 80
1191
+ },
1192
+ "instance": {
1193
+ "type": "string",
1194
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1195
+ "maxLength": 80
1196
+ },
1197
+ "layout": {
1198
+ "enum": [
1199
+ "flat",
1200
+ "instances"
1201
+ ]
1202
+ },
1203
+ "method": {
1204
+ "enum": [
1205
+ "compose",
1206
+ "native"
1207
+ ]
1208
+ },
1209
+ "version": {
1210
+ "type": "string",
1211
+ "minLength": 1
1212
+ },
1213
+ "observed_version": {
1214
+ "type": [
1215
+ "string",
1216
+ "null"
1217
+ ]
1218
+ },
1219
+ "root": {
1220
+ "type": "string",
1221
+ "minLength": 1
1222
+ },
1223
+ "status": {
1224
+ "enum": [
1225
+ "planned",
1226
+ "running",
1227
+ "configured",
1228
+ "docs_pending",
1229
+ "completed",
1230
+ "failed",
1231
+ "unknown",
1232
+ "retired"
1233
+ ]
1234
+ },
1235
+ "installed_at": {
1236
+ "type": [
1237
+ "string",
1238
+ "null"
1239
+ ]
1240
+ },
1241
+ "updated_at": {
1242
+ "type": [
1243
+ "string",
1244
+ "null"
1245
+ ]
1246
+ },
1247
+ "run_id": {
1248
+ "type": [
1249
+ "string",
1250
+ "null"
1251
+ ]
1252
+ },
1253
+ "compose_name": {
1254
+ "type": [
1255
+ "string",
1256
+ "null"
1257
+ ]
1258
+ },
1259
+ "storage": {
1260
+ "type": "array",
1261
+ "items": {
1262
+ "type": "object",
1263
+ "properties": {
1264
+ "component": {
1265
+ "type": "string",
1266
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1267
+ "maxLength": 80
1268
+ },
1269
+ "purpose": {
1270
+ "type": "string",
1271
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1272
+ "maxLength": 80
1273
+ },
1274
+ "path": {
1275
+ "type": "string",
1276
+ "minLength": 1
1277
+ },
1278
+ "owner": {
1279
+ "type": "string"
1280
+ }
1281
+ },
1282
+ "required": [
1283
+ "component",
1284
+ "purpose",
1285
+ "path"
1286
+ ],
1287
+ "additionalProperties": false
1288
+ }
1289
+ },
1290
+ "commands": {
1291
+ "type": "object",
1292
+ "properties": {
1293
+ "start": {
1294
+ "type": "array",
1295
+ "items": {
1296
+ "type": "array",
1297
+ "items": {
1298
+ "type": "string",
1299
+ "minLength": 1
1300
+ }
1301
+ }
1302
+ },
1303
+ "stop": {
1304
+ "type": "array",
1305
+ "items": {
1306
+ "type": "array",
1307
+ "items": {
1308
+ "type": "string",
1309
+ "minLength": 1
1310
+ }
1311
+ }
1312
+ },
1313
+ "verify": {
1314
+ "type": "array",
1315
+ "items": {
1316
+ "type": "array",
1317
+ "items": {
1318
+ "type": "string",
1319
+ "minLength": 1
1320
+ }
1321
+ }
1322
+ }
1323
+ },
1324
+ "required": [
1325
+ "start",
1326
+ "stop",
1327
+ "verify"
1328
+ ],
1329
+ "additionalProperties": false
1330
+ },
1331
+ "credential_refs": {
1332
+ "type": "array",
1333
+ "items": {
1334
+ "type": "string",
1335
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*@[1-9][0-9]*$"
1336
+ },
1337
+ "uniqueItems": true
1338
+ },
1339
+ "backup": {
1340
+ "type": "string",
1341
+ "minLength": 1
1342
+ },
1343
+ "recovery": {
1344
+ "type": "string",
1345
+ "minLength": 1
1346
+ },
1347
+ "notes": {
1348
+ "type": "array",
1349
+ "items": {
1350
+ "type": "string"
1351
+ }
1352
+ },
1353
+ "source": {
1354
+ "type": "object",
1355
+ "properties": {
1356
+ "type": {
1357
+ "enum": [
1358
+ "local",
1359
+ "git",
1360
+ "image",
1361
+ "manual"
1362
+ ]
1363
+ },
1364
+ "location": {
1365
+ "type": "string",
1366
+ "minLength": 1
1367
+ },
1368
+ "revision": {
1369
+ "type": "string",
1370
+ "minLength": 1
1371
+ }
1372
+ },
1373
+ "required": [
1374
+ "type",
1375
+ "location",
1376
+ "revision"
1377
+ ],
1378
+ "additionalProperties": false
1379
+ },
1380
+ "service": {
1381
+ "type": "object"
1382
+ }
1383
+ },
1384
+ "required": [
1385
+ "deployment_id",
1386
+ "project_id",
1387
+ "host_id",
1388
+ "environment",
1389
+ "instance",
1390
+ "layout",
1391
+ "method",
1392
+ "version",
1393
+ "observed_version",
1394
+ "root",
1395
+ "status",
1396
+ "installed_at",
1397
+ "updated_at",
1398
+ "run_id",
1399
+ "compose_name",
1400
+ "storage",
1401
+ "commands",
1402
+ "credential_refs",
1403
+ "backup",
1404
+ "recovery",
1405
+ "notes",
1406
+ "source",
1407
+ "service"
1408
+ ],
1409
+ "additionalProperties": false
1410
+ },
1411
+ "allocation": {
1412
+ "type": "object",
1413
+ "properties": {
1414
+ "allocation_id": {
1415
+ "type": "string",
1416
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1417
+ "maxLength": 80
1418
+ },
1419
+ "provider_deployment_id": {
1420
+ "type": "string",
1421
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1422
+ "maxLength": 80
1423
+ },
1424
+ "owner_project_id": {
1425
+ "type": "string",
1426
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1427
+ "maxLength": 80
1428
+ },
1429
+ "environment": {
1430
+ "type": "string",
1431
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1432
+ "maxLength": 80
1433
+ },
1434
+ "data_group": {
1435
+ "type": "string",
1436
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1437
+ "maxLength": 80
1438
+ },
1439
+ "resource_kind": {
1440
+ "enum": [
1441
+ "database",
1442
+ "bucket",
1443
+ "redis-acl",
1444
+ "generic"
1445
+ ]
1446
+ },
1447
+ "resource_name": {
1448
+ "type": "string",
1449
+ "minLength": 1
1450
+ },
1451
+ "credential_ref": {
1452
+ "type": "string",
1453
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*@[1-9][0-9]*$"
1454
+ },
1455
+ "shared_owners": {
1456
+ "type": "array",
1457
+ "items": {
1458
+ "type": "string",
1459
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1460
+ "maxLength": 80
1461
+ },
1462
+ "uniqueItems": true
1463
+ },
1464
+ "status": {
1465
+ "enum": [
1466
+ "planned",
1467
+ "active",
1468
+ "retained",
1469
+ "retired"
1470
+ ]
1471
+ },
1472
+ "recovery_scope": {
1473
+ "enum": [
1474
+ "logical",
1475
+ "provider-wide",
1476
+ "application-export",
1477
+ "unverified"
1478
+ ]
1479
+ },
1480
+ "notes": {
1481
+ "type": "string",
1482
+ "minLength": 1
1483
+ }
1484
+ },
1485
+ "required": [
1486
+ "allocation_id",
1487
+ "provider_deployment_id",
1488
+ "owner_project_id",
1489
+ "environment",
1490
+ "data_group",
1491
+ "resource_kind",
1492
+ "resource_name",
1493
+ "credential_ref",
1494
+ "shared_owners",
1495
+ "status",
1496
+ "recovery_scope",
1497
+ "notes"
1498
+ ],
1499
+ "additionalProperties": false
1500
+ },
1501
+ "binding": {
1502
+ "type": "object",
1503
+ "properties": {
1504
+ "binding_id": {
1505
+ "type": "string",
1506
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1507
+ "maxLength": 80
1508
+ },
1509
+ "consumer_deployment_id": {
1510
+ "type": "string",
1511
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1512
+ "maxLength": 80
1513
+ },
1514
+ "mode": {
1515
+ "enum": [
1516
+ "dedicated",
1517
+ "shared",
1518
+ "external"
1519
+ ]
1520
+ },
1521
+ "provider_deployment_id": {
1522
+ "type": [
1523
+ "string",
1524
+ "null"
1525
+ ]
1526
+ },
1527
+ "allocation_id": {
1528
+ "type": [
1529
+ "string",
1530
+ "null"
1531
+ ]
1532
+ },
1533
+ "endpoint": {
1534
+ "type": "string",
1535
+ "minLength": 1
1536
+ },
1537
+ "credential_ref": {
1538
+ "type": "string",
1539
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*@[1-9][0-9]*$"
1540
+ },
1541
+ "status": {
1542
+ "enum": [
1543
+ "planned",
1544
+ "active",
1545
+ "retired"
1546
+ ]
1547
+ },
1548
+ "component": {
1549
+ "type": "string",
1550
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
1551
+ "maxLength": 80
1552
+ },
1553
+ "network": {
1554
+ "type": "string",
1555
+ "minLength": 1
1556
+ }
1557
+ },
1558
+ "required": [
1559
+ "binding_id",
1560
+ "consumer_deployment_id",
1561
+ "mode",
1562
+ "provider_deployment_id",
1563
+ "allocation_id",
1564
+ "endpoint",
1565
+ "credential_ref",
1566
+ "status",
1567
+ "component",
1568
+ "network"
1569
+ ],
1570
+ "additionalProperties": false
1571
+ }
1572
+ }
1573
+ }