@aifabrix/builder 2.56.0 → 2.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/lib/agent-kit/session-report.js +76 -0
  2. package/lib/agent-kit/start.js +124 -57
  3. package/lib/agent-kit/tmux-sessions.js +163 -0
  4. package/lib/api/environments.api.js +38 -0
  5. package/lib/api/marketplace-bootstrap.api.js +31 -0
  6. package/lib/app/push.js +98 -41
  7. package/lib/build/standard-docker-build.js +13 -11
  8. package/lib/cli/setup-app.js +16 -5
  9. package/lib/cli/setup-dev-path-commands.js +49 -2
  10. package/lib/cli/setup-environment.js +89 -19
  11. package/lib/commands/agent-kit-help.js +32 -15
  12. package/lib/commands/agent-kit.js +90 -8
  13. package/lib/commands/dev-registry.js +155 -0
  14. package/lib/commands/dev-show-display.js +10 -2
  15. package/lib/commands/setup-image-refresh.js +26 -0
  16. package/lib/core/config-attach-extensions.js +4 -1
  17. package/lib/deployment/installation/azure-infra-stage.js +191 -0
  18. package/lib/deployment/installation/azure-preflight.js +147 -0
  19. package/lib/deployment/installation/azure-readiness.js +101 -0
  20. package/lib/deployment/installation/docker-register.js +112 -0
  21. package/lib/deployment/installation/environment-auth.js +76 -0
  22. package/lib/deployment/installation/environment-manifest.js +165 -0
  23. package/lib/deployment/installation/environment-stage.js +191 -0
  24. package/lib/deployment/installation/index.js +39 -0
  25. package/lib/deployment/installation/infra-catalog.js +211 -0
  26. package/lib/deployment/installation/infra-manifest.js +176 -0
  27. package/lib/deployment/installation/infra-projection.js +97 -0
  28. package/lib/deployment/installation/public-ip.js +65 -0
  29. package/lib/deployment/installation/registry-auth-mode.js +98 -0
  30. package/lib/deployment/installation/stage-input.js +184 -0
  31. package/lib/deployment/installation/stage-output.js +53 -0
  32. package/lib/deployment/installation/workspace-env.js +76 -0
  33. package/lib/deployment/installation/workspace-files.js +178 -0
  34. package/lib/deployment/installation/workspace-schema.js +40 -0
  35. package/lib/deployment/installation/workspace-secrets.js +66 -0
  36. package/lib/deployment/installation/workspace.js +128 -0
  37. package/lib/deployment/marketplace-environment.js +305 -0
  38. package/lib/generator/builders.js +12 -9
  39. package/lib/generator/helpers.js +55 -56
  40. package/lib/generator/split-variables.js +11 -5
  41. package/lib/internal/fs-real-sync.js +29 -0
  42. package/lib/role-assistant/package-validate.js +4 -0
  43. package/lib/role-assistant/test-runner-clarification-resubmit.js +149 -0
  44. package/lib/role-assistant/test-runner.js +14 -17
  45. package/lib/schema/application-schema.json +20 -2
  46. package/lib/schema/infra-parameter.schema.json +7 -0
  47. package/lib/schema/infra.parameter.yaml +26 -36
  48. package/lib/schema/infrastructure-schema.json +1531 -397
  49. package/lib/schema/installation-environment.schema.json +601 -0
  50. package/lib/utils/app-register-config.js +2 -4
  51. package/lib/utils/build-resolve-image.js +2 -21
  52. package/lib/utils/cli-utils.js +8 -1
  53. package/lib/utils/config-registry-preference.js +106 -0
  54. package/lib/utils/docker-build.js +53 -19
  55. package/lib/utils/env-map.js +23 -6
  56. package/lib/utils/image-tags.js +88 -0
  57. package/lib/utils/promote-dev-docker-image.js +6 -0
  58. package/lib/utils/registry-credentials.js +236 -0
  59. package/lib/utils/resolve-docker-image-ref.js +78 -9
  60. package/lib/utils/secrets-helpers.js +9 -1
  61. package/lib/utils/variable-transformer.js +5 -4
  62. package/lib/validation/required-variables.js +41 -0
  63. package/lib/validation/validator.js +8 -5
  64. package/package.json +6 -1
  65. package/templates/README.md +4 -0
  66. package/templates/agent-kit/instructions/AGENTKIT.md +6 -6
  67. package/templates/agent-kit/skills/shared/hosts.md +10 -10
  68. package/templates/applications/dataplane/application.yaml +1 -1
  69. package/templates/applications/dataplane/env.template +1 -1
  70. package/templates/applications/miso-controller/application.yaml +3 -2
  71. package/templates/applications/miso-controller/env.template +15 -6
  72. package/templates/marketplace/createUiDefinition.json +77 -0
  73. package/templates/marketplace/install.parameters.example.json +9 -0
  74. package/templates/marketplace/main.json +4087 -0
@@ -1,587 +1,1721 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/draft-07/schema#",
3
3
  "$id": "https://raw.githubusercontent.com/esystemsdev/aifabrix-builder/refs/heads/main/lib/schema/infrastructure-schema.json",
4
- "title": "AI Fabrix Infrastructure Configuration Schema",
5
- "description": "Infrastructure-level configuration schema for AI Fabrix deployment",
4
+ "title": "AI Fabrix Installation Infrastructure Manifest",
5
+ "description": "Committed, non-secret environment-infra.json for an installation workspace under infrastructure/<resource-group>/. Secrets appear only as valueFromEnv references.",
6
6
  "metadata": {
7
7
  "key": "infrastructure-schema",
8
- "name": "Infrastructure Configuration Schema",
9
- "description": "JSON schema for validating AI Fabrix infrastructure configuration files",
10
- "version": "1.0.0",
8
+ "name": "Installation Infrastructure Manifest Schema",
9
+ "description": "JSON schema for infrastructure/<resource-group>/environment-infra.json",
10
+ "version": "2.0.0",
11
11
  "type": "schema",
12
12
  "category": "infrastructure",
13
13
  "author": "AI Fabrix Team",
14
14
  "createdAt": "2024-01-01T00:00:00Z",
15
- "updatedAt": "2024-01-01T00:00:00Z",
15
+ "updatedAt": "2026-09-17T00:00:00Z",
16
16
  "compatibility": {
17
- "minVersion": "1.0.0",
17
+ "minVersion": "2.0.0",
18
18
  "maxVersion": "2.0.0",
19
19
  "deprecated": false
20
20
  },
21
- "tags": ["schema", "infrastructure", "validation", "configuration"],
21
+ "tags": [
22
+ "schema",
23
+ "infrastructure",
24
+ "installation",
25
+ "marketplace"
26
+ ],
22
27
  "dependencies": [],
23
28
  "changelog": [
29
+ {
30
+ "version": "2.0.0",
31
+ "date": "2026-09-16T00:00:00Z",
32
+ "breaking": true,
33
+ "changes": [
34
+ "Replaced the environment-configuration shape with the installation workspace manifest (environment-infra.json).",
35
+ "Removed smtp without replacement.",
36
+ "Covers every Marketplace template parameter and output with source/description metadata; secure parameters are valueFromEnv references.",
37
+ "Added vendor, workspace subscription/tenant, acrName, acrAuth (auto|mi|credentials, deprecated admin alias, resolved effective mode), deployRoleAssignments restore metadata, default-off allowMyIp, licenseEdition, onboardingMode, tenant activation, deployment and application variable catalog sections."
38
+ ]
39
+ },
24
40
  {
25
41
  "version": "1.0.0",
26
42
  "date": "2024-01-01T00:00:00Z",
43
+ "breaking": false,
27
44
  "changes": [
28
- "Initial infrastructure configuration schema",
29
- "Added infrastructure resource validation",
30
- "Added network configuration validation",
31
- "Added deployment configuration validation"
32
- ],
33
- "breaking": false
45
+ "Initial infrastructure configuration schema"
46
+ ]
34
47
  }
35
48
  ]
