From 0b66b826f7d2266429e4fa8bb20309155d18f6b9 Mon Sep 17 00:00:00 2001 From: Christopher Vagnetoft Date: Tue, 27 Sep 2022 12:47:30 +0200 Subject: [PATCH] Bugfixes --- README.md | 2 ++ src/Commands/ExecCommand.php | 2 +- src/Commands/StartCommand.php | 12 +++++++++--- src/Commands/StopCommand.php | 5 +++-- src/Container/ContainerManager.php | 11 +++++++++-- 5 files changed, 24 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 7470f7c..47e29f9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # ServerCtl - Services for Developers +## Todo +- [ ] Add a --temporary option to start to remove volume after stop ## Examples diff --git a/src/Commands/ExecCommand.php b/src/Commands/ExecCommand.php index 0538739..bbf7ae5 100644 --- a/src/Commands/ExecCommand.php +++ b/src/Commands/ExecCommand.php @@ -14,7 +14,7 @@ class ExecCommand extends Command protected function configure() { - $this->addOption("instance", "I", InputOption::VALUE_REQUIRED, "Specify the instance name", "default"); + $this->addOption("instance", "i", InputOption::VALUE_REQUIRED, "Specify the instance name", "default"); $this->addOption("script", "s", InputOption::VALUE_NONE, "The command is a script (use 'list' for list)"); $this->addArgument("service", InputArgument::REQUIRED, "The service name"); $this->addArgument("execute", InputArgument::REQUIRED, "The command or script to execute"); diff --git a/src/Commands/StartCommand.php b/src/Commands/StartCommand.php index b8f9482..525e37a 100644 --- a/src/Commands/StartCommand.php +++ b/src/Commands/StartCommand.php @@ -14,7 +14,7 @@ class StartCommand extends Command protected function configure() { - $this->addOption("instance", "I", InputOption::VALUE_REQUIRED, "Specify the instance name", "default"); + $this->addOption("instance", "i", InputOption::VALUE_REQUIRED, "Specify the instance name", "default"); $this->addOption("portoffset", "p", InputOption::VALUE_REQUIRED, "Offset port numbers by value", 0); $this->addArgument("service", InputArgument::REQUIRED, "The service name"); } @@ -32,13 +32,19 @@ class StartCommand extends Command $output->writeln("No such service in registry"); return self::FAILURE; } + $instanceName = $input->getOption("instance"); $options = [ - 'name' => $input->getOption("instance"), + 'name' => $instanceName, 'portoffset' => $input->getOption("portoffset") ]; - $containerManager->startService($serviceInfo, $options); + $info = $containerManager->startService($serviceInfo, $options); + + $output->writeln("Started {$serviceName}<{$instanceName}>"); + foreach ($info['ports'] as $info=>$port) { + $output->writeln(" {$info}: {$port}"); + } return self::SUCCESS; } diff --git a/src/Commands/StopCommand.php b/src/Commands/StopCommand.php index 64382cd..1c1ee40 100644 --- a/src/Commands/StopCommand.php +++ b/src/Commands/StopCommand.php @@ -14,7 +14,7 @@ class StopCommand extends Command protected function configure() { - $this->addOption("instance", "I", InputOption::VALUE_REQUIRED, "Specify the instance name", "default"); + $this->addOption("instance", "i", InputOption::VALUE_REQUIRED, "Specify the instance name", "default"); $this->addArgument("service", InputArgument::REQUIRED, "The service name"); } @@ -25,6 +25,7 @@ class StopCommand extends Command $serviceName = $input->getArgument("service"); + $instanceName = $input->getOption("instance"); $serviceInfo = $serviceRegistry->findServiceByName($serviceName); if (!$serviceInfo) { @@ -32,7 +33,7 @@ class StopCommand extends Command return self::FAILURE; } - $containerManager->stopService($serviceInfo, $input->getOption("instance")); + $containerManager->stopService($serviceInfo, $instanceName); return self::SUCCESS; } diff --git a/src/Container/ContainerManager.php b/src/Container/ContainerManager.php index ff773b8..9a954d2 100644 --- a/src/Container/ContainerManager.php +++ b/src/Container/ContainerManager.php @@ -28,6 +28,7 @@ class ContainerManager $serviceName = $service['name']; $instanceName = $options['name']??'default'; + $portOffset = intval($options['portoffset']??0); $containerName = "sm_".$serviceName."_".$instanceName; @@ -39,9 +40,12 @@ class ContainerManager // Map the ports $ports = (array)($service['ports']??[]); + $mappedPorts = []; foreach ($ports as $port) { + $portNumber = intval($port['port']) + $portOffset; $args[] = '-p'; - $args[] = $port['port']; + $args[] = $portNumber; + $mappedPorts[$port['info']] = $portNumber; } // Get the paths to persist @@ -72,6 +76,10 @@ class ContainerManager echo "$ {$cmdl}\n"; passthru($cmdl); + return [ + 'ports' => $mappedPorts + ]; + } /** @@ -82,7 +90,6 @@ class ContainerManager $args = []; $serviceName = $service['name']; - $instanceName = $options['name']??'default'; $containerName = "sm_".$serviceName."_".$instanceName; $args[] = 'stop';