cloud-8.x-2.0-beta1/modules/cloud_service_providers/openstack/src/Controller/ApiController.php
modules/cloud_service_providers/openstack/src/Controller/ApiController.php
<?php
namespace Drupal\openstack\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Messenger\Messenger;
use Drupal\Core\Render\RendererInterface;
use Drupal\openstack\Service\OpenStackEc2Service;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;
/**
* Api controller for interacting with OpenStack.
*/
class ApiController extends ControllerBase implements ApiControllerInterface {
/**
* The OpenStack EC2 Service.
*
* @var \Drupal\openstack\Service\OpenStackEc2Service
*/
private $openStackEc2Service;
/**
* The Messenger service.
*
* @var \Drupal\Core\Messenger\Messenger
*/
protected $messenger;
/**
* Request stack.
*
* @var \Symfony\Component\HttpFoundation\RequestStack
*/
private $requestStack;
/**
* Renderer service.
*
* @var \Drupal\Core\Render\RendererInterface
*/
private $renderer;
/**
* ApiController constructor.
*
* @param \Drupal\openstack\Service\OpenStackEc2Service $openstack_ec2_service
* Object for interfacing with AWS API.
* @param \Drupal\Core\Messenger\Messenger $messenger
* Messanger Object.
* @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
* Request stack object.
* @param \Drupal\Core\Render\RendererInterface $renderer
* The renderer service.
*/
public function __construct(OpenStackEc2Service $openstack_ec2_service, Messenger $messenger, RequestStack $request_stack, RendererInterface $renderer) {
$this->openStackEc2Service = $openstack_ec2_service;
$this->messenger = $messenger;
$this->requestStack = $request_stack;
$this->renderer = $renderer;
}
/**
* Dependency Injection.
*/
public static function create(ContainerInterface $container) {
return new static(
$container->get('openstack.ec2'),
$container->get('messenger'),
$container->get('request_stack'),
$container->get('renderer')
);
}
/**
* {@inheritdoc}
*/
public function updateInstanceList($cloud_context) {
$this->openStackEc2Service->setCloudContext($cloud_context);
$updated = $this->openStackEc2Service->updateInstances();
if ($updated != FALSE) {
$this->messageUser($this->t('Updated Instances.'));
}
else {
$this->messageUser($this->t('Unable to update Instances.'), 'error');
}
return $this->redirect('entity.openstack_cloud_instance.collection', [
'cloud_context' => $cloud_context,
]);
}
/**
* {@inheritdoc}
*/
public function updateAll() {
$regions = $this->requestStack->getCurrentRequest()->query->get('regions');
if ($regions == NULL) {
$this->messageUser($this->t('No region specified'), 'error');
}
else {
$regions_array = explode(',', $regions);
foreach ($regions_array as $region) {
$entity = $this->entityTypeManager()->getStorage('cloud_config')
->loadByProperties(
[
'cloud_context' => $region,
]);
if ($entity) {
openstack_update_resources(array_shift($entity));
}
}
$this->messageUser($this->t('Creating cloud service provider was performed successfully.'));
drupal_flush_all_caches();
}
return $this->redirect('entity.cloud_config.collection');
}
/**
* Helper method to add messages for the end user.
*
* @param string $message
* The message.
* @param string $type
* The message type: error or message.
*/
private function messageUser($message, $type = 'message') {
switch ($type) {
case 'error':
$this->messenger->addError($message);
break;
case 'message':
$this->messenger->addMessage($message);
default:
break;
}
}
}
