Forked from
DM / dm-docs
261 commits behind, 821 commits ahead of the upstream repository.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
linuxUtility.py 4.14 KiB
#!/usr/bin/env python
import grp
from dm.common.utility.loggingManager import LoggingManager
from dmSubprocess import DmSubprocess
class LinuxUtility:
SUDO_CMD = '/usr/bin/sudo'
GROUPADD_CMD = '/usr/sbin/groupadd'
USERMOD_CMD = '/usr/sbin/usermod'
SETFACL_CMD = '/usr/bin/setfacl'
CHOWN_CMD = '/bin/chown'
GPASSWD_CMD = '/usr/bin/gpasswd'
FIND_CMD = '/bin/find'
@classmethod
def getLogger(cls):
logger = LoggingManager.getInstance().getLogger(cls.__name__)
return logger
@classmethod
def executeSudoCommand(cls, cmd):
p = DmSubprocess('%s %s' % (cls.SUDO_CMD, cmd))
p.run()
@classmethod
def executeCommand(cls, cmd):
p = DmSubprocess('%s' % (cmd))
p.run()
@classmethod
def createGroup(cls, name):
""" Create group if it does not exist. """
logger = cls.getLogger()
try:
group = grp.getgrnam(name)
logger.debug('Group %s already exists' % name)
return
except KeyError, ex:
# ok, we need to create group
pass
logger.debug('Creating group %s' % name)
cmd = '%s %s' % (cls.GROUPADD_CMD, name)
cls.executeSudoCommand(cmd)
@classmethod
def addUserToGroup(cls, username, groupName):
""" Add user to group. """
logger = cls.getLogger()
logger.debug('Adding user %s to group %s' % (username, groupName))
cmd = '%s -a -G %s %s' % (cls.USERMOD_CMD, groupName, username)
cls.executeSudoCommand(cmd)
@classmethod
def addLocalUserToGroup(cls, username, groupName):
""" Add local user to group. """
logger = cls.getLogger()
logger.debug('Adding local user %s to group %s' % (username, groupName))
cmd = '%s -a %s %s' % (cls.GPASSWD_CMD, username, groupName)
cls.executeSudoCommand(cmd)
@classmethod
def deleteLocalUserFromGroup(cls, username, groupName):
""" Remove local user from group. """
logger = cls.getLogger()
logger.debug('Removing local user %s from group %s' % (username, groupName))
cmd = '%s -d %s %s' % (cls.GPASSWD_CMD, username, groupName)
cls.executeSudoCommand(cmd)
@classmethod
def setGroupUsers(cls, groupName, usernameList):
""" Set list of users for a given group. """
logger = cls.getLogger()
logger.debug('Setting group %s users to: %s' % (groupName, usernameList))
cmd = '%s -M "%s" %s' % (cls.GPASSWD_CMD, ','.join(usernameList), groupName)
cls.executeSudoCommand(cmd)
@classmethod
def setPathReadExecutePermissionsForGroup(cls, path, groupName):
""" Set path permissions for the given group. """
logger = cls.getLogger()
logger.debug('Allowing group %s to read/execute path %s' % (groupName, path))
cmd = '%s -m group\:%s\:rx "%s"' % (cls.SETFACL_CMD, groupName, path)
cls.executeSudoCommand(cmd)
@classmethod
def changePathGroupOwner(cls, path, groupName):
logger = cls.getLogger()
logger.debug('Changing group owner to %s for path %s' % (groupName, path))
cmd = '%s \:%s "%s"' % (cls.CHOWN_CMD, groupName, path)
cls.executeSudoCommand(cmd)
@classmethod
def recursivelyChangePathGroupOwner(cls, path, groupName):
logger = cls.getLogger()
logger.debug('Recursively changing group owner to %s for path %s' % (groupName, path))
cmd = '%s -R \:%s "%s"' % (cls.CHOWN_CMD, groupName, path)
cls.executeSudoCommand(cmd)
@classmethod
def chmodPathForFilesInDirectory(cls, directoryPath, fileMode):
logger = cls.getLogger()
logger.debug('Modifying permissions for all files in directory %s to %s' % (directoryPath, fileMode))
cmd = '%s %s -type f -exec chmod %s {} \;' % (cls.FIND_CMD, directoryPath, fileMode)
cls.executeCommand(cmd)
#######################################################################
# Testing.
if __name__ == '__main__':
LinuxUtility.createGroup('exp3')
LinuxUtility.addUserToGroup('hpc', 'exp3')
LinuxUtility.setPathReadExecutePermissionsForGroup('/home/sveseli/Work/DM/data/ESAF/exp3', 'exp3')