@robinmordasiewicz/f5xc-terraform-mcp 2.9.0 → 2.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -0
- package/dist/docs/data-sources/dns_zone.md +2 -2
- package/dist/docs/functions/blindfold_file.md +3 -3
- package/dist/docs/guides/addon-activation.md +459 -0
- package/dist/docs/guides/advanced-http-loadbalancer.md +20 -20
- package/dist/docs/guides/authentication.md +30 -30
- package/dist/docs/guides/blindfold.md +27 -17
- package/dist/docs/guides/http-loadbalancer.md +12 -12
- package/dist/docs/resources/api_credential.md +2 -2
- package/dist/docs/resources/dns_zone.md +306 -443
- package/dist/index.js +255 -1
- package/dist/index.js.map +1 -1
- package/dist/schemas/index.d.ts +39 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +30 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/services/addons.d.ts +63 -0
- package/dist/services/addons.d.ts.map +1 -0
- package/dist/services/addons.js +471 -0
- package/dist/services/addons.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Addon Service Module
|
|
3
|
+
* Provides information about F5 Distributed Cloud addon services and activation workflows
|
|
4
|
+
*/
|
|
5
|
+
import { join, dirname } from 'path';
|
|
6
|
+
import { fileURLToPath } from 'url';
|
|
7
|
+
// Addon service information from subscription metadata
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = dirname(__filename);
|
|
10
|
+
const PACKAGE_ROOT = join(__dirname, '..', '..'); // mcp-server/
|
|
11
|
+
const PROJECT_ROOT = join(PACKAGE_ROOT, '..'); // terraform-provider-f5xc/
|
|
12
|
+
// Paths for subscription metadata (contains addon service info)
|
|
13
|
+
const BUNDLED_SUBSCRIPTION_METADATA = join(PACKAGE_ROOT, 'dist', 'subscription-tiers.json');
|
|
14
|
+
const PROJECT_SUBSCRIPTION_METADATA = join(PROJECT_ROOT, 'tools', 'subscription-tiers.json');
|
|
15
|
+
// Known addon services with their activation types and descriptions
|
|
16
|
+
// These names are the actual API names from F5XC (validated via API testing)
|
|
17
|
+
// Format: f5xc-{service}-{tier}
|
|
18
|
+
const ADDON_SERVICES = {
|
|
19
|
+
// Bot Defense variants
|
|
20
|
+
'f5xc-bot-defense-standard': {
|
|
21
|
+
name: 'f5xc-bot-defense-standard',
|
|
22
|
+
displayName: 'Bot Defense (Standard)',
|
|
23
|
+
description: 'Protect applications from automated attacks and bot traffic - Standard tier',
|
|
24
|
+
tier: 'STANDARD',
|
|
25
|
+
activationType: 'self',
|
|
26
|
+
category: 'security',
|
|
27
|
+
},
|
|
28
|
+
'f5xc-bot-defense-advanced': {
|
|
29
|
+
name: 'f5xc-bot-defense-advanced',
|
|
30
|
+
displayName: 'Bot Defense (Advanced)',
|
|
31
|
+
description: 'Protect applications from automated attacks and bot traffic - Advanced tier with ML',
|
|
32
|
+
tier: 'ADVANCED',
|
|
33
|
+
activationType: 'self',
|
|
34
|
+
category: 'security',
|
|
35
|
+
},
|
|
36
|
+
// Client Side Defense
|
|
37
|
+
'f5xc-client-side-defense-standard': {
|
|
38
|
+
name: 'f5xc-client-side-defense-standard',
|
|
39
|
+
displayName: 'Client Side Defense',
|
|
40
|
+
description: 'Protect against client-side attacks like Magecart and formjacking',
|
|
41
|
+
tier: 'STANDARD',
|
|
42
|
+
activationType: 'self',
|
|
43
|
+
category: 'security',
|
|
44
|
+
},
|
|
45
|
+
// WAAP (Web App and API Protection) - includes API Discovery, API Protection, Data Guard
|
|
46
|
+
'f5xc-waap-standard': {
|
|
47
|
+
name: 'f5xc-waap-standard',
|
|
48
|
+
displayName: 'WAAP (Standard)',
|
|
49
|
+
description: 'Web Application and API Protection - includes API Discovery and Data Guard',
|
|
50
|
+
tier: 'STANDARD',
|
|
51
|
+
activationType: 'self',
|
|
52
|
+
category: 'security',
|
|
53
|
+
},
|
|
54
|
+
'f5xc-waap-advanced': {
|
|
55
|
+
name: 'f5xc-waap-advanced',
|
|
56
|
+
displayName: 'WAAP (Advanced)',
|
|
57
|
+
description: 'Web Application and API Protection - Advanced tier with full API security',
|
|
58
|
+
tier: 'ADVANCED',
|
|
59
|
+
activationType: 'self',
|
|
60
|
+
category: 'security',
|
|
61
|
+
},
|
|
62
|
+
// Malicious User Detection
|
|
63
|
+
'f5xc-malicious-user-detection': {
|
|
64
|
+
name: 'f5xc-malicious-user-detection',
|
|
65
|
+
displayName: 'Malicious User Detection',
|
|
66
|
+
description: 'Identify and block malicious user behavior patterns',
|
|
67
|
+
tier: 'ADVANCED',
|
|
68
|
+
activationType: 'self',
|
|
69
|
+
category: 'security',
|
|
70
|
+
},
|
|
71
|
+
// Synthetic Monitoring
|
|
72
|
+
'f5xc-synthetic-monitoring': {
|
|
73
|
+
name: 'f5xc-synthetic-monitoring',
|
|
74
|
+
displayName: 'Synthetic Monitoring',
|
|
75
|
+
description: 'Monitor application availability and performance with synthetic tests',
|
|
76
|
+
tier: 'STANDARD',
|
|
77
|
+
activationType: 'self',
|
|
78
|
+
category: 'observability',
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Convert addon service name to valid Terraform resource name
|
|
83
|
+
* e.g., "f5xc-bot-defense-standard" -> "bot_defense_standard"
|
|
84
|
+
*/
|
|
85
|
+
function toTerraformResourceName(addonServiceName) {
|
|
86
|
+
return addonServiceName
|
|
87
|
+
.replace(/^f5xc-/, '') // Remove f5xc- prefix
|
|
88
|
+
.replace(/-/g, '_'); // Replace hyphens with underscores
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* List all available addon services with optional filtering
|
|
92
|
+
*/
|
|
93
|
+
export function listAddonServices(tierFilter, activationTypeFilter) {
|
|
94
|
+
let services = Object.values(ADDON_SERVICES);
|
|
95
|
+
// Apply tier filter
|
|
96
|
+
if (tierFilter) {
|
|
97
|
+
services = services.filter(s => s.tier === tierFilter);
|
|
98
|
+
}
|
|
99
|
+
// Apply activation type filter
|
|
100
|
+
if (activationTypeFilter) {
|
|
101
|
+
if (activationTypeFilter === 'managed') {
|
|
102
|
+
services = services.filter(s => s.activationType === 'managed' || s.activationType === 'partial');
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
services = services.filter(s => s.activationType === activationTypeFilter);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
total: services.length,
|
|
110
|
+
services,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Check activation requirements for a specific addon service
|
|
115
|
+
*/
|
|
116
|
+
export function checkAddonActivation(addonService) {
|
|
117
|
+
const service = ADDON_SERVICES[addonService];
|
|
118
|
+
if (!service) {
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
// Build activation steps based on type
|
|
122
|
+
let steps;
|
|
123
|
+
let canActivate = true;
|
|
124
|
+
switch (service.activationType) {
|
|
125
|
+
case 'self':
|
|
126
|
+
steps = [
|
|
127
|
+
'Check activation status using data source',
|
|
128
|
+
'Create addon_subscription resource',
|
|
129
|
+
'Wait for subscription to be enabled',
|
|
130
|
+
'Use addon features in your configuration',
|
|
131
|
+
];
|
|
132
|
+
break;
|
|
133
|
+
case 'partial':
|
|
134
|
+
steps = [
|
|
135
|
+
'Check activation status using data source',
|
|
136
|
+
'Create addon_subscription with notification preference',
|
|
137
|
+
'Wait for SRE team to process the request',
|
|
138
|
+
'Monitor subscription state for SUBSCRIPTION_ENABLED',
|
|
139
|
+
'Use addon features once enabled',
|
|
140
|
+
];
|
|
141
|
+
canActivate = true; // User can initiate, but needs approval
|
|
142
|
+
break;
|
|
143
|
+
case 'managed':
|
|
144
|
+
steps = [
|
|
145
|
+
'Contact F5 Sales to discuss addon requirements',
|
|
146
|
+
'Complete the subscription agreement',
|
|
147
|
+
'Wait for F5 team to activate the addon',
|
|
148
|
+
'Verify activation using data source',
|
|
149
|
+
'Use addon features once enabled',
|
|
150
|
+
];
|
|
151
|
+
canActivate = false; // Requires sales contact
|
|
152
|
+
break;
|
|
153
|
+
default:
|
|
154
|
+
steps = ['Unknown activation type'];
|
|
155
|
+
}
|
|
156
|
+
const terraformResourceName = toTerraformResourceName(addonService);
|
|
157
|
+
const terraformExample = `# Check if ${service.displayName} can be activated
|
|
158
|
+
data "f5xc_addon_service_activation_status" "${terraformResourceName}" {
|
|
159
|
+
addon_service = "${addonService}"
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
# Create subscription if available
|
|
163
|
+
resource "f5xc_addon_subscription" "${terraformResourceName}" {
|
|
164
|
+
count = data.f5xc_addon_service_activation_status.${terraformResourceName}.can_activate ? 1 : 0
|
|
165
|
+
name = "${terraformResourceName.replace(/_/g, '-')}-subscription"
|
|
166
|
+
namespace = "system"
|
|
167
|
+
|
|
168
|
+
addon_service {
|
|
169
|
+
name = "${addonService}"
|
|
170
|
+
namespace = "shared"
|
|
171
|
+
}
|
|
172
|
+
}`;
|
|
173
|
+
return {
|
|
174
|
+
addonService: service.name,
|
|
175
|
+
displayName: service.displayName,
|
|
176
|
+
tier: service.tier,
|
|
177
|
+
activationType: service.activationType,
|
|
178
|
+
canActivate,
|
|
179
|
+
steps,
|
|
180
|
+
terraformExample,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get detailed activation workflow for an addon service
|
|
185
|
+
*/
|
|
186
|
+
export function getAddonWorkflow(addonService, activationType) {
|
|
187
|
+
const service = ADDON_SERVICES[addonService];
|
|
188
|
+
if (!service) {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
// Use provided activation type or default to the service's type
|
|
192
|
+
const effectiveType = activationType || service.activationType;
|
|
193
|
+
const tfResourceName = toTerraformResourceName(addonService);
|
|
194
|
+
let workflow;
|
|
195
|
+
switch (effectiveType) {
|
|
196
|
+
case 'self':
|
|
197
|
+
workflow = {
|
|
198
|
+
addonService: service.name,
|
|
199
|
+
activationType: 'self',
|
|
200
|
+
description: `Self-activation workflow for ${service.displayName}. User can activate directly without manual intervention.`,
|
|
201
|
+
prerequisites: [
|
|
202
|
+
'Valid F5 Distributed Cloud tenant',
|
|
203
|
+
`${service.tier} subscription tier or higher`,
|
|
204
|
+
'Appropriate IAM permissions for addon management',
|
|
205
|
+
],
|
|
206
|
+
steps: [
|
|
207
|
+
{
|
|
208
|
+
step: 1,
|
|
209
|
+
action: 'Check Activation Status',
|
|
210
|
+
description: 'Verify the addon can be activated for your tenant',
|
|
211
|
+
terraformSnippet: `data "f5xc_addon_service_activation_status" "${tfResourceName}" {
|
|
212
|
+
addon_service = "${addonService}"
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
output "${tfResourceName}_can_activate" {
|
|
216
|
+
value = data.f5xc_addon_service_activation_status.${tfResourceName}.can_activate
|
|
217
|
+
}`,
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
step: 2,
|
|
221
|
+
action: 'Create Subscription',
|
|
222
|
+
description: 'Create the addon subscription resource',
|
|
223
|
+
terraformSnippet: `resource "f5xc_addon_subscription" "${tfResourceName}" {
|
|
224
|
+
name = "${tfResourceName.replace(/_/g, '-')}-subscription"
|
|
225
|
+
namespace = "system"
|
|
226
|
+
|
|
227
|
+
addon_service {
|
|
228
|
+
name = "${addonService}"
|
|
229
|
+
namespace = "shared"
|
|
230
|
+
}
|
|
231
|
+
}`,
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
step: 3,
|
|
235
|
+
action: 'Verify Activation',
|
|
236
|
+
description: 'Confirm the subscription is enabled',
|
|
237
|
+
terraformSnippet: `# After apply, the subscription should be in SUBSCRIPTION_ENABLED state
|
|
238
|
+
# Check status:
|
|
239
|
+
# terraform show | grep status`,
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
step: 4,
|
|
243
|
+
action: 'Use Addon Features',
|
|
244
|
+
description: `Enable ${service.displayName} features in your load balancer or other resources`,
|
|
245
|
+
},
|
|
246
|
+
],
|
|
247
|
+
terraformConfig: generateFullTerraformConfig(service),
|
|
248
|
+
estimatedTime: '1-5 minutes',
|
|
249
|
+
notes: [
|
|
250
|
+
'Self-activation is typically immediate',
|
|
251
|
+
'Some features may require additional configuration',
|
|
252
|
+
`Ensure your subscription tier is ${service.tier} or higher`,
|
|
253
|
+
],
|
|
254
|
+
};
|
|
255
|
+
break;
|
|
256
|
+
case 'partial':
|
|
257
|
+
workflow = {
|
|
258
|
+
addonService: service.name,
|
|
259
|
+
activationType: 'partial',
|
|
260
|
+
description: `Partially managed activation for ${service.displayName}. User initiates request, requires SRE processing.`,
|
|
261
|
+
prerequisites: [
|
|
262
|
+
'Valid F5 Distributed Cloud tenant',
|
|
263
|
+
`${service.tier} subscription tier or higher`,
|
|
264
|
+
'Appropriate IAM permissions',
|
|
265
|
+
'Email for notification preferences',
|
|
266
|
+
],
|
|
267
|
+
steps: [
|
|
268
|
+
{
|
|
269
|
+
step: 1,
|
|
270
|
+
action: 'Check Activation Status',
|
|
271
|
+
description: 'Verify the addon can be requested',
|
|
272
|
+
terraformSnippet: `data "f5xc_addon_service_activation_status" "${tfResourceName}" {
|
|
273
|
+
addon_service = "${addonService}"
|
|
274
|
+
}`,
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
step: 2,
|
|
278
|
+
action: 'Create Subscription Request',
|
|
279
|
+
description: 'Submit subscription request with notification preferences',
|
|
280
|
+
terraformSnippet: `resource "f5xc_addon_subscription" "${tfResourceName}" {
|
|
281
|
+
name = "${tfResourceName.replace(/_/g, '-')}-subscription"
|
|
282
|
+
namespace = "system"
|
|
283
|
+
|
|
284
|
+
addon_service {
|
|
285
|
+
name = "${addonService}"
|
|
286
|
+
namespace = "shared"
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
notification_preference {
|
|
290
|
+
emails {
|
|
291
|
+
email_ids = ["admin@example.com"]
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}`,
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
step: 3,
|
|
298
|
+
action: 'Wait for Processing',
|
|
299
|
+
description: 'Monitor subscription state for SUBSCRIPTION_ENABLED',
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
step: 4,
|
|
303
|
+
action: 'Use Addon Features',
|
|
304
|
+
description: 'Once enabled, configure addon features in your resources',
|
|
305
|
+
},
|
|
306
|
+
],
|
|
307
|
+
terraformConfig: generateFullTerraformConfig(service, true),
|
|
308
|
+
estimatedTime: '1-24 hours (depends on SRE processing)',
|
|
309
|
+
notes: [
|
|
310
|
+
'Request will be in SUBSCRIPTION_PENDING state initially',
|
|
311
|
+
'SRE team will process and approve the request',
|
|
312
|
+
'You will receive email notification when enabled',
|
|
313
|
+
],
|
|
314
|
+
};
|
|
315
|
+
break;
|
|
316
|
+
case 'managed':
|
|
317
|
+
workflow = {
|
|
318
|
+
addonService: service.name,
|
|
319
|
+
activationType: 'managed',
|
|
320
|
+
description: `Fully managed activation for ${service.displayName}. Requires contacting F5 Sales.`,
|
|
321
|
+
prerequisites: [
|
|
322
|
+
'Valid F5 Distributed Cloud tenant',
|
|
323
|
+
'Sales agreement for the addon service',
|
|
324
|
+
'Premium support contract (recommended)',
|
|
325
|
+
],
|
|
326
|
+
steps: [
|
|
327
|
+
{
|
|
328
|
+
step: 1,
|
|
329
|
+
action: 'Contact Sales',
|
|
330
|
+
description: 'Reach out to F5 Sales to discuss requirements and pricing',
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
step: 2,
|
|
334
|
+
action: 'Complete Agreement',
|
|
335
|
+
description: 'Sign the subscription agreement with F5',
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
step: 3,
|
|
339
|
+
action: 'F5 Activation',
|
|
340
|
+
description: 'F5 team will activate the addon for your tenant',
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
step: 4,
|
|
344
|
+
action: 'Verify in Terraform',
|
|
345
|
+
description: 'Check activation status and create data source reference',
|
|
346
|
+
terraformSnippet: `data "f5xc_addon_service_activation_status" "${tfResourceName}" {
|
|
347
|
+
addon_service = "${addonService}"
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
output "is_active" {
|
|
351
|
+
value = data.f5xc_addon_service_activation_status.${tfResourceName}.state == "AS_SUBSCRIBED"
|
|
352
|
+
}`,
|
|
353
|
+
},
|
|
354
|
+
],
|
|
355
|
+
terraformConfig: `# For managed addons, activation is handled by F5 Sales
|
|
356
|
+
# Once activated, you can reference the addon in your configuration
|
|
357
|
+
|
|
358
|
+
data "f5xc_addon_service" "${tfResourceName}" {
|
|
359
|
+
name = "${addonService}"
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
data "f5xc_addon_service_activation_status" "${tfResourceName}" {
|
|
363
|
+
addon_service = "${addonService}"
|
|
364
|
+
}`,
|
|
365
|
+
estimatedTime: 'Days to weeks (depends on sales process)',
|
|
366
|
+
notes: [
|
|
367
|
+
'This addon requires a sales agreement',
|
|
368
|
+
'Contact F5 Sales: https://www.f5.com/products/get-f5',
|
|
369
|
+
'Once activated, use data sources to verify status',
|
|
370
|
+
],
|
|
371
|
+
};
|
|
372
|
+
break;
|
|
373
|
+
default:
|
|
374
|
+
return null;
|
|
375
|
+
}
|
|
376
|
+
return workflow;
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Generate a full Terraform configuration for an addon
|
|
380
|
+
*/
|
|
381
|
+
function generateFullTerraformConfig(service, includeNotification = false) {
|
|
382
|
+
const serviceName = service.name; // Full API name like "f5xc-bot-defense-standard"
|
|
383
|
+
const resourceName = toTerraformResourceName(serviceName); // Terraform-safe name like "bot_defense_standard"
|
|
384
|
+
let config = `# ${service.displayName} Activation Configuration
|
|
385
|
+
# Tier Required: ${service.tier}
|
|
386
|
+
# Activation Type: ${service.activationType}
|
|
387
|
+
|
|
388
|
+
terraform {
|
|
389
|
+
required_providers {
|
|
390
|
+
f5xc = {
|
|
391
|
+
source = "registry.terraform.io/robinmordasiewicz/f5xc"
|
|
392
|
+
version = ">= 0.1.0"
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
provider "f5xc" {
|
|
398
|
+
# Configure via environment variables:
|
|
399
|
+
# F5XC_API_URL - API endpoint (optional)
|
|
400
|
+
# F5XC_API_TOKEN - API token (or use P12 cert)
|
|
401
|
+
# F5XC_P12_FILE - Path to P12 certificate
|
|
402
|
+
# F5XC_P12_PASSWORD - P12 certificate password
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
# Step 1: Check activation status
|
|
406
|
+
data "f5xc_addon_service_activation_status" "${serviceName}" {
|
|
407
|
+
addon_service = "${serviceName}"
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
# Step 2: Get addon service details
|
|
411
|
+
data "f5xc_addon_service" "${serviceName}" {
|
|
412
|
+
name = "${serviceName}"
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
# Step 3: Create subscription (only if can_activate is true)
|
|
416
|
+
resource "f5xc_addon_subscription" "${serviceName}" {
|
|
417
|
+
count = data.f5xc_addon_service_activation_status.${serviceName}.can_activate ? 1 : 0
|
|
418
|
+
name = "${resourceName}-subscription"
|
|
419
|
+
namespace = "system"
|
|
420
|
+
|
|
421
|
+
addon_service {
|
|
422
|
+
name = "${serviceName}"
|
|
423
|
+
namespace = "shared"
|
|
424
|
+
}`;
|
|
425
|
+
if (includeNotification) {
|
|
426
|
+
config += `
|
|
427
|
+
|
|
428
|
+
notification_preference {
|
|
429
|
+
emails {
|
|
430
|
+
email_ids = ["admin@example.com"]
|
|
431
|
+
}
|
|
432
|
+
}`;
|
|
433
|
+
}
|
|
434
|
+
config += `
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
# Outputs
|
|
438
|
+
output "addon_tier" {
|
|
439
|
+
description = "Required subscription tier"
|
|
440
|
+
value = data.f5xc_addon_service.${serviceName}.tier
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
output "activation_type" {
|
|
444
|
+
description = "Activation type (self, partial, managed)"
|
|
445
|
+
value = data.f5xc_addon_service.${serviceName}.activation_type
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
output "can_activate" {
|
|
449
|
+
description = "Whether the addon can be activated"
|
|
450
|
+
value = data.f5xc_addon_service_activation_status.${serviceName}.can_activate
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
output "current_state" {
|
|
454
|
+
description = "Current subscription state"
|
|
455
|
+
value = data.f5xc_addon_service_activation_status.${serviceName}.state
|
|
456
|
+
}`;
|
|
457
|
+
return config;
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Get list of addon service names
|
|
461
|
+
*/
|
|
462
|
+
export function getAddonServiceNames() {
|
|
463
|
+
return Object.keys(ADDON_SERVICES);
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Check if an addon service exists
|
|
467
|
+
*/
|
|
468
|
+
export function addonServiceExists(name) {
|
|
469
|
+
return name in ADDON_SERVICES;
|
|
470
|
+
}
|
|
471
|
+
//# sourceMappingURL=addons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addons.js","sourceRoot":"","sources":["../../src/services/addons.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,uDAAuD;AACvD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,cAAc;AAChE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,2BAA2B;AAE1E,gEAAgE;AAChE,MAAM,6BAA6B,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,yBAAyB,CAAC,CAAC;AAC5F,MAAM,6BAA6B,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,EAAE,yBAAyB,CAAC,CAAC;AAE7F,oEAAoE;AACpE,6EAA6E;AAC7E,gCAAgC;AAChC,MAAM,cAAc,GAAqC;IACvD,uBAAuB;IACvB,2BAA2B,EAAE;QAC3B,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,wBAAwB;QACrC,WAAW,EAAE,6EAA6E;QAC1F,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,2BAA2B,EAAE;QAC3B,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,wBAAwB;QACrC,WAAW,EAAE,qFAAqF;QAClG,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,sBAAsB;IACtB,mCAAmC,EAAE;QACnC,IAAI,EAAE,mCAAmC;QACzC,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE,mEAAmE;QAChF,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,yFAAyF;IACzF,oBAAoB,EAAE;QACpB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,4EAA4E;QACzF,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,oBAAoB,EAAE;QACpB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,iBAAiB;QAC9B,WAAW,EAAE,2EAA2E;QACxF,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,2BAA2B;IAC3B,+BAA+B,EAAE;QAC/B,IAAI,EAAE,+BAA+B;QACrC,WAAW,EAAE,0BAA0B;QACvC,WAAW,EAAE,qDAAqD;QAClE,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,UAAU;KACrB;IACD,uBAAuB;IACvB,2BAA2B,EAAE;QAC3B,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,sBAAsB;QACnC,WAAW,EAAE,uEAAuE;QACpF,IAAI,EAAE,UAAU;QAChB,cAAc,EAAE,MAAM;QACtB,QAAQ,EAAE,eAAe;KAC1B;CACF,CAAC;AA4CF;;;GAGG;AACH,SAAS,uBAAuB,CAAC,gBAAwB;IACvD,OAAO,gBAAgB;SACpB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAE,sBAAsB;SAC7C,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAI,mCAAmC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAC/B,UAAgD,EAChD,oBAAyC;IAEzC,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAE7C,oBAAoB;IACpB,IAAI,UAAU,EAAE,CAAC;QACf,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,+BAA+B;IAC/B,IAAI,oBAAoB,EAAE,CAAC;QACzB,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACvC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC;QACpG,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,oBAAoB,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,QAAQ;KACT,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAoB;IACvD,MAAM,OAAO,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uCAAuC;IACvC,IAAI,KAAe,CAAC;IACpB,IAAI,WAAW,GAAG,IAAI,CAAC;IAEvB,QAAQ,OAAO,CAAC,cAAc,EAAE,CAAC;QAC/B,KAAK,MAAM;YACT,KAAK,GAAG;gBACN,2CAA2C;gBAC3C,oCAAoC;gBACpC,qCAAqC;gBACrC,0CAA0C;aAC3C,CAAC;YACF,MAAM;QACR,KAAK,SAAS;YACZ,KAAK,GAAG;gBACN,2CAA2C;gBAC3C,wDAAwD;gBACxD,0CAA0C;gBAC1C,qDAAqD;gBACrD,iCAAiC;aAClC,CAAC;YACF,WAAW,GAAG,IAAI,CAAC,CAAC,wCAAwC;YAC5D,MAAM;QACR,KAAK,SAAS;YACZ,KAAK,GAAG;gBACN,gDAAgD;gBAChD,qCAAqC;gBACrC,wCAAwC;gBACxC,qCAAqC;gBACrC,iCAAiC;aAClC,CAAC;YACF,WAAW,GAAG,KAAK,CAAC,CAAC,yBAAyB;YAC9C,MAAM;QACR;YACE,KAAK,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,qBAAqB,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACpE,MAAM,gBAAgB,GAAG,cAAc,OAAO,CAAC,WAAW;+CACb,qBAAqB;qBAC/C,YAAY;;;;sCAIK,qBAAqB;0DACD,qBAAqB;iBAC9D,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;;;mBAItC,YAAY;;;EAG7B,CAAC;IAED,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,IAAI;QAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,WAAW;QACX,KAAK;QACL,gBAAgB;KACjB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAoB,EACpB,cAA+C;IAE/C,MAAM,OAAO,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gEAAgE;IAChE,MAAM,aAAa,GAAG,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC;IAC/D,MAAM,cAAc,GAAG,uBAAuB,CAAC,YAAY,CAAC,CAAC;IAE7D,IAAI,QAAuB,CAAC;IAE5B,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,MAAM;YACT,QAAQ,GAAG;gBACT,YAAY,EAAE,OAAO,CAAC,IAAI;gBAC1B,cAAc,EAAE,MAAM;gBACtB,WAAW,EAAE,gCAAgC,OAAO,CAAC,WAAW,2DAA2D;gBAC3H,aAAa,EAAE;oBACb,mCAAmC;oBACnC,GAAG,OAAO,CAAC,IAAI,8BAA8B;oBAC7C,kDAAkD;iBACnD;gBACD,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,yBAAyB;wBACjC,WAAW,EAAE,mDAAmD;wBAChE,gBAAgB,EAAE,gDAAgD,cAAc;qBACvE,YAAY;;;UAGvB,cAAc;sDAC8B,cAAc;EAClE;qBACS;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,qBAAqB;wBAC7B,WAAW,EAAE,wCAAwC;wBACrD,gBAAgB,EAAE,uCAAuC,cAAc;iBAClE,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;;;mBAI/B,YAAY;;;EAG7B;qBACS;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,mBAAmB;wBAC3B,WAAW,EAAE,qCAAqC;wBAClD,gBAAgB,EAAE;;+BAEC;qBACpB;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,oBAAoB;wBAC5B,WAAW,EAAE,UAAU,OAAO,CAAC,WAAW,oDAAoD;qBAC/F;iBACF;gBACD,eAAe,EAAE,2BAA2B,CAAC,OAAO,CAAC;gBACrD,aAAa,EAAE,aAAa;gBAC5B,KAAK,EAAE;oBACL,wCAAwC;oBACxC,oDAAoD;oBACpD,oCAAoC,OAAO,CAAC,IAAI,YAAY;iBAC7D;aACF,CAAC;YACF,MAAM;QAER,KAAK,SAAS;YACZ,QAAQ,GAAG;gBACT,YAAY,EAAE,OAAO,CAAC,IAAI;gBAC1B,cAAc,EAAE,SAAS;gBACzB,WAAW,EAAE,oCAAoC,OAAO,CAAC,WAAW,oDAAoD;gBACxH,aAAa,EAAE;oBACb,mCAAmC;oBACnC,GAAG,OAAO,CAAC,IAAI,8BAA8B;oBAC7C,6BAA6B;oBAC7B,oCAAoC;iBACrC;gBACD,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,yBAAyB;wBACjC,WAAW,EAAE,mCAAmC;wBAChD,gBAAgB,EAAE,gDAAgD,cAAc;qBACvE,YAAY;EAC/B;qBACS;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,6BAA6B;wBACrC,WAAW,EAAE,2DAA2D;wBACxE,gBAAgB,EAAE,uCAAuC,cAAc;iBAClE,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;;;;mBAI/B,YAAY;;;;;;;;;EAS7B;qBACS;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,qBAAqB;wBAC7B,WAAW,EAAE,qDAAqD;qBACnE;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,oBAAoB;wBAC5B,WAAW,EAAE,0DAA0D;qBACxE;iBACF;gBACD,eAAe,EAAE,2BAA2B,CAAC,OAAO,EAAE,IAAI,CAAC;gBAC3D,aAAa,EAAE,wCAAwC;gBACvD,KAAK,EAAE;oBACL,yDAAyD;oBACzD,+CAA+C;oBAC/C,kDAAkD;iBACnD;aACF,CAAC;YACF,MAAM;QAER,KAAK,SAAS;YACZ,QAAQ,GAAG;gBACT,YAAY,EAAE,OAAO,CAAC,IAAI;gBAC1B,cAAc,EAAE,SAAS;gBACzB,WAAW,EAAE,gCAAgC,OAAO,CAAC,WAAW,iCAAiC;gBACjG,aAAa,EAAE;oBACb,mCAAmC;oBACnC,uCAAuC;oBACvC,wCAAwC;iBACzC;gBACD,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,eAAe;wBACvB,WAAW,EAAE,2DAA2D;qBACzE;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,oBAAoB;wBAC5B,WAAW,EAAE,yCAAyC;qBACvD;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,eAAe;wBACvB,WAAW,EAAE,iDAAiD;qBAC/D;oBACD;wBACE,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,qBAAqB;wBAC7B,WAAW,EAAE,0DAA0D;wBACvE,gBAAgB,EAAE,gDAAgD,cAAc;qBACvE,YAAY;;;;sDAIqB,cAAc;EAClE;qBACS;iBACF;gBACD,eAAe,EAAE;;;6BAGI,cAAc;YAC/B,YAAY;;;+CAGuB,cAAc;qBACxC,YAAY;EAC/B;gBACM,aAAa,EAAE,0CAA0C;gBACzD,KAAK,EAAE;oBACL,uCAAuC;oBACvC,sDAAsD;oBACtD,mDAAmD;iBACpD;aACF,CAAC;YACF,MAAM;QAER;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAAC,OAAyB,EAAE,mBAAmB,GAAG,KAAK;IACzF,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAE,iDAAiD;IACpF,MAAM,YAAY,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAE,kDAAkD;IAE9G,IAAI,MAAM,GAAG,KAAK,OAAO,CAAC,WAAW;mBACpB,OAAO,CAAC,IAAI;qBACV,OAAO,CAAC,cAAc;;;;;;;;;;;;;;;;;;;;+CAoBI,WAAW;qBACrC,WAAW;;;;6BAIH,WAAW;YAC5B,WAAW;;;;sCAIe,WAAW;0DACS,WAAW;iBACpD,YAAY;;;;mBAIV,WAAW;;IAE1B,CAAC;IAEH,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,IAAI;;;;;;IAMV,CAAC;IACH,CAAC;IAED,MAAM,IAAI;;;;;;0CAM8B,WAAW;;;;;0CAKX,WAAW;;;;;4DAKO,WAAW;;;;;4DAKX,WAAW;EACrE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,IAAI,IAAI,cAAc,CAAC;AAChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@robinmordasiewicz/f5xc-terraform-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.11.0",
|
|
4
4
|
"description": "MCP server for F5 Distributed Cloud Terraform provider - provides documentation and API specification access for AI assistants",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|