     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\Orchestration;
    19:
    20: use OpenCloud\Common\PersistentObject;
    21:
    22: /**
    23:  * @codeCoverageIgnore
    24:  */
    25: class Resource extends PersistentObject
    26: {
    27:     protected $links;
    28:     protected $logical_resource_id;
    29:     protected $physical_resource_id;
    30:     protected $resource_status;
    31:     protected $resource_status_reason;
    32:     protected $resource_type;
    33:     protected $updated_time;
    34:
    35:     protected static $url_resource = 'resources';
    36:     protected static $json_name = 'resource';
    37:
    38:     public function create($info = null)
    39:     {
    40:         $this->noCreate();
    41:     }
    42:
    43:     public function id()
    44:     {
    45:         return $this->physical_resource_id;
    46:     }
    47:
    48:     protected function primaryKeyField()
    49:     {
    50:         return 'physical_resource_id';
    51:     }
    52:
    53:     public function name()
    54:     {
    55:         return $this->logical_resource_id;
    56:     }
    57:
    58:     public function type()
    59:     {
    60:         return $this->resource_type;
    61:     }
    62:
    63:     public function status()
    64:     {
    65:         return $this->resource_status;
    66:     }
    67:
    68:     public function get()
    69:     {
    70:         $service = $this->getParent()->getService();
    71:
    72:         switch ($this->resource_type) {
    73:             case 'AWS::EC2::Instance':
    74:                 $objSvc = 'Compute';
    75:                 $method = 'Server';
    76:                 $name = 'nova';
    77:                 break;
    78:             default:
    79:                 throw new Exception(sprintf(
    80:                     'Unknown resource type: %s',
    81:                     $this->resource_type
    82:                 ));
    83:         }
    84:
    85:         return $service->connection()->$objSvc($name, $service->region())->$method($this->id());
    86:     }
    87: }
    88: