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\LoadBalancer;
19:
20: use OpenCloud\Common\Log\Logger;
21: use OpenCloud\Common\Service\NovaService;
22: use OpenCloud\LoadBalancer\Collection\LoadBalancerIterator;
23:
24: /**
25: * Class that encapsulates the Rackspace Cloud Load Balancers service
26: *
27: * @package OpenCloud\LoadBalancer
28: */
29: class Service extends NovaService
30: {
31: const DEFAULT_NAME = 'cloudLoadBalancers';
32: const DEFAULT_TYPE = 'rax:load-balancer';
33:
34: /**
35: * Return a Load Balancer
36: *
37: * @param string $id
38: * @return \OpenCloud\LoadBalancer\Resource\LoadBalancer
39: */
40: public function loadBalancer($id = null)
41: {
42: return $this->resource('LoadBalancer', $id);
43: }
44:
45: /**
46: * Return a paginated collection of load balancers
47: *
48: * @param bool $detail If TRUE, all details are returned; otherwise, a
49: * minimal set (ID, name) is retrieved [DEPRECATED]
50: * @param array $filter Optional query params used for search
51: * @return \OpenCloud\Common\Collection\PaginatedIterator
52: */
53: public function loadBalancerList($detail = true, array $filter = array())
54: {
55: $options = $this->makeResourceIteratorOptions($this->resolveResourceClass('LoadBalancer'));
56:
57: if (isset($filter['limit'])) {
58: $options['limit.page'] = $filter['limit'];
59: unset($filter['limit']);
60: }
61:
62: $url = $this->getUrl();
63: $url->addPath(Resource\LoadBalancer::resourceName());
64: $url->setQuery($filter);
65:
66: $options = array_merge($options, array('baseUrl' => $url, 'key.marker' => 'id'));
67:
68: return LoadBalancerIterator::factory($this, $options);
69: }
70:
71: /**
72: * @deprecated
73: */
74: public function billableLoadBalancer($id = null)
75: {
76: $this->getLogger()->warning(Logger::deprecated(__METHOD__, 'loadBalancer'));
77:
78: return $this->resource('LoadBalancer', $id);
79: }
80:
81: /**
82: * Returns a paginated collection of load balancers that have been billed
83: * between a certain period.
84: *
85: * @link http://docs.rackspace.com/loadbalancers/api/v1.0/clb-devguide/content/List_Usage-d1e3014.html
86: * @param array $filter
87: * @return \OpenCloud\Common\Collection\PaginatedIterator
88: */
89: public function billableLoadBalancerList(array $filter = array())
90: {
91: $url = $this->getUrl();
92: $url->addPath(Resource\LoadBalancer::resourceName());
93: $url->addPath('billable');
94: $url->setQuery($filter);
95:
96: return $this->resourceList('LoadBalancer', $url);
97: }
98:
99: /**
100: * Returns an allowed domain
101: *
102: * @param mixed $data either an array of values or null
103: * @return \OpenCloud\LoadBalancer\Resource\AllowedDomain
104: */
105: public function allowedDomain($data = null)
106: {
107: return $this->resource('AllowedDomain', $data);
108: }
109:
110: /**
111: * Returns Collection of AllowedDomain object
112: *
113: * @return \OpenCloud\Common\Collection\PaginatedIterator
114: */
115: public function allowedDomainList()
116: {
117: return $this->resourceList('AllowedDomain');
118: }
119:
120: /**
121: * single protocol (should never be called directly)
122: *
123: * Convenience method to be used by the ProtocolList Collection.
124: *
125: * @return \OpenCloud\LoadBalancer\Resource\Protocol
126: */
127: public function protocol($data = null)
128: {
129: return $this->resource('Protocol', $data);
130: }
131:
132: /**
133: * Returns a list of Protocol objects
134: *
135: * @return \OpenCloud\Common\Collection\PaginatedIterator
136: */
137: public function protocolList()
138: {
139: return $this->resourceList('Protocol');
140: }
141:
142: /**
143: * single algorithm (should never be called directly)
144: *
145: * convenience method used by the Collection factory
146: *
147: * @return \OpenCloud\LoadBalancer\Resource\Algorithm
148: */
149: public function algorithm($data = null)
150: {
151: return $this->resource('Algorithm', $data);
152: }
153:
154: /**
155: * Return a list of Algorithm objects
156: *
157: * @return \OpenCloud\Common\Collection\PaginatedIterator
158: */
159: public function algorithmList()
160: {
161: return $this->resourceList('Algorithm');
162: }
163: }
164: