no_optimization_needed = False
success_string = 'Optimization plan created successfully'
in_progress_string = 'in progress'
+ last_pg_upmap: List[Dict[str, Any]] = []
+ added_pg_upmap_items: List[Dict[str, Any]] = []
+ removed_pg_upmap_items: List[Dict[str, Any]] = []
def __init__(self, *args: Any, **kwargs: Any) -> None:
super(Module, self).__init__(*args, **kwargs)
}
return (0, json.dumps(s, indent=4, sort_keys=True), '')
+ @CLIReadCommand('balancer status detail')
+ def show_status_detail(self) -> Tuple[int, str, str]:
+ """
+ Show balancer status (detailed)
+ """
+ s = {
+ 'plans': list(self.plans.keys()),
+ 'active': self.active,
+ 'last_optimize_started': self.last_optimize_started,
+ 'last_optimize_duration': self.last_optimize_duration,
+ 'optimize_result': self.optimize_result,
+ 'no_optimization_needed': self.no_optimization_needed,
+ 'mode': self.get_module_option('mode'),
+ 'added_pg_upmap_items': self.added_pg_upmap_items,
+ 'removed_pg_upmap_items': self.removed_pg_upmap_items,
+ }
+ return (0, json.dumps(s, indent=4), '')
+
@CLICommand('balancer mode')
def set_mode(self, mode: Mode) -> Tuple[int, str, str]:
"""
start = time.time()
r, detail = self.optimize(plan)
end = time.time()
+ self.added_pg_upmap_items = [pg for pg in osdmap.dump().get('pg_upmap_items', '') if pg not in self.last_pg_upmap]
+ self.removed_pg_upmap_items = [pg for pg in self.last_pg_upmap if pg not in osdmap.dump().get('pg_upmap_items', '')]
+ self.last_pg_upmap = osdmap.dump().get('pg_upmap_items', '')
self.last_optimize_duration = str(datetime.timedelta(seconds=(end - start)))
if r == 0:
self.optimize_result = self.success_string