@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
|
@@ -12,11 +12,11 @@ This guide covers authentication configuration for the F5 Distributed Cloud Terr
|
|
|
12
12
|
|
|
13
13
|
## Quick Reference
|
|
14
14
|
|
|
15
|
-
| Method
|
|
16
|
-
|
|
17
|
-
| API Token
|
|
18
|
-
| P12 Certificate | Moderate
|
|
19
|
-
| PEM Certificate | Advanced
|
|
15
|
+
| Method | Complexity | Best For | Security |
|
|
16
|
+
| --------------- | ---------- | -------------------------------- | ---------------------- |
|
|
17
|
+
| API Token | Simplest | Development, quick testing | Bearer token over TLS |
|
|
18
|
+
| P12 Certificate | Moderate | Production, CI/CD | Mutual TLS (mTLS) |
|
|
19
|
+
| PEM Certificate | Advanced | When tooling requires PEM format | Derived from P12, mTLS |
|
|
20
20
|
|
|
21
21
|
## Prerequisites
|
|
22
22
|
|
|
@@ -79,7 +79,7 @@ Service credentials are managed through IAM and recommended for production. They
|
|
|
79
79
|
7. Select an expiry date
|
|
80
80
|
8. Click **Download** to get the `.p12` file
|
|
81
81
|
|
|
82
|
-
##
|
|
82
|
+
## Provider Configuration
|
|
83
83
|
|
|
84
84
|
### Method 1: API Token Authentication (Simplest)
|
|
85
85
|
|
|
@@ -170,15 +170,15 @@ provider "f5xc" {
|
|
|
170
170
|
|
|
171
171
|
## Environment Variable Reference
|
|
172
172
|
|
|
173
|
-
| Variable
|
|
174
|
-
|
|
175
|
-
| `F5XC_API_URL`
|
|
176
|
-
| `F5XC_API_TOKEN`
|
|
177
|
-
| `F5XC_P12_FILE`
|
|
178
|
-
| `F5XC_P12_PASSWORD` | Password for P12 file
|
|
179
|
-
| `F5XC_CERT`
|
|
180
|
-
| `F5XC_KEY`
|
|
181
|
-
| `F5XC_CACERT`
|
|
173
|
+
| Variable | Description | Required |
|
|
174
|
+
| ------------------- | ---------------------------------------------- | ------------------------------ |
|
|
175
|
+
| `F5XC_API_URL` | F5XC tenant API URL | Yes |
|
|
176
|
+
| `F5XC_API_TOKEN` | API token for bearer authentication | One of: token, P12, or PEM |
|
|
177
|
+
| `F5XC_P12_FILE` | Path to P12 certificate file | With `F5XC_P12_PASSWORD` |
|
|
178
|
+
| `F5XC_P12_PASSWORD` | Password for P12 file | With `F5XC_P12_FILE` |
|
|
179
|
+
| `F5XC_CERT` | Path to PEM certificate file | With `F5XC_KEY` |
|
|
180
|
+
| `F5XC_KEY` | Path to PEM private key file | With `F5XC_CERT` |
|
|
181
|
+
| `F5XC_CACERT` | Path to CA certificate for server verification | No |
|
|
182
182
|
|
|
183
183
|
**Adding to Shell Profile:**
|
|
184
184
|
|
|
@@ -241,10 +241,10 @@ jobs:
|
|
|
241
241
|
|
|
242
242
|
**GitHub Secrets to configure:**
|
|
243
243
|
|
|
244
|
-
| Secret Name
|
|
245
|
-
|
|
246
|
-
| `F5XC_API_URL`
|
|
247
|
-
| `F5XC_API_TOKEN`
|
|
244
|
+
| Secret Name | Value |
|
|
245
|
+
| ------------------ | ---------------------------------------------- |
|
|
246
|
+
| `F5XC_API_URL` | `https://your-tenant.console.ves.volterra.io` |
|
|
247
|
+
| `F5XC_API_TOKEN` | Your API token value |
|
|
248
248
|
|
|
249
249
|
### GitHub Actions with P12 Certificate
|
|
250
250
|
|
|
@@ -306,11 +306,11 @@ base64 -w 0 your-credentials.p12
|
|
|
306
306
|
|
|
307
307
|
**GitHub Secrets to configure:**
|
|
308
308
|
|
|
309
|
-
| Secret Name
|
|
310
|
-
|
|
311
|
-
| `F5XC_API_URL`
|
|
312
|
-
| `F5XC_P12_BASE64`
|
|
313
|
-
| `F5XC_P12_PASSWORD` | Password for the P12 file
|
|
309
|
+
| Secret Name | Value |
|
|
310
|
+
| ------------------- | ---------------------------------------------- |
|
|
311
|
+
| `F5XC_API_URL` | `https://your-tenant.console.ves.volterra.io` |
|
|
312
|
+
| `F5XC_P12_BASE64` | Base64-encoded P12 file contents |
|
|
313
|
+
| `F5XC_P12_PASSWORD` | Password for the P12 file |
|
|
314
314
|
|
|
315
315
|
## Security Best Practices
|
|
316
316
|
|
|
@@ -321,10 +321,10 @@ base64 -w 0 your-credentials.p12
|
|
|
321
321
|
|
|
322
322
|
### Choosing the Right Method
|
|
323
323
|
|
|
324
|
-
| Use Case
|
|
325
|
-
|
|
326
|
-
| Local development
|
|
327
|
-
| CI/CD pipelines
|
|
324
|
+
| Use Case | Recommended Method | Reason |
|
|
325
|
+
| --------------------- | ------------------- | ------------------------- |
|
|
326
|
+
| Local development | API Token | Simplest setup |
|
|
327
|
+
| CI/CD pipelines | P12 Certificate | mTLS security |
|
|
328
328
|
| Production automation | Service Credentials | Role-based access control |
|
|
329
329
|
|
|
330
330
|
## Troubleshooting
|
|
@@ -366,8 +366,8 @@ export F5XC_API_TOKEN="token" # Correct
|
|
|
366
366
|
F5XC_API_TOKEN="token" # Won't work
|
|
367
367
|
```
|
|
368
368
|
|
|
369
|
-
|
|
370
|
-
|
|
369
|
+
1. Verify spelling is exact (case-sensitive)
|
|
370
|
+
2. Check for hidden characters in values
|
|
371
371
|
|
|
372
372
|
## Revoking Credentials
|
|
373
373
|
|
|
@@ -21,7 +21,7 @@ F5 Distributed Cloud Secret Management ("blindfold") provides client-side encryp
|
|
|
21
21
|
|
|
22
22
|
### How It Works
|
|
23
23
|
|
|
24
|
-
```
|
|
24
|
+
```text
|
|
25
25
|
┌─────────────────────────────────────────────────────────────────────┐
|
|
26
26
|
│ Your Local Machine │
|
|
27
27
|
│ │
|
|
@@ -64,13 +64,15 @@ Before you begin, ensure you have:
|
|
|
64
64
|
|
|
65
65
|
Configure one of these authentication methods via environment variables:
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
#### Option 1: API Token (Recommended for development)
|
|
68
|
+
|
|
68
69
|
```bash
|
|
69
70
|
export F5XC_API_URL="https://your-tenant.console.ves.volterra.io"
|
|
70
71
|
export F5XC_API_TOKEN="your-api-token"
|
|
71
72
|
```
|
|
72
73
|
|
|
73
|
-
|
|
74
|
+
#### Option 2: P12 Certificate (Recommended for production)
|
|
75
|
+
|
|
74
76
|
```bash
|
|
75
77
|
export F5XC_API_URL="https://your-tenant.console.ves.volterra.io"
|
|
76
78
|
export F5XC_P12_FILE="/path/to/your-credentials.p12"
|
|
@@ -143,13 +145,14 @@ Encrypts base64-encoded plaintext:
|
|
|
143
145
|
provider::f5xc::blindfold(plaintext, policy_name, namespace)
|
|
144
146
|
```
|
|
145
147
|
|
|
146
|
-
| Parameter
|
|
147
|
-
|
|
148
|
-
| `plaintext`
|
|
149
|
-
| `policy_name` | string | Name of the SecretPolicy
|
|
150
|
-
| `namespace`
|
|
148
|
+
| Parameter | Type | Description |
|
|
149
|
+
| ------------- | ------ | -------------------------------- |
|
|
150
|
+
| `plaintext` | string | Base64-encoded secret to encrypt |
|
|
151
|
+
| `policy_name` | string | Name of the SecretPolicy |
|
|
152
|
+
| `namespace` | string | Namespace containing the policy |
|
|
151
153
|
|
|
152
154
|
**Example:**
|
|
155
|
+
|
|
153
156
|
```hcl
|
|
154
157
|
location = provider::f5xc::blindfold(
|
|
155
158
|
base64encode(var.my_secret),
|
|
@@ -166,13 +169,14 @@ Reads a file and encrypts its contents:
|
|
|
166
169
|
provider::f5xc::blindfold_file(path, policy_name, namespace)
|
|
167
170
|
```
|
|
168
171
|
|
|
169
|
-
| Parameter
|
|
170
|
-
|
|
171
|
-
| `path`
|
|
172
|
-
| `policy_name` | string | Name of the SecretPolicy
|
|
173
|
-
| `namespace`
|
|
172
|
+
| Parameter | Type | Description |
|
|
173
|
+
| ------------- | ------ | ------------------------------- |
|
|
174
|
+
| `path` | string | Path to the file to encrypt |
|
|
175
|
+
| `policy_name` | string | Name of the SecretPolicy |
|
|
176
|
+
| `namespace` | string | Namespace containing the policy |
|
|
174
177
|
|
|
175
178
|
**Example:**
|
|
179
|
+
|
|
176
180
|
```hcl
|
|
177
181
|
location = provider::f5xc::blindfold_file(
|
|
178
182
|
"${path.module}/certs/server.key",
|
|
@@ -361,9 +365,9 @@ locals {
|
|
|
361
365
|
RSA-OAEP encryption has a maximum plaintext size based on the key size:
|
|
362
366
|
|
|
363
367
|
| Key Size | Maximum Plaintext |
|
|
364
|
-
|
|
365
|
-
| 2048-bit | ~190 bytes
|
|
366
|
-
| 4096-bit | ~446 bytes
|
|
368
|
+
| -------- | ----------------- |
|
|
369
|
+
| 2048-bit | ~190 bytes |
|
|
370
|
+
| 4096-bit | ~446 bytes |
|
|
367
371
|
|
|
368
372
|
~> **Note:** If your secret exceeds the size limit, consider splitting it or using a different approach. The function will return a clear error message if the plaintext is too large.
|
|
369
373
|
|
|
@@ -371,7 +375,7 @@ RSA-OAEP encryption has a maximum plaintext size based on the key size:
|
|
|
371
375
|
|
|
372
376
|
The blindfold functions return a sealed secret string with the `string:///` prefix followed by a base64-encoded JSON structure:
|
|
373
377
|
|
|
374
|
-
```
|
|
378
|
+
```text
|
|
375
379
|
string:///eyJrZXlfdmVyc2lvbiI6InYxLjIuMyIsInBvbGljeV9pZCI6InNoYXJlZC92ZXMtaW8tYWxsb3ctdm9sdGVycmEiLCJ0ZW5hbnQiOiJ5b3VyLXRlbmFudCIsImRhdGEiOiJBQkNERUYxMjM0NTY3ODkwLi4uIn0=
|
|
376
380
|
```
|
|
377
381
|
|
|
@@ -387,6 +391,7 @@ When base64-decoded, the sealed JSON contains these fields:
|
|
|
387
391
|
```
|
|
388
392
|
|
|
389
393
|
Field descriptions:
|
|
394
|
+
|
|
390
395
|
- `key_version`: Public key version used for encryption
|
|
391
396
|
- `policy_id`: Reference to the SecretPolicy (namespace/name format)
|
|
392
397
|
- `tenant`: Your F5XC tenant identifier
|
|
@@ -405,6 +410,7 @@ Field descriptions:
|
|
|
405
410
|
**Symptom:** Error message about missing authentication configuration.
|
|
406
411
|
|
|
407
412
|
**Solution:**
|
|
413
|
+
|
|
408
414
|
```bash
|
|
409
415
|
# Verify environment variables are set
|
|
410
416
|
echo $F5XC_API_URL
|
|
@@ -422,6 +428,7 @@ export F5XC_API_TOKEN="your-api-token"
|
|
|
422
428
|
**Solutions:**
|
|
423
429
|
|
|
424
430
|
1. Use the built-in policy:
|
|
431
|
+
|
|
425
432
|
```hcl
|
|
426
433
|
policy_name = "ves-io-allow-volterra"
|
|
427
434
|
namespace = "shared"
|
|
@@ -436,6 +443,7 @@ export F5XC_API_TOKEN="your-api-token"
|
|
|
436
443
|
**Solutions:**
|
|
437
444
|
|
|
438
445
|
1. Verify your secret size:
|
|
446
|
+
|
|
439
447
|
```bash
|
|
440
448
|
wc -c < your-secret-file
|
|
441
449
|
```
|
|
@@ -451,6 +459,7 @@ export F5XC_API_TOKEN="your-api-token"
|
|
|
451
459
|
**Solutions:**
|
|
452
460
|
|
|
453
461
|
1. Use `${path.module}` for relative paths:
|
|
462
|
+
|
|
454
463
|
```hcl
|
|
455
464
|
location = provider::f5xc::blindfold_file(
|
|
456
465
|
"${path.module}/certs/server.key", # Correct
|
|
@@ -465,6 +474,7 @@ export F5XC_API_TOKEN="your-api-token"
|
|
|
465
474
|
**Symptom:** Error about invalid base64 encoding.
|
|
466
475
|
|
|
467
476
|
**Solution:** Ensure you're base64-encoding your plaintext:
|
|
477
|
+
|
|
468
478
|
```hcl
|
|
469
479
|
# Correct
|
|
470
480
|
location = provider::f5xc::blindfold(
|
|
@@ -89,9 +89,9 @@ Review the plan output, then type `yes` to confirm deployment.
|
|
|
89
89
|
|
|
90
90
|
After deployment, Terraform outputs a CNAME target. Create a DNS record:
|
|
91
91
|
|
|
92
|
-
| Type
|
|
93
|
-
|
|
94
|
-
| CNAME | app.example.com | ves-io-app-example-com.ac.vh.ves.io
|
|
92
|
+
| Type | Name | Value |
|
|
93
|
+
| ----- | --------------- | ------------------------------------ |
|
|
94
|
+
| CNAME | app.example.com | ves-io-app-example-com.ac.vh.ves.io |
|
|
95
95
|
|
|
96
96
|
~> **Note:** DNS propagation may take up to 48 hours, though typically completes within minutes.
|
|
97
97
|
|
|
@@ -153,7 +153,7 @@ labels = {
|
|
|
153
153
|
|
|
154
154
|
This guide creates the following resources:
|
|
155
155
|
|
|
156
|
-
```
|
|
156
|
+
```text
|
|
157
157
|
┌─────────────────────────────────────────┐
|
|
158
158
|
│ F5 Distributed Cloud │
|
|
159
159
|
│ │
|
|
@@ -185,14 +185,14 @@ This guide creates the following resources:
|
|
|
185
185
|
|
|
186
186
|
### Resources Created
|
|
187
187
|
|
|
188
|
-
| Resource
|
|
189
|
-
|
|
190
|
-
| `f5xc_namespace`
|
|
191
|
-
| `f5xc_healthcheck`
|
|
192
|
-
| `f5xc_origin_pool`
|
|
193
|
-
| `f5xc_app_firewall`
|
|
194
|
-
| `f5xc_rate_limiter`
|
|
195
|
-
| `f5xc_http_loadbalancer` | Main load balancer
|
|
188
|
+
| Resource | Purpose |
|
|
189
|
+
| ------------------------ | ----------------------------- |
|
|
190
|
+
| `f5xc_namespace` | Isolates resources (optional) |
|
|
191
|
+
| `f5xc_healthcheck` | Monitors origin server health |
|
|
192
|
+
| `f5xc_origin_pool` | Defines backend servers |
|
|
193
|
+
| `f5xc_app_firewall` | WAF configuration |
|
|
194
|
+
| `f5xc_rate_limiter` | Rate limiting policy |
|
|
195
|
+
| `f5xc_http_loadbalancer` | Main load balancer |
|
|
196
196
|
|
|
197
197
|
## Troubleshooting
|
|
198
198
|
|
|
@@ -49,8 +49,6 @@ resource "f5xc_api_credential" "example" {
|
|
|
49
49
|
|
|
50
50
|
<a id="name"></a>• [`name`](#name) - Required String<br>Name of the API Credential. Must be unique within the namespace
|
|
51
51
|
|
|
52
|
-
<a id="namespace"></a>• [`namespace`](#namespace) - Required String<br>Namespace where the API Credential will be created
|
|
53
|
-
|
|
54
52
|
<a id="annotations"></a>• [`annotations`](#annotations) - Optional Map<br>Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata
|
|
55
53
|
|
|
56
54
|
<a id="description"></a>• [`description`](#description) - Optional String<br>Human readable description for the object
|
|
@@ -59,6 +57,8 @@ resource "f5xc_api_credential" "example" {
|
|
|
59
57
|
|
|
60
58
|
<a id="labels"></a>• [`labels`](#labels) - Optional Map<br>Labels is a user defined key value map that can be attached to resources for organization and filtering
|
|
61
59
|
|
|
60
|
+
<a id="namespace"></a>• [`namespace`](#namespace) - Optional String<br>Namespace for the API Credential. For this resource type, namespace should be empty or omitted
|
|
61
|
+
|
|
62
62
|
### Spec Argument Reference
|
|
63
63
|
|
|
64
64
|
<a id="password"></a>• [`password`](#password) - Optional String<br>Password. Password is used for generating an API certificate P12 bundle user can use to protect access to it. this password will not be saved/persisted anywhere in the system. Applicable for credential type API_CERTIFICATE Users have to use this password when they use the certificate, e.g. in curl or while adding to key chain
|