1 <?php
2 /**
3 * Copyright 2012-2014 Rackspace US, Inc.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 namespace OpenCloud\Compute\Resource;
19
20 use OpenCloud\Common\Exceptions;
21 use OpenCloud\Common\Lang;
22 use OpenCloud\Common\PersistentObject;
23
24 /**
25 * The VolumeAttachment class represents a volume that is attached to a server.
26 */
27 class VolumeAttachment extends PersistentObject
28 {
29 public $id;
30 public $device;
31 public $serverId;
32 public $volumeId;
33
34 public static $json_name = 'volumeAttachment';
35 public static $url_resource = 'os-volume_attachments';
36
37 private $createKeys = array('volumeId', 'device');
38
39 /**
40 * updates are not permitted
41 *
42 * @throws OpenCloud\UpdateError always
43 */
44 public function update($params = array())
45 {
46 throw new Exceptions\UpdateError(Lang::translate('Updates are not permitted'));
47 }
48
49 /**
50 * returns a readable name for the attachment
51 *
52 * Since there is no 'name' attribute, we'll hardcode something
53 *
54 * @api
55 * @return string
56 */
57 public function name()
58 {
59 return sprintf('Attachment [%s]', $this->volumeId ? : 'N/A');
60 }
61
62 /**
63 * returns the JSON object for Create()
64 *
65 * @return stdClass
66 */
67 protected function createJson()
68 {
69 $object = new \stdClass;
70
71 foreach ($this->createKeys as $key) {
72 if (isset($this->$key)) {
73 $object->$key = $this->$key;
74 }
75 }
76
77 return (object) array(
78 $this->jsonName() => $object
79 );
80 }
81 }
82