Skip to content

Commit 9db7006

Browse files
committed
feat: #262 ensure stable ids for self-hosted seed data
1 parent 3c3b390 commit 9db7006

File tree

5 files changed

+51
-29
lines changed

5 files changed

+51
-29
lines changed

Diff for: .github/labeler.yml

-3
This file was deleted.

Diff for: .github/workflows/labeler.yml

-18
This file was deleted.

Diff for: app/Console/Commands/SelfHostPtah.php

+12
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use App\Actions\Services\StartDeployment;
77
use App\Models\DeploymentData;
88
use App\Models\DeploymentData\LaunchMode;
9+
use App\Models\DeploymentData\WorkerCookie;
910
use App\Models\Network;
1011
use App\Models\Node;
1112
use App\Models\NodeTask;
@@ -57,6 +58,17 @@ public function handle()
5758
'p6q7r8s9t0',
5859
]);
5960

61+
WorkerCookie::useIdsPool([
62+
'2n9nbwg6478lkifqu3rddqd2pgm47yxg',
63+
't0q91vcef6mw518z6n97qhnz4q5wmmqs',
64+
'3478lkifqu3rddqd2pgm47yxg2n9nbwg',
65+
'f6mw518z6n97qhnz4q5wmmqs0q91vce6',
66+
'ra6ybnsju9462o17w0gx3ead5eok94vb',
67+
'bhypz8lg1afmvwyr8w4xw8sygvgdopjm',
68+
'foymi9vgguk4rasy92tvktehwx2i13nn',
69+
'ixhg42b170hzpvua5f21rce2bvxtos5u',
70+
]);
71+
6072
$user = User::create([
6173
'name' => 'Self Host',
6274
'email' => 'self-hosted@localhost',

Diff for: app/Models/DeploymentData/Worker.php

+7-8
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
use App\Rules\Crontab;
1717
use App\Util\ResourceId;
1818
use Exception;
19-
use Illuminate\Support\Str;
2019
use Spatie\LaravelData\Attributes\Validation\Enum;
2120
use Spatie\LaravelData\Attributes\Validation\Min;
2221
use Spatie\LaravelData\Attributes\Validation\ProhibitedUnless;
@@ -81,10 +80,10 @@ public function asNodeTasks(Deployment $deployment, Process $process, bool $buil
8180
$hostname = $this->getHostname($deployment, $process);
8281

8382
if ($this->launchMode->value === LaunchMode::BackupCreate->value && ! $this->backupCreate->backupVolume) {
84-
$dockerName = dockerize_name($this->dockerName.'_vol_ptah_backup');
83+
$dockerName = dockerize_name($this->getDockerName($process).'_vol_ptah_backup');
8584

8685
$this->backupCreate->backupVolume = Volume::validateAndCreate([
87-
'id' => 'volume-'.Str::random(11),
86+
'id' => ResourceId::make('volume'),
8887
'name' => $dockerName,
8988
'dockerName' => $dockerName,
9089
'path' => '/ptah/backup/create',
@@ -97,10 +96,10 @@ public function asNodeTasks(Deployment $deployment, Process $process, bool $buil
9796
}
9897

9998
if (! $this->backupRestore->restoreVolume) {
100-
$dockerName = dockerize_name($this->dockerName.'_vol_ptah_restore');
99+
$dockerName = dockerize_name($this->getDockerName($process).'_vol_ptah_restore');
101100

102101
$this->backupRestore->restoreVolume = Volume::validateAndCreate([
103-
'id' => 'volume-'.Str::random(11),
102+
'id' => ResourceId::make('volume'),
104103
'name' => $dockerName,
105104
'dockerName' => $dockerName,
106105
'path' => '/ptah/backup/restore',
@@ -113,7 +112,7 @@ public function asNodeTasks(Deployment $deployment, Process $process, bool $buil
113112
'kind' => 'worker',
114113
// Cookie is used to filter out stale tasks for the same Docker Service on the Docker Engine's side
115114
// and avoid transferring loads of data between Ptah.sh Agent and Docker Engine.
116-
'cookie' => Str::random(32),
115+
'cookie' => WorkerCookie::make(),
117116
'worker.name' => $this->name,
118117
]);
119118

@@ -136,15 +135,15 @@ public function asNodeTasks(Deployment $deployment, Process $process, bool $buil
136135
'deploymentId' => $deployment->id,
137136
'serviceId' => $deployment->service_id,
138137
'serviceName' => $deployment->service->name,
139-
'dockerName' => $this->dockerName,
138+
'dockerName' => $this->getDockerName($process),
140139
'processName' => $process->name,
141140
'workerName' => $this->name,
142141
]),
143142
'payload' => [
144143
'ReleaseCommand' => $this->getReleaseCommandPayload($deployment, $process, $labels),
145144
'SecretVars' => $this->getSecretVars($process),
146145
'SwarmServiceSpec' => [
147-
'Name' => $this->dockerName,
146+
'Name' => $this->getDockerName($process),
148147
'Labels' => $labels,
149148
'TaskTemplate' => [
150149
'ContainerSpec' => [

Diff for: app/Models/DeploymentData/WorkerCookie.php

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace App\Models\DeploymentData;
4+
5+
use Illuminate\Support\Str;
6+
use RuntimeException;
7+
8+
class WorkerCookie
9+
{
10+
protected static $useIdsPool = false;
11+
12+
protected static $idsPool = [];
13+
14+
public static function useIdsPool(array $ids): void
15+
{
16+
self::$idsPool = $ids;
17+
self::$useIdsPool = true;
18+
}
19+
20+
public static function make(): string
21+
{
22+
if (self::$useIdsPool) {
23+
if (empty(self::$idsPool)) {
24+
throw new RuntimeException('IDs pool is empty');
25+
}
26+
27+
return array_shift(self::$idsPool);
28+
}
29+
30+
return Str::random(32);
31+
}
32+
}

0 commit comments

Comments
 (0)