HTTP POST /deployVirtualMachine
├── ApiServlet.processRequest()
├── Authentication & Authorization
│ ├── 2FA Check
│ ├── CIDR Validation
│ ├── DynamicRoleBasedAPIAccessChecker
│ └── ApiRateLimitService
├── Resource Validation
│ ├── AccountManagerImpl.checkAccess() [multiple]
│ ├── NetworkModelImpl.checkNetworkPermissions()
│ └── UserDataManagerImpl.validateUserData()
├── DB Allocation (Synchronous)
│ ├── UserVmManagerImpl.allocate()
│ ├── VirtualMachineManagerImpl.allocate()
│ ├── NetworkOrchestrator.allocateNic()
│ ├── VolumeOrchestrator.allocateRawVolume()
│ └── ResourceLimitManagerImpl.incrementResourceCount() [5x]
├── AsyncJobManagerImpl.submitAsyncJob(job-43)
│ └── Return job ID to client
└── Background Execution (job-43)
├── DeploymentPlanningManagerImpl.planDeployment()
│ ├── CapacityManagerImpl.checkHostCapacity()
│ ├── LocalStoragePoolAllocator (skip)
│ ├── ClusterScopeStoragePoolAllocator (skip)
│ └── ZoneWideStoragePoolAllocator (found primary)
├── VmWorkStart job-44
│ ├── State: Stopped → Starting
│ ├── CapacityManagerImpl.allocateVmCapacity()
│ ├── NetworkOrchestrator.prepare()
│ │ ├── DhcpEntryCommand → VR
│ │ ├── SavePasswordCommand → VR
│ │ └── VmDataCommand → VR
│ ├── VolumeOrchestrator.prepare()
│ │ └── CopyCommand (template → volume)
│ ├── StartCommand → KVM Host
│ └── State: Starting → Running
└── Complete job-43 with UserVmResponse