Skip to content

Commit 22031ae

Browse files
author
Jamie Hannaford
committed
Merge pull request rackspace#638 from jamiehannaford/server-create-ports
Add ability to use ports when creating server
2 parents 9d423ba + 3c3557b commit 22031ae

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

lib/OpenCloud/Compute/Resource/Server.php

+8-11
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
use OpenCloud\DNS\Resource\HasPtrRecordsInterface;
2222
use OpenCloud\Image\Resource\ImageInterface;
2323
use OpenCloud\Networking\Resource\NetworkInterface;
24+
use OpenCloud\Networking\Resource\Port;
2425
use OpenCloud\Volume\Resource\Volume;
2526
use OpenCloud\Common\Exceptions;
2627
use OpenCloud\Common\Http\Message\Formatter;
@@ -689,22 +690,18 @@ protected function createJson()
689690
$server->networks = array();
690691

691692
foreach ($this->networks as $network) {
692-
if (!$network instanceof NetworkInterface) {
693+
if ($network instanceof NetworkInterface) {
694+
$server->networks[] = (object) array('uuid' => $network->getId());
695+
} elseif ($network instanceof Port) {
696+
$server->networks[] = (object) array('port' => $network->getId());
697+
} else {
693698
throw new Exceptions\InvalidParameterError(sprintf(
694699
'When creating a server, the "networks" key must be an ' .
695-
'array of objects which implement OpenCloud\Networking\Resource\NetworkInterface;' .
696-
'variable passed in was a [%s]',
700+
'array of objects which implement either OpenCloud\Networking\Resource\NetworkInterface ' .
701+
'or OpenCloud\Networking\Resource\Port. The variable you passed in was a [%s]',
697702
gettype($network)
698703
));
699704
}
700-
if (!($networkId = $network->getId())) {
701-
$this->getLogger()->warning('When creating a server, the '
702-
. 'network objects passed in must have an ID'
703-
);
704-
continue;
705-
}
706-
// Stock networks array
707-
$server->networks[] = (object) array('uuid' => $networkId);
708705
}
709706
}
710707

tests/OpenCloud/Tests/Compute/Resource/ServerTest.php

+14
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,20 @@ public function test_Create_With_Networks()
336336
));
337337
}
338338

339+
public function test_Create_With_Ports()
340+
{
341+
$neutronService = $this->client->networkingService(null, 'IAD');
342+
$port = $neutronService->port();
343+
$port->setId('foo');
344+
345+
$this->service->server()->create(array(
346+
'name' => 'port test',
347+
'image' => $this->service->imageList()->first(),
348+
'flavor' => $this->service->flavorList()->first(),
349+
'networks' => [$port]
350+
));
351+
}
352+
339353
/**
340354
* @expectedException OpenCloud\Common\Exceptions\InvalidParameterError
341355
*/

0 commit comments

Comments
 (0)