1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
<?php
namespace OpenCloud\Volume\Resource;
use OpenCloud\Common\Exceptions;
use OpenCloud\Common\Lang;
use OpenCloud\Common\Resource\PersistentResource;
class Volume extends PersistentResource
{
public $id;
public $status;
public $display_name;
public $display_description;
public $size;
public $volume_type;
public $metadata = array();
public $availability_zone;
public $snapshot_id;
public $attachments = array();
public $created_at;
public $source_volid;
public $imageRef;
public $bootable;
protected static $json_name = 'volume';
protected static $url_resource = 'volumes';
protected $createKeys = array(
'snapshot_id',
'display_name',
'display_description',
'size',
'volume_type',
'availability_zone',
'metadata',
'source_volid',
'bootable',
'imageRef'
);
protected $associatedResources = array();
public function update($params = array())
{
throw new Exceptions\UpdateError(
Lang::translate('Block storage volumes cannot be updated')
);
}
public function rename(array $params = array())
{
$data = array();
$keys = array('display_description', 'display_name');
foreach ($params as $key => $value) {
if (in_array($key, $keys)) {
$data[$key] = $value;
} else {
throw new \InvalidArgumentException(sprintf(
'You cannot update the %s volume property. Valid keys are: %s',
$key, implode($keys, ',')
));
}
}
$json = json_encode(array(
'volume' => $data
));
return $this->getClient()
->put($this->getUrl(), self::getJsonHeader(), $json)
->send();
}
public function name()
{
return $this->display_name;
}
protected function createJson()
{
$element = parent::createJson();
if ($this->getProperty('volume_type') instanceof VolumeType) {
$element->volume->volume_type = $this->volume_type->name();
}
return $element;
}
}