summaryrefslogtreecommitdiffstats
path: root/config/pdf/idf-pod1.schema.yaml
blob: 78e2204265a5aa616292139d6eaf1df4fd5a716c (plain)
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']