Make a simple storage-like object that uses the Identity v3 interface based on project tags as a backend.

It allows you to store a list of strings, that can be encoded/decoded.



The Net::OpenStack::Client instance to use. (It will also be used as the reporter instance.)


The base project (name or id) that will store the tags. The project has to exist.

All tags are stored in child projects with name <project_<counter>>.


Interact with the API.


Fetch data and populate the cache (and counter). If the cache already exists, it doesn't do anything. If you want to renew the cache, flush it first.


Flushes the cache.


Return (cached) data for tag. If tag is not defined, return all (cached) data as a hashref (key is tag, value is projectid that holds the tag). Data is fetched if cache is undefined.


Sanity check on tag data to add/delete.

Returns 1 on success, undef on failure (and reports an error).


Add element (to store and cache).

Returns 1 on success; undef on failure (and reports an error).


Delete item (from store and cache) if it exists in the cache.

Returns 1 on success (incl. when the data was not available in the first place); undef on failure (and reports an error).