acex-devkit 2.7.0__tar.gz → 2.9.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_devkit-2.7.0 → acex_devkit-2.9.0}/PKG-INFO +1 -1
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/pyproject.toml +1 -1
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/__init__.py +4 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/agent_manifest.py +19 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/telemetry_agent.py +31 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/README.md +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/__init__.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/configdiffer/__init__.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/configdiffer/command.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/configdiffer/configdiffer.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/configdiffer/diff.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/configdiffer/old_configdiffer.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/configdiffer/old_diff.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/__init__.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/__init__.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/base.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst2950.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst2960.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst3500.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst3560.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst3650.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst3750.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst3850.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst4500.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst6500.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst6800.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst9200.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst9300.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst9400.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/catalyst9500.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/generic.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/industrial.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/modules.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/nexus9000.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/cisco/routers.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/fortinet/__init__.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/fortinet/base.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/fortinet/fortigate_f.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/juniper/__init__.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/juniper/base.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/juniper/ex2300.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/juniper/ex3400.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/juniper/ex4100.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/juniper/ex4400.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/juniper/ex4650.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/juniper/modules.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/drivers/__init__.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/drivers/base.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/drivers/base_driver.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/exceptions/__init__.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/acl_model.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/ai_ops.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/asset.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/assignment.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/attribute_value.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/augment.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/auth_config.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/base.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/capability.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/collection_agent.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/compliance.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/composed_configuration.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/config_components.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/config_snapshot.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/contact.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/container_entry.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/credential.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/device_type.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/external_value.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/lldp_neighbor.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/lldp_topology.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/logging.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/logical_node.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/management_connection.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/ned.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/node_response.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/os_version.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/pagination.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/platform.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/reference.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/region.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/site.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/models/spanning_tree.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/normalizer/__init__.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/normalizer/base.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/normalizer/engine.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/os_versions.py +0 -0
- {acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/types/__init__.py +0 -0
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
from .agent_manifest import (
|
|
4
4
|
AckResult,
|
|
5
5
|
AgentConfigResponse,
|
|
6
|
+
AgentNodeSet,
|
|
7
|
+
AgentNodeSetResult,
|
|
6
8
|
CollectionAgentManifest,
|
|
7
9
|
ManifestTarget,
|
|
8
10
|
)
|
|
@@ -207,6 +209,8 @@ __all__ = [
|
|
|
207
209
|
"ManifestTarget",
|
|
208
210
|
"AckResult",
|
|
209
211
|
"AgentConfigResponse",
|
|
212
|
+
"AgentNodeSet",
|
|
213
|
+
"AgentNodeSetResult",
|
|
210
214
|
"LldpNeighborBase",
|
|
211
215
|
"LldpNeighborEntry",
|
|
212
216
|
"LldpNeighborUpload",
|
|
@@ -34,3 +34,22 @@ class AgentConfigResponse(BaseModel):
|
|
|
34
34
|
"""Rendered config text (TOML) for a telemetry agent."""
|
|
35
35
|
|
|
36
36
|
config: str
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class AgentNodeSet(BaseModel):
|
|
40
|
+
"""Declarative explicit-node membership for an agent (PUT …/nodes).
|
|
41
|
+
|
|
42
|
+
`node_ids` replaces the agent's explicit node links; an empty list removes
|
|
43
|
+
all. Rule-matched nodes are unaffected. When `expected_revision` is given
|
|
44
|
+
and differs from the agent's current `config_revision`, the request is
|
|
45
|
+
rejected with 409 so concurrent edits don't silently overwrite each other.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
node_ids: list[int]
|
|
49
|
+
expected_revision: int | None = None
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class AgentNodeSetResult(BaseModel):
|
|
53
|
+
added: list[int] = []
|
|
54
|
+
removed: list[int] = []
|
|
55
|
+
config_revision: int
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
from enum import StrEnum
|
|
2
|
+
from typing import Literal
|
|
2
3
|
|
|
3
4
|
from pydantic import BaseModel
|
|
4
5
|
|
|
@@ -79,6 +80,32 @@ class TelemetryAgentAck(BaseModel):
|
|
|
79
80
|
config_revision: int
|
|
80
81
|
|
|
81
82
|
|
|
83
|
+
class CapabilityCoverage(BaseModel):
|
|
84
|
+
"""Whether one node-scoped capability made it into the agent's config.
|
|
85
|
+
|
|
86
|
+
For `skipped`, `reason` is a stable code (e.g. "no_management_ip",
|
|
87
|
+
"no_logical_node", "component_error") and `detail` carries free-text
|
|
88
|
+
context when available.
|
|
89
|
+
"""
|
|
90
|
+
|
|
91
|
+
status: Literal["rendered", "skipped"]
|
|
92
|
+
reason: str | None = None
|
|
93
|
+
detail: str | None = None
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
class NodeCoverage(BaseModel):
|
|
97
|
+
"""One node the agent covers, and which capabilities are rendered for it.
|
|
98
|
+
|
|
99
|
+
`capabilities` holds only granted, node-scoped capabilities (e.g. icmp,
|
|
100
|
+
snmp) — agent-level listeners such as snmp_trap/syslog are not per node.
|
|
101
|
+
"""
|
|
102
|
+
|
|
103
|
+
node_id: int
|
|
104
|
+
hostname: str | None = None
|
|
105
|
+
source: Literal["explicit", "rule", "both"]
|
|
106
|
+
capabilities: dict[TelemetryCapability, CapabilityCoverage] = {}
|
|
107
|
+
|
|
108
|
+
|
|
82
109
|
class TelemetryAgentResponse(PersistedResponse, TelemetryAgentBase):
|
|
83
110
|
config_revision: int = 0
|
|
84
111
|
last_config_poll: str | None = None
|
|
@@ -88,6 +115,8 @@ class TelemetryAgentResponse(PersistedResponse, TelemetryAgentBase):
|
|
|
88
115
|
nodes: list[int] = []
|
|
89
116
|
rules: list[TelemetryAgentMatchRuleResponse] = []
|
|
90
117
|
resolved_nodes: list[int] = []
|
|
118
|
+
# Only populated on single-agent reads (GET /agents/{id}); empty in listings.
|
|
119
|
+
node_coverage: list[NodeCoverage] = []
|
|
91
120
|
|
|
92
121
|
|
|
93
122
|
__all__ = [
|
|
@@ -102,4 +131,6 @@ __all__ = [
|
|
|
102
131
|
"TelemetryAgentMatchRuleResponse",
|
|
103
132
|
"TelemetryAgentResponse",
|
|
104
133
|
"TelemetryAgentUpdate",
|
|
134
|
+
"CapabilityCoverage",
|
|
135
|
+
"NodeCoverage",
|
|
105
136
|
]
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{acex_devkit-2.7.0 → acex_devkit-2.9.0}/src/acex_devkit/device_types/fortinet/fortigate_f.py
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|