1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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']
|