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\Volume;
19:
20: use OpenCloud\Common\Service\NovaService;
21: use OpenCloud\Volume\Resource\Snapshot;
22:
23: class Service extends NovaService
24: {
25: const DEFAULT_TYPE = 'volume';
26: const DEFAULT_NAME = 'cloudBlockStorage';
27:
28: /**
29: * Returns a Volume object
30: *
31: * @param string $id the Volume ID
32: * @return Resource\Volume
33: */
34: public function volume($id = null)
35: {
36: return $this->resource('Volume', $id);
37: }
38:
39: /**
40: * Returns a Collection of Volume objects
41: *
42: * @param boolean $details if TRUE, return all details
43: * @param array $filter array of filter key/value pairs
44: * @return \OpenCloud\Common\Collection
45: */
46: public function volumeList($details = true, $filter = array())
47: {
48: $url = clone $this->getUrl(Resource\Volume::ResourceName());
49:
50: if ($details === true) {
51: $url->addPath('detail');
52: }
53:
54: $url->setQuery($filter);
55:
56: return $this->resourceList('Volume', $url);
57: }
58:
59: /**
60: * Returns a VolumeType object
61: *
62: * @param string $id the VolumeType ID
63: * @return Resource\Volume
64: */
65: public function volumeType($id = null)
66: {
67: return $this->resource('VolumeType', $id);
68: }
69:
70: /**
71: * Returns a Collection of VolumeType objects
72: *
73: * @param array $filter array of filter key/value pairs
74: * @return \OpenCloud\Common\Collection
75: */
76: public function volumeTypeList($filter = array())
77: {
78: return $this->resourceList('VolumeType');
79: }
80:
81: /**
82: * Returns a Snapshot object associated with this volume
83: *
84: * @param null $id
85: * @return Resource\Snapshot
86: */
87: public function snapshot($id = null)
88: {
89: return $this->resource('Snapshot', $id);
90: }
91:
92: /**
93: * Returns a Collection of Snapshot objects
94: *
95: * @param array $filter array of filter key/value pairs
96: * @return \OpenCloud\Common\Collection
97: */
98: public function snapshotList($filter = array())
99: {
100: $url = clone $this->getUrl();
101: $url->addPath(Snapshot::resourceName())->setQuery($filter);
102:
103: return $this->resourceList('Snapshot', $url);
104: }
105: }
106: