-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathlocation.py
More file actions
119 lines (105 loc) · 3.33 KB
/
location.py
File metadata and controls
119 lines (105 loc) · 3.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
"""
Location entity examples for the Diode Python SDK.
This module demonstrates three patterns for ingesting Location entities:
- location_minimal: Required fields only
- location_extended: Common optional fields
- location_explicit: Fully nested objects with all fields
"""
from netboxlabs.diode.sdk import DiodeClient
from netboxlabs.diode.sdk.ingester import (
Entity,
Location,
Owner,
OwnerGroup,
Site,
Tag,
Tenant,
)
TARGET = "grpc://localhost:8080/diode"
APP_NAME = "location-example"
APP_VERSION = "1.0.0"
CLIENT_ID = "diode"
CLIENT_SECRET = "changeme"
def main():
"""Main execution - demonstrates ingesting a Location entity."""
with DiodeClient(
target=TARGET,
app_name=APP_NAME,
app_version=APP_VERSION,
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
) as client:
# Choose one of the three patterns:
location = location_minimal()
# location = location_extended()
# location = location_explicit()
response = client.ingest(entities=[Entity(location=location)])
if response.errors:
print(f"Errors: {response.errors}")
else:
print("Location ingested successfully")
def location_minimal() -> Location:
"""Create a Location with only required fields using flat strings."""
return Location(
name="Example Name",
slug="example-slug",
site="Example Site", # flat string -> Site
metadata={"source": "example"},
)
def location_extended() -> Location:
"""Create a Location with common optional fields."""
return Location(
name="Example Name",
slug="example-slug",
site="Example Site",
metadata={"source": "example", "custom_key": "custom_value"},
status="active",
description="Example description",
tenant="Example Tenant",
facility="Example Facility",
comments="Example comments",
)
def location_explicit() -> Location:
"""Create a Location with fully nested objects and all common fields."""
return Location(
name="Example Name",
slug="example-slug",
site=Site(
name="Example Name",
slug="example-slug",
status="active",
metadata={"source": "example"},
),
metadata={
"source": "example",
"custom_key": "custom_value",
"collected_at": "2024-01-15T10:30:00Z",
},
status="active",
description="Example description",
comments="Example comments",
facility="Example Facility",
parent=Location(
name="Example Name",
slug="example-slug",
site=Site(
name="Example Name",
slug="example-slug",
status="active",
metadata={"source": "example"},
),
status="active",
metadata={"source": "example"},
),
tenant=Tenant(
name="Example Name", slug="example-slug", metadata={"source": "example"}
),
owner=Owner(
name="Example Name",
group=OwnerGroup(name="Example Name", metadata={"source": "example"}),
metadata={"source": "example"},
),
tags=[Tag(name="production")],
)
if __name__ == "__main__":
main()