promenade/promenade/schemas/HostSystem.yaml

201 lines
4.9 KiB
YAML

---
schema: deckhand/DataSchema/v1
metadata:
schema: metadata/Control/v1
name: promenade/HostSystem/v1
labels:
application: promenade
data:
$schema: http://json-schema.org/schema#
definitions:
abs_path:
type: string
pattern: '^/.+$'
systemd_unit:
type: object
properties:
enable:
type: boolean
disable:
type: boolean
start:
type: boolean
stop:
type: boolean
mask:
type: boolean
additionalProperties: false
apt_source_line:
type: string
# XXX add regex
file:
properties:
path:
$ref: '#/definitions/abs_path'
content:
type: string
mode:
type: integer
minimum: 0
tar_url:
$ref: '#/definitions/url'
tar_path:
$ref: '#/definitions/rel_path'
docker_image:
$ref: '#/definitions/url'
file_path:
$ref: '#/definitions/abs_path'
symlink:
$ref: '#/definitions/abs_path'
required:
- mode
- path
oneOf:
- type: object
required:
- content
- type: object
required:
- symlink
- type: object
allOf:
- type: object
required:
- tar_url
- tar_path
- type: object
allOf:
- type: object
required:
- docker_image
- file_path
additionalProperties: false
image:
type: string
# XXX add regex
package:
type: string
# XXX add regex
public_key:
type: string
# XXX add regex
rel_path:
type: string
# XXX add regex
url:
type: string
# XXX add regex
repos_and_packages:
type: object
properties:
# apt repositories
repositories:
type: array
items:
$ref: '#/definitions/apt_source_line'
# apt repository keys
keys:
type: array
items:
$ref: '#/definitions/public_key'
# required packages
required:
type: object
properties:
docker:
$ref: '#/definitions/package'
runtime:
$ref: '#/definitions/package'
socat:
$ref: '#/definitions/package'
# a container runtime is required
# using either docker or runtime key
oneOf:
- required:
- docker
- required:
- runtime
# socat is required
required:
- socat
additionalProperties: false
# additional packages
additional:
type: array
items:
$ref: '#/definitions/package'
additionalProperties: false
type: object
properties:
files:
type: array
items:
type: object
items:
$ref: '#/definitions/file'
systemd_units:
type: object
additionalProperties:
$ref: '#/definitions/systemd_unit'
images:
type: object
properties:
# NOTE(mark-burnett): No longer used.
coredns:
$ref: '#/definitions/image'
haproxy:
$ref: '#/definitions/image'
helm:
type: object
properties:
helm:
$ref: '#/definitions/image'
required:
- helm
additionalProperties: false
monitoring_image:
$ref: '#/definitions/image'
required:
- haproxy
- helm
- monitoring_image
additionalProperties: false
packages:
type: object
properties:
common:
type: object
$ref: '#/definitions/repos_and_packages'
genesis:
type: object
$ref: '#/definitions/repos_and_packages'
join:
type: object
$ref: '#/definitions/repos_and_packages'
additionalProperties: false
validation:
type: object
properties:
pod_logs:
type: object
properties:
image:
type: string
additionalProperties: false
additionalProperties: false
required:
- images
- packages
allOf:
# ensure that required packages are defined for genesis node
# (either in .packages.genesis or .packages.common)
- anyOf:
- {properties: {packages: {properties: {common: {required: [required]}}}}}
- {properties: {packages: {properties: {genesis: {required: [required]}}}}}
# ensure that required packages are defined for join nodes
# (either in .packages.join or .packages.common)
- anyOf:
- {properties: {packages: {properties: {common: {required: [required]}}}}}
- {properties: {packages: {properties: {join: {required: [required]}}}}}
additionalProperties: false