UpdatesManualDnsNamesOfContainers   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 6
dl 0
loc 75
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 7 1
A start() 0 19 3
A stop() 0 4 1
A reset() 0 4 1
1
<?php
2
3
namespace Dock\Plugins\ExtraHostname\ProjectManager;
4
5
use Dock\Docker\Compose\Project;
6
use Dock\Docker\Compose\ContainerInspector;
7
use Dock\Plugins\ExtraHostname\HostnameResolutionWriter;
8
use Dock\Plugins\ExtraHostname\HostnameResolver;
9
use Dock\Project\ProjectManager;
10
11
class UpdatesManualDnsNamesOfContainers implements ProjectManager
12
{
13
    /**
14
     * @var ProjectManager
15
     */
16
    private $projectManager;
17
18
    /**
19
     * @var HostnameResolver
20
     */
21
    private $hostnameResolver;
22
23
    /**
24
     * @var HostnameResolutionWriter
25
     */
26
    private $hostnameResolutionWriter;
27
28
    /**
29
     * @var ContainerInspector
30
     */
31
    private $inspector;
32
33
    /**
34
     * @param ProjectManager           $projectManager
35
     * @param HostnameResolver         $hostnameResolver
36
     * @param HostnameResolutionWriter $hostnameResolutionWriter
37
     * @param ContainerInspector       $inspector
38
     */
39
    public function __construct(ProjectManager $projectManager, HostnameResolver $hostnameResolver, HostnameResolutionWriter $hostnameResolutionWriter, ContainerInspector $inspector)
40
    {
41
        $this->projectManager = $projectManager;
42
        $this->hostnameResolver = $hostnameResolver;
43
        $this->hostnameResolutionWriter = $hostnameResolutionWriter;
44
        $this->inspector = $inspector;
45
    }
46
47
    /**
48
     * {@inheritdoc}
49
     */
50
    public function start(Project $project)
51
    {
52
        $hostnameConfigurations = $this->hostnameResolver->getExtraHostnameConfigurations($project);
53
        foreach ($hostnameConfigurations as $configuration) {
54
            $container = $this->inspector->findOneByName($configuration->getContainer());
55
            $ipAddress = $container->getIpAddress();
56
57
            if (empty($ipAddress)) {
58
                throw new \RuntimeException(sprintf(
59
                    'The container "%s" has an empty address',
60
                    $container->getName()
61
                ));
62
            }
63
64
            $this->hostnameResolutionWriter->write($configuration->getHostname(), $ipAddress);
65
        }
66
67
        $this->projectManager->start($project);
68
    }
69
70
    /**
71
     * {@inheritdoc}
72
     */
73
    public function stop(Project $project)
74
    {
75
        $this->projectManager->stop($project);
76
    }
77
78
    /**
79
     * {@inheritdoc}
80
     */
81
    public function reset(Project $project, array $containers = [])
82
    {
83
        $this->projectManager->reset($project, $containers);
84
    }
85
}
86