summaryrefslogtreecommitdiff
path: root/src/Command
diff options
context:
space:
mode:
Diffstat (limited to 'src/Command')
-rw-r--r--src/Command/RunCommand.php46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/Command/RunCommand.php b/src/Command/RunCommand.php
new file mode 100644
index 0000000..048e94c
--- /dev/null
+++ b/src/Command/RunCommand.php
@@ -0,0 +1,46 @@
+<?php
+
+namespace PHPIAC\Command;
+
+use PHPIAC\Task;
+use phpseclib3\Crypt\PublicKeyLoader;
+use phpseclib3\Net\SSH2;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class RunCommand extends Command
+{
+ protected static $defaultName = 'run';
+
+ protected function configure()
+ {}
+
+ protected function execute(InputInterface $input, OutputInterface $output)
+ {
+ $cwd = getcwd();
+ $config = include $cwd . '/config.php';
+
+ global $ssh;
+ $ssh = new SSH2($config['host']);
+ if (! $ssh->login($config['user'], PublicKeyLoader::load(file_get_contents($config['private_key_file'])))) {
+ throw new \Exception('Login failed');
+ }
+
+ $commands = [];
+ foreach ($config['tasks'] as $task) {
+ /**@var Task $task*/
+ if (! $task->module->checkState()) {
+ $output->writeln('Adding commands from ' . get_class($task->module));
+ array_push($commands, ...$task->module->getCommands());
+ }
+ else {
+ $output->writeln('Skipping commands from ' . get_class($task->module));
+ }
+ }
+
+ $ssh->exec(implode(PHP_EOL, $commands));
+
+ return Command::SUCCESS;
+ }
+}