From ad7f2ec7fb4b2f6f6cb67bacee05823b6c987941 Mon Sep 17 00:00:00 2001 From: Elliott Mangham Date: Mon, 7 Aug 2017 12:53:39 +0100 Subject: [PATCH] Database Connect --- local-build.sh | 7 +++ .../Cdev/Command/Env/DbConnectEnvCommand.php | 58 +++++++++++++++++++ src/Creode/Environment/Docker/Docker.php | 14 +++++ .../Docker/System/Compose/Compose.php | 30 ++++++++++ src/Creode/Environment/Environment.php | 2 + src/services.xml | 7 +++ 6 files changed, 118 insertions(+) create mode 100755 local-build.sh create mode 100644 src/Creode/Cdev/Command/Env/DbConnectEnvCommand.php diff --git a/local-build.sh b/local-build.sh new file mode 100755 index 0000000..cf00feb --- /dev/null +++ b/local-build.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +# credit to: https://moquet.net/blog/distributing-php-cli/ + +box build + +mv cdev.phar /usr/local/bin/cdev-local diff --git a/src/Creode/Cdev/Command/Env/DbConnectEnvCommand.php b/src/Creode/Cdev/Command/Env/DbConnectEnvCommand.php new file mode 100644 index 0000000..beae0f2 --- /dev/null +++ b/src/Creode/Cdev/Command/Env/DbConnectEnvCommand.php @@ -0,0 +1,58 @@ +setName('env:db:connect'); + $this->setDescription('Connects to database container'); + + $this->addOption( + 'path', + 'p', + InputOption::VALUE_REQUIRED, + 'Path to run commands on. Defaults to the directory the command is run from', + getcwd() + ); + + $this->addOption( + 'database', + 'd', + InputOption::VALUE_REQUIRED, + 'The database to connect to', + 'website' + ); + + $this->addOption( + 'user', + 'u', + InputOption::VALUE_REQUIRED, + 'The user to connect as', + 'webuser' + ); + + $this->addOption( + 'password', + 'w', + InputOption::VALUE_REQUIRED, + 'The user password', + 'webpassword' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output) + { + $this->_environment->input($input); + + $output->writeln( + $this->_environment->dbConnect() + ); + } +} diff --git a/src/Creode/Environment/Docker/Docker.php b/src/Creode/Environment/Docker/Docker.php index 71db6c1..0d1d9c9 100644 --- a/src/Creode/Environment/Docker/Docker.php +++ b/src/Creode/Environment/Docker/Docker.php @@ -161,6 +161,20 @@ public function ssh() $this->_compose->ssh($path, $user); } + public function dbConnect() + { + $this->logTitle('Connecting to database...'); + + $path = $this->_input->getOption('path'); + $database = $this->_input->getOption('database'); + $user = $this->_input->getOption('user'); + $password = $this->_input->getOption('password'); + + $this->logMessage("Connecting to $database as $user"); + + $this->_compose->dbConnect($path, $database, $user, $password); + } + public function cacheClear() { $commands = $this->_framework->clearCache(); diff --git a/src/Creode/Environment/Docker/System/Compose/Compose.php b/src/Creode/Environment/Docker/System/Compose/Compose.php index 71454a5..79cf6b9 100644 --- a/src/Creode/Environment/Docker/System/Compose/Compose.php +++ b/src/Creode/Environment/Docker/System/Compose/Compose.php @@ -136,6 +136,36 @@ public function ssh($path, $user) ); } + /** + * Connects to database + * @param string $path + * @param string $database Database to connect to + * @param string $user User to connect as + * @param string $password Password for user + */ + public function dbConnect($path, $database, $user, $password) + { + $this->requiresConfig(); + + $this->run( + self::COMMAND, + [ + '-f', + Config::CONFIG_DIR . self::FILE, + '-p', + $this->_networkName, + 'exec', + 'mysql', + 'mysql', + '-u', + $user, + '-p'.$password, + $database + ], + $path + ); + } + /** * Runs a command on the running environment * @param string $path diff --git a/src/Creode/Environment/Environment.php b/src/Creode/Environment/Environment.php index 4faa750..b94a83f 100644 --- a/src/Creode/Environment/Environment.php +++ b/src/Creode/Environment/Environment.php @@ -16,6 +16,8 @@ abstract public function cleanup(); abstract public function ssh(); + abstract public function dbConnect(); + abstract public function runCommand(array $command = array(), $elevatePermissions = false); abstract public function cacheClear(); diff --git a/src/services.xml b/src/services.xml index 860a324..6d7cfa1 100644 --- a/src/services.xml +++ b/src/services.xml @@ -73,6 +73,9 @@ + + + @@ -119,6 +122,10 @@ + + + +