From 4a3549bd9bfe269a7e38bbd70fcf23ce773fd56e Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 18 Dec 2018 09:28:33 +0100 Subject: [PATCH 1/2] Implement resuming and suspending of servers --- samples/compute/v2/servers/resume_server.php | 21 ++++++++++++++++ samples/compute/v2/servers/suspend_server.php | 21 ++++++++++++++++ src/Compute/v2/Api.php | 24 +++++++++++++++++++ src/Compute/v2/Models/Server.php | 22 +++++++++++++++++ tests/integration/Compute/v2/CoreTest.php | 24 +++++++++++++++++++ tests/unit/Compute/v2/Models/ServerTest.php | 18 ++++++++++++++ 6 files changed, 130 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 000000000..e155f86aa --- /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 000000000..42b80016c --- /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(); diff --git a/src/Compute/v2/Api.php b/src/Compute/v2/Api.php index 2a8dde1a9..ee4adfa00 100644 --- a/src/Compute/v2/Api.php +++ b/src/Compute/v2/Api.php @@ -332,6 +332,30 @@ public function stopServer(): array ]; } + public function resumeServer(): array + { + return [ + 'method' => 'POST', + 'path' => 'servers/{id}/action', + 'params' => [ + 'id' => $this->params->urlId('server'), + 'resume' => $this->params->nullAction(), + ], + ]; + } + + public function suspendServer(): array + { + return [ + 'method' => 'POST', + 'path' => 'servers/{id}/action', + 'params' => [ + 'id' => $this->params->urlId('server'), + 'suspend' => $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 9e9b4b0d7..d83540243 100644 --- a/src/Compute/v2/Models/Server.php +++ b/src/Compute/v2/Models/Server.php @@ -231,6 +231,28 @@ public function stop() ]); } + /** + * Resumes server. + */ + public function resume() + { + $this->execute($this->api->resumeServer(), [ + 'id' => $this->id, + 'resume' => null, + ]); + } + + /** + * Suspends server. + */ + public function suspend() + { + $this->execute($this->api->suspendServer(), [ + 'id' => $this->id, + 'suspend' => null, + ]); + } + /** * Rebuilds the server. * diff --git a/tests/integration/Compute/v2/CoreTest.php b/tests/integration/Compute/v2/CoreTest.php index eb829b730..b3db5a8fc 100644 --- a/tests/integration/Compute/v2/CoreTest.php +++ b/tests/integration/Compute/v2/CoreTest.php @@ -423,6 +423,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->waitUntil('SUSPENDED', 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 44b6b6054..472d8b322 100644 --- a/tests/unit/Compute/v2/Models/ServerTest.php +++ b/tests/unit/Compute/v2/Models/ServerTest.php @@ -215,6 +215,24 @@ public function test_it_stops() $this->assertNull($this->server->stop()); } + 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_suspends() + { + $expectedJson = ['suspend' => null]; + + $this->setupMock('POST', 'servers/serverId/action', $expectedJson, [], new Response(202)); + + $this->assertNull($this->server->suspend()); + } + public function test_it_resizes() { $expectedJson = ['resize' => ['flavorRef' => 'flavorId']]; From 8f629c92012aff31a2edf5c922ba795473635917 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 18 Dec 2018 09:35:46 +0100 Subject: [PATCH 2/2] Add missing call to integration tests for resume/suspend server --- tests/integration/Compute/v2/CoreTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/integration/Compute/v2/CoreTest.php b/tests/integration/Compute/v2/CoreTest.php index b3db5a8fc..c5fc36fcd 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();