summaryrefslogtreecommitdiffstats
path: root/config/pdf
diff options
context:
space:
mode:
authorAlexandru Avadanii <Alexandru.Avadanii@enea.com>2018-01-14 02:26:05 +0100
committerAlexandru Avadanii <Alexandru.Avadanii@enea.com>2018-01-24 04:50:26 +0100
commit07a7a7bfa04827c34b115a5adf98037de439d5da (patch)
tree19b51e15ba3f361c2a82eb63c667bf028d18cda7 /config/pdf
parent811ff5abc205d961d45ee00c0b449c47893433ae (diff)
[IDF] Add IDF schema validation based on version
- add basic structure for IDF schema validation; - fill in Fuel section; - add stub for Daisy section; - add stub for Compass section; - add stub for net_config; - enable IDF schema validation via `check-schema.sh`; - prepare for new IDF versions with different schemas, while allowing subsection schema reuse from IDF v0.1; - extend validate_schema.py for IDF; Change-Id: I59b1c9d857e9dee9e6ff9956e81b2ae6dc27a767 Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
Diffstat (limited to 'config/pdf')
-rw-r--r--config/pdf/idf-pod1.schema.yaml113
1 files changed, 113 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..78e22042
--- /dev/null
+++ b/config/pdf/idf-pod1.schema.yaml
@@ -0,0 +1,113 @@
+##############################################################################
+# 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'
+ daisy:
+ v0.1:
+ type: 'object'
+ # NOTE: To be properly modeled by Daisy maintainers
+ compass:
+ v0.1:
+ type: 'object'
+ # NOTE: To be properly modeled by Compass4NFV 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
+ required: ['bridges']
+ additionalProperties: false
+ network:
+ type: 'object'
+ properties:
+ 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
+ required: ['jumphost', 'network']
+ additionalProperties: false
+
+##############################################################################
+# 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]
+ net_config:
+ type: 'object'
+ fuel:
+ type: 'object'
+ daisy:
+ type: 'object'
+ compass:
+ type: 'object'
+ 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'
+ fuel:
+ $ref: '#/definitions/fuel/v0.1'
+ daisy:
+ $ref: '#/definitions/daisy/v0.1'
+ compass:
+ $ref: '#/definitions/compass/v0.1'
+ required: ['net_config']
+
+# Do not allow any properties not defined here. This lets us catch typos.
+additionalProperties: false
+required: ['idf']