Skip to content
Snippets Groups Projects
Commit 29e0af81 authored by xiaohua guan's avatar xiaohua guan Committed by Yas Naoi
Browse files

Issue #3168711 by Xiaohua Guan, yas: Configure the size of hard disk of VM

parent 93f4eda6
No related branches found
No related tags found
No related merge requests found
Showing
with 138 additions and 9 deletions
......@@ -464,7 +464,7 @@ display:
relationship: none
group_type: group
admin_label: ''
label: 'Memory Size(MiB)'
label: 'Memory Size (MiB)'
exclude: false
alter:
alter_text: false
......@@ -1056,7 +1056,7 @@ display:
relationship: none
group_type: group
admin_label: ''
label: 'Memory Size(MiB)'
label: 'Memory Size (MiB)'
exclude: false
alter:
alter_text: false
......
......@@ -70,11 +70,13 @@ class VmwareVmAccessControlHandler extends EntityAccessControlHandler {
);
case 'delete':
return $this->allowedIfCanAccessCloudConfig(
$entity,
$account,
'delete vmware vm'
);
if ($entity->getPowerState() !== 'POWERED_ON') {
return $this->allowedIfCanAccessCloudConfig(
$entity,
$account,
'delete vmware vm'
);
}
}
// Unknown operation, no opinion.
......
......@@ -4,6 +4,7 @@ namespace Drupal\vmware\Entity;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
/**
* Defines the VMware VM entity.
......@@ -129,6 +130,20 @@ class VmwareVm extends VmwareEntityBase implements VmwareVmInterface {
return $this->set('guest_os', $guest_os);
}
/**
* {@inheritdoc}
*/
public function getDiskSize() {
return $this->get('disk_size');
}
/**
* {@inheritdoc}
*/
public function setDiskSize($disk_size) {
return $this->set('disk_size', $disk_size);
}
/**
* {@inheritdoc}
*/
......@@ -164,7 +179,7 @@ class VmwareVm extends VmwareEntityBase implements VmwareVmInterface {
]);
$fields['memory_size'] = BaseFieldDefinition::create('integer')
->setLabel(t('Memory Size(MiB)'))
->setLabel(t('Memory Size (MiB)'))
->setDescription(t('Memory size in mebibytes.'))
->setDisplayOptions('view', [
'label' => 'inline',
......@@ -181,6 +196,20 @@ class VmwareVm extends VmwareEntityBase implements VmwareVmInterface {
'weight' => -5,
]);
$fields['disk_size'] = BaseFieldDefinition::create('integer')
->setLabel(t('Disk Size (GiB)'))
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setDescription(t('Memory size in gibibytes.'))
->setDisplayOptions('view', [
'label' => 'inline',
'type' => 'string',
'weight' => -5,
])
->setDisplayOptions('form', [
'type' => 'string',
'weight' => 5,
]);
return $fields;
}
......
......@@ -52,4 +52,24 @@ interface VmwareVmInterface extends ContentEntityInterface, EntityOwnerInterface
*/
public function setMemorySize($memory_size);
/**
* {@inheritdoc}
*/
public function getGuestOs();
/**
* {@inheritdoc}
*/
public function setGuestOs($guest_os);
/**
* {@inheritdoc}
*/
public function getDiskSize();
/**
* {@inheritdoc}
*/
public function setDiskSize($disk_size);
}
......@@ -23,6 +23,7 @@ class VmwareVmViewBuilder extends CloudViewBuilder {
'power_state',
'cpu_count',
'memory_size',
'disk_size',
'created',
],
],
......
......@@ -101,11 +101,14 @@ class VmwareVmCreateForm extends VmwareContentForm {
$form['vm']['memory_size'] = [
'#type' => 'number',
'#title' => $this->t('Memory Size(MiB)'),
'#title' => $this->t('Memory Size (MiB)'),
'#default_value' => 4096,
'#required' => TRUE,
];
$form['vm']['disk_size'] = $form['disk_size'];
unset($form['disk_size']);
$this->addOthersFieldset($form, $weight++, $cloud_context);
$form['actions'] = $this->actions($form, $form_state, $cloud_context);
......@@ -124,6 +127,16 @@ class VmwareVmCreateForm extends VmwareContentForm {
$entity = $this->entity;
$entity->setCloudContext($cloud_context);
$disk_size = $entity->getDiskSize();
$disks = [];
foreach ($disk_size as $item) {
$disks[] = [
'new_vmdk' => [
'capacity' => $item->value * 1024 * 1024 * 1024,
],
];
}
$this->vmwareService->setCloudContext($cloud_context);
$params = [
'name' => $entity->getName(),
......@@ -140,6 +153,9 @@ class VmwareVmCreateForm extends VmwareContentForm {
'size_MiB' => $entity->getMemorySize(),
],
];
if (!empty($disks)) {
$params['disks'] = $disks;
}
try {
$this->vmwareService->login();
......
......@@ -45,6 +45,8 @@ class VmwareBatchOperations {
public static function updateVm($cloud_context, array $vm) {
$vmware_service = \Drupal::service('vmware');
$vmware_service->setCloudContext($cloud_context);
$vmware_service->login();
$vm_detail = $vmware_service->showVm($vm['vm']);
$timestamp = time();
$name = $vm['name'];
......@@ -62,10 +64,16 @@ class VmwareBatchOperations {
]);
}
$disk_size = [];
foreach ($vm_detail['value']['disks'] as $disk) {
$disk_size[] = $disk['value']['capacity'] / (1024 * 1024 * 1024);
}
$entity->setVmId($vm['vm']);
$entity->setPowerState($vm['power_state']);
$entity->setCpuCount($vm['cpu_count']);
$entity->setMemorySize($vm['memory_size_MiB']);
$entity->setDiskSize($disk_size);
$entity->setRefreshed($timestamp);
$entity->save();
......
......@@ -167,6 +167,13 @@ class VmwareService extends CloudServiceBase implements VmwareServiceInterface {
return $this->callApi('get', $url);
}
/**
* {@inheritdoc}
*/
public function showVm($vm_id) {
return $this->callApi('get', "rest/vcenter/vm/$vm_id");
}
/**
* {@inheritdoc}
*/
......
......@@ -45,6 +45,13 @@ class VmwareServiceMock extends VmwareService {
return $this->getMockData(__FUNCTION__);
}
/**
* {@inheritdoc}
*/
public function showVm($vm_id) {
return $this->getMockData(__FUNCTION__);
}
/**
* {@inheritdoc}
*/
......
......@@ -32,3 +32,7 @@ describeDatastores:
datastore: {{datastore2}}
free_space: {{free_space2}}
capacity: {{capacity2}}
showVm:
value:
disks: []
......@@ -6,6 +6,7 @@
*/
use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
/**
* Implements hook_install().
......@@ -208,3 +209,37 @@ function vmware_update_8213() {
];
\Drupal::service('cloud')->updateYmlDefinitions($files, 'vmware');
}
/**
* Add a field disk_size to entity vmware_vm and update view vmware_vm.
*/
function vmware_update_8214() {
$definition_update_manager = \Drupal::entityDefinitionUpdateManager();
$field = BaseFieldDefinition::create('integer')
->setLabel(t('Disk Size (GiB)'))
->setCardinality(FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED)
->setDescription(t('Memory size in gibibytes.'))
->setDisplayOptions('view', [
'label' => 'inline',
'type' => 'string',
'weight' => -5,
])
->setDisplayOptions('form', [
'type' => 'string',
'weight' => 5,
]);
$definition_update_manager->installFieldStorageDefinition(
'disk_size',
'vmware_vm',
'vmware',
$field
);
// Update view vmware_vm.
$files = [
'views.view.vmware_vm.yml',
];
\Drupal::service('cloud')->updateYmlDefinitions($files, 'vmware');
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment