4 # Licence statement goes here
10 def partition_tosca(filepath, nodesite, tpl):
11 file_paths = {} #holds the list of partitioned files
12 flag = {} #True when key exists
13 sitenodes = {} #holds nodes in each site
15 #identify the number of partitions
17 if nodesite[node] != []:
18 flag[nodesite[node]] = True
19 if sitenodes.has_key(nodesite[node]):
20 sitenodes[nodesite[node]].append(node)
22 sitenodes[nodesite[node]] = [node]
28 for site in sitenodes:
29 tpl_local[site] = copy.deepcopy(tpl)
30 #remove the nodes not assigned to a site
32 for site in sitenodes:
33 if node not in sitenodes[site]:
34 del tpl_local[site]['topology_template']['node_templates'][node]
35 #remove from policy targets
36 if tpl_local[site]['topology_template'].has_key('policies'):
37 for rule in tpl_local[site]['topology_template']['policies']:
38 for key in rule: #there should be only one key
39 if node in rule[key]['targets']:
40 rule[key]['targets'].remove(node)
41 # remove the rule is there is no target left!
42 if len(rule[key]['targets']) is 0:
43 tpl_local[site]['topology_template']['policies'].remove(rule)
45 for site in sitenodes:
46 tpl_l = tpl_local[site]
48 file_paths[site] = filepath + '_part' + str(site) + '.yaml'
49 fout = open(file_paths[site],'w')
51 if tpl_l.has_key('tosca_definitions_version'):
52 fout.write('tosca_definitions_version: ')
53 fout.write(tpl_l['tosca_definitions_version'] + '\n')
54 write_obj(fout, tpl_l['tosca_definitions_version'], None, ' ')
58 if tpl_l.has_key('description'):
59 fout.write('description: ')
60 fout.write(tpl_l['description'] + '\n')
61 write_obj(fout, tpl_l['description'], None, ' ')
65 if tpl_l.has_key('metadata'):
66 fout.write('metadata: ' + '\n')
67 write_obj(fout, tpl_l['metadata'], None, ' ')
71 if tpl_l.has_key('policy_types'):
72 fout.write('policy_types: ' + '\n')
73 write_obj(fout, tpl_l['policy_types'], None, ' ')
77 if tpl_l.has_key('topology_template'):
78 fout.write('topology_template: ' + '\n')
79 write_obj(fout, tpl_l['topology_template'], None, ' ')
86 def write_obj(f, curr, prev, prepad):
87 if type(curr) in (str,int,float,bool):
88 #should be a string, numerical, boolean, etc.
89 if type(prev) is dict:
90 #write on the same line, key should be written
91 f.write(' ' + str(curr) + '\n')
93 elif type(curr) is dict:
94 if prev is not None and type(prev) is not list:
97 if type(prev) is list:
98 f.write(prepad + '- ' + str(key) + ':')
99 write_obj(f, curr[key], curr, prepad + ' ')
101 f.write(prepad + str(key) + ':')
102 write_obj(f, curr[key], curr, prepad + ' ')
104 elif type(curr) is list:
105 #check if this list is a leaf node
106 if len(curr) is 0 or type(curr[0]) in (str,int,float,bool):
108 f.write(str(curr).replace("'",""))
109 #iterate over list of dictionaries
112 write_obj(f, item, curr, prepad )