
This patch set updates document types documentation which includes expounding on control documents, layering policy documents, and dataschema documents. Change-Id: Id31fcb6b68ca30fdf681dec8348c2fc4237cd48d
9.4 KiB
Document Types
Application Documents
Application documents are those whose metadata.schema
begins with metadata/Document
. These documents define all
the data that make up a site deployment, including but not limited to:
networking, hardware, host, bare metal, software, etc. site information.
Prior to ingestion by Deckhand, application documents are known as "raw
documents". After rendering, they are known as "rendered documents".
Application documents are subject to the following rendering
operations:
encryption
layering
substitution
replacement
Control Documents
Control documents (documents which have metadata.schema
of metadata/Control/v1
), are special, and are used to
control the behavior of Deckhand at runtime. Control documents are
immutable so any document mutation or manipulation does not apply to
them.
Control documents only exist to control how application-documents
are
validated and rendered.
Note
Unlike application-documents
, control documents do not
require storagePolicy
or layeringDefinition
properties; in fact, it is recommended that such properties not be used
for control documents. Again, this is because such documents should not
themselves undergo layering, substitution or encryption. It is not
meaningful to treat them like normal documents. See validation-schemas
for more
information on required document properties.
Only the following types of control documents are allowed:
DataSchema
DataSchema
documents are used by various services to
register new schemas that Deckhand can use for validation. No
DataSchema
documents with names beginning with
deckhand/
or metadata/
are allowed. The
metadata.name
field of each DataSchema
document references the top-level schema
of application-documents
: when
there is a match between both values, the data
section of
all application-documents
is validated against the JSON
schema found in the matching DataSchema
document.
The JSON schema definition is found in the data
key of
each DataSchema
document. The entire data
section of the target document is validated.
The following is an example of a sample DataSchema
document, whose data
section features a simplistic JSON
schema:
---
# This specifies the official JSON schema meta-schema.
schema: deckhand/DataSchema/v1
metadata:
schema: metadata/Control/v1
name: promenade/Node/v1 # Specifies the documents to be used for validation.
labels:
application: promenade
data: # Valid JSON Schema is expected here.
$schema: http://blah
properties:
foo:
enum:
- bar
- baz
- qux
required:
- foo
...
The JSON schema abvove requires that the data
section of
application-documents
that match this DataSchema
have a property called
foo
whose value must be one of: "bar", "baz", or "qux".
Reference the JSON schema documentation for more information on writing correct schemas.
LayeringPolicy
Only one LayeringPolicy
document can exist within the
system at any time. It is an error to attempt to insert a new
LayeringPolicy
document if it has a different
metadata.name
than the existing document. If the names
match, it is treated as an update to the existing document.
Note
In order to create a new LayeringPolicy
document in
Deckhand, submit an empty payload via
PUT /buckets/{bucket_name}/documents
. Afterward, submit
another request containing the new batch of documents, including the new
LayeringPolicy
.
This document defines the strict order in which documents are merged
together from their component parts. It should result in a validation
error if a document refers to a layer not specified in the
LayeringPolicy
.
Below is an example of a LayeringPolicy
document:
---
schema: deckhand/LayeringPolicy/v1
metadata:
schema: metadata/Control/v1
name: layering-policy
data:
layerOrder:
- global
- site-type
- region
- site
- force
...
In the LayeringPolicy
above, a 5-tier
layerOrder
is created, in which the topmost layer is
global
and the bottommost layer is force
. This
means that global
constitutes the "base" layer onto which
other documents belonging to sub-layers can be layered. In practice,
this means that documents with site-type
can layer with
documents with global
and documents with
region
can layer with documents with
site-type
, etc.
Note that in the absence of any document belonging to an
"intermediate" layer, base layers can layer with "interspersed"
sub-layers, no matter the number of layers between them. This means that
a document with layer force
could layer with a document
with layer global
, provided no document exists
with a layer of site-type
, region
, or
site
. For more information about document layering,
reference the layering
documentation.
ValidationPolicy
Unlike LayeringPolicy
, many
ValidationPolicy
documents are allowed. This allows
services to check whether a particular revision (described below) of
documents meets a configurable set of validations without having to know
up front the complete list of validations.
Each validation name
specified here is a reference to
data that is POSTable by other services. Names beginning with
deckhand
are reserved for internal use. See the Validation
section below for more details.
Since validations may indicate interactions with external and
changing circumstances, an optional expiresAfter
key may be
specified for each validation as an ISO8601 duration. If no
expiresAfter
is specified, a successful validation does not
expire. Note that expirations are specific to the combination of
ValidationPolicy
and validation, not to each validation by
itself.
---
schema: deckhand/ValidationPolicy/v1
metadata:
schema: metadata/Control/v1
name: site-deploy-ready
data:
validations:
- name: deckhand-schema-validation
- name: drydock-site-validation
expiresAfter: P1W
- name: promenade-site-validation
expiresAfter: P1W
- name: armada-deployability-validation
...
Provided Utility Document Kinds
These are documents that use the Document
metadata
schema, but live in the deckhand
namespace.
Certificate
---
schema: deckhand/Certificate/v1
metadata:
schema: metadata/Document/v1
name: application-api
storagePolicy: cleartext
data: |-
-----BEGIN CERTIFICATE-----
MIIDYDCCAkigAwIBAgIUKG41PW4VtiphzASAMY4/3hL8OtAwDQYJKoZIhvcNAQEL
...snip...
P3WT9CfFARnsw2nKjnglQcwKkKLYip0WY2wh3FE7nrQZP6xKNaSRlh6p2pCGwwwH
HkvVwA==
-----END CERTIFICATE-----...
CertificateAuthority
---
schema: deckhand/CertificateAuthority/v1
metadata:
schema: metadata/Document/v1
name: application-ca
storagePolicy: cleartext
data: some-ca
...
CertificateAuthorityKey
---
schema: deckhand/CertificateAuthorityKey/v1
metadata:
schema: metadata/Document/v1
name: application-ca-key
storagePolicy: encrypted
data: |-
-----BEGIN CERTIFICATE-----
MIIDYDCCAkigAwIBAgIUKG41PW4VtiphzASAMY4/3hL8OtAwDQYJKoZIhvcNAQEL
...snip...
P3WT9CfFARnsw2nKjnglQcwKkKLYip0WY2wh3FE7nrQZP6xKNaSRlh6p2pCGwwwH
HkvVwA==
-----END CERTIFICATE-----...
CertificateKey
---
schema: deckhand/CertificateKey/v1
metadata:
schema: metadata/Document/v1
name: application-api
storagePolicy: encrypted
data: |-
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAx+m1+ao7uTVEs+I/Sie9YsXL0B9mOXFlzEdHX8P8x4nx78/T
...snip...
Zf3ykIG8l71pIs4TGsPlnyeO6LzCWP5WRSh+BHnyXXjzx/uxMOpQ/6I=
-----END RSA PRIVATE KEY-----...
Passphrase
---
schema: deckhand/Passphrase/v1
metadata:
schema: metadata/Document/v1
name: application-admin-password
storagePolicy: encrypted
data: some-password
...
PrivateKey
---
schema: deckhand/PrivateKey/v1
metadata:
schema: metadata/Document/v1
name: application-private-key
storagePolicy: encrypted
data: some-private-key
...
PublicKey
---
schema: deckhand/PublicKey/v1
metadata:
schema: metadata/Document/v1
name: application-public-key
storagePolicy: cleartext
data: some-password
...