X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Frspecs%2Felements%2Fversions%2Fpgv2Services.py;h=cfe9ba2b14f19656a8ae79724a81b0fe42e6b7b4;hb=f6ceca6a9f9cb1cb63e20817641adf16beaaffb1;hp=9eb1ed9a79d0d864b569530b12eea273876a4a38;hpb=69fb221c274eb0b6e9f6ff6f895e5e6f90b17230;p=sfa.git diff --git a/sfa/rspecs/elements/versions/pgv2Services.py b/sfa/rspecs/elements/versions/pgv2Services.py index 9eb1ed9a..cfe9ba2b 100644 --- a/sfa/rspecs/elements/versions/pgv2Services.py +++ b/sfa/rspecs/elements/versions/pgv2Services.py @@ -1,6 +1,7 @@ from sfa.rspecs.elements.element import Element from sfa.rspecs.elements.execute import Execute from sfa.rspecs.elements.install import Install +from sfa.rspecs.elements.services import ServicesElement from sfa.rspecs.elements.login import Login class PGv2Services: @@ -8,21 +9,52 @@ class PGv2Services: def add_services(xml, services): if not services: return - for service in services: service_elem = xml.add_element('services') - Element.add_elements(service_elem, 'install', service.get('install', []), Install.fields) - Element.add_elements(service_elem, 'execute', service.get('execute', []), Execute.fields) - Element.add_elements(service_elem, 'login', service.get('login', []), Login.fields) + child_elements = {'install': Install.fields, + 'execute': Execute.fields, + 'login': Login.fields} + for (name, fields) in child_elements.items(): + child = service.get(name) + if not child: + continue + if isinstance(child, dict): + service_elem.add_instance(name, child, fields) + elif isinstance(child, list): + for obj in child: + service_elem.add_instance(name, obj, fields) + + # add ssh_users + if service['services_user']: + for ssh_user in service['services_user']: + ssh_user_elem = service_elem.add_element('{%s}services_user' % xml.namespaces['ssh-user'], + login=ssh_user['login'], + user_urn=ssh_user['user_urn']) + for key in ssh_user['keys']: + pkey_elem = ssh_user_elem.add_element('{%s}public_key' % xml.namespaces['ssh-user']) + pkey_elem.element.text=key @staticmethod def get_services(xml): services = [] for services_elem in xml.xpath('./default:services | ./services'): - service = Services(services_elem.attrib, services_elem) - service['install'] = Element.get_elements(service_elem, './default:install | ./install', Install) - service['execute'] = Element.get_elements(service_elem, './default:execute | ./execute', Execute) - service['login'] = Element.get_elements(service_elem, './default:login | ./login', Login) + service = ServicesElement(services_elem.attrib, services_elem) + # get install + install_elems = services_elem.xpath('./default:install | ./install') + service['install'] = [install_elem.get_instance(Install) for install_elem in install_elems] + # get execute + execute_elems = services_elem.xpath('./default:execute | ./execute') + service['execute'] = [execute_elem.get_instance(Execute) for execute_elem in execute_elems] + # get login + login_elems = services_elem.xpath('./default:login | ./login') + service['login'] = [login_elem.get_instance(Login) for login_elem in login_elems] + + ssh_user_elems = services_elem.xpath('./ssh-user:service_user | ./service_user') + services_user = [] + for ssh_user_elem in ssh_user_elems: + services_user = ssh_user_elem.get_instance(None, fields=['login', 'user_urn']) + service['services_user'] = services_user + services.append(service) return services