Added projects python file
This commit is contained in:
145
BigDataManager.py
Normal file
145
BigDataManager.py
Normal file
@ -0,0 +1,145 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Created on Mon Mar 26 15:19:46 2018
|
||||
|
||||
@author: techrunner
|
||||
This is a small piece of software writen to help manage the big data cluster
|
||||
This program is for use with the UMHB big data cluster
|
||||
It is not perfect but it will get some things done quickly
|
||||
"""
|
||||
import os
|
||||
import json
|
||||
|
||||
class Manager:
|
||||
def __init__(self):
|
||||
try:
|
||||
file = open('bigdata.json','r')
|
||||
self.configs = json.load(file)
|
||||
except:
|
||||
file = open('.bigdata.cfg','w+')
|
||||
config = {
|
||||
'host':'10.14.20.75',
|
||||
'ports':'2222-2225',
|
||||
'admin':'root',
|
||||
'admin_password':'adminuser',
|
||||
'username':'biguser',
|
||||
'password':'biguser',
|
||||
'amount':15,
|
||||
'groups':'BigData'
|
||||
}
|
||||
json.dump(config, file)
|
||||
self.configs = config
|
||||
|
||||
|
||||
def get_ports(self):
|
||||
"""Gets ports from configs and outputs a list"""
|
||||
plist = []
|
||||
if '-' in self.configs['ports']:
|
||||
ports = self.configs['ports'].split('-')
|
||||
for port in range(int(ports[0]),(int(ports[1])+1)):
|
||||
plist.append(port)
|
||||
else:
|
||||
ports = self.configs['ports'].split(',')
|
||||
for x in range(len(ports)):
|
||||
plist.append(int(ports[x]))
|
||||
return plist
|
||||
|
||||
def get_groups(self):
|
||||
"""Get groups from config list and output a string with all groups"""
|
||||
group_string = ''
|
||||
if ',' in self.configs['groups']:
|
||||
groups = self.configs['groups'].split(',')
|
||||
for x in range(len(groups)):
|
||||
if x == 0:
|
||||
group_string = groups[x]+','
|
||||
elif x == len(groups):
|
||||
group_string += groups[x]
|
||||
else:
|
||||
group_string += groups[x]+','
|
||||
return group_string
|
||||
else:
|
||||
return self.configs['groups']
|
||||
|
||||
def get_users(self):
|
||||
"""Get user list from configs dictionary and output a list"""
|
||||
if ',' in self.configs['username']:
|
||||
users = self.configs['username'].split(',')
|
||||
elif self.configs['amount'] > 0 and not ',' in self.configs['username']:
|
||||
users = []
|
||||
for x in range(int(self.configs['amount'])+1):
|
||||
users.append(self.configs['username']+str(x).zfill(2))
|
||||
return users
|
||||
|
||||
def create_users(self):
|
||||
"""Create user accounts for students"""
|
||||
users = self.get_users()
|
||||
groups = self.get_groups()
|
||||
for user in users:
|
||||
self.send(f'useradd -m -G {groups} {user}')
|
||||
|
||||
def create_groups(self):
|
||||
"""Create groups on virtual hosts"""
|
||||
groups = self.get_groups().split(',')
|
||||
for x in groups:
|
||||
self.self.send(f'groupadd {x}')
|
||||
|
||||
def delete_groups(self):
|
||||
"""Detete all groups that are in configs"""
|
||||
groups = self.get_groups().split(',')
|
||||
for x in groups:
|
||||
self.send(f'groupdel {x}')
|
||||
|
||||
def create_hadoop(self):
|
||||
"""Create Hadoop Space for users on VM's"""
|
||||
users = self.get_users()
|
||||
for x in users:
|
||||
self.send(f'mkdir -p /user/{x}')
|
||||
|
||||
def delete_hadoop(self):
|
||||
"""Delete Hadoop Space for users on VM's"""
|
||||
users = self.get_users()
|
||||
for x in users:
|
||||
self.send(f'rm -r /usr/{x}')
|
||||
|
||||
def add_passwords(self):
|
||||
passwords = self.get_users()
|
||||
for x in passwords:
|
||||
self.send(f'(echo {x}; echo {x})| passwd {x}')
|
||||
|
||||
|
||||
def send(self, command):
|
||||
"""Send command to servers using ssh"""
|
||||
if command.startswith('ls'):
|
||||
command = f'pwd && ls{command[2:]}'
|
||||
ports = self.get_ports()
|
||||
computer = 1
|
||||
for x in ports:
|
||||
print(f'{computer:*^10}')
|
||||
print(os.popen(f'ssh -p {x} {self.configs["admin"]}@{self.configs["host"]} \'{command}\'').read())
|
||||
computer += 1
|
||||
|
||||
def main(self):
|
||||
"""Run program"""
|
||||
while True:
|
||||
print('Would you like to do?\n1. Edit Configs\n2. Make Groups\n3. Make Users\n4. Make Hadoop Spaces\n5. Send command\n-1: Exit', end='')
|
||||
user_input = input(': ')
|
||||
commands = {'1':self.create_hadoop,
|
||||
'2':self.create_groups,
|
||||
'3':self.create_users,
|
||||
'4':self.create_hadoop,
|
||||
'5':self.send
|
||||
}
|
||||
if user_input == '5':
|
||||
command = input('$: ')
|
||||
commands['5'](command)
|
||||
elif user_input == '-1':
|
||||
break
|
||||
elif user_input in '123456789010-1':
|
||||
commands[user_input]()
|
||||
else:
|
||||
print(f'\n\n{"Invalid Command":*^40}\n\n')
|
||||
|
||||
if __name__ == '__main__':
|
||||
BD = Manager()
|
||||
BD.main()
|
||||
Reference in New Issue
Block a user