public function __construct(StoryTeller $st, $args) { // call our parent parent::__construct($st, $args); // $args[0] should contain the name of a valid provisioning helper if (!isset($args[0])) { throw new E5xx_ActionFailed(__METHOD__, "Param #0 must be the name of the provisioning engine you want to use"); } // remember the provisioner for later $this->adapter = ProvisioningLib::getProvisioner($st, $args[0]); }
public function doPhase($thingBeingPlayed = null) { // shorthand $st = $this->st; // our return value $phaseResult = $this->getNewPhaseResult(); // find out what we need to be doing $testEnvironmentConfig = $st->getTestEnvironmentConfig(); // are there any machines to create? if (empty($testEnvironmentConfig)) { // nothing to do $phaseResult->setContinuePlaying(); return $phaseResult; } // create the environments try { foreach ($testEnvironmentConfig->groups as $group) { // create the machine(s) in this environment, including: // // * building any virtual machines // * registering in the Hosts table // * registering in the Roles table $hostAdapter = HostLib::getHostAdapter($st, $group->type); $hostAdapter->createHost($group); // provision software onto the machines we've just // created if (isset($group->provisioning)) { $provAdapter = ProvisioningLib::getProvisioner($st, $group->provisioning->engine); $provDef = $provAdapter->buildDefinitionFor($group); $provAdapter->provisionHosts($provDef, $group->provisioning); } } $st->usingTargetsTable()->addCurrentTestEnvironment(); $phaseResult->setContinuePlaying(); } catch (E5xx_ActionFailed $e) { $phaseResult->setPlayingFailed($phaseResult::FAILED, $e->getMessage(), $e); } catch (E5xx_ExpectFailed $e) { $phaseResult->setPlayingFailed($phaseResult::FAILED, $e->getMessage(), $e); } catch (E5xx_NotImplemented $e) { $phaseResult->setPlayingFailed($phaseResult::INCOMPLETE, $e->getMessage(), $e); } catch (Exception $e) { $phaseResult->setPlayingFailed($phaseResult::ERROR, $e->getMessage() . PHP_EOL . PHP_EOL . $e->getTraceAsString(), $e); } // all done return $phaseResult; }