summaryrefslogtreecommitdiffstats
path: root/config/pdf/idf-pod1.schema.yaml
diff options
context:
space:
mode:
Diffstat (limited to 'config/pdf/idf-pod1.schema.yaml')
-rw-r--r--config/pdf/idf-pod1.schema.yaml229
1 files changed, 229 insertions, 0 deletions
diff --git a/config/pdf/idf-pod1.schema.yaml b/config/pdf/idf-pod1.schema.yaml
new file mode 100644
index 00000000..a1108a00
--- /dev/null
+++ b/config/pdf/idf-pod1.schema.yaml
@@ -0,0 +1,229 @@
+##############################################################################
+# Copyright (c) 2018 Enea AB and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+---
+$schema: 'http://json-schema.org/schema#'
+$id: 'https://github.com/opnfv/pharos/blob/master/config/pdf/pod1.yaml'
+
+definitions:
+ net_config:
+ v0.1:
+ # NOTE: I hope this is going away soon, so I won't model it yet
+ type: 'object'
+ compass:
+ v0.1:
+ type: 'object'
+ # NOTE: To be properly modeled by Compass4NFV maintainers
+ daisy:
+ v0.1:
+ type: 'object'
+ # NOTE: To be properly modeled by Daisy maintainers
+ fuel:
+ v0.1:
+ type: 'object'
+ properties:
+ jumphost:
+ type: 'object'
+ properties:
+ bridges:
+ type: 'object'
+ properties:
+ admin:
+ type: ['string', 'null']
+ mgmt:
+ type: ['string', 'null']
+ private:
+ type: ['string', 'null']
+ public:
+ type: ['string', 'null']
+ required: ['admin', 'mgmt', 'private', 'public']
+ additionalProperties: false
+ trunks:
+ type: 'object'
+ properties:
+ mgmt:
+ type: 'boolean'
+ required: ['mgmt']
+ additionalProperties: false
+ required: ['bridges']
+ additionalProperties: false
+ maas:
+ type: 'object'
+ properties:
+ timeout_comissioning:
+ type: 'number'
+ timeout_deploying:
+ type: 'number'
+ required: ['timeout_comissioning', 'timeout_deploying']
+ additionalProperties: false
+ network:
+ type: 'object'
+ properties:
+ ntp_strata_host1:
+ type: 'string'
+ ntp_strata_host2:
+ type: 'string'
+ node:
+ type: 'array'
+ items:
+ type: 'object'
+ properties:
+ interfaces:
+ type: 'array'
+ items:
+ type: ['string', 'null']
+ busaddr:
+ type: 'array'
+ items:
+ type: ['string', 'null']
+ required: ['interfaces', 'busaddr']
+ additionalProperties: false
+ required: ['node']
+ additionalProperties: false
+ reclass: # Optional
+ type: 'object'
+ properties:
+ node:
+ type: 'array'
+ items:
+ type: 'object'
+ properties:
+ compute_params:
+ type: 'object'
+ properties:
+ common: # Optional
+ type: 'object'
+ properties: &compute_params_common_properties
+ nova_cpu_pinning: # Optional
+ type: 'string'
+ compute_hugepages_size:
+ type: 'string'
+ enum: ['2M', '1G']
+ compute_hugepages_count:
+ type: 'number'
+ compute_hugepages_mount:
+ type: 'string'
+ compute_kernel_isolcpu: # Optional
+ type: 'string'
+ compute_ovs_pmd_cpu_mask: # Optional
+ type: ['string', 'number']
+ compute_ovs_memory_channels: # Optional
+ type: ['string', 'number']
+ required: ['compute_hugepages_size', 'compute_hugepages_count',
+ 'compute_hugepages_mount']
+ additionalProperties: false
+ dpdk: # Optional
+ type: 'object'
+ properties:
+ <<: *compute_params_common_properties
+ compute_dpdk_driver:
+ type: 'string'
+ compute_ovs_dpdk_socket_mem:
+ type: ['string', 'number']
+ compute_ovs_dpdk_lcore_mask:
+ type: ['string', 'number']
+ dpdk0_driver:
+ type: 'string'
+ dpdk0_n_rxq:
+ type: 'number'
+ required: ['compute_dpdk_driver', 'dpdk0_driver', 'dpdk0_n_rxq',
+ 'compute_ovs_dpdk_socket_mem',
+ 'compute_ovs_dpdk_lcore_mask']
+ additionalProperties: false
+ additionalProperties: false
+ required: ['compute_params']
+ additionalProperties: false
+ required: ['node']
+ additionalProperties: false
+ required: ['jumphost', 'network']
+ additionalProperties: false
+ osa:
+ v0.1:
+ type: 'object'
+ properties:
+ nodes_roles:
+ type: 'object'
+ groups:
+ type: 'object'
+ hostnames:
+ type: 'object'
+ network:
+ type: 'object'
+ required: ['nodes_roles', 'groups', 'hostnames', 'network']
+ additionalProperties: false
+ kubespray:
+ v0.1:
+ type: ['object', 'null']
+ # NOTE: To be properly modeled by XCI maintainers
+
+##############################################################################
+# Top-level structure:
+# - define all possible top-level and second-level keys, without enforcing a
+# schema for second-level, just so we can disallow additional properties;
+# - require 'version' and allow dynamically generated 'version_x.y' key;
+properties:
+ idf:
+ properties:
+ # version_x.y keys are auto-added by `validate_schema.py` based on 'version'
+ version_0.1:
+ type: 'boolean'
+ version:
+ type: 'number'
+ enum: [0.1]
+ installer:
+ type: 'array'
+ items:
+ type: 'string'
+ enum: ['apex', 'compass4nfv', 'daisy', 'fuel', 'joid', 'osa', 'kubespray']
+ net_config:
+ type: 'object'
+ compass:
+ type: 'object'
+ daisy:
+ type: 'object'
+ fuel:
+ type: 'object'
+ osa:
+ type: ['object', 'null']
+ kubespray:
+ type: ['object', 'null']
+ required: ['version']
+ additionalProperties: false
+ ############################################################################
+ # Schema versioning
+ # - based on dynamically added 'version_x.y', require additional IDF blocks
+ # and validate them against the proper schema version;
+ dependencies:
+ version_0.1:
+ properties:
+ net_config:
+ $ref: '#/definitions/net_config/v0.1'
+ compass:
+ $ref: '#/definitions/compass/v0.1'
+ daisy:
+ $ref: '#/definitions/daisy/v0.1'
+ fuel:
+ $ref: '#/definitions/fuel/v0.1'
+ osa:
+ $ref: '#/definitions/osa/v0.1'
+ kubespray:
+ $ref: '#/definitions/kubespray/v0.1'
+ fuel:
+ required: ['net_config']
+ daisy:
+ required: ['net_config']
+ osa:
+ required: ['net_config']
+ kubespray:
+ required: ['net_config']
+ xci:
+ type: 'object'
+ # NOTE: To be properly modeled by XCI maintainers
+
+# Do not allow any properties not defined here. This lets us catch typos.
+additionalProperties: false
+required: ['idf']