mirror of
https://github.com/vitodeploy/vito.git
synced 2025-04-20 02:11:36 +00:00
load linode regions and plans dynamically (#367)
This commit is contained in:
parent
cc79aa9fbf
commit
34c5750950
@ -107,7 +107,12 @@ public function plans(?string $region): array
|
|||||||
|
|
||||||
return collect($plans)
|
return collect($plans)
|
||||||
->mapWithKeys(fn ($value) => [
|
->mapWithKeys(fn ($value) => [
|
||||||
$value['InstanceType'] => $value['InstanceType'].' - '.$value['VCpuInfo']['DefaultVCpus'].' vCPUs, '.$value['MemoryInfo']['SizeInMiB'].' MB RAM',
|
$value['InstanceType'] => __('server_providers.plan', [
|
||||||
|
'name' => $value['InstanceType'],
|
||||||
|
'cpu' => $value['VCpuInfo']['DefaultVCpus'] ?? 'N/A',
|
||||||
|
'memory' => $value['MemoryInfo']['SizeInMiB'] ?? 'N/A',
|
||||||
|
'disk' => $value['InstanceStorageInfo']['TotalSizeInGB'] ?? 'N/A',
|
||||||
|
]),
|
||||||
])
|
])
|
||||||
->toArray();
|
->toArray();
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,6 @@ public function plans(?string $region): array
|
|||||||
$value['name'] => __('server_providers.plan', [
|
$value['name'] => __('server_providers.plan', [
|
||||||
'name' => $value['name'],
|
'name' => $value['name'],
|
||||||
'cpu' => $value['cores'],
|
'cpu' => $value['cores'],
|
||||||
'architecture' => $value['architecture'],
|
|
||||||
'memory' => $value['memory'],
|
'memory' => $value['memory'],
|
||||||
'disk' => $value['disk'],
|
'disk' => $value['disk'],
|
||||||
]),
|
]),
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
use App\Exceptions\ServerProviderError;
|
use App\Exceptions\ServerProviderError;
|
||||||
use App\Facades\Notifier;
|
use App\Facades\Notifier;
|
||||||
use App\Notifications\FailedToDeleteServerFromProvider;
|
use App\Notifications\FailedToDeleteServerFromProvider;
|
||||||
|
use Exception;
|
||||||
use Illuminate\Support\Facades\Http;
|
use Illuminate\Support\Facades\Http;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
@ -13,23 +14,12 @@ class Linode extends AbstractProvider
|
|||||||
{
|
{
|
||||||
protected string $apiUrl = 'https://api.linode.com/v4';
|
protected string $apiUrl = 'https://api.linode.com/v4';
|
||||||
|
|
||||||
public function createRules($input): array
|
public function createRules(array $input): array
|
||||||
{
|
{
|
||||||
$rules = [];
|
return [
|
||||||
// plans
|
'plan' => 'required',
|
||||||
$plans = [];
|
'region' => 'required',
|
||||||
foreach (config('serverproviders.linode.plans') as $plan) {
|
];
|
||||||
$plans[] = $plan['value'];
|
|
||||||
}
|
|
||||||
$rules['plan'] = 'required|in:'.implode(',', $plans);
|
|
||||||
// regions
|
|
||||||
$regions = [];
|
|
||||||
foreach (config('serverproviders.linode.regions') as $region) {
|
|
||||||
$regions[] = $region['value'];
|
|
||||||
}
|
|
||||||
$rules['region'] = 'required|in:'.implode(',', $regions);
|
|
||||||
|
|
||||||
return $rules;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function credentialValidationRules($input): array
|
public function credentialValidationRules($input): array
|
||||||
@ -59,7 +49,12 @@ public function data(array $input): array
|
|||||||
*/
|
*/
|
||||||
public function connect(?array $credentials = null): bool
|
public function connect(?array $credentials = null): bool
|
||||||
{
|
{
|
||||||
|
try {
|
||||||
$connect = Http::withToken($credentials['token'])->get($this->apiUrl.'/account');
|
$connect = Http::withToken($credentials['token'])->get($this->apiUrl.'/account');
|
||||||
|
} catch (Exception) {
|
||||||
|
throw new CouldNotConnectToProvider('Linode');
|
||||||
|
}
|
||||||
|
|
||||||
if (! $connect->ok()) {
|
if (! $connect->ok()) {
|
||||||
throw new CouldNotConnectToProvider('Linode');
|
throw new CouldNotConnectToProvider('Linode');
|
||||||
}
|
}
|
||||||
@ -69,16 +64,41 @@ public function connect(?array $credentials = null): bool
|
|||||||
|
|
||||||
public function plans(?string $region): array
|
public function plans(?string $region): array
|
||||||
{
|
{
|
||||||
return collect(config('serverproviders.linode.plans'))
|
try {
|
||||||
->mapWithKeys(fn ($value) => [$value['value'] => $value['title']])
|
$plans = Http::withToken($this->serverProvider->credentials['token'])
|
||||||
|
->get($this->apiUrl.'/linode/types')
|
||||||
|
->json();
|
||||||
|
|
||||||
|
return collect($plans['data'])
|
||||||
|
->mapWithKeys(function ($value) {
|
||||||
|
return [
|
||||||
|
$value['id'] => __('server_providers.plan', [
|
||||||
|
'name' => $value['label'],
|
||||||
|
'cpu' => $value['vcpus'],
|
||||||
|
'memory' => $value['memory'],
|
||||||
|
'disk' => $value['disk'],
|
||||||
|
]),
|
||||||
|
];
|
||||||
|
})
|
||||||
->toArray();
|
->toArray();
|
||||||
|
} catch (Exception) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function regions(): array
|
public function regions(): array
|
||||||
{
|
{
|
||||||
return collect(config('serverproviders.linode.regions'))
|
try {
|
||||||
->mapWithKeys(fn ($value) => [$value['value'] => $value['title']])
|
$regions = Http::withToken($this->serverProvider->credentials['token'])
|
||||||
|
->get($this->apiUrl.'/regions')
|
||||||
|
->json();
|
||||||
|
|
||||||
|
return collect($regions['data'])
|
||||||
|
->mapWithKeys(fn ($value) => [$value['id'] => $value['label']])
|
||||||
->toArray();
|
->toArray();
|
||||||
|
} catch (Exception) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -88,6 +108,7 @@ public function create(): void
|
|||||||
{
|
{
|
||||||
$this->generateKeyPair();
|
$this->generateKeyPair();
|
||||||
|
|
||||||
|
try {
|
||||||
$create = Http::withToken($this->server->serverProvider->credentials['token'])
|
$create = Http::withToken($this->server->serverProvider->credentials['token'])
|
||||||
->post($this->apiUrl.'/linode/instances', [
|
->post($this->apiUrl.'/linode/instances', [
|
||||||
'backups_enabled' => false,
|
'backups_enabled' => false,
|
||||||
@ -101,6 +122,10 @@ public function create(): void
|
|||||||
'type' => $this->server->provider_data['plan'],
|
'type' => $this->server->provider_data['plan'],
|
||||||
'region' => $this->server->provider_data['region'],
|
'region' => $this->server->provider_data['region'],
|
||||||
]);
|
]);
|
||||||
|
} catch (Exception) {
|
||||||
|
throw new ServerProviderError('Failed to create server on Linode');
|
||||||
|
}
|
||||||
|
|
||||||
if (! $create->ok()) {
|
if (! $create->ok()) {
|
||||||
$msg = __('Failed to create server on Linode');
|
$msg = __('Failed to create server on Linode');
|
||||||
$errors = $create->json('errors');
|
$errors = $create->json('errors');
|
||||||
@ -119,8 +144,12 @@ public function create(): void
|
|||||||
|
|
||||||
public function isRunning(): bool
|
public function isRunning(): bool
|
||||||
{
|
{
|
||||||
|
try {
|
||||||
$status = Http::withToken($this->server->serverProvider->credentials['token'])
|
$status = Http::withToken($this->server->serverProvider->credentials['token'])
|
||||||
->get($this->apiUrl.'/linode/instances/'.$this->server->provider_data['linode_id']);
|
->get($this->apiUrl.'/linode/instances/'.$this->server->provider_data['linode_id']);
|
||||||
|
} catch (Exception) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (! $status->ok()) {
|
if (! $status->ok()) {
|
||||||
return false;
|
return false;
|
||||||
@ -132,8 +161,14 @@ public function isRunning(): bool
|
|||||||
public function delete(): void
|
public function delete(): void
|
||||||
{
|
{
|
||||||
if (isset($this->server->provider_data['linode_id'])) {
|
if (isset($this->server->provider_data['linode_id'])) {
|
||||||
|
try {
|
||||||
$delete = Http::withToken($this->server->serverProvider->credentials['token'])
|
$delete = Http::withToken($this->server->serverProvider->credentials['token'])
|
||||||
->delete($this->apiUrl.'/linode/instances/'.$this->server->provider_data['linode_id']);
|
->delete($this->apiUrl.'/linode/instances/'.$this->server->provider_data['linode_id']);
|
||||||
|
} catch (Exception) {
|
||||||
|
Notifier::send($this->server, new FailedToDeleteServerFromProvider($this->server));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (! $delete->ok()) {
|
if (! $delete->ok()) {
|
||||||
Notifier::send($this->server, new FailedToDeleteServerFromProvider($this->server));
|
Notifier::send($this->server, new FailedToDeleteServerFromProvider($this->server));
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"servers.create.public_key_text": "mkdir -p /root/.ssh && touch /root/.ssh/authorized_keys && echo ':public_key' >> /root/.ssh/authorized_keys",
|
"servers.create.public_key_text": "mkdir -p /root/.ssh && touch /root/.ssh/authorized_keys && echo ':public_key' >> /root/.ssh/authorized_keys",
|
||||||
"servers.create.public_key_warning": "Your server needs to have a new unused installation of supported operating systems and must have a root user. To get started, add our public key to /root/.ssh/authorized_keys file by running the bellow command on your server as root.",
|
"servers.create.public_key_warning": "Your server needs to have a new unused installation of supported operating systems and must have a root user. To get started, add our public key to /root/.ssh/authorized_keys file by running the bellow command on your server as root.",
|
||||||
"server_providers.plan": ":name - :cpu Cores(:architecture) - :memory - :disk Disk"
|
"server_providers.plan": ":name - :cpu Cores - :memory Memory - :disk Disk"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user