Naming Query Templates¶
Convention, non-normative. The service enforces only the grammar of a name (see the reference, chapter 10, Query Templates, and chapter 12, Naming Conventions); this page describes the convention the components of the infrastructure follow on top of it.
The rule¶
The name of a Query Template starts with the macro-group that owns it, followed by what the template returns:
- No verb: a Query Template is always a read, so
getsays nothing. all-marks the complete list of a type, with no criteria narrowing it:catalogue-all-metadata-profiles,is-all-eservice.-by-<criteria>marks a lookup narrowed by its variables. The object is singular when the intent is one resource (even if several equal copies may answer, e.g. theEServiceof a service deployed twice) and plural when the intent is a set:gcube-eservice-accesspoint-by-group-and-name,gcube-eservices-by-state.- Neither of them: the one resource of its kind in the Context, with no variables:
catalogue-configuration. The whole name stays inside the grammar of the service: lowercase words separated by hyphens,^[a-z][a-z0-9]*(-[a-z0-9]+)*$.
The name says who maintains the template and what it looks for, nothing more. The technology behind
a resource does not enter the name: when it changes, a new version of the definition follows it
and the name stays. Every other property of the answer, a projection first of all, is said by the
description.
The description¶
The description is mandatory and it is what a caller reads to know what the template returns:
- it starts with
Returnsand names the type of the instances returned, with the criteria the variables apply; - when the template projects the result with
_emit, it says so and lists the fields returned (Projection: ...): the caller receives those fields, not the instances; - it does not describe the request body or the default values of the variables: each variable has its own description, and the default value of a variable only lets the service test the query.
Macro-groups¶
| Prefix | Owner | Components |
|---|---|---|
catalogue- |
the catalogue stack | gcat, catalogue-core, gcat-client, grsf-publisher, the gcat plugins |
accounting- |
the accounting stack | accounting libraries and services, aggregator, dashboard harvester |
is- |
the Information System stack | queries of the IS tools themselves, e.g. the lists by Type of the IS GUI |
gcube- |
gcube-model, which defines the Types these queries read | generic queries offered to every gCube service and tool (the IS GUI among them) so that none writes them again: the base ones on relations and facets of any resource, and the ones on the gCube model (EService, SoftwareFacet, AccessPointFacet, ...) |
uri-resolver- |
the URI Resolver stack | uri-resolver, uri-resolver-manager, gcube-url-shortener |
provisioning- |
the provisioning | queries that only the provisioning (the Ansible playbooks and the collection gcube.resource_registry) needs |
A new macro-group is added here when a new stack defines its first template.
Why the macro-group and not the component¶
- Shared libraries. Many templates are installed and run by a library shared by several services (catalogue-core runs in gcat and in grsf-publisher). The macro-group names them without choosing one service as their owner.
- Stable names. A function that moves from a service to its library, or a new service of the same stack, keeps the name of its templates.
- Grouped listings. Sorted by name, the templates of a stack are listed together.
- Generic queries are not owned by their first user. A query that any service could use
(
is-orgcube-) keeps the generic prefix even when a single component installs it or runs it today. - Clear ownership. The prefix tells which stack maintains the template and raises its
versionwhen its definition changes.
Changing a name¶
A Query Template is never renamed: the template with the new name is created at version 1.0.0
and the one with the old name is deleted once no client runs it any more.
Who installs a template¶
- A service or a library installs the templates it runs at start-up, with its own token, through
the versioned upsert (
PUT /query-templates/{name}): the same definition is a no-op, a higherversionupdates it, and a409 Conflicttells an outdated component that a newer definition is already installed. - The provisioning installs its templates with the token of the provisioning client.
- The generic templates (
gcube-) and the ones of the IS tools (is-) are part of the reference set installed by the Resource Registry migration.
The token that installs a template needs a role allowed to write Query Templates (IS-Manager,
Infrastructure-Manager or IS-Admin). The registry records the identity that created a template
in its metadata: together with the prefix, it tells who put it there and why.