acex-devkit 2.8.0__tar.gz → 2.10.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.
Files changed (88) hide show
  1. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/PKG-INFO +1 -1
  2. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/pyproject.toml +1 -1
  3. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/__init__.py +8 -2
  4. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/agent_manifest.py +19 -0
  5. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/collection_agent.py +2 -1
  6. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/node_response.py +21 -5
  7. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/telemetry_agent.py +2 -1
  8. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/README.md +0 -0
  9. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/__init__.py +0 -0
  10. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/configdiffer/__init__.py +0 -0
  11. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/configdiffer/command.py +0 -0
  12. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/configdiffer/configdiffer.py +0 -0
  13. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/configdiffer/diff.py +0 -0
  14. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/configdiffer/old_configdiffer.py +0 -0
  15. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/configdiffer/old_diff.py +0 -0
  16. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/__init__.py +0 -0
  17. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/__init__.py +0 -0
  18. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/base.py +0 -0
  19. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst2950.py +0 -0
  20. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst2960.py +0 -0
  21. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst3500.py +0 -0
  22. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst3560.py +0 -0
  23. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst3650.py +0 -0
  24. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst3750.py +0 -0
  25. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst3850.py +0 -0
  26. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst4500.py +0 -0
  27. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst6500.py +0 -0
  28. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst6800.py +0 -0
  29. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst9200.py +0 -0
  30. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst9300.py +0 -0
  31. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst9400.py +0 -0
  32. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/catalyst9500.py +0 -0
  33. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/generic.py +0 -0
  34. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/industrial.py +0 -0
  35. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/modules.py +0 -0
  36. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/nexus9000.py +0 -0
  37. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/cisco/routers.py +0 -0
  38. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/fortinet/__init__.py +0 -0
  39. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/fortinet/base.py +0 -0
  40. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/fortinet/fortigate_f.py +0 -0
  41. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/juniper/__init__.py +0 -0
  42. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/juniper/base.py +0 -0
  43. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/juniper/ex2300.py +0 -0
  44. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/juniper/ex3400.py +0 -0
  45. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/juniper/ex4100.py +0 -0
  46. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/juniper/ex4400.py +0 -0
  47. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/juniper/ex4650.py +0 -0
  48. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/device_types/juniper/modules.py +0 -0
  49. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/drivers/__init__.py +0 -0
  50. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/drivers/base.py +0 -0
  51. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/drivers/base_driver.py +0 -0
  52. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/exceptions/__init__.py +0 -0
  53. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/acl_model.py +0 -0
  54. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/ai_ops.py +0 -0
  55. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/asset.py +0 -0
  56. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/assignment.py +0 -0
  57. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/attribute_value.py +0 -0
  58. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/augment.py +0 -0
  59. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/auth_config.py +0 -0
  60. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/base.py +0 -0
  61. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/capability.py +0 -0
  62. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/compliance.py +0 -0
  63. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/composed_configuration.py +0 -0
  64. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/config_components.py +0 -0
  65. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/config_snapshot.py +0 -0
  66. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/contact.py +0 -0
  67. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/container_entry.py +0 -0
  68. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/credential.py +0 -0
  69. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/device_type.py +0 -0
  70. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/external_value.py +0 -0
  71. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/lldp_neighbor.py +0 -0
  72. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/lldp_topology.py +0 -0
  73. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/logging.py +0 -0
  74. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/logical_node.py +0 -0
  75. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/management_connection.py +0 -0
  76. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/ned.py +0 -0
  77. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/os_version.py +0 -0
  78. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/pagination.py +0 -0
  79. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/platform.py +0 -0
  80. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/reference.py +0 -0
  81. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/region.py +0 -0
  82. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/site.py +0 -0
  83. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/models/spanning_tree.py +0 -0
  84. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/normalizer/__init__.py +0 -0
  85. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/normalizer/base.py +0 -0
  86. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/normalizer/engine.py +0 -0
  87. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/os_versions.py +0 -0
  88. {acex_devkit-2.8.0 → acex_devkit-2.10.0}/src/acex_devkit/types/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: acex-devkit
3
- Version: 2.8.0
3
+ Version: 2.10.0
4
4
  Summary: ACE-X DevKit - Development kit for building ACE-X drivers and plugins
5
5
  License: AGPL-3.0
6
6
  Keywords: automation,devkit,sdk,drivers,plugins
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "acex-devkit"
3
- version = "2.8.0"
3
+ version = "2.10.0"
4
4
  description = "ACE-X DevKit - Development kit for building ACE-X drivers and plugins"
5
5
  authors = ["Johan Lahti <johan.lahti@acebit.se>"]
