Schema: stagedΒΆ
This document shows the schema of metadata files used within the Staging structure supported by this library, in JSON schema format.
The latest version of this schema is available in raw form at https://release-engineering.github.io/pushsource/staged-schema.yaml.
---
# Schema for metadata file "staged.yaml" or "pub-mapfile.json"
# accompanying a staged source.
#
# For general information about staging directories, see:
# https://release-engineering.github.io/pushsource/sources/staged.html
#
$schema: http://json-schema.org/draft-07/schema#
$id: http://release-engineering.github.io/pushsource/staged-schema.yaml
###############################################################################
#  Subschemas
definitions:
    header:
        type: object
        properties:
            version:
                # Version of the file format.
                # There is only a single supported version now.
                const: "0.2"
        requiredProperties:
        - version
        additionalProperties: false
    payload:
        type: object
        properties:
            files:
                $ref: "#/definitions/file_list"
        additionalProperties: false
    attributes_any:
        type: object
        anyOf:
        - $ref: "#/definitions/attributes_ami"
        - $ref: "#/definitions/attributes_file"
    attributes_ami:
        # Attributes for Amazon Machine Images (AMIs).
        properties:
            release:
                $ref: "#/definitions/ami_release"
            region:
                # AWS region to which this AMI should be pushed.
                type: string
                minLength: 1
            type:
                # Billing type for the image.
                type: string
                enum:
                - hourly
                - access
                - marketplace
            virtualization:
                # Virtualization type.
                type: string
                enum:
                - hvm
            volume:
                type: string
                enum:
                - standard
                - gp2
                - gp3
                - io1
                - io2
                - st1
                - sc1
            root_device:
                type: string
                minLength: 1
            description:
                $ref: "#/definitions/optional_string"
            sriov_net_support:
                type:
                - string
                - "null"
                enum:
                - simple
                - null
            ena_support:
                type:
                - boolean
                - "null"
            uefi_support:
                type:
                - boolean
                - "null"
            billing_codes:
                $ref: "#/definitions/ami_billing_codes"
            boot_mode:
                enum: [ 'hybrid', 'uefi', 'legacy', null ]
            public_image:
                type:
                - boolean
                - "null"
            release_notes:
                $ref: "#/definitions/optional_string"
            usage_instructions:
                $ref: "#/definitions/optional_string"
            recommended_instance_type:
                $ref: "#/definitions/optional_string"
            marketplace_entity_type:
                $ref: "#/definitions/optional_string"
            scanning_port:
                type:
                    - number
                    - "null"
                minimum: 0
                maximum: 65536
            user_name:
                $ref: "#/definitions/optional_string"
            version_title:
                $ref: "#/definitions/optional_string"
            marketplace_title_template:
                $ref: "#/definitions/optional_string"
            marketplace_name:
                $ref: "#/definitions/optional_string"
            security_groups:
                type:
                    - array
                    - "null"
                items:
                    type: object
                    properties:
                        ip_protocol:
                            type: string
                        ip_ranges:
                            type: array
                            items:
                                type: string
                    if:
                        properties:
                            ip_protocol:
                                enum: ["icmp", "icmpv6"]
                    then:
                        properties:
                            from_port:
                                type: number
                                minimum: -1
                                maximum: 255
                            to_port:
                                type: number
                                minimum: -1
                                maximum: 255
                    else:
                        properties:
                            from_port:
                                type: number
                                minimum: 0
                                maximum: 65536
                            to_port:
                                type: number
                                minimum: 0
                                maximum: 65536
            access_endpoint_url:
                type:
                - object
                - "null"
                properties:
                    port:
                        type: number
                        minimum: 0
                        maximum: 65536
                    protocol:
                        enum: ["http", "https"]
        required:
        - release
        - region
        - type
        - virtualization
        - volume
        - root_device
        additionalProperties: false
    attributes_file:
        # Attributes for generic files.
        properties:
            description:
                # Human-readable brief description of the file, e.g.
                # appropriate for use in a file browsing UI
                type: string
        required:
        - description
        additionalProperties: false
    file_list:
        type: array
        items:
            anyOf:
            - $ref: "#/definitions/file"
            - $ref: "#/definitions/unsupported_file"
        uniqueItems: true
    file:
        type: object
        properties:
            filename:
                # Desired name of this file on the target system.
                # Need not match the filename used in the staging area.
                type: string
                minLength: 1
            relative_path:
                # Relative path to the file being pushed within the staging
                # area.
                type: string
                minLength: 3
            sha256sum:
                # SHA256 checksum of this file's content, as a hex digest.
                type: string
                minLength: 64
                maxLength: 64
                pattern: "^[0-9a-fA-F]+$"
            version:
                # A version string for display purposes
                type: string
                minLength: 1
            order:
                # An ordering hint for display purposes
                type: number
                minimum: -99999
                maximum: 99999
            attributes:
                # Additional metadata, differs per content type.
                $ref: "#/definitions/attributes_any"
        additionalProperties: false
    # Metadata for legacy types of files which were previously supported
    # and are no longer. This schema simply accepts entries for these
    # files without validating any of the attributes other than the path.
    unsupported_file:
        type: object
        properties:
            relative_path:
                type: string
                pattern: "^[^/]+/(DOCKER|CHANNEL_DUMPS)/"
        required:
        - relative_path
    ami_release:
        # Release metadata for an AMI.
        type: object
        properties:
            product:
                type: string
                minLength: 1
            version:
                $ref: "#/definitions/optional_string"
            base_product:
                $ref: "#/definitions/optional_string"
            base_version:
                $ref: "#/definitions/optional_string"
            variant:
                $ref: "#/definitions/optional_string"
            arch:
                type: string
                enum:
                - arm64
                - x86_64
            respin:
                type: integer
            type:
                $ref: "#/definitions/optional_string"
                enum: ['ga', 'beta', null]
            date:
                type: string
                minLength: 1
                pattern: "^[0-9]{8}$"
        required:
        - product
        - date
        - arch
        - respin
    optional_string:
        # A field which may hold a non-empty string, or null.
        type:
        - string
        - "null"
        minLength: 1
    ami_billing_codes:
        # Billing codes for an AMI
        type:
        - object
        - "null"
        properties:
            name:
                type: string
            codes:
                type: array
                items:
                    type: string
        required:
        - name
        - codes
###############################################################################
#  Main schema
type: object
properties:
    header:
        $ref: "#/definitions/header"
    payload:
        $ref: "#/definitions/payload"
required:
- header
additionalProperties: false
