miscell cosmetic + pass the substrate object to TestBonding so it can compute an...
[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         
27         if isinstance(self.config.sites, dict):
28             sitelist = filter(this_plc, self.config.sites.values())     
29         if isinstance(self.config.nodes, dict):
30             nodelist = filter(this_plc, self.config.nodes.values())
31         if isinstance(self.config.slices, dict):
32             slicelist = filter(this_plc, self.config.slices.values())
33         if isinstance(self.config.persons, dict):
34             personlist = filter(this_plc, self.config.persons.values()) 
35         if isinstance(self.config.nodegroups, dict): 
36             nodegrouplist = filter(this_plc, self.config.nodegroups.values())
37
38         # Add Test site
39         for site in sitelist:
40             sites = api.GetSites(auth, [site['login_base']])
41             if not sites:
42                 site_id = api.AddSite(auth, dict(site))
43                 site['site_id'] = site_id
44                 if self.config.verbose:
45                     utils.header("Added site: %s" % site['name'], logfile = self.config.logfile)
46             else:
47                 site.update(sites[0])
48                 if self.config.verbose:
49                     utils.header("Site %s found" % site['name'], logfile = self.config.logfile)
50         
51         # Add Nodegroups
52         for nodegroup in nodegrouplist:
53             nodegroups = api.GetNodeGroups(auth, [nodegroup['name']])
54             if not nodegroups:
55                 nodegroup_id = api.AddNodeGroup(auth, dict(nodegroup))
56                 nodegroup['nodegroup_id'] = nodegroup_id
57                 if self.config.verbose:
58                     utils.header("Added Nodegroup: %s " % nodegroup['name'], logfile = self.config.logfile)
59                 else:
60                     nodegroup.update(nodegroups[0])
61                     if self.config.verbose:
62                         utils.header("Nodegroup %s found" % nodegroup['name'], logfile = self.config.logfile)    
63
64         # Add Test nodes
65         for node in nodelist:
66             nodes = api.GetNodes(auth, [node['hostname']])
67             if not nodes:
68                 node_id = api.AddNode(auth, node['site'], dict(node))
69                 node['node_id'] = node_id
70                 if self.config.verbose:
71                     utils.header("Added node: %s" % node['hostname'], logfile = self.config.logfile)
72             else:
73                 node.update(nodes[0])
74                 if self.config.verbose:
75                     utils.header("Node %s found" % node['hostname'], logfile = self.config.logfile)
76
77             # Add node network
78             if 'nodenetwork_ids' not in node or not node['nodenetwork_ids']:
79                 for nodenetwork in node['nodenetworks']:
80                     nodenetwork_id = api.AddNodeNetwork(auth, node['hostname'], dict(nodenetwork))
81                     if self.config.verbose:
82                         utils.header("Added nodenetwork to %s" % node['hostname'], logfile = self.config.logfile)
83                 else:
84                     if self.config.verbose:
85                         utils.header("Nodenetwork found on node %s" % node['hostname'], logfile = self.config.logfile)
86             # Add node to nodegroups
87             if 'nodegroups' in node:
88                 for nodegroup in node['nodegroups']:
89                     api.AddNodeToNodeGroup(auth, node['hostname'], nodegroup)
90                 if self.config.verbose:
91                     utils.header("Added %s to nodegroup %s" % (node['hostname'], node['nodegroups']))                                   
92         
93         # Add Test slice
94         for slice in slicelist:
95             slices = api.GetSlices(auth, [slice['name']])
96             if not slices:
97                 slice_id = api.AddSlice(auth, dict(slice))
98                 slice['slice_id'] = slice_id
99                 if self.config.verbose:
100                     utils.header("Added slice: %s" % slice['name'], logfile = self.config.logfile)
101             else:
102                 slice.update(slices[0])
103                 if self.config.verbose:
104                     utils.header("Slice %s found" % slice['name'], logfile = self.config.logfile)
105             
106             # Add slice to nodes
107             for node in slice['nodes']:
108                 api.AddSliceToNodes(auth, slice['name'], [node])                
109                 if self.config.verbose:
110                     utils.header("Added slice to %s" % node, logfile = self.config.logfile)
111         
112         # Add test person
113         for person in personlist:
114             roles = person['roles']
115             persons = api.GetPersons(auth, [person['email']])
116             if not persons:
117                 person_id = api.AddPerson(auth, dict(person))
118                 person['person_id'] = person_id
119                 api.UpdatePerson(auth, person_id, {'enabled': True})
120                 if self.config.verbose:
121                     utils.header("Added person: %s" % person['email'], logfile = self.config.logfile)
122             else:
123                 person.update(persons[0])
124                 if self.config.verbose:
125                     utils.header("Person %s found" % person['email'], logfile = self.config.logfile)
126         
127             # Add roles to person
128             for role in roles:
129                 api.AddRoleToPerson(auth, role, person['email'])
130                 if self.config.verbose:
131                     utils.header("Added %s to %s" % (role, person['email']), logfile = self.config.logfile)
132             # Add person to site
133             for site in person['sites']:
134                 api.AddPersonToSite(auth, person['email'], site)
135                 if self.config.verbose:
136                     utils.header("Added %s to %s" % (person['email'], site), logfile = self.config.logfile)
137
138             # Add person to slice
139             for slice in person['slices']:
140                 api.AddPersonToSlice(auth, person['email'], slice)
141                 if self.config.verbose:
142                     utils.header("Added %s to %s" % (person['email'], slice), logfile = self.config.logfile)
143         return 1
144
145 if __name__ == '__main__':
146     args = tuple(sys.argv[1:])
147     add_test_data()(*args)