From 7fe2c372acc1134581f9a80f863010921d31bdeb Mon Sep 17 00:00:00 2001 From: Jonathan Webb Date: Thu, 7 May 2015 22:47:56 -0400 Subject: [PATCH] WIP: Refactor CloudApiClient to use Guzzle ~5.0 for #54 --- src/Acquia/Cloud/Api/CloudApiClient.php | 199 ++++++++++++------------ 1 file changed, 102 insertions(+), 97 deletions(-) diff --git a/src/Acquia/Cloud/Api/CloudApiClient.php b/src/Acquia/Cloud/Api/CloudApiClient.php index 1e05e0a..8507fab 100644 --- a/src/Acquia/Cloud/Api/CloudApiClient.php +++ b/src/Acquia/Cloud/Api/CloudApiClient.php @@ -2,10 +2,10 @@ namespace Acquia\Cloud\Api; -use Acquia\Rest\ServiceManagerAware; -use Guzzle\Common\Collection; use Acquia\Json\Json; -use Guzzle\Service\Client; +use Acquia\Rest\ServiceManagerAware; +use GuzzleHttp\Client; +use GuzzleHttp\Collection; class CloudApiClient extends Client implements ServiceManagerAware { @@ -32,20 +32,27 @@ public static function factory($config = array()) ); $defaults = array( - 'base_url' => self::BASE_URL, - 'base_path' => self::BASE_PATH, + 'base_url' => (self::BASE_URL . self::BASE_PATH . '/'), + 'headers' => ['Content-Type' => 'application/json; charset=utf-8'], ); - // Instantiate the Acquia Search plugin. $config = Collection::fromConfig($config, $defaults, $required); - $client = new static($config->get('base_url'), $config); - $client->setDefaultHeaders(array( - 'Content-Type' => 'application/json; charset=utf-8', - )); - // Attach the Acquia Search plugin to the client. - $plugin = new CloudApiAuthPlugin($config->get('username'), $config->get('password')); - $client->addSubscriber($plugin); + if ($config->get('username') && $config->get('password')) { + $config->set('auth', [$config->get('username'), $config->get('password')]); + $config->remove('username'); + $config->remove('password'); + } + + // Instantiate the Client object. + $base_url = $config->get('base_url'); + $config->remove('base_url'); + $config->remove('base_path'); + + $client = new static([ + 'base_url' => $base_url, + 'defaults' => $config->toArray(), + ]); return $client; } @@ -56,9 +63,9 @@ public static function factory($config = array()) public function getBuilderParams() { return array( - 'base_url' => $this->getConfig('base_url'), - 'username' => $this->getConfig('username'), - 'password' => $this->getConfig('password'), + 'base_url' => $this->getBaseUrl(), + 'username' => $this->getDefaultOption('auth/0'), + 'password' => $this->getDefaultOption('auth/1'), ); } @@ -71,7 +78,7 @@ public function getBuilderParams() */ public function sites() { - $request = $this->get('{+base_path}/sites.json'); + $request = $this->get('sites.json'); return new Response\SiteNames($request); } @@ -87,7 +94,7 @@ public function sites() public function site($site) { $variables = array('site' => $site); - $request = $this->get(array('{+base_path}/sites/{site}.json', $variables)); + $request = $this->get(array('sites/{site}.json', $variables)); return new Response\Site($request); } @@ -103,7 +110,7 @@ public function site($site) public function environments($site) { $variables = array('site' => $site); - $request = $this->get(array('{+base_path}/sites/{site}/envs.json', $variables)); + $request = $this->get(array('sites/{site}/envs.json', $variables)); return new Response\Environments($request); } @@ -123,7 +130,7 @@ public function environment($site, $env) 'site' => $site, 'env' => $env, ); - $request = $this->get(array('{+base_path}/sites/{site}/envs/{env}.json', $variables)); + $request = $this->get(array('sites/{site}/envs/{env}.json', $variables)); return new Response\Environment($request); } @@ -147,7 +154,7 @@ public function installDistro($site, $env, $type, $source) 'type' => $type, 'source' => $source, ); - $request = $this->post(array('{+base_path}/sites/{site}/envs/{env}/install/{type}.json?source={source}', $variables)); + $request = $this->post(array('sites/{site}/envs/{env}/install/{type}.json?source={source}', $variables)); return new Response\Task($request); } @@ -201,7 +208,7 @@ public function servers($site, $env) 'site' => $site, 'env' => $env, ); - $request = $this->get(array('{+base_path}/sites/{site}/envs/{env}/servers.json', $variables)); + $request = $this->get(array('sites/{site}/envs/{env}/servers.json', $variables)); return new Response\Servers($request); } @@ -223,7 +230,7 @@ public function server($site, $env, $server) 'env' => $env, 'server' => $server, ); - $request = $this->get(array('{+base_path}/sites/{site}/envs/{env}/servers/{server}.json', $variables)); + $request = $this->get(array('sites/{site}/envs/{env}/servers/{server}.json', $variables)); return new Response\Server($request); } @@ -239,7 +246,7 @@ public function server($site, $env, $server) public function sshKeys($site) { $variables = array('site' => $site); - $request = $this->get(array('{+base_path}/sites/{site}/sshkeys.json', $variables)); + $request = $this->get(array('sites/{site}/sshkeys.json', $variables)); return new Response\SshKeys($request); } @@ -259,7 +266,7 @@ public function sshKey($site, $keyId) 'site' => $site, 'id' => $keyId, ); - $request = $this->get(array('{+base_path}/sites/{site}/sshkeys/{id}.json', $variables)); + $request = $this->get(array('sites/{site}/sshkeys/{id}.json', $variables)); return new Response\SshKey($request); } @@ -279,18 +286,18 @@ public function sshKey($site, $keyId) */ public function addSshKey($site, $publicKey, $nickname, $shellAccess = true, $vcsAccess = true, $blacklist = array()) { - $path = '{+base_path}/sites/{site}/sshkeys.json?nickname={nickname}'; + $path = 'sites/{site}/sshkeys.json?nickname={nickname}'; $variables = array( 'site' => $site, 'nickname' => $nickname, ); $body = Json::encode(array( - 'ssh_pub_key' => $publicKey, - 'shell_access' => $shellAccess, - 'vcs_access' => $vcsAccess, - 'blacklist' => $blacklist, + 'ssh_pub_key' => $publicKey, + 'shell_access' => $shellAccess, + 'vcs_access' => $vcsAccess, + 'blacklist' => $blacklist, )); - $request = $this->post(array($path, $variables), null, $body); + $request = $this->post(array($path, $variables), ['body' => $body]); return new Response\Task($request); } @@ -316,7 +323,7 @@ public function deleteSshKey($site, $keyId) 'site' => $site, 'id' => $keyId, ); - $request = $this->delete(array('{+base_path}/sites/{site}/sshkeys/{id}.json', $variables)); + $request = $this->delete(array('sites/{site}/sshkeys/{id}.json', $variables)); return new Response\Task($request); } @@ -332,7 +339,7 @@ public function deleteSshKey($site, $keyId) public function svnUsers($site) { $variables = array('site' => $site); - $request = $this->get(array('{+base_path}/sites/{site}/svnusers.json', $variables)); + $request = $this->get(array('sites/{site}/svnusers.json', $variables)); return new Response\SvnUsers($request); } @@ -352,7 +359,7 @@ public function svnUser($site, $userId) 'site' => $site, 'id' => $userId, ); - $request = $this->get(array('{+base_path}/sites/{site}/svnusers/{id}.json', $variables)); + $request = $this->get(array('sites/{site}/svnusers/{id}.json', $variables)); return new Response\SvnUser($request); } @@ -371,13 +378,13 @@ public function svnUser($site, $userId) */ public function addSvnUser($site, $username, $password) { - $path = '{+base_path}/sites/{site}/svnusers/{username}.json'; + $path = 'sites/{site}/svnusers/{username}.json'; $variables = array( 'site' => $site, 'username' => $username, ); $body = Json::encode(array('password' => $password)); - $request = $this->post(array($path, $variables), null, $body); + $request = $this->post(array($path, $variables), ['body' => $body]); return new Response\Task($request); } @@ -399,7 +406,7 @@ public function deleteSvnUser($site, $userId) 'site' => $site, 'id' => $userId, ); - $request = $this->delete(array('{+base_path}/sites/{site}/svnusers/{id}.json', $variables)); + $request = $this->delete(array('sites/{site}/svnusers/{id}.json', $variables)); return new Response\Task($request); } @@ -415,7 +422,7 @@ public function deleteSvnUser($site, $userId) public function databases($site) { $variables = array('site' => $site); - $request = $this->get(array('{+base_path}/sites/{site}/dbs.json', $variables)); + $request = $this->get(array('sites/{site}/dbs.json', $variables)); return new Response\DatabaseNames($request); } @@ -435,13 +442,13 @@ public function database($site, $db) 'site' => $site, 'db' => $db, ); - $request = $this->get(array('{+base_path}/sites/{site}/dbs/{db}.json', $variables)); + $request = $this->get(array('sites/{site}/dbs/{db}.json', $variables)); return new Response\DatabaseName($request); } /** * @param string $site - * @param string $db + * @param string $db The new database name (e.g. newdb) * @param array $cluster_map * Optional. A mapping containing all environments and the cluster to which * the associated database should be created. Each entry consists of the @@ -462,7 +469,7 @@ public function addDatabase($site, $db, $cluster_map = NULL) if (is_array($cluster_map) && !empty($cluster_map)) { foreach ($cluster_map as $env => $db_cluster) { if (is_string($env) && !empty($env) && - intval($db_cluster) > 0) { + intval($db_cluster) > 0) { $options[$env] = array('db_cluster' => (string) $db_cluster); } } @@ -472,16 +479,15 @@ public function addDatabase($site, $db, $cluster_map = NULL) $body['options'] = $options; } $body = Json::encode($body); - $request = $this->post(array('{+base_path}/sites/{site}/dbs.json', $variables), null, $body); + $request = $this->post(array('sites/{site}/dbs.json', $variables), ['body' => $body]); return new Response\Task($request); } /** * @param string $site - * @param string $db - * @param bool $backup - * Optional. If TRUE, a final backup of the database instance in each - * environment is made before deletion. + * @param string $db The name of the database to delete. + * @param bool $backup This flag to optionally create a backup has been + * Deprecated since Apr 18, 2014. * * @return \Acquia\Cloud\Api\Response\Task * @@ -489,14 +495,14 @@ public function addDatabase($site, $db, $cluster_map = NULL) * * @see http://cloudapi.acquia.com/#DELETE__sites__site_dbs__db-instance_route */ - public function deleteDatabase($site, $db, $backup = TRUE) + public function deleteDatabase($site, $db, $backup = false) { $variables = array( 'site' => $site, 'db' => $db, 'backup' => $backup ? 1 : 0, ); - $request = $this->delete(array('{+base_path}/sites/{site}/dbs/{db}.json?backup={backup}', $variables)); + $request = $this->delete(array('sites/{site}/dbs/{db}.json?backup={backup}', $variables)); return new Response\Task($request); } @@ -516,7 +522,7 @@ public function environmentDatabases($site, $env) 'site' => $site, 'env' => $env, ); - $request = $this->get(array('{+base_path}/sites/{site}/envs/{env}/dbs.json', $variables)); + $request = $this->get(array('sites/{site}/envs/{env}/dbs.json', $variables)); return new Response\Databases($request); } @@ -538,7 +544,7 @@ public function environmentDatabase($site, $env, $db) 'env' => $env, 'db' => $db, ); - $request = $this->get(array('{+base_path}/sites/{site}/envs/{env}/dbs/{db}.json', $variables)); + $request = $this->get(array('sites/{site}/envs/{env}/dbs/{db}.json', $variables)); return new Response\Database($request); } @@ -560,7 +566,7 @@ public function databaseBackups($site, $env, $db) 'env' => $env, 'db' => $db, ); - $request = $this->get(array('{+base_path}/sites/{site}/envs/{env}/dbs/{db}/backups.json', $variables)); + $request = $this->get(array('sites/{site}/envs/{env}/dbs/{db}/backups.json', $variables)); return new Response\DatabaseBackups($request); } @@ -584,7 +590,7 @@ public function databaseBackup($site, $env, $db, $backupId) 'db' => $db, 'id' => $backupId, ); - $request = $this->get(array('{+base_path}/sites/{site}/envs/{env}/dbs/{db}/backups/{id}.json', $variables)); + $request = $this->get(array('sites/{site}/envs/{env}/dbs/{db}/backups/{id}.json', $variables)); return new Response\DatabaseBackup($request); } @@ -602,14 +608,14 @@ public function databaseBackup($site, $env, $db, $backupId) */ public function deleteDatabaseBackup($site, $env, $db, $backupId) { - $variables = array( - 'site' => $site, - 'env' => $env, - 'db' => $db, - 'backup' => $backupId, - ); - $request = $this->delete(array('{+base_path}/sites/{site}/envs/{env}/dbs/{db}/backups/{backup}.json', $variables)); - return new Response\Task($request); + $variables = array( + 'site' => $site, + 'env' => $env, + 'db' => $db, + 'backup' => $backupId, + ); + $request = $this->delete(array('sites/{site}/envs/{env}/dbs/{db}/backups/{backup}.json', $variables)); + return new Response\Task($request); } /** @@ -633,11 +639,10 @@ public function downloadDatabaseBackup($site, $env, $db, $backupId, $outfile) 'db' => $db, 'id' => $backupId, ); - return $this - ->get(array('{+base_path}/sites/{site}/envs/{env}/dbs/{db}/backups/{id}/download.json', $variables)) - ->setResponseBody($outfile) - ->send() - ; + return $this->get( + array('sites/{site}/envs/{env}/dbs/{db}/backups/{id}/download.json', $variables), + ['save_to' => $outfile] + ); } /** @@ -658,7 +663,7 @@ public function createDatabaseBackup($site, $env, $db) 'env' => $env, 'db' => $db, ); - $request = $this->post(array('{+base_path}/sites/{site}/envs/{env}/dbs/{db}/backups.json', $variables)); + $request = $this->post(array('sites/{site}/envs/{env}/dbs/{db}/backups.json', $variables)); return new Response\Task($request); } @@ -682,7 +687,7 @@ public function restoreDatabaseBackup($site, $env, $db, $backupId) 'db' => $db, 'id' => $backupId, ); - $request = $this->post(array('{+base_path}/sites/{site}/envs/{env}/dbs/{db}/backups/{id}/restore.json', $variables)); + $request = $this->post(array('sites/{site}/envs/{env}/dbs/{db}/backups/{id}/restore.json', $variables)); return new Response\Task($request); } @@ -700,7 +705,7 @@ public function tasks($site) $variables = array( 'site' => $site, ); - $request = $this->get(array('{+base_path}/sites/{site}/tasks.json', $variables)); + $request = $this->get(array('sites/{site}/tasks.json', $variables)); return new Response\Tasks($request); } @@ -720,7 +725,7 @@ public function task($site, $taskId) 'site' => $site, 'task' => $taskId, ); - $request = $this->get(array('{+base_path}/sites/{site}/tasks/{task}.json', $variables)); + $request = $this->get(array('sites/{site}/tasks/{task}.json', $variables)); return new Response\Task($request); } @@ -740,7 +745,7 @@ public function domains($site, $env) 'site' => $site, 'env' => $env, ); - $request = $this->get(array('{+base_path}/sites/{site}/envs/{env}/domains.json', $variables)); + $request = $this->get(array('sites/{site}/envs/{env}/domains.json', $variables)); return new Response\Domains($request); } @@ -762,7 +767,7 @@ public function domain($site, $env, $domain) 'env' => $env, 'domain' => $domain, ); - $request = $this->get(array('{+base_path}/sites/{site}/envs/{env}/domains/{domain}.json', $variables)); + $request = $this->get(array('sites/{site}/envs/{env}/domains/{domain}.json', $variables)); return new Response\Domain($request); } @@ -779,13 +784,13 @@ public function domain($site, $env, $domain) */ public function addDomain($site, $env, $domain) { - $variables = array( - 'site' => $site, - 'env' => $env, - 'domain' => $domain, - ); - $request = $this->post(array('{+base_path}/sites/{site}/envs/{env}/domains/{domain}.json', $variables)); - return new Response\Task($request); + $variables = array( + 'site' => $site, + 'env' => $env, + 'domain' => $domain, + ); + $request = $this->post(array('sites/{site}/envs/{env}/domains/{domain}.json', $variables)); + return new Response\Task($request); } /** @@ -812,20 +817,20 @@ public function addDomain($site, $env, $domain) */ public function moveDomain($site, $domains, $sourceEnv, $targetEnv, $skipSiteUpdate = FALSE) { - $paths = '{+base_path}/sites/{site}/domain-move/{source}/{target}.json'; + $paths = 'sites/{site}/domain-move/{source}/{target}.json'; $update_site = ''; if ($skipSiteUpdate) { $update_site = '1'; $paths .= '?skip_site_update={update_site}'; } $variables = array( - 'site' => $site, - 'source' => $sourceEnv, - 'target' => $targetEnv, - 'update_site' => $update_site, + 'site' => $site, + 'source' => $sourceEnv, + 'target' => $targetEnv, + 'update_site' => $update_site, ); $body = Json::encode(array('domains' => (array) $domains)); - $request = $this->post(array($paths, $variables), null, $body); + $request = $this->post(array($paths, $variables), ['body' => $body]); return new Response\Task($request); } @@ -842,13 +847,13 @@ public function moveDomain($site, $domains, $sourceEnv, $targetEnv, $skipSiteUpd */ public function deleteDomain($site, $env, $domain) { - $variables = array( - 'site' => $site, - 'env' => $env, - 'domain' => $domain, - ); - $request = $this->delete(array('{+base_path}/sites/{site}/envs/{env}/domains/{domain}.json', $variables)); - return new Response\Task($request); + $variables = array( + 'site' => $site, + 'env' => $env, + 'domain' => $domain, + ); + $request = $this->delete(array('sites/{site}/envs/{env}/domains/{domain}.json', $variables)); + return new Response\Task($request); } /** @@ -869,7 +874,7 @@ public function purgeVarnishCache($site, $env, $domain) 'env' => $env, 'domain' => $domain, ); - $request = $this->delete(array('{+base_path}/sites/{site}/envs/{env}/domains/{domain}/cache.json', $variables)); + $request = $this->delete(array('sites/{site}/envs/{env}/domains/{domain}/cache.json', $variables)); return new Response\Task($request); } @@ -893,7 +898,7 @@ public function copyDatabase($site, $db, $sourceEnv, $targetEnv) 'source' => $sourceEnv, 'target' => $targetEnv, ); - $request = $this->post(array('{+base_path}/sites/{site}/dbs/{db}/db-copy/{source}/{target}.json', $variables)); + $request = $this->post(array('sites/{site}/dbs/{db}/db-copy/{source}/{target}.json', $variables)); return new Response\Task($request); } @@ -915,7 +920,7 @@ public function copyFiles($site, $sourceEnv, $targetEnv) 'source' => $sourceEnv, 'target' => $targetEnv, ); - $request = $this->post(array('{+base_path}/sites/{site}/files-copy/{source}/{target}.json', $variables)); + $request = $this->post(array('sites/{site}/files-copy/{source}/{target}.json', $variables)); return new Response\Task($request); } @@ -939,7 +944,7 @@ public function liveDev($site, $env, $action, $discard = false) 'action' => $action, 'discard' => (int) $discard, ); - $request = $this->post(array('{+base_path}/sites/{site}/envs/{env}/livedev/{action}.json?discard={discard}', $variables)); + $request = $this->post(array('sites/{site}/envs/{env}/livedev/{action}.json?discard={discard}', $variables)); return new Response\Task($request); } @@ -991,7 +996,7 @@ public function deployCode($site, $sourceEnv, $targetEnv) 'source' => $sourceEnv, 'target' => $targetEnv, ); - $request = $this->post(array('{+base_path}/sites/{site}/code-deploy/{source}/{target}.json', $variables)); + $request = $this->post(array('sites/{site}/code-deploy/{source}/{target}.json', $variables)); return new Response\Task($request); } @@ -1015,7 +1020,7 @@ public function pushCode($site, $env, $vcsPath) 'env' => $env, 'path' => $vcsPath, ); - $request = $this->post(array('{+base_path}/sites/{site}/envs/{env}/code-deploy.json?path={path}', $variables)); + $request = $this->post(array('sites/{site}/envs/{env}/code-deploy.json?path={path}', $variables)); return new Response\Task($request); }