1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace Tylercd100\Rebooter\Drivers\Api; |
4
|
|
|
|
5
|
|
|
use GuzzleHttp\Client; |
6
|
|
|
|
7
|
|
View Code Duplication |
class Vultr extends Api |
|
|
|
|
8
|
|
|
{ |
9
|
|
|
|
10
|
|
|
/** |
11
|
|
|
* @param string $token API Token from vultr.com |
12
|
|
|
* @param number $server_id The ID of the server you want to control (Vultr calls it the `SUBID`) |
13
|
|
|
* @param string $host The api host |
14
|
|
|
* @param Client $client The guzzle client to use |
15
|
|
|
*/ |
16
|
12 |
|
public function __construct($token, $server_id, $host = "api.vultr.com", Client $client = null){ |
17
|
12 |
|
parent::__construct($token, $server_id, $host, $client); |
18
|
12 |
|
} |
19
|
|
|
|
20
|
|
|
/** |
21
|
|
|
* Executes a Boot command |
22
|
|
|
* @return \Psr\Http\Message\ResponseInterface |
23
|
|
|
*/ |
24
|
3 |
|
public function boot(){ |
25
|
3 |
|
return $this->exec("start"); |
26
|
|
|
} |
27
|
|
|
|
28
|
|
|
/** |
29
|
|
|
* Executes a Reboot command |
30
|
|
|
* @return \Psr\Http\Message\ResponseInterface |
31
|
|
|
*/ |
32
|
6 |
|
public function reboot(){ |
33
|
6 |
|
return $this->exec("reboot"); |
34
|
|
|
} |
35
|
|
|
|
36
|
|
|
/** |
37
|
|
|
* Executes a Shutdown command |
38
|
|
|
* @return \Psr\Http\Message\ResponseInterface |
39
|
|
|
*/ |
40
|
3 |
|
public function shutdown(){ |
41
|
3 |
|
return $this->exec("halt"); |
42
|
|
|
} |
43
|
|
|
|
44
|
|
|
/** |
45
|
|
|
* Builds the request URL for the API call |
46
|
|
|
* @param string $action The Vultr API action |
47
|
|
|
* @return string |
48
|
|
|
*/ |
49
|
6 |
|
protected function buildRequestUrl($action){ |
50
|
6 |
|
return "https://{$this->host}/v1/server/{$action}"; |
51
|
|
|
} |
52
|
|
|
|
53
|
|
|
/** |
54
|
|
|
* Builds the request data for the API call |
55
|
|
|
* @param string $action The Vultr API action |
56
|
|
|
* @return array |
57
|
|
|
*/ |
58
|
3 |
|
protected function buildRequestData($action){ |
|
|
|
|
59
|
3 |
|
return ["SUBID"=>$this->server_id]; |
60
|
|
|
} |
61
|
|
|
|
62
|
|
|
/** |
63
|
|
|
* Executes a command on the API |
64
|
|
|
* @param string $action |
65
|
|
|
* @return \Psr\Http\Message\ResponseInterface |
66
|
|
|
*/ |
67
|
3 |
|
protected function exec($action){ |
68
|
3 |
|
$url = $this->buildRequestUrl($action); |
69
|
3 |
|
$data = $this->buildRequestData($action); |
70
|
|
|
|
71
|
3 |
|
return $this->client->request('POST', $url, [ |
72
|
|
|
'headers' => [ |
73
|
3 |
|
'API-Key' => $this->token, |
74
|
3 |
|
], |
75
|
3 |
|
'form_params' => $data, |
76
|
3 |
|
]); |
77
|
|
|
} |
78
|
|
|
} |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.