default some value types
[tests.git] / qaapi / qa / tests / add_test_data.py
1 #!/usr/bin/python
2 import os,sys
3 from Test import Test
4 from qa import utils
5 from qa.PLCs import PLC, PLCs
6   
7 class add_test_data(Test):
8     """
9     Adds the test data found in config to the plc db
10     """   
11     def call(self, plc_name = None):
12
13         # Determine which plc to talk to 
14         plc = self.config.get_plc(plc_name)
15         api = plc.config.api
16         auth = plc.config.auth
17
18         # Search config for objects that belong to this plc
19         # Any object with 'plc' defined as this plc's name or with 
20         # no 'plc' defined will be added
21         this_plc = lambda object: 'plcs' not in object or \
22                                   'plcs' in object and plc['name'] in object['plcs'] or \
23                                   object['plcs'] == None   
24         
25         sitelist, nodelist, slicelist, personlist, nodegrouplist = [], [], [], [], []
26         if isinstance(self.config.sites.values, dict):
27             sitelist = filter(this_plc, self.config.sites.values())     
28         if isinstance(self.config.nodes, dict):
29             nodelist = filter(this_plc, self.config.nodes.values())
30         if isinstance(self.config.slices, dict):
31             slicelist = filter(this_plc, self.config.slices.values())
32         if isinstance(self.config.persons, dict):
33             personlist = filter(this_plc, self.config.persons.values()) 
34         if isinstance(self.config.nodegroups, dict): 
35             nodegrouplist = filter(this_plc, self.config.nodegroups.values())
36         
37         # Add Test site
38         for site in sitelist:
39             sites = api.GetSites(auth, [site['login_base']])
40             if not sites:
41                 site_id = api.AddSite(auth, dict(site))
42                 site['site_id'] = site_id
43                 if self.config.verbose:
44                     utils.header("Added site: %s" % site['name'], logfile = self.config.logfile)
45             else:
46                 site.update(sites[0])
47                 if self.config.verbose:
48                     utils.header("Site %s found" % site['name'], logfile = self.config.logfile)
49         
50         # Add Nodegroups
51         for nodegroup in nodegrouplist:
52             nodegroups = api.GetNodeGroups(auth, [nodegroup['name']])
53             if not nodegroups:
54                 nodegroup_id = api.AddNodeGroup(auth, dict(nodegroup))
55                 nodegroup['nodegroup_id'] = nodegroup_id
56                 if self.config.verbose:
57                     utils.header("Added Nodegroup: %s " % nodegroup['name'], logfile = self.config.logfile)
58                 else:
59                     nodegroup.update(nodegroups[0])
60                     if self.config.verbose:
61                         utils.header("Nodegroup %s found" % nodegroup['name'], logfile = self.config.logfile)    
62
63         # Add Test nodes
64         for node in nodelist:
65             nodes = api.GetNodes(auth, [node['hostname']])
66             if not nodes:
67                 node_id = api.AddNode(auth, node['site'], dict(node))
68                 node['node_id'] = node_id
69                 if self.config.verbose:
70                     utils.header("Added node: %s" % node['hostname'], logfile = self.config.logfile)
71             else:
72                 node.update(nodes[0])
73                 if self.config.verbose:
74                     utils.header("Node %s found" % node['hostname'], logfile = self.config.logfile)
75
76             # Add node network
77             if 'nodenetwork_ids' not in node or not node['nodenetwork_ids']:
78                 for nodenetwork in node['nodenetworks']:
79                     nodenetwork_id = api.AddNodeNetwork(auth, node['hostname'], dict(nodenetwork))
80                     if self.config.verbose:
81                         utils.header("Added nodenetwork to %s" % node['hostname'], logfile = self.config.logfile)
82                 else:
83                     if self.config.verbose:
84                         utils.header("Nodenetwork found on node %s" % node['hostname'], logfile = self.config.logfile)
85             # Add node to nodegroups
86             if 'nodegroups' in node:
87                 for nodegroup in node['nodegroups']:
88                     api.AddNodeToNodeGroup(auth, node['hostname'], nodegroup)
89                 if self.config.verbose:
90                     utils.header("Added %s to nodegroup %s" % (node['hostname'], node['nodegroups']))                                   
91         
92         # Add Test slice
93         for slice in slicelist:
94             slices = api.GetSlices(auth, [slice['name']])
95             if not slices:
96                 slice_id = api.AddSlice(auth, dict(slice))
97                 slice['slice_id'] = slice_id
98                 if self.config.verbose:
99                     utils.header("Added slice: %s" % slice['name'], logfile = self.config.logfile)
100             else:
101                 slice.update(slices[0])
102                 if self.config.verbose:
103                     utils.header("Slice %s found" % slice['name'], logfile = self.config.logfile)
104             
105             # Add slice to nodes
106             for node in slice['nodes']:
107                 api.AddSliceToNodes(auth, slice['name'], [node])                
108                 if self.config.verbose:
109                     utils.header("Added slice to %s" % node, logfile = self.config.logfile)
110         
111         # Add test person
112         for person in personlist:
113             roles = person['roles']
114             persons = api.GetPersons(auth, [person['email']])
115             if not persons:
116                 person_id = api.AddPerson(auth, dict(person))
117                 person['person_id'] = person_id
118                 api.UpdatePerson(auth, person_id, {'enabled': True})
119                 if self.config.verbose:
120                     utils.header("Added person: %s" % person['email'], logfile = self.config.logfile)
121             else:
122                 person.update(persons[0])
123                 if self.config.verbose:
124                     utils.header("Person %s found" % person['email'], logfile = self.config.logfile)
125         
126             # Add roles to person
127             for role in roles:
128                 api.AddRoleToPerson(auth, role, person['email'])
129                 if self.config.verbose:
130                     utils.header("Added %s to %s" % (role, person['email']), logfile = self.config.logfile)
131             # Add person to site
132             for site in person['sites']:
133                 api.AddPersonToSite(auth, person['email'], site)
134                 if self.config.verbose:
135                     utils.header("Added %s to %s" % (person['email'], site), logfile = self.config.logfile)
136
137             # Add person to slice
138             for slice in person['slices']:
139                 api.AddPersonToSlice(auth, person['email'], slice)
140                 if self.config.verbose:
141                     utils.header("Added %s to %s" % (person['email'], slice), logfile = self.config.logfile)
142         return 1
143
144 if __name__ == '__main__':
145     args = tuple(sys.argv[1:])
146     add_test_data()(*args)