# Drafts and diagrams
## High level flow for MachineDeployment
```mermaid
sequenceDiagram
participant Operator
box** Management Cluster**
participant apiserver as kube-api server
participant capi as MD controller
participant msc as MachineSet Controller
participant mach as Machine Controller
participant hook as External updater 1
participant hook2 as External updater 2
end
box Workload Cluster
participant infra as Infrastructure
end
Operator->>+apiserver: make changes to MD <br>(ExternalUpdate strategy)
apiserver->>+capi: Notify changes
apiserver->>-Operator: OK
capi->>+hook: Can reconcile?
hook->>capi: Set of changes
capi->>+hook2: Can reconcile?
hook2->>capi: Set of changes
capi->>apiserver: Create new MachineSet
loop For all machines
capi->>apiserver: Add Update Plan to Machine<br> and move to new Machine Set
apiserver->>msc: Notify changes
msc->>apiserver: Update Machine Spec
apiserver->>mach: Notify changes
mach->>hook: Start update
hook->>infra: Update components
loop Until finished
mach->>hook: finished?
hook->>mach: try in X secs
end
mach->>apiserver: Remove Updater 1 from plan
mach->>hook2: Start update
hook2->>infra: Update components
loop Until finished
mach->>hook2: finished?
hook2->>mach: try in X secs
end
mach->>apiserver: Remove Updater 2 from plan
mach->>apiserver: Mark Machine as updated
end
```
## High level flow for KCP
```mermaid
sequenceDiagram
participant Operator
box Management Cluster
participant apiserver as kube-api server
participant capi as KCP controller
participant mach as Machine Controller
participant hook as External updater 1
participant hook2 as External updater 2
end
box Workload Cluster
participant infra as Infrastructure
end
Operator->>+apiserver: make changes to KCP <br>(ExternalUpdate strategy)
apiserver->>+capi: Notify changes
apiserver->>-Operator: OK
capi->>+hook: Can reconcile?
hook->>capi: Set of changes
capi->>+hook2: Can reconcile?
hook2->>capi: Set of changes
loop For all machines
capi->>apiserver: Add Upgrade Plan to Machine <br> and update Spec
apiserver->>mach: Notify changes
mach->>hook: Start upgrade
hook->>infra: Update components
loop Until finished
mach->>hook: finished?
hook->>mach: try in X secs
end
mach->>apiserver: Remove Upgrader 1 from plan
mach->>hook2: Start upgrade
hook2->>infra: Update components
loop Until finished
mach->>hook2: finished?
hook2->>mach: try in X secs
end
mach->>apiserver: Mark Machine as upgraded
end
```