Overview
  • Namespace
  • Class

Namespaces

  • OpenCloud
    • Autoscale
      • Resource
    • CloudMonitoring
      • Collection
      • Exception
      • Resource
    • Common
      • Collection
      • Constants
      • Exceptions
      • Http
        • Message
      • Log
      • Resource
      • Service
    • Compute
      • Constants
      • Exception
      • Resource
    • Database
      • Resource
    • DNS
      • Collection
      • Resource
    • Identity
      • Constants
      • Resource
    • Image
      • Enum
      • Resource
        • JsonPatch
        • Schema
    • LoadBalancer
      • Collection
      • Enum
      • Resource
    • Networking
      • Resource
    • ObjectStore
      • Constants
      • Exception
      • Resource
      • Upload
    • Orchestration
      • Resource
    • Queues
      • Collection
      • Exception
      • Resource
    • Volume
      • Resource

Classes

  • OpenCloud\Volume\Resource\Snapshot
  • OpenCloud\Volume\Resource\Volume
  • OpenCloud\Volume\Resource\VolumeType
  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 Guzzle\Http\Url;
 21 use OpenCloud\Common\Exceptions;
 22 use OpenCloud\Common\Resource\PersistentResource;
 23 use OpenCloud\Compute\Constants\Network as NetworkConst;
 24 use OpenCloud\Compute\Service;
 25 use OpenCloud\Networking\Resource\NetworkInterface;
 26 
 27 /**
 28  * The Network class represents a single virtual network
 29  */
 30 class Network extends PersistentResource implements NetworkInterface
 31 {
 32     public $id;
 33     public $label;
 34     public $cidr;
 35 
 36     protected static $json_name = 'network';
 37     protected static $url_resource = 'os-networksv2';
 38     protected static $openStackResourcePath = 'os-networks';
 39 
 40     /**
 41      * Creates a new isolated Network object
 42      *
 43      * NOTE: contains hacks to recognize the Rackspace public and private
 44      * networks. These are not really networks, but they show up in lists.
 45      *
 46      * @param \OpenCloud\Compute\Service $service The compute service associated with
 47      *                                            the network
 48      * @param string|null                $id      The ID of the network (this handles the pseudo-networks
 49      *                                            Network::RAX_PUBLIC and Network::RAX_PRIVATE
 50      * @return Network
 51      */
 52     public function __construct(Service $service, $id = null)
 53     {
 54         $this->id = $id;
 55 
 56         switch ($id) {
 57             case NetworkConst::RAX_PUBLIC:
 58                 $this->label = 'public';
 59                 $this->cidr = 'NA';
 60                 break;
 61             case NetworkConst::RAX_PRIVATE:
 62                 $this->label = 'private';
 63                 $this->cidr = 'NA';
 64                 break;
 65             default:
 66                 return parent::__construct($service, $id);
 67         }
 68 
 69         return;
 70     }
 71 
 72     /**
 73      * Always throws an error; updates are not permitted
 74      *
 75      * @throws Exceptions\NetworkUpdateError always
 76      */
 77     public function update($params = array())
 78     {
 79         throw new Exceptions\NetworkUpdateError('Isolated networks cannot be updated');
 80     }
 81 
 82     /**
 83      * Deletes an isolated network
 84      *
 85      * @api
 86      * @return \OpenCloud\HttpResponse
 87      * @throws NetworkDeleteError if HTTP status is not Success
 88      */
 89     public function delete()
 90     {
 91         switch ($this->id) {
 92             case NetworkConst::RAX_PUBLIC:
 93             case NetworkConst::RAX_PRIVATE:
 94                 throw new Exceptions\DeleteError('Network may not be deleted');
 95             default:
 96                 return parent::delete();
 97         }
 98     }
 99 
100     /**
101      * returns the visible name (label) of the network
102      *
103      * @api
104      * @return string
105      */
106     public function name()
107     {
108         return $this->label;
109     }
110 
111     /**
112      * Creates the JSON object for the Create() method
113      */
114     protected function createJson()
115     {
116         return (object) array(
117             'network' => (object) array(
118                     'cidr'  => $this->cidr,
119                     'label' => $this->label
120                 )
121         );
122     }
123 
124     /**
125      * Rackspace Cloud Networks operates on a different URI than OpenStack Neutron.
126      * {@inheritDoc}
127      */
128     public function getUrl($path = null, array $query = array())
129     {
130         if (!$url = $this->findLink('self')) {
131             $url = $this->getParent()->getUrl($this->getResourcePath());
132 
133             if (null !== ($primaryKey = $this->getProperty($this->primaryKeyField()))) {
134                 $url->addPath($primaryKey);
135             }
136         }
137 
138         if (!$url instanceof Url) {
139             $url = Url::factory($url);
140         }
141 
142         return $url->addPath($path)->setQuery($query);
143     }
144 
145     /**
146      * Ascertain the correct URI path.
147      *
148      * @return string
149      */
150     public function getResourcePath()
151     {
152         if (strpos((string) $this->getService()->getUrl(), 'rackspacecloud.com') !== false) {
153             return self::$url_resource;
154         } else {
155             return self::$openStackResourcePath;
156         }
157     }
158 
159     public function getId()
160     {
161         return $this->id;
162     }
163 }
164 
API documentation generated by ApiGen