@softvisio/core
Version:
Softisio core
315 lines (283 loc) • 9.97 kB
YAML
# DOCS: https://docs.docker.com/compose/compose-file/
- $id: compose
type: object
properties:
version: { type: string }
name: { type: string }
services:
type: object
propertyNames: { type: string }
additionalProperties:
type: object
properties:
image: { type: string }
depends_on:
anyOf:
- { type: array, items: { type: string } }
- type: object
propertyNames: { type: string }
additionalProperties:
type: object
properties:
restart: { type: boolean }
condition: { enum: [service_started, service_healthy, service_completed_successfully] }
required: { type: boolean }
additionalProperties: false
required: []
init: { type: boolean }
stop_grace_period: { type: string }
# DOCS: https://docs.docker.com/reference/compose-file/deploy/
deploy:
anyOf:
- type: object
properties:
mode: { const: global }
endpoint_mode: { enum: [vip, dnsrr] }
resources: { $ref: resources }
labels: { $ref: labels }
required: [mode]
additionalProperties: false
- type: object
properties:
mode: { const: replicated }
endpoint_mode: { enum: [vip, dnsrr] }
replicas: { type: integer, minimum: 0 }
placement:
type: object
properties:
max_replicas_per_node: { type: integer, minimum: 1 }
constraints: { type: array, items: { type: string }, minItems: 1, uniqueItems: true }
required: []
additionalProperties: false
resources: { $ref: resources }
labels: { $ref: labels }
required: [replicas]
additionalProperties: false
healthcheck:
type: object
properties:
test: { type: string }
start_period: { type: string }
interval: { type: string }
timeout: { type: string }
retries: { type: integer, minimum: 1 }
required: [test, start_period, interval, timeout, retries]
additionalProperties: false
environment:
type: object
additionalProperties: { type: [number, string] }
command: { type: string }
configs:
type: array
items:
type: object
properties:
source: { type: string }
target: { type: string }
required: [source, target]
additionalProperties: false
secrets:
type: array
items:
type: object
properties:
source: { type: string }
target: { type: string }
required: [source, target]
additionalProperties: false
networks: { type: array, items: { type: string }, minItems: 1, uniqueItems: true }
ports:
type: array
items:
type: object
properties:
name: { type: string }
published: { type: integer, format: ip-port }
target: { type: integer, format: ip-port }
protocol: { enum: [tcp, udp] }
mode: { enum: [ingress, host] }
# NOTE: not allowed in stack
# host_ip: { type: string, format: host } # NOTE: try format ip-address instead
required: [published, target]
additionalProperties: false
minItems: 1
volumes:
type: array
items:
anyOf:
- type: object
properties:
type: { const: tmpfs }
target: { type: string }
tmpfs:
type: object
properties:
size: { type: integer, minimum: 1 }
required: [size]
additionalProperties: false
required: [type, target, tmpfs]
additionalProperties: false
- type: object
properties:
type: { enum: [bind, volume] }
source: { type: string }
target: { type: string }
required: [type, source, target]
additionalProperties: false
build: { $ref: build }
required: [image]
additionalProperties: false
configs:
type: object
propertyNames: { type: string }
additionalProperties:
anyOf:
- type: object
properties:
name: { type: string }
file: { type: string }
additionalProperties: false
required: [file]
- type: object
properties:
name: { type: string }
environment: { type: string }
additionalProperties: false
required: [environment]
- type: object
properties:
name: { type: string }
content: { type: string }
additionalProperties: false
required: [content]
- type: object
properties:
name: { type: string }
external: { const: true }
additionalProperties: false
required: [external]
secrets:
type: object
propertyNames: { type: string }
additionalProperties:
anyOf:
- type: object
properties:
file: { type: string }
additionalProperties: false
required: [file]
- type: object
properties:
environment: { type: string }
additionalProperties: false
required: [environment]
networks:
type: object
propertyNames: { type: string }
additionalProperties:
anyOf:
- type: "null"
# external
- type: object
properties:
name: { type: string }
external: { const: true }
additionalProperties: false
required: [external]
- type: object
properties:
name: { type: string }
driver: { enum: [bridge, host, overlay, ipvlan, macvlan, none] }
driver_opts: { type: object }
attachable: { type: boolean }
internal: { type: boolean }
enable_ipv6: { type: boolean }
labels: { $ref: labels }
ipam:
type: object
properties:
driver: { enum: [bridge, host, overlay, ipvlan, macvlan, none] }
config:
type: array
minItems: 1
items:
type: object
properties:
subnet: { type: string, format: ip-subnet }
ip_range: { type: string, format: ip-subnet }
gateway: { type: string, format: ip-address }
aux_addresses:
type: object
propertyNames: { type: string, format: domain }
additionalProperties: { type: string, format: ip-address }
additionalProperties: false
options: { type: object }
additionalProperties: false
additionalProperties: false
volumes:
type: object
propertyNames: { type: string }
additionalProperties:
anyOf:
- type: "null"
- type: object
properties:
driver: { type: string }
driver_opts: { type: object }
external: { type: boolean }
labels: { $ref: labels }
name: { type: string }
required: []
required: [services]
additionalProperties: false
- $id: labels
anyOf:
- type: object
additionalProperties: { type: string }
- type: array
items: { type: string }
- $id: resources
anyOf:
- type: "null"
- type: object
properties:
limits:
type: object
properties:
cpus: { type: number }
memory: { type: string, format: digital-size }
pids: { type: integer }
additionalProperties: false
reservations:
type: object
properties:
cpus: { type: number }
memory: { type: string, format: digital-size }
generic_resources:
type: array
items:
type: object
properties:
discrete_resource_spec:
type: object
properties:
kind: { type: string }
value: { type: integer }
additionalProperties: false
required: [kind, value]
additionalProperties: false
additionalProperties: false
minProperties: 1
- $id: build
# DOCS: https://docs.docker.com/reference/compose-file/build/
anyOf:
- type: string
- type: object
properties:
context: { type: string }
dockerfile: { type: string }
args:
type: object
additionalProperties: { type: [number, string] }
minProperties: 1
additionalProperties: false