From aaa36bad9b05b2d8af26c2faf636991cf2761855 Mon Sep 17 00:00:00 2001 From: Chris Smit Date: Wed, 30 Aug 2017 09:15:13 -0400 Subject: [PATCH 1/3] add suspend/resume methods --- src/Compute/v2/Api.php | 24 ++++++++++++++++++++++++ src/Compute/v2/Models/Server.php | 22 ++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/src/Compute/v2/Api.php b/src/Compute/v2/Api.php index 6ef4d24f..7e9279a2 100644 --- a/src/Compute/v2/Api.php +++ b/src/Compute/v2/Api.php @@ -316,6 +316,30 @@ public function stopServer() : array ]; } + public function suspendServer() : array + { + return [ + 'method' => 'POST', + 'path' => 'servers/{id}/action', + 'params' => [ + 'id' => $this->params->urlId('server'), + 'suspend' => $this->params->nullAction() + ], + ]; + } + + public function resumeServer() : array + { + return [ + 'method' => 'POST', + 'path' => 'servers/{id}/action', + 'params' => [ + 'id' => $this->params->urlId('server'), + 'resume' => $this->params->nullAction() + ], + ]; + } + public function rebuildServer(): array { return [ diff --git a/src/Compute/v2/Models/Server.php b/src/Compute/v2/Models/Server.php index 3155d397..4c3e125e 100644 --- a/src/Compute/v2/Models/Server.php +++ b/src/Compute/v2/Models/Server.php @@ -193,6 +193,28 @@ public function stop() ]); } + /** + * Suspend server + */ + public function suspend() + { + $this->execute($this->api->suspendServer(), [ + 'id' => $this->id, + 'suspend' => null + ]); + } + + /** + * Resume server + */ + public function resume() + { + $this->execute($this->api->resumeServer(), [ + 'id' => $this->id, + 'resume' => null + ]); + } + /** * Rebuilds the server. * From dd815f75c2972b892b6723768c1f8a40189c7b22 Mon Sep 17 00:00:00 2001 From: Chris Smit Date: Wed, 30 Aug 2017 10:00:09 -0400 Subject: [PATCH 2/3] add tests --- tests/integration/Compute/v2/CoreTest.php | 26 +++++++++++++++++++++ tests/unit/Compute/v2/Models/ServerTest.php | 18 ++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/tests/integration/Compute/v2/CoreTest.php b/tests/integration/Compute/v2/CoreTest.php index 2bf2e4b0..0d3368e6 100644 --- a/tests/integration/Compute/v2/CoreTest.php +++ b/tests/integration/Compute/v2/CoreTest.php @@ -145,6 +145,8 @@ public function runTests() //$this->changeServerPassword(); $this->stopServer(); $this->startServer(); + $this->suspendServer(); + $this->resumeServer(); $this->resizeServer(); $this->confirmServerResize(); $this->rebuildServer(); @@ -399,6 +401,30 @@ private function startServer() $this->logStep('Started server {serverId}', $replacements); } + private function suspendServer() + { + $replacements = ['{serverId}' => $this->serverId]; + + /** @var $server \OpenStack\Compute\v2\Models\Server */ + require_once $this->sampleFile($replacements, 'servers/suspend_server.php'); + + $server->waitUntilActive(false); + + $this->logStep('Suspended server {serverId}', $replacements); + } + + private function resumeServer() + { + $replacements = ['{serverId}' => $this->serverId]; + + /** @var $server \OpenStack\Compute\v2\Models\Server */ + require_once $this->sampleFile($replacements, 'servers/resume_server.php'); + + $server->waitUntilActive(false); + + $this->logStep('Resumed server {serverId}', $replacements); + } + private function createFlavor() { $replacements = [ diff --git a/tests/unit/Compute/v2/Models/ServerTest.php b/tests/unit/Compute/v2/Models/ServerTest.php index 605becbe..3185e9af 100644 --- a/tests/unit/Compute/v2/Models/ServerTest.php +++ b/tests/unit/Compute/v2/Models/ServerTest.php @@ -185,6 +185,24 @@ public function test_it_stops() $this->assertNull($this->server->stop()); } + public function test_it_suspends() + { + $expectedJson = ['suspend' => null]; + + $this->setupMock('POST', 'servers/serverId/action', $expectedJson, [], new Response(202)); + + $this->assertNull($this->server->suspend()); + } + + public function test_it_resumes() + { + $expectedJson = ['resume' => null]; + + $this->setupMock('POST', 'servers/serverId/action', $expectedJson, [], new Response(202)); + + $this->assertNull($this->server->resume()); + } + public function test_it_resizes() { $expectedJson = ['resize' => ['flavorRef' => 'flavorId']]; From 42cb570ac05459970e3b4802d27c72108112c2ab Mon Sep 17 00:00:00 2001 From: Chris Smit Date: Wed, 30 Aug 2017 10:15:31 -0400 Subject: [PATCH 3/3] add sample files for integration tests --- samples/compute/v2/servers/resume_server.php | 21 +++++++++++++++++++ samples/compute/v2/servers/suspend_server.php | 21 +++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 samples/compute/v2/servers/resume_server.php create mode 100644 samples/compute/v2/servers/suspend_server.php diff --git a/samples/compute/v2/servers/resume_server.php b/samples/compute/v2/servers/resume_server.php new file mode 100644 index 00000000..e155f86a --- /dev/null +++ b/samples/compute/v2/servers/resume_server.php @@ -0,0 +1,21 @@ + '{authUrl}', + 'region' => '{region}', + 'user' => [ + 'id' => '{userId}', + 'password' => '{password}' + ], + 'scope' => ['project' => ['id' => '{projectId}']] +]); + +$compute = $openstack->computeV2(['region' => '{region}']); + +$server = $compute->getServer([ + 'id' => '{serverId}', +]); + +$server->resume(); diff --git a/samples/compute/v2/servers/suspend_server.php b/samples/compute/v2/servers/suspend_server.php new file mode 100644 index 00000000..42b80016 --- /dev/null +++ b/samples/compute/v2/servers/suspend_server.php @@ -0,0 +1,21 @@ + '{authUrl}', + 'region' => '{region}', + 'user' => [ + 'id' => '{userId}', + 'password' => '{password}' + ], + 'scope' => ['project' => ['id' => '{projectId}']] +]); + +$compute = $openstack->computeV2(['region' => '{region}']); + +$server = $compute->getServer([ + 'id' => '{serverId}', +]); + +$server->suspend();