Add run command of predefined server

This commit is contained in:
Andras Bacsai 2023-03-24 15:48:57 +01:00
parent f7c615c958
commit 789b699556
3 changed files with 22 additions and 14 deletions

View File

@ -14,6 +14,8 @@ class RunCommand extends Component
public $command = 'ls';
public $server = 'testing-host';
public function render()
{
return view('livewire.run-command');
@ -23,14 +25,14 @@ public function runCommand()
{
$this->isKeepAliveOn = true;
$this->activity = remoteProcess($this->command, 'testing-host');
$this->activity = remoteProcess($this->command, $this->server);
}
public function runSleepingBeauty()
{
$this->isKeepAliveOn = true;
$this->activity = remoteProcess('x=1; while [ $x -le 40 ]; do sleep 0.1 && echo "Welcome $x times" $(( x++ )); done', 'testing-host');
$this->activity = remoteProcess('x=1; while [ $x -le 40 ]; do sleep 0.1 && echo "Welcome $x times" $(( x++ )); done', $this->server);
}
public function runDummyProjectBuild()
@ -40,7 +42,7 @@ public function runDummyProjectBuild()
$this->activity = remoteProcess(<<<EOT
cd projects/dummy-project
~/.docker/cli-plugins/docker-compose build --no-cache
EOT, 'testing-host');
EOT, $this->server);
}
public function polling()

View File

@ -2,9 +2,10 @@
use App\Actions\RemoteProcess\DispatchRemoteProcess;
use App\Data\RemoteProcessArgs;
use App\Models\Server;
use Spatie\Activitylog\Contracts\Activity;
if (! function_exists('remoteProcess')) {
if (!function_exists('remoteProcess')) {
/**
* Run a Coolify Process, which SSH's asynchronously into a machine to run the command(s).
* @TODO Change 'root' to 'coolify' when it's able to run Docker commands without sudo
@ -12,17 +13,22 @@
*/
function remoteProcess(
string $command,
string $destination,
?int $port = 22,
?string $user = 'root',
): Activity
{
string $destination
): Activity {
$found_server = Server::where('name', $destination)->first();
if (!$found_server) {
throw new \RuntimeException('Server not found.');
}
$found_team = auth()->user()->teams->pluck('id')->contains($found_server->team_id);
if (!$found_team) {
throw new \RuntimeException('You do not have access to this server.');
}
return resolve(DispatchRemoteProcess::class, [
'remoteProcessArgs' => new RemoteProcessArgs(
destination: $destination,
destination: $found_server->ip,
command: $command,
port: $port,
user: $user,
port: $found_server->port,
user: $found_server->user,
),
])();
}

View File

@ -1,8 +1,8 @@
<div>
<div>
<label for="command">
<input autofocus class="py-2 rounded ring-1" id="command" wire:model="command" type="text"
wire:keydown.enter="runCommand" />
<input autofocus id="command" wire:model="command" type="text" wire:keydown.enter="runCommand" />
<input id="command" wire:model="server" type="text" />
</label>
<button wire:click="runCommand">Run command</button>