Refactor VM provisioning pipeline into focused services and add IP pool
management
This commit is contained in:
@@ -6,6 +6,7 @@ namespace App\Jobs\VirtualMachine\Provision;
|
||||
|
||||
use App\Http\Facade\SignRSA;
|
||||
use App\Models\ModuleVmware;
|
||||
use App\Models\Service;
|
||||
use App\Models\vCenter;
|
||||
use App\Services\VmProvisionService;
|
||||
use App\Services\VsphereHostSshService;
|
||||
@@ -22,15 +23,15 @@ use Illuminate\Support\Facades\Log;
|
||||
* Resets the VM guest OS password via:
|
||||
* Laravel → SSH (10.10.10.173) → PowerShell PS1 → Invoke-VMScript (guest OS)
|
||||
*
|
||||
* Flow:
|
||||
* [1] VM already exists, vm_id known
|
||||
* Dispatched by AssignIpToGuestJob after IP is confirmed. Flow:
|
||||
* [1] VM already exists, vm_id known, IP already assigned
|
||||
* [2] Generate random 16-char password (plain text)
|
||||
* [3] Load vCenter credentials from module_vcenter
|
||||
* [4] SSH into vSphere host
|
||||
* [5] Execute changePassword{Linux|Windows}.ps1 with 5 params
|
||||
* [6] Parse "SUCCESS" / "FAIL" from script output
|
||||
* [7] On SUCCESS → save encrypted password to DB
|
||||
* [8] Dispatch AssignIpToGuestJob with the new guest password
|
||||
* [8] Dispatch SendVmCredentialsEmailJob (IP + password both ready)
|
||||
* [9] On FAIL → throw exception → job retries
|
||||
*/
|
||||
class ChangePasswordViaVsphereJob implements ShouldQueue
|
||||
@@ -84,10 +85,13 @@ class ChangePasswordViaVsphereJob implements ShouldQueue
|
||||
// [6] Parse output — throw on FAIL so job retries
|
||||
$this->assertSuccess($output);
|
||||
|
||||
// [7] Save encrypted + plain password (IP will be set later by AssignIpToGuestJob)
|
||||
// [7] Save encrypted + plain password (IP already assigned by AssignIpToGuestJob)
|
||||
$provision->updatePassword($this->moduleVmwareId, $newPassword);
|
||||
|
||||
// [8] Send VM credentials email (AssignIpToGuestJob bypassed temporarily)
|
||||
// Provisioning complete — activate the service record
|
||||
Service::where('vm_id', $this->moduleVmwareId)->update(['status' => 'active']);
|
||||
|
||||
// [8] Send credentials email — IP + new password are both ready at this point
|
||||
SendVmCredentialsEmailJob::dispatch($this->moduleVmwareId);
|
||||
|
||||
Log::info('ChangePasswordViaVsphereJob: completed', [
|
||||
@@ -107,6 +111,7 @@ class ChangePasswordViaVsphereJob implements ShouldQueue
|
||||
]);
|
||||
|
||||
ModuleVmware::where('id', $this->moduleVmwareId)->update(['status' => 0]);
|
||||
Service::where('vm_id', $this->moduleVmwareId)->update(['status' => 'failed']);
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user