Skip to content

Commit 31b31c9

Browse files
Image by name add architecture (#111)
* Add architecture to Images->GetByName to allow getting the correct image for the architecture Closes #110 * Apply fixes from StyleCI --------- Co-authored-by: StyleCI Bot <[email protected]>
1 parent 97da52e commit 31b31c9

File tree

3 files changed

+33
-11
lines changed

3 files changed

+33
-11
lines changed

src/Models/Images/ImageRequestOpts.php

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,22 @@ class ImageRequestOpts extends RequestOpts
1717
*/
1818
public $name;
1919

20+
/** @var string */
21+
public $architecture;
22+
2023
/**
2124
* RequestOpts constructor.
2225
*
23-
* @param $name
24-
* @param $perPage
25-
* @param $page
26-
* @param $labelSelector
26+
* @param string|null $name
27+
* @param int|null $perPage
28+
* @param int|null $page
29+
* @param string|null $labelSelector
30+
* @param string|null $architecture
2731
*/
28-
public function __construct(string $name = null, int $perPage = null, int $page = null, string $labelSelector = null)
32+
public function __construct(string $name = null, int $perPage = null, int $page = null, string $labelSelector = null, string $architecture = null)
2933
{
3034
parent::__construct($perPage, $page, $labelSelector);
3135
$this->name = $name;
36+
$this->architecture = $architecture;
3237
}
3338
}

src/Models/Images/Images.php

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
namespace LKDev\HetznerCloud\Models\Images;
44

5+
use GuzzleHttp\Exception\GuzzleException;
6+
use LKDev\HetznerCloud\APIException;
57
use LKDev\HetznerCloud\APIResponse;
68
use LKDev\HetznerCloud\HetznerAPIClient;
79
use LKDev\HetznerCloud\Models\Contracts\Resources;
@@ -43,10 +45,11 @@ public function all(RequestOpts $requestOpts = null): array
4345
*
4446
* @see https://docs.hetzner.cloud/#resources-images-get
4547
*
46-
* @param RequestOpts $requestOpts
48+
* @param RequestOpts|null $requestOpts
4749
* @return APIResponse|null
4850
*
49-
* @throws \LKDev\HetznerCloud\APIException
51+
* @throws APIException
52+
* @throws GuzzleException
5053
*/
5154
public function list(RequestOpts $requestOpts = null): ?APIResponse
5255
{
@@ -92,13 +95,14 @@ public function getById(int $imageId): ?Image
9295
* @see https://docs.hetzner.cloud/#resources-images-get-1
9396
*
9497
* @param string $name
95-
* @return \LKDev\HetznerCloud\Models\Images\Image|null
98+
* @param string|null $architecture
99+
* @return Image|null
96100
*
97-
* @throws \LKDev\HetznerCloud\APIException
101+
* @throws APIException
98102
*/
99-
public function getByName(string $name): ?Image
103+
public function getByName(string $name, string $architecture = null): ?Image
100104
{
101-
$images = $this->list(new ImageRequestOpts($name));
105+
$images = $this->list(new ImageRequestOpts($name, null, null, null, $architecture));
102106

103107
return (count($images->images) > 0) ? $images->images[0] : null;
104108
}

tests/Unit/Models/Images/ImagesTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,19 @@ public function testGetByName()
4949
$this->assertLastRequestQueryParametersContains('name', 'ubuntu-20.04');
5050
}
5151

52+
public function testGetByNameWithArchitecture()
53+
{
54+
$this->mockHandler->append(new Response(200, [], file_get_contents(__DIR__.'/fixtures/images.json')));
55+
$image = $this->images->getByName('ubuntu-20.04', 'arm');
56+
$this->assertEquals($image->id, 4711);
57+
$this->assertEquals($image->name, 'ubuntu-20.04');
58+
59+
$this->assertEmpty($image->labels);
60+
$this->assertLastRequestEquals('GET', '/images');
61+
$this->assertLastRequestQueryParametersContains('name', 'ubuntu-20.04');
62+
$this->assertLastRequestQueryParametersContains('architecture', 'arm');
63+
}
64+
5265
public function testAll()
5366
{
5467
$this->mockHandler->append(new Response(200, [], file_get_contents(__DIR__.'/fixtures/images.json')));

0 commit comments

Comments
 (0)