Переглянути джерело

Fixes #2113: Adjust NAPALM settings with headers

Saria Hajjar 6 роки тому
батько
коміт
dc475f4755
1 змінених файлів з 18 додано та 2 видалено
  1. 18 2
      netbox/dcim/api/views.py

+ 18 - 2
netbox/dcim/api/views.py

@@ -396,13 +396,29 @@ class DeviceViewSet(CustomFieldModelViewSet):
         napalm_methods = request.GET.getlist('method')
         response = OrderedDict([(m, None) for m in napalm_methods])
         ip_address = str(device.primary_ip.address.ip)
+        username = settings.NAPALM_USERNAME
+        password = settings.NAPALM_PASSWORD
         optional_args = settings.NAPALM_ARGS.copy()
         if device.platform.napalm_args is not None:
             optional_args.update(device.platform.napalm_args)
+
+        # Update NAPALM parameters according to the provided headers
+        for header in request.headers:
+            if header[:7].lower() != 'napalm-':
+                continue
+
+            key = header[7:]
+            if key.lower() == 'username':
+                username = request.headers[header]
+            elif key.lower() == 'password':
+                password = request.headers[header]
+            elif key:
+                optional_args[key.lower()] == request.headers[header]
+
         d = driver(
             hostname=ip_address,
-            username=settings.NAPALM_USERNAME,
-            password=settings.NAPALM_PASSWORD,
+            username=username,
+            password=password,
             timeout=settings.NAPALM_TIMEOUT,
             optional_args=optional_args
         )