Skip to content

Commit

Permalink
feat: #196 replace create/update service with a launch service task
Browse files Browse the repository at this point in the history
  • Loading branch information
bohdan-shulha committed Sep 16, 2024
1 parent d9e1aab commit a4313b0
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 14 deletions.
2 changes: 1 addition & 1 deletion api-nodes/Http/Controllers/TaskController.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public function complete(NodeTask $task, Request $request)
}

$resultClass = $task->type->result();

var_dump($request->all());
$result = $resultClass::validateAndCreate($request->all());

$task->complete($result);
Expand Down
7 changes: 7 additions & 0 deletions app/Events/NodeTasks/LaunchService/LaunchServiceCompleted.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace App\Events\NodeTasks\LaunchService;

use App\Events\NodeTasks\BaseTaskEvent;

class LaunchServiceCompleted extends BaseTaskEvent {}
7 changes: 7 additions & 0 deletions app/Events/NodeTasks/LaunchService/LaunchServiceFailed.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php

namespace App\Events\NodeTasks\LaunchService;

use App\Events\NodeTasks\BaseTaskEvent;

class LaunchServiceFailed extends BaseTaskEvent {}
18 changes: 5 additions & 13 deletions app/Models/DeploymentData/Process.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@
use App\Models\Node;
use App\Models\NodeTasks\CreateConfig\CreateConfigMeta;
use App\Models\NodeTasks\CreateSecret\CreateSecretMeta;
use App\Models\NodeTasks\CreateService\CreateServiceMeta;
use App\Models\NodeTasks\DeleteService\DeleteServiceMeta;
use App\Models\NodeTasks\LaunchService\LaunchServiceMeta;
use App\Models\NodeTasks\PullDockerImage\PullDockerImageMeta;
use App\Models\NodeTasks\UpdateService\UpdateServiceMeta;
use App\Models\NodeTaskType;
use App\Rules\RequiredIfArrayHas;
use App\Util\ResourceId;
Expand Down Expand Up @@ -290,16 +289,11 @@ public function asNodeTasks(Deployment $deployment): array
'value' => $internalDomain,
]);

// FIXME: this is going to work wrong if the initial deployment is pending.
// Don't allow to schedule deployments if the service has not been created yet?
// This code is duplicated in the next block
$actionUpdate = $deployment->service->tasks()->ofType(NodeTaskType::CreateService)->where('meta__docker_name', $this->dockerName)->completed()->exists();

$serviceSecretVars = $this->getSecretVars();

