Containers

Container defines a namespace for objects. An object with the same name in two different containers represents two different objects.

More information can be found in the official documentation.

In order to work with containers you have to create the service first.

Read

$service = $openstack->objectStoreV1();
$container = $service->getContainer('{containerName}');

$container->retrieve();

You can read the content of a container:

printf("%s container has %d objects and %d bytes",
    $container->name, $container->objectCount, $container->bytesUsed);

Delete

$service = $openstack->objectStoreV1();
$container = $service->getContainer('{containerName}');

$container->delete();

The API will only accept DELETE requests on containers when they are empty. If you have a container with any objects inside, the operation will fail.

List

$service = $openstack->objectStoreV1();

foreach ($service->listContainers() as $container) {
    /** @var \OpenStack\ObjectStore\v1\Models\Container $container */
}

When listing containers, you must be aware that not all information about a container is returned in a collection. Very often only the object count, bytes used and container name will be exposed. If you would like to access all of the remote state of a collection item, you can call retrieve like so:

foreach ($containers as $container) {
    $container->retrieve();
}

If you have a large collection of containers, this will slow things down because you’re issuing a HEAD request per container.

By default, PHP generators are used to represent collections of resources in the SDK. The benefit of using generators is that it generally improves performance, since objects are not saved in memory as the iteration cycle goes on; instead, each resource is directly output to the user-defined foreach loop. For all intents and purposes, you interact with generators like any other Traversable object, but to retain collections in memory, you will need to implement your own logic.

Get metadata

$service = $openstack->objectStoreV1();
$container = $service->getContainer('{containerName}');

$metadata = $container->getMetadata();

The returned value will be a standard associative array, or hash, containing arbitrary key/value pairs. These will correspond to the values set either when the container was created, or when a previous mergeMetadata or resetMetadata operation was called.

Replace all metadata with new values

$service = $openstack->objectStoreV1();
$container = $service->getContainer('{containerName}');

$container->resetMetadata([
    '{key_1}' => '{val_1}',
    '{key_2}' => '{val_2}',
]);

In order to replace all existing metadata with a set of new values, you can use this operation. Any existing metadata items which not specified in the new set will be removed. For example, say an account has the following metadata already set:

Foo: value1
Bar: value2

and you reset the metadata with these values:

Foo: value4
Baz: value3

the metadata of the account will now be:

Foo: value4
Baz: value3

Merge new metadata values with existing

$service = $openstack->objectStoreV1();

$container = $service->getContainer('{containerName}');

$container->mergeMetadata([
    '{key_1}' => '{val_1}',
    '{key_2}' => '{val_2}',
]);

In order to merge a set of new metadata values with the existing metadata set, you can use this operation. Any existing metadata items which are not specified in the new set will be preserved. For example, say an account has the following metadata already set:

Foo: value1
Bar: value2

and you merge them with these values:

Foo: value4
Baz: value3

the metadata of the account will now be:

Foo: value4
Bar: value2
Baz: value3