Skip to content

Commit 78fa82e

Browse files
committed
Route backend jobs to use correct image
Bug: T408624
1 parent 216b16d commit 78fa82e

2 files changed

Lines changed: 46 additions & 8 deletions

File tree

app/Jobs/ProcessMediaWikiJobsJob.php

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace App\Jobs;
44

5+
use App\Services\MediaWikiHostResolver;
56
use Illuminate\Bus\Queueable;
67
use Illuminate\Contracts\Queue\ShouldBeUnique;
78
use Illuminate\Contracts\Queue\ShouldQueue;
@@ -27,14 +28,28 @@ public function uniqueId(): string {
2728
return $this->wikiDomain;
2829
}
2930

30-
public function handle(Client $kubernetesClient): void {
31+
public function handle(Client $kubernetesClient, MediaWikiHostResolver $resolver): void {
32+
$domain = $resolver->getBackendHostForDomain($this->wikiDomain);
33+
$serviceName = $domain;
3134
$kubernetesClient->setNamespace('default');
35+
$backendService = $kubernetesClient->services()->setLabelSelector([
36+
'name' => $serviceName,
37+
])->first();
38+
39+
if ($backendService === null) {
40+
$this->fail(
41+
new \RuntimeException(
42+
'Unable to find a matching MediaWiki backend service in the cluster'
43+
)
44+
);
45+
46+
return;
47+
}
48+
49+
$MWPodSelector = $backendService->toArray()['spec']['selector'];
3250
$mediawikiPod = $kubernetesClient->pods()->setFieldSelector([
3351
'status.phase' => 'Running',
34-
])->setLabelSelector([
35-
'app.kubernetes.io/name' => 'mediawiki',
36-
'app.kubernetes.io/component' => 'app-backend',
37-
])->first();
52+
])->setLabelSelector($MWPodSelector[0])->first();
3853

3954
if ($mediawikiPod === null) {
4055
$this->fail(

tests/Jobs/ProcessMediaWikiJobsJobTest.php

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Tests\Jobs;
44

55
use App\Jobs\ProcessMediaWikiJobsJob;
6+
use App\Services\MediaWikiHostResolver;
67
use GuzzleHttp\Handler\MockHandler;
78
use GuzzleHttp\HandlerStack;
89
use GuzzleHttp\Psr7\Response;
@@ -16,6 +17,9 @@ class ProcessMediaWikiJobsJobTest extends TestCase {
1617
use RefreshDatabase;
1718

1819
public function testJobFailOnNoMediaWikiPod() {
20+
21+
$mockResolver = $this->createMock(MediaWikiHostResolver::class);
22+
1923
$mockJob = $this->createMock(Job::class);
2024
$mockJob->expects($this->once())->method('fail');
2125

@@ -24,6 +28,7 @@ public function testJobFailOnNoMediaWikiPod() {
2428

2529
$mock = new MockHandler([
2630
new Response(200, [], json_encode(['items' => []])),
31+
new Response(200, [], json_encode(['items' => []])),
2732
]);
2833

2934
$handlerStack = HandlerStack::create($mock);
@@ -35,17 +40,32 @@ public function testJobFailOnNoMediaWikiPod() {
3540
$job->handle(new Client([
3641
'master' => 'https://kubernetes.default.svc',
3742
'token' => '/var/run/secrets/kubernetes.io/serviceaccount/token',
38-
], null, $mockGuzzle));
43+
], null, $mockGuzzle), $mockResolver);
3944
}
4045

4146
public function testJobDoesNotFail() {
47+
$mockResolver = $this->createMock(MediaWikiHostResolver::class);
4248
$mockJob = $this->createMock(Job::class);
4349
$mockJob->expects($this->never())->method('fail');
4450

4551
$job = new ProcessMediaWikiJobsJob('test.wikibase.cloud');
4652
$job->setJob($mockJob);
4753

4854
$mock = new MockHandler([
55+
new Response(200, [], json_encode(['items' => [
56+
[
57+
'kind' => 'Service',
58+
'spec' => [
59+
'selector' => [
60+
[
61+
"app.kubernetes.io/component" => "app-backend",
62+
"app.kubernetes.io/instance" => "mediawiki-143",
63+
"app.kubernetes.io/name" => "mediawiki"
64+
],
65+
],
66+
],
67+
],
68+
]])),
4969
new Response(200, [], json_encode(['items' => [
5070
[
5171
'kind' => 'Pod',
@@ -75,9 +95,12 @@ public function testJobDoesNotFail() {
7595
'verify' => '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt',
7696
]);
7797

78-
$job->handle(new Client([
98+
$job->handle(
99+
new Client([
79100
'master' => 'https://kubernetes.default.svc',
80101
'token' => '/var/run/secrets/kubernetes.io/serviceaccount/token',
81-
], null, $mockGuzzle));
102+
], null, $mockGuzzle),
103+
$mockResolver
104+
);
82105
}
83106
}

0 commit comments

Comments
 (0)