Files

289 lines
8.2 KiB
Python

###
# Copyright 2016-2021 Hewlett Packard Enterprise, Inc. All rights reserved.
#
# 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.
###
# -*- coding: utf-8 -*-
"""Rdmc config"""
import os
import json
try:
from config.config import AutoConfigParser
from logging_config_path import get_logging_config_path
except ImportError:
from ilorest.config.config import AutoConfigParser
from ilorest.logging_config_path import get_logging_config_path
class RdmcConfig(AutoConfigParser):
"""Rdmc config class for loading and parsing the .conf file global configuration options.
Uses the AutoConfigParser."""
def _load_logdir_from_json(self):
"""Load logdir from logging configuration JSON file.
:returns: logdir path from JSON config, or current directory as fallback
:rtype: str
"""
config_path = get_logging_config_path()
try:
if os.path.isfile(config_path):
with open(config_path, "r", encoding="utf-8") as f:
config = json.load(f)
handlers = config.get("handlers", {})
file_handler = handlers.get("file", {})
filename = file_handler.get("filename", "")
if "%(logdir)s" in filename:
logdir = file_handler.get("filename").split("%(logdir)s")[0].rstrip("/\\")
return logdir if logdir else os.getcwd()
else:
# If filename does not contain %(logdir)s, extract directory from filename
return os.path.dirname(filename) if os.path.dirname(filename) else os.getcwd()
except Exception:
pass
# Fallback to current working directory if any issues
return os.getcwd()
def __init__(self, filename=None):
"""Initialize RdmcConfig
:param filename: file name to be used for Rdmcconfig loading.
:type filename: str
"""
AutoConfigParser.__init__(self, filename=filename)
self._sectionname = "redfish"
self._configfile = filename
self._ac__logdir = self._load_logdir_from_json()
self._ac__cache = True
self._ac__url = ""
self._ac__username = ""
self._ac__password = ""
self._ac__sslcert = ""
self._ac__commit = ""
self._ac__format = ""
self._ac__cachedir = ""
self._ac__savefile = ""
self._ac__loadfile = ""
self._ac__user_cert = ""
self._ac__user_root_ca_key = ""
self._ac__user_root_ca_password = ""
@property
def configfile(self):
"""The current configuration file"""
return self._configfile
@configfile.setter
def configfile(self, config_file):
"""Set the current configuration file
:param config_file: file name to be used for Rmcconfig loading.
:type config_file: str
"""
self._configfile = config_file
@property
def logdir(self):
"""Get the current log directory"""
return self._get("logdir")
@logdir.setter
def logdir(self, value):
"""Set the current log directory
:param value: current working directory for logging
:type value: str
"""
return self._set("logdir", value)
@property
def cache(self):
"""Get the config file cache status"""
if isinstance(self._get("cache"), bool):
return self._get("cache")
return self._get("cache").lower() in ("yes", "true", "t", "1")
@cache.setter
def cache(self, value):
"""Get the config file cache status
:param value: status of config file cache
:type value: bool
"""
return self._set("cache", value)
@property
def url(self):
"""Get the config file URL"""
url = self._get("url")
url = url[:-1] if url.endswith("/") else url
return url
@url.setter
def url(self, value):
"""Set the config file URL
:param value: URL path for the config file
:type value: str
"""
return self._set("url", value)
@property
def username(self):
"""Get the config file user name"""
return self._get("username")
@username.setter
def username(self, value):
"""Set the config file user name
:param value: user name for config file
:type value: str
"""
return self._set("username", value)
@property
def password(self):
"""Get the config file password"""
return self._get("password")
@password.setter
def password(self, value):
"""Set the config file password
:param value: password for config file
:type value: str
"""
return self._set("password", value)
@property
def commit(self):
"""Get the config file commit status"""
return self._get("commit")
@commit.setter
def commit(self, value):
"""Set the config file commit status
:param value: commit status
:type value: str
"""
return self._set("commit", value)
@property
def format(self):
"""Get the config file default format"""
return self._get("format")
@format.setter
def format(self, value):
"""Set the config file default format
:param value: set the config file format
:type value: str
"""
return self._set("format", value)
@property
def cachedir(self):
"""Get the config file cache directory"""
return self._get("cachedir")
@cachedir.setter
def cachedir(self, value):
"""Set the config file cache directory
:param value: config file cache directory
:type value: str
"""
return self._set("cachedir", value)
@property
def defaultsavefilename(self):
"""Get the config file default save name"""
return self._get("savefile")
@defaultsavefilename.setter
def defaultsavefilename(self, value):
"""Set the config file default save name
:param value: config file save name
:type value: str
"""
return self._set("savefile", value)
@property
def defaultloadfilename(self):
"""Get the config file default load name"""
return self._get("loadfile")
@defaultloadfilename.setter
def defaultloadfilename(self, value):
"""Set the config file default load name
:param value: name of config file to load by default
:type value: str
"""
return self._set("loadfile", value)
@property
def proxy(self):
"""Get proxy value to be set for communication"""
return self._get("proxy")
@proxy.setter
def proxy(self, value):
"""Set proxy value for communication"""
return self._set("proxy", value)
@property
def ssl_cert(self):
"""Get proxy value to be set for communication"""
return self._get("sslcert")
@ssl_cert.setter
def ssl_cert(self, value):
"""Set proxy value for communication"""
return self._set("sslcert", value)
@property
def user_cert(self):
return self._get("usercert")
@user_cert.setter
def user_cert(self, value):
return self._set("usercert", value)
@property
def user_root_ca_key(self):
return self._get("user_root_ca_key")
@user_root_ca_key.setter
def user_root_ca_key(self, value):
return self._set("user_root_ca_key", value)
@property
def user_root_ca_password(self):
return self._get("user_root_ca_password")
@user_root_ca_password.setter
def user_root_ca_password(self, value):
return self._set("user_root_ca_password", value)