/** * Maps a given server to a task. * * @param Stage $stage Stage instance * @param AbstractTask $task Task instance * @param Server $server Server instance * * @return null */ private function addServer(Stage $stage, AbstractTask $task, Server $server) { $stageName = $stage->getName(); $taskName = $task->getName(); if (!array_key_exists('servers', $this->mapping[$stageName]['tasks'][$taskName])) { $this->mapping[$stageName]['tasks'][$taskName]['servers'] = array(); } foreach ($this->mapping[$stageName]['tasks'][$taskName]['servers'] as $serverAdded) { if ($serverAdded === $server) { throw new \LogicException(sprintf("Can't add server '%s' to task '%s' twice.", $server->getName(), $task->getName())); } } $this->mapping[$stageName]['tasks'][$taskName]['servers'][] = $server; }
/** * Creates a ssh session for a given server. * * @param Server $server * * @return Session */ public function createFromServer(Server $server) { $config = new Configuration($server->getHost(), $server->getPort()); switch (true) { case $server->getUsername() && $server->getPassword(): $auth = new Password($server->getUsername(), $server->getPassword()); break; case $server->getPrivateKey(): $auth = new PublicKeyFile($server->getUsername(), $server->getPublicKey(), $server->getPrivateKey(), $server->getKeyPhrase()); break; default: throw new \DomainException(sprintf('No authentication credentials given for server: %s', $server->getName())); break; } $session = new Session($config, $auth); return $session; }