-
Notifications
You must be signed in to change notification settings - Fork 1
/
nb_local_lib.py
executable file
·221 lines (169 loc) · 6.59 KB
/
nb_local_lib.py
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
import pynetbox
from credentials import *
import requests
import ipaddress
NETBOX = Netbox_Url
nb = pynetbox.api(
url=NETBOX,
token= Netbox_Token
)
# DEVICE/Tags IN NETBOX
def nb_DeviceTag_update_add(nb_device_id, nb_tag_name,weebhook_id):
try:
nb.extras.webhooks.update([
{
'id': weebhook_id,
"enabled": False
}
])
result = nb.dcim.devices.update(
[
{
'id': nb_device_id,
'tags': [
{
"name": nb_tag_name
}]}])
nb.extras.webhooks.update([
{
'id': weebhook_id,
"enabled": True
}
])
except pynetbox.lib.query.RequestError as e:
print(e.error)
def nb_DeviceTag_update_remove(nb_device_id, weebhook_id):
try:
nb.extras.webhooks.update([
{
'id': weebhook_id,
"enabled": False
}
])
result = nb.dcim.devices.update(
[
{
'id': nb_device_id,
'tags': []
}
])
nb.extras.webhooks.update([
{
'id': weebhook_id,
"enabled": True
}
])
except pynetbox.lib.query.RequestError as e:
print(e.error)
#######################################################3
def get_Platform_by_ID(PLATFORM_ID):
headers = {
'Authorization': f'Token {Netbox_Token}',
'Content-Type': 'application/json',
}
# ID del platform que deseas obtener
platform_id = PLATFORM_ID # Reemplaza con el ID del platform que buscas
# Endpoint de la API para obtener un platform específico por su ID
endpoint = f'api/dcim/platforms/{platform_id}/'
# Realizar la solicitud GET para obtener el platform específico
response = requests.get(f'{Netbox_Url}{endpoint}', headers=headers)
# Verificar el código de estado de la respuesta
if response.status_code == 200:
# Obtener los datos de la respuesta en formato JSON
platform_data = response.json()
# Mostrar el nombre del platform
return platform_data['name']
else:
print(f"WARNING | PLATFORM - TEMPLATE | NO PLATFORM ID: '{platform_id}' ")
# get the Site Name by SiteID
def get_Site_by_ID(SITE_ID):
headers = {
'Authorization': f'Token {Netbox_Token}',
'Content-Type': 'application/json',
}
# ID del platform que deseas obtener
site_id = SITE_ID # Reemplaza con el ID del platform que buscas
# Endpoint de la API para obtener un platform específico por su ID
endpoint = f'api/dcim/sites/{site_id}/'
# Realizar la solicitud GET para obtener el platform específico
response = requests.get(f'{Netbox_Url}{endpoint}', headers=headers)
# Verificar el código de estado de la respuesta
if response.status_code == 200:
# Obtener los datos de la respuesta en formato JSON
platform_data = response.json()
# Mostrar el nombre del platform
return platform_data['name']
else:
print(f"WARNING | SITE - HOSTGROUP | NO SITE ID for SITE: '{site_id}' ")
#print(get_Site_by_ID(1))
##################
# IP ADDRESS
# ----------
def get_DeviceId_by_DeviceName(DEVICE_NAME):
# Endpoint de la API para buscar dispositivos
endpoint = f"{Netbox_Url}api/dcim/devices/?name={DEVICE_NAME}"
# Agregar el token de autenticación a los headers de la solicitud
headers = {'Authorization': f'Token {Netbox_Token}'}
# Realizar la solicitud GET a la API de NetBox
response = requests.get(endpoint, headers=headers)
# Comprobar si la solicitud fue exitosa (código 200)
if response.status_code == 200:
data = response.json()
# Verificar si se encontraron resultados
if data['count'] == 1:
device_id = data['results'][0]['id']
print(f"ID del dispositivo '{DEVICE_NAME}': {device_id}")
return(device_id)
elif data['count'] > 1:
print(f"Se encontraron múltiples dispositivos con el nombre '{DEVICE_NAME}'. Especifique un nombre más único.")
else:
print(f"No se encontró ningún dispositivo con el nombre '{DEVICE_NAME}'.")
else:
print(f"Error: No se pudo obtener el ID del dispositivo. Código de error: {response.status_code}")
#get_DeviceId_by_DeviceName("adrian")
#1
def get_ips_by_devices(DEVICE_NAME):
device_id = get_DeviceId_by_DeviceName(DEVICE_NAME)
# Endpoint de la API para obtener las direcciones IP de un dispositivo
endpoint = f"{Netbox_Url}api/ipam/ip-addresses/?device_id={device_id}"
# Agregar el token de autenticación a los headers de la solicitud
headers = {'Authorization': f'Token {Netbox_Token}'}
# Realizar la solicitud GET a la API de NetBox
response = requests.get(endpoint, headers=headers)
# Comprobar si la solicitud fue exitosa (código 200)
if response.status_code == 200:
data = response.json()
# Imprimir las direcciones IP asociadas al dispositivo
IpAddress_Ids = []
for ip_address in data['results']:
ip_cidr = ip_address['address']
convert_to_ip = ipaddress.IPv4Interface(ip_cidr)
nb_primary_ip = str(convert_to_ip.ip)
IpAddress_Ids.append(nb_primary_ip)
return IpAddress_Ids
else:
print(f"Error: No se pudo obtener las direcciones IP. Código de error: {response.status_code}")
#get_ip_by_devices("adrian")
def get_IPadress_By_IPaddress_ID(IP_ADDRESS_ID):
# HTTP headers for the API request (including the authentication token)
headers = {
'Authorization': f'Token {Netbox_Token}',
'Content-Type': 'application/json',
}
# URL for the specific IP address API endpoint
url = f'{Netbox_Url}api/ipam/ip-addresses/{IP_ADDRESS_ID}/'
# Make the API request
response = requests.get(url, headers=headers)
# Check if the request was successful (status code 200)
if response.status_code == 200:
# Parse the JSON response
ip_address_data = response.json()
# Extract the IP address string from the response data
ip_address = ip_address_data['address']
convert_to_ip = ipaddress.IPv4Interface(ip_address)
nb_primary_ip = str(convert_to_ip.ip)
print(f"The IP address string for IP ID {IP_ADDRESS_ID} is: {nb_primary_ip}")
return nb_primary_ip
else:
print(f"Failed to retrieve IP address. Status Code: {response.status_code}")
#get_IPadress_By_IPaddress_ID("9")