Improved version of __rolevars, using a single entry per role with two lists

This commit is contained in:
enricobacis 2015-09-11 01:47:19 +02:00
parent 3dddc535d5
commit 8ff650ab6d

View File

@ -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