
# 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.


DEFAULT_VALUES = {
    'xos_dir': '/opt/xos',

    # The configuration below inherits from the standard config of the Python logging module
    # See: https://docs.python.org/2/library/logging.config.html
    # multistructlog supports this config in all of its generality
    # So for instance, you can add new handlers. Note that all handlers will
    # receive logs simultaneously.

    'logging': {
        'version': 1,
        'handlers': {
            'console': {
                'class': 'logging.StreamHandler',
            },
            'file': {
                'class': 'logging.handlers.RotatingFileHandler',
                'filename': '/var/log/xos.log',
                'maxBytes': 10485760,
                'backupCount': 5
            }
        },
        'loggers': {
            '': {
                'handlers': ['console', 'file'],
                'level': 'DEBUG'
            }
        }
    },
    'accessor': {
        'endpoint': 'xos-core.cord.lab:50051',
        'kind': 'grpcapi',
    },
    'keep_temp_files': False,
    'enable_watchers': False,
    'dependency_graph': '/opt/xos/model-deps',
    'error_map_path': '/opt/xos/error_map.txt',
    'feefie': {
        'client_user': 'pl'
    },
    'proxy_ssh': {
        'enabled': True,
        'key': '/opt/cord_profile/node_key',
        'user': 'root'
    },
    'node_key': '/opt/cord_profile/node_key',
    'config_dir': '/etc/xos/sync',
    'backoff_disabled': True
}
