forked from LibreSchool/doraemon
Improved version of __rolevars, using a single entry per role with two lists
This commit is contained in:
parent
3dddc535d5
commit
8ff650ab6d
18
doraemon.py
18
doraemon.py
@ -5,7 +5,6 @@
|
|||||||
__author__ = 'BgLUG'
|
__author__ = 'BgLUG'
|
||||||
__email__ = 'info@bglug.it'
|
__email__ = 'info@bglug.it'
|
||||||
|
|
||||||
from collections import namedtuple
|
|
||||||
from contextlib import contextmanager, closing
|
from contextlib import contextmanager, closing
|
||||||
from subprocess import Popen, PIPE
|
from subprocess import Popen, PIPE
|
||||||
from sqlite3 import connect
|
from sqlite3 import connect
|
||||||
@ -20,9 +19,6 @@ import sys
|
|||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
|
|
||||||
# namedtuple used by Nethserver's Network Package Manager
|
|
||||||
Package = namedtuple('Package', ['name', 'role', 'rule', 'description'])
|
|
||||||
|
|
||||||
class MyApp:
|
class MyApp:
|
||||||
def __init__(self, configfile = '/etc/mac2hostname.ini'):
|
def __init__(self, configfile = '/etc/mac2hostname.ini'):
|
||||||
if not os.path.isfile(configfile):
|
if not os.path.isfile(configfile):
|
||||||
@ -108,18 +104,16 @@ class MyApp:
|
|||||||
(role,) = cursor.execute("SELECT role FROM client WHERE hostname = '%s' AND mac = '%s'" % (hostname, macaddress)).fetchone()
|
(role,) = cursor.execute("SELECT role FROM client WHERE hostname = '%s' AND mac = '%s'" % (hostname, macaddress)).fetchone()
|
||||||
return role
|
return role
|
||||||
|
|
||||||
# Parse a json pkg retrieved by Nethserver's Network Package Manager into a Package namedtuple
|
|
||||||
def parse_package(pkg):
|
|
||||||
return Package(pkg['name'], pkg['props']['Role'], pkg['props']['Rule'], pkg['props']['Description'])
|
|
||||||
|
|
||||||
# Variables returned to the client
|
# Variables returned to the client
|
||||||
def __rolevars(self, role=None):
|
def __rolevars(self, role=None):
|
||||||
retval = {'role': role, 'addpkg': [], 'delpkg': []}
|
retval = {'role': role, 'addpkg': [], 'delpkg': []}
|
||||||
try:
|
try:
|
||||||
db = Popen(['db', 'packages', 'getjson'], stdout=PIPE).communicate()[0]
|
db = Popen(['db', 'roles', 'getjson'], stdout=PIPE).communicate()[0]
|
||||||
for pkg in map(parse_package, json.loads(db)):
|
for data in json.loads(db):
|
||||||
if pkg.role == role:
|
if data['name'] == role:
|
||||||
result['addpkg' if pkg.rule == 'add' else 'delpkg'].append(str(pkg.name))
|
retval['addpkg'] = data['props']['Addpkg'].split()
|
||||||
|
retval['delpkg'] = data['props']['Delpkg'].split()
|
||||||
|
continue
|
||||||
except: pass
|
except: pass
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user