Class NodeGroupIIAR
- All Implemented Interfaces:
com.scivicslab.pojoactor.core.CallableByActionName, AutoCloseable
NodeGroupInterpreter instances.
This class provides a concrete implementation of IIActorRef
specifically for NodeGroupInterpreter objects. It manages groups of infrastructure
nodes and can apply actions to all nodes in a group using wildcard patterns.
NodeGroupInterpreter extends Interpreter, so this class can execute main workflows that orchestrate multiple nodes.
Supported actions:
Workflow actions (from Interpreter):
runWorkflow- Loads and runs a workflow filereadYaml- Reads a YAML workflow definitionrunUntilEnd- Executes the workflow until completion
NodeGroup actions:
hasInventory- Returns true if inventory is loaded (for conditional branching)createNodeActors- Creates child actors for all nodes in a specified groupapply- Applies an action to child actors matching a wildcard patternhasAccumulator- Returns true if accumulator exists (for idempotent workflows)createAccumulator- Creates an accumulator for result collectiongetAccumulatorSummary- Gets the collected resultsgetSessionId- Gets the current session ID for log queries
Node Actor Hierarchy:
When createNodeActors is called, it creates a parent-child relationship:
NodeGroup (parent) ├─ node-web-01 (child NodeIIAR) ├─ node-web-02 (child NodeIIAR) └─ node-db-01 (child NodeIIAR)
Example YAML Workflow:
name: setup-nodegroup
steps:
# Step 1: Create node actors
- states: [0, 1]
actions:
- actor: nodeGroup
method: createNodeActors
arguments: ["web-servers"]
# Step 2: Run workflow on all nodes (load and execute in one step)
- states: [1, end]
actions:
- actor: nodeGroup
method: apply
arguments: ['{"actor": "node-*", "method": "runWorkflow", "arguments": ["deploy.yaml"]}']
- Author:
- devteam@scivicslab.com
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classHelper class to hold verification results for a step. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate StringCurrent workflow file path being executed.(package private) LoggerFields inherited from class com.scivicslab.pojoactor.core.ActorRef
actorName, actorSystem, object -
Constructor Summary
ConstructorsConstructorDescriptionNodeGroupIIAR(String actorName, NodeGroupInterpreter object) Constructs a new NodeGroupIIAR with the specified actor name and nodeGroupInterpreter object.NodeGroupIIAR(String actorName, NodeGroupInterpreter object, com.scivicslab.pojoactor.workflow.IIActorSystem system) Constructs a new NodeGroupIIAR with the specified actor name, nodeGroupInterpreter object, and actor system. -
Method Summary
Modifier and TypeMethodDescriptionprivate com.scivicslab.pojoactor.core.ActionResultApplies an action to multiple actors matching a pattern in parallel.com.scivicslab.pojoactor.core.ActionResultapplyAction(String args) Applies an action to child actors matching a wildcard pattern.private intcountOccurrences(String text, String sub) Counts occurrences of a substring in a string.com.scivicslab.pojoactor.core.ActionResultcreateAccumulator(String args) Creates an accumulator (no-op, kept for backward compatibility).private voidcreateNodeActors(String groupName) Creates child node actors for all nodes in the specified group.com.scivicslab.pojoactor.core.ActionResultcreateNodeActorsAction(String args) Creates child actors for all nodes in a specified group.com.scivicslab.pojoactor.core.ActionResultDoes nothing, returns the argument as result.com.scivicslab.pojoactor.core.ActionResultExecutes the current step code.executeCommandOnAllNodes(String command) Executes a single command on all child node actors.com.scivicslab.pojoactor.core.ActionResultExecutes a command on all child node actors.private StringExtracts a single argument from JSON array format.private voidextractSpecialInfo(String message, NodeGroupIIAR.VerifyResult result) Extracts special information from log messages (like document count, cluster health).private List<com.scivicslab.pojoactor.workflow.IIActorRef<?>> findMatchingChildActors(String pattern) Finds child actors matching a wildcard pattern.private StringFormats the status string for a verification result.private com.scivicslab.pojoactor.core.ActionResultGets the summary from the output multiplexer.com.scivicslab.pojoactor.core.ActionResultGets the summary from the output multiplexer.private Stringcom.scivicslab.pojoactor.core.ActionResultgetSessionId(String args) Gets the current session ID.com.scivicslab.pojoactor.core.ActionResultgetWorkflowPath(String args) Gets the current workflow file path.com.scivicslab.pojoactor.core.ActionResulthasAccumulator(String args) Checks if accumulator exists.com.scivicslab.pojoactor.core.ActionResulthasInventory(String args) Checks if inventory is loaded.private intparseMaxIterations(String arg, int defaultValue) com.scivicslab.pojoactor.core.ActionResultOutputs JSON State at the given path in pretty JSON format via outputMultiplexer.private com.scivicslab.pojoactor.core.ActionResultPrints a summary of the current session's verification results.com.scivicslab.pojoactor.core.ActionResultPrints a summary of the current session's verification results.com.scivicslab.pojoactor.core.ActionResultOutputs JSON State at the given path in YAML format via outputMultiplexer.com.scivicslab.pojoactor.core.ActionResultReads a YAML workflow definition.com.scivicslab.pojoactor.core.ActionResultrunUntilEnd(String args) Runs the workflow until completion.com.scivicslab.pojoactor.core.ActionResultrunWorkflow(String args) Loads and runs a workflow file.private voidsendToMultiplexer(String formatted) Sends formatted output to the outputMultiplexer, line by line.Methods inherited from class com.scivicslab.pojoactor.workflow.IIActorRef
callByActionName, hasAnnotatedAction, invokeAnnotatedAction, parseFirstArgumentMethods inherited from class com.scivicslab.pojoactor.core.ActorRef
ask, ask, askNow, clearJsonState, clearPendingMessages, close, createChild, expandVariables, getJsonBoolean, getJsonInt, getJsonString, getJsonString, getLastResult, getName, getNamesOfChildren, getParentName, hasJson, hasJsonState, initLogger, isAlive, json, putJson, setLastResult, setParentName, system, tell, tell, tellNow, toStringOfJson, toStringOfYaml
-
Field Details
-
logger
-
currentWorkflowPath
Current workflow file path being executed.
-
-
Constructor Details
-
NodeGroupIIAR
Constructs a new NodeGroupIIAR with the specified actor name and nodeGroupInterpreter object.- Parameters:
actorName- the name of this actorobject- theNodeGroupInterpreterinstance managed by this actor reference
-
NodeGroupIIAR
public NodeGroupIIAR(String actorName, NodeGroupInterpreter object, com.scivicslab.pojoactor.workflow.IIActorSystem system) Constructs a new NodeGroupIIAR with the specified actor name, nodeGroupInterpreter object, and actor system.- Parameters:
actorName- the name of this actorobject- theNodeGroupInterpreterinstance managed by this actor referencesystem- the actor system managing this actor
-
-
Method Details
-
execCode
-
runUntilEnd
Runs the workflow until completion.- Parameters:
args- the argument string (optional max iterations)- Returns:
- ActionResult indicating success or failure
-
runWorkflow
Loads and runs a workflow file.- Parameters:
args- JSON array with workflow file path and optional max iterations- Returns:
- ActionResult indicating success or failure
-
readYaml
-
hasInventory
Checks if inventory is loaded.- Parameters:
args- the argument string (not used)- Returns:
- ActionResult with true if inventory exists
-
createNodeActorsAction
Creates child actors for all nodes in a specified group.- Parameters:
args- JSON array with group name- Returns:
- ActionResult indicating success or failure
-
applyAction
Applies an action to child actors matching a wildcard pattern.- Parameters:
args- JSON object defining the action to apply- Returns:
- ActionResult indicating success or failure
-
executeCommandOnAllNodesAction
Executes a command on all child node actors.- Parameters:
args- JSON array with command- Returns:
- ActionResult with execution results
-
hasAccumulator
Checks if accumulator exists.- Parameters:
args- the argument string (not used)- Returns:
- ActionResult with true if accumulator exists
-
createAccumulator
Creates an accumulator (no-op, kept for backward compatibility).- Parameters:
args- the argument string (not used)- Returns:
- ActionResult with success
-
getAccumulatorSummaryAction
Gets the summary from the output multiplexer.- Parameters:
args- the argument string (not used)- Returns:
- ActionResult with the summary
-
printSessionSummaryAction
Prints a summary of the current session's verification results.- Parameters:
args- the argument string (not used)- Returns:
- ActionResult with the summary
-
getSessionId
Gets the current session ID.- Parameters:
args- the argument string (not used)- Returns:
- ActionResult with the session ID
-
getWorkflowPath
Gets the current workflow file path.- Parameters:
args- the argument string (not used)- Returns:
- ActionResult with the workflow path
-
doNothing
-
printJson
-
printYaml
-
sendToMultiplexer
Sends formatted output to the outputMultiplexer, line by line. -
parseMaxIterations
-
getFirst
-
createNodeActors
Creates child node actors for all nodes in the specified group.This method creates Node POJOs using the NodeGroup's inventory, wraps each in a NodeInterpreter (for workflow capabilities), then wraps in a NodeIIAR, and registers them as children of this actor using the parent-child relationship mechanism.
Special handling for "local" group: creates a localhost node without requiring an inventory file. This is useful for development and testing.
- Parameters:
groupName- the name of the group from the inventory file, or "local" for localhost
-
apply
Applies an action to multiple actors matching a pattern in parallel.This method executes the specified action on all matching actors asynchronously and in parallel, then waits for all executions to complete before returning. This provides significant performance benefits when executing actions on many nodes.
- Parameters:
actionDef- JSON string defining the action to apply- Returns:
- ActionResult indicating success or failure
-
findMatchingChildActors
private List<com.scivicslab.pojoactor.workflow.IIActorRef<?>> findMatchingChildActors(String pattern) Finds child actors matching a wildcard pattern.- Parameters:
pattern- the wildcard pattern (e.g., "node-*", "*-web", "*")- Returns:
- list of matching child actors
-
executeCommandOnAllNodes
private List<String> executeCommandOnAllNodes(String command) throws ExecutionException, InterruptedException Executes a single command on all child node actors.- Parameters:
command- the command to execute- Returns:
- list of results from each node
- Throws:
ExecutionException- if command execution failsInterruptedException- if the operation is interrupted
-
extractSingleArgument
Extracts a single argument from JSON array format.- Parameters:
arg- the JSON array argument string- Returns:
- the extracted argument
-
getAccumulatorSummary
Gets the summary from the output multiplexer.Retrieves the multiplexer actor from ActorSystem by name ("outputMultiplexer") and calls its getSummary action.
- Returns:
- ActionResult with the summary or error
-
printSessionSummary
Prints a summary of the current session's verification results.Groups results by label (step) and displays a formatted table.
- Returns:
- ActionResult with success status and summary text
-
formatStatus
Formats the status string for a verification result. -
extractSpecialInfo
Extracts special information from log messages (like document count, cluster health). -
countOccurrences
Counts occurrences of a substring in a string.
-