+ nodes:
+ v1.0:
+ type: 'array'
+ items:
+ type: 'object'
+ properties:
+ name:
+ type: 'string'
+ node:
+ $ref: '#/definitions/node/v1.0'
+ disks:
+ $ref: '#/definitions/disks/v1.0'
+ os:
+ type: 'string'
+ remote_params: # Optional YAML anchor, contents will be validated after inject
+ type: 'object'
+ remote_management:
+ $ref: '#/definitions/remote_management/v1.0'
+ interfaces:
+ $ref: '#/definitions/interfaces/v1.0'
+ required: ['name', 'node', 'disks', 'remote_management', 'interfaces']
+ additionalProperties: false
+
+##############################################################################
+# Top-level structure:
+# - define all possible top-level keys, without enforcing a schema for them,
+# just so we can disallow additional properties;
+# - require 'version' and allow dynamically generated 'version_x.y' key;
+properties:
+ # version_x.y keys are auto-added by `validate_schema.py` based on 'version'
+ version_1.0:
+ type: 'boolean'
+ version:
+ type: 'number'
+ enum: [1.0]
+ details:
+ type: 'object'
+ jumphost:
+ type: 'object'
+ nodes:
+ type: 'array'
+required: ['version']
+additionalProperties: false
+
+##############################################################################
+# Schema versioning
+# - based on dynamically added 'version_x.y', require additional PDF blocks
+# and validate them against the proper schema version;
+dependencies:
+ version_1.0:
+ properties:
+ details:
+ $ref: '#/definitions/details/v1.0'
+ jumphost:
+ $ref: '#/definitions/jumphost/v1.0'
+ nodes:
+ $ref: '#/definitions/nodes/v1.0'
+ required: ['details', 'jumphost', 'nodes']