@f5-sales-demo/xcsh 19.62.0 → 19.62.2

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@f5-sales-demo/xcsh",
4
- "version": "19.62.0",
4
+ "version": "19.62.2",
5
5
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
6
6
  "homepage": "https://github.com/f5-sales-demo/xcsh",
7
7
  "author": "Can Boluk",
@@ -56,13 +56,13 @@
56
56
  "dependencies": {
57
57
  "@agentclientprotocol/sdk": "0.16.1",
58
58
  "@mozilla/readability": "^0.6",
59
- "@f5-sales-demo/xcsh-stats": "19.62.0",
60
- "@f5-sales-demo/pi-agent-core": "19.62.0",
61
- "@f5-sales-demo/pi-ai": "19.62.0",
62
- "@f5-sales-demo/pi-natives": "19.62.0",
63
- "@f5-sales-demo/pi-resource-management": "19.62.0",
64
- "@f5-sales-demo/pi-tui": "19.62.0",
65
- "@f5-sales-demo/pi-utils": "19.62.0",
59
+ "@f5-sales-demo/xcsh-stats": "19.62.2",
60
+ "@f5-sales-demo/pi-agent-core": "19.62.2",
61
+ "@f5-sales-demo/pi-ai": "19.62.2",
62
+ "@f5-sales-demo/pi-natives": "19.62.2",
63
+ "@f5-sales-demo/pi-resource-management": "19.62.2",
64
+ "@f5-sales-demo/pi-tui": "19.62.2",
65
+ "@f5-sales-demo/pi-utils": "19.62.2",
66
66
  "@sinclair/typebox": "^0.34",
67
67
  "@xterm/headless": "^6.0",
68
68
  "ajv": "^8.20",
@@ -131,6 +131,25 @@ export function touchLastSeen(reg: Registry, sessionId: string | undefined, now:
131
131
  return true;
132
132
  }
133
133
 
134
+ /** True iff this manager should self-recycle because it is running a STALE on-disk
135
+ * binary. Only for a COMPILED install: after `brew upgrade` + `brew cleanup`, the old
136
+ * versioned binary the manager was launched from is DELETED, yet the process lingers
137
+ * on the freed inode — and can no longer spawn workers/spares (spawn ENOENT), which
138
+ * surfaces as the extension's "xcsh didn't start". Detecting the deleted binary lets
139
+ * the manager step down so a fresh one (launched from the version-stable PATH wrapper)
140
+ * takes over. Dev (`bun src/cli.ts`) has a live interpreter execPath → never stale.
141
+ * Fail-closed: any error from `exists` → NOT stale, so uncertainty never triggers a
142
+ * recycle loop. Only the unambiguous deleted-binary signal is used (a version/realpath
143
+ * drift signal was deliberately NOT added — false positives would flap-recycle). */
144
+ export function binaryIsStale(opts: { compiled: boolean; execPath: string; exists: (p: string) => boolean }): boolean {
145
+ if (!opts.compiled) return false;
146
+ try {
147
+ return !opts.exists(opts.execPath);
148
+ } catch {
149
+ return false;
150
+ }
151
+ }
152
+
134
153
  /** The NDJSON keepalive an actively-chatting worker writes to the manager control
135
154
  * socket to refresh its `lastSeen` (consumed by `touchLastSeen`). Null for the
136
155
  * unbound `spare` sentinel or an empty id — a spare has no session to keep alive. */
@@ -26,8 +26,11 @@ import { Command } from "@f5-sales-demo/pi-utils/cli";
26
26
  // slows the manager's cold start — keep the daemon's module graph minimal).
27
27
  import { VERSION } from "@f5-sales-demo/pi-utils/dirs";
28
28
  import { portCandidates } from "../browser/extension-bridge";
29
+ // Lean standalone fn (compiled-runtime detection) — no heavy graph, safe for the daemon.
30
+ import { detectCompiledRuntime } from "../internal-urls/build-info-runtime";
29
31
  import { removeManagerState, writeManagerState } from "../services/manager-state";
30
32
  import {
33
+ binaryIsStale,
31
34
  needsProvision,
32
35
  parseControlMsg,
33
36
  pickPort,
@@ -209,6 +212,17 @@ export default class Manager extends Command {
209
212
  // (production always reports the real binary VERSION).
210
213
  const selfVersion = process.env.XCSH_MANAGER_VERSION || VERSION;
211
214
 
215
+ // Durable-upgrade self-recycle (#upgrade-recycle): a compiled manager whose
216
+ // on-disk binary was removed by `brew upgrade`+`brew cleanup` lingers on the
217
+ // freed inode but can no longer spawn workers (ENOENT) → it must step down so a
218
+ // fresh manager (from the version-stable PATH wrapper) takes over. Dev is never
219
+ // compiled → never stale. `XCSH_FORCE_STALE=1` lets the dev-mode integration test
220
+ // exercise the recycle path (same env-override convention as XCSH_MANAGER_VERSION).
221
+ const compiled = detectCompiledRuntime(import.meta.url, Bun.env);
222
+ const isSelfStale = (): boolean =>
223
+ process.env.XCSH_FORCE_STALE === "1" ||
224
+ binaryIsStale({ compiled, execPath: process.execPath, exists: fs.existsSync });
225
+
212
226
  // Lifecycle gate (#1874): once we begin graceful shutdown we stop accepting
213
227
  // provisions (the host retries the successor manager) and never double-run
214
228
  // the teardown.
@@ -430,13 +444,22 @@ export default class Manager extends Command {
430
444
  const msg = parseControlMsg(raw);
431
445
  if (!msg) return; // fail closed on unknown/invalid frames
432
446
  if (msg.type === "provision") {
433
- // Draining: refuse new work so the host retries the successor manager.
434
- if (!accepting) {
447
+ // Draining, OR self-stale (our binary was removed by an upgrade): refuse
448
+ // this provision so the host retries the successor manager — spawning now
449
+ // would ENOENT on the deleted binary. If stale-but-still-accepting, step
450
+ // down immediately so the fresh manager takes over in seconds (not on the
451
+ // ≤60s sweep). Reuses the existing draining reply/contract.
452
+ const stale = accepting && isSelfStale();
453
+ if (!accepting || stale) {
435
454
  try {
436
455
  socket.write(`${JSON.stringify({ type: "draining" })}\n`);
437
456
  } catch {
438
457
  /* client hung up */
439
458
  }
459
+ if (stale) {
460
+ console.error("[xcsh manager] binary is stale (upgraded/removed) — recycling on provision");
461
+ gracefulShutdown("updated");
462
+ }
440
463
  return;
441
464
  }
442
465
  const provisionReceivedAt = Date.now(); // TTFT Phase 2: start of manager_provision
@@ -537,8 +560,15 @@ export default class Manager extends Command {
537
560
  // Pre-warm the spare pool so provisions can adopt instead of cold-spawn.
538
561
  if (poolTarget > 0) maintainPool();
539
562
 
540
- // Idle sweep: reap workers untouched for longer than the TTL.
563
+ // Idle sweep: reap workers untouched for longer than the TTL. Also self-recycle
564
+ // if our own binary went stale (upgrade removed it) — a lingering deleted-binary
565
+ // manager can't spawn workers, so step down for a fresh one (#upgrade-recycle).
541
566
  setInterval(() => {
567
+ if (isSelfStale()) {
568
+ console.error("[xcsh manager] binary is stale (upgraded/removed) — recycling on sweep");
569
+ gracefulShutdown("updated");
570
+ return;
571
+ }
542
572
  for (const key of staleKeys(reg, Date.now(), IDLE_MS)) reap(key);
543
573
  }, SWEEP_MS);
544
574
 
@@ -17,17 +17,17 @@ export interface BuildInfo {
17
17
  }
18
18
 
19
19
  export const BUILD_INFO: BuildInfo = {
20
- "version": "19.62.0",
21
- "commit": "002bc2b7d7e14a95e282f940730cbdc347197635",
22
- "shortCommit": "002bc2b",
20
+ "version": "19.62.2",
21
+ "commit": "2db94a2fe43570de2c145baf4692241c0154dd3e",
22
+ "shortCommit": "2db94a2",
23
23
  "branch": "main",
24
- "tag": "v19.62.0",
25
- "commitDate": "2026-07-08T02:22:10Z",
26
- "buildDate": "2026-07-08T02:45:44.169Z",
24
+ "tag": "v19.62.2",
25
+ "commitDate": "2026-07-08T20:22:16Z",
26
+ "buildDate": "2026-07-08T20:48:07.292Z",
27
27
  "dirty": true,
28
28
  "prNumber": "",
29
29
  "repoUrl": "https://github.com/f5-sales-demo/xcsh",
30
30
  "repoSlug": "f5-sales-demo/xcsh",
31
- "commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/002bc2b7d7e14a95e282f940730cbdc347197635",
32
- "releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.62.0"
31
+ "commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/2db94a2fe43570de2c145baf4692241c0154dd3e",
32
+ "releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.62.2"
33
33
  };
@@ -269,9 +269,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
269
269
  category: "load-balancing",
270
270
  description:
271
271
  "Advertise_policy object controls how and where a service represented by a given virtual_host object is advertised to consumers. configuration",
272
- required: ["name", "address", "protocol", "skip_xff_append"],
272
+ required: ["name", "namespace", "address", "protocol", "skip_xff_append"],
273
273
  minimal_config:
274
- 'resource "xcsh_advertise_policy" "example" {\n name = "example-advertise-policy"\n namespace = "system"\n\n address = "example-value"\n protocol = "example-value"\n skip_xff_append = true\n}',
274
+ 'resource "xcsh_advertise_policy" "example" {\n name = "example-advertise-policy"\n namespace = "staging"\n\n address = "example-value"\n protocol = "example-value"\n skip_xff_append = true\n}',
275
275
  dependencies: {
276
276
  requires: [],
277
277
  },
@@ -293,7 +293,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
293
293
  description: "New Alert Receiver object",
294
294
  required: ["name", "namespace", "receiver_choice"],
295
295
  minimal_config:
296
- 'resource "xcsh_alert_receiver" "example" {\n name = "example-alert-receiver"\n namespace = "system"\n}',
296
+ 'resource "xcsh_alert_receiver" "example" {\n name = "example-alert-receiver"\n namespace = "staging"\n}',
297
297
  dependencies: {
298
298
  requires: [],
299
299
  },
@@ -302,9 +302,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
302
302
  api_crawler: {
303
303
  category: "api-security",
304
304
  description: "API Crawler resource",
305
- required: ["name"],
305
+ required: ["name", "namespace"],
306
306
  minimal_config:
307
- 'resource "xcsh_api_crawler" "example" {\n name = "example-api-crawler"\n namespace = "system"\n}',
307
+ 'resource "xcsh_api_crawler" "example" {\n name = "example-api-crawler"\n namespace = "staging"\n}',
308
308
  dependencies: {
309
309
  requires: [],
310
310
  },
@@ -315,7 +315,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
315
315
  description: "API Definition",
316
316
  required: ["name", "namespace"],
317
317
  minimal_config:
318
- 'resource "xcsh_api_definition" "example" {\n name = "example-api-definition"\n namespace = "system"\n}',
318
+ 'resource "xcsh_api_definition" "example" {\n name = "example-api-definition"\n namespace = "staging"\n}',
319
319
  dependencies: {
320
320
  requires: ["namespace"],
321
321
  },
@@ -326,7 +326,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
326
326
  description: "API discovery creates a new object in the storage backend for metadata.namespace",
327
327
  required: ["name", "namespace", "user_defined_api_discovery_policy"],
328
328
  minimal_config:
329
- 'resource "xcsh_api_discovery" "example" {\n name = "example-api-discovery"\n namespace = "system"\n}',
329
+ 'resource "xcsh_api_discovery" "example" {\n name = "example-api-discovery"\n namespace = "staging"\n}',
330
330
  dependencies: {
331
331
  requires: [],
332
332
  },
@@ -335,9 +335,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
335
335
  api_testing: {
336
336
  category: "api-security",
337
337
  description: "API Testing resource",
338
- required: ["name", "custom_header_value"],
338
+ required: ["name", "namespace", "custom_header_value"],
339
339
  minimal_config:
340
- 'resource "xcsh_api_testing" "example" {\n name = "example-api-testing"\n namespace = "system"\n\n custom_header_value = "example-value"\n}',
340
+ 'resource "xcsh_api_testing" "example" {\n name = "example-api-testing"\n namespace = "staging"\n\n custom_header_value = "example-value"\n}',
341
341
  dependencies: {
342
342
  requires: [],
343
343
  },
@@ -356,9 +356,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
356
356
  app_api_group: {
357
357
  category: "api-security",
358
358
  description: "App_api_group creates a new object in the storage backend for metadata.namespace",
359
- required: ["name"],
359
+ required: ["name", "namespace"],
360
360
  minimal_config:
361
- 'resource "xcsh_app_api_group" "example" {\n name = "example-app-api-group"\n namespace = "system"\n}',
361
+ 'resource "xcsh_app_api_group" "example" {\n name = "example-app-api-group"\n namespace = "staging"\n}',
362
362
  dependencies: {
363
363
  requires: [],
364
364
  },
@@ -378,9 +378,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
378
378
  app_setting: {
379
379
  category: "applications",
380
380
  description: "App setting configuration in namespace metadata.namespace",
381
- required: ["name"],
381
+ required: ["name", "namespace"],
382
382
  minimal_config:
383
- 'resource "xcsh_app_setting" "example" {\n name = "example-app-setting"\n namespace = "system"\n}',
383
+ 'resource "xcsh_app_setting" "example" {\n name = "example-app-setting"\n namespace = "staging"\n}',
384
384
  dependencies: {
385
385
  requires: [],
386
386
  },
@@ -389,9 +389,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
389
389
  app_type: {
390
390
  category: "applications",
391
391
  description: "App type will create the configuration in namespace metadata.namespace",
392
- required: ["name"],
392
+ required: ["name", "namespace"],
393
393
  minimal_config:
394
- 'resource "xcsh_app_type" "example" {\n name = "example-app-type"\n namespace = "system"\n}',
394
+ 'resource "xcsh_app_type" "example" {\n name = "example-app-type"\n namespace = "staging"\n}',
395
395
  dependencies: {
396
396
  requires: [],
397
397
  },
@@ -433,9 +433,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
433
433
  aws_tgw_site: {
434
434
  category: "sites",
435
435
  description: "Deploying F5 sites connected via AWS Transit Gateway",
436
- required: ["name"],
436
+ required: ["name", "namespace"],
437
437
  minimal_config:
438
- 'resource "xcsh_aws_tgw_site" "example" {\n name = "example-aws-tgw-site"\n namespace = "system"\n}',
438
+ 'resource "xcsh_aws_tgw_site" "example" {\n name = "example-aws-tgw-site"\n namespace = "staging"\n}',
439
439
  dependencies: {
440
440
  requires: [],
441
441
  },
@@ -444,9 +444,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
444
444
  aws_vpc_site: {
445
445
  category: "sites",
446
446
  description: "Deploying F5 sites within AWS VPC environments",
447
- required: ["name", "address", "aws_region", "disk_size", "instance_type", "ssh_key"],
447
+ required: ["name", "namespace", "address", "aws_region", "disk_size", "instance_type", "ssh_key"],
448
448
  minimal_config:
449
- 'resource "xcsh_aws_vpc_site" "example" {\n name = "example-aws-vpc-site"\n namespace = "system"\n\n aws_region = "example-value"\n instance_type = "example-value"\n ssh_key = "example-value"\n address = "example-value"\n disk_size = 1\n}',
449
+ 'resource "xcsh_aws_vpc_site" "example" {\n name = "example-aws-vpc-site"\n namespace = "staging"\n\n aws_region = "example-value"\n instance_type = "example-value"\n ssh_key = "example-value"\n address = "example-value"\n disk_size = 1\n}',
450
450
  dependencies: {
451
451
  requires: [],
452
452
  },
@@ -455,9 +455,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
455
455
  azure_vnet_site: {
456
456
  category: "sites",
457
457
  description: "Deploying F5 sites within Azure Virtual Network environments",
458
- required: ["name", "machine_type", "resource_group", "ssh_key"],
458
+ required: ["name", "namespace", "machine_type", "resource_group", "ssh_key"],
459
459
  minimal_config:
460
- 'resource "xcsh_azure_vnet_site" "example" {\n name = "example-Azure-vnet-site"\n namespace = "system"\n\n machine_type = "example-value"\n resource_group = "example-value"\n ssh_key = "example-value"\n}',
460
+ 'resource "xcsh_azure_vnet_site" "example" {\n name = "example-Azure-vnet-site"\n namespace = "staging"\n\n machine_type = "example-value"\n resource_group = "example-value"\n ssh_key = "example-value"\n}',
461
461
  dependencies: {
462
462
  requires: [],
463
463
  },
@@ -467,8 +467,8 @@ export const TERRAFORM_INDEX: TerraformIndex = {
467
467
  category: "networking",
468
468
  description:
469
469
  "Bgp object is the configuration for peering with external bgp servers. it is created by users in system namespace. configuration",
470
- required: ["name"],
471
- minimal_config: 'resource "xcsh_bgp" "example" {\n name = "example-bgp"\n namespace = "system"\n}',
470
+ required: ["name", "namespace"],
471
+ minimal_config: 'resource "xcsh_bgp" "example" {\n name = "example-bgp"\n namespace = "staging"\n}',
472
472
  dependencies: {
473
473
  requires: [],
474
474
  },
@@ -477,9 +477,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
477
477
  bgp_asn_set: {
478
478
  category: "networking",
479
479
  description: "Bgp_asn_set creates a new object in the storage backend for metadata.namespace",
480
- required: ["name"],
480
+ required: ["name", "namespace"],
481
481
  minimal_config:
482
- 'resource "xcsh_bgp_asn_set" "example" {\n name = "example-bgp-asn-set"\n namespace = "system"\n\n as_numbers = [1]\n}',
482
+ 'resource "xcsh_bgp_asn_set" "example" {\n name = "example-bgp-asn-set"\n namespace = "staging"\n\n as_numbers = [1]\n}',
483
483
  dependencies: {
484
484
  requires: [],
485
485
  },
@@ -588,9 +588,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
588
588
  cloud_credentials: {
589
589
  category: "authentication",
590
590
  description: "Api to create cloud_credentials object. configuration",
591
- required: ["name"],
591
+ required: ["name", "namespace"],
592
592
  minimal_config:
593
- 'resource "xcsh_cloud_credentials" "example" {\n name = "example-cloud-credentials"\n namespace = "system"\n}',
593
+ 'resource "xcsh_cloud_credentials" "example" {\n name = "example-cloud-credentials"\n namespace = "staging"\n}',
594
594
  dependencies: {
595
595
  requires: [],
596
596
  },
@@ -599,9 +599,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
599
599
  cloud_elastic_ip: {
600
600
  category: "cloud-resources",
601
601
  description: "Cloud Elastic IP creates Cloud Elastic IP object Object is attached to a site",
602
- required: ["name", "item_count"],
602
+ required: ["name", "namespace", "item_count"],
603
603
  minimal_config:
604
- 'resource "xcsh_cloud_elastic_ip" "example" {\n name = "example-cloud-elastic-ip"\n namespace = "system"\n\n item_count = 1\n}',
604
+ 'resource "xcsh_cloud_elastic_ip" "example" {\n name = "example-cloud-elastic-ip"\n namespace = "staging"\n\n item_count = 1\n}',
605
605
  dependencies: {
606
606
  requires: [],
607
607
  },
@@ -651,9 +651,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
651
651
  code_base_integration: {
652
652
  category: "integrations",
653
653
  description: "Integration details",
654
- required: ["name"],
654
+ required: ["name", "namespace"],
655
655
  minimal_config:
656
- 'resource "xcsh_code_base_integration" "example" {\n name = "example-code-base-integration"\n namespace = "system"\n}',
656
+ 'resource "xcsh_code_base_integration" "example" {\n name = "example-code-base-integration"\n namespace = "staging"\n}',
657
657
  dependencies: {
658
658
  requires: [],
659
659
  },
@@ -706,9 +706,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
706
706
  dc_cluster_group: {
707
707
  category: "networking",
708
708
  description: "DC Cluster group in given namespace",
709
- required: ["name"],
709
+ required: ["name", "namespace"],
710
710
  minimal_config:
711
- 'resource "xcsh_dc_cluster_group" "example" {\n name = "example-dc-cluster-group"\n namespace = "system"\n}',
711
+ 'resource "xcsh_dc_cluster_group" "example" {\n name = "example-dc-cluster-group"\n namespace = "staging"\n}',
712
712
  dependencies: {
713
713
  requires: [],
714
714
  },
@@ -717,9 +717,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
717
717
  discovery: {
718
718
  category: "applications",
719
719
  description: "Api to create discovery object for a site or virtual site in system namespace. configuration",
720
- required: ["name"],
720
+ required: ["name", "namespace"],
721
721
  minimal_config:
722
- 'resource "xcsh_discovery" "example" {\n name = "example-discovery"\n namespace = "system"\n}',
722
+ 'resource "xcsh_discovery" "example" {\n name = "example-discovery"\n namespace = "staging"\n}',
723
723
  dependencies: {
724
724
  requires: [],
725
725
  },
@@ -773,9 +773,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
773
773
  dns_load_balancer: {
774
774
  category: "dns",
775
775
  description: "DNS Load Balancer in a given namespace. If one already exist it will give a error",
776
- required: ["name", "namespace"],
776
+ required: ["name"],
777
777
  minimal_config:
778
- 'resource "xcsh_dns_load_balancer" "example" {\n name = "example-dns-load-balancer"\n namespace = "staging"\n}',
778
+ 'resource "xcsh_dns_load_balancer" "example" {\n name = "example-dns-load-balancer"\n namespace = "system"\n}',
779
779
  dependencies: {
780
780
  requires: [],
781
781
  },
@@ -784,9 +784,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
784
784
  dns_proxy: {
785
785
  category: "dns",
786
786
  description: "DNS Proxy in a given namespace. If one already exists it will give an error",
787
- required: ["name", "namespace", "transport_type"],
787
+ required: ["name", "transport_type"],
788
788
  minimal_config:
789
- 'resource "xcsh_dns_proxy" "example" {\n name = "example-dns-proxy"\n namespace = "staging"\n\n transport_type = "UDP"\n}',
789
+ 'resource "xcsh_dns_proxy" "example" {\n name = "example-dns-proxy"\n namespace = "system"\n\n transport_type = "UDP"\n}',
790
790
  dependencies: {
791
791
  requires: [],
792
792
  },
@@ -806,9 +806,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
806
806
  endpoint: {
807
807
  category: "load-balancing",
808
808
  description: "Endpoint will create the object in the storage backend for namespace metadata.namespace",
809
- required: ["name", "health_check_port", "port", "protocol"],
809
+ required: ["name", "namespace", "health_check_port", "port", "protocol"],
810
810
  minimal_config:
811
- 'resource "xcsh_endpoint" "example" {\n name = "example-endpoint"\n namespace = "system"\n\n health_check_port = 1\n port = 1\n protocol = "example-value"\n}',
811
+ 'resource "xcsh_endpoint" "example" {\n name = "example-endpoint"\n namespace = "staging"\n\n health_check_port = 1\n port = 1\n protocol = "example-value"\n}',
812
812
  dependencies: {
813
813
  requires: [],
814
814
  },
@@ -851,9 +851,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
851
851
  fast_acl_rule: {
852
852
  category: "security",
853
853
  description: "New Fast ACL rule, has specification to match source IP, source port and action to apply",
854
- required: ["name"],
854
+ required: ["name", "namespace"],
855
855
  minimal_config:
856
- 'resource "xcsh_fast_acl_rule" "example" {\n name = "example-fast-acl-rule"\n namespace = "system"\n}',
856
+ 'resource "xcsh_fast_acl_rule" "example" {\n name = "example-fast-acl-rule"\n namespace = "staging"\n}',
857
857
  dependencies: {
858
858
  requires: [],
859
859
  },
@@ -875,13 +875,14 @@ export const TERRAFORM_INDEX: TerraformIndex = {
875
875
  description: "Fleet will create a fleet object in 'system' namespace of the user",
876
876
  required: [
877
877
  "name",
878
+ "namespace",
878
879
  "enable_default_fleet_config_download",
879
880
  "fleet_label",
880
881
  "operating_system_version",
881
882
  "volterra_software_version",
882
883
  ],
883
884
  minimal_config:
884
- 'resource "xcsh_fleet" "example" {\n name = "example-fleet"\n namespace = "system"\n\n fleet_label = "example-value"\n enable_default_fleet_config_download = true\n operating_system_version = "example-value"\n volterra_software_version = "example-value"\n}',
885
+ 'resource "xcsh_fleet" "example" {\n name = "example-fleet"\n namespace = "staging"\n\n fleet_label = "example-value"\n enable_default_fleet_config_download = true\n operating_system_version = "example-value"\n volterra_software_version = "example-value"\n}',
885
886
  dependencies: {
886
887
  requires: [],
887
888
  },
@@ -912,9 +913,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
912
913
  gcp_vpc_site: {
913
914
  category: "sites",
914
915
  description: "Deploying F5 sites within Google Cloud VPC environments",
915
- required: ["name", "address", "disk_size", "gcp_region", "instance_type", "ssh_key"],
916
+ required: ["name", "namespace", "address", "disk_size", "gcp_region", "instance_type", "ssh_key"],
916
917
  minimal_config:
917
- 'resource "xcsh_gcp_vpc_site" "example" {\n name = "example-gcp-vpc-site"\n namespace = "system"\n\n gcp_region = "example-value"\n instance_type = "example-value"\n ssh_key = "example-value"\n address = "example-value"\n disk_size = 1\n}',
918
+ 'resource "xcsh_gcp_vpc_site" "example" {\n name = "example-gcp-vpc-site"\n namespace = "staging"\n\n gcp_region = "example-value"\n instance_type = "example-value"\n ssh_key = "example-value"\n address = "example-value"\n disk_size = 1\n}',
918
919
  dependencies: {
919
920
  requires: [],
920
921
  },
@@ -936,7 +937,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
936
937
  description: "New Global Log Receiver object",
937
938
  required: ["name", "namespace", "log_type", "receiver_choice"],
938
939
  minimal_config:
939
- 'resource "xcsh_global_log_receiver" "example" {\n name = "example-global-log-receiver"\n namespace = "system"\n}',
940
+ 'resource "xcsh_global_log_receiver" "example" {\n name = "example-global-log-receiver"\n namespace = "staging"\n}',
940
941
  dependencies: {
941
942
  requires: [],
942
943
  },
@@ -1038,7 +1039,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1038
1039
  description: "K8s_cluster will create the object in the storage backend for namespace metadata.namespace",
1039
1040
  required: ["name", "namespace"],
1040
1041
  minimal_config:
1041
- 'resource "xcsh_k8s_cluster" "example" {\n name = "example-k8s-cluster"\n namespace = "system"\n}',
1042
+ 'resource "xcsh_k8s_cluster" "example" {\n name = "example-k8s-cluster"\n namespace = "staging"\n}',
1042
1043
  dependencies: {
1043
1044
  requires: [],
1044
1045
  },
@@ -1093,9 +1094,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1093
1094
  log_receiver: {
1094
1095
  category: "monitoring",
1095
1096
  description: "New Log Receiver object",
1096
- required: ["name"],
1097
+ required: ["name", "namespace"],
1097
1098
  minimal_config:
1098
- 'resource "xcsh_log_receiver" "example" {\n name = "example-log-receiver"\n namespace = "system"\n}',
1099
+ 'resource "xcsh_log_receiver" "example" {\n name = "example-log-receiver"\n namespace = "staging"\n}',
1099
1100
  dependencies: {
1100
1101
  requires: [],
1101
1102
  },
@@ -1139,9 +1140,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1139
1140
  nat_policy: {
1140
1141
  category: "security",
1141
1142
  description: "Nat policy create specification configures nat policy with multiple rules,. configuration",
1142
- required: ["name"],
1143
+ required: ["name", "namespace"],
1143
1144
  minimal_config:
1144
- 'resource "xcsh_nat_policy" "example" {\n name = "example-nat-policy"\n namespace = "system"\n}',
1145
+ 'resource "xcsh_nat_policy" "example" {\n name = "example-nat-policy"\n namespace = "staging"\n}',
1145
1146
  dependencies: {
1146
1147
  requires: [],
1147
1148
  },
@@ -1150,9 +1151,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1150
1151
  network_connector: {
1151
1152
  category: "networking",
1152
1153
  description: "Network connector is created by users in system namespace. configuration",
1153
- required: ["name"],
1154
+ required: ["name", "namespace"],
1154
1155
  minimal_config:
1155
- 'resource "xcsh_network_connector" "example" {\n name = "example-network-connector"\n namespace = "system"\n}',
1156
+ 'resource "xcsh_network_connector" "example" {\n name = "example-network-connector"\n namespace = "staging"\n}',
1156
1157
  dependencies: {
1157
1158
  requires: [],
1158
1159
  },
@@ -1173,9 +1174,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1173
1174
  category: "networking",
1174
1175
  description:
1175
1176
  "Network interface represents configuration of a network device. it is created by users in system namespace. configuration",
1176
- required: ["name"],
1177
+ required: ["name", "namespace"],
1177
1178
  minimal_config:
1178
- 'resource "xcsh_network_interface" "example" {\n name = "example-network-interface"\n namespace = "system"\n}',
1179
+ 'resource "xcsh_network_interface" "example" {\n name = "example-network-interface"\n namespace = "staging"\n}',
1179
1180
  dependencies: {
1180
1181
  requires: [],
1181
1182
  },
@@ -1195,9 +1196,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1195
1196
  network_policy_rule: {
1196
1197
  category: "security",
1197
1198
  description: "Network policy rule with configured parameters in specified namespace",
1198
- required: ["name"],
1199
+ required: ["name", "namespace"],
1199
1200
  minimal_config:
1200
- 'resource "xcsh_network_policy_rule" "example" {\n name = "example-network-policy-rule"\n namespace = "system"\n}',
1201
+ 'resource "xcsh_network_policy_rule" "example" {\n name = "example-network-policy-rule"\n namespace = "staging"\n}',
1201
1202
  dependencies: {
1202
1203
  requires: [],
1203
1204
  },
@@ -1217,9 +1218,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1217
1218
  nfv_service: {
1218
1219
  category: "networking",
1219
1220
  description: "New NFV service with configured parameters",
1220
- required: ["name"],
1221
+ required: ["name", "namespace"],
1221
1222
  minimal_config:
1222
- 'resource "xcsh_nfv_service" "example" {\n name = "example-nfv-service"\n namespace = "system"\n}',
1223
+ 'resource "xcsh_nfv_service" "example" {\n name = "example-nfv-service"\n namespace = "staging"\n}',
1223
1224
  dependencies: {
1224
1225
  requires: [],
1225
1226
  },
@@ -1229,9 +1230,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1229
1230
  category: "networking",
1230
1231
  description:
1231
1232
  "Api to create nginx service discovery object for a site or virtual site in system namespace. configuration",
1232
- required: ["name"],
1233
+ required: ["name", "namespace"],
1233
1234
  minimal_config:
1234
- 'resource "xcsh_nginx_service_discovery" "example" {\n name = "example-nginx-service-discovery"\n namespace = "system"\n}',
1235
+ 'resource "xcsh_nginx_service_discovery" "example" {\n name = "example-nginx-service-discovery"\n namespace = "staging"\n}',
1235
1236
  dependencies: {
1236
1237
  requires: [],
1237
1238
  },
@@ -1278,7 +1279,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1278
1279
  "Protocol Inspection Specification in a given namespace. If one already exists it will give an error",
1279
1280
  required: ["name", "namespace", "enable_disable_compliance_checks", "enable_disable_signatures"],
1280
1281
  minimal_config:
1281
- 'resource "xcsh_protocol_inspection" "example" {\n name = "example-protocol-inspection"\n namespace = "system"\n}',
1282
+ 'resource "xcsh_protocol_inspection" "example" {\n name = "example-protocol-inspection"\n namespace = "staging"\n}',
1282
1283
  dependencies: {
1283
1284
  requires: [],
1284
1285
  },
@@ -1343,9 +1344,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1343
1344
  secret_management_access: {
1344
1345
  category: "authentication",
1345
1346
  description: "Secret_management_access creates a new object in storage backend for metadata.namespace",
1346
- required: ["name", "provider_name"],
1347
+ required: ["name", "namespace", "provider_name"],
1347
1348
  minimal_config:
1348
- 'resource "xcsh_secret_management_access" "example" {\n name = "example-secret-management-access"\n namespace = "system"\n\n provider_name = "example-value"\n}',
1349
+ 'resource "xcsh_secret_management_access" "example" {\n name = "example-secret-management-access"\n namespace = "staging"\n\n provider_name = "example-value"\n}',
1349
1350
  dependencies: {
1350
1351
  requires: [],
1351
1352
  },
@@ -1354,9 +1355,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1354
1355
  securemesh_site: {
1355
1356
  category: "sites",
1356
1357
  description: "Deploying secure mesh edge sites with distributed security capabilities",
1357
- required: ["name", "address", "volterra_certified_hw"],
1358
+ required: ["name", "namespace", "address", "volterra_certified_hw"],
1358
1359
  minimal_config:
1359
- 'resource "xcsh_securemesh_site" "example" {\n name = "example-securemesh-site"\n namespace = "system"\n\n volterra_certified_hw = "example-value"\n worker_nodes = ["example-value"]\n address = "example-value"\n}',
1360
+ 'resource "xcsh_securemesh_site" "example" {\n name = "example-securemesh-site"\n namespace = "staging"\n\n volterra_certified_hw = "example-value"\n worker_nodes = ["example-value"]\n address = "example-value"\n}',
1360
1361
  dependencies: {
1361
1362
  requires: [],
1362
1363
  },
@@ -1365,9 +1366,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1365
1366
  securemesh_site_v2: {
1366
1367
  category: "sites",
1367
1368
  description: "Deploying secure mesh edge sites with enhanced security and networking features",
1368
- required: ["name"],
1369
+ required: ["name", "namespace"],
1369
1370
  minimal_config:
1370
- 'resource "xcsh_securemesh_site_v2" "example" {\n name = "example-securemesh-site-v2"\n namespace = "system"\n}',
1371
+ 'resource "xcsh_securemesh_site_v2" "example" {\n name = "example-securemesh-site-v2"\n namespace = "staging"\n}',
1371
1372
  dependencies: {
1372
1373
  requires: [],
1373
1374
  },
@@ -1420,9 +1421,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1420
1421
  site: {
1421
1422
  category: "sites",
1422
1423
  description: "Virtual site object in given namespace",
1423
- required: ["name", "site_type"],
1424
+ required: ["name", "namespace", "site_type"],
1424
1425
  minimal_config:
1425
- 'resource "xcsh_site" "example" {\n name = "example-site"\n namespace = "system"\n\n site_type = "INVALID"\n}',
1426
+ 'resource "xcsh_site" "example" {\n name = "example-site"\n namespace = "staging"\n\n site_type = "INVALID"\n}',
1426
1427
  dependencies: {
1427
1428
  requires: [],
1428
1429
  },
@@ -1431,9 +1432,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1431
1432
  site_mesh_group: {
1432
1433
  category: "sites",
1433
1434
  description: "Site Mesh Group in system namespace of user",
1434
- required: ["name"],
1435
+ required: ["name", "namespace"],
1435
1436
  minimal_config:
1436
- 'resource "xcsh_site_mesh_group" "example" {\n name = "example-site-mesh-group"\n namespace = "system"\n}',
1437
+ 'resource "xcsh_site_mesh_group" "example" {\n name = "example-site-mesh-group"\n namespace = "staging"\n}',
1437
1438
  dependencies: {
1438
1439
  requires: [],
1439
1440
  },
@@ -1482,9 +1483,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1482
1483
  tenant_configuration: {
1483
1484
  category: "organization",
1484
1485
  description: "Tenant configuration specification. configuration",
1485
- required: ["name"],
1486
+ required: ["name", "namespace"],
1486
1487
  minimal_config:
1487
- 'resource "xcsh_tenant_configuration" "example" {\n name = "example-tenant-configuration"\n namespace = "system"\n}',
1488
+ 'resource "xcsh_tenant_configuration" "example" {\n name = "example-tenant-configuration"\n namespace = "staging"\n}',
1488
1489
  dependencies: {
1489
1490
  requires: [],
1490
1491
  },
@@ -1526,9 +1527,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1526
1527
  usb_policy: {
1527
1528
  category: "security",
1528
1529
  description: "New USB policy object",
1529
- required: ["name"],
1530
+ required: ["name", "namespace"],
1530
1531
  minimal_config:
1531
- 'resource "xcsh_usb_policy" "example" {\n name = "example-usb-policy"\n namespace = "system"\n}',
1532
+ 'resource "xcsh_usb_policy" "example" {\n name = "example-usb-policy"\n namespace = "staging"\n}',
1532
1533
  dependencies: {
1533
1534
  requires: [],
1534
1535
  },
@@ -1593,7 +1594,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1593
1594
  description: "Virtual site object in given namespace",
1594
1595
  required: ["name", "namespace", "site_type", "site_selector"],
1595
1596
  minimal_config:
1596
- 'resource "xcsh_virtual_site" "example" {\n name = "example-virtual-site"\n namespace = "system"\n\n site_type = "INVALID"\n}',
1597
+ 'resource "xcsh_virtual_site" "example" {\n name = "example-virtual-site"\n namespace = "staging"\n\n site_type = "INVALID"\n}',
1597
1598
  dependencies: {
1598
1599
  requires: [],
1599
1600
  },
@@ -1602,9 +1603,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
1602
1603
  voltstack_site: {
1603
1604
  category: "sites",
1604
1605
  description: "Deploying Volterra stack sites for edge computing",
1605
- required: ["name", "address", "volterra_certified_hw"],
1606
+ required: ["name", "namespace", "address", "volterra_certified_hw"],
1606
1607
  minimal_config:
1607
- 'resource "xcsh_voltstack_site" "example" {\n name = "example-voltstack-site"\n namespace = "system"\n\n volterra_certified_hw = "example-value"\n worker_nodes = ["example-value"]\n address = "example-value"\n}',
1608
+ 'resource "xcsh_voltstack_site" "example" {\n name = "example-voltstack-site"\n namespace = "staging"\n\n volterra_certified_hw = "example-value"\n worker_nodes = ["example-value"]\n address = "example-value"\n}',
1608
1609
  dependencies: {
1609
1610
  requires: [],
1610
1611
  },