36
49
  },
50
+ "definitions": {
51
+ "entry": {
52
+ "type": "object",
53
+ "required": [
54
+ "value",
55
+ "source",
56
+ "description"
57
+ ],
58
+ "additionalProperties": false,
59
+ "properties": {
60
+ "value": {},
61
+ "source": {
62
+ "type": "string",
63
+ "minLength": 1
64
+ },
65
+ "description": {
66
+ "type": "string",
67
+ "minLength": 1
68
+ },
69
+ "required": {
70
+ "type": "boolean"
71
+ }
72
+ }
73
+ },
74
+ "envReference": {
75
+ "type": "object",
76
+ "required": [
77
+ "valueFromEnv",
78
+ "source",
79
+ "description"
80
+ ],
81
+ "additionalProperties": false,
82
+ "properties": {
83
+ "valueFromEnv": {
84
+ "type": "string",
85
+ "pattern": "^[A-Z_][A-Z0-9_]*$"
86
+ },
87
+ "source": {
88
+ "const": "secretEnv"
89
+ },
90
+ "required": {
91
+ "type": "boolean"
92
+ },
93
+ "description": {
94
+ "type": "string",
95
+ "minLength": 1
96
+ }
97
+ }
98
+ },
99
+ "output": {
100
+ "type": "object",
101
+ "required": [
102
+ "value",
103
+ "description"
104
+ ],
105
+ "additionalProperties": false,
106
+ "properties": {
107
+ "value": {
108
+ "type": [
109
+ "string",
110
+ "null"
111
+ ]
112
+ },
113
+ "description": {
114
+ "type": "string"
115
+ }
116
+ }
117
+ },
118
+ "variable": {
119
+ "type": "object",
120
+ "required": [
121
+ "valueFromEnv",
122
+ "requiredBy",
123
+ "source",
124
+ "description"
125
+ ],
126
+ "additionalProperties": false,
127
+ "properties": {
128
+ "valueFromEnv": {
129
+ "type": "string",
130
+ "pattern": "^[A-Z_][A-Z0-9_]*$"
131
+ },
132
+ "requiredBy": {
133
+ "type": "array",
134
+ "uniqueItems": true,
135
+ "items": {
136
+ "type": "string",
137
+ "pattern": "^[a-z0-9-]+$"
138
+ }
139
+ },
140
+ "environments": {
141
+ "type": "array",
142
+ "uniqueItems": true,
143
+ "items": {
144
+ "enum": [
145
+ "dev",
146
+ "tst",
147
+ "pro"
148
+ ]
149
+ }
150
+ },
151
+ "source": {
152
+ "type": "string"
153
+ },
154
+ "description": {
155
+ "type": "string"
156
+ },
157
+ "resolution": {
158
+ "enum": [
159
+ "resolved",
160
+ "missing"
161
+ ]
162
+ }
163
+ }
164
+ },
165
+ "generated": {
166
+ "type": "object",
167
+ "additionalProperties": false,
168
+ "properties": {
169
+ "builderVersion": {
170
+ "type": "string"
171
+ },
172
+ "templateContentVersion": {
173
+ "type": [
174
+ "string",
175
+ "null"
176
+ ]
177
+ },
178
+ "templateSha256": {
179
+ "type": "string",
180
+ "pattern": "^[0-9a-f]{64}$"
181
+ },
182
+ "generatedAt": {
183
+ "type": "string",
184
+ "format": "date-time"
185
+ },
186
+ "files": {
187
+ "type": "object",
188
+ "additionalProperties": {
189
+ "type": "string",
190
+ "pattern": "^[0-9a-f]{64}$"
191
+ }
192
+ }
193
+ }
194
+ }
195
+ },
37
196
  "type": "object",
38
197
  "required": [
39
- "key",
40
- "environment",
41
- "preset",
42
- "serviceName",
43
- "location",
44
- "deploymentType",
45
- "deployment",
198
+ "schemaVersion",
199
+ "vendor",
200
+ "resourceGroup",
201
+ "installId",
46
202
  "subscriptionId",
47
- "tenantId"
203
+ "tenantId",
204
+ "variables",
205
+ "generated"
48
206
  ],
