Scenario 1 - Change Automation Manager#
Overview#
This scenario shows how to use the Change Automation Manager action to move Automation Controller Instances from one Automation Manager to another without interrupting production. The definition waits until each instance enters a safe, stable state before performing the move, allowing infrastructure changes without a forced shutdown.
In this example, three cookie factory mixing-line instances move from the mixing-manager-legacy Automation Manager to mixing-manager-nextgen during a year-end holiday shutdown. This operation runs in parallel with Scenario 2, which handles the molding controller update during the same window.
When to Use#
- Host maintenance - OS patching, hardware replacement, or software upgrades on the Manager host that require the service to stop.
- Decommission - retiring an older Manager host and consolidating all its instances onto a replacement.
- Load rebalancing - redistributing instances across Managers when one host is over-utilized or when new capacity is added to the fleet.
- Network topology change - moving instances to a Manager running in a different network segment or closer to the equipment after an infrastructure reorganization.
- Disaster recovery - evacuating instances from a degraded or at-risk Manager to a healthy standby before a failure forces an unplanned outage.
Example#
This is the first operation in the year-end platform refresh. On 28 December, the holiday shutdown begins and infrastructure consolidation starts: all three mixing-line instances currently running on mixing-manager-legacy must move to mixing-manager-nextgen before production resumes. The legacy host is being decommissioned. The other holiday operation, the molding controller update, runs in parallel on separate Resources; see Scenario 2.
The factory is consolidating its mixing infrastructure. The older host running mixing-automation-manager-legacy is being decommissioned; all instances must move to the newer, higher-capacity host running mixing-manager-nextgen. The factory has the following context:
- Resources: 3 mixers (
ASA Mixer-01,ASA Mixer-02,ASA Mixer-03). - One Automation Controller associated with all Resources:
MixingController [A.1]. - Source Automation Manager:
mixing-manager-legacy(being decommissioned). - Target Automation Manager:
mixing-manager-nextgen(replacement host).
graph LR
subgraph legacy["mixing-manager-legacy (source)"]
M1[Mixer-01]
M2[Mixer-02]
M3[Mixer-03]
end
subgraph nextgen["mixing-manager-nextgen (target)"]
M1T[Mixer-01]
M2T[Mixer-02]
M3T[Mixer-03]
end
M1 -->|migrate| M1T
M2 -->|migrate| M2T
M3 -->|migrate| M3T Prerequisites#
Before creating the Definition, confirm the following:
- Load the Scenario 1 Automation master data into MES. It creates the
MixingController [A.1]Controller,mixing-manager-legacyandmixing-manager-nextgenManager records, and all three mixing instances (master data package: 01-automation-masterdata.json). mixing-manager-legacyhost is running and the three mixing instances are active and connected.mixing-manager-nextgenhost is running, reachable, and has sufficient capacity for the migrated instances.- Each Automation Controller Instance is linked to a Resource with a valid state model that includes states such as
StandbyorScheduled Down. - MES Configuration Entry
/Cmf/Tutorials/AutomationScheduleAction/Scenario1/NumberOfAvailableSlotsexists and is set to the number of migrations you want to allow in this run. Use3if you want all three sample instances to pass the capacity gate. - Notification templates
ASA PreAction Template,ASA Success Template,ASA Failure Template, andASA Ignored Templateexist in MES if you intend to use notifications. - DEE action
ASA_Scenario1_CheckNextgenManagerHasCapacityis created and deployed in MES before enabling the Definition (see How To: Create or Import a DEE Action).
Configuration#
Why This Pattern#
This Definition uses the following combination of components:
| Component | Type | Purpose |
|---|---|---|
| Context | AutomationManager | Resolves all instances currently hosted by mixing-manager-legacy. |
| Pre-Conditions | AllowedWeekdays + AllowedTimeWindow | Restricts processing to the planned maintenance window. |
| Detector | EntityStateInList | Prevents migration while the Resource is in a productive or unknown state. |
| Acceptance Gates | ReadyDelay + CustomDeeAction | Two Acceptance Gates evaluated in order: first confirms the Resource has held the ready state for a minimum period; second verifies the target Manager has enough capacity before the migration proceeds. Both must pass. |
| Action | ChangeAutomationManager | Moves the instance hosting to mixing-manager-nextgen. |
| Post Action Validation | MaxStartupTime | Confirms the migrated instance returns to a running state within the configured timeout. |
Table 1: Scenario 1 Component Design
Create the Definition#
Open Automation Scheduled Action and select Create.
Refer to Create Definition for more information.
Tab 1 - General Data#
Start by filling in the general definition fields.
- Give it a name like
CF_Migrate_Legacy_To_Nextgenand a description that explains its purpose (for example, "Move cookie line instances from mixing-manager-legacy to mixing-manager-nextgen when lines are stable and ready.") - Set Is Enabled to
Disabledfor now; you'll enable it after verifying the task list. - Set Validity to
2days.
For Context, select Automation Manager and enter mixing-manager-legacy as the target Manager. All instances currently hosted by this Manager become targets. One task is created per instance.
For the Detector, select Entity State In List and add Scheduled Down to the state list. Adjust the state list to match your factory's state model.
For the Action, select Change Automation Manager and set the target to mixing-manager-nextgen.
Optionally, configure notification templates to be alerted at key moments:
| Field | Template |
|---|---|
| Pre-Action | ASA PreAction Template |
| Success | ASA Success Template |
| Failure | ASA Failure Template |
| Ignored | ASA Ignored Template |
Table 2: Scenario 1 Notification Templates
Tab 2 - Pre-Conditions#
Select twice to add the following Pre-Conditions in this order:
1. Allowed Weekdays - Set the weekdays to Saturday and Sunday.
2. Allowed Time Window - Set the window to 00:00–06:00.
All times are evaluated in UTC
Adjust both Pre-Conditions to match your planned maintenance window. If your plant operates in a different timezone, convert the window to UTC before entering it here.
Tab 3 - Acceptance Gates#
Select twice to add the following Acceptance Gates in this order:
1. Ready Delay - Set the delay to 300 seconds. The line must hold the ready state for 5 minutes before the migration runs. This prevents acting on brief state transitions during a normal production pause.
2. DEE Action - Enter ASA_Scenario1_CheckNextgenManagerHasCapacity as the action. This verifies that mixing-manager-nextgen has enough capacity before the migration proceeds. If the action returns false, the task stays at SkippedGateFailed until capacity is available.
Tab 4 - Post-Action Validations#
Select and select Max Startup Time. Set the timeout to 300 seconds. This confirms the migrated instance returns to a running state within 5 minutes on the new Manager.
Verify tasks before enabling
Select Save with Is Enabled set to Disabled. The system immediately resolves the context and creates one task per target instance.
Before enabling, open Automation Scheduled Action Tasks and confirm:
- All expected targets appear in the task list.
- No unexpected targets are included.
Once the task list is correct, enable the Definition from the top ribbon (see Enable / Disable Definition).
How It Works at Runtime#
After you enable the Definition, the system processes each task on every polling pass as follows:
- Context resolves all instances currently hosted by
mixing-manager-legacyand creates one task per instance. - Weekday and time-window Pre-Conditions are checked against current UTC time. Tasks are skipped outside the allowed window.
- The Detector checks whether the linked entity state is
StandbyorScheduled Down. - The
ReadyDelayAcceptance Gate confirms the line has remained in that state for at least 5 minutes. ASA_Scenario1_CheckNextgenManagerHasCapacityconfirmsmixing-manager-nextgenhas sufficient capacity to accept the instance. If it returnsfalse, the task is skipped withSkippedGateFailedand retried on the next pass.- The Action moves the instance to
mixing-manager-nextgen. - Post-Action Validation waits up to 5 minutes for the instance to reach a running state on the new Manager.
- The task is finalized with outcome and notifications are sent.
flowchart TD
A([Task per instance]) --> B{"Weekend?<br/>00:00-06:00 UTC?"}
B -- No --> S1([SkippedPreConditionFailed])
B -- Yes --> C{"Line state =<br/>Standby or<br/>Scheduled Down?"}
C -- No --> S2([SkippedNotReady])
C -- Yes --> D{"Stable 5+ min?"}
D -- No --> S3([SkippedGateFailed])
D -- Yes --> G{"nextgen manager<br/>has capacity?"}
G -- No --> S3
G -- Yes --> E[ChangeAutomationManager]
E --> NOP{"Already on<br/>mixing-manager-nextgen?"}
NOP -- Yes --> IGN([IgnoredNoOp])
NOP -- No --> F{"Running within<br/>300 s?"}
F -- No --> FAIL([ValidationFailed])
F -- Yes --> OK([ProcessedSuccess]) Expected Task Outcomes#
LastOutcome | State | Meaning |
|---|---|---|
ProcessedSuccess | Processed | Migration succeeded and the instance started correctly on mixing-manager-nextgen. |
IgnoredNoOp | Ignored | Instance was already hosted by mixing-manager-nextgen - no change needed. |
ActionFailed | Failed | Manager migration failed. Check infrastructure capacity and Automation Manager reachability. |
ValidationFailed | Failed | Migration ran but the instance did not reach running state within 300 seconds. |
SkippedPreConditionFailed | (task stays active) | Current UTC time or weekday is outside the allowed window. |
SkippedNotReady | (task stays active) | Line state is not in the ready list. |
SkippedGateFailed | (task stays active) | Line became ready but has not sustained that state for 5 minutes yet, or the nextgen manager capacity check returned false. |
Table 3: Scenario 1 Task Outcomes
Simulating This Scenario#
Confirm that all three instances (ASA Mixer-01, ASA Mixer-02, ASA Mixer-03) are running and communicating on mixing-manager-legacy, and that mixing-manager-nextgen is running and has capacity.
This scenario uses EntityStateInList as the Detector. Readiness is controlled by changing the Resource state and no file operations are needed.
To Trigger Processing for One Line#
- Navigate to the Resource, for example
ASA Mixer-01. - Transition its state to
Scheduled Down. - Open Automation Scheduled Action Task and confirm
IsReadybecomestruefor that task. - Wait 5 minutes. The
ReadyDelayAcceptance Gate passes, thenASA_Scenario1_CheckNextgenManagerHasCapacityis evaluated. Capacity is read from the MES configuration value/Cmf/Tutorials/AutomationScheduleAction/Scenario1/NumberOfAvailableSlots. If the value is greater than0, the Acceptance Gate passes, the slot is reserved (value decremented by 1), and the task executesChangeAutomationManager. Set it to0to simulate a full target Manager. - Confirm the instance is now hosted by
mixing-manager-nextgenin the Automation Controller Instance record. - The task transitions to
ProcessedSuccess.
Repeat steps 1–6 for the remaining Resources (ASA Mixer-02, ASA Mixer-03). Each Resource is processed independently as it reaches and sustains the ready state.
To Observe the Gate Countdown#
Open the task and watch ReadyStateChangedAt. The Acceptance Gate requires this timestamp to be at least 5 minutes in the past before the action runs. If the line leaves the ready state before the Acceptance Gate passes, ReadyStateChangedAt resets and the countdown starts over.
To Observe the Ignored Outcome#
Before enabling the Definition, manually move one instance to mixing-manager-nextgen directly from the Automation Controller Instance record. Enable the Definition and the task for that instance transitions immediately to IgnoredNoOp because the target is already in the desired state.
To Reset and Repeat#
- Transition the Resource state back to
Running. - In the Automation Controller Instance, move the instance back to
mixing-manager-legacy. - Create a new Definition (the original tasks are in a terminal state and will not re-evaluate).
Troubleshooting#
Lines Without a State Model#
EntityStateInList requires a valid MES state model on the linked Resource. If a line has no state model, the Detector fails closed and the task is permanently skipped.
Use DefinedInWorkflow or CustomDeeAction as the Detector instead when a state model is not available.
Inconsistent Target Mapping#
Every Automation Controller Instance must map cleanly to a single Resource. If the mapping is inconsistent, task creation fails for that target. Verify Resource assignments in the Automation Controller Instance before enabling the Definition.
Piloting the Migration#
Before pointing the Context Resolution at the full Automation Manager, test with a single instance by using Context = AutomationController targeting one Automation Controller. Confirm the outcome is Processed, then switch to Context = AutomationManager to process the rest.