-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPowerDNSClientFactory.php
More file actions
81 lines (64 loc) · 2.07 KB
/
PowerDNSClientFactory.php
File metadata and controls
81 lines (64 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
/*
* This file is part of the CwdPowerDNS Client
*
* (c) 2024 cwd.at GmbH <office@cwd.at>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Cwd\PowerDNSClient;
use Doctrine\Common\Annotations\Reader;
class PowerDNSClientFactory
{
private $config = [];
private $reader;
public const SLAVE = 'slave';
public const MASTER = 'master';
/**
* @var array<string,PowerDNSClient>
*/
private $clients = [];
public function __construct(array $config = [], Reader $reader)
{
$this->config = $config;
$this->reader = $reader;
}
public function getClient(string $name): PowerDNSClient
{
if (isset($this->clients[$name]) && $this->clients[$name] instanceof PowerDNSClient) {
return $this->clients[$name];
}
foreach ($this->config as $configName => $config) {
if ($name === $configName) {
$client = new Client($config['uri'], $config['api_key'], null, $this->reader);
$this->clients[$name] = new PowerDNSClient($client);
return $this->clients[$name];
}
}
throw new \RuntimeException(sprintf('No configuration for "%s% is found', $name));
}
/**
* @return array<PowerDNSClient>
*/
public function getSlaves(): array
{
$clients = [];
foreach ($this->config as $configName => $config) {
if (isset($config['type']) && self::SLAVE == $config['type']) {
$clients[] = $this->getClient($configName);
}
}
return $clients;
}
public static function createClient(string $uri, string $apiKey, string $defaultServer = null, Reader $reader): PowerDNSClient
{
$client = new Client($uri, $apiKey, null, $reader);
$pdns = new PowerDNSClient($client);
if (null !== $defaultServer) {
$pdns->setDefaultServerId($defaultServer);
}
return $pdns;
}
}