6
6
  readme = "README.md"
@@ -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
  )
@@ -116,10 +118,11 @@ from .management_connection import (
116
118
  from .ned import Ned
117
119
  from .node_response import (
118
120
  AssetRefType,
121
+ NodeAdminStatus,
119
122
  NodeCreate,
120
123
  NodeListItem,
124
+ NodeProvisionStatus,
121
125
  NodeResponse,
122
- NodeStatus,
123
126
  NodeUpdate,
124
127
  )
125
128
  from .pagination import PaginatedResponse
@@ -168,7 +171,8 @@ __all__ = [
168
171
  "NodeListItem",
169
172
  "NodeUpdate",
170
173
  "AssetRefType",
171
- "NodeStatus",
174
+ "NodeAdminStatus",
175
+ "NodeProvisionStatus",
172
176
  "CredentialBase",
173
177
  "CredentialFieldBase",
174
178
  "CredentialFieldResponse",
@@ -207,6 +211,8 @@ __all__ = [
207
211
  "ManifestTarget",
208
212
  "AckResult",
209
213
  "AgentConfigResponse",
214
+ "AgentNodeSet",
215
+ "AgentNodeSetResult",
210
216
  "LldpNeighborBase",
211
217
  "LldpNeighborEntry",
212
218
  "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
@@ -15,7 +15,8 @@ class CollectionAgentMatchRuleBase(BaseModel):
15
15
  site: str | None = None
16
16
  vendor: str | None = None
17
17
  os: str | None = None
18
- status: str | None = None
18
+ admin_status: str | None = None
19
+ provision_status: str | None = None
19
20
  role: str | None = None
20
21
 
21
22
 
@@ -18,18 +18,32 @@ class AssetRefType(StrEnum):
18
18
  asset_cluster = "asset_cluster"
19
19
 
20
20
 
21
- class NodeStatus(StrEnum):
21
+ class NodeAdminStatus(StrEnum):
22
+ """Operator intent for the node."""
23
+
22
24
  planned = "planned"
23
- init = "init"
24
25
  active = "active"
25
26
  decommissioned = "decommissioned"
26
27
 
27
28
 
29
+ class NodeProvisionStatus(StrEnum):
30
+ """Where the node's device is in the provisioning lifecycle. Set by the provisioning flow, not by operators."""
31
+
32
+ unprovisioned = "unprovisioned" # never provisioned by ACEX
33
+ adopted = "adopted" # brownfield: already running when brought under management
34
+ pending = "pending" # ZTP armed, waiting for the device to show up
35
+ bootstrapping = "bootstrapping" # bootstrap config fetched, waiting for SSH reachability
36
+ provisioning = "provisioning" # full config being pushed and verified
37
+ provisioned = "provisioned" # provisioned by ACEX and verified
38
+ failed = "failed"
39
+
40
+
28
41
  class NodeBase(BaseModel):
29
42
  asset_ref_id: int
30
43
  asset_ref_type: AssetRefType | None = None
31
44
  logical_node_id: int
32
- status: NodeStatus | None = None
45
+ admin_status: NodeAdminStatus | None = None
46
+ provision_status: NodeProvisionStatus | None = None
33
47
 
34
48
 
35
49
  class NodeListItem(PersistedResponse, NodeBase):
@@ -53,7 +67,8 @@ class NodeUpdate(BaseModel):
53
67
  asset_ref_id: int | None = None
54
68
  asset_ref_type: AssetRefType | None = None
55
69
  logical_node_id: int | None = None
56
- status: NodeStatus | None = None
70
+ admin_status: NodeAdminStatus | None = None
71
+ provision_status: NodeProvisionStatus | None = None
57
72
 
58
73
 
59
74
  class NodeResponse(PersistedResponse, NodeBase):
@@ -67,7 +82,8 @@ class NodeResponse(PersistedResponse, NodeBase):
67
82
  __all__ = [
68
83
  "LogicalNodeResponse",
69
84
  "AssetRefType",
70
- "NodeStatus",
85
+ "NodeAdminStatus",
86
+ "NodeProvisionStatus",
71
87
  "NodeBase",
72
88
  "NodeListItem",
73
89
  "NodeResponse",
@@ -30,7 +30,8 @@ class TelemetryAgentMatchRuleBase(BaseModel):
30
30
  site: str | None = None
31
31
  vendor: str | None = None
32
32
  os: str | None = None
33
- status: str | None = None
33
+ admin_status: str | None = None
34
+ provision_status: str | None = None
34
35
  role: str | None = None
35
36
 
36
37
 
File without changes