model(Server::class)->create($options); } /** * List servers. * * @param bool $detailed Determines whether detailed information will be returned. If FALSE is specified, only * the ID, name and links attributes are returned, saving bandwidth. * @param array $options {@see \OpenStack\Compute\v2\Api::getServers} * @param callable $mapFn a callable function that will be invoked on every iteration of the list */ public function listServers(bool $detailed = false, array $options = [], callable $mapFn = null): \Generator { $def = (true === $detailed) ? $this->api->getServersDetail() : $this->api->getServers(); return $this->model(Server::class)->enumerate($def, $options, $mapFn); } /** * Retrieve a server object without calling the remote API. Any values provided in the array will populate the * empty object, allowing you greater control without the expense of network transactions. To call the remote API * and have the response populate the object, call {@see Server::retrieve}. For example:. * * $server = $service->getServer(['id' => '{serverId}']); * * @param array $options An array of attributes that will be set on the {@see Server} object. The array keys need to * correspond to the class public properties. */ public function getServer(array $options = []): Server { $server = $this->model(Server::class); $server->populateFromArray($options); return $server; } /** * List flavors. * * @param array $options {@see \OpenStack\Compute\v2\Api::getFlavors} * @param callable $mapFn a callable function that will be invoked on every iteration of the list * @param bool $detailed set to true to fetch flavors' details */ public function listFlavors(array $options = [], callable $mapFn = null, bool $detailed = false): \Generator { $def = true === $detailed ? $this->api->getFlavorsDetail() : $this->api->getFlavors(); return $this->model(Flavor::class)->enumerate($def, $options, $mapFn); } /** * Retrieve a flavor object without calling the remote API. Any values provided in the array will populate the * empty object, allowing you greater control without the expense of network transactions. To call the remote API * and have the response populate the object, call {@see Flavor::retrieve}. * * @param array $options An array of attributes that will be set on the {@see Flavor} object. The array keys need to * correspond to the class public properties. */ public function getFlavor(array $options = []): Flavor { $flavor = $this->model(Flavor::class); $flavor->populateFromArray($options); return $flavor; } /** * Create a new flavor resource. * * @param array $options {@see \OpenStack\Compute\v2\Api::postFlavors} */ public function createFlavor(array $options = []): Flavor { return $this->model(Flavor::class)->create($options); } /** * List images. * * @param array $options {@see \OpenStack\Compute\v2\Api::getImages} * @param callable $mapFn a callable function that will be invoked on every iteration of the list */ public function listImages(array $options = [], callable $mapFn = null): \Generator { return $this->model(Image::class)->enumerate($this->api->getImages(), $options, $mapFn); } /** * Retrieve an image object without calling the remote API. Any values provided in the array will populate the * empty object, allowing you greater control without the expense of network transactions. To call the remote API * and have the response populate the object, call {@see Image::retrieve}. * * @param array $options An array of attributes that will be set on the {@see Image} object. The array keys need to * correspond to the class public properties. */ public function getImage(array $options = []): Image { $image = $this->model(Image::class); $image->populateFromArray($options); return $image; } /** * List key pairs. * * @param array $options {@see \OpenStack\Compute\v2\Api::getKeyPairs} * @param callable $mapFn a callable function that will be invoked on every iteration of the list */ public function listKeypairs(array $options = [], callable $mapFn = null): \Generator { return $this->model(Keypair::class)->enumerate($this->api->getKeypairs(), $options, $mapFn); } /** * Create or import keypair. */ public function createKeypair(array $options): Keypair { return $this->model(Keypair::class)->create($options); } /** * Get keypair. */ public function getKeypair(array $options = []): Keypair { $keypair = $this->model(Keypair::class); $keypair->populateFromArray($options); return $keypair; } /** * Shows rate and absolute limits for the tenant. */ public function getLimits(): Limit { $limits = $this->model(Limit::class); $limits->populateFromResponse($this->execute($this->api->getLimits(), [])); return $limits; } /** * Shows summary statistics for all hypervisors over all compute nodes. */ public function getHypervisorStatistics(): HypervisorStatistic { $statistics = $this->model(HypervisorStatistic::class); $statistics->populateFromResponse($this->execute($this->api->getHypervisorStatistics(), [])); return $statistics; } /** * List hypervisors. * * @param bool $detailed Determines whether detailed information will be returned. If FALSE is specified, only * the ID, name and links attributes are returned, saving bandwidth. * @param array $options {@see \OpenStack\Compute\v2\Api::getHypervisors} * @param callable $mapFn a callable function that will be invoked on every iteration of the list */ public function listHypervisors(bool $detailed = false, array $options = [], callable $mapFn = null): \Generator { $def = (true === $detailed) ? $this->api->getHypervisorsDetail() : $this->api->getHypervisors(); return $this->model(Hypervisor::class)->enumerate($def, $options, $mapFn); } /** * Shows details for a given hypervisor. */ public function getHypervisor(array $options = []): Hypervisor { $hypervisor = $this->model(Hypervisor::class); return $hypervisor->populateFromArray($options); } /** * List hosts. * * @param array $options {@see \OpenStack\Compute\v2\Api::getHosts} * @param callable $mapFn a callable function that will be invoked on every iteration of the list */ public function listHosts(array $options = [], callable $mapFn = null): \Generator { return $this->model(Host::class)->enumerate($this->api->getHosts(), $options, $mapFn); } /** * Retrieve a host object without calling the remote API. Any values provided in the array will populate the * empty object, allowing you greater control without the expense of network transactions. To call the remote API * and have the response populate the object, call {@see Host::retrieve}. For example:. * * $server = $service->getHost(['name' => '{name}']); * * @param array $options An array of attributes that will be set on the {@see Host} object. The array keys need to * correspond to the class public properties. */ public function getHost(array $options = []): Host { $host = $this->model(Host::class); $host->populateFromArray($options); return $host; } /** * List AZs. * * @param array $options {@see \OpenStack\Compute\v2\Api::getAvailabilityZones} * @param callable $mapFn a callable function that will be invoked on every iteration of the list */ public function listAvailabilityZones(array $options = [], callable $mapFn = null): \Generator { return $this->model(AvailabilityZone::class)->enumerate($this->api->getAvailabilityZones(), $options, $mapFn); } /** * Shows A Quota for a tenant. */ public function getQuotaSet(string $tenantId, bool $detailed = false): QuotaSet { $quotaSet = $this->model(QuotaSet::class); $quotaSet->populateFromResponse($this->execute($detailed ? $this->api->getQuotaSetDetail() : $this->api->getQuotaSet(), ['tenantId' => $tenantId])); return $quotaSet; } }