@swovohq/fuel 0.2.2-alpha.86 → 0.2.2-alpha.88
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/dist/bin/fuel.js +10 -31
- package/dist/bin/fuel.js.map +1 -1
- package/dist/commands/config-verify.d.ts.map +1 -1
- package/dist/commands/config-verify.js +14 -6
- package/dist/commands/config-verify.js.map +1 -1
- package/dist/commands/create-app.d.ts.map +1 -1
- package/dist/commands/create-app.js +1 -0
- package/dist/commands/create-app.js.map +1 -1
- package/dist/commands/infra-deploy.d.ts +4 -0
- package/dist/commands/infra-deploy.d.ts.map +1 -1
- package/dist/commands/infra-deploy.js +72 -43
- package/dist/commands/infra-deploy.js.map +1 -1
- package/dist/commands/infra-destroy.js +3 -3
- package/dist/commands/infra-destroy.js.map +1 -1
- package/dist/commands/infra-init.d.ts +91 -0
- package/dist/commands/infra-init.d.ts.map +1 -1
- package/dist/commands/infra-init.js +451 -78
- package/dist/commands/infra-init.js.map +1 -1
- package/dist/commands/infra-pull.d.ts.map +1 -1
- package/dist/commands/infra-pull.js +6 -5
- package/dist/commands/infra-pull.js.map +1 -1
- package/dist/infra/azure-defaults.d.ts +49 -0
- package/dist/infra/azure-defaults.d.ts.map +1 -0
- package/dist/infra/azure-defaults.js +52 -0
- package/dist/infra/azure-defaults.js.map +1 -0
- package/dist/infra/azure-keyvault-client.d.ts +4 -0
- package/dist/infra/azure-keyvault-client.d.ts.map +1 -0
- package/dist/infra/azure-keyvault-client.js +57 -0
- package/dist/infra/azure-keyvault-client.js.map +1 -0
- package/dist/infra/azure-rbac.d.ts +11 -0
- package/dist/infra/azure-rbac.d.ts.map +1 -0
- package/dist/infra/azure-rbac.js +47 -0
- package/dist/infra/azure-rbac.js.map +1 -0
- package/dist/infra/azure-state-storage.d.ts +20 -0
- package/dist/infra/azure-state-storage.d.ts.map +1 -0
- package/dist/infra/azure-state-storage.js +229 -0
- package/dist/infra/azure-state-storage.js.map +1 -0
- package/dist/infra/credentials.d.ts +2 -2
- package/dist/infra/credentials.d.ts.map +1 -1
- package/dist/infra/credentials.js +3 -2
- package/dist/infra/credentials.js.map +1 -1
- package/dist/infra/deployment-detect.d.ts +9 -0
- package/dist/infra/deployment-detect.d.ts.map +1 -0
- package/dist/infra/deployment-detect.js +53 -0
- package/dist/infra/deployment-detect.js.map +1 -0
- package/dist/infra/github-client.d.ts.map +1 -1
- package/dist/infra/github-client.js +1 -4
- package/dist/infra/github-client.js.map +1 -1
- package/dist/infra/orchestrator.d.ts.map +1 -1
- package/dist/infra/orchestrator.js +193 -65
- package/dist/infra/orchestrator.js.map +1 -1
- package/dist/infra/preflight.js +11 -11
- package/dist/infra/preflight.js.map +1 -1
- package/dist/infra/remote-secret.d.ts +14 -0
- package/dist/infra/remote-secret.d.ts.map +1 -0
- package/dist/infra/remote-secret.js +42 -0
- package/dist/infra/remote-secret.js.map +1 -0
- package/dist/infra/template-engine.d.ts +13 -0
- package/dist/infra/template-engine.d.ts.map +1 -1
- package/dist/infra/template-engine.js +106 -38
- package/dist/infra/template-engine.js.map +1 -1
- package/dist/infra/tofu-runner.d.ts +4 -3
- package/dist/infra/tofu-runner.d.ts.map +1 -1
- package/dist/infra/tofu-runner.js +36 -27
- package/dist/infra/tofu-runner.js.map +1 -1
- package/dist/infra/types.d.ts +239 -16
- package/dist/infra/types.d.ts.map +1 -1
- package/dist/infra/types.js +153 -17
- package/dist/infra/types.js.map +1 -1
- package/package.json +10 -2
- package/schema/fuel.schema.json +528 -83
package/schema/fuel.schema.json
CHANGED
|
@@ -1,158 +1,603 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
-
"
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
"required": ["name", "deployment", "ssl", "apps"],
|
|
7
|
-
"additionalProperties": false,
|
|
8
|
-
"properties": {
|
|
9
|
-
"name": {
|
|
10
|
-
"type": "string",
|
|
11
|
-
"minLength": 1,
|
|
12
|
-
"description": "Project name. Used as a prefix for all AWS and GitHub resources."
|
|
3
|
+
"oneOf": [
|
|
4
|
+
{
|
|
5
|
+
"$ref": "#/definitions/ecsConfig"
|
|
13
6
|
},
|
|
14
|
-
|
|
15
|
-
"
|
|
16
|
-
"enum": ["ecs"],
|
|
17
|
-
"description": "Deployment target. Only 'ecs' is currently supported."
|
|
18
|
-
},
|
|
19
|
-
"ssl": {
|
|
20
|
-
"type": "string",
|
|
21
|
-
"minLength": 1,
|
|
22
|
-
"description": "ARN of the ACM SSL certificate (e.g. arn:aws:acm:us-east-1:123:certificate/abc)."
|
|
23
|
-
},
|
|
24
|
-
"slack_webhook_url": {
|
|
25
|
-
"type": "string",
|
|
26
|
-
"description": "Slack incoming webhook URL for deploy failure notifications. Leave empty to disable."
|
|
27
|
-
},
|
|
28
|
-
"apps": {
|
|
29
|
-
"type": "array",
|
|
30
|
-
"minItems": 1,
|
|
31
|
-
"description": "List of applications to deploy.",
|
|
32
|
-
"items": {
|
|
33
|
-
"$ref": "#/definitions/app"
|
|
34
|
-
}
|
|
7
|
+
{
|
|
8
|
+
"$ref": "#/definitions/azureConfig"
|
|
35
9
|
}
|
|
36
|
-
|
|
10
|
+
],
|
|
37
11
|
"definitions": {
|
|
38
|
-
"
|
|
12
|
+
"ecsConfig": {
|
|
39
13
|
"type": "object",
|
|
40
|
-
"required": ["name", "dockerfile"],
|
|
41
|
-
"additionalProperties": false,
|
|
42
14
|
"properties": {
|
|
43
15
|
"name": {
|
|
44
16
|
"type": "string",
|
|
45
|
-
"minLength": 1
|
|
46
|
-
"description": "Worker name. Used as the ECS service name."
|
|
17
|
+
"minLength": 1
|
|
47
18
|
},
|
|
48
|
-
"
|
|
19
|
+
"slack_webhook_url": {
|
|
20
|
+
"type": "string"
|
|
21
|
+
},
|
|
22
|
+
"github_repo_name": {
|
|
23
|
+
"description": "Name of the GitHub repository to create/use. Defaults to \"${name}-monorepo\". Set this explicitly when this fuel.yml should target a repo already used by another environment (e.g. a separate prod fuel.yml with its own `name` pointing at the same repo as dev).",
|
|
24
|
+
"type": "string"
|
|
25
|
+
},
|
|
26
|
+
"deployment": {
|
|
27
|
+
"type": "string",
|
|
28
|
+
"const": "ecs"
|
|
29
|
+
},
|
|
30
|
+
"ssl": {
|
|
49
31
|
"type": "string",
|
|
50
32
|
"minLength": 1,
|
|
51
|
-
"description": "
|
|
33
|
+
"description": "ACM certificate ARN attached to the ALB HTTPS listener, e.g. arn:aws:acm:us-east-1:ACCOUNT_ID:certificate/CERTIFICATE_ID."
|
|
34
|
+
},
|
|
35
|
+
"apps": {
|
|
36
|
+
"minItems": 1,
|
|
37
|
+
"type": "array",
|
|
38
|
+
"items": {
|
|
39
|
+
"$ref": "#/definitions/ecsApp"
|
|
40
|
+
}
|
|
52
41
|
}
|
|
53
|
-
}
|
|
42
|
+
},
|
|
43
|
+
"required": [
|
|
44
|
+
"name",
|
|
45
|
+
"deployment",
|
|
46
|
+
"ssl",
|
|
47
|
+
"apps"
|
|
48
|
+
],
|
|
49
|
+
"additionalProperties": {}
|
|
54
50
|
},
|
|
55
|
-
"
|
|
51
|
+
"ecsApp": {
|
|
56
52
|
"type": "object",
|
|
57
|
-
"required": ["name", "technology", "dockerfile", "health_check_path", "domain", "port"],
|
|
58
|
-
"additionalProperties": false,
|
|
59
53
|
"properties": {
|
|
60
54
|
"name": {
|
|
61
55
|
"type": "string",
|
|
62
|
-
"minLength": 1
|
|
63
|
-
"description": "App name. Used as the ECS service and task definition name."
|
|
56
|
+
"minLength": 1
|
|
64
57
|
},
|
|
65
58
|
"technology": {
|
|
66
59
|
"type": "string",
|
|
67
|
-
"
|
|
68
|
-
"description": "Application
|
|
60
|
+
"minLength": 1,
|
|
61
|
+
"description": "Application role/framework. 'nest' and 'react' get framework-specific env var injection (see docs); any other value deploys as a plain container with no extra env vars — pass everything explicitly via variables/build_env."
|
|
69
62
|
},
|
|
70
63
|
"dockerfile": {
|
|
71
64
|
"type": "string",
|
|
72
|
-
"minLength": 1
|
|
73
|
-
"description": "Path to the Dockerfile relative to the project root."
|
|
65
|
+
"minLength": 1
|
|
74
66
|
},
|
|
75
67
|
"health_check_path": {
|
|
76
68
|
"type": "string",
|
|
77
|
-
"minLength": 1
|
|
78
|
-
"description": "HTTP path for ALB health checks (e.g. /health)."
|
|
69
|
+
"minLength": 1
|
|
79
70
|
},
|
|
80
71
|
"domain": {
|
|
81
72
|
"type": "string",
|
|
82
|
-
"minLength": 1
|
|
83
|
-
"description": "Domain name for this app (e.g. api.example.com)."
|
|
73
|
+
"minLength": 1
|
|
84
74
|
},
|
|
85
75
|
"port": {
|
|
86
76
|
"type": "integer",
|
|
87
|
-
"
|
|
88
|
-
"
|
|
77
|
+
"exclusiveMinimum": 0,
|
|
78
|
+
"maximum": 9007199254740991
|
|
89
79
|
},
|
|
90
80
|
"branch": {
|
|
91
|
-
"type": "string",
|
|
92
81
|
"default": "main",
|
|
93
|
-
"
|
|
82
|
+
"type": "string"
|
|
94
83
|
},
|
|
95
84
|
"template_repo_branch": {
|
|
96
|
-
"type": "string",
|
|
97
85
|
"default": "main",
|
|
98
|
-
"
|
|
86
|
+
"type": "string"
|
|
99
87
|
},
|
|
100
88
|
"postgres": {
|
|
101
|
-
"type": "boolean",
|
|
102
89
|
"default": false,
|
|
103
|
-
"description": "Provision an RDS PostgreSQL instance for this app."
|
|
90
|
+
"description": "Provision an RDS PostgreSQL instance for this app.",
|
|
91
|
+
"type": "boolean"
|
|
104
92
|
},
|
|
105
93
|
"redis": {
|
|
106
|
-
"type": "boolean",
|
|
107
94
|
"default": false,
|
|
108
|
-
"description": "Provision an ElastiCache Redis
|
|
95
|
+
"description": "Provision an ElastiCache Redis instance for this app.",
|
|
96
|
+
"type": "boolean"
|
|
109
97
|
},
|
|
110
98
|
"variables": {
|
|
111
|
-
"type": "object",
|
|
112
|
-
"additionalProperties": { "type": "string" },
|
|
113
99
|
"default": {},
|
|
114
|
-
"
|
|
100
|
+
"type": "object",
|
|
101
|
+
"propertyNames": {
|
|
102
|
+
"type": "string"
|
|
103
|
+
},
|
|
104
|
+
"additionalProperties": {
|
|
105
|
+
"type": "string"
|
|
106
|
+
}
|
|
115
107
|
},
|
|
116
108
|
"build_env": {
|
|
117
|
-
"type": "object",
|
|
118
|
-
"additionalProperties": { "type": "string" },
|
|
119
109
|
"default": {},
|
|
120
|
-
"
|
|
110
|
+
"type": "object",
|
|
111
|
+
"propertyNames": {
|
|
112
|
+
"type": "string"
|
|
113
|
+
},
|
|
114
|
+
"additionalProperties": {
|
|
115
|
+
"type": "string"
|
|
116
|
+
}
|
|
121
117
|
},
|
|
122
118
|
"workers": {
|
|
123
|
-
"type": "array",
|
|
124
119
|
"default": [],
|
|
125
|
-
"
|
|
120
|
+
"type": "array",
|
|
126
121
|
"items": {
|
|
127
122
|
"$ref": "#/definitions/worker"
|
|
128
123
|
}
|
|
129
124
|
},
|
|
130
125
|
"cpu_units": {
|
|
131
|
-
"type": "integer",
|
|
132
|
-
"minimum": 1,
|
|
133
126
|
"default": 1024,
|
|
134
|
-
"description": "CPU units
|
|
127
|
+
"description": "ECS task CPU units (1024 = 1 vCPU).",
|
|
128
|
+
"type": "integer",
|
|
129
|
+
"exclusiveMinimum": 0,
|
|
130
|
+
"maximum": 9007199254740991
|
|
135
131
|
},
|
|
136
132
|
"memory_units": {
|
|
137
|
-
"type": "integer",
|
|
138
|
-
"minimum": 1,
|
|
139
133
|
"default": 2048,
|
|
140
|
-
"description": "
|
|
134
|
+
"description": "ECS task memory in MB.",
|
|
135
|
+
"type": "integer",
|
|
136
|
+
"exclusiveMinimum": 0,
|
|
137
|
+
"maximum": 9007199254740991
|
|
141
138
|
},
|
|
142
139
|
"db_instance_type": {
|
|
143
|
-
"
|
|
144
|
-
"
|
|
140
|
+
"description": "RDS instance type, e.g. db.t3.small. Only used when postgres is true.",
|
|
141
|
+
"type": "string"
|
|
145
142
|
},
|
|
146
143
|
"db_allocated_storage": {
|
|
144
|
+
"description": "RDS allocated storage in GB. Only used when postgres is true.",
|
|
147
145
|
"type": "integer",
|
|
148
|
-
"
|
|
149
|
-
"
|
|
146
|
+
"exclusiveMinimum": 0,
|
|
147
|
+
"maximum": 9007199254740991
|
|
150
148
|
},
|
|
151
149
|
"redis_instance_type": {
|
|
150
|
+
"description": "ElastiCache node type, e.g. cache.t3.small. Only used when redis is true.",
|
|
151
|
+
"type": "string"
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
"required": [
|
|
155
|
+
"name",
|
|
156
|
+
"technology",
|
|
157
|
+
"dockerfile",
|
|
158
|
+
"health_check_path",
|
|
159
|
+
"domain",
|
|
160
|
+
"port",
|
|
161
|
+
"branch",
|
|
162
|
+
"template_repo_branch",
|
|
163
|
+
"postgres",
|
|
164
|
+
"redis",
|
|
165
|
+
"variables",
|
|
166
|
+
"build_env",
|
|
167
|
+
"workers",
|
|
168
|
+
"cpu_units",
|
|
169
|
+
"memory_units"
|
|
170
|
+
],
|
|
171
|
+
"additionalProperties": {}
|
|
172
|
+
},
|
|
173
|
+
"worker": {
|
|
174
|
+
"type": "object",
|
|
175
|
+
"properties": {
|
|
176
|
+
"name": {
|
|
177
|
+
"type": "string",
|
|
178
|
+
"minLength": 1,
|
|
179
|
+
"description": "Worker name. Used as the ECS service name / Container App name depending on deployment."
|
|
180
|
+
},
|
|
181
|
+
"dockerfile": {
|
|
152
182
|
"type": "string",
|
|
153
|
-
"
|
|
183
|
+
"minLength": 1,
|
|
184
|
+
"description": "Path to the worker's Dockerfile relative to the project root."
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"required": [
|
|
188
|
+
"name",
|
|
189
|
+
"dockerfile"
|
|
190
|
+
],
|
|
191
|
+
"additionalProperties": {}
|
|
192
|
+
},
|
|
193
|
+
"azureConfig": {
|
|
194
|
+
"type": "object",
|
|
195
|
+
"properties": {
|
|
196
|
+
"name": {
|
|
197
|
+
"type": "string",
|
|
198
|
+
"minLength": 1
|
|
199
|
+
},
|
|
200
|
+
"slack_webhook_url": {
|
|
201
|
+
"type": "string"
|
|
202
|
+
},
|
|
203
|
+
"github_repo_name": {
|
|
204
|
+
"description": "Name of the GitHub repository to create/use. Defaults to \"${name}-monorepo\". Set this explicitly when this fuel.yml should target a repo already used by another environment (e.g. a separate prod fuel.yml with its own `name` pointing at the same repo as dev).",
|
|
205
|
+
"type": "string"
|
|
206
|
+
},
|
|
207
|
+
"deployment": {
|
|
208
|
+
"type": "string",
|
|
209
|
+
"const": "azure"
|
|
210
|
+
},
|
|
211
|
+
"location": {
|
|
212
|
+
"default": "eastus2",
|
|
213
|
+
"description": "Azure region for all resources.",
|
|
214
|
+
"type": "string"
|
|
215
|
+
},
|
|
216
|
+
"monitor": {
|
|
217
|
+
"default": {
|
|
218
|
+
"daily_data_cap_gb": 1,
|
|
219
|
+
"retention_days": 90,
|
|
220
|
+
"dashboard_count": 0
|
|
221
|
+
},
|
|
222
|
+
"description": "Application Insights / Log Analytics settings shared across all apps.",
|
|
223
|
+
"type": "object",
|
|
224
|
+
"properties": {
|
|
225
|
+
"daily_data_cap_gb": {
|
|
226
|
+
"default": 1,
|
|
227
|
+
"type": "number",
|
|
228
|
+
"exclusiveMinimum": 0
|
|
229
|
+
},
|
|
230
|
+
"retention_days": {
|
|
231
|
+
"default": 90,
|
|
232
|
+
"type": "integer",
|
|
233
|
+
"exclusiveMinimum": 0,
|
|
234
|
+
"maximum": 9007199254740991
|
|
235
|
+
},
|
|
236
|
+
"dashboard_count": {
|
|
237
|
+
"default": 0,
|
|
238
|
+
"type": "integer",
|
|
239
|
+
"minimum": 0,
|
|
240
|
+
"maximum": 9007199254740991
|
|
241
|
+
}
|
|
242
|
+
},
|
|
243
|
+
"required": [
|
|
244
|
+
"daily_data_cap_gb",
|
|
245
|
+
"retention_days",
|
|
246
|
+
"dashboard_count"
|
|
247
|
+
],
|
|
248
|
+
"additionalProperties": {}
|
|
249
|
+
},
|
|
250
|
+
"front_door": {
|
|
251
|
+
"default": {
|
|
252
|
+
"sku_name": "Standard_AzureFrontDoor"
|
|
253
|
+
},
|
|
254
|
+
"type": "object",
|
|
255
|
+
"properties": {
|
|
256
|
+
"sku_name": {
|
|
257
|
+
"default": "Standard_AzureFrontDoor",
|
|
258
|
+
"type": "string",
|
|
259
|
+
"const": "Standard_AzureFrontDoor"
|
|
260
|
+
}
|
|
261
|
+
},
|
|
262
|
+
"required": [
|
|
263
|
+
"sku_name"
|
|
264
|
+
],
|
|
265
|
+
"additionalProperties": {}
|
|
266
|
+
},
|
|
267
|
+
"storage_account": {
|
|
268
|
+
"default": {
|
|
269
|
+
"account_kind": "BlockBlobStorage",
|
|
270
|
+
"account_tier": "Premium",
|
|
271
|
+
"account_replication_type": "LRS",
|
|
272
|
+
"access_tier": "Hot"
|
|
273
|
+
},
|
|
274
|
+
"description": "Shared app storage account, used for app file uploads (not the Terraform state storage account).",
|
|
275
|
+
"type": "object",
|
|
276
|
+
"properties": {
|
|
277
|
+
"account_kind": {
|
|
278
|
+
"default": "BlockBlobStorage",
|
|
279
|
+
"type": "string",
|
|
280
|
+
"const": "BlockBlobStorage"
|
|
281
|
+
},
|
|
282
|
+
"account_tier": {
|
|
283
|
+
"default": "Premium",
|
|
284
|
+
"type": "string",
|
|
285
|
+
"const": "Premium"
|
|
286
|
+
},
|
|
287
|
+
"account_replication_type": {
|
|
288
|
+
"default": "LRS",
|
|
289
|
+
"type": "string",
|
|
290
|
+
"const": "LRS"
|
|
291
|
+
},
|
|
292
|
+
"access_tier": {
|
|
293
|
+
"default": "Hot",
|
|
294
|
+
"type": "string",
|
|
295
|
+
"const": "Hot"
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"required": [
|
|
299
|
+
"account_kind",
|
|
300
|
+
"account_tier",
|
|
301
|
+
"account_replication_type",
|
|
302
|
+
"access_tier"
|
|
303
|
+
],
|
|
304
|
+
"additionalProperties": {}
|
|
305
|
+
},
|
|
306
|
+
"key_vault": {
|
|
307
|
+
"default": {
|
|
308
|
+
"sku_name": "standard"
|
|
309
|
+
},
|
|
310
|
+
"type": "object",
|
|
311
|
+
"properties": {
|
|
312
|
+
"sku_name": {
|
|
313
|
+
"default": "standard",
|
|
314
|
+
"type": "string",
|
|
315
|
+
"const": "standard"
|
|
316
|
+
}
|
|
317
|
+
},
|
|
318
|
+
"required": [
|
|
319
|
+
"sku_name"
|
|
320
|
+
],
|
|
321
|
+
"additionalProperties": {}
|
|
322
|
+
},
|
|
323
|
+
"github_oidc": {
|
|
324
|
+
"default": {
|
|
325
|
+
"enabled": true,
|
|
326
|
+
"manage_role_assignment": true
|
|
327
|
+
},
|
|
328
|
+
"description": "GitHub Actions OIDC identity used to push images and redeploy Container Apps.",
|
|
329
|
+
"type": "object",
|
|
330
|
+
"properties": {
|
|
331
|
+
"enabled": {
|
|
332
|
+
"default": true,
|
|
333
|
+
"description": "Set to false to skip GitHub Actions OIDC entirely — no app registration, no role assignment for CI. Use this to unblock testing the rest of the stack while waiting on a tenant admin.",
|
|
334
|
+
"type": "boolean"
|
|
335
|
+
},
|
|
336
|
+
"existing_client_id": {
|
|
337
|
+
"description": "Client ID of an app registration + service principal + federated identity credential(s) already created out-of-band by a tenant admin. Set this when the deploying SP lacks the Entra ID \"Application Administrator\" role (creating an app registration requires it, regardless of subscription-level RBAC) — the module then reuses that identity instead of creating a new one. The Contributor role assignment is still managed by Terraform either way, since that only needs \"User Access Administrator\" on the subscription.",
|
|
338
|
+
"type": "string"
|
|
339
|
+
},
|
|
340
|
+
"existing_principal_id": {
|
|
341
|
+
"description": "Object ID (principal ID) of the service principal identified by existing_client_id, when already known. Strongly recommended whenever existing_client_id is set: without it, Terraform looks the object ID up via Microsoft Graph, which needs Directory.Read.All or Application.Read.All on the deploying SP — permissions many tenant admins won't grant just to resolve one known object. Whoever created the app out-of-band can get this by running `az ad sp show --id <existing_client_id> --query id -o tsv`.",
|
|
342
|
+
"type": "string"
|
|
343
|
+
},
|
|
344
|
+
"manage_role_assignment": {
|
|
345
|
+
"default": true,
|
|
346
|
+
"description": "Whether Terraform should create/manage the Contributor role assignment for this identity. Set to false when it was already granted out-of-band alongside existing_client_id (e.g. a tenant admin's onboarding runbook already ran the role assignment) — otherwise Terraform tries to create it again on every apply and fails with RoleAssignmentExists.",
|
|
347
|
+
"type": "boolean"
|
|
348
|
+
}
|
|
349
|
+
},
|
|
350
|
+
"required": [
|
|
351
|
+
"enabled",
|
|
352
|
+
"manage_role_assignment"
|
|
353
|
+
],
|
|
354
|
+
"additionalProperties": {}
|
|
355
|
+
},
|
|
356
|
+
"apps": {
|
|
357
|
+
"minItems": 1,
|
|
358
|
+
"type": "array",
|
|
359
|
+
"items": {
|
|
360
|
+
"$ref": "#/definitions/azureApp"
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
"required": [
|
|
365
|
+
"name",
|
|
366
|
+
"deployment",
|
|
367
|
+
"location",
|
|
368
|
+
"monitor",
|
|
369
|
+
"front_door",
|
|
370
|
+
"storage_account",
|
|
371
|
+
"key_vault",
|
|
372
|
+
"github_oidc",
|
|
373
|
+
"apps"
|
|
374
|
+
],
|
|
375
|
+
"additionalProperties": {}
|
|
376
|
+
},
|
|
377
|
+
"azureApp": {
|
|
378
|
+
"type": "object",
|
|
379
|
+
"properties": {
|
|
380
|
+
"name": {
|
|
381
|
+
"type": "string",
|
|
382
|
+
"minLength": 1
|
|
383
|
+
},
|
|
384
|
+
"technology": {
|
|
385
|
+
"type": "string",
|
|
386
|
+
"minLength": 1,
|
|
387
|
+
"description": "Application role/framework. 'nest' and 'react' get framework-specific env var injection (see docs); any other value deploys as a plain Container App with no extra env vars — pass everything explicitly via variables/build_env."
|
|
388
|
+
},
|
|
389
|
+
"dockerfile": {
|
|
390
|
+
"type": "string",
|
|
391
|
+
"minLength": 1
|
|
392
|
+
},
|
|
393
|
+
"health_check_path": {
|
|
394
|
+
"type": "string",
|
|
395
|
+
"minLength": 1
|
|
396
|
+
},
|
|
397
|
+
"domain": {
|
|
398
|
+
"type": "string",
|
|
399
|
+
"minLength": 1,
|
|
400
|
+
"description": "Custom domain for this app. A managed TLS certificate is issued automatically via Front Door once DNS validation completes (see the custom_domain_validation deploy output)."
|
|
401
|
+
},
|
|
402
|
+
"port": {
|
|
403
|
+
"type": "integer",
|
|
404
|
+
"exclusiveMinimum": 0,
|
|
405
|
+
"maximum": 9007199254740991
|
|
406
|
+
},
|
|
407
|
+
"branch": {
|
|
408
|
+
"default": "main",
|
|
409
|
+
"type": "string"
|
|
410
|
+
},
|
|
411
|
+
"template_repo_branch": {
|
|
412
|
+
"default": "main",
|
|
413
|
+
"type": "string"
|
|
414
|
+
},
|
|
415
|
+
"variables": {
|
|
416
|
+
"default": {},
|
|
417
|
+
"type": "object",
|
|
418
|
+
"propertyNames": {
|
|
419
|
+
"type": "string"
|
|
420
|
+
},
|
|
421
|
+
"additionalProperties": {
|
|
422
|
+
"type": "string"
|
|
423
|
+
}
|
|
424
|
+
},
|
|
425
|
+
"build_env": {
|
|
426
|
+
"default": {},
|
|
427
|
+
"type": "object",
|
|
428
|
+
"propertyNames": {
|
|
429
|
+
"type": "string"
|
|
430
|
+
},
|
|
431
|
+
"additionalProperties": {
|
|
432
|
+
"type": "string"
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
"workers": {
|
|
436
|
+
"default": [],
|
|
437
|
+
"type": "array",
|
|
438
|
+
"items": {
|
|
439
|
+
"$ref": "#/definitions/worker"
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
"database": {
|
|
443
|
+
"default": {
|
|
444
|
+
"enabled": false,
|
|
445
|
+
"engine": "mssql",
|
|
446
|
+
"storage_account_type": "Local",
|
|
447
|
+
"pitr_retention_days": 20,
|
|
448
|
+
"ltr_weekly_retention": "P21W"
|
|
449
|
+
},
|
|
450
|
+
"description": "Azure SQL Database or PostgreSQL Flexible Server for this app.",
|
|
451
|
+
"type": "object",
|
|
452
|
+
"properties": {
|
|
453
|
+
"enabled": {
|
|
454
|
+
"default": false,
|
|
455
|
+
"type": "boolean"
|
|
456
|
+
},
|
|
457
|
+
"engine": {
|
|
458
|
+
"default": "mssql",
|
|
459
|
+
"description": "Database engine: 'mssql' provisions Azure SQL Database, 'postgres' provisions Azure Database for PostgreSQL Flexible Server.",
|
|
460
|
+
"type": "string",
|
|
461
|
+
"enum": [
|
|
462
|
+
"mssql",
|
|
463
|
+
"postgres"
|
|
464
|
+
]
|
|
465
|
+
},
|
|
466
|
+
"sku_name": {
|
|
467
|
+
"description": "SKU name — e.g. GP_S_Gen5_4 for mssql, GP_Standard_D4s_v3 for postgres.",
|
|
468
|
+
"type": "string"
|
|
469
|
+
},
|
|
470
|
+
"storage_account_type": {
|
|
471
|
+
"default": "Local",
|
|
472
|
+
"description": "Backup storage redundancy (mssql only).",
|
|
473
|
+
"type": "string",
|
|
474
|
+
"enum": [
|
|
475
|
+
"Local",
|
|
476
|
+
"Zone",
|
|
477
|
+
"Geo",
|
|
478
|
+
"GeoZone"
|
|
479
|
+
]
|
|
480
|
+
},
|
|
481
|
+
"pitr_retention_days": {
|
|
482
|
+
"default": 20,
|
|
483
|
+
"description": "Point-in-time restore retention in days (mssql only).",
|
|
484
|
+
"type": "integer",
|
|
485
|
+
"minimum": 1,
|
|
486
|
+
"maximum": 35
|
|
487
|
+
},
|
|
488
|
+
"ltr_weekly_retention": {
|
|
489
|
+
"default": "P21W",
|
|
490
|
+
"description": "Long-term retention ISO 8601 duration, e.g. P21W (mssql only).",
|
|
491
|
+
"type": "string"
|
|
492
|
+
},
|
|
493
|
+
"allocated_storage_mb": {
|
|
494
|
+
"description": "Allocated storage in MB (postgres only).",
|
|
495
|
+
"type": "integer",
|
|
496
|
+
"exclusiveMinimum": 0,
|
|
497
|
+
"maximum": 9007199254740991
|
|
498
|
+
}
|
|
499
|
+
},
|
|
500
|
+
"required": [
|
|
501
|
+
"enabled",
|
|
502
|
+
"engine",
|
|
503
|
+
"storage_account_type",
|
|
504
|
+
"pitr_retention_days",
|
|
505
|
+
"ltr_weekly_retention"
|
|
506
|
+
],
|
|
507
|
+
"additionalProperties": {}
|
|
508
|
+
},
|
|
509
|
+
"redis": {
|
|
510
|
+
"default": {
|
|
511
|
+
"enabled": false,
|
|
512
|
+
"sku_name": "Balanced_B0"
|
|
513
|
+
},
|
|
514
|
+
"description": "Azure Managed Redis for this app.",
|
|
515
|
+
"type": "object",
|
|
516
|
+
"properties": {
|
|
517
|
+
"enabled": {
|
|
518
|
+
"default": false,
|
|
519
|
+
"type": "boolean"
|
|
520
|
+
},
|
|
521
|
+
"sku_name": {
|
|
522
|
+
"default": "Balanced_B0",
|
|
523
|
+
"description": "Azure Managed Redis 'Balanced' tier SKU, e.g. Balanced_B0, Balanced_B1, Balanced_B5.",
|
|
524
|
+
"type": "string"
|
|
525
|
+
}
|
|
526
|
+
},
|
|
527
|
+
"required": [
|
|
528
|
+
"enabled",
|
|
529
|
+
"sku_name"
|
|
530
|
+
],
|
|
531
|
+
"additionalProperties": {}
|
|
532
|
+
},
|
|
533
|
+
"container_app": {
|
|
534
|
+
"default": {
|
|
535
|
+
"cpu": 1,
|
|
536
|
+
"memory": "2Gi",
|
|
537
|
+
"concurrent_requests": 20,
|
|
538
|
+
"min_replicas": 0,
|
|
539
|
+
"max_replicas": 3
|
|
540
|
+
},
|
|
541
|
+
"description": "Azure Container Apps (Consumption plan) sizing. Every app runs as a Container App.",
|
|
542
|
+
"type": "object",
|
|
543
|
+
"properties": {
|
|
544
|
+
"cpu": {
|
|
545
|
+
"default": 1,
|
|
546
|
+
"type": "number",
|
|
547
|
+
"exclusiveMinimum": 0
|
|
548
|
+
},
|
|
549
|
+
"memory": {
|
|
550
|
+
"default": "2Gi",
|
|
551
|
+
"description": "CPU:memory ratio is fixed at 1:2 by the platform.",
|
|
552
|
+
"type": "string"
|
|
553
|
+
},
|
|
554
|
+
"concurrent_requests": {
|
|
555
|
+
"default": 20,
|
|
556
|
+
"description": "HTTP concurrency threshold that triggers scale-out.",
|
|
557
|
+
"type": "integer",
|
|
558
|
+
"exclusiveMinimum": 0,
|
|
559
|
+
"maximum": 9007199254740991
|
|
560
|
+
},
|
|
561
|
+
"min_replicas": {
|
|
562
|
+
"default": 0,
|
|
563
|
+
"type": "integer",
|
|
564
|
+
"minimum": 0,
|
|
565
|
+
"maximum": 9007199254740991
|
|
566
|
+
},
|
|
567
|
+
"max_replicas": {
|
|
568
|
+
"default": 3,
|
|
569
|
+
"type": "integer",
|
|
570
|
+
"exclusiveMinimum": 0,
|
|
571
|
+
"maximum": 9007199254740991
|
|
572
|
+
}
|
|
573
|
+
},
|
|
574
|
+
"required": [
|
|
575
|
+
"cpu",
|
|
576
|
+
"memory",
|
|
577
|
+
"concurrent_requests",
|
|
578
|
+
"min_replicas",
|
|
579
|
+
"max_replicas"
|
|
580
|
+
],
|
|
581
|
+
"additionalProperties": {}
|
|
154
582
|
}
|
|
155
|
-
}
|
|
583
|
+
},
|
|
584
|
+
"required": [
|
|
585
|
+
"name",
|
|
586
|
+
"technology",
|
|
587
|
+
"dockerfile",
|
|
588
|
+
"health_check_path",
|
|
589
|
+
"domain",
|
|
590
|
+
"port",
|
|
591
|
+
"branch",
|
|
592
|
+
"template_repo_branch",
|
|
593
|
+
"variables",
|
|
594
|
+
"build_env",
|
|
595
|
+
"workers",
|
|
596
|
+
"database",
|
|
597
|
+
"redis",
|
|
598
|
+
"container_app"
|
|
599
|
+
],
|
|
600
|
+
"additionalProperties": {}
|
|
156
601
|
}
|
|
157
602
|
}
|
|
158
603
|
}
|