1 from sfa.rspecs.elements.element import Element
2 from sfa.rspecs.elements.execute import Execute
3 from sfa.rspecs.elements.install import Install
4 from sfa.rspecs.elements.services import ServicesElement
5 from sfa.rspecs.elements.login import Login
11 def add_services(xml, services):
14 for service in services:
15 service_elem = xml.add_element('services')
16 child_elements = {'install': Install.fields,
17 'execute': Execute.fields,
18 'login': Login.fields}
19 for (name, fields) in child_elements.items():
20 child = service.get(name)
23 if isinstance(child, dict):
24 service_elem.add_instance(name, child, fields)
25 elif isinstance(child, list):
27 service_elem.add_instance(name, obj, fields)
30 # if service['services_user']:
31 # for ssh_user in service['services_user']:
32 # ssh_user_elem = service_elem.add_element('{%s}services_user' % xml.namespaces['ssh-user'],
33 # login=ssh_user['login'],
34 # user_urn=ssh_user['user_urn'])
35 # for key in ssh_user['keys']:
36 # pkey_elem = ssh_user_elem.add_element('{%s}public_key' % xml.namespaces['ssh-user'])
37 # pkey_elem.element.text=key
40 def get_services(xml):
42 for services_elem in xml.xpath('./default:services | ./services'):
43 service = ServicesElement(services_elem.attrib, services_elem)
45 install_elems = services_elem.xpath(
46 './default:install | ./install')
47 service['install'] = [install_elem.get_instance(
48 Install) for install_elem in install_elems]
50 execute_elems = services_elem.xpath(
51 './default:execute | ./execute')
52 service['execute'] = [execute_elem.get_instance(
53 Execute) for execute_elem in execute_elems]
55 login_elems = services_elem.xpath('./default:login | ./login')
56 service['login'] = [login_elem.get_instance(
57 Login) for login_elem in login_elems]
59 # ssh_user_elems = services_elem.xpath('./ssh-user:service_user | ./service_user')
61 # for ssh_user_elem in ssh_user_elems:
62 # services_user = ssh_user_elem.get_instance(None, fields=['login', 'user_urn'])
63 # service['services_user'] = services_user
65 services.append(service)