
# Copyright 2017-present Open Networking Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


map:
  name:
    type: str
  xos_dir:
    type: str
  logging:
    type: any
  wrappers:
    type: seq
    sequence:
    - type: str
  blueprints:
    type: seq
    sequence:
    - type: map
      map:
        name:
          type: str
          required: True
        graph:
          type: any
          required: True
        networks:
          type: seq
          sequence:
            - type: map
              map:
                name:
                  type: str
                permit_all_slices:
                  type: bool
                template:
                  type: str
                subnet:
                  type: str
                owner:
                  type: str
  dependency_graph:
    type: str
  link_graph:
    type: str
  steps_dir:
    type: str
  sys_dir:
    type: str
  models_dir:
    type: str
  accessor:
    type: map
    required: True
    map:
      endpoint:
        type: str
      username:
        type: str
      password:
        type: str
      kind:
        type: str
        required: False
  required_models:
    type: seq
    sequence:
      - type: str
  keep_temp_files:
    type: bool
  proxy_ssh:
    type: map
    map:
      enabled:
        type: bool
        required: True
      key:
        type: str
      user:
        type: str
  enable_watchers:
    type: bool
  model_policies_dir:
    type: str
  error_map_path:
    type: str
  feefie:
    type: map
    map:
      client_id:
        type: str
      user_id:
        type: str
  node_key:
    type: str
  config_dir:
    type: str
  backoff_disabled:
    type: bool
  images_directory:
    type: str
  nova:
    type: map
    map:
      enabled:
        type: bool
      ca_ssl_cert:
        type: str
      default_flavor:
        type: str
      default_security_group:
        type: str
