@robinmordasiewicz/f5xc-api-mcp 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +74 -0
- package/README.md +234 -0
- package/dist/auth/credential-manager.d.ts +116 -0
- package/dist/auth/credential-manager.d.ts.map +1 -0
- package/dist/auth/credential-manager.js +208 -0
- package/dist/auth/credential-manager.js.map +1 -0
- package/dist/auth/http-client.d.ts +81 -0
- package/dist/auth/http-client.d.ts.map +1 -0
- package/dist/auth/http-client.js +197 -0
- package/dist/auth/http-client.js.map +1 -0
- package/dist/auth/index.d.ts +8 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +6 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/generator/index.d.ts +7 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +7 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/naming/acronyms.d.ts +81 -0
- package/dist/generator/naming/acronyms.d.ts.map +1 -0
- package/dist/generator/naming/acronyms.js +253 -0
- package/dist/generator/naming/acronyms.js.map +1 -0
- package/dist/generator/naming/index.d.ts +6 -0
- package/dist/generator/naming/index.d.ts.map +1 -0
- package/dist/generator/naming/index.js +6 -0
- package/dist/generator/naming/index.js.map +1 -0
- package/dist/generator/naming/volterra-mapping.d.ts +102 -0
- package/dist/generator/naming/volterra-mapping.d.ts.map +1 -0
- package/dist/generator/naming/volterra-mapping.js +259 -0
- package/dist/generator/naming/volterra-mapping.js.map +1 -0
- package/dist/generator/openapi-parser.d.ts +339 -0
- package/dist/generator/openapi-parser.d.ts.map +1 -0
- package/dist/generator/openapi-parser.js +463 -0
- package/dist/generator/openapi-parser.js.map +1 -0
- package/dist/generator/tool-generator.d.ts +74 -0
- package/dist/generator/tool-generator.d.ts.map +1 -0
- package/dist/generator/tool-generator.js +387 -0
- package/dist/generator/tool-generator.js.map +1 -0
- package/dist/generator/transformers/index.d.ts +7 -0
- package/dist/generator/transformers/index.d.ts.map +1 -0
- package/dist/generator/transformers/index.js +7 -0
- package/dist/generator/transformers/index.js.map +1 -0
- package/dist/generator/transformers/normalize-examples.d.ts +48 -0
- package/dist/generator/transformers/normalize-examples.d.ts.map +1 -0
- package/dist/generator/transformers/normalize-examples.js +66 -0
- package/dist/generator/transformers/normalize-examples.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +70 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +6 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +5 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/workflows.d.ts +59 -0
- package/dist/prompts/workflows.d.ts.map +1 -0
- package/dist/prompts/workflows.js +585 -0
- package/dist/prompts/workflows.js.map +1 -0
- package/dist/resources/handlers.d.ts +72 -0
- package/dist/resources/handlers.d.ts.map +1 -0
- package/dist/resources/handlers.js +279 -0
- package/dist/resources/handlers.js.map +1 -0
- package/dist/resources/index.d.ts +8 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +6 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/templates.d.ts +86 -0
- package/dist/resources/templates.d.ts.map +1 -0
- package/dist/resources/templates.js +248 -0
- package/dist/resources/templates.js.map +1 -0
- package/dist/server.d.ts +78 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +426 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/discovery/consolidate.d.ts +97 -0
- package/dist/tools/discovery/consolidate.d.ts.map +1 -0
- package/dist/tools/discovery/consolidate.js +200 -0
- package/dist/tools/discovery/consolidate.js.map +1 -0
- package/dist/tools/discovery/describe.d.ts +132 -0
- package/dist/tools/discovery/describe.d.ts.map +1 -0
- package/dist/tools/discovery/describe.js +206 -0
- package/dist/tools/discovery/describe.js.map +1 -0
- package/dist/tools/discovery/execute.d.ts +98 -0
- package/dist/tools/discovery/execute.d.ts.map +1 -0
- package/dist/tools/discovery/execute.js +251 -0
- package/dist/tools/discovery/execute.js.map +1 -0
- package/dist/tools/discovery/index-loader.d.ts +28 -0
- package/dist/tools/discovery/index-loader.d.ts.map +1 -0
- package/dist/tools/discovery/index-loader.js +69 -0
- package/dist/tools/discovery/index-loader.js.map +1 -0
- package/dist/tools/discovery/index.d.ts +185 -0
- package/dist/tools/discovery/index.d.ts.map +1 -0
- package/dist/tools/discovery/index.js +177 -0
- package/dist/tools/discovery/index.js.map +1 -0
- package/dist/tools/discovery/search.d.ts +41 -0
- package/dist/tools/discovery/search.d.ts.map +1 -0
- package/dist/tools/discovery/search.js +155 -0
- package/dist/tools/discovery/search.js.map +1 -0
- package/dist/tools/discovery/types.d.ts +70 -0
- package/dist/tools/discovery/types.d.ts.map +1 -0
- package/dist/tools/discovery/types.js +9 -0
- package/dist/tools/discovery/types.js.map +1 -0
- package/dist/tools/generated/ai_intelligence/index.d.ts +8 -0
- package/dist/tools/generated/ai_intelligence/index.d.ts.map +1 -0
- package/dist/tools/generated/ai_intelligence/index.js +282 -0
- package/dist/tools/generated/ai_intelligence/index.js.map +1 -0
- package/dist/tools/generated/api_security/index.d.ts +8 -0
- package/dist/tools/generated/api_security/index.d.ts.map +1 -0
- package/dist/tools/generated/api_security/index.js +1852 -0
- package/dist/tools/generated/api_security/index.js.map +1 -0
- package/dist/tools/generated/applications/index.d.ts +8 -0
- package/dist/tools/generated/applications/index.d.ts.map +1 -0
- package/dist/tools/generated/applications/index.js +1589 -0
- package/dist/tools/generated/applications/index.js.map +1 -0
- package/dist/tools/generated/bigip/index.d.ts +8 -0
- package/dist/tools/generated/bigip/index.d.ts.map +1 -0
- package/dist/tools/generated/bigip/index.js +1173 -0
- package/dist/tools/generated/bigip/index.js.map +1 -0
- package/dist/tools/generated/billing/index.d.ts +8 -0
- package/dist/tools/generated/billing/index.d.ts.map +1 -0
- package/dist/tools/generated/billing/index.js +759 -0
- package/dist/tools/generated/billing/index.js.map +1 -0
- package/dist/tools/generated/cdn/index.d.ts +8 -0
- package/dist/tools/generated/cdn/index.d.ts.map +1 -0
- package/dist/tools/generated/cdn/index.js +841 -0
- package/dist/tools/generated/cdn/index.js.map +1 -0
- package/dist/tools/generated/config/index.d.ts +8 -0
- package/dist/tools/generated/config/index.d.ts.map +1 -0
- package/dist/tools/generated/config/index.js +316 -0
- package/dist/tools/generated/config/index.js.map +1 -0
- package/dist/tools/generated/identity/index.d.ts +8 -0
- package/dist/tools/generated/identity/index.d.ts.map +1 -0
- package/dist/tools/generated/identity/index.js +5371 -0
- package/dist/tools/generated/identity/index.js.map +1 -0
- package/dist/tools/generated/infrastructure/index.d.ts +8 -0
- package/dist/tools/generated/infrastructure/index.d.ts.map +1 -0
- package/dist/tools/generated/infrastructure/index.js +5342 -0
- package/dist/tools/generated/infrastructure/index.js.map +1 -0
- package/dist/tools/generated/infrastructure_protection/index.d.ts +8 -0
- package/dist/tools/generated/infrastructure_protection/index.d.ts.map +1 -0
- package/dist/tools/generated/infrastructure_protection/index.js +2919 -0
- package/dist/tools/generated/infrastructure_protection/index.js.map +1 -0
- package/dist/tools/generated/integrations/index.d.ts +8 -0
- package/dist/tools/generated/integrations/index.d.ts.map +1 -0
- package/dist/tools/generated/integrations/index.js +1995 -0
- package/dist/tools/generated/integrations/index.js.map +1 -0
- package/dist/tools/generated/load_balancer/index.d.ts +8 -0
- package/dist/tools/generated/load_balancer/index.d.ts.map +1 -0
- package/dist/tools/generated/load_balancer/index.js +2269 -0
- package/dist/tools/generated/load_balancer/index.js.map +1 -0
- package/dist/tools/generated/networking/index.d.ts +8 -0
- package/dist/tools/generated/networking/index.d.ts.map +1 -0
- package/dist/tools/generated/networking/index.js +11289 -0
- package/dist/tools/generated/networking/index.js.map +1 -0
- package/dist/tools/generated/nginx/index.d.ts +8 -0
- package/dist/tools/generated/nginx/index.d.ts.map +1 -0
- package/dist/tools/generated/nginx/index.js +680 -0
- package/dist/tools/generated/nginx/index.js.map +1 -0
- package/dist/tools/generated/observability/index.d.ts +8 -0
- package/dist/tools/generated/observability/index.d.ts.map +1 -0
- package/dist/tools/generated/observability/index.js +6140 -0
- package/dist/tools/generated/observability/index.js.map +1 -0
- package/dist/tools/generated/operations/index.d.ts +8 -0
- package/dist/tools/generated/operations/index.d.ts.map +1 -0
- package/dist/tools/generated/operations/index.js +1759 -0
- package/dist/tools/generated/operations/index.js.map +1 -0
- package/dist/tools/generated/security/index.d.ts +8 -0
- package/dist/tools/generated/security/index.d.ts.map +1 -0
- package/dist/tools/generated/security/index.js +9111 -0
- package/dist/tools/generated/security/index.js.map +1 -0
- package/dist/tools/generated/service_mesh/index.d.ts +8 -0
- package/dist/tools/generated/service_mesh/index.d.ts.map +1 -0
- package/dist/tools/generated/service_mesh/index.js +1628 -0
- package/dist/tools/generated/service_mesh/index.js.map +1 -0
- package/dist/tools/generated/shape_security/index.d.ts +8 -0
- package/dist/tools/generated/shape_security/index.d.ts.map +1 -0
- package/dist/tools/generated/shape_security/index.js +4121 -0
- package/dist/tools/generated/shape_security/index.js.map +1 -0
- package/dist/tools/generated/subscriptions/index.d.ts +8 -0
- package/dist/tools/generated/subscriptions/index.d.ts.map +1 -0
- package/dist/tools/generated/subscriptions/index.js +778 -0
- package/dist/tools/generated/subscriptions/index.js.map +1 -0
- package/dist/tools/generated/tenant_management/index.d.ts +8 -0
- package/dist/tools/generated/tenant_management/index.d.ts.map +1 -0
- package/dist/tools/generated/tenant_management/index.js +2292 -0
- package/dist/tools/generated/tenant_management/index.js.map +1 -0
- package/dist/tools/generated/vpn/index.d.ts +8 -0
- package/dist/tools/generated/vpn/index.d.ts.map +1 -0
- package/dist/tools/generated/vpn/index.js +1183 -0
- package/dist/tools/generated/vpn/index.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +6 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/registry.d.ts +27 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +83 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/utils/error-handling.d.ts +109 -0
- package/dist/utils/error-handling.d.ts.map +1 -0
- package/dist/utils/error-handling.js +239 -0
- package/dist/utils/error-handling.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logging.d.ts +75 -0
- package/dist/utils/logging.d.ts.map +1 -0
- package/dist/utils/logging.js +131 -0
- package/dist/utils/logging.js.map +1 -0
- package/manifest.json +143 -0
- package/package.json +95 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompts Module - Export all prompt utilities
|
|
3
|
+
*/
|
|
4
|
+
export { WORKFLOW_PROMPTS, getWorkflowPrompt, processPromptTemplate, deployHttpLoadBalancerPrompt, configureWafPrompt, createMultiCloudSitePrompt, generateTerraformPrompt, } from "./workflows.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,4BAA4B,EAC5B,kBAAkB,EAClB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Workflow Prompts
|
|
3
|
+
*
|
|
4
|
+
* Provides guided workflows for common F5XC operations.
|
|
5
|
+
* These prompts help users accomplish complex multi-step tasks.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Workflow prompt definition
|
|
9
|
+
*/
|
|
10
|
+
export interface WorkflowPrompt {
|
|
11
|
+
/** Unique prompt identifier */
|
|
12
|
+
name: string;
|
|
13
|
+
/** Human-readable description */
|
|
14
|
+
description: string;
|
|
15
|
+
/** Prompt arguments */
|
|
16
|
+
arguments: WorkflowArgument[];
|
|
17
|
+
/** Prompt template */
|
|
18
|
+
template: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Workflow argument
|
|
22
|
+
*/
|
|
23
|
+
export interface WorkflowArgument {
|
|
24
|
+
/** Argument name */
|
|
25
|
+
name: string;
|
|
26
|
+
/** Argument description */
|
|
27
|
+
description: string;
|
|
28
|
+
/** Whether argument is required */
|
|
29
|
+
required: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Deploy HTTP Load Balancer workflow
|
|
33
|
+
*/
|
|
34
|
+
export declare const deployHttpLoadBalancerPrompt: WorkflowPrompt;
|
|
35
|
+
/**
|
|
36
|
+
* Configure WAF workflow
|
|
37
|
+
*/
|
|
38
|
+
export declare const configureWafPrompt: WorkflowPrompt;
|
|
39
|
+
/**
|
|
40
|
+
* Create Multi-Cloud Site workflow
|
|
41
|
+
*/
|
|
42
|
+
export declare const createMultiCloudSitePrompt: WorkflowPrompt;
|
|
43
|
+
/**
|
|
44
|
+
* Generate Terraform from F5XC workflow
|
|
45
|
+
*/
|
|
46
|
+
export declare const generateTerraformPrompt: WorkflowPrompt;
|
|
47
|
+
/**
|
|
48
|
+
* All workflow prompts
|
|
49
|
+
*/
|
|
50
|
+
export declare const WORKFLOW_PROMPTS: WorkflowPrompt[];
|
|
51
|
+
/**
|
|
52
|
+
* Get workflow prompt by name
|
|
53
|
+
*/
|
|
54
|
+
export declare function getWorkflowPrompt(name: string): WorkflowPrompt | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Process prompt template with arguments
|
|
57
|
+
*/
|
|
58
|
+
export declare function processPromptTemplate(template: string, args: Record<string, string>): string;
|
|
59
|
+
//# sourceMappingURL=workflows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/prompts/workflows.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,sBAAsB;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,4BAA4B,EAAE,cA8K1C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAuGhC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,cAqJxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,cAmGrC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAK5C,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE1E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAuB5F"}
|
|
@@ -0,0 +1,585 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Workflow Prompts
|
|
3
|
+
*
|
|
4
|
+
* Provides guided workflows for common F5XC operations.
|
|
5
|
+
* These prompts help users accomplish complex multi-step tasks.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Deploy HTTP Load Balancer workflow
|
|
9
|
+
*/
|
|
10
|
+
export const deployHttpLoadBalancerPrompt = {
|
|
11
|
+
name: "deploy-http-loadbalancer",
|
|
12
|
+
description: "Guide through deploying an HTTP Load Balancer with origin pool, health checks, and optional WAF",
|
|
13
|
+
arguments: [
|
|
14
|
+
{
|
|
15
|
+
name: "namespace",
|
|
16
|
+
description: "Namespace for the load balancer",
|
|
17
|
+
required: true,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
name: "name",
|
|
21
|
+
description: "Name for the load balancer",
|
|
22
|
+
required: true,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
name: "domain",
|
|
26
|
+
description: "Domain name for the load balancer (e.g., app.example.com)",
|
|
27
|
+
required: true,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "backend_ip",
|
|
31
|
+
description: "IP address of the backend server",
|
|
32
|
+
required: true,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: "backend_port",
|
|
36
|
+
description: "Port of the backend server (default: 80)",
|
|
37
|
+
required: false,
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: "enable_waf",
|
|
41
|
+
description: "Enable Web Application Firewall (true/false)",
|
|
42
|
+
required: false,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
template: `# Deploy HTTP Load Balancer Workflow
|
|
46
|
+
|
|
47
|
+
I'll help you deploy an HTTP Load Balancer in F5 Distributed Cloud.
|
|
48
|
+
|
|
49
|
+
## Configuration Summary
|
|
50
|
+
- **Namespace**: {{namespace}}
|
|
51
|
+
- **Load Balancer Name**: {{name}}
|
|
52
|
+
- **Domain**: {{domain}}
|
|
53
|
+
- **Backend**: {{backend_ip}}:{{backend_port}}
|
|
54
|
+
- **WAF Enabled**: {{enable_waf}}
|
|
55
|
+
|
|
56
|
+
## Steps
|
|
57
|
+
|
|
58
|
+
### Step 1: Create Origin Pool
|
|
59
|
+
First, create an origin pool to define your backend servers.
|
|
60
|
+
|
|
61
|
+
**f5xcctl command:**
|
|
62
|
+
\`\`\`bash
|
|
63
|
+
f5xcctl apply -f - <<EOF
|
|
64
|
+
apiVersion: config.volterra.io/v1
|
|
65
|
+
kind: origin_pool
|
|
66
|
+
metadata:
|
|
67
|
+
name: {{name}}-origin-pool
|
|
68
|
+
namespace: {{namespace}}
|
|
69
|
+
spec:
|
|
70
|
+
origin_servers:
|
|
71
|
+
- public_ip:
|
|
72
|
+
ip: {{backend_ip}}
|
|
73
|
+
port: {{backend_port}}
|
|
74
|
+
no_tls: {}
|
|
75
|
+
endpoint_selection: LOCAL_PREFERRED
|
|
76
|
+
loadbalancer_algorithm: ROUND_ROBIN
|
|
77
|
+
EOF
|
|
78
|
+
\`\`\`
|
|
79
|
+
|
|
80
|
+
**Terraform:**
|
|
81
|
+
\`\`\`hcl
|
|
82
|
+
resource "volterra_origin_pool" "{{name}}" {
|
|
83
|
+
name = "{{name}}-origin-pool"
|
|
84
|
+
namespace = "{{namespace}}"
|
|
85
|
+
|
|
86
|
+
origin_servers {
|
|
87
|
+
public_ip {
|
|
88
|
+
ip = "{{backend_ip}}"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
port = {{backend_port}}
|
|
93
|
+
no_tls = true
|
|
94
|
+
endpoint_selection = "LOCAL_PREFERRED"
|
|
95
|
+
loadbalancer_algorithm = "ROUND_ROBIN"
|
|
96
|
+
}
|
|
97
|
+
\`\`\`
|
|
98
|
+
|
|
99
|
+
### Step 2: Create HTTP Load Balancer
|
|
100
|
+
|
|
101
|
+
**f5xcctl command:**
|
|
102
|
+
\`\`\`bash
|
|
103
|
+
f5xcctl apply -f - <<EOF
|
|
104
|
+
apiVersion: config.volterra.io/v1
|
|
105
|
+
kind: http_loadbalancer
|
|
106
|
+
metadata:
|
|
107
|
+
name: {{name}}
|
|
108
|
+
namespace: {{namespace}}
|
|
109
|
+
spec:
|
|
110
|
+
domains:
|
|
111
|
+
- {{domain}}
|
|
112
|
+
http:
|
|
113
|
+
dns_volterra_managed: true
|
|
114
|
+
default_route_pools:
|
|
115
|
+
- pool:
|
|
116
|
+
tenant: \${F5XC_TENANT}
|
|
117
|
+
namespace: {{namespace}}
|
|
118
|
+
name: {{name}}-origin-pool
|
|
119
|
+
weight: 1
|
|
120
|
+
advertise_on_public_default_vip: {}
|
|
121
|
+
EOF
|
|
122
|
+
\`\`\`
|
|
123
|
+
|
|
124
|
+
**Terraform:**
|
|
125
|
+
\`\`\`hcl
|
|
126
|
+
resource "volterra_http_loadbalancer" "{{name}}" {
|
|
127
|
+
name = "{{name}}"
|
|
128
|
+
namespace = "{{namespace}}"
|
|
129
|
+
|
|
130
|
+
domains = ["{{domain}}"]
|
|
131
|
+
|
|
132
|
+
http {
|
|
133
|
+
dns_volterra_managed = true
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
default_route_pools {
|
|
137
|
+
pool {
|
|
138
|
+
name = volterra_origin_pool.{{name}}.name
|
|
139
|
+
namespace = "{{namespace}}"
|
|
140
|
+
}
|
|
141
|
+
weight = 1
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
advertise_on_public_default_vip = true
|
|
145
|
+
}
|
|
146
|
+
\`\`\`
|
|
147
|
+
|
|
148
|
+
{{#if enable_waf}}
|
|
149
|
+
### Step 3: Enable WAF Protection
|
|
150
|
+
|
|
151
|
+
**f5xcctl command:**
|
|
152
|
+
\`\`\`bash
|
|
153
|
+
f5xcctl apply -f - <<EOF
|
|
154
|
+
apiVersion: config.volterra.io/v1
|
|
155
|
+
kind: app_firewall
|
|
156
|
+
metadata:
|
|
157
|
+
name: {{name}}-waf
|
|
158
|
+
namespace: {{namespace}}
|
|
159
|
+
spec:
|
|
160
|
+
detection_settings:
|
|
161
|
+
signature_selection_setting:
|
|
162
|
+
default_attack_type_settings: {}
|
|
163
|
+
high_medium_accuracy_signatures: {}
|
|
164
|
+
enable_suppression: {}
|
|
165
|
+
enable_threat_campaigns: {}
|
|
166
|
+
EOF
|
|
167
|
+
\`\`\`
|
|
168
|
+
{{/if}}
|
|
169
|
+
|
|
170
|
+
## Verification
|
|
171
|
+
|
|
172
|
+
After deployment, verify with:
|
|
173
|
+
\`\`\`bash
|
|
174
|
+
f5xcctl get http_loadbalancer {{name}} -n {{namespace}}
|
|
175
|
+
f5xcctl get origin_pool {{name}}-origin-pool -n {{namespace}}
|
|
176
|
+
\`\`\`
|
|
177
|
+
|
|
178
|
+
## Next Steps
|
|
179
|
+
- Configure DNS to point {{domain}} to the F5XC VIP
|
|
180
|
+
- Set up monitoring and alerts
|
|
181
|
+
- Consider enabling additional security features
|
|
182
|
+
`,
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* Configure WAF workflow
|
|
186
|
+
*/
|
|
187
|
+
export const configureWafPrompt = {
|
|
188
|
+
name: "configure-waf",
|
|
189
|
+
description: "Guide through configuring Web Application Firewall protection",
|
|
190
|
+
arguments: [
|
|
191
|
+
{
|
|
192
|
+
name: "namespace",
|
|
193
|
+
description: "Namespace for the WAF policy",
|
|
194
|
+
required: true,
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
name: "name",
|
|
198
|
+
description: "Name for the WAF policy",
|
|
199
|
+
required: true,
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
name: "loadbalancer",
|
|
203
|
+
description: "Name of the HTTP Load Balancer to protect",
|
|
204
|
+
required: true,
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
name: "mode",
|
|
208
|
+
description: "WAF mode: blocking or monitoring",
|
|
209
|
+
required: false,
|
|
210
|
+
},
|
|
211
|
+
],
|
|
212
|
+
template: `# Configure WAF Protection Workflow
|
|
213
|
+
|
|
214
|
+
I'll help you configure Web Application Firewall protection for your application.
|
|
215
|
+
|
|
216
|
+
## Configuration Summary
|
|
217
|
+
- **Namespace**: {{namespace}}
|
|
218
|
+
- **WAF Policy Name**: {{name}}
|
|
219
|
+
- **Load Balancer**: {{loadbalancer}}
|
|
220
|
+
- **Mode**: {{mode}}
|
|
221
|
+
|
|
222
|
+
## Steps
|
|
223
|
+
|
|
224
|
+
### Step 1: Create Application Firewall Policy
|
|
225
|
+
|
|
226
|
+
**f5xcctl command:**
|
|
227
|
+
\`\`\`bash
|
|
228
|
+
f5xcctl apply -f - <<EOF
|
|
229
|
+
apiVersion: config.volterra.io/v1
|
|
230
|
+
kind: app_firewall
|
|
231
|
+
metadata:
|
|
232
|
+
name: {{name}}
|
|
233
|
+
namespace: {{namespace}}
|
|
234
|
+
spec:
|
|
235
|
+
detection_settings:
|
|
236
|
+
signature_selection_setting:
|
|
237
|
+
default_attack_type_settings: {}
|
|
238
|
+
high_medium_accuracy_signatures: {}
|
|
239
|
+
enable_suppression: {}
|
|
240
|
+
enable_threat_campaigns: {}
|
|
241
|
+
bot_protection_setting:
|
|
242
|
+
malicious_bot_action: BLOCK
|
|
243
|
+
suspicious_bot_action: REPORT
|
|
244
|
+
good_bot_action: REPORT
|
|
245
|
+
blocking: {}
|
|
246
|
+
EOF
|
|
247
|
+
\`\`\`
|
|
248
|
+
|
|
249
|
+
**Terraform:**
|
|
250
|
+
\`\`\`hcl
|
|
251
|
+
resource "volterra_app_firewall" "{{name}}" {
|
|
252
|
+
name = "{{name}}"
|
|
253
|
+
namespace = "{{namespace}}"
|
|
254
|
+
|
|
255
|
+
detection_settings {
|
|
256
|
+
signature_selection_setting {
|
|
257
|
+
default_attack_type_settings {}
|
|
258
|
+
high_medium_accuracy_signatures {}
|
|
259
|
+
}
|
|
260
|
+
enable_suppression {}
|
|
261
|
+
enable_threat_campaigns {}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
bot_protection_setting {
|
|
265
|
+
malicious_bot_action = "BLOCK"
|
|
266
|
+
suspicious_bot_action = "REPORT"
|
|
267
|
+
good_bot_action = "REPORT"
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
blocking {}
|
|
271
|
+
}
|
|
272
|
+
\`\`\`
|
|
273
|
+
|
|
274
|
+
### Step 2: Attach WAF to Load Balancer
|
|
275
|
+
|
|
276
|
+
Update your HTTP Load Balancer to use the WAF policy.
|
|
277
|
+
|
|
278
|
+
## Verification
|
|
279
|
+
|
|
280
|
+
\`\`\`bash
|
|
281
|
+
f5xcctl get app_firewall {{name}} -n {{namespace}}
|
|
282
|
+
\`\`\`
|
|
283
|
+
|
|
284
|
+
## Security Recommendations
|
|
285
|
+
- Start in monitoring mode before enabling blocking
|
|
286
|
+
- Review security events regularly
|
|
287
|
+
- Fine-tune signature settings based on your application
|
|
288
|
+
- Consider enabling bot defense for API endpoints
|
|
289
|
+
`,
|
|
290
|
+
};
|
|
291
|
+
/**
|
|
292
|
+
* Create Multi-Cloud Site workflow
|
|
293
|
+
*/
|
|
294
|
+
export const createMultiCloudSitePrompt = {
|
|
295
|
+
name: "create-multicloud-site",
|
|
296
|
+
description: "Guide through deploying an F5XC site in AWS, Azure, or GCP",
|
|
297
|
+
arguments: [
|
|
298
|
+
{
|
|
299
|
+
name: "namespace",
|
|
300
|
+
description: "Namespace for the site",
|
|
301
|
+
required: true,
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
name: "name",
|
|
305
|
+
description: "Name for the site",
|
|
306
|
+
required: true,
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
name: "cloud",
|
|
310
|
+
description: "Cloud provider: aws, azure, or gcp",
|
|
311
|
+
required: true,
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
name: "region",
|
|
315
|
+
description: "Cloud region for deployment",
|
|
316
|
+
required: true,
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
name: "vpc_id",
|
|
320
|
+
description: "VPC/VNet ID to deploy into",
|
|
321
|
+
required: true,
|
|
322
|
+
},
|
|
323
|
+
],
|
|
324
|
+
template: `# Create Multi-Cloud Site Workflow
|
|
325
|
+
|
|
326
|
+
I'll help you deploy an F5 Distributed Cloud site in {{cloud}}.
|
|
327
|
+
|
|
328
|
+
## Configuration Summary
|
|
329
|
+
- **Namespace**: {{namespace}}
|
|
330
|
+
- **Site Name**: {{name}}
|
|
331
|
+
- **Cloud Provider**: {{cloud}}
|
|
332
|
+
- **Region**: {{region}}
|
|
333
|
+
- **VPC/VNet**: {{vpc_id}}
|
|
334
|
+
|
|
335
|
+
## Prerequisites
|
|
336
|
+
1. Cloud credentials configured in F5XC
|
|
337
|
+
2. Appropriate IAM permissions in {{cloud}}
|
|
338
|
+
3. VPC/VNet exists and is accessible
|
|
339
|
+
|
|
340
|
+
## Steps
|
|
341
|
+
|
|
342
|
+
### Step 1: Verify Cloud Credentials
|
|
343
|
+
|
|
344
|
+
\`\`\`bash
|
|
345
|
+
f5xcctl get cloud_credentials -n {{namespace}}
|
|
346
|
+
\`\`\`
|
|
347
|
+
|
|
348
|
+
### Step 2: Create Site
|
|
349
|
+
|
|
350
|
+
{{#if (eq cloud "aws")}}
|
|
351
|
+
**AWS VPC Site:**
|
|
352
|
+
\`\`\`bash
|
|
353
|
+
f5xcctl apply -f - <<EOF
|
|
354
|
+
apiVersion: config.volterra.io/v1
|
|
355
|
+
kind: aws_vpc_site
|
|
356
|
+
metadata:
|
|
357
|
+
name: {{name}}
|
|
358
|
+
namespace: {{namespace}}
|
|
359
|
+
spec:
|
|
360
|
+
aws_region: {{region}}
|
|
361
|
+
vpc:
|
|
362
|
+
existing_vpc:
|
|
363
|
+
vpc_id: {{vpc_id}}
|
|
364
|
+
instance_type: t3.xlarge
|
|
365
|
+
ingress_gw:
|
|
366
|
+
aws_certified_hw: aws-byol-voltmesh
|
|
367
|
+
logs_streaming_disabled: {}
|
|
368
|
+
ssh_key: your-ssh-key
|
|
369
|
+
EOF
|
|
370
|
+
\`\`\`
|
|
371
|
+
{{/if}}
|
|
372
|
+
|
|
373
|
+
{{#if (eq cloud "azure")}}
|
|
374
|
+
**Azure VNet Site:**
|
|
375
|
+
\`\`\`bash
|
|
376
|
+
f5xcctl apply -f - <<EOF
|
|
377
|
+
apiVersion: config.volterra.io/v1
|
|
378
|
+
kind: azure_vnet_site
|
|
379
|
+
metadata:
|
|
380
|
+
name: {{name}}
|
|
381
|
+
namespace: {{namespace}}
|
|
382
|
+
spec:
|
|
383
|
+
azure_region: {{region}}
|
|
384
|
+
resource_group: your-resource-group
|
|
385
|
+
vnet:
|
|
386
|
+
existing_vnet:
|
|
387
|
+
resource_group: your-resource-group
|
|
388
|
+
vnet_name: {{vpc_id}}
|
|
389
|
+
machine_type: Standard_D3_v2
|
|
390
|
+
ingress_gw:
|
|
391
|
+
azure_certified_hw: azure-byol-voltmesh
|
|
392
|
+
logs_streaming_disabled: {}
|
|
393
|
+
EOF
|
|
394
|
+
\`\`\`
|
|
395
|
+
{{/if}}
|
|
396
|
+
|
|
397
|
+
{{#if (eq cloud "gcp")}}
|
|
398
|
+
**GCP VPC Site:**
|
|
399
|
+
\`\`\`bash
|
|
400
|
+
f5xcctl apply -f - <<EOF
|
|
401
|
+
apiVersion: config.volterra.io/v1
|
|
402
|
+
kind: gcp_vpc_site
|
|
403
|
+
metadata:
|
|
404
|
+
name: {{name}}
|
|
405
|
+
namespace: {{namespace}}
|
|
406
|
+
spec:
|
|
407
|
+
gcp_region: {{region}}
|
|
408
|
+
vpc_network:
|
|
409
|
+
existing_network:
|
|
410
|
+
name: {{vpc_id}}
|
|
411
|
+
instance_type: n1-standard-4
|
|
412
|
+
ingress_gw:
|
|
413
|
+
gcp_certified_hw: gcp-byol-voltmesh
|
|
414
|
+
logs_streaming_disabled: {}
|
|
415
|
+
EOF
|
|
416
|
+
\`\`\`
|
|
417
|
+
{{/if}}
|
|
418
|
+
|
|
419
|
+
### Step 3: Apply Terraform Configuration
|
|
420
|
+
|
|
421
|
+
\`\`\`bash
|
|
422
|
+
terraform apply -auto-approve
|
|
423
|
+
\`\`\`
|
|
424
|
+
|
|
425
|
+
### Step 4: Monitor Site Status
|
|
426
|
+
|
|
427
|
+
\`\`\`bash
|
|
428
|
+
# Wait for site to become online
|
|
429
|
+
f5xcctl get {{cloud}}_vpc_site {{name}} -n {{namespace}} -w
|
|
430
|
+
\`\`\`
|
|
431
|
+
|
|
432
|
+
## Verification
|
|
433
|
+
|
|
434
|
+
\`\`\`bash
|
|
435
|
+
f5xcctl get sites
|
|
436
|
+
\`\`\`
|
|
437
|
+
|
|
438
|
+
## Next Steps
|
|
439
|
+
- Configure network policies
|
|
440
|
+
- Set up load balancers to use this site
|
|
441
|
+
- Enable monitoring and logging
|
|
442
|
+
`,
|
|
443
|
+
};
|
|
444
|
+
/**
|
|
445
|
+
* Generate Terraform from F5XC workflow
|
|
446
|
+
*/
|
|
447
|
+
export const generateTerraformPrompt = {
|
|
448
|
+
name: "generate-terraform",
|
|
449
|
+
description: "Generate Terraform configuration from existing F5XC resources",
|
|
450
|
+
arguments: [
|
|
451
|
+
{
|
|
452
|
+
name: "namespace",
|
|
453
|
+
description: "Namespace to export",
|
|
454
|
+
required: true,
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
name: "resource_type",
|
|
458
|
+
description: "Resource type to export (e.g., http_loadbalancer)",
|
|
459
|
+
required: false,
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
name: "name",
|
|
463
|
+
description: "Specific resource name to export",
|
|
464
|
+
required: false,
|
|
465
|
+
},
|
|
466
|
+
],
|
|
467
|
+
template: `# Generate Terraform Configuration
|
|
468
|
+
|
|
469
|
+
I'll help you export F5XC resources as Terraform configuration.
|
|
470
|
+
|
|
471
|
+
## Export Parameters
|
|
472
|
+
- **Namespace**: {{namespace}}
|
|
473
|
+
- **Resource Type**: {{resource_type}}
|
|
474
|
+
- **Resource Name**: {{name}}
|
|
475
|
+
|
|
476
|
+
## Steps
|
|
477
|
+
|
|
478
|
+
### Step 1: List Resources
|
|
479
|
+
|
|
480
|
+
\`\`\`bash
|
|
481
|
+
{{#if resource_type}}
|
|
482
|
+
f5xcctl get {{resource_type}}s -n {{namespace}} -o json
|
|
483
|
+
{{else}}
|
|
484
|
+
# List all resource types
|
|
485
|
+
f5xcctl get http_loadbalancers -n {{namespace}}
|
|
486
|
+
f5xcctl get origin_pools -n {{namespace}}
|
|
487
|
+
f5xcctl get app_firewalls -n {{namespace}}
|
|
488
|
+
{{/if}}
|
|
489
|
+
\`\`\`
|
|
490
|
+
|
|
491
|
+
### Step 2: Export to Terraform
|
|
492
|
+
|
|
493
|
+
{{#if name}}
|
|
494
|
+
\`\`\`bash
|
|
495
|
+
f5xcctl get {{resource_type}} {{name}} -n {{namespace}} -o terraform > {{name}}.tf
|
|
496
|
+
\`\`\`
|
|
497
|
+
{{else}}
|
|
498
|
+
\`\`\`bash
|
|
499
|
+
# Export all resources of type
|
|
500
|
+
f5xcctl get {{resource_type}}s -n {{namespace}} -o terraform > {{resource_type}}.tf
|
|
501
|
+
\`\`\`
|
|
502
|
+
{{/if}}
|
|
503
|
+
|
|
504
|
+
### Step 3: Generate Import Statements
|
|
505
|
+
|
|
506
|
+
\`\`\`bash
|
|
507
|
+
# Generate terraform import commands
|
|
508
|
+
f5xcctl get {{resource_type}} {{name}} -n {{namespace}} --import-cmd
|
|
509
|
+
\`\`\`
|
|
510
|
+
|
|
511
|
+
## Example Output
|
|
512
|
+
|
|
513
|
+
\`\`\`hcl
|
|
514
|
+
# Generated Terraform configuration
|
|
515
|
+
terraform {
|
|
516
|
+
required_providers {
|
|
517
|
+
volterra = {
|
|
518
|
+
source = "volterraedge/volterra"
|
|
519
|
+
version = "~> 0.11"
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
provider "volterra" {
|
|
525
|
+
api_p12_file = var.api_p12_file
|
|
526
|
+
url = var.api_url
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
# Import command:
|
|
530
|
+
# terraform import volterra_{{resource_type}}.{{name}} {{namespace}}/{{name}}
|
|
531
|
+
|
|
532
|
+
resource "volterra_{{resource_type}}" "{{name}}" {
|
|
533
|
+
name = "{{name}}"
|
|
534
|
+
namespace = "{{namespace}}"
|
|
535
|
+
|
|
536
|
+
# Configuration exported from F5XC
|
|
537
|
+
}
|
|
538
|
+
\`\`\`
|
|
539
|
+
|
|
540
|
+
## Best Practices
|
|
541
|
+
- Use variables for sensitive values
|
|
542
|
+
- Organize resources by namespace
|
|
543
|
+
- Use modules for reusable configurations
|
|
544
|
+
- Store state in remote backend
|
|
545
|
+
`,
|
|
546
|
+
};
|
|
547
|
+
/**
|
|
548
|
+
* All workflow prompts
|
|
549
|
+
*/
|
|
550
|
+
export const WORKFLOW_PROMPTS = [
|
|
551
|
+
deployHttpLoadBalancerPrompt,
|
|
552
|
+
configureWafPrompt,
|
|
553
|
+
createMultiCloudSitePrompt,
|
|
554
|
+
generateTerraformPrompt,
|
|
555
|
+
];
|
|
556
|
+
/**
|
|
557
|
+
* Get workflow prompt by name
|
|
558
|
+
*/
|
|
559
|
+
export function getWorkflowPrompt(name) {
|
|
560
|
+
return WORKFLOW_PROMPTS.find((p) => p.name === name);
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* Process prompt template with arguments
|
|
564
|
+
*/
|
|
565
|
+
export function processPromptTemplate(template, args) {
|
|
566
|
+
let result = template;
|
|
567
|
+
// Replace simple {{variable}} placeholders
|
|
568
|
+
for (const [key, value] of Object.entries(args)) {
|
|
569
|
+
const pattern = new RegExp(`\\{\\{${key}\\}\\}`, "g");
|
|
570
|
+
result = result.replace(pattern, value ?? "");
|
|
571
|
+
}
|
|
572
|
+
// Handle {{#if variable}} ... {{/if}} blocks
|
|
573
|
+
const ifPattern = /\{\{#if\s+(\w+)\}\}([\s\S]*?)\{\{\/if\}\}/g;
|
|
574
|
+
result = result.replace(ifPattern, (_, varName, content) => {
|
|
575
|
+
const value = args[varName];
|
|
576
|
+
return value && value !== "false" ? content : "";
|
|
577
|
+
});
|
|
578
|
+
// Handle {{#if (eq var "value")}} ... {{/if}} blocks
|
|
579
|
+
const eqPattern = /\{\{#if\s+\(eq\s+(\w+)\s+"([^"]+)"\)\}\}([\s\S]*?)\{\{\/if\}\}/g;
|
|
580
|
+
result = result.replace(eqPattern, (_, varName, expected, content) => {
|
|
581
|
+
return args[varName] === expected ? content : "";
|
|
582
|
+
});
|
|
583
|
+
return result;
|
|
584
|
+
}
|
|
585
|
+
//# sourceMappingURL=workflows.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/prompts/workflows.ts"],"names":[],"mappings":"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"}
|