Misc fixes, templates
This commit is contained in:
		@@ -2,6 +2,7 @@
 | 
			
		||||
  "$type": "service",
 | 
			
		||||
  "name": "mailhog",
 | 
			
		||||
  "description": "SMTP server that holds e-mail for debugging",
 | 
			
		||||
  "info": "Mailhog accepts e-mails from any configured app over SMTP for use during development. Received messages can be displayed in the web interface.",
 | 
			
		||||
  "tags": [ "app", "mail", "smtp" ],
 | 
			
		||||
  "author": null,
 | 
			
		||||
  "image": "mailhog/mailhog",
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@
 | 
			
		||||
  "$type": "service",
 | 
			
		||||
  "name": "mariadb",
 | 
			
		||||
  "description": "MariaDB RDBMS (MySQL fork)",
 | 
			
		||||
  "info": "MariaDB is a mostly MySQL compatible relational database server.",
 | 
			
		||||
  "help": "Default credentials are root/toor",
 | 
			
		||||
  "tags": [ "rdbms", "mysql" ],
 | 
			
		||||
  "author": null,
 | 
			
		||||
@@ -16,17 +17,17 @@
 | 
			
		||||
    { "path": "/data", "hint": "data" }
 | 
			
		||||
  ],
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "mongosh": {
 | 
			
		||||
      "info": "Open the mongo shell",
 | 
			
		||||
      "execute": "mongosh"
 | 
			
		||||
    "shell": {
 | 
			
		||||
      "info": "Open the MariaDB shell",
 | 
			
		||||
      "execute": [ "mysql", "-uroot", "-p${MARIADB_ROOT_PASSWORD}" ]
 | 
			
		||||
    },
 | 
			
		||||
    "export": {
 | 
			
		||||
      "info": "Export the database",
 | 
			
		||||
      "execute": "mysqldump "
 | 
			
		||||
      "execute": "mysqldump -uroot -p${MARIADB_ROOT_PASSWORD} --all-databases"
 | 
			
		||||
    },
 | 
			
		||||
    "import": {
 | 
			
		||||
      "info": "Import the database",
 | 
			
		||||
      "execute": "mongoimport"
 | 
			
		||||
      "execute": "mysql -uroot -p${MARIADB_ROOT_PASSWORD}"
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -18,7 +18,8 @@
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "shell": {
 | 
			
		||||
      "info": "Open the mongo shell",
 | 
			
		||||
      "execute": "mongosh"
 | 
			
		||||
      "execute": "mongosh",
 | 
			
		||||
      "arguments": [ "-u", "root", "-p", "toor" ]
 | 
			
		||||
    },
 | 
			
		||||
    "export": {
 | 
			
		||||
      "info": "Export the database",
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@
 | 
			
		||||
  ],
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "shell": {
 | 
			
		||||
      "info": "Open the mongo shell",
 | 
			
		||||
      "info": "Open the MySQL shell",
 | 
			
		||||
      "execute": "mysql -uroot -p%{MARIADB_ROOT_PASSWORD}"
 | 
			
		||||
    },
 | 
			
		||||
    "export": {
 | 
			
		||||
 
 | 
			
		||||
@@ -41,12 +41,16 @@ class ExecCommand extends Command
 | 
			
		||||
            return self::SUCCESS;
 | 
			
		||||
        } elseif ($input->getOption("script")) {
 | 
			
		||||
            $script = $serviceInfo['scripts'][$command]['execute']??null;
 | 
			
		||||
            $scriptArgs = $serviceInfo['scripts'][$command]['arguments']??null;
 | 
			
		||||
            if (!$script) {
 | 
			
		||||
                $output->writeln("<error>No such script</>");
 | 
			
		||||
                return self::FAILURE;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            $cmdl = [ is_array($script)?join("; ", $script):$script ];
 | 
			
		||||
            if ($scriptArgs)
 | 
			
		||||
                $cmdl = [ $script, ...$scriptArgs ]; // is_array($script)?join("; ", $script):$script ];
 | 
			
		||||
            else
 | 
			
		||||
                $cmdl = $script;
 | 
			
		||||
            $containerManager->execute($serviceInfo, $instanceName, $cmdl);
 | 
			
		||||
    
 | 
			
		||||
        } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,7 @@ class FindCommand extends Command
 | 
			
		||||
        $this->addArgument("service", InputArgument::OPTIONAL, "Search query");
 | 
			
		||||
        $this->addOption("environment", "E", InputOption::VALUE_NONE, "Show the environment for the services");
 | 
			
		||||
        $this->addOption("ports", "P", InputOption::VALUE_NONE, "Show the ports for the services");
 | 
			
		||||
        $this->addOption("info", "I", InputOption::VALUE_NONE, "Show service information text if available");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function execute(InputInterface $input, OutputInterface $output)
 | 
			
		||||
@@ -25,10 +26,12 @@ class FindCommand extends Command
 | 
			
		||||
 | 
			
		||||
        $printEnvs = $input->getOption("environment");
 | 
			
		||||
        $printPorts = $input->getOption("ports");
 | 
			
		||||
        $showInfo = $input->getOption("info");
 | 
			
		||||
 | 
			
		||||
        $services = $serviceRegistry->findAllServices();
 | 
			
		||||
        $query = $input->getArgument("service");
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
        $output->writeln($query?"Services matching <options=bold>{$query}</>:":"Available services:");
 | 
			
		||||
        foreach ($services as $service) {
 | 
			
		||||
            $tags = $service['tags']??[];
 | 
			
		||||
@@ -42,6 +45,10 @@ class FindCommand extends Command
 | 
			
		||||
                $tags = "";
 | 
			
		||||
            }
 | 
			
		||||
            $output->writeln(sprintf("  <comment>%s</>: <info>%s</> <fg=cyan>%s</>", $service['name'], $service['description']??"?", $tags));
 | 
			
		||||
            if ($showInfo && array_key_exists('info', $service)) {
 | 
			
		||||
                $info = "    ".strtr(wordwrap($service['info']), [ "\n" => "\n    " ]);
 | 
			
		||||
                $output->writeln("<fg=bright-green>".$info."</>");
 | 
			
		||||
            }
 | 
			
		||||
            if ($printEnvs) {
 | 
			
		||||
                foreach ($service['environment']??[] as $env=>$value) {
 | 
			
		||||
                    $output->writeln(sprintf("    <fg=cyan>%s</>=<fg=magenta>%s</>", $env, $value));
 | 
			
		||||
 
 | 
			
		||||
@@ -251,6 +251,10 @@ class ContainerManager
 | 
			
		||||
 | 
			
		||||
        $cmdl = 'docker '.join(' ',array_map('escapeshellarg', $args));
 | 
			
		||||
 | 
			
		||||
        $cmdl = preg_replace_callback('<\$\{(.+?)\}>', function ($v) use ($service) {
 | 
			
		||||
            return $service['environment'][$v[1]]??null;
 | 
			
		||||
        }, $cmdl);
 | 
			
		||||
 | 
			
		||||
        echo "$ {$cmdl}\n";
 | 
			
		||||
        passthru($cmdl);
 | 
			
		||||
        
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user