107 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| use App\Models\Server;
 | |
| use App\Models\StandaloneDocker;
 | |
| use App\Models\StandaloneMariadb;
 | |
| use App\Models\StandaloneMongodb;
 | |
| use App\Models\StandaloneMysql;
 | |
| use App\Models\StandalonePostgresql;
 | |
| use App\Models\StandaloneRedis;
 | |
| use Visus\Cuid2\Cuid2;
 | |
| 
 | |
| function generate_database_name(string $type): string
 | |
| {
 | |
|     $cuid = new Cuid2(7);
 | |
|     return $type . '-database-' . $cuid;
 | |
| }
 | |
| 
 | |
| function create_standalone_postgresql($environment_id, $destination_uuid): StandalonePostgresql
 | |
| {
 | |
|     // TODO: If another type of destination is added, this will need to be updated.
 | |
|     $destination = StandaloneDocker::where('uuid', $destination_uuid)->first();
 | |
|     if (!$destination) {
 | |
|         throw new Exception('Destination not found');
 | |
|     }
 | |
|     return StandalonePostgresql::create([
 | |
|         'name' => generate_database_name('postgresql'),
 | |
|         'postgres_password' => \Illuminate\Support\Str::password(length: 64, symbols: false),
 | |
|         'environment_id' => $environment_id,
 | |
|         'destination_id' => $destination->id,
 | |
|         'destination_type' => $destination->getMorphClass(),
 | |
|     ]);
 | |
| }
 | |
| 
 | |
| function create_standalone_redis($environment_id, $destination_uuid): StandaloneRedis
 | |
| {
 | |
|     $destination = StandaloneDocker::where('uuid', $destination_uuid)->first();
 | |
|     if (!$destination) {
 | |
|         throw new Exception('Destination not found');
 | |
|     }
 | |
|     return StandaloneRedis::create([
 | |
|         'name' => generate_database_name('redis'),
 | |
|         'redis_password' => \Illuminate\Support\Str::password(length: 64, symbols: false),
 | |
|         'environment_id' => $environment_id,
 | |
|         'destination_id' => $destination->id,
 | |
|         'destination_type' => $destination->getMorphClass(),
 | |
|     ]);
 | |
| }
 | |
| 
 | |
| function create_standalone_mongodb($environment_id, $destination_uuid): StandaloneMongodb
 | |
| {
 | |
|     $destination = StandaloneDocker::where('uuid', $destination_uuid)->first();
 | |
|     if (!$destination) {
 | |
|         throw new Exception('Destination not found');
 | |
|     }
 | |
|     return StandaloneMongodb::create([
 | |
|         'name' => generate_database_name('mongodb'),
 | |
|         'mongo_initdb_root_password' => \Illuminate\Support\Str::password(length: 64, symbols: false),
 | |
|         'environment_id' => $environment_id,
 | |
|         'destination_id' => $destination->id,
 | |
|         'destination_type' => $destination->getMorphClass(),
 | |
|     ]);
 | |
| }
 | |
| function create_standalone_mysql($environment_id, $destination_uuid): StandaloneMysql
 | |
| {
 | |
|     $destination = StandaloneDocker::where('uuid', $destination_uuid)->first();
 | |
|     if (!$destination) {
 | |
|         throw new Exception('Destination not found');
 | |
|     }
 | |
|     return StandaloneMysql::create([
 | |
|         'name' => generate_database_name('mysql'),
 | |
|         'mysql_root_password' => \Illuminate\Support\Str::password(length: 64, symbols: false),
 | |
|         'mysql_password' => \Illuminate\Support\Str::password(length: 64, symbols: false),
 | |
|         'environment_id' => $environment_id,
 | |
|         'destination_id' => $destination->id,
 | |
|         'destination_type' => $destination->getMorphClass(),
 | |
|     ]);
 | |
| }
 | |
| function create_standalone_mariadb($environment_id, $destination_uuid): StandaloneMariadb
 | |
| {
 | |
|     $destination = StandaloneDocker::where('uuid', $destination_uuid)->first();
 | |
|     if (!$destination) {
 | |
|         throw new Exception('Destination not found');
 | |
|     }
 | |
|     return StandaloneMariadb::create([
 | |
|         'name' => generate_database_name('mariadb'),
 | |
|         'mariadb_root_password' => \Illuminate\Support\Str::password(length: 64, symbols: false),
 | |
|         'mariadb_password' => \Illuminate\Support\Str::password(length: 64, symbols: false),
 | |
|         'environment_id' => $environment_id,
 | |
|         'destination_id' => $destination->id,
 | |
|         'destination_type' => $destination->getMorphClass(),
 | |
|     ]);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Delete file locally on the filesystem.
 | |
|  * @param string $filename
 | |
|  * @param Server $server
 | |
|  * @return void
 | |
|  */
 | |
| function delete_backup_locally(string | null $filename, Server $server): void
 | |
| {
 | |
|     if (empty($filename)) {
 | |
|         return;
 | |
|     }
 | |
|     instant_remote_process(["rm -f \"{$filename}\""], $server, throwError: false);
 | |
| }
 | 
