def delUsersFromSudo(delSudoUsers): for delSudoUser in delSudoUsers: rm_user_from_sudo_CMD = Utils.recoverStringByDict( projConst.cmdTemplate['rm_user_from_sudo'], {"USERNAME": delSudoUser,} ) ShellCmdExecutor.executeSync(rm_user_from_sudo_CMD)
def appendUsersToSudo(newSudoUsers): for newSudoUser in newSudoUsers: append_user_to_sudo_CMD = Utils.recoverStringByDict( projConst.cmdTemplate['append_user_to_sudo'], {"USERNAME": newSudoUser,} ) ShellCmdExecutor.executeSync(append_user_to_sudo_CMD)
def addUserWithGroup(users, group): for user in users: add_user_with_group_CMD = Utils.recoverStringByDict( projConst.cmdTemplate['add_user_with_group'], {"USERNAME": user, "GROUP": group,} ) ShellCmdExecutor.executeSync(add_user_with_group_CMD) updateUserPubKeys(user, group)
def _connectionTest(ip, port, sshKeyPath): ssh_test_CMD = Utils.recoverStringByDict( projConst.toolCmdTemplate['ssh_test'], { "PORT": port, "SSHKEYPATH": sshKeyPath, "IP": ip, } ) ShellCmdExecutor.executeSync(ssh_test_CMD, isPrint = True)
def executeShellCmd(data): ip = data['ip'] port = data['port'] sshKeyPath = data['sshKeyPath'] cmd = data['cmd'] ssh_exe_cmd_CMD = Utils.recoverStringByDict( projConst.toolCmdTemplate['ssh_exe_cmd'], { "PORT": port, "SSHKEYPATH": sshKeyPath, "IP": ip, "CMD": cmd, } ) ShellCmdExecutor.executeSync(ssh_exe_cmd_CMD, isPrint = True)
def createBundleToSlave(env, envData): keyBelongsGroups = map(lambda group: group + "_*.pub", DictAddrReader.readByPath("groupList", envData).split(',')) planToShipFiles = keyBelongsGroups + projConst.fileToShip.split(',') findExp = Utils.findExpConstructFromList(planToShipFiles) slaveConfAbsPath = Utils.recoverStringByDict(projConst.confTemplate['slaveConfAbsPath'], {"HOSTSET": env, }) Utils.flushDictToFile( {'env': env, 'envData': envData } , slaveConfAbsPath) pushFileAbsPath = Utils.recoverStringByDict(projConst.confTemplate['pushFileAbsPath'], {"EXPS": findExp, "HOSTSET": env, }) pushFileName = Utils.recoverStringByDict(projConst.confTemplate['pushFileName'], {"HOSTSET": env, }) tar_to_ship_CMD = Utils.recoverStringByDict(projConst.cmdTemplate['tar_to_ship'], {"EXPS": findExp, "FILE": pushFileAbsPath,}) ShellCmdExecutor.executeSync(tar_to_ship_CMD) return (pushFileAbsPath, pushFileName,)
def process(ip, port, sshKeyPath, pushFileAbsPath, pushFileName): scp_file_to_host_CMD = Utils.recoverStringByDict( projConst.cmdTemplate['scp_file_to_host'], {"PORT": port, "SSHKEYPATH": sshKeyPath, "IP": ip, "FILE": pushFileAbsPath,} ) ShellCmdExecutor.executeSync(scp_file_to_host_CMD) slaveCmd_CMD = Utils.recoverStringByDict( projConst.cmdTemplate['slaveCmd'], { "FILE": pushFileName, } ) ssh_with_cmd_CMD = Utils.recoverStringByDict( projConst.cmdTemplate['ssh_with_cmd'], { "PORT": port, "SSHKEYPATH": sshKeyPath, "IP": ip, "CMD": slaveCmd_CMD, } ) print ShellCmdExecutor.executeSync(ssh_with_cmd_CMD)
def main(): groupUserMap = {} # build group -> users mapping for file in os.listdir(projConst.defaultResAbsPathInSlave): match = regexp['match_group_user'].match(file) if not match: continue group = match.group(1) user = match.group(2) if not groupUserMap.get(group, None): groupUserMap[group] = [] groupUserMap[group].append(user) for file in glob.glob(projConst.runtimeTmp + "slaveProj_*.json"): slaveConfigPath = file slaveConfig = Utils.getDictFromFile(slaveConfigPath) groups = DictAddrReader\ .readByPath('envData.groupList', slaveConfig)\ .split(',') for group in groups: add_group_CMD = Utils.recoverStringByDict( projConst.cmdTemplate['add_group'], {"GROUP": group,} ) ShellCmdExecutor.executeSync(add_group_CMD) get_users_in_group_CMD = Utils.recoverStringByDict( projConst.cmdTemplate['get_users_in_group'], {"GROUP": group,} ) usersInSystem = filter(lambda u: len(u) > 0, ShellCmdExecutor.executeSync(get_users_in_group_CMD).rstrip().split(' ')) usersInSystem = set(usersInSystem) targetUsers = set(groupUserMap.get(group, [])) delUsers = list(usersInSystem.difference(targetUsers)) targetUsersList = list(targetUsers) addUserWithGroup(targetUsersList, group) delUser(delUsers) # sudo group process get_users_in_sudo_group_CMD = projConst.cmdTemplate['get_users_in_sudo_group'] sudoUsersInSystem = filter(lambda u: len(u) > 0, ShellCmdExecutor.executeSync(get_users_in_sudo_group_CMD).rstrip().split(' ')) sudoUsersInSystem = set(sudoUsersInSystem) sudoGroups = DictAddrReader\ .readByPath('envData.sudoGroups', slaveConfig)\ .split(',') targetSudoUsers = set() for sudoGroup in sudoGroups: targetSudoUsers = targetSudoUsers.union(set(groupUserMap.get(sudoGroup, []))) newSudoUsers = list(targetSudoUsers.difference(sudoUsersInSystem)) delSudoUsers = list(sudoUsersInSystem.difference(targetSudoUsers)) appendUsersToSudo(newSudoUsers) delUsersFromSudo(delSudoUsers)
def updateUserPubKeys(user, group): update_user_pub_key_CMD = Utils.recoverStringByDict( projConst.cmdTemplate['update_user_pub_key'], {"USERNAME": user, "GROUP": group,} ) ShellCmdExecutor.executeSync(update_user_pub_key_CMD)