v1 Schemas

Below are the schemas Armada uses to validate Charts, Chart Groups, and Manifests.

Charts

Charts consist of the smallest building blocks in Armada. A Chart is comparable to a Helm chart. Charts consist of all the labels, dependencies, install and upgrade information, hooks and additional information needed to convey to Tiller.

Chart Groups

A Chart Group consists of a list of charts. Chart Group documents are useful for managing a group of Chart documents together.

Manifests

A Manifest is the largest building block in Armada. Manifest documents are responsible for managing collections of Chart Group documents.

Validation Schemas

Introduction

All schemas below are Deckhand DataSchema documents, which are essentially JSON schemas, with additional metadata useful for Deckhand to perform layering and substitution.

The validation schemas below are used by Armada to validate all ingested Charts, Chart Groups, and Manifests. Use the schemas below as models for authoring Armada documents.

Schemas

  • Chart schema.

    JSON schema against which all documents with armada/Chart/v1 metadata.name are validated.

    Schema for armada/Chart/v1 documents.
    # NOTE: Do not modify this schema, it is deprecated.
    ---
    schema: deckhand/DataSchema/v1
    metadata:
      name: armada/Chart/v1
      schema: metadata/Control/v1
    data:
      $schema: http://json-schema.org/schema#
      definitions:
        labels:
          type: object
          additionalProperties:
            type: string
        hook_action:
          type: array
          items:
            properties:
              name:
                type: string
              type:
                type: string
              labels:
                $ref: '#/definitions/labels'
            required:
              - type
            additionalProperties: false
      type: object
      properties:
        release:
          type: string
        chart_name:
          type: string
        namespace:
          type: string
        values:
          type: object
        dependencies:
          type: array
          items:
            type: string
        protected:
          type: object
          properties:
            continue_processing:
              type: boolean
          additionalProperties: false
        test:
          anyOf:
            - type: boolean
            - type: object
              properties:
                enabled:
                  type: boolean
                timeout:
                  type: integer
                options:
                  type: object
                  properties:
                    cleanup:
                      type: boolean
                  additionalProperties: false
              additionalProperties: false
        timeout:
          type: integer
        wait:
          type: object
          properties:
            timeout:
              type: integer
            resources:
              type: array
              items:
                properties:
                  type:
                    type: string
                  labels:
                    $ref: '#/definitions/labels'
                  min_ready:
                    anyOf:
                      - type: integer
                      - type: string
                required:
                  - type
                additionalProperties: false
            labels:
              $ref: "#/definitions/labels"
            # Config for helm's native `--wait` param.
            native:
              type: object
              properties:
                # TODO: Add separate timeout for native wait?
                enabled:
                  type: boolean
              additionalProperties: false
          additionalProperties: false
        source:
          type: object
          properties:
            type:
              type: string
            location:
              type: string
            subpath:
              type: string
            reference:
              type: string
            proxy_server:
              type: string
            auth_method:
              type: string
          required:
            - location
            - subpath
            - type
        delete:
          type: object
          properties:
            timeout:
              type: integer
        install:
          # NOTE(sh8121att) Not clear that this key is actually used
          # in the code. Will leave it here for backward compatabilities
          # until an additional audit is done.
          type: object
        upgrade:
          type: object
          properties:
            no_hooks:
              type: boolean
            pre:
              type: object
              additionalProperties: false
              properties:
                delete:
                  $ref: '#/definitions/hook_action'
                update:
                  $ref: '#/definitions/hook_action'
                create:
                  $ref: '#/definitions/hook_action'
            post:
              type: object
              additionalProperties: false
              properties:
                create:
                  $ref: '#/definitions/hook_action'
            options:
              type: object
              properties:
                force:
                  type: boolean
                recreate_pods:
                  type: boolean
              additionalProperties: false
          required:
            - no_hooks
          additionalProperties: false
      required:
        - namespace
        - chart_name
        - release
        - source
      additionalProperties: false
    ...
    

    This schema is used to sanity-check all Chart documents that are passed to Armada.

  • Chart Group schema.

    JSON schema against which all documents with armada/Chart/v1 metadata.name are validated.

    Schema for armada/ChartGroup/v1 documents.
    # NOTE: Do not modify this schema, it is deprecated.
    ---
    schema: deckhand/DataSchema/v1
    metadata:
      name: armada/ChartGroup/v1
      schema: metadata/Control/v1
    data:
      $schema: http://json-schema.org/schema#
      properties:
        name:
          type: string
        description:
          type: string
        sequenced:
          type: boolean
        # TODO(MarshM): Deprecate `test_charts`, it is no longer useful
        test_charts:
          type: boolean
        chart_group:
          type: array
          items:
            type: string
      required:
        - chart_group
      additionalProperties: false
    ...
    

    This schema is used to sanity-check all Chart Group documents that are passed to Armada.

  • Manifest schema.

    JSON schema against which all documents with armada/Manifest/v1 metadata.name are validated.

    Schema for armada/Manifest/v1 documents.
    # NOTE: Do not modify this schema, it is deprecated.
    ---
    schema: deckhand/DataSchema/v1
    metadata:
      name: armada/Manifest/v1
      schema: metadata/Control/v1
    data:
      $schema: http://json-schema.org/schema#
      properties:
        release_prefix:
          type: string
        chart_groups:
          type: array
          items:
            type: string
      required:
        - chart_groups
        - release_prefix
      additionalProperties: false
    ...
    

    This schema is used to sanity-check all Manifest documents that are passed to Armada.

Authoring Guidelines

All Armada documents must use the deckhand/DataSchema/v1 schema.