acex-cli 4.5.1__tar.gz → 4.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {acex_cli-4.5.1 → acex_cli-4.6.0}/PKG-INFO +9 -8
- {acex_cli-4.5.1 → acex_cli-4.6.0}/pyproject.toml +8 -8
- acex_cli-4.6.0/src/acex_cli/__init__.py +5 -0
- {acex_cli-4.5.1 → acex_cli-4.6.0}/src/acex_cli/commands/node.py +16 -8
- acex_cli-4.5.1/src/acex_cli/__init__.py +0 -3
- {acex_cli-4.5.1 → acex_cli-4.6.0}/README.md +0 -0
- {acex_cli-4.5.1 → acex_cli-4.6.0}/src/acex_cli/commands/__init__.py +0 -0
- {acex_cli-4.5.1 → acex_cli-4.6.0}/src/acex_cli/commands/asset.py +0 -0
- {acex_cli-4.5.1 → acex_cli-4.6.0}/src/acex_cli/commands/context.py +0 -0
- {acex_cli-4.5.1 → acex_cli-4.6.0}/src/acex_cli/commands/logical_node.py +0 -0
- {acex_cli-4.5.1 → acex_cli-4.6.0}/src/acex_cli/commands/ned.py +0 -0
- {acex_cli-4.5.1 → acex_cli-4.6.0}/src/acex_cli/context.py +0 -0
- {acex_cli-4.5.1 → acex_cli-4.6.0}/src/acex_cli/diff_formatters.py +0 -0
- {acex_cli-4.5.1 → acex_cli-4.6.0}/src/acex_cli/main.py +0 -0
- {acex_cli-4.5.1 → acex_cli-4.6.0}/src/acex_cli/output.py +0 -0
- {acex_cli-4.5.1 → acex_cli-4.6.0}/src/acex_cli/print_utils.py +0 -0
- {acex_cli-4.5.1 → acex_cli-4.6.0}/src/acex_cli/sdk.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: acex-cli
|
|
3
|
-
Version: 4.
|
|
3
|
+
Version: 4.6.0
|
|
4
4
|
Summary: ACE-X CLI - Command-line interface for ACE-X
|
|
5
5
|
License: AGPL-3.0
|
|
6
6
|
Keywords: automation,cli,control
|
|
@@ -11,13 +11,14 @@ Classifier: License :: OSI Approved :: GNU Affero General Public License v3
|
|
|
11
11
|
Classifier: Programming Language :: Python :: 3
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.13
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.14
|
|
14
|
-
|
|
15
|
-
Requires-Dist: acex-
|
|
16
|
-
Requires-Dist: acex-
|
|
17
|
-
Requires-Dist:
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist:
|
|
20
|
-
Requires-Dist:
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
15
|
+
Requires-Dist: acex-client (>=4.11.0,<5.0.0)
|
|
16
|
+
Requires-Dist: acex-devkit (>=2.11.0,<3.0.0)
|
|
17
|
+
Requires-Dist: acex-driver-cisco-ioscli (>=2.7.4,<3.0.0)
|
|
18
|
+
Requires-Dist: click (>=8.1.7)
|
|
19
|
+
Requires-Dist: ntc-templates (>=8.1.0)
|
|
20
|
+
Requires-Dist: rich (>=13.0.0)
|
|
21
|
+
Requires-Dist: typer (>=0.12.0)
|
|
21
22
|
Project-URL: Homepage, https://github.com/acex-labs/acex
|
|
22
23
|
Project-URL: Repository, https://github.com/acex-labs/acex
|
|
23
24
|
Description-Content-Type: text/markdown
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "acex-cli"
|
|
3
|
-
version = "4.
|
|
3
|
+
version = "4.6.0"
|
|
4
4
|
description = "ACE-X CLI - Command-line interface for ACE-X"
|
|
5
5
|
authors = ["Johan Lahti <johan.lahti@acebit.se>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -14,13 +14,13 @@ packages = [
|
|
|
14
14
|
|
|
15
15
|
[tool.poetry.dependencies]
|
|
16
16
|
python = "^3.13"
|
|
17
|
-
typer = "
|
|
18
|
-
rich = "
|
|
19
|
-
click = "8.1.7"
|
|
20
|
-
acex-client = "^4.
|
|
21
|
-
acex-devkit = "^2.
|
|
22
|
-
acex-driver-cisco-ioscli = "^2.7.
|
|
23
|
-
ntc-templates = "
|
|
17
|
+
typer = ">=0.12.0"
|
|
18
|
+
rich = ">=13.0.0"
|
|
19
|
+
click = ">=8.1.7"
|
|
20
|
+
acex-client = "^4.11.0" # Changes to real dep. by switch_acex_client_dep for publishing
|
|
21
|
+
acex-devkit = "^2.11.0"
|
|
22
|
+
acex-driver-cisco-ioscli = "^2.7.4"
|
|
23
|
+
ntc-templates = ">=8.1.0"
|
|
24
24
|
|
|
25
25
|
[tool.poetry.scripts]
|
|
26
26
|
acex = "acex_cli.main:app"
|
|
@@ -57,7 +57,7 @@ def _fetch_node_instance(sdk, identifier: str):
|
|
|
57
57
|
typer.echo(f"Multiple nodes match '{identifier}':")
|
|
58
58
|
from acex_cli.output import display_list
|
|
59
59
|
|
|
60
|
-
display_list(result, columns=["id", "hostname", "site", "
|
|
60
|
+
display_list(result, columns=["id", "hostname", "site", "admin_status", "provision_status"], title="")
|
|
61
61
|
raise typer.Exit(1)
|
|
62
62
|
node = sdk.node_instances.get(result.items[0].id)
|
|
63
63
|
if not node:
|
|
@@ -84,7 +84,7 @@ def _resolve_node_quick(sdk, identifier: str):
|
|
|
84
84
|
typer.echo(f"Multiple nodes match '{identifier}':")
|
|
85
85
|
from acex_cli.output import display_list
|
|
86
86
|
|
|
87
|
-
display_list(result, columns=["id", "hostname", "site", "
|
|
87
|
+
display_list(result, columns=["id", "hostname", "site", "admin_status", "provision_status"], title="")
|
|
88
88
|
raise typer.Exit(1)
|
|
89
89
|
return result.items[0]
|
|
90
90
|
|
|
@@ -205,7 +205,11 @@ def list_cmd(
|
|
|
205
205
|
hostname: str | None = typer.Option(None, help="Filter by hostname (prefix match)"),
|
|
206
206
|
logical_node_id: int | None = typer.Option(None, help="Filter by logical node ID"),
|
|
207
207
|
asset_ref_id: int | None = typer.Option(None, help="Filter by asset ref ID"),
|
|
208
|
-
|
|
208
|
+
admin_status: str | None = typer.Option(None, help="Filter by admin status (planned, active, decommissioned)"),
|
|
209
|
+
provision_status: str | None = typer.Option(
|
|
210
|
+
None,
|
|
211
|
+
help=("Filter by provision status (unprovisioned, adopted, enrolled, provisioning, provisioned, failed)"),
|
|
212
|
+
),
|
|
209
213
|
# Pagination
|
|
210
214
|
limit: int = typer.Option(100, "--limit", "-l", help="Max items to return"),
|
|
211
215
|
offset: int = typer.Option(0, "--offset", help="Items to skip"),
|
|
@@ -221,13 +225,16 @@ def list_cmd(
|
|
|
221
225
|
hostname=hostname,
|
|
222
226
|
logical_node_id=logical_node_id,
|
|
223
227
|
asset_ref_id=asset_ref_id,
|
|
224
|
-
|
|
228
|
+
admin_status=admin_status,
|
|
229
|
+
provision_status=provision_status,
|
|
225
230
|
)
|
|
226
231
|
result = sdk.node_instances.query(limit=limit, offset=offset, **filters)
|
|
227
232
|
display_list(
|
|
228
233
|
result,
|
|
229
234
|
format=format,
|
|
230
|
-
columns=columns.split(",")
|
|
235
|
+
columns=columns.split(",")
|
|
236
|
+
if columns
|
|
237
|
+
else ["id", "hostname", "site", "admin_status", "provision_status", "vendor", "os", "ned_id"],
|
|
231
238
|
no_header=no_header,
|
|
232
239
|
model=NodeListItem,
|
|
233
240
|
title="Node Instances",
|
|
@@ -641,7 +648,8 @@ def _flatten_node(node, node_id: str = None) -> dict:
|
|
|
641
648
|
"hostname": logical_node.get("hostname"),
|
|
642
649
|
"site": logical_node.get("site"),
|
|
643
650
|
"role": logical_node.get("role"),
|
|
644
|
-
"
|
|
651
|
+
"admin_status": data.get("admin_status"),
|
|
652
|
+
"provision_status": data.get("provision_status"),
|
|
645
653
|
"vendor": asset.get("vendor"),
|
|
646
654
|
"os": asset.get("os"),
|
|
647
655
|
"os_version": asset.get("os_version"),
|
|
@@ -673,7 +681,7 @@ def _resolve_node(sdk, identifier: str):
|
|
|
673
681
|
typer.echo(f"Multiple nodes match hostname '{identifier}':")
|
|
674
682
|
from acex_cli.output import display_list
|
|
675
683
|
|
|
676
|
-
display_list(result, columns=["id", "hostname", "site", "
|
|
684
|
+
display_list(result, columns=["id", "hostname", "site", "admin_status", "provision_status"], title="")
|
|
677
685
|
typer.echo("Use the ID to specify which node.")
|
|
678
686
|
raise typer.Exit(1)
|
|
679
687
|
|
|
@@ -693,7 +701,7 @@ def _resolve_node_id(sdk, identifier: str) -> str:
|
|
|
693
701
|
typer.echo(f"Multiple nodes match hostname '{identifier}':")
|
|
694
702
|
from acex_cli.output import display_list
|
|
695
703
|
|
|
696
|
-
display_list(result, columns=["id", "hostname", "site", "
|
|
704
|
+
display_list(result, columns=["id", "hostname", "site", "admin_status", "provision_status"], title="")
|
|
697
705
|
typer.echo("Use the ID to specify which node.")
|
|
698
706
|
raise typer.Exit(1)
|
|
699
707
|
typer.echo(f"Node '{identifier}' not found.")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|