49
207
  "properties": {
50
- "key": {
51
- "type": "string",
52
- "description": "Unique infrastructure identifier (cannot be changed after creation)",
53
- "pattern": "^[a-z0-9-]+$",
54
- "minLength": 3,
55
- "maxLength": 40
56
- },
57
- "environment": {
58
- "type": "string",
59
- "description": "Environment",
60
- "enum": ["miso", "dev", "tst", "pro"]
61
- },
62
- "preset": {
63
- "type": "string",
64
- "description": "Resource preset - determines service configurations and sizing",
65
- "enum": ["evaluation", "s", "m", "l", "xl"],
66
- "default": "s"
67
- },
68
- "serviceName": {
69
- "type": "string",
70
- "description": "Service name",
71
- "pattern": "^[a-z0-9-]{3,40}$"
72
- },
73
- "location": {
74
- "type": "string",
75
- "description": "Azure region"
76
- },
77
- "subscriptionId": {
78
- "type": "string",
79
- "description": "Azure subscription ID",
80
- "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
208
+ "schemaVersion": {
209
+ "const": "2.0.0"
81
210
  },
82
- "tenantId": {
83
- "type": "string",
84
- "description": "Azure tenant ID",
85
- "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
86
- },
87
- "networkAddressSpace": {
88
- "type": "string",
89
- "description": "Network address space",
90
- "pattern": "^(\\d{1,3}\\.){3}\\d{1,3}(\\/\\d{1,2})?$"
91
- },
92
- "customDomain": {
211
+ "vendor": {
93
212
  "type": "object",
94
- "description": "Custom domain configuration",
213
+ "required": [
214
+ "value",
215
+ "source",
216
+ "description"
217
+ ],
218
+ "additionalProperties": false,
95
219
  "properties": {
96
- "enabled": {
97
- "type": "boolean"
220
+ "value": {
221
+ "enum": [
222
+ "AZURE",
223
+ "DOCKER"
224
+ ]
98
225
  },
99
- "name": {
226
+ "source": {
227
+ "type": "string",
228
+ "minLength": 1
229
+ },
230
+ "description": {
100
231
  "type": "string",
101
- "description": "Domain name"
232
+ "minLength": 1
233
+ },
234
+ "required": {
235
+ "type": "boolean"
102
236
  }
103
- },
104
- "required": ["enabled"]
237
+ }
105
238
  },
106
- "frontDoor": {
239
+ "resourceGroup": {
107
240
  "type": "object",
108
- "description": "Front Door configuration",
241
+ "required": [
242
+ "value",
243
+ "source",
244
+ "description"
245
+ ],
246
+ "additionalProperties": false,
109
247
  "properties": {
110
- "tier": {
248
+ "value": {
249
+ "type": "string",
250
+ "pattern": "^[a-z][a-z0-9-]{2,39}$"
251
+ },
252
+ "source": {
111
253
  "type": "string",
112
- "enum": ["Standard", "Premium"]
254
+ "minLength": 1
255
+ },
256
+ "description": {
257
+ "type": "string",
258
+ "minLength": 1
259
+ },
260
+ "required": {
261
+ "type": "boolean"
113
262
  }
114
- },
115
- "additionalProperties": false
263
+ }
116
264
  },
117
- "networking": {
265
+ "installId": {
118
266
  "type": "object",
119
- "description": "Networking configuration",
267
+ "required": [
268
+ "value",
269
+ "source",
270
+ "description"
271
+ ],
272
+ "additionalProperties": false,
120
273
  "properties": {
121
- "enablePrivateNetworking": {
122
- "type": "boolean"
274
+ "value": {
275
+ "type": "string",
276
+ "pattern": "^[a-z][a-z0-9-]{2,39}$"
277
+ },
278
+ "source": {
279
+ "type": "string",
280
+ "minLength": 1
123
281
  },
124
- "enableAzureDns": {
282
+ "description": {
283
+ "type": "string",
284
+ "minLength": 1
285
+ },
286
+ "required": {
125
287
  "type": "boolean"
126
288
  }
127
289
  }
128
290
  },
129
- "deployment": {
291
+ "subscriptionId": {
130
292
  "type": "object",
131
- "description": "Deployment configuration",
132
- "required": ["mode"],
293
+ "required": [
294
+ "value",
295
+ "source",
296
+ "description"
297
+ ],
298
+ "additionalProperties": false,
133
299
  "properties": {
134
- "skipValidation": {
135
- "type": "boolean"
300
+ "value": {
301
+ "type": "string",
302
+ "pattern": "^$|^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
136
303
  },
137
- "dryRun": {
138
- "type": "boolean"
304
+ "source": {
305
+ "type": "string",
306
+ "minLength": 1
139
307
  },
140
- "mode": {
308
+ "description": {
141
309
  "type": "string",
142
- "enum": ["marketplace", "infrastructure"]
310
+ "minLength": 1
311
+ },
312
+ "required": {
313
+ "type": "boolean"
143
314
  }
144
315
  }
145
316
  },
146
- "smtp": {
317
+ "tenantId": {
147
318
  "type": "object",
148
- "description": "SMTP configuration",
319
+ "required": [
320
+ "value",
321
+ "source",
322
+ "description"
323
+ ],
324
+ "additionalProperties": false,
149
325
  "properties": {
150
- "enabled": {
151
- "type": "boolean"
326
+ "value": {
327
+ "type": "string",
328
+ "pattern": "^$|^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
152
329
  },
153
- "host": {
154
- "type": "string"
330
+ "source": {
331
+ "type": "string",
332
+ "minLength": 1
155
333
  },
156
- "port": {
157
- "type": "integer",
158
- "minimum": 1,
159
- "maximum": 65535
334
+ "description": {
335
+ "type": "string",
336
+ "minLength": 1
160
337
  },
161
- "user": {
162
- "type": "string"
338
+ "required": {
339
+ "type": "boolean"
340
+ }
341
+ }
342
+ },
343
+ "acrName": {
344
+ "type": "object",
345
+ "required": [
346
+ "value",
347
+ "source",
348
+ "description"
349
+ ],
350
+ "additionalProperties": false,
351
+ "properties": {
352
+ "value": {
353
+ "type": "string",
354
+ "pattern": "^$|^[a-zA-Z0-9]{5,50}$"
163
355
  },
164
- "senderEmail": {
356
+ "source": {
165
357
  "type": "string",
166
- "format": "email"
358
+ "minLength": 1
167
359
  },
168
- "useKeyVault": {
360
+ "description": {
361
+ "type": "string",
362
+ "minLength": 1
363
+ },
364
+ "required": {
169
365
  "type": "boolean"
170
366
  }
171
367
  }
172
368
  },
173
- "containerRegistry": {
369
+ "acrAuth": {
174
370
  "type": "object",
175
- "description": "Container Registry configuration",
371
+ "required": [
372
+ "value",
373
+ "source",
374
+ "description"
375
+ ],
376
+ "additionalProperties": false,
176
377
  "properties": {
177
- "enabled": {
378
+ "value": {
379
+ "enum": [
380
+ "auto",
381
+ "mi",
382
+ "credentials",
383
+ "admin"
384
+ ],
385
+ "description": "Requested image-pull auth; admin is a deprecated alias for credentials."
386
+ },
387
+ "source": {
388
+ "type": "string",
389
+ "minLength": 1
390
+ },
391
+ "description": {
392
+ "type": "string",
393
+ "minLength": 1
394
+ },
395
+ "required": {
178
396
  "type": "boolean"
397
+ },
398
+ "effective": {
399
+ "enum": [
400
+ "mi",
401
+ "credentials"
402
+ ],
403
+ "description": "Pull auth resolved by the last infra run (non-secret)."
179
404
  }
180
- },
181
- "additionalProperties": false
405
+ }
182
406
  },
183
- "ai": {
407
+ "allowMyIp": {
184
408
  "type": "object",
185
- "description": "AI services configuration",
409
+ "required": [
410
+ "value",
411
+ "source",
412
+ "description"
413
+ ],
414
+ "additionalProperties": false,
186
415
  "properties": {
187
- "enabled": {
416
+ "value": {
188
417
  "type": "boolean"
189
418
  },
190
- "sku": {
419
+ "source": {
191
420
  "type": "string",
192
- "enum": ["S0", "S1", "S2", "S3"]
421
+ "minLength": 1
193
422
  },
194
- "kind": {
423
+ "description": {
195
424
  "type": "string",
196
- "enum": ["OpenAI", "CognitiveServices"]
425
+ "minLength": 1
426
+ },
427
+ "required": {
428
+ "type": "boolean"
429
+ },
430
+ "resolvedCidr": {
431
+ "type": [
432
+ "string",
433
+ "null"
434
+ ],
435
+ "pattern": "^(\\d{1,3}\\.){3}\\d{1,3}/32$"
436
+ },
437
+ "resolvedAt": {
438
+ "type": [
439
+ "string",
440
+ "null"
441
+ ],
442
+ "format": "date-time"
443
+ },
444
+ "resolver": {
445
+ "type": [
446
+ "string",
447
+ "null"
448
+ ]
197
449
  }
198
- },
199
- "additionalProperties": false
450
+ }
200
451
  },
201
- "storage": {
452
+ "preset": {
202
453
  "type": "object",
203
- "description": "Storage configuration",
454
+ "required": [
455
+ "value",
456
+ "source",
457
+ "description"
458
+ ],
459
+ "additionalProperties": false,
204
460
  "properties": {
205
- "postgres": {
206
- "type": "string",
207
- "description": "PostgreSQL storage size (e.g., 128GB, 1TB)",
208
- "pattern": "^\\d+(GB|TB)$"
461
+ "value": {
462
+ "enum": [
463
+ "s",
464
+ "m",
465
+ "l",
466
+ "xl"
467
+ ]
209
468
  },
210
- "blob": {
469
+ "source": {
211
470
  "type": "string",
212
- "description": "Blob storage size (e.g., 128GB, 1TB)",
213
- "pattern": "^\\d+(GB|TB)$"
471
+ "minLength": 1
214
472
  },
215
- "fileShare": {
473
+ "description": {
216
474
  "type": "string",
217
- "description": "File share storage size (e.g., 64GB, 512GB)",
218
- "pattern": "^\\d+(GB|TB)$"
475
+ "minLength": 1
476
+ },
477
+ "required": {
478
+ "type": "boolean"
219
479
  }
220
- },
221
- "additionalProperties": false
480
+ }
222
481
  },
223
- "serviceMapping": {
482
+ "parameters": {
224
483
  "type": "object",
225
- "description": "Service mapping configuration based on preset and environment",
484
+ "additionalProperties": false,
485
+ "required": [
486
+ "infrastructureNameOverride",
487
+ "location",
488
+ "tags",
489
+ "enableAppInsights",
490
+ "enableAzureOpenAI",
491
+ "enablePartnerCenterAttribution",
492
+ "enablePostgresPublicAccess",
493
+ "allowedIPs",
494
+ "adminPassword",
495
+ "deploymentEnvironment",
496
+ "keycloakVerifyAudience",
497
+ "encryptionKey",
498
+ "acrLoginServer",
499
+ "acrAdminUsername",
500
+ "acrAdminPassword",
501
+ "acrResourceId",
502
+ "deployRoleAssignments",
503
+ "moriBaseUrl",
504
+ "moriCallbackApiKey",
505
+ "entraCallbackStateSecret",
506
+ "entraIdClientId",
507
+ "entraIdClientSecret",
508
+ "entraIdTenantId",
509
+ "licenseEdition",
510
+ "onboardingMode",
511
+ "misoImageTag",
512
+ "keycloakImageTag"
513
+ ],
226
514
  "properties": {
227
- "appServicePlan": {
515
+ "infrastructureNameOverride": {
228
516
  "type": "object",
517
+ "required": [
518
+ "value",
519
+ "source",
520
+ "description"
521
+ ],
522
+ "additionalProperties": false,
229
523
  "properties": {
230
- "sku": { "type": "string" },
231
- "instances": {
232
- "type": "object",
233
- "properties": {
234
- "min": { "type": "integer" },
235
- "max": { "type": "integer" }
236
- }
524
+ "value": {
525
+ "type": [
526
+ "string",
527
+ "boolean",
528
+ "number",
529
+ "object",
530
+ "array"
531
+ ]
532
+ },
533
+ "source": {
534
+ "type": "string",
535
+ "minLength": 1
536
+ },
537
+ "description": {
538
+ "type": "string",
539
+ "minLength": 1
540
+ },
541
+ "required": {
542
+ "type": "boolean"
237
543
  }
238
544
  }
239
545
  },
240
- "redis": {
546
+ "location": {
241
547
  "type": "object",
548
+ "required": [
549
+ "value",
550
+ "source",
551
+ "description"
552
+ ],
553
+ "additionalProperties": false,
242
554
  "properties": {
243
- "enabled": { "type": "boolean" },
244
- "sku": { "type": "string" }
555
+ "value": {
556
+ "type": [
557
+ "string",
558
+ "boolean",
559
+ "number",
560
+ "object",
561
+ "array"
562
+ ]
563
+ },
564
+ "source": {
565
+ "type": "string",
566
+ "minLength": 1
567
+ },
568
+ "description": {
569
+ "type": "string",
570
+ "minLength": 1
571
+ },
572
+ "required": {
573
+ "type": "boolean"
574
+ }
245
575
  }
246
576
  },
247
- "postgres": {
577
+ "tags": {
248
578
  "type": "object",
579
+ "required": [
580
+ "value",
581
+ "source",
582
+ "description"
583
+ ],
584
+ "additionalProperties": false,
249
585
  "properties": {
250
- "sku": { "type": "string" },
251
- "storage": { "type": "string" }
586
+ "value": {
587
+ "type": [
588
+ "string",
589
+ "boolean",
590
+ "number",
591
+ "object",
592
+ "array"
593
+ ]
594
+ },
595
+ "source": {
596
+ "type": "string",
597
+ "minLength": 1
598
+ },
599
+ "description": {
600
+ "type": "string",
601
+ "minLength": 1
602
+ },
603
+ "required": {
604
+ "type": "boolean"
605
+ }
252
606
  }
253
607
  },
254
- "storage": {
608
+ "enableAppInsights": {
255
609
  "type": "object",
610
+ "required": [
611
+ "value",
612
+ "source",
613
+ "description"
614
+ ],
615
+ "additionalProperties": false,
256
616
  "properties": {
257
- "size": { "type": "string" }
617
+ "value": {
618
+ "type": [
619
+ "string",
620
+ "boolean",
621
+ "number",
622
+ "object",
623
+ "array"
624
+ ]
625
+ },
626
+ "source": {
627
+ "type": "string",
628
+ "minLength": 1
629
+ },
630
+ "description": {
631
+ "type": "string",
632
+ "minLength": 1
633
+ },
634
+ "required": {
635
+ "type": "boolean"
636
+ }
258
637
  }
259
638
  },
260
- "frontDoor": {
639
+ "enableAzureOpenAI": {
261
640
  "type": "object",
641
+ "required": [
642
+ "value",
643
+ "source",
644
+ "description"
645
+ ],
646
+ "additionalProperties": false,
262
647
  "properties": {
263
- "enabled": { "type": "boolean" },
264
- "tier": { "type": "string" }
648
+ "value": {
649
+ "type": [
650
+ "string",
651
+ "boolean",
652
+ "number",
653
+ "object",
654
+ "array"
655
+ ]
656
+ },
657
+ "source": {
658
+ "type": "string",
659
+ "minLength": 1
660
+ },
661
+ "description": {
662
+ "type": "string",
663
+ "minLength": 1
664
+ },
665
+ "required": {
666
+ "type": "boolean"
667
+ }
265
668
  }
266
669
  },
267
- "monitoring": {
670
+ "enablePartnerCenterAttribution": {
268
671
  "type": "object",
672
+ "required": [
673
+ "value",
674
+ "source",
675
+ "description"
676
+ ],
677
+ "additionalProperties": false,
269
678
  "properties": {
270
- "applicationInsights": { "type": "boolean" },
271
- "logAnalytics": { "type": "boolean" },
272
- "alerts": { "type": "boolean" },
273
- "dashboards": { "type": "boolean" }
679
+ "value": {
680
+ "type": [
681
+ "string",
682
+ "boolean",
683
+ "number",
684
+ "object",
685
+ "array"
686
+ ]
687
+ },
688
+ "source": {
689
+ "type": "string",
690
+ "minLength": 1
691
+ },
692
+ "description": {
693
+ "type": "string",
694
+ "minLength": 1
695
+ },
696
+ "required": {
697
+ "type": "boolean"
698
+ }
274
699
  }
275
700
  },
276
- "networking": {
701
+ "enablePostgresPublicAccess": {
277
702
  "type": "object",
703
+ "required": [
704
+ "value",
705
+ "source",
706
+ "description"
707
+ ],
708
+ "additionalProperties": false,
278
709
  "properties": {
279
- "enablePrivateNetworking": { "type": "boolean" },
280
- "enableAzureDns": { "type": "boolean" },
281
- "privateEndpoints": { "type": "boolean" }
710
+ "value": {
711
+ "type": [
712
+ "boolean",
713
+ "array"
714
+ ],
715
+ "items": {
716
+ "type": "string",
717
+ "pattern": "^[0-9./*-]+$"
718
+ }
719
+ },
720
+ "source": {
721
+ "type": "string",
722
+ "minLength": 1
723
+ },
724
+ "description": {
725
+ "type": "string",
726
+ "minLength": 1
727
+ },
728
+ "required": {
729
+ "type": "boolean"
730
+ }
282
731
  }
283
- }
284
- }
285
- },
286
- "modules": {
287
- "type": "object",
288
- "description": "Infrastructure modules configuration",
289
- "properties": {
290
- "core": {
732
+ },
733
+ "allowedIPs": {
291
734
  "type": "object",
735
+ "required": [
736
+ "value",
737
+ "source",
738
+ "description"
739
+ ],
740
+ "additionalProperties": false,
292
741
  "properties": {
293
- "resourceGroup": {
294
- "type": "object",
295
- "properties": {
296
- "enabled": { "type": "boolean" },
297
- "required": { "type": "boolean" },
298
- "description": { "type": "string" }
742
+ "value": {
743
+ "type": [
744
+ "boolean",
745
+ "array"
746
+ ],
747
+ "items": {
748
+ "type": "string",
749
+ "pattern": "^[0-9./*-]+$"
299
750
  }
300
751
  },
301
- "network": {
302
- "type": "object",
303
- "properties": {
304
- "enabled": { "type": "boolean" },
305
- "required": { "type": "boolean" },
306
- "description": { "type": "string" }
307
- }
752
+ "source": {
753
+ "type": "string",
754
+ "minLength": 1
308
755
  },
309
- "keyVault": {
310
- "type": "object",
311
- "properties": {
312
- "enabled": { "type": "boolean" },
313
- "required": { "type": "boolean" },
314
- "description": { "type": "string" }
315
- }
756
+ "description": {
757
+ "type": "string",
758
+ "minLength": 1
316
759
  },
317
- "managedIdentity": {
318
- "type": "object",
319
- "properties": {
320
- "enabled": { "type": "boolean" },
321
- "required": { "type": "boolean" },
322
- "description": { "type": "string" }
323
- }
760
+ "required": {
761
+ "type": "boolean"
762
+ }
763
+ }
764
+ },
765
+ "adminPassword": {
766
+ "$ref": "#/definitions/envReference"
767
+ },
768
+ "deploymentEnvironment": {
769
+ "type": "object",
770
+ "required": [
771
+ "value",
772
+ "source",
773
+ "description"
774
+ ],
775
+ "additionalProperties": false,
776
+ "properties": {
777
+ "value": {
778
+ "type": [
779
+ "string",
780
+ "boolean",
781
+ "number",
782
+ "object",
783
+ "array"
784
+ ]
324
785
  },
325
- "appServicePlan": {
326
- "type": "object",
327
- "properties": {
328
- "enabled": { "type": "boolean" },
329
- "required": { "type": "boolean" },
330
- "description": { "type": "string" }
331
- }
786
+ "source": {
787
+ "type": "string",
788
+ "minLength": 1
789
+ },
790
+ "description": {
791
+ "type": "string",
792
+ "minLength": 1
793
+ },
794
+ "required": {
795
+ "type": "boolean"
332
796
  }
333
797
  }
334
798
  },
335
- "storage": {
799
+ "keycloakVerifyAudience": {
336
800
  "type": "object",
801
+ "required": [
802
+ "value",
803
+ "source",
804
+ "description"
805
+ ],
806
+ "additionalProperties": false,
337
807
  "properties": {
338
- "storageAccount": {
339
- "type": "object",
340
- "properties": {
341
- "enabled": { "type": "boolean" },
342
- "required": { "type": "boolean" },
343
- "description": { "type": "string" },
344
- "default": { "type": "boolean" }
345
- }
808
+ "value": {
809
+ "type": [
810
+ "string",
811
+ "boolean",
812
+ "number",
813
+ "object",
814
+ "array"
815
+ ]
346
816
  },
347
- "blobStorage": {
348
- "type": "object",
349
- "properties": {
350
- "enabled": { "type": "boolean" },
351
- "required": { "type": "boolean" },
352
- "description": { "type": "string" },
353
- "default": { "type": "boolean" },
354
- "dependsOn": {
355
- "type": "array",
356
- "items": { "type": "string" }
357
- }
358
- }
817
+ "source": {
818
+ "type": "string",
819
+ "minLength": 1
359
820
  },
360
- "fileShare": {
361
- "type": "object",
362
- "properties": {
363
- "enabled": { "type": "boolean" },
364
- "required": { "type": "boolean" },
365
- "description": { "type": "string" },
366
- "default": { "type": "boolean" },
367
- "dependsOn": {
368
- "type": "array",
369
- "items": { "type": "string" }
370
- }
371
- }
821
+ "description": {
822
+ "type": "string",
823
+ "minLength": 1
824
+ },
825
+ "required": {
826
+ "type": "boolean"
372
827
  }
373
828
  }
374
829
  },
375
- "database": {
830
+ "encryptionKey": {
831
+ "$ref": "#/definitions/envReference"
832
+ },
833
+ "acrLoginServer": {
376
834
  "type": "object",
835
+ "required": [
836
+ "value",
837
+ "source",
838
+ "description"
839
+ ],
840
+ "additionalProperties": false,
377
841
  "properties": {
378
- "postgresServer": {
379
- "type": "object",
380
- "properties": {
381
- "enabled": { "type": "boolean" },
382
- "required": { "type": "boolean" },
383
- "description": { "type": "string" },
384
- "default": { "type": "boolean" }
385
- }
842
+ "value": {
843
+ "type": [
844
+ "string",
845
+ "null"
846
+ ]
386
847
  },
387
- "postgresDatabases": {
388
- "type": "object",
389
- "properties": {
390
- "enabled": { "type": "boolean" },
391
- "required": { "type": "boolean" },
392
- "description": { "type": "string" },
393
- "default": { "type": "boolean" },
394
- "dependsOn": {
395
- "type": "array",
396
- "items": { "type": "string" }
397
- }
398
- }
848
+ "source": {
849
+ "type": "string",
850
+ "minLength": 1
399
851
  },
400
- "postgresAccess": {
401
- "type": "object",
402
- "properties": {
403
- "enabled": { "type": "boolean" },
404
- "required": { "type": "boolean" },
405
- "description": { "type": "string" },
406
- "default": { "type": "boolean" },
407
- "dependsOn": {
408
- "type": "array",
409
- "items": { "type": "string" }
410
- }
411
- }
852
+ "description": {
853
+ "type": "string",
854
+ "minLength": 1
855
+ },
856
+ "required": {
857
+ "type": "boolean"
412
858
  }
413
859
  }
414
860
  },
415
- "cache": {
861
+ "acrAdminUsername": {
416
862
  "type": "object",
863
+ "required": [
864
+ "value",
865
+ "source",
866
+ "description"
867
+ ],
868
+ "additionalProperties": false,
417
869
  "properties": {
418
- "redis": {
419
- "type": "object",
420
- "properties": {
421
- "enabled": { "type": "boolean" },
422
- "required": { "type": "boolean" },
423
- "description": { "type": "string" },
424
- "default": { "type": "boolean" }
425
- }
870
+ "value": {
871
+ "const": ""
872
+ },
873
+ "source": {
874
+ "type": "string",
875
+ "minLength": 1
876
+ },
877
+ "description": {
878
+ "type": "string",
879
+ "minLength": 1
880
+ },
881
+ "required": {
882
+ "type": "boolean"
426
883
  }
427
884
  }
428
885
  },
429
- "networking": {
886
+ "acrAdminPassword": {
430
887
  "type": "object",
888
+ "required": [
889
+ "value",
890
+ "source",
891
+ "description"
892
+ ],
893
+ "additionalProperties": false,
431
894
  "properties": {
432
- "frontDoor": {
433
- "type": "object",
434
- "properties": {
435
- "enabled": { "type": "boolean" },
436
- "required": { "type": "boolean" },
437
- "description": { "type": "string" },
438
- "default": { "type": "boolean" }
439
- }
895
+ "value": {
896
+ "const": ""
440
897
  },
441
- "customDomain": {
442
- "type": "object",
443
- "properties": {
444
- "enabled": { "type": "boolean" },
445
- "required": { "type": "boolean" },
446
- "description": { "type": "string" },
447
- "default": { "type": "boolean" },
448
- "standalone": { "type": "boolean" },
449
- "directWebAppBinding": { "type": "boolean" }
450
- }
898
+ "source": {
899
+ "type": "string",
900
+ "minLength": 1
451
901
  },
452
- "privateEndpoints": {
453
- "type": "object",
454
- "properties": {
455
- "enabled": { "type": "boolean" },
456
- "required": { "type": "boolean" },
457
- "description": { "type": "string" },
458
- "default": { "type": "boolean" }
459
- }
902
+ "description": {
903
+ "type": "string",
904
+ "minLength": 1
460
905
  },
461
- "dnsZones": {
462
- "type": "object",
463
- "properties": {
464
- "enabled": { "type": "boolean" },
465
- "required": { "type": "boolean" },
466
- "description": { "type": "string" },
467
- "default": { "type": "boolean" },
468
- "dependsOn": {
469
- "type": "array",
470
- "items": { "type": "string" }
471
- }
472
- }
906
+ "required": {
907
+ "type": "boolean"
473
908
  }
474
909
  }
475
910
  },
476
- "monitoring": {
911
+ "acrResourceId": {
477
912
  "type": "object",
913
+ "required": [
914
+ "value",
915
+ "source",
916
+ "description"
917
+ ],
918
+ "additionalProperties": false,
478
919
  "properties": {
479
- "applicationInsights": {
480
- "type": "object",
481
- "properties": {
482
- "enabled": { "type": "boolean" },
483
- "required": { "type": "boolean" },
484
- "description": { "type": "string" },
485
- "default": { "type": "boolean" }
486
- }
920
+ "value": {
921
+ "type": [
922
+ "string",
923
+ "null"
924
+ ]
487
925
  },
488
- "logAnalytics": {
489
- "type": "object",
490
- "properties": {
491
- "enabled": { "type": "boolean" },
492
- "required": { "type": "boolean" },
493
- "description": { "type": "string" },
494
- "default": { "type": "boolean" }
495
- }
926
+ "source": {
927
+ "type": "string",
928
+ "minLength": 1
496
929
  },
497
- "alerts": {
498
- "type": "object",
499
- "properties": {
500
- "enabled": { "type": "boolean" },
501
- "required": { "type": "boolean" },
502
- "description": { "type": "string" },
503
- "default": { "type": "boolean" },
504
- "dependsOn": {
505
- "type": "array",
506
- "items": { "type": "string" }
507
- }
508
- }
930
+ "description": {
931
+ "type": "string",
932
+ "minLength": 1
509
933
  },
510
- "dashboards": {
511
- "type": "object",
512
- "properties": {
513
- "enabled": { "type": "boolean" },
514
- "required": { "type": "boolean" },
515
- "description": { "type": "string" },
516
- "default": { "type": "boolean" },
517
- "dependsOn": {
518
- "type": "array",
519
- "items": { "type": "string" }
520
- }
521
- }
934
+ "required": {
935
+ "type": "boolean"
522
936
  }
523
937
  }
524
938
  },
525
- "containerRegistry": {
939
+ "deployRoleAssignments": {
526
940
  "type": "object",
941
+ "required": [
942
+ "value",
943
+ "source",
944
+ "description"
945
+ ],
946
+ "additionalProperties": false,
527
947
  "properties": {
528
- "acr": {
529
- "type": "object",
530
- "properties": {
531
- "enabled": { "type": "boolean" },
532
- "required": { "type": "boolean" },
533
- "description": { "type": "string" },
534
- "default": { "type": "boolean" }
535
- }
948
+ "value": {
949
+ "type": [
950
+ "string",
951
+ "boolean",
952
+ "number",
953
+ "object",
954
+ "array"
955
+ ]
956
+ },
957
+ "source": {
958
+ "type": "string",
959
+ "minLength": 1
960
+ },
961
+ "description": {
962
+ "type": "string",
963
+ "minLength": 1
964
+ },
965
+ "required": {
966
+ "type": "boolean"
967
+ },
968
+ "restoreValue": {
969
+ "type": [
970
+ "string",
971
+ "boolean",
972
+ "number",
973
+ "object",
974
+ "array"
975
+ ],
976
+ "description": "Value to restore when credential mode no longer applies."
977
+ },
978
+ "restoreSource": {
979
+ "type": "string",
980
+ "minLength": 1
981
+ }
982
+ }
983
+ },
984
+ "moriBaseUrl": {
985
+ "type": "object",
986
+ "required": [
987
+ "value",
988
+ "source",
989
+ "description"
990
+ ],
991
+ "additionalProperties": false,
992
+ "properties": {
993
+ "value": {
994
+ "type": [
995
+ "string",
996
+ "boolean",
997
+ "number",
998
+ "object",
999
+ "array"
1000
+ ]
1001
+ },
1002
+ "source": {
1003
+ "type": "string",
1004
+ "minLength": 1
1005
+ },
1006
+ "description": {
1007
+ "type": "string",
1008
+ "minLength": 1
1009
+ },
1010
+ "required": {
1011
+ "type": "boolean"
1012
+ }
1013
+ }
1014
+ },
1015
+ "moriCallbackApiKey": {
1016
+ "$ref": "#/definitions/envReference"
1017
+ },
1018
+ "entraCallbackStateSecret": {
1019
+ "type": "object",
1020
+ "required": [
1021
+ "value",
1022
+ "source",
1023
+ "description"
1024
+ ],
1025
+ "additionalProperties": false,
1026
+ "properties": {
1027
+ "value": {
1028
+ "type": "null"
1029
+ },
1030
+ "source": {
1031
+ "type": "string",
1032
+ "minLength": 1
1033
+ },
1034
+ "description": {
1035
+ "type": "string",
1036
+ "minLength": 1
1037
+ },
1038
+ "required": {
1039
+ "type": "boolean"
1040
+ },
1041
+ "requiredAt": {
1042
+ "const": "tenantActivation"
1043
+ }
1044
+ }
1045
+ },
1046
+ "entraIdClientId": {
1047
+ "type": "object",
1048
+ "required": [
1049
+ "value",
1050
+ "source",
1051
+ "description"
1052
+ ],
1053
+ "additionalProperties": false,
1054
+ "properties": {
1055
+ "value": {
1056
+ "type": "null"
1057
+ },
1058
+ "source": {
1059
+ "type": "string",
1060
+ "minLength": 1
1061
+ },
1062
+ "description": {
1063
+ "type": "string",
1064
+ "minLength": 1
1065
+ },
1066
+ "required": {
1067
+ "type": "boolean"
1068
+ },
1069
+ "requiredAt": {
1070
+ "const": "tenantActivation"
1071
+ }
1072
+ }
1073
+ },
1074
+ "entraIdClientSecret": {
1075
+ "type": "object",
1076
+ "required": [
1077
+ "value",
1078
+ "source",
1079
+ "description"
1080
+ ],
1081
+ "additionalProperties": false,
1082
+ "properties": {
1083
+ "value": {
1084
+ "type": "null"
1085
+ },
1086
+ "source": {
1087
+ "type": "string",
1088
+ "minLength": 1
1089
+ },
1090
+ "description": {
1091
+ "type": "string",
1092
+ "minLength": 1
1093
+ },
1094
+ "required": {
1095
+ "type": "boolean"
1096
+ },
1097
+ "requiredAt": {
1098
+ "const": "tenantActivation"
1099
+ }
1100
+ }
1101
+ },
1102
+ "entraIdTenantId": {
1103
+ "type": "object",
1104
+ "required": [
1105
+ "value",
1106
+ "source",
1107
+ "description"
1108
+ ],
1109
+ "additionalProperties": false,
1110
+ "properties": {
1111
+ "value": {
1112
+ "type": "null"
1113
+ },
1114
+ "source": {
1115
+ "type": "string",
1116
+ "minLength": 1
1117
+ },
1118
+ "description": {
1119
+ "type": "string",
1120
+ "minLength": 1
1121
+ },
1122
+ "required": {
1123
+ "type": "boolean"
1124
+ },
1125
+ "requiredAt": {
1126
+ "const": "tenantActivation"
1127
+ }
1128
+ }
1129
+ },
1130
+ "licenseEdition": {
1131
+ "type": "object",
1132
+ "required": [
1133
+ "value",
1134
+ "source",
1135
+ "description"
1136
+ ],
1137
+ "additionalProperties": false,
1138
+ "properties": {
1139
+ "value": {
1140
+ "type": "string",
1141
+ "pattern": "^(COMMUNITY|STANDARD|ENTERPRISE|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$"
1142
+ },
1143
+ "source": {
1144
+ "type": "string",
1145
+ "minLength": 1
1146
+ },
1147
+ "description": {
1148
+ "type": "string",
1149
+ "minLength": 1
1150
+ },
1151
+ "required": {
1152
+ "type": "boolean"
1153
+ }
1154
+ }
1155
+ },
1156
+ "onboardingMode": {
1157
+ "type": "object",
1158
+ "required": [
1159
+ "value",
1160
+ "source",
1161
+ "description"
1162
+ ],
1163
+ "additionalProperties": false,
1164
+ "properties": {
1165
+ "value": {
1166
+ "enum": [
1167
+ "saasDirect",
1168
+ "customerOwned"
1169
+ ]
1170
+ },
1171
+ "source": {
1172
+ "type": "string",
1173
+ "minLength": 1
1174
+ },
1175
+ "description": {
1176
+ "type": "string",
1177
+ "minLength": 1
1178
+ },
1179
+ "required": {
1180
+ "type": "boolean"
1181
+ }
1182
+ }
1183
+ },
1184
+ "misoImageTag": {
1185
+ "type": "object",
1186
+ "required": [
1187
+ "value",
1188
+ "source",
1189
+ "description"
1190
+ ],
1191
+ "additionalProperties": false,
1192
+ "properties": {
1193
+ "value": {
1194
+ "type": [
1195
+ "string",
1196
+ "boolean",
1197
+ "number",
1198
+ "object",
1199
+ "array"
1200
+ ]
1201
+ },
1202
+ "source": {
1203
+ "type": "string",
1204
+ "minLength": 1
1205
+ },
1206
+ "description": {
1207
+ "type": "string",
1208
+ "minLength": 1
1209
+ },
1210
+ "required": {
1211
+ "type": "boolean"
1212
+ }
1213
+ }
1214
+ },
1215
+ "keycloakImageTag": {
1216
+ "type": "object",
1217
+ "required": [
1218
+ "value",
1219
+ "source",
1220
+ "description"
1221
+ ],
1222
+ "additionalProperties": false,
1223
+ "properties": {
1224
+ "value": {
1225
+ "type": [
1226
+ "string",
1227
+ "boolean",
1228
+ "number",
1229
+ "object",
1230
+ "array"
1231
+ ]
1232
+ },
1233
+ "source": {
1234
+ "type": "string",
1235
+ "minLength": 1
1236
+ },
1237
+ "description": {
1238
+ "type": "string",
1239
+ "minLength": 1
1240
+ },
1241
+ "required": {
1242
+ "type": "boolean"
536
1243
  }
537
1244
  }
538
1245
  }
539
1246
  }
540
- }
541
- },
542
- "allOf": [
543
- {
544
- "if": {
545
- "properties": {
546
- "customDomain": {
547
- "properties": {
548
- "enabled": {
549
- "const": true
550
- }
1247
+ },
1248
+ "outputs": {
1249
+ "type": "object",
1250
+ "additionalProperties": false,
1251
+ "required": [
1252
+ "resourceGroupName",
1253
+ "vnetId",
1254
+ "keyVaultName",
1255
+ "scriptStorageAccountName",
1256
+ "flowiseFileShareName",
1257
+ "managedIdentityName",
1258
+ "appServicePlanName",
1259
+ "webAppName",
1260
+ "webAppUrl",
1261
+ "postgresServerName",
1262
+ "postgresServerFqdn",
1263
+ "postgresMisoDatabaseName",
1264
+ "postgresLogsDatabaseName",
1265
+ "postgresKeycloakDatabaseName",
1266
+ "keycloakWebAppName",
1267
+ "keycloakWebAppUrl",
1268
+ "keycloakRealmUrl",
1269
+ "keycloakAdminUser",
1270
+ "portalUrl"
1271
+ ],
1272
+ "properties": {
1273
+ "resourceGroupName": {
1274
+ "$ref": "#/definitions/output"
1275
+ },
1276
+ "vnetId": {
1277
+ "$ref": "#/definitions/output"
1278
+ },
1279
+ "keyVaultName": {
1280
+ "$ref": "#/definitions/output"
1281
+ },
1282
+ "scriptStorageAccountName": {
1283
+ "$ref": "#/definitions/output"
1284
+ },
1285
+ "flowiseFileShareName": {
1286
+ "$ref": "#/definitions/output"
1287
+ },
1288
+ "managedIdentityName": {
1289
+ "$ref": "#/definitions/output"
1290
+ },
1291
+ "appServicePlanName": {
1292
+ "$ref": "#/definitions/output"
1293
+ },
1294
+ "webAppName": {
1295
+ "$ref": "#/definitions/output"
1296
+ },
1297
+ "webAppUrl": {
1298
+ "$ref": "#/definitions/output"
1299
+ },
1300
+ "postgresServerName": {
1301
+ "$ref": "#/definitions/output"
1302
+ },
1303
+ "postgresServerFqdn": {
1304
+ "$ref": "#/definitions/output"
1305
+ },
1306
+ "postgresMisoDatabaseName": {
1307
+ "$ref": "#/definitions/output"
1308
+ },
1309
+ "postgresLogsDatabaseName": {
1310
+ "$ref": "#/definitions/output"
1311
+ },
1312
+ "postgresKeycloakDatabaseName": {
1313
+ "$ref": "#/definitions/output"
1314
+ },
1315
+ "keycloakWebAppName": {
1316
+ "$ref": "#/definitions/output"
1317
+ },
1318
+ "keycloakWebAppUrl": {
1319
+ "$ref": "#/definitions/output"
1320
+ },
1321
+ "keycloakRealmUrl": {
1322
+ "$ref": "#/definitions/output"
1323
+ },
1324
+ "keycloakAdminUser": {
1325
+ "$ref": "#/definitions/output"
1326
+ },
1327
+ "portalUrl": {
1328
+ "$ref": "#/definitions/output"
1329
+ }
1330
+ }
1331
+ },
1332
+ "controllerUrl": {
1333
+ "type": "object",
1334
+ "required": [
1335
+ "value",
1336
+ "source",
1337
+ "description"
1338
+ ],
1339
+ "additionalProperties": false,
1340
+ "properties": {
1341
+ "value": {
1342
+ "type": [
1343
+ "string",
1344
+ "null"
1345
+ ],
1346
+ "pattern": "^https://"
1347
+ },
1348
+ "source": {
1349
+ "type": "string",
1350
+ "minLength": 1
1351
+ },
1352
+ "description": {
1353
+ "type": "string",
1354
+ "minLength": 1
1355
+ },
1356
+ "required": {
1357
+ "type": "boolean"
1358
+ }
1359
+ }
1360
+ },
1361
+ "tenantActivation": {
1362
+ "type": "object",
1363
+ "required": [
1364
+ "status",
1365
+ "url"
1366
+ ],
1367
+ "additionalProperties": false,
1368
+ "properties": {
1369
+ "status": {
1370
+ "type": "object",
1371
+ "required": [
1372
+ "value",
1373
+ "source",
1374
+ "description"
1375
+ ],
1376
+ "additionalProperties": false,
1377
+ "properties": {
1378
+ "value": {
1379
+ "enum": [
1380
+ "pending",
1381
+ "active",
1382
+ "inactive",
1383
+ "unknown"
1384
+ ]
1385
+ },
1386
+ "source": {
1387
+ "type": "string",
1388
+ "minLength": 1
1389
+ },
1390
+ "description": {
1391
+ "type": "string",
1392
+ "minLength": 1
1393
+ },
1394
+ "required": {
1395
+ "type": "boolean"
1396
+ },
1397
+ "checkedAt": {
1398
+ "type": "string",
1399
+ "format": "date-time"
1400
+ }
1401
+ }
1402
+ },
1403
+ "url": {
1404
+ "type": "object",
1405
+ "required": [
1406
+ "value",
1407
+ "source",
1408
+ "description"
1409
+ ],
1410
+ "additionalProperties": false,
1411
+ "properties": {
1412
+ "value": {
1413
+ "type": [
1414
+ "string",
1415
+ "null"
1416
+ ],
1417
+ "pattern": "^https://"
1418
+ },
1419
+ "source": {
1420
+ "type": "string",
1421
+ "minLength": 1
1422
+ },
1423
+ "description": {
1424
+ "type": "string",
1425
+ "minLength": 1
1426
+ },
1427
+ "required": {
1428
+ "type": "boolean"
551
1429
  }
552
1430
  }
553
1431
  }
554
- },
555
- "then": {
556
- "required": ["customDomain"],
557
- "properties": {
558
- "customDomain": {
559
- "required": ["name"]
1432
+ }
1433
+ },
1434
+ "deployment": {
1435
+ "type": "object",
1436
+ "required": [
1437
+ "status"
1438
+ ],
1439
+ "additionalProperties": false,
1440
+ "properties": {
1441
+ "status": {
1442
+ "type": "object",
1443
+ "required": [
1444
+ "value",
1445
+ "source",
1446
+ "description"
1447
+ ],
1448
+ "additionalProperties": false,
1449
+ "properties": {
1450
+ "value": {
1451
+ "enum": [
1452
+ "not-deployed",
1453
+ "running",
1454
+ "succeeded",
1455
+ "failed"
1456
+ ]
1457
+ },
1458
+ "source": {
1459
+ "type": "string",
1460
+ "minLength": 1
1461
+ },
1462
+ "description": {
1463
+ "type": "string",
1464
+ "minLength": 1
1465
+ },
1466
+ "required": {
1467
+ "type": "boolean"
1468
+ }
1469
+ }
1470
+ },
1471
+ "name": {
1472
+ "type": [
1473
+ "string",
1474
+ "null"
1475
+ ]
1476
+ },
1477
+ "id": {
1478
+ "type": [
1479
+ "string",
1480
+ "null"
1481
+ ]
1482
+ },
1483
+ "correlationId": {
1484
+ "type": [
1485
+ "string",
1486
+ "null"
1487
+ ]
1488
+ },
1489
+ "inputHash": {
1490
+ "type": [
1491
+ "string",
1492
+ "null"
1493
+ ],
1494
+ "pattern": "^[0-9a-f]{64}$"
1495
+ },
1496
+ "completedAt": {
1497
+ "type": [
1498
+ "string",
1499
+ "null"
1500
+ ],
1501
+ "format": "date-time"
1502
+ }
1503
+ }
1504
+ },
1505
+ "moriBaseUrl": {
1506
+ "type": "object",
1507
+ "required": [
1508
+ "value",
1509
+ "source",
1510
+ "description"
1511
+ ],
1512
+ "additionalProperties": false,
1513
+ "properties": {
1514
+ "value": {
1515
+ "type": "string",
1516
+ "pattern": "^$|^https://"
1517
+ },
1518
+ "source": {
1519
+ "type": "string",
1520
+ "minLength": 1
1521
+ },
1522
+ "description": {
1523
+ "type": "string",
1524
+ "minLength": 1
1525
+ },
1526
+ "required": {
1527
+ "type": "boolean"
1528
+ }
1529
+ }
1530
+ },
1531
+ "marketplaceSubscriptionId": {
1532
+ "type": "object",
1533
+ "required": [
1534
+ "value",
1535
+ "source",
1536
+ "description"
1537
+ ],
1538
+ "additionalProperties": false,
1539
+ "properties": {
1540
+ "value": {
1541
+ "type": "string",
1542
+ "maxLength": 255
1543
+ },
1544
+ "source": {
1545
+ "type": "string",
1546
+ "minLength": 1
1547
+ },
1548
+ "description": {
1549
+ "type": "string",
1550
+ "minLength": 1
1551
+ },
1552
+ "required": {
1553
+ "type": "boolean"
1554
+ }
1555
+ }
1556
+ },
1557
+ "registration": {
1558
+ "type": "object",
1559
+ "required": [
1560
+ "status"
1561
+ ],
1562
+ "additionalProperties": false,
1563
+ "properties": {
1564
+ "status": {
1565
+ "type": "object",
1566
+ "required": [
1567
+ "value",
1568
+ "source",
1569
+ "description"
1570
+ ],
1571
+ "additionalProperties": false,
1572
+ "properties": {
1573
+ "value": {
1574
+ "enum": [
1575
+ "not-registered",
1576
+ "requested",
1577
+ "registered",
1578
+ "conflict",
1579
+ "failed"
1580
+ ]
1581
+ },
1582
+ "source": {
1583
+ "type": "string",
1584
+ "minLength": 1
1585
+ },
1586
+ "description": {
1587
+ "type": "string",
1588
+ "minLength": 1
1589
+ },
1590
+ "required": {
1591
+ "type": "boolean"
1592
+ }
1593
+ }
1594
+ },
1595
+ "evidence": {
1596
+ "type": [
1597
+ "object",
1598
+ "null"
1599
+ ],
1600
+ "additionalProperties": false,
1601
+ "properties": {
1602
+ "apiKeyId": {
1603
+ "type": [
1604
+ "string",
1605
+ "null"
1606
+ ]
1607
+ },
1608
+ "keyPrefix": {
1609
+ "type": [
1610
+ "string",
1611
+ "null"
1612
+ ]
1613
+ },
1614
+ "createdAt": {
1615
+ "type": [
1616
+ "string",
1617
+ "null"
1618
+ ]
1619
+ },
1620
+ "installation": {
1621
+ "type": [
1622
+ "object",
1623
+ "null"
1624
+ ]
1625
+ },
1626
+ "entitlement": {
1627
+ "type": [
1628
+ "object",
1629
+ "null"
1630
+ ]
1631
+ }
560
1632
  }
561
1633
  }
562
1634
  }
563
1635
  },
1636
+ "variables": {
1637
+ "type": "object",
1638
+ "additionalProperties": false,
1639
+ "patternProperties": {
1640
+ "^[A-Z_][A-Z0-9_]*$": {
1641
+ "$ref": "#/definitions/variable"
1642
+ }
1643
+ }
1644
+ },
1645
+ "generated": {
1646
+ "$ref": "#/definitions/generated"
1647
+ }
1648
+ },
1649
+ "additionalProperties": false,
1650
+ "allOf": [
564
1651
  {
565
1652
  "if": {
566
1653
  "properties": {
567
- "frontDoor": {
1654
+ "vendor": {
568
1655
  "properties": {
569
- "enablePrivateLink": {
570
- "const": true
1656
+ "value": {
1657
+ "const": "AZURE"
571
1658
  }
572
1659
  }
573
1660
  }
574
1661
  }
575
1662
  },
576
1663
  "then": {
577
- "properties": {
578
- "frontDoor": {
579
- "properties": {
580
- "tier": {
581
- "const": "Premium"
582
- }
1664
+ "required": [
1665
+ "acrName",
1666
+ "acrAuth",
1667
+ "allowMyIp",
1668
+ "preset",
1669
+ "parameters",
1670
+ "outputs",
1671
+ "controllerUrl",
1672
+ "tenantActivation",
1673
+ "deployment"
1674
+ ],
1675
+ "not": {
1676
+ "anyOf": [
1677
+ {
1678
+ "required": [
1679
+ "moriBaseUrl"
1680
+ ]
1681
+ },
1682
+ {
1683
+ "required": [
1684
+ "registration"
1685
+ ]
1686
+ },
1687
+ {
1688
+ "required": [
1689
+ "marketplaceSubscriptionId"
1690
+ ]
583
1691
  }
584
- }
1692
+ ]
1693
+ }
1694
+ },
1695
+ "else": {
1696
+ "required": [
1697
+ "moriBaseUrl",
1698
+ "marketplaceSubscriptionId",
1699
+ "registration"
1700
+ ],
1701
+ "not": {
1702
+ "anyOf": [
1703
+ {
1704
+ "required": [
1705
+ "parameters"
1706
+ ]
1707
+ },
1708
+ {
1709
+ "required": [
1710
+ "outputs"
1711
+ ]
1712
+ },
1713
+ {
1714
+ "required": [
1715
+ "acrName"
1716
+ ]
1717
+ }
1718
+ ]
585
1719
  }
586
1720
  }
587
1721
  }