om仓迁移
This commit is contained in:
175
script/local/CreatePath.py
Normal file
175
script/local/CreatePath.py
Normal file
@ -0,0 +1,175 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- 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.
|
||||
# ----------------------------------------------------------------------------
|
||||
# Description : CreatePath.py is a utility to create new path.
|
||||
#############################################################################
|
||||
import getopt
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
import pwd
|
||||
import grp
|
||||
|
||||
sys.path.append(sys.path[0] + "/../")
|
||||
from gspylib.common.ErrorCode import ErrorCode
|
||||
from gspylib.common.ParameterParsecheck import Parameter
|
||||
from gspylib.common.Common import DefaultValue
|
||||
|
||||
g_user = ""
|
||||
g_newPath = ""
|
||||
|
||||
|
||||
def exitWithRetCode(retCode, msg=""):
|
||||
"""
|
||||
exit with retcode message
|
||||
"""
|
||||
if (msg != ""):
|
||||
print(msg)
|
||||
sys.exit(retCode)
|
||||
|
||||
|
||||
def usage():
|
||||
"""
|
||||
Usage:
|
||||
python3 CreatePath.py -U user -P newpath
|
||||
Common options:
|
||||
-U the user of old cluster
|
||||
-P the new path need to be created
|
||||
--help show this help, then exit
|
||||
"""
|
||||
print(usage.__doc__)
|
||||
|
||||
|
||||
def parseCommandLine():
|
||||
"""
|
||||
function: Check parameter from command line
|
||||
input : NA
|
||||
output: NA
|
||||
"""
|
||||
try:
|
||||
opts, args = getopt.getopt(sys.argv[1:], "U:P:h", ["help"])
|
||||
except Exception as e:
|
||||
usage()
|
||||
exitWithRetCode(1, ErrorCode.GAUSS_500["GAUSS_50000"] % str(e))
|
||||
|
||||
if (len(args) > 0):
|
||||
exitWithRetCode(1, ErrorCode.GAUSS_500["GAUSS_50000"] % str(args[0]))
|
||||
|
||||
global g_user
|
||||
global g_newPath
|
||||
|
||||
for (key, value) in opts:
|
||||
if (key == "--help" or key == "-h"):
|
||||
usage()
|
||||
exitWithRetCode(0)
|
||||
elif (key == "-U"):
|
||||
g_user = value
|
||||
elif (key == "-P"):
|
||||
g_newPath = value
|
||||
else:
|
||||
exitWithRetCode(1, ErrorCode.GAUSS_500["GAUSS_50000"] % key)
|
||||
Parameter.checkParaVaild(key, value)
|
||||
|
||||
if (g_user == ""):
|
||||
exitWithRetCode(1, ErrorCode.GAUSS_500["GAUSS_50001"] % 'U' + ".")
|
||||
if (g_newPath == ""):
|
||||
exitWithRetCode(1, ErrorCode.GAUSS_500["GAUSS_50001"] % 'P' + ".")
|
||||
if (not os.path.isabs(g_newPath)):
|
||||
exitWithRetCode(1, ErrorCode.GAUSS_502["GAUSS_50213"] % g_newPath)
|
||||
g_newPath = os.path.normpath(g_newPath)
|
||||
|
||||
|
||||
def getTopPathNotExist(topDirPath):
|
||||
"""
|
||||
function: find the top path to be created
|
||||
output: tmpDir
|
||||
"""
|
||||
tmpDir = topDirPath
|
||||
while True:
|
||||
# find the top path to be created
|
||||
(tmpDir, topDirName) = os.path.split(tmpDir)
|
||||
if (os.path.exists(tmpDir) or topDirName == ""):
|
||||
tmpDir = os.path.join(tmpDir, topDirName)
|
||||
break
|
||||
return tmpDir
|
||||
|
||||
|
||||
def createPathUnderRoot(newPath, user):
|
||||
"""
|
||||
create path using root user
|
||||
this function only can be called by root, and user should be exist
|
||||
input : newPath, user
|
||||
output: NA
|
||||
"""
|
||||
# get group information
|
||||
try:
|
||||
DefaultValue.getUserId(user)
|
||||
except Exception as e:
|
||||
exitWithRetCode(1, str(e))
|
||||
groupInfo = grp.getgrgid(pwd.getpwnam(user).pw_gid).gr_name
|
||||
|
||||
# check and create new path
|
||||
ownerPath = newPath
|
||||
newPathExistAlready = True
|
||||
if (not os.path.exists(ownerPath)):
|
||||
newPathExistAlready = False
|
||||
ownerPath = getTopPathNotExist(ownerPath)
|
||||
# create newPath
|
||||
cmd = "(if [ ! -d '%s' ]; then mkdir -p '%s' -m %s;fi)" \
|
||||
% (newPath, newPath, DefaultValue.KEY_DIRECTORY_MODE)
|
||||
(status, output) = subprocess.getstatusoutput(cmd)
|
||||
if (status != 0):
|
||||
msg = "Cmd:%s\noutput:%s" % (cmd, output)
|
||||
exitWithRetCode(1, msg)
|
||||
# give permissions to the directory ownerPath
|
||||
if not newPathExistAlready:
|
||||
cmd = "chown -R %s:%s '%s' && chmod -R %s '%s'" \
|
||||
% (user, groupInfo, ownerPath,
|
||||
DefaultValue.KEY_DIRECTORY_MODE, ownerPath)
|
||||
else:
|
||||
cmd = "chown %s:%s '%s' && chmod %s '%s'" \
|
||||
% (user, groupInfo, ownerPath,
|
||||
DefaultValue.KEY_DIRECTORY_MODE, ownerPath)
|
||||
(status, output) = subprocess.getstatusoutput(cmd)
|
||||
if (status != 0):
|
||||
msg = "Cmd:%s\noutput:%s" % (cmd, output)
|
||||
exitWithRetCode(1, msg)
|
||||
|
||||
# check enter permission
|
||||
cmd = "su - %s -c 'cd %s'" % (user, newPath)
|
||||
(status, output) = subprocess.getstatusoutput(cmd)
|
||||
if (status != 0):
|
||||
msg = "Cmd:%s\noutput:%s" % (cmd, output)
|
||||
exitWithRetCode(1, msg)
|
||||
|
||||
# create new path succeed, return 0
|
||||
exitWithRetCode(0, "Successfully created new path.")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
"""
|
||||
main function
|
||||
"""
|
||||
# check precondition
|
||||
if (os.getuid() != 0):
|
||||
exitWithRetCode(1, ErrorCode.GAUSS_501["GAUSS_50104"])
|
||||
try:
|
||||
parseCommandLine()
|
||||
createPathUnderRoot(g_newPath, g_user)
|
||||
except Exception as e:
|
||||
exitWithRetCode(1, str(e))
|
Reference in New Issue
Block a user