--- 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 url: $ref: '#/definitions/url' tar_url: $ref: '#/definitions/url' tar_path: $ref: '#/definitions/rel_path' symlink: $ref: '#/definitions/abs_path' required: - mode - path oneOf: - type: object required: - content - type: object required: - symlink - type: object required: - url - type: object allOf: - type: object required: - tar_url - tar_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