def add_vlan( group_dev: str = typer.Argument(...), pvid: str = typer.Argument(...), ip: str = typer.Argument(None), mask: str = typer.Argument("255.255.255.0"), name: str = None, description: str = None, interface: str = None, vrid: str = None, vrrp_ip: str = None, vrrp_pri: int = None, default: bool = typer.Option(False, "-d", is_flag=True, help="Use default central account", callback=cli.default_callback), debug: bool = typer.Option(False, "--debug", envvar="ARUBACLI_DEBUG", help="Enable Additional Debug Logging", callback=cli.debug_callback), account: str = typer.Option("central_info", envvar="ARUBACLI_ACCOUNT", help="The Aruba Central Account to use (must be defined in the config)", callback=cli.account_name_callback), ) -> None: caasapi = caas.CaasAPI(central=cli.central) cmds = [] cmds += [f"vlan {pvid}", "!"] if name: cmds += [f"vlan-name {name}", "!", f"vlan {name} {pvid}", "!"] if ip: _fallback_desc = f"VLAN{pvid}-SVI" cmds += [f"interface vlan {pvid}", f"description {description or name or _fallback_desc}", f"ip address {ip} {mask}", "!"] if vrid: cmds += [f"vrrp {vrid}", f"ip address {vrrp_ip}", f"vlan {pvid}"] if vrrp_pri: cmds += [f"priority {vrrp_pri}"] cmds += ["no shutdown", "!"] resp = cli.central.request(caasapi.send_commands, group_dev, cmds) caas.eval_caas_response(resp)
def bulk_edit( input_file: Path = typer.Argument(config.bulk_edit_file, ), default: bool = typer.Option(False, "-d", is_flag=True, help="Use default central account", callback=cli.default_callback), debug: bool = typer.Option(False, "--debug", envvar="ARUBACLI_DEBUG", help="Enable Additional Debug Logging", callback=cli.debug_callback), account: str = typer.Option( "central_info", envvar="ARUBACLI_ACCOUNT", help="The Aruba Central Account to use (must be defined in the config)", callback=cli.account_name_callback), ) -> None: caasapi = caas.CaasAPI(central=cli.central) cmds = caasapi.build_cmds(file=input_file) # TODO log cli if cmds: typer.secho("Commands:", fg="bright_green") typer.echo("\n".join(cmds)) if typer.confirm("Send Commands"): for dev in caasapi.data: group_dev = f"{caasapi.data[dev]['_common'].get('group')}/{dev}" resp = cli.central.request(caasapi.send_commands, group_dev, cmds) caas.eval_caas_response(resp) else: raise typer.Abort()
def add_vlan(group_dev: str = typer.Argument(...), pvid: str = typer.Argument(...), ip: str = typer.Argument(None), mask: str = typer.Argument("255.255.255.0"), name: str = None, description: str = None, interface: str = None, vrid: str = None, vrrp_ip: str = None, vrrp_pri: int = None): cmds = [] cmds += [f"vlan {pvid}", "!"] if name: cmds += [f"vlan-name {name}", "!", f"vlan {name} {pvid}", "!"] if ip: _fallback_desc = f"VLAN{pvid}-SVI" cmds += [ f"interface vlan {pvid}", f"description {description or name or _fallback_desc}", f"ip address {ip} {mask}", "!" ] if vrid: cmds += [f"vrrp {vrid}", f"ip address {vrrp_ip}", f"vlan {pvid}"] if vrrp_pri: cmds += [f"priority {vrrp_pri}"] cmds += ["no shutdown", "!"] # TODO move command gen to BuildCLI caas.eval_caas_response(session.caasapi(group_dev, cmds))
def bulk_edit(input_file: str = typer.Argument(None)): cli = caas.BuildCLI(session=session, filename=input_file) # TODO log cli if cli.cmds: for dev in cli.data: group_dev = f"{cli.data[dev]['_common'].get('group')}/{dev}" resp = session.caasapi(group_dev, cli.cmds) caas.eval_caas_response(resp)
def caas_batch(import_file: Path = typer.Argument(config.stored_tasks_file), command: str = None, key: str = None): if import_file == config.stored_tasks_file and not key: typer.echo("key is required when using the default import file") raise typer.Exit() data = utils.read_yaml(import_file) if key: data = data.get(key) if not data: _msg = typer.style( f"{key} not found in {import_file}. No Data to Process", fg=typer.colors.RED, bold=True) typer.echo(_msg) else: args = data.get("arguments", []) kwargs = data.get("options", {}) cmds = data.get("cmds", []) if not args: typer.secho( "import data requires an argument specifying the group / device" ) raise typer.Exit(1) if command: try: exec(f"fn = {command}") fn(*args, **kwargs) # type: ignore # NoQA except AttributeError: typer.echo(f"{command} doesn't appear to be valid") elif cmds: kwargs = {**kwargs, **{"cli_cmds": cmds}} resp = utils.spinner(SPIN_TXT_CMDS, session.caasapi, *args, **kwargs) caas.eval_caas_response(resp)
def caas_batch( key: str = typer.Argument(None,), file: Path = typer.Option(config.stored_tasks_file, exists=True,), command: str = typer.Option(None,), default: bool = typer.Option(False, "-d", is_flag=True, help="Use default central account", callback=cli.default_callback), debug: bool = typer.Option(False, "--debug", envvar="ARUBACLI_DEBUG", help="Enable Additional Debug Logging", callback=cli.debug_callback), account: str = typer.Option("central_info", envvar="ARUBACLI_ACCOUNT", help="The Aruba Central Account to use (must be defined in the config)", callback=cli.account_name_callback), ) -> None: """cencli caas batch add-vlan add-vlan-99""" caasapi = caas.CaasAPI(central=cli.central) if file == config.stored_tasks_file and not key: print("[bright_red]ERROR:[/] key is required when using the default import file") raise typer.Exit(1) data = config.get_file_data(file) if hasattr(data, "dict"): # csv data = data.dict data = {k: data[k] for k in data if data.get("key", "") == key} else: data = data.get(key) if not data: print(f"[bright_red]ERROR:[/] [cyan]{key}[/] not found in [cyan]{file}[/]. No Data to Process") raise typer.Exit(1) else: args = data.get("arguments", []) kwargs = data.get("options", {}) cmds = data.get("cmds", []) if not args: print("[bright_red]ERROR:[/] import data requires an argument specifying the group / device") raise typer.Exit(1) if command: command = command.replace('-', '_') _msg1 = typer.style( f"Proceed with {command}:", fg="cyan" ) _msg2 = f"{', '.join(args)} {', '.join([f'{k}={v}' for k, v in kwargs.items()])}" confirm_msg = typer.style(f"{_msg1} {_msg2}?", fg="bright_green") if command in globals(): fn = globals()[command] if typer.confirm(confirm_msg): fn(*args, **kwargs) # type: ignore # NoQA else: raise typer.Abort() else: typer.echo(f"{command} doesn't appear to be valid") elif cmds: print(f"\nSending the following to [cyan]{utils.unlistify(args)}[/]") if kwargs: print("\n With the following options:") _ = [print(f" {k} : {v}") for k, v in kwargs.items()] print(f" [bold]cli cmds:[/]") _ = [print(f" [cyan]{c}[/]") for c in cmds] if typer.confirm("Proceed:"): kwargs = {**kwargs, **{"cli_cmds": cmds}} resp = cli.central.request(caasapi.send_commands, *args, **kwargs) caas.eval_caas_response(resp)