Source code for openlmi.storage.StorageConfiguration
# Copyright (C) 2012 Red Hat, Inc. All rights reserved.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
# Authors: Jan Safranek <jsafrane@redhat.com>
# -*- coding: utf-8 -*-
""""
Module for StorageConfiguration class.
StorageConfiguration
--------------------
.. autoclass:: StorageConfiguration
:members:
"""
import ConfigParser
import socket
import openlmi.common.cmpi_logging as cmpi_logging
[docs]class StorageConfiguration(object):
"""
OpenLMI configuration file. By default, it resides in
/etc/openlmi/storage/storage.conf.
There should be only one instance of this class.
"""
CONFIG_PATH = '/etc/openlmi/storage/'
CONFIG_FILE = CONFIG_PATH + 'storage.conf'
PERSISTENT_PATH = '/var/lib/openlmi-storage/'
SETTINGS_DIR = 'settings/'
defaults = {
'Namespace' : 'root/cimv2',
'SystemClassName' : 'Linux_ComputerSystem',
'Debug': 'false',
'DebugBlivet': 'false',
'Stderr': 'false',
}
@cmpi_logging.trace_method
[docs] def __init__(self):
""" Initialize and load a configuration file."""
self._listeners = set()
self.config = ConfigParser.SafeConfigParser(defaults=self.defaults)
self.load()
@cmpi_logging.trace_method
[docs] def add_listener(self, callback):
"""
Add a callback, which will be called when configuration is updated.
The callback will be called with StorageConfiguration as parameter:
callback(config)
"""
self._listeners.add(callback)
@cmpi_logging.trace_method
[docs] def remove_listener(self, callback):
"""
Remove previously registered callback.
"""
self._listeners.remove(callback)
@cmpi_logging.trace_method
def _call_listeners(self):
"""
Call all listeners that configuration has updated.
"""
for callback in self._listeners:
callback(self)
@cmpi_logging.trace_method
[docs] def load(self):
"""
Load configuration from CONFIG_FILE. The file does not need to
exist.
"""
self.config.read(self.CONFIG_FILE)
if not self.config.has_section('CIM'):
self.config.add_section('CIM')
if not self.config.has_section('Log'):
self.config.add_section('Log')
self._call_listeners()
@property
[docs] def namespace(self):
""" Return namespace of OpenLMI storage provider."""
return self.config.get('CIM', 'Namespace')
@property
[docs] def system_class_name(self):
""" Return SystemClassName of OpenLMI storage provider."""
return self.config.get('CIM', 'SystemClassName')
@property
[docs] def system_name(self):
""" Return SystemName of OpenLMI storage provider."""
return socket.getfqdn()
@property
[docs] def tracing(self):
""" Return True if tracing is enabled."""
return self.config.getboolean('Log', 'Debug')
@property
[docs] def blivet_tracing(self):
""" Return True if blivet tracing is enabled."""
return self.config.getboolean('Log', 'DebugBlivet')
@property
[docs] def stderr(self):
""" Return True if logging to stderr is enabled."""
return self.config.getboolean('Log', 'Stderr')