def test(self): topology = { 'infrastructure': { 'cpu_cores': 2, 'mem_units': 8 } } i = 1 while True: plan_file = 'tests/plan{0}.json'.format(i) if isfile(plan_file): plan = self.read_json(plan_file) solver = AllocationSolver(topology) allocation = self.read_json('tests/allocation{0}.json'.format(i)) if i == 2 or i == 10: try: new_allocation = solver.solve(plan, allocation) except Exception as e: if ((i == 2 and str(e) == 'No solution needed') or (i == 10 and str(e) == 'No solution found')): pass else: raise e else: new_allocation = solver.solve(plan, allocation) expected = self.read_json('tests/result{0}.json'.format(i)) print i print 'old_allocation=', allocation print 'plan=', plan print 'new_allocation=', new_allocation print 'expected=', expected self.assertEquals(new_allocation, expected) else: break i += 1
def translate(plan): solver = AllocationSolver(_topology) flat_plan = flatten(plan) not_scalable_arr = get_not_scalable_tiers(_topology) new_allocation = solver.solve(flat_plan, _allocation, not_scalable_arr) logging.debug('new_allocation={}'.format(new_allocation)) flat_topology = flatten_topology(_topology) return translator.translate(_allocation, new_allocation, flat_topology)
def execute(plan): global _allocation, _topology solver = AllocationSolver(_topology) flat_plan = flatten(plan) _allocation.pop('time', None) if solver.need_solution(flat_plan, _allocation): not_scalable_arr = get_not_scalable_tiers(_topology) new_allocation = solver.solve(flat_plan, _allocation, not_scalable_arr) logging.debug('new_allocation={}'.format(new_allocation)) flat_topology = flatten_topology(_topology) actions = translator.translate(_allocation, new_allocation, flat_topology) _allocation = executor.aws_execute(actions, new_allocation, _topology, _allocation) return _allocation