Skip to content

Commit 03f769a

Browse files
author
Jamie Hannaford
committed
add tests
1 parent 2fb3623 commit 03f769a

File tree

8 files changed

+298
-47
lines changed

8 files changed

+298
-47
lines changed

src/BlockStorage/v2/Models/Snapshot.php

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,19 @@
66
use OpenStack\Common\Resource\Creatable;
77
use OpenStack\Common\Resource\Deletable;
88
use OpenStack\Common\Resource\HasMetadata;
9+
use OpenStack\Common\Resource\HasWaiterTrait;
910
use OpenStack\Common\Resource\Listable;
11+
use OpenStack\Common\Resource\Retrievable;
1012
use OpenStack\Common\Resource\Updateable;
1113
use OpenStack\Common\Transport\Utils;
12-
use OpenStack\ObjectStore\v1\Models\MetadataTrait;
1314
use Psr\Http\Message\ResponseInterface;
1415

1516
/**
1617
* @property \OpenStack\BlockStorage\v2\Api $api
1718
*/
18-
class Snapshot extends AbstractResource implements Listable, Creatable, Updateable, Deletable, HasMetadata
19+
class Snapshot extends AbstractResource implements Listable, Creatable, Updateable, Deletable, Retrievable, HasMetadata
1920
{
20-
use MetadataTrait;
21+
use HasWaiterTrait;
2122

2223
/** @var string */
2324
public $id;
@@ -35,7 +36,7 @@ class Snapshot extends AbstractResource implements Listable, Creatable, Updateab
3536
public $createdAt;
3637

3738
/** @var array */
38-
public $metadata;
39+
public $metadata = [];
3940

4041
/** @var string */
4142
public $volumeId;
@@ -54,12 +55,16 @@ class Snapshot extends AbstractResource implements Listable, Creatable, Updateab
5455
public function populateFromResponse(ResponseInterface $response)
5556
{
5657
parent::populateFromResponse($response);
57-
5858
$this->metadata = $this->parseMetadata($response);
59-
6059
return $this;
6160
}
6261

62+
public function retrieve()
63+
{
64+
$response = $this->executeWithState($this->api->getSnapshot());
65+
return $this->populateFromResponse($response);
66+
}
67+
6368
/**
6469
* @param array $userOptions {@see \OpenStack\BlockStorage\v2\Api::postSnapshots}
6570
*
@@ -84,20 +89,26 @@ public function delete()
8489
public function getMetadata()
8590
{
8691
$response = $this->executeWithState($this->api->getSnapshotMetadata());
87-
return $this->parseMetadata($response);
92+
$this->metadata = $this->parseMetadata($response);
93+
return $this->metadata;
8894
}
8995

9096
public function mergeMetadata(array $metadata)
9197
{
98+
$this->getMetadata();
99+
$this->metadata = array_merge($this->metadata, $metadata);
100+
$this->executeWithState($this->api->putSnapshotMetadata());
92101
}
93102

94103
public function resetMetadata(array $metadata)
95104
{
105+
$this->metadata = $metadata;
106+
$this->executeWithState($this->api->putSnapshotMetadata());
96107
}
97108

98109
public function parseMetadata(ResponseInterface $response)
99110
{
100111
$json = Utils::jsonDecode($response);
101-
return isset($json['metadata']) ? $json['metadata'] : null;
112+
return isset($json['metadata']) ? $json['metadata'] : [];
102113
}
103114
}

src/BlockStorage/v2/Models/Volume.php

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,20 @@
55
use OpenStack\Common\Resource\Creatable;
66
use OpenStack\Common\Resource\Deletable;
77
use OpenStack\Common\Resource\HasMetadata;
8+
use OpenStack\Common\Resource\HasWaiterTrait;
89
use OpenStack\Common\Resource\Listable;
10+
use OpenStack\Common\Resource\Retrievable;
911
use OpenStack\Common\Resource\Updateable;
1012
use OpenStack\Common\Transport\Utils;
1113
use Psr\Http\Message\ResponseInterface;
1214

1315
/**
1416
* @property \OpenStack\BlockStorage\v2\Api $api
1517
*/
16-
class Volume extends AbstractResource implements Creatable, Listable, Updateable, Deletable, HasMetadata
18+
class Volume extends AbstractResource implements Creatable, Listable, Updateable, Deletable, Retrievable, HasMetadata
1719
{
20+
use HasWaiterTrait;
21+
1822
/** @var string */
1923
public $id;
2024

@@ -40,7 +44,7 @@ class Volume extends AbstractResource implements Creatable, Listable, Updateable
4044
public $description;
4145

4246
/** @var string */
43-
public $volumeType;
47+
public $volumeTypeName;
4448

4549
/** @var string */
4650
public $snapshotId;
@@ -49,7 +53,7 @@ class Volume extends AbstractResource implements Creatable, Listable, Updateable
4953
public $sourceVolumeId;
5054

5155
/** @var array */
52-
public $metadata;
56+
public $metadata = [];
5357

5458
protected $resourceKey = 'volume';
5559
protected $resourcesKey = 'volumes';
@@ -58,18 +62,22 @@ class Volume extends AbstractResource implements Creatable, Listable, Updateable
5862
'source_volid' => 'sourceVolumeId',
5963
'snapshot_id' => 'snapshotId',
6064
'created_at' => 'createdAt',
61-
'volume_type' => 'volumeType',
65+
'volume_type' => 'volumeTypeName',
6266
];
6367

6468
public function populateFromResponse(ResponseInterface $response)
6569
{
6670
parent::populateFromResponse($response);
67-
6871
$this->metadata = $this->parseMetadata($response);
69-
7072
return $this;
7173
}
7274

75+
public function retrieve()
76+
{
77+
$response = $this->executeWithState($this->api->getVolume());
78+
return $this->populateFromResponse($response);
79+
}
80+
7381
/**
7482
* @param array $userOptions {@see \OpenStack\BlockStorage\v2\Api::postVolumes}
7583
*
@@ -110,6 +118,6 @@ public function resetMetadata(array $metadata)
110118
public function parseMetadata(ResponseInterface $response)
111119
{
112120
$json = Utils::jsonDecode($response);
113-
return isset($json['metadata']) ? $json['metadata'] : null;
121+
return isset($json['metadata']) ? $json['metadata'] : [];
114122
}
115123
}

src/BlockStorage/v2/Params.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,12 @@ public function metadata()
8383
'type' => self::OBJECT_TYPE,
8484
'location' => self::JSON,
8585
'description' => 'One or more metadata key and value pairs to associate with the volume.',
86+
'properties' => [
87+
'type' => self::STRING_TYPE,
88+
'description' => <<<TYPEOTHER
89+
The value being set for your key. Bear in mind that "key" is just an example, you can name it anything.
90+
TYPEOTHER
91+
]
8692
];
8793
}
8894

src/BlockStorage/v2/Service.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public function createVolume(array $userOptions)
2727
*
2828
* @return \Generator
2929
*/
30-
public function listVolumes($detail, array $userOptions = [])
30+
public function listVolumes($detail = false, array $userOptions = [])
3131
{
3232
$def = ($detail === true) ? $this->api->getVolumesDetail() : $this->api->getVolumes();
3333
return $this->model(Volume::class)->enumerate($def, $userOptions);
@@ -48,7 +48,7 @@ public function getVolume($volumeId)
4848
/**
4949
* @param array $userOptions {@see Api::postTypes}
5050
*
51-
* @return PostType
51+
* @return VolumeType
5252
*/
5353
public function createVolumeType(array $userOptions)
5454
{
@@ -88,7 +88,7 @@ public function createSnapshot(array $userOptions)
8888
/**
8989
* @return \Generator
9090
*/
91-
public function listSnapshots($detail, array $userOptions = [])
91+
public function listSnapshots($detail = false, array $userOptions = [])
9292
{
9393
$def = ($detail === true) ? $this->api->getSnapshotsDetail() : $this->api->getSnapshots();
9494
return $this->model(Snapshot::class)->enumerate($def, $userOptions);

src/OpenStack.php

Lines changed: 30 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ class OpenStack
1616
private $builder;
1717

1818
/**
19-
* @param array $options Supported options:
19+
* @param array $options User-defined options
2020
*
21-
* username (string) Your OpenStack username [REQUIRED]
22-
* password (string) Your OpenStack password [REQUIRED]
23-
* tenantId (string) Your tenant ID [either tenantId or tenantName must be required]
24-
* tenantName (string) Your tenant name [either tenantId or tenantName must be required]
25-
* authUrl (string) The Keystone URL [REQUIRED]
26-
* debug (bool) Whether to enable HTTP logging [OPTIONAL]
21+
* $options['username'] = (string) Your OpenStack username [REQUIRED]
22+
* ['password'] = (string) Your OpenStack password [REQUIRED]
23+
* ['tenantId'] = (string) Your tenant ID [REQUIRED if tenantName omitted]
24+
* ['tenantName'] = (string) Your tenant name [REQUIRED if tenantId omitted]
25+
* ['authUrl'] = (string) The Keystone URL [REQUIRED]
26+
* ['debug'] = (bool) Whether to enable HTTP logging [OPTIONAL]
2727
*/
2828
public function __construct(array $options = [], Builder $builder = null)
2929
{
@@ -39,10 +39,8 @@ public function __construct(array $options = [], Builder $builder = null)
3939
*/
4040
public function computeV2(array $options = [])
4141
{
42-
return $this->builder->createService('Compute', 2, array_merge($options, [
43-
'catalogName' => 'nova',
44-
'catalogType' => 'compute'
45-
]));
42+
$defaults = ['catalogName' => 'nova', 'catalogType' => 'compute'];
43+
return $this->builder->createService('Compute', 2, array_merge($defaults, $options));
4644
}
4745

4846
/**
@@ -54,10 +52,8 @@ public function computeV2(array $options = [])
5452
*/
5553
public function networkingV2(array $options = [])
5654
{
57-
return $this->builder->createService('Networking', 2, array_merge($options, [
58-
'catalogName' => 'neutron',
59-
'catalogType' => 'network'
60-
]));
55+
$defaults = ['catalogName' => 'neutron', 'catalogType' => 'network'];
56+
return $this->builder->createService('Networking', 2, array_merge($defaults, $options));
6157
}
6258

6359
/**
@@ -69,10 +65,8 @@ public function networkingV2(array $options = [])
6965
*/
7066
public function identityV2(array $options = [])
7167
{
72-
return $this->builder->createService('Identity', 2, array_merge($options, [
73-
'catalogName' => false,
74-
'catalogType' => false,
75-
]));
68+
$defaults = ['catalogName' => false, 'catalogType' => false];
69+
return $this->builder->createService('Identity', 2, array_merge($defaults, $options));
7670
}
7771

7872
/**
@@ -84,10 +78,8 @@ public function identityV2(array $options = [])
8478
*/
8579
public function identityV3(array $options = [])
8680
{
87-
return $this->builder->createService('Identity', 3, array_merge($options, [
88-
'catalogName' => false,
89-
'catalogType' => false,
90-
]));
81+
$defaults = ['catalogName' => false, 'catalogType' => false];
82+
return $this->builder->createService('Identity', 3, array_merge($defaults, $options));
9183
}
9284

9385
/**
@@ -99,9 +91,20 @@ public function identityV3(array $options = [])
9991
*/
10092
public function objectStoreV1(array $options = [])
10193
{
102-
return $this->builder->createService('ObjectStore', 1, array_merge($options, [
103-
'catalogName' => 'swift',
104-
'catalogType' => 'object-store',
105-
]));
94+
$defaults = ['catalogName' => 'swift', 'catalogType' => 'object-store'];
95+
return $this->builder->createService('ObjectStore', 1, array_merge($defaults, $options));
96+
}
97+
98+
/**
99+
* Creates a new Block Storage v2 service.
100+
*
101+
* @param array $options Options that will be used in configuring the service.
102+
*
103+
* @return \OpenStack\BlockStorage\v2\Service
104+
*/
105+
public function blockStorageV2(array $options = [])
106+
{
107+
$defaults = ['catalogName' => 'cinderv2', 'catalogType' => 'volumev2'];
108+
return $this->builder->createService('BlockStorage', 2, array_merge($defaults, $options));
106109
}
107110
}

0 commit comments

Comments
 (0)