From d794f0b1915a96908f5319177a20c4c1fa3fe337 Mon Sep 17 00:00:00 2001 From: Jamie Hannaford Date: Thu, 20 Nov 2014 15:07:49 +0100 Subject: [PATCH 1/3] Adding NetworkInterface --- .../Networking/Resource/NetworkInterface.php | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 lib/OpenCloud/Networking/Resource/NetworkInterface.php diff --git a/lib/OpenCloud/Networking/Resource/NetworkInterface.php b/lib/OpenCloud/Networking/Resource/NetworkInterface.php new file mode 100644 index 000000000..586ff63ba --- /dev/null +++ b/lib/OpenCloud/Networking/Resource/NetworkInterface.php @@ -0,0 +1,31 @@ + Date: Thu, 20 Nov 2014 15:08:11 +0100 Subject: [PATCH 2/3] Make resources implement interface --- lib/OpenCloud/Compute/Resource/Network.php | 10 ++++++++-- lib/OpenCloud/Networking/Resource/Network.php | 7 ++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/OpenCloud/Compute/Resource/Network.php b/lib/OpenCloud/Compute/Resource/Network.php index 82aba2580..8b041df97 100644 --- a/lib/OpenCloud/Compute/Resource/Network.php +++ b/lib/OpenCloud/Compute/Resource/Network.php @@ -19,14 +19,15 @@ use Guzzle\Http\Url; use OpenCloud\Common\Exceptions; -use OpenCloud\Common\PersistentObject; +use OpenCloud\Common\Resource\PersistentResource; use OpenCloud\Compute\Constants\Network as NetworkConst; use OpenCloud\Compute\Service; +use OpenCloud\Networking\Resource\NetworkInterface; /** * The Network class represents a single virtual network */ -class Network extends PersistentObject +class Network extends PersistentResource implements NetworkInterface { public $id; public $label; @@ -154,4 +155,9 @@ public function getResourcePath() return self::$openStackResourcePath; } } + + public function getId() + { + return $this->id; + } } diff --git a/lib/OpenCloud/Networking/Resource/Network.php b/lib/OpenCloud/Networking/Resource/Network.php index 8363b4d89..53716a8f0 100644 --- a/lib/OpenCloud/Networking/Resource/Network.php +++ b/lib/OpenCloud/Networking/Resource/Network.php @@ -30,7 +30,7 @@ * * @package OpenCloud\Networking\Resource */ -class Network extends PersistentResource +class Network extends PersistentResource implements NetworkInterface { protected static $url_resource = 'networks'; protected static $json_name = 'network'; @@ -71,4 +71,9 @@ public function createJson() { return parent::createJson(); } + + public function getId() + { + return $this->id; + } } From eef9a7aee314f11916acc168a1eae4672bc2b36f Mon Sep 17 00:00:00 2001 From: Jamie Hannaford Date: Thu, 20 Nov 2014 15:08:21 +0100 Subject: [PATCH 3/3] Change createJson and add tests --- lib/OpenCloud/Compute/Resource/Server.php | 11 ++++++----- .../OpenCloud/Tests/Compute/Resource/NetworkTest.php | 1 + tests/OpenCloud/Tests/Compute/Resource/ServerTest.php | 7 ++++++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/OpenCloud/Compute/Resource/Server.php b/lib/OpenCloud/Compute/Resource/Server.php index 20a7692e5..409aa3921 100644 --- a/lib/OpenCloud/Compute/Resource/Server.php +++ b/lib/OpenCloud/Compute/Resource/Server.php @@ -20,6 +20,7 @@ use OpenCloud\Common\Resource\NovaResource; use OpenCloud\DNS\Resource\HasPtrRecordsInterface; use OpenCloud\Image\Resource\ImageInterface; +use OpenCloud\Networking\Resource\NetworkInterface; use OpenCloud\Volume\Resource\Volume; use OpenCloud\Common\Exceptions; use OpenCloud\Common\Http\Message\Formatter; @@ -681,22 +682,22 @@ protected function createJson() $server->networks = array(); foreach ($this->networks as $network) { - if (!$network instanceof Network) { + if (!$network instanceof NetworkInterface) { throw new Exceptions\InvalidParameterError(sprintf( 'When creating a server, the "networks" key must be an ' . - 'array of OpenCloud\Compute\Network objects with valid ' . - 'IDs; variable passed in was a [%s]', + 'array of objects which implement OpenCloud\Networking\Resource\NetworkInterface;' . + 'variable passed in was a [%s]', gettype($network) )); } - if (empty($network->id)) { + if (!($networkId = $network->getId())) { $this->getLogger()->warning('When creating a server, the ' . 'network objects passed in must have an ID' ); continue; } // Stock networks array - $server->networks[] = (object) array('uuid' => $network->id); + $server->networks[] = (object) array('uuid' => $networkId); } } diff --git a/tests/OpenCloud/Tests/Compute/Resource/NetworkTest.php b/tests/OpenCloud/Tests/Compute/Resource/NetworkTest.php index 06ef7e0dc..35067e360 100644 --- a/tests/OpenCloud/Tests/Compute/Resource/NetworkTest.php +++ b/tests/OpenCloud/Tests/Compute/Resource/NetworkTest.php @@ -46,6 +46,7 @@ public function test__construct() { $this->assertEquals(NetworkConst::RAX_PUBLIC, $this->network->id); $this->assertInstanceOf('OpenCloud\Compute\Resource\Network', $this->network); + $this->assertInstanceOf('OpenCloud\Networking\Resource\NetworkInterface', $this->network); } public function test_Create() diff --git a/tests/OpenCloud/Tests/Compute/Resource/ServerTest.php b/tests/OpenCloud/Tests/Compute/Resource/ServerTest.php index eb741f96e..3d172b493 100644 --- a/tests/OpenCloud/Tests/Compute/Resource/ServerTest.php +++ b/tests/OpenCloud/Tests/Compute/Resource/ServerTest.php @@ -320,13 +320,18 @@ public function test_Image_Schedule() public function test_Create_With_Networks() { + $neutronService = $this->client->networkingService(null, 'IAD'); + $neutronNetwork = $neutronService->network(); + $neutronNetwork->setId('12345'); + $this->service->server()->create(array( 'name' => 'personality test 1', 'image' => $this->service->imageList()->first(), 'flavor' => $this->service->flavorList()->first(), 'networks' => array( $this->service->network(Network::RAX_PUBLIC), - $this->service->network() + $this->service->network(), + $neutronNetwork, ) )); }