2020-12-16 17:25:24 +08:00

103 lines
3.6 KiB
Python

# -*- coding:utf-8 -*-
# Copyright (c) 2020 Huawei Technologies Co.,Ltd.
#
# openGauss is licensed under Mulan PSL v2.
# You can use this software according to the terms
# and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#
# http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
# ----------------------------------------------------------------------------
import sys
import subprocess
sys.path.append(sys.path[0] + "/../../")
from gspylib.common.ErrorCode import ErrorCode
from gspylib.os.gsplatform import g_Platform
class SysctlInfo:
"""
class: SysctlInfo
"""
def __init__(self):
"""
function: constructor
"""
self.sysctlFile = g_Platform.getSysctlFile()
def GetSysPara(self, paraList):
"""
function : Get system parameters by paraList
input : paraList parameters list
output : para_dict parameters dict
"""
para_dict = {}
fullParaDict = {}
try:
cmd = "'%s' -a" % g_Platform.getSysctlCmd()
(status, output) = subprocess.getstatusoutput(cmd)
if (status != 0):
raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
" Error: \n%s" % str(output))
line_list = output.split('\n')
for line in line_list:
words = line.split('=')
if (len(words) < 2):
continue
fullParaDict[words[0].strip()] = words[1].strip()
# chose para
for para in paraList:
if (para in fullParaDict.keys()):
para_dict[para] = fullParaDict[para]
except Exception as e:
raise Exception(str(e))
return para_dict
def SetSysPara(self, paraDict):
"""
function : Set system parameters by dict
input : paraDict parameters dict
output : null
"""
try:
# write or change configure file
configure_file = self.sysctlFile
with open(configure_file, 'r') as fp:
full_line = fp.readlines()
with open(configure_file, 'w') as fp:
for current_line in full_line:
isFind = False
for key in paraDict.keys():
if current_line.find(key) >= 0 \
and current_line.strip()[0] != '#':
new_line = "#" + current_line
fp.write(current_line.replace(current_line,
new_line))
isFind = True
if not isFind:
fp.write(current_line.replace(current_line,
current_line))
for key in paraDict.keys():
new_line = "\n" + key + " =" + paraDict[key]
fp.write(new_line)
# restart server
cmd = "'%s' -p" % g_Platform.getSysctlCmd()
(status, output) = subprocess.getstatusoutput(cmd)
if status != 0:
raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
" Error: \n%s" % str(output))
except Exception as e:
raise Exception(str(e))
g_sysctl = SysctlInfo()