Skip to content

Commit

Permalink
feat: add progress bar ui
Browse files Browse the repository at this point in the history
  • Loading branch information
gescheit committed Feb 5, 2025
1 parent e968948 commit 2b2ddfc
Show file tree
Hide file tree
Showing 4 changed files with 797 additions and 344 deletions.
23 changes: 18 additions & 5 deletions annet/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
)

import colorama
import annet.deploy
import annet.deploy_ui
import annet.lib
from annet.annlib import jsontools
from annet.annlib.netdev.views.hardware import HardwareView
Expand Down Expand Up @@ -567,7 +569,7 @@ def diff_lines(self) -> List[str]:
if not diff_obj:
self.empty_diff_hostnames.update(dev.hostname for dev in devices)
if not self.args.no_ask_deploy:
# разобъем список устройств на несколько линий
# разобьём список устройств на несколько линий
dest_name = ""
try:
_, term_columns_str = os.popen("stty size", "r").read().split()
Expand Down Expand Up @@ -596,18 +598,18 @@ def diff_lines(self) -> List[str]:
return diff_lines

def ask_deploy(self) -> str:
return self._ask("y", annet.deploy.AskConfirm(
return self._ask("y", annet.deploy_ui.AskConfirm(
text="\n".join(self.diff_lines()),
alternative_text="\n".join(self.cmd_lines),
))

def ask_rollback(self) -> str:
return self._ask("n", annet.deploy.AskConfirm(
return self._ask("n", annet.deploy_ui.AskConfirm(
text="Execute rollback?\n",
alternative_text="",
))

def _ask(self, default_ans: str, ask: annet.deploy.AskConfirm) -> str:
def _ask(self, default_ans: str, ask: annet.deploy_ui.AskConfirm) -> str:
# если filter_acl из stdin то с ним уже не получится работать как с терминалом
ans = default_ans
if not self.args.no_ask_deploy:
Expand Down Expand Up @@ -698,7 +700,18 @@ async def adeploy(
ans = deployer.ask_deploy()
if ans != "y":
return 2 ** 2
result = annet.lib.do_async(deploy_driver.bulk_deploy(deploy_cmds, args))
progress_bar = None
if sys.stdout.isatty() and not args.no_progress:
progress_bar = annet.deploy_ui.ProgressBars(odict([(device.fqdn, {}) for device in deploy_cmds]))
progress_bar.init()
with progress_bar:
progress_bar.start_terminal_refresher()
result = await deploy_driver.bulk_deploy(deploy_cmds, args, progress_bar=progress_bar)
await progress_bar.wait_for_exit()
progress_bar.screen.clear()
progress_bar.stop_terminal_refresher()
else:
result = await deploy_driver.bulk_deploy(deploy_cmds, args)

rolled_back = False
rollback_cmds = {deployer.fqdn_to_device[x]: cc for x, cc in result.original_states.items() if cc}
Expand Down
Loading

0 comments on commit 2b2ddfc

Please sign in to comment.