virtualbmc/virtualbmc/config.py

101 lines
3.0 KiB
Python

# 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.
import configparser
import os
from virtualbmc import utils
__all__ = ['get_config']
_CONFIG_FILE_PATHS = (
os.environ.get('VIRTUALBMC_CONFIG', ''),
os.path.join(os.path.expanduser('~'), '.vbmc', 'virtualbmc.conf'),
'/etc/virtualbmc/virtualbmc.conf')
CONFIG_FILE = next((x for x in _CONFIG_FILE_PATHS if os.path.exists(x)), '')
CONFIG = None
class VirtualBMCConfig(object):
DEFAULTS = {
'default': {
'show_passwords': 'false',
'config_dir': os.path.join(
os.path.expanduser('~'), '.vbmc'
),
'pid_file': os.path.join(
os.path.expanduser('~'), '.vbmc', 'master.pid'
),
'server_port': 50891,
'server_response_timeout': 5000, # milliseconds
'server_spawn_wait': 3000, # milliseconds
},
'log': {
'logfile': None,
'debug': 'false'
},
'ipmi': {
# Maximum time (in seconds) to wait for the data to come across
'session_timeout': 1
},
}
def initialize(self):
config = configparser.ConfigParser()
config.read(CONFIG_FILE)
self._conf_dict = self._as_dict(config)
self._validate()
def _as_dict(self, config):
conf_dict = self.DEFAULTS
for section in config.sections():
if section not in conf_dict:
conf_dict[section] = {}
for key, val in config.items(section):
conf_dict[section][key] = val
return conf_dict
def _validate(self):
self._conf_dict['log']['debug'] = utils.str2bool(
self._conf_dict['log']['debug'])
self._conf_dict['default']['show_passwords'] = utils.str2bool(
self._conf_dict['default']['show_passwords'])
self._conf_dict['default']['server_port'] = int(
self._conf_dict['default']['server_port'])
self._conf_dict['default']['server_spawn_wait'] = int(
self._conf_dict['default']['server_spawn_wait'])
self._conf_dict['default']['server_response_timeout'] = int(
self._conf_dict['default']['server_response_timeout'])
self._conf_dict['ipmi']['session_timeout'] = int(
self._conf_dict['ipmi']['session_timeout'])
def __getitem__(self, key):
return self._conf_dict[key]
def get_config():
global CONFIG
if CONFIG is None:
CONFIG = VirtualBMCConfig()
CONFIG.initialize()
return CONFIG