simplifying stuff by removing the journal
This commit is contained in:
parent
f8d7b32d0f
commit
db5225b11d
7 changed files with 32 additions and 98 deletions
|
@ -33,7 +33,7 @@ def validate(vmname, srvpass):
|
||||||
""" return vmid or false if credentials match something in clientdb. useful for authing extrnal admin panels """
|
""" return vmid or false if credentials match something in clientdb. useful for authing extrnal admin panels """
|
||||||
try:
|
try:
|
||||||
clientsdb = readclientsdb()
|
clientsdb = readclientsdb()
|
||||||
path = utils.find_key(clientsdb, vmname)
|
path = utils.get_path(clientsdb, vmname)
|
||||||
c_id = str(path[0])
|
c_id = str(path[0])
|
||||||
v_id = str(path[1])
|
v_id = str(path[1])
|
||||||
#check the returned path with forward query
|
#check the returned path with forward query
|
||||||
|
@ -63,7 +63,7 @@ def validate(vmname, srvpass):
|
||||||
response = { 'vpsid':v_id, 'ticket':generated_ticket }
|
response = { 'vpsid':v_id, 'ticket':generated_ticket }
|
||||||
return response
|
return response
|
||||||
else:
|
else:
|
||||||
ioconfig.logger.warning('clients> {} (clientid: {}, vmid: {}) ACCESS DENIED!'.format(query, c_id, v_id)
|
ioconfig.logger.warning('clients> {} (clientid: {}, vmid: {}) ACCESS DENIED!'.format(query, c_id, v_id))
|
||||||
#cant compare password
|
#cant compare password
|
||||||
return None
|
return None
|
||||||
return None
|
return None
|
||||||
|
@ -78,7 +78,7 @@ def setencpasswd(vmname, newpass):
|
||||||
try:
|
try:
|
||||||
clientsdb = readclientsdb()
|
clientsdb = readclientsdb()
|
||||||
#print(clientsdb)
|
#print(clientsdb)
|
||||||
path = utils.find_key(clientsdb, vmname)
|
path = utils.get_path(clientsdb, vmname)
|
||||||
#print(path)
|
#print(path)
|
||||||
c_id = str(path[0])
|
c_id = str(path[0])
|
||||||
v_id = str(path[1])
|
v_id = str(path[1])
|
||||||
|
@ -100,7 +100,7 @@ def vmowner(vmid, vmname, verbose):
|
||||||
""" find the owner of the vm """
|
""" find the owner of the vm """
|
||||||
clientsdb = readclientsdb()
|
clientsdb = readclientsdb()
|
||||||
try:
|
try:
|
||||||
clientid = utils.get_rec(clientsdb, str(vmid))[0]['ownerid']
|
clientid = utils.find_rec(clientsdb, str(vmid))[0]['ownerid']
|
||||||
clientname = clientsdb[str(clientid)]['name']
|
clientname = clientsdb[str(clientid)]['name']
|
||||||
except:
|
except:
|
||||||
raise
|
raise
|
||||||
|
|
|
@ -16,13 +16,13 @@ ipv4_min = 192.168.0.4
|
||||||
ipv4_max = 192.168.0.254
|
ipv4_max = 192.168.0.254
|
||||||
|
|
||||||
[slave_0]
|
[slave_0]
|
||||||
name = CHANGEME
|
name = host.0CHANGEME
|
||||||
masterip = 192.168.0.2
|
masterip = 192.168.0.2
|
||||||
password = CHANGEME
|
password = CHANGEME
|
||||||
regionid = 0
|
regionid = 0
|
||||||
|
|
||||||
[slave_1]
|
[slave_1]
|
||||||
name = CHANGEME
|
name = host1.CHANGEME
|
||||||
masterip = 192.168.0.3
|
masterip = 192.168.0.3
|
||||||
password = CHANGEME
|
password = CHANGEME
|
||||||
regionid = 0
|
regionid = 0
|
||||||
|
|
32
grid.py
32
grid.py
|
@ -15,7 +15,6 @@ import utils
|
||||||
import plugin
|
import plugin
|
||||||
import ioconfig
|
import ioconfig
|
||||||
import clientsdb
|
import clientsdb
|
||||||
import journaldb
|
|
||||||
|
|
||||||
logger = ioconfig.logger
|
logger = ioconfig.logger
|
||||||
config = ioconfig.parser
|
config = ioconfig.parser
|
||||||
|
@ -218,7 +217,7 @@ def generate_ipv4(region_id, how_many=1):
|
||||||
ip_max = len(region_ips) - 1
|
ip_max = len(region_ips) - 1
|
||||||
tested_ips = [] #initialize ip cache
|
tested_ips = [] #initialize ip cache
|
||||||
requested_ips = []
|
requested_ips = []
|
||||||
all_ips = utils.get_rec(grid_data, 'ipaddr')
|
all_ips = utils.find_rec(grid_data, 'ipaddr')
|
||||||
|
|
||||||
for ips in range(int(how_many)):
|
for ips in range(int(how_many)):
|
||||||
counter = 0
|
counter = 0
|
||||||
|
@ -262,7 +261,7 @@ def generate_vmid():
|
||||||
tested_vmids = [] #initialize id cache
|
tested_vmids = [] #initialize id cache
|
||||||
id_min = grid_data['vmid_min']
|
id_min = grid_data['vmid_min']
|
||||||
id_max = grid_data['vmid_max']
|
id_max = grid_data['vmid_max']
|
||||||
all_vmid = utils.get_rec(grid_data, 'vmid') #get all vmid values from the nested grid
|
all_vmid = utils.find_rec(grid_data, 'vmid') #get all vmid values from the nested grid
|
||||||
all_vmid = [ int(x) for x in all_vmid ] #convert values from str to int (its a vmid right?)
|
all_vmid = [ int(x) for x in all_vmid ] #convert values from str to int (its a vmid right?)
|
||||||
counter = 0
|
counter = 0
|
||||||
while True:
|
while True:
|
||||||
|
@ -318,27 +317,33 @@ def query_vm(req_vmid):
|
||||||
sync(False)
|
sync(False)
|
||||||
grid_data = readreal()
|
grid_data = readreal()
|
||||||
|
|
||||||
#compare requested vmid to all vmid's from the grid
|
#search for the requested vmid
|
||||||
#TODO: maybe we should also check the owner somehow
|
#TODO: maybe we should also check if the owner has permissions to manage it,
|
||||||
all_vmid = utils.get_rec(grid_data, 'vmid')
|
###### if for some reason the admin panel is compromised.
|
||||||
|
all_vmid = utils.find_rec(grid_data, 'vmid')
|
||||||
target = int(0)
|
target = int(0)
|
||||||
for running_vmid in all_vmid:
|
for running_vmid in all_vmid:
|
||||||
if str(req_vmid) == str(running_vmid):
|
if str(req_vmid) == str(running_vmid):
|
||||||
target = req_vmid #=runn?
|
target = running_vmid
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
if target == 0:
|
if target == 0:
|
||||||
logger.error('grid> vmid {} cannot be found.' + str(req_vmid))
|
logger.error('grid> vmid {} cannot be found!' + str(req_vmid))
|
||||||
return "-1"
|
return int(-1), "None"
|
||||||
|
|
||||||
|
path = utils.get_path(grid_data, target)
|
||||||
|
region_id = path[0]
|
||||||
|
slave_id = path[1]
|
||||||
|
|
||||||
region_id, slave_id = journaldb.getjnode(target)
|
|
||||||
try:
|
try:
|
||||||
vm_type = grid_data[str(region_id)][str(slave_id)][str(target)]['type']
|
vm_type = grid_data[str(region_id)][str(slave_id)][str(target)]['type']
|
||||||
except:
|
except:
|
||||||
|
logger.error('{}> type is unknown!'.format(vm_id))
|
||||||
raise
|
raise
|
||||||
|
|
||||||
#we should know them by now.
|
logger.info('{}> region={}, slave={}, type={} found.'.format(target, region_id, slave_id, vm_type))
|
||||||
|
|
||||||
return slave_id, vm_type
|
return slave_id, vm_type
|
||||||
|
|
||||||
|
|
||||||
|
@ -386,11 +391,12 @@ def readreal():
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
print(sync())
|
#print(sync())
|
||||||
#print(query_region('Plovdiv, Bulgaria'))
|
#print(query_region('Plovdiv, Bulgaria'))
|
||||||
#print(query_happiness(0))
|
#print(query_happiness(0))
|
||||||
#print(generate_ipv4(0,3))
|
#print(generate_ipv4(0,3))
|
||||||
#print(generate_vmid())
|
#print(generate_vmid())
|
||||||
#print(query_slave_data(0))
|
#print(query_slave_data(0))
|
||||||
#print(query_vm(483039))
|
print(query_vm(483039))
|
||||||
|
print(query_vm(147344))
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
|
|
||||||
#TODO: scan for all jsons and rewrite them.
|
#TODO: scan for all jsons and rewrite them.
|
||||||
echo " "
|
echo " "
|
||||||
echo "JOURNAL:"
|
echo "GRID:"
|
||||||
cat journal.json | python3 -m json.tool
|
cat grid-real.json | python3 -m json.tool
|
||||||
echo " "
|
echo " "
|
||||||
echo "CLIENTS:"
|
echo "CLIENTS:"
|
||||||
cat clients.json | python3 -m json.tool
|
cat clients.json | python3 -m json.tool
|
||||||
|
|
70
journaldb.py
70
journaldb.py
|
@ -1,70 +0,0 @@
|
||||||
# -*- coding: utf-8
|
|
||||||
#
|
|
||||||
# manage journaldb.json which is a table of vmid's as indexes update on vmcreate and
|
|
||||||
# values of region_id and slave_id. should support deletion of unused id's and be
|
|
||||||
# properly updated on vm migrations
|
|
||||||
|
|
||||||
#site
|
|
||||||
import json
|
|
||||||
|
|
||||||
#local
|
|
||||||
import ioconfig
|
|
||||||
import utils
|
|
||||||
|
|
||||||
def createjnode(vmid, regionid, slaveid, vmpasswd):
|
|
||||||
""" create new record into the journal. invoked on vm creation """
|
|
||||||
journaldb = readjournal()
|
|
||||||
if str(vmid) in journaldb:
|
|
||||||
ioconfig.logger.warning('journal> overwriting id[{}] !'.format(vmid))
|
|
||||||
else:
|
|
||||||
jnode = { str(vmid):{} }
|
|
||||||
journaldb.update(jnode)
|
|
||||||
|
|
||||||
ioconfig.logger.info ('journal> write: r[{}]s[{}]id[{}] => {}'.format(regionid, slaveid, vmid, vmpasswd))
|
|
||||||
jdata = { 'vmid':str(vmid), 'slaveid':str(slaveid), 'regionid':str(regionid), 'passwd':str(vmpasswd) }
|
|
||||||
journaldb[str(vmid)] = jdata
|
|
||||||
writedb(journaldb)
|
|
||||||
|
|
||||||
|
|
||||||
def getjnode(vmid):
|
|
||||||
""" query the database for records with requested vmid. invoked on user commands """
|
|
||||||
journaldb = readjournal()
|
|
||||||
try:
|
|
||||||
regionid = journaldb[str(vmid)]['regionid']
|
|
||||||
slaveid = journaldb[str(vmid)]['slaveid']
|
|
||||||
ioconfig.logger.info('journal> read: id[{}] => r[{}]s[{}]'.format(vmid, regionid, slaveid))
|
|
||||||
except:
|
|
||||||
ioconfig.logger.error('journal> invalid id[{}] !'.format(vmid))
|
|
||||||
else:
|
|
||||||
return regionid, slaveid
|
|
||||||
|
|
||||||
def getpass(vmid):
|
|
||||||
""" query the database for the recorded vmid password. """
|
|
||||||
journaldb = readjournal()
|
|
||||||
try:
|
|
||||||
vmpasswd = journaldb[str(vmid)]['passwd']
|
|
||||||
ioconfig.logger.info('journal> read: id[{}] => {}'.format(vmid, vmpasswd))
|
|
||||||
except:
|
|
||||||
ioconfig.logger.error('journal> invalid id[{}] !'.format(vmid))
|
|
||||||
|
|
||||||
else:
|
|
||||||
return vmpasswd
|
|
||||||
|
|
||||||
def readjournal():
|
|
||||||
""" read journal """
|
|
||||||
try:
|
|
||||||
with open('journal.json') as dbr:
|
|
||||||
journaldb = json.load(dbr)
|
|
||||||
dbr.close()
|
|
||||||
except:
|
|
||||||
journaldb = {}
|
|
||||||
ioconfig.logger.warning('journal> initializing...')
|
|
||||||
return journaldb
|
|
||||||
|
|
||||||
|
|
||||||
def writedb(journaldb):
|
|
||||||
""" write journal """
|
|
||||||
with open('journal.json', 'w') as dbw:
|
|
||||||
json.dump(journaldb, dbw)
|
|
||||||
dbw.close()
|
|
||||||
|
|
|
@ -13,7 +13,6 @@ import socket
|
||||||
#local
|
#local
|
||||||
import grid
|
import grid
|
||||||
import clientsdb
|
import clientsdb
|
||||||
import journaldb
|
|
||||||
import utils
|
import utils
|
||||||
import ioconfig
|
import ioconfig
|
||||||
import novnc
|
import novnc
|
||||||
|
@ -116,12 +115,11 @@ def vmcreate(req):
|
||||||
onboot=1,
|
onboot=1,
|
||||||
description=description)
|
description=description)
|
||||||
|
|
||||||
#populate the client db and vm journal
|
#populate the client db
|
||||||
client_id = req['clientid']
|
client_id = req['clientid']
|
||||||
client_name = req['clientname']
|
client_name = req['clientname']
|
||||||
srv_pass = req['password']
|
srv_pass = req['password']
|
||||||
clientsdb.addclient(vm_id, vm_name, client_id, client_name, srv_pass)
|
clientsdb.addclient(vm_id, vm_name, client_id, client_name, srv_pass)
|
||||||
journaldb.createjnode(vm_id, region_id, slave_id)
|
|
||||||
|
|
||||||
#start the machihe
|
#start the machihe
|
||||||
time.sleep(7) #wait few seconds for the slave to prepare the machine for initial run
|
time.sleep(7) #wait few seconds for the slave to prepare the machine for initial run
|
||||||
|
|
8
utils.py
8
utils.py
|
@ -24,7 +24,7 @@ def dict_merge(target, *args):
|
||||||
target[k] = deepcopy(v)
|
target[k] = deepcopy(v)
|
||||||
return target
|
return target
|
||||||
|
|
||||||
def get_rec(search_dict, field):
|
def find_rec(search_dict, field):
|
||||||
"""
|
"""
|
||||||
Takes a dict with nested lists and dicts,
|
Takes a dict with nested lists and dicts,
|
||||||
and searches all dicts for a key of the field
|
and searches all dicts for a key of the field
|
||||||
|
@ -37,7 +37,7 @@ def get_rec(search_dict, field):
|
||||||
fields_found.append(value)
|
fields_found.append(value)
|
||||||
|
|
||||||
elif isinstance(value, dict):
|
elif isinstance(value, dict):
|
||||||
results = get_rec(value, field)
|
results = find_rec(value, field)
|
||||||
for result in results:
|
for result in results:
|
||||||
fields_found.append(result)
|
fields_found.append(result)
|
||||||
|
|
||||||
|
@ -51,11 +51,11 @@ def get_rec(search_dict, field):
|
||||||
return fields_found
|
return fields_found
|
||||||
|
|
||||||
|
|
||||||
def find_key(search_dict, key):
|
def get_path(search_dict, key):
|
||||||
""" takes a nested dict and returns the path for the searched value """
|
""" takes a nested dict and returns the path for the searched value """
|
||||||
for k,v in search_dict.items():
|
for k,v in search_dict.items():
|
||||||
if isinstance(v,dict):
|
if isinstance(v,dict):
|
||||||
p = find_key(v,key)
|
p = get_path(v,key)
|
||||||
if p:
|
if p:
|
||||||
return [k] + p
|
return [k] + p
|
||||||
elif v == key:
|
elif v == key:
|
||||||
|
|
Loading…
Reference in a new issue