Automatic Deployment
[genesis.git] / fuel / deploy / cloud_deploy / cloud / dea.py
1 import yaml
2 import io
3
4 class DeploymentEnvironmentAdapter(object):
5     def __init__(self):
6         self.dea_struct = None
7         self.blade_ids_per_shelves = {}
8         self.blades_per_shelves = {}
9         self.shelf_ids = []
10         self.info_per_shelves = {}
11         self.network_names = []
12
13     def parse_yaml(self, yaml_path):
14         with io.open(yaml_path) as yaml_file:
15             self.dea_struct = yaml.load(yaml_file)
16         self.collect_shelf_and_blade_info()
17         self.collect_shelf_info()
18         self.collect_network_names()
19
20     def get_no_of_blades(self):
21         no_of_blades = 0
22         for shelf in self.dea_struct['shelf']:
23             no_of_blades += len(shelf['blade'])
24         return no_of_blades
25
26     def collect_shelf_info(self):
27         self.info_per_shelves = {}
28         for shelf in self.dea_struct['shelf']:
29             self.info_per_shelves[shelf['id']] = shelf
30
31     def get_shelf_info(self, shelf):
32         return (self.info_per_shelves[shelf]['type'],
33                 self.info_per_shelves[shelf]['mgmt_ip'],
34                 self.info_per_shelves[shelf]['username'],
35                 self.info_per_shelves[shelf]['password'])
36
37     def get_environment_name(self):
38         return self.dea_struct['name']
39
40     def get_shelf_ids(self):
41         return self.shelf_ids
42
43     def get_blade_ids_per_shelf(self, shelf_id):
44         return self.blade_ids_per_shelves[shelf_id]
45
46     def get_blade_ids_per_shelves(self):
47         return self.blade_ids_per_shelves
48
49     def collect_shelf_and_blade_info(self):
50         self.blade_ids_per_shelves = {}
51         self.blades_per_shelves = {}
52         self.shelf_ids = []
53         for shelf in self.dea_struct['shelf']:
54              self.shelf_ids.append(shelf['id'])
55              blade_ids = self.blade_ids_per_shelves[shelf['id']] = []
56              blades = self.blades_per_shelves[shelf['id']] = {}
57              for blade in shelf['blade']:
58                  blade_ids.append(blade['id'])
59                  blades[blade['id']] = blade
60
61     def has_role(self, role, shelf, blade):
62         blade = self.blades_per_shelves[shelf][blade]
63         if role == 'compute':
64             return True if 'roles' not in blade else False
65         return (True if 'roles' in blade and role in blade['roles']
66                 else False)
67
68     def collect_network_names(self):
69         self.network_names = []
70         for network in self.dea_struct['networks']['networks']:
71             self.network_names.append(network['name'])
72
73     def get_networks(self):
74         return self.dea_struct['networks']
75
76     def get_network_names(self):
77         return self.network_names
78
79     def get_settings(self):
80         return self.dea_struct['settings']
81
82     def get_network_scheme(self, node_type):
83         return self.dea_struct[node_type]
84
85     def get_interfaces(self):
86         return self.dea_struct['interfaces']