Automatic Deployment
[genesis.git] / fuel / deploy / 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.networks = {}
11
12     def parse_yaml(self, yaml_path):
13         with io.open(yaml_path) as yaml_file:
14             self.dea_struct = yaml.load(yaml_file)
15         self.collect_shelf_and_blade_info()
16         self.collect_network_info()
17
18     def get_no_of_blades(self):
19         no_of_blades = 0
20         for shelf in self.dea_struct['shelf']:
21             no_of_blades += len(shelf['blade'])
22         return no_of_blades
23
24     def get_server_type(self):
25         return self.dea_struct['server']['type']
26
27     def get_server_info(self):
28         return (self.dea_struct['server']['type'],
29                 self.dea_struct['server']['mgmt_ip'],
30                 self.dea_struct['server']['username'],
31                 self.dea_struct['server']['password'])
32
33     def get_environment_name(self):
34         return self.dea_struct['name']
35
36     def get_shelf_ids(self):
37         return self.shelf_ids
38
39     def get_blade_ids_per_shelf(self, shelf_id):
40         return self.blade_ids_per_shelves[shelf_id]
41
42     def get_blade_ids_per_shelves(self):
43         return self.blade_ids_per_shelves
44
45     def collect_shelf_and_blade_info(self):
46         self.blade_ids_per_shelves = {}
47         self.blades_per_shelves = {}
48         self.shelf_ids = []
49         for shelf in self.dea_struct['shelf']:
50              self.shelf_ids.append(shelf['id'])
51              blade_ids = self.blade_ids_per_shelves[shelf['id']] = []
52              blades = self.blades_per_shelves[shelf['id']] = {}
53              for blade in shelf['blade']:
54                  blade_ids.append(blade['id'])
55                  blades[blade['id']] = blade
56
57     def is_controller(self, shelf_id, blade_id):
58         blade = self.blades[shelf_id][blade_id]
59         return (True if 'role' in blade and blade['role'] == 'controller'
60                 else False)
61
62     def is_compute_host(self, shelf_id, blade_id):
63         blade = self.blades[shelf_id][blade_id]
64         return True if 'role' not in blade else False
65
66     def collect_network_info(self):
67         self.networks = {}
68         for network in self.dea_struct['network']:
69             self.networks[network['name']] = network
70
71     def get_networks(self):
72         return self.networks