$tasks[] = [
'type' => $actionUpdate ? NodeTaskType::UpdateService : NodeTaskType::CreateService,
'meta' => $actionUpdate ? UpdateServiceMeta::from($serviceTaskMeta) : CreateServiceMeta::from($serviceTaskMeta),
'type' => NodeTaskType::LaunchService,
'meta' => LaunchServiceMeta::from($serviceTaskMeta),
'payload' => [
'AuthConfigName' => $authConfigName,
'ReleaseCommand' => $this->getReleaseCommandPayload($deployment, $labels),
Expand Down Expand Up @@ -378,16 +372,14 @@ public function asNodeTasks(Deployment $deployment): array
];

foreach ($this->workers as $worker) {
$actionUpdate = $deployment->service->tasks()->ofType(NodeTaskType::CreateService)->where('meta__docker_name', $worker->dockerName)->completed()->exists();

$workerTaskMeta = [
...$serviceTaskMeta,
'dockerName' => $worker->dockerName,
];

$tasks[] = [
'type' => $actionUpdate ? NodeTaskType::UpdateService : NodeTaskType::CreateService,
'meta' => $actionUpdate ? UpdateServiceMeta::from($workerTaskMeta) : CreateServiceMeta::from($workerTaskMeta),
'type' => NodeTaskType::LaunchService,
'meta' => LaunchServiceMeta::from($workerTaskMeta),
'payload' => [
'AuthConfigName' => $authConfigName,
'ReleaseCommand' => (object) [],
Expand Down
9 changes: 9 additions & 0 deletions app/Models/NodeTaskType.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@
use App\Events\NodeTasks\InitSwarm\InitSwarmFailed;
use App\Events\NodeTasks\JoinSwarm\JoinSwarmCompleted;
use App\Events\NodeTasks\JoinSwarm\JoinSwarmFailed;
use App\Events\NodeTasks\LaunchService\LaunchServiceCompleted;
use App\Events\NodeTasks\LaunchService\LaunchServiceFailed;
use App\Events\NodeTasks\PullDockerImage\PullDockerImageCompleted;
use App\Events\NodeTasks\PullDockerImage\PullDockerImageFailed;
use App\Events\NodeTasks\RebuildCaddyConfig\ApplyCaddyConfigCompleted;
Expand Down Expand Up @@ -72,6 +74,8 @@
use App\Models\NodeTasks\InitSwarm\InitSwarmResult;
use App\Models\NodeTasks\JoinSwarm\JoinSwarmMeta;
use App\Models\NodeTasks\JoinSwarm\JoinSwarmResult;
use App\Models\NodeTasks\LaunchService\LaunchServiceMeta;
use App\Models\NodeTasks\LaunchService\LaunchServiceResult;
use App\Models\NodeTasks\PullDockerImage\PullDockerImageMeta;
use App\Models\NodeTasks\PullDockerImage\PullDockerImageResult;
use App\Models\NodeTasks\ServiceExec\ServiceExecMeta;
Expand Down Expand Up @@ -111,6 +115,7 @@ enum NodeTaskType: int
case UploadS3File = 18;
case JoinSwarm = 19;
case UpdateDirdConfig = 20;
case LaunchService = 21;

public function meta(): string
{
Expand All @@ -136,6 +141,7 @@ public function meta(): string
self::UploadS3File => UploadS3FileMeta::class,
self::JoinSwarm => JoinSwarmMeta::class,
self::UpdateDirdConfig => UpdateDirdConfigMeta::class,
self::LaunchService => LaunchServiceMeta::class,
};
}

Expand Down Expand Up @@ -163,6 +169,7 @@ public function result(): string
self::UploadS3File => UploadS3FileResult::class,
self::JoinSwarm => JoinSwarmResult::class,
self::UpdateDirdConfig => UpdateDirdConfigResult::class,
self::LaunchService => LaunchServiceResult::class,
};
}

Expand Down Expand Up @@ -190,6 +197,7 @@ public function completed(): string
self::UploadS3File => UploadS3FileCompleted::class,
self::JoinSwarm => JoinSwarmCompleted::class,
self::UpdateDirdConfig => UpdateDirdConfigCompleted::class,
self::LaunchService => LaunchServiceCompleted::class,
};
}

Expand Down Expand Up @@ -217,6 +225,7 @@ public function failed(): string
self::UploadS3File => UploadS3FileFailed::class,
self::JoinSwarm => JoinSwarmFailed::class,
self::UpdateDirdConfig => UpdateDirdConfigFailed::class,
self::LaunchService => LaunchServiceFailed::class,
};
}
}
22 changes: 22 additions & 0 deletions app/Models/NodeTasks/LaunchService/LaunchServiceMeta.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace App\Models\NodeTasks\LaunchService;

use App\Models\NodeTasks\AbstractTaskMeta;

class LaunchServiceMeta extends AbstractTaskMeta
{
public function __construct(
public int $deploymentId,
public int $serviceId,
public string $serviceName,
public string $dockerName
) {
//
}

public function formattedHtml(): string
{
return "Launch Docker Service <code>{$this->dockerName}</code> of <code>{$this->serviceName}</code>";
}
}
21 changes: 21 additions & 0 deletions app/Models/NodeTasks/LaunchService/LaunchServiceResult.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace App\Models\NodeTasks\LaunchService;

use App\Models\NodeTasks\AbstractTaskResult;
use App\Models\NodeTasks\DockerId;

class LaunchServiceResult extends AbstractTaskResult
{
public function __construct(
public DockerId $docker,
public string $action,
) {
//
}

public function formattedHtml(): string
{
return "Service {$this->action} successfully. ID: <code>{$this->docker->id}</code>";
}
}

0 comments on commit a4313b0

Please sign in to comment.