@@ -472,6 +472,18 @@ workflow:
472472 shortest_path: true | false # Use shortest path only vs full max flow
473473 flow_placement: "PROPORTIONAL" | "EQUAL_BALANCED" # How to distribute flow
474474 # Additional probe parameters available
475+
476+ - step_type: CapacityEnvelopeAnalysis
477+ name: "envelope_name" # Optional: Name for the analysis step
478+ source_path: "regex/for/source_nodes"
479+ sink_path: "regex/for/sink_nodes"
480+ mode: "combine" | "pairwise" # How to group sources and sinks
481+ failure_policy: "policy_name" # Optional: Named failure policy from failure_policy_set
482+ iterations: N # Number of Monte-Carlo trials (default: 1)
483+ parallelism: P # Number of parallel worker processes (default: 1)
484+ shortest_path: true | false # Use shortest path only (default: false)
485+ flow_placement: "PROPORTIONAL" | "EQUAL_BALANCED" # Flow placement strategy
486+ seed: S # Optional: Seed for deterministic results
475487` ` `
476488
477489**Available Workflow Steps:**
@@ -480,6 +492,7 @@ workflow:
480492- **`EnableNodes`**: Enables previously disabled nodes matching a path pattern
481493- **`DistributeExternalConnectivity`**: Creates external connectivity across attachment points
482494- **`CapacityProbe`**: Probes maximum flow capacity between node groups
495+ - **`CapacityEnvelopeAnalysis`**: Performs Monte-Carlo capacity analysis across failure scenarios
483496
484497# # Path Matching Regex Syntax - Reference
485498
@@ -606,6 +619,35 @@ workflow:
606619 source_path: "^(dc\\ d+)/client" # Capturing group creates per-DC groups
607620 sink_path: "^(dc\\ d+)/server"
608621 mode: pairwise # Test dc1 client -> dc1 server, dc2 client -> dc2 server
622+
623+ - step_type: CapacityEnvelopeAnalysis
624+ source_path: "(.+)" # Captures each node as its own group
625+ sink_path: "(.+)" # Creates N×N any-to-any analysis
626+ mode: pairwise # Required for per-node analysis
627+ ` ` `
628+
629+ # ## Any-to-Any Analysis Pattern
630+
631+ The pattern `(.+)` is a useful regex for comprehensive network analysis in workflow steps like `CapacityProbe` and `CapacityEnvelopeAnalysis` :
632+
633+ - **Individual Node Groups**: The capturing group `(.+)` matches each node name, creating separate groups for each node
634+ - **Automatic Combinations**: In pairwise mode, this creates N×N flow analysis for N nodes
635+ - **Comprehensive Coverage**: Tests connectivity between every pair of nodes in the network
636+
637+ **Example Use Cases:**
638+ ` ` ` yaml
639+ # Test capacity between every pair of nodes in the network
640+ - step_type: CapacityEnvelopeAnalysis
641+ source_path: "(.+)" # Every node as source
642+ sink_path: "(.+)" # Every node as sink
643+ mode: pairwise # Creates all node-to-node combinations
644+ iterations: 100 # Monte-Carlo analysis across failures
645+
646+ # Test capacity from all datacenter nodes to all others
647+ - step_type: CapacityProbe
648+ source_path: "(datacenter.*)" # Each datacenter node individually
649+ sink_path: "(datacenter.*)" # Each datacenter node individually
650+ mode: pairwise # All datacenter-to-datacenter flows
609651` ` `
610652
611653# ## Best Practices
0 commit comments