Skip to content
This repository has been archived by the owner on Dec 29, 2022. It is now read-only.

Commit

Permalink
(feat) add Reinstall VM to instances
Browse files Browse the repository at this point in the history
  • Loading branch information
jameshilliard committed Feb 17, 2017
1 parent 5e57c6d commit 2d6d3ff
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 11 deletions.
11 changes: 11 additions & 0 deletions app/Http/Controllers/InstanceController.php
Expand Up @@ -298,4 +298,15 @@ public function resetPassword($id)

return redirect()->route('progress', [$response->jobid]);
}

public function reinstallVirtualMachine($id)
{
// Reinstall Virtual Machine
$response = $this->acs->restoreVirtualMachine(['virtualmachineid' => $id]);

// Command is async
event(new NewAsyncJob($response->jobid, Auth::User()->id, HttpRequest::server('REMOTE_ADDR')));

return redirect()->route('progress', [$response->jobid]);
}
}
28 changes: 18 additions & 10 deletions app/Listeners/Cloudstack/CheckJobStatus.php
Expand Up @@ -6,6 +6,7 @@
use App\Events\Cloudstack\JobFinished;
use App\Events\Cloudstack\NewAsyncJob;
use App\Mail\VMPasswordChanged;
use App\Mail\VMRestored;
use App\User;
use Cloudstack\CloudStackClient;
use Illuminate\Queue\InteractsWithQueue;
Expand Down Expand Up @@ -43,16 +44,23 @@ public function handle(NewAsyncJob $event)
$loopComplete = 1;
event(new JobFinished($result, $event->userId, $event->userIpAddress));

switch ($result->jobinstancetype) {
case 'VirtualMachine':
if ($result->cmd == 'org.apache.cloudstack.api.command.user.vm.DeployVMCmd') {
event(new InstanceWasCreated($result->jobresult->virtualmachine));
}
if ($result->cmd == 'org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd') {
Mail::to(User::find($event->userId)->email)
->queue(new VMPasswordChanged($result->jobresult->virtualmachine));
}
break;
if (isset($result->jobinstancetype)) {
switch ($result->jobinstancetype) {
case 'VirtualMachine':
if ($result->cmd == 'org.apache.cloudstack.api.command.user.vm.DeployVMCmd') {
event(new InstanceWasCreated($result->jobresult->virtualmachine));
}
if ($result->cmd == 'org.apache.cloudstack.api.command.user.vm.ResetVMPasswordCmd') {
Mail::to(User::find($event->userId)->email)
->queue(new VMPasswordChanged($result->jobresult->virtualmachine));
}
break;
}
} else {
if ($result->cmd == 'org.apache.cloudstack.api.command.user.vm.RestoreVMCmd') {
Mail::to(User::find($event->userId)->email)
->queue(new VMRestored($result->jobresult->virtualmachine));
}
}
}

Expand Down
6 changes: 5 additions & 1 deletion app/Listeners/Cloudstack/RecordActivity.php
Expand Up @@ -33,7 +33,11 @@ public function handle(JobFinished $event)
// Job result is in $event->jobResult
Log::debug('RecordActivity listener fired');

Log::debug("Job Instance type is {$event->jobResult->jobinstancetype}");
if (isset($event->jobResult->jobinstancetype)) {
Log::debug("Job Instance type is {$event->jobResult->jobinstancetype}");
} else {
Log::debug("Job Instance type is not set");
}
Log::debug("Command is {$event->jobResult->cmd}");
Log::debug("VM Name is {$event->jobResult->jobresult->virtualmachine->name}");
Log::debug("Auth is " . $event->userId);
Expand Down
35 changes: 35 additions & 0 deletions app/Mail/VMRestored.php
@@ -0,0 +1,35 @@
<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class VMRestored extends Mailable
{
use Queueable, SerializesModels;

public $vm;

/**
* Create a new message instance.
*
* @return void
*/
public function __construct($vm)
{
$this->vm = $vm;
}

/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject('Instance Was Reinstalled')->view('emails.vmRestored');
}
}
7 changes: 7 additions & 0 deletions resources/views/emails/vmRestored.blade.php
@@ -0,0 +1,7 @@
You reinstalled an instance!<br><br>

Name: {{ $vm->name }}<br>
IP: {{ $vm->nic[0]->ipaddress }}<br>
Password: {{ $vm->password }}<br><br>

Thanks for that.
6 changes: 6 additions & 0 deletions resources/views/instance/show.blade.php
Expand Up @@ -57,6 +57,12 @@
</li>
@endif

<li><a href="{{ route('instance.reinstallvm', $vm->id) }}">
<span class="glyphicon glyphicon-repeat" aria-hidden="true"></span>
Reinstall
</a>
</li>

<li><a href="javascript:deleteType('instance', '{{ $vm->id }}');">
<span class="glyphicon glyphicon-trash" aria-hidden="true"></span>
Destroy
Expand Down
1 change: 1 addition & 0 deletions routes/web.php
Expand Up @@ -58,6 +58,7 @@
Route::get('instance/{instance}/restore', ['as' => 'instance.recover', 'uses' => 'InstanceController@recover']);
Route::get('instance/{instance}/snapshot', ['as' => 'instance.snapshot', 'uses' => 'InstanceController@snapshot']);
Route::get('instance/{instance}/resetpw', ['as' => 'instance.resetpw', 'uses' => 'InstanceController@resetPassword']);
Route::get('instance/{instance}/reinstallvm', ['as' => 'instance.reinstallvm', 'uses' => 'InstanceController@reinstallVirtualMachine']);

Route::get('snapshot/{snapshot}/createTemplate', ['as' => 'snapshot.newTemplate', 'uses' => 'InstanceController@newTemplateFromSnapshot']);
Route::post('snapshot/{snapshot}/createTemplate', ['as' => 'snapshot.createTemplate', 'uses' => 'InstanceController@createTemplateFromSnapshot']);
Expand Down

0 comments on commit 2d6d3ff

Please sign in to comment.