/** * Handle a provisioning request * * @param ProvisionJob $command * * @return mixed */ public function handle(ProvisionJob $command) { $_options = $command->getOptions(); $_guestLocation = array_get($_options, 'guest-location', config('provisioning.default-guest-location')); if (is_string($_guestLocation) && !is_numeric($_guestLocation)) { $_options['guest-location'] = GuestLocations::resolve($_guestLocation, true); \Log::debug('[Provision] guest location "' . $_options['guest-location'] . '" resolved from "' . $_guestLocation . '".'); $_guestLocation = $_options['guest-location']; } \Log::info('[Provision] Request [guest=' . $_guestLocation . ']: ' . Json::encode($_options)); try { // Create the instance record $_instance = InstanceManager::make($command->getInstanceId(), $_options); if (!$_instance) { throw new ProvisioningException('InstanceManager::make() failed'); } } catch (\Exception $_ex) { \Log::error('[Provision] failure, exception creating instance: ' . $_ex->getMessage()); return false; } try { $_guest = array_get($_options, 'guest-location', config('provisioning.default-guest-location')); $_provisioner = Provision::getProvisioner($_guest); if (empty($_provisioner)) { throw new \RuntimeException('The provisioner of the request is not valid.'); } if (false === ($_response = $_provisioner->provision(new ProvisionServiceRequest($_instance)))) { throw new ProvisioningException('provisioning error'); } \Log::info('[Provision] completed in ' . number_format($_response->getElapsedTime(), 4) . 's'); return $_response; } catch (\Exception $_ex) { \Log::error('[Provision] failure: ' . $_ex->getMessage()); // Delete instance record... if (!$_instance->delete()) { throw new \LogicException('Unable to remove created instance "' . $_instance->instance_id_text . '".'); } } return false; }
/** * @param int $guestLocation * * @return InstanceStorageService */ public function setGuestLocation($guestLocation) { if (!is_numeric($guestLocation)) { $guestLocation = GuestLocations::resolve($guestLocation, true); } $this->guestLocation = $guestLocation; return $this; }
/** * Get the console command arguments. * * @return array */ protected function getArguments() { return array_merge(parent::getArguments(), [['owner-id', InputArgument::REQUIRED, 'The id of the owner of the new instance'], ['instance-id', InputArgument::REQUIRED, 'The name of the new instance'], ['guest-location', InputArgument::OPTIONAL, 'The location of the new instance. Values: ' . GuestLocations::prettyList('"', true), config('provisioning.default-guest-location')]]); }
/** * @param string $tag * @param string $subkey * @param string $connector The config key connector from $tag to $subkey * * @return mixed */ protected function _buildTag(&$tag, $subkey = null, $connector = '.provides.') { $tag = trim(GuestLocations::resolve($tag ?: $this->getDefaultProvisioner())); if (null === $subkey) { $subkey = PortableTypes::INSTANCE; } return $tag . $connector . $subkey; }
/** * @return string the base resource URI to use */ public function getResourceUri() { return config('provisioners.hosts.' . GuestLocations::resolve($this->guest_location_nbr) . '.resource-uri'); }