From e4129ef02d88cd066008532b139cfa8511a3068f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Markus=20Viitam=C3=A4ki?=
 <markus.viitamaki@embark-studios.com>
Date: Thu, 20 Jul 2023 00:12:06 +0200
Subject: [PATCH] Juniper EX4400 Series and ACX7100-32C (#1290)

* Adding ACX7100-32C (Juniper)

* Adding EX4400 Series Switches (Juniper)

* align slug to start with vendor-name

* adding module types

* remove airflow from modules and adding weight to ACX7100-32C

* create device types for all ACX7100 models

* fix position

* adding AFI, AFO and AC/DC models for EX4400 series

* fix slug

* add part_number to all devices

* fix typo in module name

---------

Co-authored-by: Daniel W. Anner <daniel.anner@danstechsupport.com>
---
 device-types/Juniper/ACX7100-32C-AC-AO.yaml  | 105 ++++++++++++++
 device-types/Juniper/ACX7100-32C-DC-AO.yaml  | 105 ++++++++++++++
 device-types/Juniper/ACX7100-48L-AC-AI.yaml  | 141 +++++++++++++++++++
 device-types/Juniper/ACX7100-48L-AC-AO.yaml  |  20 ++-
 device-types/Juniper/ACX7100-48L-DC-AI.yaml  | 141 +++++++++++++++++++
 device-types/Juniper/ACX7100-48L-DC-AO.yaml  | 141 +++++++++++++++++++
 device-types/Juniper/EX4400-24MP.yaml        |  84 +++++++++++
 device-types/Juniper/EX4400-24P.yaml         |  84 +++++++++++
 device-types/Juniper/EX4400-24T-AFI.yaml     |  84 +++++++++++
 device-types/Juniper/EX4400-24T-DC-AFI.yaml  |  84 +++++++++++
 device-types/Juniper/EX4400-24T-DC.yaml      |  84 +++++++++++
 device-types/Juniper/EX4400-24T.yaml         |  84 +++++++++++
 device-types/Juniper/EX4400-24X-AFI.yaml     |  84 +++++++++++
 device-types/Juniper/EX4400-24X-DC-AFI.yaml  |  84 +++++++++++
 device-types/Juniper/EX4400-24X-DC.yaml      |  84 +++++++++++
 device-types/Juniper/EX4400-24X.yaml         |  84 +++++++++++
 device-types/Juniper/EX4400-48F-AFI.yaml     | 132 +++++++++++++++++
 device-types/Juniper/EX4400-48F-DC-AFI.yaml  | 132 +++++++++++++++++
 device-types/Juniper/EX4400-48F-DC.yaml      | 132 +++++++++++++++++
 device-types/Juniper/EX4400-48F.yaml         | 132 +++++++++++++++++
 device-types/Juniper/EX4400-48MP.yaml        | 132 +++++++++++++++++
 device-types/Juniper/EX4400-48P.yaml         | 132 +++++++++++++++++
 device-types/Juniper/EX4400-48T-AFI.yaml     | 132 +++++++++++++++++
 device-types/Juniper/EX4400-48T-DC-AFI.yaml  | 132 +++++++++++++++++
 device-types/Juniper/EX4400-48T-DC.yaml      | 132 +++++++++++++++++
 device-types/Juniper/EX4400-48T.yaml         | 132 +++++++++++++++++
 module-types/Juniper/EX4400-EM-1C.yaml       |  10 ++
 module-types/Juniper/EX4400-EM-4S.yaml       |  16 +++
 module-types/Juniper/EX4400-EM-4Y.yaml       |  16 +++
 module-types/Juniper/JNP7100-FAN1RU-AI.yaml  |   6 +
 module-types/Juniper/JNP7100-FAN1RU-AO.yaml  |   6 +
 module-types/Juniper/JPSU-1050-C-AC-AFO.yaml |  11 ++
 module-types/Juniper/JPSU-1600-C-AC-AFO.yaml |  11 ++
 module-types/Juniper/JPSU-1600W-1UACAFI.yaml |  12 ++
 module-types/Juniper/JPSU-1600W-1UACAFO.yaml |  12 ++
 module-types/Juniper/JPSU-1600W-1UDCAFI.yaml |  12 ++
 module-types/Juniper/JPSU-1600W-1UDCAFO.yaml |  12 ++
 module-types/Juniper/JPSU-550-C-AC-AFI.yaml  |  11 ++
 module-types/Juniper/JPSU-550-C-AC-AFO.yaml  |  11 ++
 module-types/Juniper/JPSU-550-C-DC-AFI.yaml  |  11 ++
 module-types/Juniper/JPSU-550-C-DC-AFO.yaml  |  11 ++
 41 files changed, 2975 insertions(+), 6 deletions(-)
 create mode 100644 device-types/Juniper/ACX7100-32C-AC-AO.yaml
 create mode 100644 device-types/Juniper/ACX7100-32C-DC-AO.yaml
 create mode 100644 device-types/Juniper/ACX7100-48L-AC-AI.yaml
 create mode 100644 device-types/Juniper/ACX7100-48L-DC-AI.yaml
 create mode 100644 device-types/Juniper/ACX7100-48L-DC-AO.yaml
 create mode 100644 device-types/Juniper/EX4400-24MP.yaml
 create mode 100644 device-types/Juniper/EX4400-24P.yaml
 create mode 100644 device-types/Juniper/EX4400-24T-AFI.yaml
 create mode 100644 device-types/Juniper/EX4400-24T-DC-AFI.yaml
 create mode 100644 device-types/Juniper/EX4400-24T-DC.yaml
 create mode 100644 device-types/Juniper/EX4400-24T.yaml
 create mode 100644 device-types/Juniper/EX4400-24X-AFI.yaml
 create mode 100644 device-types/Juniper/EX4400-24X-DC-AFI.yaml
 create mode 100644 device-types/Juniper/EX4400-24X-DC.yaml
 create mode 100644 device-types/Juniper/EX4400-24X.yaml
 create mode 100644 device-types/Juniper/EX4400-48F-AFI.yaml
 create mode 100644 device-types/Juniper/EX4400-48F-DC-AFI.yaml
 create mode 100644 device-types/Juniper/EX4400-48F-DC.yaml
 create mode 100644 device-types/Juniper/EX4400-48F.yaml
 create mode 100644 device-types/Juniper/EX4400-48MP.yaml
 create mode 100644 device-types/Juniper/EX4400-48P.yaml
 create mode 100644 device-types/Juniper/EX4400-48T-AFI.yaml
 create mode 100644 device-types/Juniper/EX4400-48T-DC-AFI.yaml
 create mode 100644 device-types/Juniper/EX4400-48T-DC.yaml
 create mode 100644 device-types/Juniper/EX4400-48T.yaml
 create mode 100644 module-types/Juniper/EX4400-EM-1C.yaml
 create mode 100644 module-types/Juniper/EX4400-EM-4S.yaml
 create mode 100644 module-types/Juniper/EX4400-EM-4Y.yaml
 create mode 100644 module-types/Juniper/JNP7100-FAN1RU-AI.yaml
 create mode 100644 module-types/Juniper/JNP7100-FAN1RU-AO.yaml
 create mode 100644 module-types/Juniper/JPSU-1050-C-AC-AFO.yaml
 create mode 100644 module-types/Juniper/JPSU-1600-C-AC-AFO.yaml
 create mode 100644 module-types/Juniper/JPSU-1600W-1UACAFI.yaml
 create mode 100644 module-types/Juniper/JPSU-1600W-1UACAFO.yaml
 create mode 100644 module-types/Juniper/JPSU-1600W-1UDCAFI.yaml
 create mode 100644 module-types/Juniper/JPSU-1600W-1UDCAFO.yaml
 create mode 100644 module-types/Juniper/JPSU-550-C-AC-AFI.yaml
 create mode 100644 module-types/Juniper/JPSU-550-C-AC-AFO.yaml
 create mode 100644 module-types/Juniper/JPSU-550-C-DC-AFI.yaml
 create mode 100644 module-types/Juniper/JPSU-550-C-DC-AFO.yaml

diff --git a/device-types/Juniper/ACX7100-32C-AC-AO.yaml b/device-types/Juniper/ACX7100-32C-AC-AO.yaml
new file mode 100644
index 00000000..dd224877
--- /dev/null
+++ b/device-types/Juniper/ACX7100-32C-AC-AO.yaml
@@ -0,0 +1,105 @@
+---
+manufacturer: Juniper
+model: ACX7100-32C-AC-AO
+part_number: ACX7100-32C-AC-AO
+slug: juniper-acx7100-32c-ac-ao
+u_height: 1
+weight: 22.24
+weight_unit: lb
+airflow: front-to-rear
+is_full_depth: true
+comments: '[Juniper ACX7100-32C Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/acx7100-32C/topics/topic-map/acx7100-32C-system-overview.html)'
+console-ports:
+  - name: Console
+    type: rj-45
+interfaces:
+  - name: re0:mgmt-0
+    type: 1000base-t
+    mgmt_only: true
+  - name: et-0/0/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/1
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/2
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/3
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/4
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/5
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/6
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/7
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/8
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/9
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/10
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/11
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/12
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/13
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/14
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/15
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/16
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/17
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/18
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/19
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/20
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/21
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/22
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/23
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/24
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/25
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/26
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/27
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/28
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/29
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/30
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/31
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/32
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/33
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/34
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/35
+    type: 400gbase-x-qsfpdd
+module-bays:
+  - name: PSM 0
+    # Comment: Power Supply Module 0
+    maximum_draw: 1600
+    position: '0'
+  - name: PSM 1
+    # Comment: Power Supply Module 1
+    maximum_draw: 1600
+    position: '1'
+  - name: Fan Module 0
+  - name: Fan Module 1
+  - name: Fan Module 2
+  - name: Fan Module 3
+  - name: Fan Module 4
+  - name: Fan Module 5
diff --git a/device-types/Juniper/ACX7100-32C-DC-AO.yaml b/device-types/Juniper/ACX7100-32C-DC-AO.yaml
new file mode 100644
index 00000000..d2ce79bb
--- /dev/null
+++ b/device-types/Juniper/ACX7100-32C-DC-AO.yaml
@@ -0,0 +1,105 @@
+---
+manufacturer: Juniper
+model: ACX7100-32C-DC-AO
+part_number: ACX7100-32C-DC-AO
+slug: juniper-acx7100-32c-dc-ao
+u_height: 1
+weight: 22.24
+weight_unit: lb
+airflow: front-to-rear
+is_full_depth: true
+comments: '[Juniper ACX7100-32C Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/acx7100-32C/topics/topic-map/acx7100-32C-system-overview.html)'
+console-ports:
+  - name: Console
+    type: rj-45
+interfaces:
+  - name: re0:mgmt-0
+    type: 1000base-t
+    mgmt_only: true
+  - name: et-0/0/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/1
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/2
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/3
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/4
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/5
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/6
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/7
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/8
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/9
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/10
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/11
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/12
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/13
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/14
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/15
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/16
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/17
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/18
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/19
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/20
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/21
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/22
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/23
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/24
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/25
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/26
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/27
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/28
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/29
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/30
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/31
+    type: 100gbase-x-qsfp28
+  - name: et-0/0/32
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/33
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/34
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/35
+    type: 400gbase-x-qsfpdd
+module-bays:
+  - name: PSM 0
+    # Comment: Power Supply Module 0
+    maximum_draw: 1600
+    position: '0'
+  - name: PSM 1
+    # Comment: Power Supply Module 1
+    maximum_draw: 1600
+    position: '1'
+  - name: Fan Module 0
+  - name: Fan Module 1
+  - name: Fan Module 2
+  - name: Fan Module 3
+  - name: Fan Module 4
+  - name: Fan Module 5
diff --git a/device-types/Juniper/ACX7100-48L-AC-AI.yaml b/device-types/Juniper/ACX7100-48L-AC-AI.yaml
new file mode 100644
index 00000000..0a3f47f5
--- /dev/null
+++ b/device-types/Juniper/ACX7100-48L-AC-AI.yaml
@@ -0,0 +1,141 @@
+---
+manufacturer: Juniper
+model: ACX7100-48L-AC-AI
+part_number: ACX7100-48L-AC-AI
+slug: juniper-acx7100-48l-ac-ai
+u_height: 1
+weight: 20.54
+weight_unit: lb
+airflow: rear-to-front
+is_full_depth: true
+comments: '[Juniper ACX7100-48L Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/acx7100-48L/topics/topic-map/acx7100-48L-system-overview.html)'
+console-ports:
+  - name: Console
+    type: rj-45
+interfaces:
+  - name: re0:mgmt-0
+    type: 1000base-t
+    mgmt_only: true
+  - name: et-0/0/0
+    type: 25gbase-x-sfp28
+  - name: et-0/0/1
+    type: 25gbase-x-sfp28
+  - name: et-0/0/2
+    type: 25gbase-x-sfp28
+  - name: et-0/0/3
+    type: 25gbase-x-sfp28
+  - name: et-0/0/4
+    type: 25gbase-x-sfp28
+  - name: et-0/0/5
+    type: 25gbase-x-sfp28
+  - name: et-0/0/6
+    type: 25gbase-x-sfp28
+  - name: et-0/0/7
+    type: 25gbase-x-sfp28
+  - name: et-0/0/8
+    type: 25gbase-x-sfp28
+  - name: et-0/0/9
+    type: 25gbase-x-sfp28
+  - name: et-0/0/10
+    type: 25gbase-x-sfp28
+  - name: et-0/0/11
+    type: 25gbase-x-sfp28
+  - name: et-0/0/12
+    type: 25gbase-x-sfp28
+  - name: et-0/0/13
+    type: 25gbase-x-sfp28
+  - name: et-0/0/14
+    type: 25gbase-x-sfp28
+  - name: et-0/0/15
+    type: 25gbase-x-sfp28
+  - name: et-0/0/16
+    type: 25gbase-x-sfp28
+  - name: et-0/0/17
+    type: 25gbase-x-sfp28
+  - name: et-0/0/18
+    type: 25gbase-x-sfp28
+  - name: et-0/0/19
+    type: 25gbase-x-sfp28
+  - name: et-0/0/20
+    type: 25gbase-x-sfp28
+  - name: et-0/0/21
+    type: 25gbase-x-sfp28
+  - name: et-0/0/22
+    type: 25gbase-x-sfp28
+  - name: et-0/0/23
+    type: 25gbase-x-sfp28
+  - name: et-0/0/24
+    type: 25gbase-x-sfp28
+  - name: et-0/0/25
+    type: 25gbase-x-sfp28
+  - name: et-0/0/26
+    type: 25gbase-x-sfp28
+  - name: et-0/0/27
+    type: 25gbase-x-sfp28
+  - name: et-0/0/28
+    type: 25gbase-x-sfp28
+  - name: et-0/0/29
+    type: 25gbase-x-sfp28
+  - name: et-0/0/30
+    type: 25gbase-x-sfp28
+  - name: et-0/0/31
+    type: 25gbase-x-sfp28
+  - name: et-0/0/32
+    type: 25gbase-x-sfp28
+  - name: et-0/0/33
+    type: 25gbase-x-sfp28
+  - name: et-0/0/34
+    type: 25gbase-x-sfp28
+  - name: et-0/0/35
+    type: 25gbase-x-sfp28
+  - name: et-0/0/36
+    type: 25gbase-x-sfp28
+  - name: et-0/0/37
+    type: 25gbase-x-sfp28
+  - name: et-0/0/38
+    type: 25gbase-x-sfp28
+  - name: et-0/0/39
+    type: 25gbase-x-sfp28
+  - name: et-0/0/40
+    type: 25gbase-x-sfp28
+  - name: et-0/0/41
+    type: 25gbase-x-sfp28
+  - name: et-0/0/42
+    type: 25gbase-x-sfp28
+  - name: et-0/0/43
+    type: 25gbase-x-sfp28
+  - name: et-0/0/44
+    type: 25gbase-x-sfp28
+  - name: et-0/0/45
+    type: 25gbase-x-sfp28
+  - name: et-0/0/46
+    type: 25gbase-x-sfp28
+  - name: et-0/0/47
+    type: 25gbase-x-sfp28
+  - name: et-0/0/48
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/49
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/50
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/51
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/52
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/53
+    type: 400gbase-x-qsfpdd
+module-bays:
+  - name: PSM 0
+    # Comment: Power Supply Module 0
+    maximum_draw: 1600
+    position: '0'
+  - name: PSM 1
+    # Comment: Power Supply Module 1
+    maximum_draw: 1600
+    poisition: '1'
+  - name: Fan Module 0
+  - name: Fan Module 1
+  - name: Fan Module 2
+  - name: Fan Module 3
+  - name: Fan Module 4
+  - name: Fan Module 5
diff --git a/device-types/Juniper/ACX7100-48L-AC-AO.yaml b/device-types/Juniper/ACX7100-48L-AC-AO.yaml
index f8746a10..c3ca0052 100644
--- a/device-types/Juniper/ACX7100-48L-AC-AO.yaml
+++ b/device-types/Juniper/ACX7100-48L-AC-AO.yaml
@@ -1,9 +1,13 @@
 ---
 manufacturer: Juniper
 model: ACX7100-48L-AC-AO
+part_number: ACX7100-48L-AC-AO
 slug: juniper-acx7100-48l-ac-ao
 u_height: 1
+weight: 20.54
+weight_unit: lb
 airflow: front-to-rear
+is_full_depth: true
 comments: '[Juniper ACX7100-48L Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/acx7100-48L/topics/topic-map/acx7100-48L-system-overview.html)'
 console-ports:
   - name: Console
@@ -123,11 +127,15 @@ interfaces:
 module-bays:
   - name: PSM 0
     # Comment: Power Supply Module 0
+    maximum_draw: 1600
+    position: '0'
   - name: PSM 1
     # Comment: Power Supply Module 1
-  - name: Fan Tray 0
-  - name: Fan Tray 1
-  - name: Fan Tray 2
-  - name: Fan Tray 3
-  - name: Fan Tray 4
-  - name: Fan Tray 5
+    maximum_draw: 1600
+    poisition: '1'
+  - name: Fan Module 0
+  - name: Fan Module 1
+  - name: Fan Module 2
+  - name: Fan Module 3
+  - name: Fan Module 4
+  - name: Fan Module 5
diff --git a/device-types/Juniper/ACX7100-48L-DC-AI.yaml b/device-types/Juniper/ACX7100-48L-DC-AI.yaml
new file mode 100644
index 00000000..f6604100
--- /dev/null
+++ b/device-types/Juniper/ACX7100-48L-DC-AI.yaml
@@ -0,0 +1,141 @@
+---
+manufacturer: Juniper
+model: ACX7100-48L-DC-AI
+part_number: ACX7100-48L-DC-AI
+slug: juniper-acx7100-48l-dc-ai
+u_height: 1
+weight: 20.54
+weight_unit: lb
+airflow: rear-to-front
+is_full_depth: true
+comments: '[Juniper ACX7100-48L Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/acx7100-48L/topics/topic-map/acx7100-48L-system-overview.html)'
+console-ports:
+  - name: Console
+    type: rj-45
+interfaces:
+  - name: re0:mgmt-0
+    type: 1000base-t
+    mgmt_only: true
+  - name: et-0/0/0
+    type: 25gbase-x-sfp28
+  - name: et-0/0/1
+    type: 25gbase-x-sfp28
+  - name: et-0/0/2
+    type: 25gbase-x-sfp28
+  - name: et-0/0/3
+    type: 25gbase-x-sfp28
+  - name: et-0/0/4
+    type: 25gbase-x-sfp28
+  - name: et-0/0/5
+    type: 25gbase-x-sfp28
+  - name: et-0/0/6
+    type: 25gbase-x-sfp28
+  - name: et-0/0/7
+    type: 25gbase-x-sfp28
+  - name: et-0/0/8
+    type: 25gbase-x-sfp28
+  - name: et-0/0/9
+    type: 25gbase-x-sfp28
+  - name: et-0/0/10
+    type: 25gbase-x-sfp28
+  - name: et-0/0/11
+    type: 25gbase-x-sfp28
+  - name: et-0/0/12
+    type: 25gbase-x-sfp28
+  - name: et-0/0/13
+    type: 25gbase-x-sfp28
+  - name: et-0/0/14
+    type: 25gbase-x-sfp28
+  - name: et-0/0/15
+    type: 25gbase-x-sfp28
+  - name: et-0/0/16
+    type: 25gbase-x-sfp28
+  - name: et-0/0/17
+    type: 25gbase-x-sfp28
+  - name: et-0/0/18
+    type: 25gbase-x-sfp28
+  - name: et-0/0/19
+    type: 25gbase-x-sfp28
+  - name: et-0/0/20
+    type: 25gbase-x-sfp28
+  - name: et-0/0/21
+    type: 25gbase-x-sfp28
+  - name: et-0/0/22
+    type: 25gbase-x-sfp28
+  - name: et-0/0/23
+    type: 25gbase-x-sfp28
+  - name: et-0/0/24
+    type: 25gbase-x-sfp28
+  - name: et-0/0/25
+    type: 25gbase-x-sfp28
+  - name: et-0/0/26
+    type: 25gbase-x-sfp28
+  - name: et-0/0/27
+    type: 25gbase-x-sfp28
+  - name: et-0/0/28
+    type: 25gbase-x-sfp28
+  - name: et-0/0/29
+    type: 25gbase-x-sfp28
+  - name: et-0/0/30
+    type: 25gbase-x-sfp28
+  - name: et-0/0/31
+    type: 25gbase-x-sfp28
+  - name: et-0/0/32
+    type: 25gbase-x-sfp28
+  - name: et-0/0/33
+    type: 25gbase-x-sfp28
+  - name: et-0/0/34
+    type: 25gbase-x-sfp28
+  - name: et-0/0/35
+    type: 25gbase-x-sfp28
+  - name: et-0/0/36
+    type: 25gbase-x-sfp28
+  - name: et-0/0/37
+    type: 25gbase-x-sfp28
+  - name: et-0/0/38
+    type: 25gbase-x-sfp28
+  - name: et-0/0/39
+    type: 25gbase-x-sfp28
+  - name: et-0/0/40
+    type: 25gbase-x-sfp28
+  - name: et-0/0/41
+    type: 25gbase-x-sfp28
+  - name: et-0/0/42
+    type: 25gbase-x-sfp28
+  - name: et-0/0/43
+    type: 25gbase-x-sfp28
+  - name: et-0/0/44
+    type: 25gbase-x-sfp28
+  - name: et-0/0/45
+    type: 25gbase-x-sfp28
+  - name: et-0/0/46
+    type: 25gbase-x-sfp28
+  - name: et-0/0/47
+    type: 25gbase-x-sfp28
+  - name: et-0/0/48
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/49
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/50
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/51
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/52
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/53
+    type: 400gbase-x-qsfpdd
+module-bays:
+  - name: PSM 0
+    # Comment: Power Supply Module 0
+    maximum_draw: 1600
+    position: '0'
+  - name: PSM 1
+    # Comment: Power Supply Module 1
+    maximum_draw: 1600
+    poisition: '1'
+  - name: Fan Module 0
+  - name: Fan Module 1
+  - name: Fan Module 2
+  - name: Fan Module 3
+  - name: Fan Module 4
+  - name: Fan Module 5
diff --git a/device-types/Juniper/ACX7100-48L-DC-AO.yaml b/device-types/Juniper/ACX7100-48L-DC-AO.yaml
new file mode 100644
index 00000000..386f1e6b
--- /dev/null
+++ b/device-types/Juniper/ACX7100-48L-DC-AO.yaml
@@ -0,0 +1,141 @@
+---
+manufacturer: Juniper
+model: ACX7100-48L-DC-AO
+part_number: ACX7100-48L-DC-AO
+slug: juniper-acx7100-48l-dc-ao
+u_height: 1
+weight: 20.54
+weight_unit: lb
+airflow: front-to-rear
+is_full_depth: true
+comments: '[Juniper ACX7100-48L Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/acx7100-48L/topics/topic-map/acx7100-48L-system-overview.html)'
+console-ports:
+  - name: Console
+    type: rj-45
+interfaces:
+  - name: re0:mgmt-0
+    type: 1000base-t
+    mgmt_only: true
+  - name: et-0/0/0
+    type: 25gbase-x-sfp28
+  - name: et-0/0/1
+    type: 25gbase-x-sfp28
+  - name: et-0/0/2
+    type: 25gbase-x-sfp28
+  - name: et-0/0/3
+    type: 25gbase-x-sfp28
+  - name: et-0/0/4
+    type: 25gbase-x-sfp28
+  - name: et-0/0/5
+    type: 25gbase-x-sfp28
+  - name: et-0/0/6
+    type: 25gbase-x-sfp28
+  - name: et-0/0/7
+    type: 25gbase-x-sfp28
+  - name: et-0/0/8
+    type: 25gbase-x-sfp28
+  - name: et-0/0/9
+    type: 25gbase-x-sfp28
+  - name: et-0/0/10
+    type: 25gbase-x-sfp28
+  - name: et-0/0/11
+    type: 25gbase-x-sfp28
+  - name: et-0/0/12
+    type: 25gbase-x-sfp28
+  - name: et-0/0/13
+    type: 25gbase-x-sfp28
+  - name: et-0/0/14
+    type: 25gbase-x-sfp28
+  - name: et-0/0/15
+    type: 25gbase-x-sfp28
+  - name: et-0/0/16
+    type: 25gbase-x-sfp28
+  - name: et-0/0/17
+    type: 25gbase-x-sfp28
+  - name: et-0/0/18
+    type: 25gbase-x-sfp28
+  - name: et-0/0/19
+    type: 25gbase-x-sfp28
+  - name: et-0/0/20
+    type: 25gbase-x-sfp28
+  - name: et-0/0/21
+    type: 25gbase-x-sfp28
+  - name: et-0/0/22
+    type: 25gbase-x-sfp28
+  - name: et-0/0/23
+    type: 25gbase-x-sfp28
+  - name: et-0/0/24
+    type: 25gbase-x-sfp28
+  - name: et-0/0/25
+    type: 25gbase-x-sfp28
+  - name: et-0/0/26
+    type: 25gbase-x-sfp28
+  - name: et-0/0/27
+    type: 25gbase-x-sfp28
+  - name: et-0/0/28
+    type: 25gbase-x-sfp28
+  - name: et-0/0/29
+    type: 25gbase-x-sfp28
+  - name: et-0/0/30
+    type: 25gbase-x-sfp28
+  - name: et-0/0/31
+    type: 25gbase-x-sfp28
+  - name: et-0/0/32
+    type: 25gbase-x-sfp28
+  - name: et-0/0/33
+    type: 25gbase-x-sfp28
+  - name: et-0/0/34
+    type: 25gbase-x-sfp28
+  - name: et-0/0/35
+    type: 25gbase-x-sfp28
+  - name: et-0/0/36
+    type: 25gbase-x-sfp28
+  - name: et-0/0/37
+    type: 25gbase-x-sfp28
+  - name: et-0/0/38
+    type: 25gbase-x-sfp28
+  - name: et-0/0/39
+    type: 25gbase-x-sfp28
+  - name: et-0/0/40
+    type: 25gbase-x-sfp28
+  - name: et-0/0/41
+    type: 25gbase-x-sfp28
+  - name: et-0/0/42
+    type: 25gbase-x-sfp28
+  - name: et-0/0/43
+    type: 25gbase-x-sfp28
+  - name: et-0/0/44
+    type: 25gbase-x-sfp28
+  - name: et-0/0/45
+    type: 25gbase-x-sfp28
+  - name: et-0/0/46
+    type: 25gbase-x-sfp28
+  - name: et-0/0/47
+    type: 25gbase-x-sfp28
+  - name: et-0/0/48
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/49
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/50
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/51
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/52
+    type: 400gbase-x-qsfpdd
+  - name: et-0/0/53
+    type: 400gbase-x-qsfpdd
+module-bays:
+  - name: PSM 0
+    # Comment: Power Supply Module 0
+    maximum_draw: 1600
+    position: '0'
+  - name: PSM 1
+    # Comment: Power Supply Module 1
+    maximum_draw: 1600
+    poisition: '1'
+  - name: Fan Module 0
+  - name: Fan Module 1
+  - name: Fan Module 2
+  - name: Fan Module 3
+  - name: Fan Module 4
+  - name: Fan Module 5
diff --git a/device-types/Juniper/EX4400-24MP.yaml b/device-types/Juniper/EX4400-24MP.yaml
new file mode 100644
index 00000000..481cb8d5
--- /dev/null
+++ b/device-types/Juniper/EX4400-24MP.yaml
@@ -0,0 +1,84 @@
+---
+manufacturer: Juniper
+model: EX4400-24MP
+part_number: EX4400-24MP
+slug: juniper-ex4400-24mp
+u_height: 1
+airflow: front-to-rear
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: mge-0/0/0
+    type: 10gbase-t
+  - name: mge-0/0/1
+    type: 10gbase-t
+  - name: mge-0/0/2
+    type: 10gbase-t
+  - name: mge-0/0/3
+    type: 10gbase-t
+  - name: mge-0/0/4
+    type: 10gbase-t
+  - name: mge-0/0/5
+    type: 10gbase-t
+  - name: mge-0/0/6
+    type: 10gbase-t
+  - name: mge-0/0/7
+    type: 10gbase-t
+  - name: mge-0/0/8
+    type: 10gbase-t
+  - name: mge-0/0/9
+    type: 10gbase-t
+  - name: mge-0/0/10
+    type: 10gbase-t
+  - name: mge-0/0/11
+    type: 10gbase-t
+  - name: mge-0/0/12
+    type: 10gbase-t
+  - name: mge-0/0/13
+    type: 10gbase-t
+  - name: mge-0/0/14
+    type: 10gbase-t
+  - name: mge-0/0/15
+    type: 10gbase-t
+  - name: mge-0/0/16
+    type: 10gbase-t
+  - name: mge-0/0/17
+    type: 10gbase-t
+  - name: mge-0/0/18
+    type: 10gbase-t
+  - name: mge-0/0/19
+    type: 10gbase-t
+  - name: mge-0/0/20
+    type: 10gbase-t
+  - name: mge-0/0/21
+    type: 10gbase-t
+  - name: mge-0/0/22
+    type: 10gbase-t
+  - name: mge-0/0/23
+    type: 10gbase-t
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-24P.yaml b/device-types/Juniper/EX4400-24P.yaml
new file mode 100644
index 00000000..20e71c81
--- /dev/null
+++ b/device-types/Juniper/EX4400-24P.yaml
@@ -0,0 +1,84 @@
+---
+manufacturer: Juniper
+model: EX4400-24P
+part_number: EX4400-24P
+slug: juniper-ex4400-24p
+u_height: 1
+airflow: front-to-rear
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-t
+  - name: ge-0/0/1
+    type: 1000base-t
+  - name: ge-0/0/2
+    type: 1000base-t
+  - name: ge-0/0/3
+    type: 1000base-t
+  - name: ge-0/0/4
+    type: 1000base-t
+  - name: ge-0/0/5
+    type: 1000base-t
+  - name: ge-0/0/6
+    type: 1000base-t
+  - name: ge-0/0/7
+    type: 1000base-t
+  - name: ge-0/0/8
+    type: 1000base-t
+  - name: ge-0/0/9
+    type: 1000base-t
+  - name: ge-0/0/10
+    type: 1000base-t
+  - name: ge-0/0/11
+    type: 1000base-t
+  - name: ge-0/0/12
+    type: 1000base-t
+  - name: ge-0/0/13
+    type: 1000base-t
+  - name: ge-0/0/14
+    type: 1000base-t
+  - name: ge-0/0/15
+    type: 1000base-t
+  - name: ge-0/0/16
+    type: 1000base-t
+  - name: ge-0/0/17
+    type: 1000base-t
+  - name: ge-0/0/18
+    type: 1000base-t
+  - name: ge-0/0/19
+    type: 1000base-t
+  - name: ge-0/0/20
+    type: 1000base-t
+  - name: ge-0/0/21
+    type: 1000base-t
+  - name: ge-0/0/22
+    type: 1000base-t
+  - name: ge-0/0/23
+    type: 1000base-t
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-24T-AFI.yaml b/device-types/Juniper/EX4400-24T-AFI.yaml
new file mode 100644
index 00000000..79a5cc7c
--- /dev/null
+++ b/device-types/Juniper/EX4400-24T-AFI.yaml
@@ -0,0 +1,84 @@
+---
+manufacturer: Juniper
+model: EX4400-24T-AFI
+part_number: EX4400-24T-AFI
+slug: juniper-ex4400-24t-afi
+u_height: 1
+airflow: rear-to-front
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-t
+  - name: ge-0/0/1
+    type: 1000base-t
+  - name: ge-0/0/2
+    type: 1000base-t
+  - name: ge-0/0/3
+    type: 1000base-t
+  - name: ge-0/0/4
+    type: 1000base-t
+  - name: ge-0/0/5
+    type: 1000base-t
+  - name: ge-0/0/6
+    type: 1000base-t
+  - name: ge-0/0/7
+    type: 1000base-t
+  - name: ge-0/0/8
+    type: 1000base-t
+  - name: ge-0/0/9
+    type: 1000base-t
+  - name: ge-0/0/10
+    type: 1000base-t
+  - name: ge-0/0/11
+    type: 1000base-t
+  - name: ge-0/0/12
+    type: 1000base-t
+  - name: ge-0/0/13
+    type: 1000base-t
+  - name: ge-0/0/14
+    type: 1000base-t
+  - name: ge-0/0/15
+    type: 1000base-t
+  - name: ge-0/0/16
+    type: 1000base-t
+  - name: ge-0/0/17
+    type: 1000base-t
+  - name: ge-0/0/18
+    type: 1000base-t
+  - name: ge-0/0/19
+    type: 1000base-t
+  - name: ge-0/0/20
+    type: 1000base-t
+  - name: ge-0/0/21
+    type: 1000base-t
+  - name: ge-0/0/22
+    type: 1000base-t
+  - name: ge-0/0/23
+    type: 1000base-t
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-24T-DC-AFI.yaml b/device-types/Juniper/EX4400-24T-DC-AFI.yaml
new file mode 100644
index 00000000..28a0fdba
--- /dev/null
+++ b/device-types/Juniper/EX4400-24T-DC-AFI.yaml
@@ -0,0 +1,84 @@
+---
+manufacturer: Juniper
+model: EX4400-24T-DC-AFI
+part_number: EX4400-24T-DC-AFI
+slug: juniper-ex4400-24t-dc-afi
+u_height: 1
+airflow: rear-to-front
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-t
+  - name: ge-0/0/1
+    type: 1000base-t
+  - name: ge-0/0/2
+    type: 1000base-t
+  - name: ge-0/0/3
+    type: 1000base-t
+  - name: ge-0/0/4
+    type: 1000base-t
+  - name: ge-0/0/5
+    type: 1000base-t
+  - name: ge-0/0/6
+    type: 1000base-t
+  - name: ge-0/0/7
+    type: 1000base-t
+  - name: ge-0/0/8
+    type: 1000base-t
+  - name: ge-0/0/9
+    type: 1000base-t
+  - name: ge-0/0/10
+    type: 1000base-t
+  - name: ge-0/0/11
+    type: 1000base-t
+  - name: ge-0/0/12
+    type: 1000base-t
+  - name: ge-0/0/13
+    type: 1000base-t
+  - name: ge-0/0/14
+    type: 1000base-t
+  - name: ge-0/0/15
+    type: 1000base-t
+  - name: ge-0/0/16
+    type: 1000base-t
+  - name: ge-0/0/17
+    type: 1000base-t
+  - name: ge-0/0/18
+    type: 1000base-t
+  - name: ge-0/0/19
+    type: 1000base-t
+  - name: ge-0/0/20
+    type: 1000base-t
+  - name: ge-0/0/21
+    type: 1000base-t
+  - name: ge-0/0/22
+    type: 1000base-t
+  - name: ge-0/0/23
+    type: 1000base-t
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-24T-DC.yaml b/device-types/Juniper/EX4400-24T-DC.yaml
new file mode 100644
index 00000000..c7ddfb63
--- /dev/null
+++ b/device-types/Juniper/EX4400-24T-DC.yaml
@@ -0,0 +1,84 @@
+---
+manufacturer: Juniper
+model: EX4400-24T-DC
+part_number: EX4400-24T-DC
+slug: juniper-ex4400-24t-dc
+u_height: 1
+airflow: front-to-rear
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-t
+  - name: ge-0/0/1
+    type: 1000base-t
+  - name: ge-0/0/2
+    type: 1000base-t
+  - name: ge-0/0/3
+    type: 1000base-t
+  - name: ge-0/0/4
+    type: 1000base-t
+  - name: ge-0/0/5
+    type: 1000base-t
+  - name: ge-0/0/6
+    type: 1000base-t
+  - name: ge-0/0/7
+    type: 1000base-t
+  - name: ge-0/0/8
+    type: 1000base-t
+  - name: ge-0/0/9
+    type: 1000base-t
+  - name: ge-0/0/10
+    type: 1000base-t
+  - name: ge-0/0/11
+    type: 1000base-t
+  - name: ge-0/0/12
+    type: 1000base-t
+  - name: ge-0/0/13
+    type: 1000base-t
+  - name: ge-0/0/14
+    type: 1000base-t
+  - name: ge-0/0/15
+    type: 1000base-t
+  - name: ge-0/0/16
+    type: 1000base-t
+  - name: ge-0/0/17
+    type: 1000base-t
+  - name: ge-0/0/18
+    type: 1000base-t
+  - name: ge-0/0/19
+    type: 1000base-t
+  - name: ge-0/0/20
+    type: 1000base-t
+  - name: ge-0/0/21
+    type: 1000base-t
+  - name: ge-0/0/22
+    type: 1000base-t
+  - name: ge-0/0/23
+    type: 1000base-t
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-24T.yaml b/device-types/Juniper/EX4400-24T.yaml
new file mode 100644
index 00000000..3d7e0434
--- /dev/null
+++ b/device-types/Juniper/EX4400-24T.yaml
@@ -0,0 +1,84 @@
+---
+manufacturer: Juniper
+model: EX4400-24T
+slug: juniper-ex4400-24t
+part_number: EX4400-24T
+u_height: 1
+airflow: front-to-rear
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-t
+  - name: ge-0/0/1
+    type: 1000base-t
+  - name: ge-0/0/2
+    type: 1000base-t
+  - name: ge-0/0/3
+    type: 1000base-t
+  - name: ge-0/0/4
+    type: 1000base-t
+  - name: ge-0/0/5
+    type: 1000base-t
+  - name: ge-0/0/6
+    type: 1000base-t
+  - name: ge-0/0/7
+    type: 1000base-t
+  - name: ge-0/0/8
+    type: 1000base-t
+  - name: ge-0/0/9
+    type: 1000base-t
+  - name: ge-0/0/10
+    type: 1000base-t
+  - name: ge-0/0/11
+    type: 1000base-t
+  - name: ge-0/0/12
+    type: 1000base-t
+  - name: ge-0/0/13
+    type: 1000base-t
+  - name: ge-0/0/14
+    type: 1000base-t
+  - name: ge-0/0/15
+    type: 1000base-t
+  - name: ge-0/0/16
+    type: 1000base-t
+  - name: ge-0/0/17
+    type: 1000base-t
+  - name: ge-0/0/18
+    type: 1000base-t
+  - name: ge-0/0/19
+    type: 1000base-t
+  - name: ge-0/0/20
+    type: 1000base-t
+  - name: ge-0/0/21
+    type: 1000base-t
+  - name: ge-0/0/22
+    type: 1000base-t
+  - name: ge-0/0/23
+    type: 1000base-t
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-24X-AFI.yaml b/device-types/Juniper/EX4400-24X-AFI.yaml
new file mode 100644
index 00000000..e19a71d4
--- /dev/null
+++ b/device-types/Juniper/EX4400-24X-AFI.yaml
@@ -0,0 +1,84 @@
+---
+manufacturer: Juniper
+model: EX4400-24X-AFI
+part_number: EX4400-24X-AFI
+slug: juniper-ex4400-24x-afi
+u_height: 1
+airflow: rear-to-front
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: xe-0/0/0
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/1
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/2
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/3
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/4
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/5
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/6
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/7
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/8
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/9
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/10
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/11
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/12
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/13
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/14
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/15
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/16
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/17
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/18
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/19
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/20
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/21
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/22
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/23
+    type: 10gbase-x-sfpp
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-24X-DC-AFI.yaml b/device-types/Juniper/EX4400-24X-DC-AFI.yaml
new file mode 100644
index 00000000..33425fc5
--- /dev/null
+++ b/device-types/Juniper/EX4400-24X-DC-AFI.yaml
@@ -0,0 +1,84 @@
+---
+manufacturer: Juniper
+model: EX4400-24X-DC-AFI
+part_number: EX4400-24X-DC-AFI
+slug: juniper-ex4400-24x-dc-afi
+u_height: 1
+airflow: rear-to-front
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: xe-0/0/0
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/1
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/2
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/3
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/4
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/5
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/6
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/7
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/8
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/9
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/10
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/11
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/12
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/13
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/14
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/15
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/16
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/17
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/18
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/19
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/20
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/21
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/22
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/23
+    type: 10gbase-x-sfpp
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-24X-DC.yaml b/device-types/Juniper/EX4400-24X-DC.yaml
new file mode 100644
index 00000000..530ddf02
--- /dev/null
+++ b/device-types/Juniper/EX4400-24X-DC.yaml
@@ -0,0 +1,84 @@
+---
+manufacturer: Juniper
+model: EX4400-24X-DC
+part_number: EX4400-24X-DC
+slug: juniper-ex4400-24x-dc
+u_height: 1
+airflow: front-to-rear
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: xe-0/0/0
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/1
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/2
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/3
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/4
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/5
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/6
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/7
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/8
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/9
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/10
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/11
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/12
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/13
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/14
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/15
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/16
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/17
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/18
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/19
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/20
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/21
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/22
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/23
+    type: 10gbase-x-sfpp
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-24X.yaml b/device-types/Juniper/EX4400-24X.yaml
new file mode 100644
index 00000000..19d4bd16
--- /dev/null
+++ b/device-types/Juniper/EX4400-24X.yaml
@@ -0,0 +1,84 @@
+---
+manufacturer: Juniper
+model: EX4400-24X
+part_number: EX4400-24X
+slug: juniper-ex4400-24x
+u_height: 1
+airflow: front-to-rear
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: xe-0/0/0
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/1
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/2
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/3
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/4
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/5
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/6
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/7
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/8
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/9
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/10
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/11
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/12
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/13
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/14
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/15
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/16
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/17
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/18
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/19
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/20
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/21
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/22
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/23
+    type: 10gbase-x-sfpp
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-48F-AFI.yaml b/device-types/Juniper/EX4400-48F-AFI.yaml
new file mode 100644
index 00000000..6ae99d33
--- /dev/null
+++ b/device-types/Juniper/EX4400-48F-AFI.yaml
@@ -0,0 +1,132 @@
+---
+manufacturer: Juniper
+model: EX4400-48F-AFI
+part_number: EX4400-48F-AFI
+slug: juniper-ex4400-48f-afi
+u_height: 1
+airflow: rear-to-front
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-x-sfp
+  - name: ge-0/0/1
+    type: 1000base-x-sfp
+  - name: ge-0/0/2
+    type: 1000base-x-sfp
+  - name: ge-0/0/3
+    type: 1000base-x-sfp
+  - name: ge-0/0/4
+    type: 1000base-x-sfp
+  - name: ge-0/0/5
+    type: 1000base-x-sfp
+  - name: ge-0/0/6
+    type: 1000base-x-sfp
+  - name: ge-0/0/7
+    type: 1000base-x-sfp
+  - name: ge-0/0/8
+    type: 1000base-x-sfp
+  - name: ge-0/0/9
+    type: 1000base-x-sfp
+  - name: ge-0/0/10
+    type: 1000base-x-sfp
+  - name: ge-0/0/11
+    type: 1000base-x-sfp
+  - name: ge-0/0/12
+    type: 1000base-x-sfp
+  - name: ge-0/0/13
+    type: 1000base-x-sfp
+  - name: ge-0/0/14
+    type: 1000base-x-sfp
+  - name: ge-0/0/15
+    type: 1000base-x-sfp
+  - name: ge-0/0/16
+    type: 1000base-x-sfp
+  - name: ge-0/0/17
+    type: 1000base-x-sfp
+  - name: ge-0/0/18
+    type: 1000base-x-sfp
+  - name: ge-0/0/19
+    type: 1000base-x-sfp
+  - name: ge-0/0/20
+    type: 1000base-x-sfp
+  - name: ge-0/0/21
+    type: 1000base-x-sfp
+  - name: ge-0/0/22
+    type: 1000base-x-sfp
+  - name: ge-0/0/23
+    type: 1000base-x-sfp
+  - name: ge-0/0/24
+    type: 1000base-x-sfp
+  - name: ge-0/0/25
+    type: 1000base-x-sfp
+  - name: ge-0/0/26
+    type: 1000base-x-sfp
+  - name: ge-0/0/27
+    type: 1000base-x-sfp
+  - name: ge-0/0/28
+    type: 1000base-x-sfp
+  - name: ge-0/0/29
+    type: 1000base-x-sfp
+  - name: ge-0/0/30
+    type: 1000base-x-sfp
+  - name: ge-0/0/31
+    type: 1000base-x-sfp
+  - name: ge-0/0/32
+    type: 1000base-x-sfp
+  - name: ge-0/0/33
+    type: 1000base-x-sfp
+  - name: ge-0/0/34
+    type: 1000base-x-sfp
+  - name: ge-0/0/35
+    type: 1000base-x-sfp
+  - name: xe-0/0/36
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/37
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/38
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/39
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/40
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/41
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/42
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/43
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/44
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/45
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/46
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/47
+    type: 10gbase-x-sfpp
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-48F-DC-AFI.yaml b/device-types/Juniper/EX4400-48F-DC-AFI.yaml
new file mode 100644
index 00000000..af98bebe
--- /dev/null
+++ b/device-types/Juniper/EX4400-48F-DC-AFI.yaml
@@ -0,0 +1,132 @@
+---
+manufacturer: Juniper
+model: EX4400-48F-DC-AFI
+part_number: EX4400-48F-DC-AFI
+slug: juniper-ex4400-48f-dc-afi
+u_height: 1
+airflow: rear-to-front
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-x-sfp
+  - name: ge-0/0/1
+    type: 1000base-x-sfp
+  - name: ge-0/0/2
+    type: 1000base-x-sfp
+  - name: ge-0/0/3
+    type: 1000base-x-sfp
+  - name: ge-0/0/4
+    type: 1000base-x-sfp
+  - name: ge-0/0/5
+    type: 1000base-x-sfp
+  - name: ge-0/0/6
+    type: 1000base-x-sfp
+  - name: ge-0/0/7
+    type: 1000base-x-sfp
+  - name: ge-0/0/8
+    type: 1000base-x-sfp
+  - name: ge-0/0/9
+    type: 1000base-x-sfp
+  - name: ge-0/0/10
+    type: 1000base-x-sfp
+  - name: ge-0/0/11
+    type: 1000base-x-sfp
+  - name: ge-0/0/12
+    type: 1000base-x-sfp
+  - name: ge-0/0/13
+    type: 1000base-x-sfp
+  - name: ge-0/0/14
+    type: 1000base-x-sfp
+  - name: ge-0/0/15
+    type: 1000base-x-sfp
+  - name: ge-0/0/16
+    type: 1000base-x-sfp
+  - name: ge-0/0/17
+    type: 1000base-x-sfp
+  - name: ge-0/0/18
+    type: 1000base-x-sfp
+  - name: ge-0/0/19
+    type: 1000base-x-sfp
+  - name: ge-0/0/20
+    type: 1000base-x-sfp
+  - name: ge-0/0/21
+    type: 1000base-x-sfp
+  - name: ge-0/0/22
+    type: 1000base-x-sfp
+  - name: ge-0/0/23
+    type: 1000base-x-sfp
+  - name: ge-0/0/24
+    type: 1000base-x-sfp
+  - name: ge-0/0/25
+    type: 1000base-x-sfp
+  - name: ge-0/0/26
+    type: 1000base-x-sfp
+  - name: ge-0/0/27
+    type: 1000base-x-sfp
+  - name: ge-0/0/28
+    type: 1000base-x-sfp
+  - name: ge-0/0/29
+    type: 1000base-x-sfp
+  - name: ge-0/0/30
+    type: 1000base-x-sfp
+  - name: ge-0/0/31
+    type: 1000base-x-sfp
+  - name: ge-0/0/32
+    type: 1000base-x-sfp
+  - name: ge-0/0/33
+    type: 1000base-x-sfp
+  - name: ge-0/0/34
+    type: 1000base-x-sfp
+  - name: ge-0/0/35
+    type: 1000base-x-sfp
+  - name: xe-0/0/36
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/37
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/38
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/39
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/40
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/41
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/42
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/43
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/44
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/45
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/46
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/47
+    type: 10gbase-x-sfpp
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-48F-DC.yaml b/device-types/Juniper/EX4400-48F-DC.yaml
new file mode 100644
index 00000000..9e33de06
--- /dev/null
+++ b/device-types/Juniper/EX4400-48F-DC.yaml
@@ -0,0 +1,132 @@
+---
+manufacturer: Juniper
+model: EX4400-48F-DC
+part_number: EX4400-48F-DC
+slug: juniper-ex4400-48f-dc
+u_height: 1
+airflow: front-to-rear
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-x-sfp
+  - name: ge-0/0/1
+    type: 1000base-x-sfp
+  - name: ge-0/0/2
+    type: 1000base-x-sfp
+  - name: ge-0/0/3
+    type: 1000base-x-sfp
+  - name: ge-0/0/4
+    type: 1000base-x-sfp
+  - name: ge-0/0/5
+    type: 1000base-x-sfp
+  - name: ge-0/0/6
+    type: 1000base-x-sfp
+  - name: ge-0/0/7
+    type: 1000base-x-sfp
+  - name: ge-0/0/8
+    type: 1000base-x-sfp
+  - name: ge-0/0/9
+    type: 1000base-x-sfp
+  - name: ge-0/0/10
+    type: 1000base-x-sfp
+  - name: ge-0/0/11
+    type: 1000base-x-sfp
+  - name: ge-0/0/12
+    type: 1000base-x-sfp
+  - name: ge-0/0/13
+    type: 1000base-x-sfp
+  - name: ge-0/0/14
+    type: 1000base-x-sfp
+  - name: ge-0/0/15
+    type: 1000base-x-sfp
+  - name: ge-0/0/16
+    type: 1000base-x-sfp
+  - name: ge-0/0/17
+    type: 1000base-x-sfp
+  - name: ge-0/0/18
+    type: 1000base-x-sfp
+  - name: ge-0/0/19
+    type: 1000base-x-sfp
+  - name: ge-0/0/20
+    type: 1000base-x-sfp
+  - name: ge-0/0/21
+    type: 1000base-x-sfp
+  - name: ge-0/0/22
+    type: 1000base-x-sfp
+  - name: ge-0/0/23
+    type: 1000base-x-sfp
+  - name: ge-0/0/24
+    type: 1000base-x-sfp
+  - name: ge-0/0/25
+    type: 1000base-x-sfp
+  - name: ge-0/0/26
+    type: 1000base-x-sfp
+  - name: ge-0/0/27
+    type: 1000base-x-sfp
+  - name: ge-0/0/28
+    type: 1000base-x-sfp
+  - name: ge-0/0/29
+    type: 1000base-x-sfp
+  - name: ge-0/0/30
+    type: 1000base-x-sfp
+  - name: ge-0/0/31
+    type: 1000base-x-sfp
+  - name: ge-0/0/32
+    type: 1000base-x-sfp
+  - name: ge-0/0/33
+    type: 1000base-x-sfp
+  - name: ge-0/0/34
+    type: 1000base-x-sfp
+  - name: ge-0/0/35
+    type: 1000base-x-sfp
+  - name: xe-0/0/36
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/37
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/38
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/39
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/40
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/41
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/42
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/43
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/44
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/45
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/46
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/47
+    type: 10gbase-x-sfpp
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-48F.yaml b/device-types/Juniper/EX4400-48F.yaml
new file mode 100644
index 00000000..93b985b6
--- /dev/null
+++ b/device-types/Juniper/EX4400-48F.yaml
@@ -0,0 +1,132 @@
+---
+manufacturer: Juniper
+model: EX4400-48F
+part_number: EX4400-48F
+slug: juniper-ex4400-48f
+u_height: 1
+airflow: front-to-rear
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-x-sfp
+  - name: ge-0/0/1
+    type: 1000base-x-sfp
+  - name: ge-0/0/2
+    type: 1000base-x-sfp
+  - name: ge-0/0/3
+    type: 1000base-x-sfp
+  - name: ge-0/0/4
+    type: 1000base-x-sfp
+  - name: ge-0/0/5
+    type: 1000base-x-sfp
+  - name: ge-0/0/6
+    type: 1000base-x-sfp
+  - name: ge-0/0/7
+    type: 1000base-x-sfp
+  - name: ge-0/0/8
+    type: 1000base-x-sfp
+  - name: ge-0/0/9
+    type: 1000base-x-sfp
+  - name: ge-0/0/10
+    type: 1000base-x-sfp
+  - name: ge-0/0/11
+    type: 1000base-x-sfp
+  - name: ge-0/0/12
+    type: 1000base-x-sfp
+  - name: ge-0/0/13
+    type: 1000base-x-sfp
+  - name: ge-0/0/14
+    type: 1000base-x-sfp
+  - name: ge-0/0/15
+    type: 1000base-x-sfp
+  - name: ge-0/0/16
+    type: 1000base-x-sfp
+  - name: ge-0/0/17
+    type: 1000base-x-sfp
+  - name: ge-0/0/18
+    type: 1000base-x-sfp
+  - name: ge-0/0/19
+    type: 1000base-x-sfp
+  - name: ge-0/0/20
+    type: 1000base-x-sfp
+  - name: ge-0/0/21
+    type: 1000base-x-sfp
+  - name: ge-0/0/22
+    type: 1000base-x-sfp
+  - name: ge-0/0/23
+    type: 1000base-x-sfp
+  - name: ge-0/0/24
+    type: 1000base-x-sfp
+  - name: ge-0/0/25
+    type: 1000base-x-sfp
+  - name: ge-0/0/26
+    type: 1000base-x-sfp
+  - name: ge-0/0/27
+    type: 1000base-x-sfp
+  - name: ge-0/0/28
+    type: 1000base-x-sfp
+  - name: ge-0/0/29
+    type: 1000base-x-sfp
+  - name: ge-0/0/30
+    type: 1000base-x-sfp
+  - name: ge-0/0/31
+    type: 1000base-x-sfp
+  - name: ge-0/0/32
+    type: 1000base-x-sfp
+  - name: ge-0/0/33
+    type: 1000base-x-sfp
+  - name: ge-0/0/34
+    type: 1000base-x-sfp
+  - name: ge-0/0/35
+    type: 1000base-x-sfp
+  - name: xe-0/0/36
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/37
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/38
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/39
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/40
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/41
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/42
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/43
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/44
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/45
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/46
+    type: 10gbase-x-sfpp
+  - name: xe-0/0/47
+    type: 10gbase-x-sfpp
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-48MP.yaml b/device-types/Juniper/EX4400-48MP.yaml
new file mode 100644
index 00000000..58694e68
--- /dev/null
+++ b/device-types/Juniper/EX4400-48MP.yaml
@@ -0,0 +1,132 @@
+---
+manufacturer: Juniper
+model: EX4400-48MP
+part_number: EX4400-48MP
+slug: juniper-ex4400-48mp
+u_height: 1
+airflow: front-to-rear
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: mge-0/0/0
+    type: 10gbase-t
+  - name: mge-0/0/1
+    type: 10gbase-t
+  - name: mge-0/0/2
+    type: 10gbase-t
+  - name: mge-0/0/3
+    type: 10gbase-t
+  - name: mge-0/0/4
+    type: 10gbase-t
+  - name: mge-0/0/5
+    type: 10gbase-t
+  - name: mge-0/0/6
+    type: 10gbase-t
+  - name: mge-0/0/7
+    type: 10gbase-t
+  - name: mge-0/0/8
+    type: 10gbase-t
+  - name: mge-0/0/9
+    type: 10gbase-t
+  - name: mge-0/0/10
+    type: 10gbase-t
+  - name: mge-0/0/11
+    type: 10gbase-t
+  - name: mge-0/0/12
+    type: 10gbase-t
+  - name: mge-0/0/13
+    type: 10gbase-t
+  - name: mge-0/0/14
+    type: 10gbase-t
+  - name: mge-0/0/15
+    type: 10gbase-t
+  - name: mge-0/0/16
+    type: 10gbase-t
+  - name: mge-0/0/17
+    type: 10gbase-t
+  - name: mge-0/0/18
+    type: 10gbase-t
+  - name: mge-0/0/19
+    type: 10gbase-t
+  - name: mge-0/0/20
+    type: 10gbase-t
+  - name: mge-0/0/21
+    type: 10gbase-t
+  - name: mge-0/0/22
+    type: 10gbase-t
+  - name: mge-0/0/23
+    type: 10gbase-t
+  - name: mge-0/0/24
+    type: 10gbase-t
+  - name: mge-0/0/25
+    type: 10gbase-t
+  - name: mge-0/0/26
+    type: 10gbase-t
+  - name: mge-0/0/27
+    type: 10gbase-t
+  - name: mge-0/0/28
+    type: 10gbase-t
+  - name: mge-0/0/29
+    type: 10gbase-t
+  - name: mge-0/0/30
+    type: 10gbase-t
+  - name: mge-0/0/31
+    type: 10gbase-t
+  - name: mge-0/0/32
+    type: 10gbase-t
+  - name: mge-0/0/33
+    type: 10gbase-t
+  - name: mge-0/0/34
+    type: 10gbase-t
+  - name: mge-0/0/35
+    type: 10gbase-t
+  - name: mge-0/0/36
+    type: 10gbase-t
+  - name: mge-0/0/37
+    type: 10gbase-t
+  - name: mge-0/0/38
+    type: 10gbase-t
+  - name: mge-0/0/39
+    type: 10gbase-t
+  - name: mge-0/0/40
+    type: 10gbase-t
+  - name: mge-0/0/41
+    type: 10gbase-t
+  - name: mge-0/0/42
+    type: 10gbase-t
+  - name: mge-0/0/43
+    type: 10gbase-t
+  - name: mge-0/0/44
+    type: 10gbase-t
+  - name: mge-0/0/45
+    type: 10gbase-t
+  - name: mge-0/0/46
+    type: 10gbase-t
+  - name: mge-0/0/47
+    type: 10gbase-t
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-48P.yaml b/device-types/Juniper/EX4400-48P.yaml
new file mode 100644
index 00000000..076e2ef9
--- /dev/null
+++ b/device-types/Juniper/EX4400-48P.yaml
@@ -0,0 +1,132 @@
+---
+manufacturer: Juniper
+model: EX4400-48P
+part_number: EX4400-48P
+slug: juniper-ex4400-48p
+u_height: 1
+airflow: front-to-rear
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-t
+  - name: ge-0/0/1
+    type: 1000base-t
+  - name: ge-0/0/2
+    type: 1000base-t
+  - name: ge-0/0/3
+    type: 1000base-t
+  - name: ge-0/0/4
+    type: 1000base-t
+  - name: ge-0/0/5
+    type: 1000base-t
+  - name: ge-0/0/6
+    type: 1000base-t
+  - name: ge-0/0/7
+    type: 1000base-t
+  - name: ge-0/0/8
+    type: 1000base-t
+  - name: ge-0/0/9
+    type: 1000base-t
+  - name: ge-0/0/10
+    type: 1000base-t
+  - name: ge-0/0/11
+    type: 1000base-t
+  - name: ge-0/0/12
+    type: 1000base-t
+  - name: ge-0/0/13
+    type: 1000base-t
+  - name: ge-0/0/14
+    type: 1000base-t
+  - name: ge-0/0/15
+    type: 1000base-t
+  - name: ge-0/0/16
+    type: 1000base-t
+  - name: ge-0/0/17
+    type: 1000base-t
+  - name: ge-0/0/18
+    type: 1000base-t
+  - name: ge-0/0/19
+    type: 1000base-t
+  - name: ge-0/0/20
+    type: 1000base-t
+  - name: ge-0/0/21
+    type: 1000base-t
+  - name: ge-0/0/22
+    type: 1000base-t
+  - name: ge-0/0/23
+    type: 1000base-t
+  - name: ge-0/0/24
+    type: 1000base-t
+  - name: ge-0/0/25
+    type: 1000base-t
+  - name: ge-0/0/26
+    type: 1000base-t
+  - name: ge-0/0/27
+    type: 1000base-t
+  - name: ge-0/0/28
+    type: 1000base-t
+  - name: ge-0/0/29
+    type: 1000base-t
+  - name: ge-0/0/30
+    type: 1000base-t
+  - name: ge-0/0/31
+    type: 1000base-t
+  - name: ge-0/0/32
+    type: 1000base-t
+  - name: ge-0/0/33
+    type: 1000base-t
+  - name: ge-0/0/34
+    type: 1000base-t
+  - name: ge-0/0/35
+    type: 1000base-t
+  - name: ge-0/0/36
+    type: 1000base-t
+  - name: ge-0/0/37
+    type: 1000base-t
+  - name: ge-0/0/38
+    type: 1000base-t
+  - name: ge-0/0/39
+    type: 1000base-t
+  - name: ge-0/0/40
+    type: 1000base-t
+  - name: ge-0/0/41
+    type: 1000base-t
+  - name: ge-0/0/42
+    type: 1000base-t
+  - name: ge-0/0/43
+    type: 1000base-t
+  - name: ge-0/0/44
+    type: 1000base-t
+  - name: ge-0/0/45
+    type: 1000base-t
+  - name: ge-0/0/46
+    type: 1000base-t
+  - name: ge-0/0/47
+    type: 1000base-t
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-48T-AFI.yaml b/device-types/Juniper/EX4400-48T-AFI.yaml
new file mode 100644
index 00000000..691e904a
--- /dev/null
+++ b/device-types/Juniper/EX4400-48T-AFI.yaml
@@ -0,0 +1,132 @@
+---
+manufacturer: Juniper
+model: EX4400-48T-AFI
+part_number: EX4400-48T-AFI
+slug: juniper-ex4400-48t-afi
+u_height: 1
+airflow: rear-to-front
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-t
+  - name: ge-0/0/1
+    type: 1000base-t
+  - name: ge-0/0/2
+    type: 1000base-t
+  - name: ge-0/0/3
+    type: 1000base-t
+  - name: ge-0/0/4
+    type: 1000base-t
+  - name: ge-0/0/5
+    type: 1000base-t
+  - name: ge-0/0/6
+    type: 1000base-t
+  - name: ge-0/0/7
+    type: 1000base-t
+  - name: ge-0/0/8
+    type: 1000base-t
+  - name: ge-0/0/9
+    type: 1000base-t
+  - name: ge-0/0/10
+    type: 1000base-t
+  - name: ge-0/0/11
+    type: 1000base-t
+  - name: ge-0/0/12
+    type: 1000base-t
+  - name: ge-0/0/13
+    type: 1000base-t
+  - name: ge-0/0/14
+    type: 1000base-t
+  - name: ge-0/0/15
+    type: 1000base-t
+  - name: ge-0/0/16
+    type: 1000base-t
+  - name: ge-0/0/17
+    type: 1000base-t
+  - name: ge-0/0/18
+    type: 1000base-t
+  - name: ge-0/0/19
+    type: 1000base-t
+  - name: ge-0/0/20
+    type: 1000base-t
+  - name: ge-0/0/21
+    type: 1000base-t
+  - name: ge-0/0/22
+    type: 1000base-t
+  - name: ge-0/0/23
+    type: 1000base-t
+  - name: ge-0/0/24
+    type: 1000base-t
+  - name: ge-0/0/25
+    type: 1000base-t
+  - name: ge-0/0/26
+    type: 1000base-t
+  - name: ge-0/0/27
+    type: 1000base-t
+  - name: ge-0/0/28
+    type: 1000base-t
+  - name: ge-0/0/29
+    type: 1000base-t
+  - name: ge-0/0/30
+    type: 1000base-t
+  - name: ge-0/0/31
+    type: 1000base-t
+  - name: ge-0/0/32
+    type: 1000base-t
+  - name: ge-0/0/33
+    type: 1000base-t
+  - name: ge-0/0/34
+    type: 1000base-t
+  - name: ge-0/0/35
+    type: 1000base-t
+  - name: ge-0/0/36
+    type: 1000base-t
+  - name: ge-0/0/37
+    type: 1000base-t
+  - name: ge-0/0/38
+    type: 1000base-t
+  - name: ge-0/0/39
+    type: 1000base-t
+  - name: ge-0/0/40
+    type: 1000base-t
+  - name: ge-0/0/41
+    type: 1000base-t
+  - name: ge-0/0/42
+    type: 1000base-t
+  - name: ge-0/0/43
+    type: 1000base-t
+  - name: ge-0/0/44
+    type: 1000base-t
+  - name: ge-0/0/45
+    type: 1000base-t
+  - name: ge-0/0/46
+    type: 1000base-t
+  - name: ge-0/0/47
+    type: 1000base-t
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-48T-DC-AFI.yaml b/device-types/Juniper/EX4400-48T-DC-AFI.yaml
new file mode 100644
index 00000000..b0844678
--- /dev/null
+++ b/device-types/Juniper/EX4400-48T-DC-AFI.yaml
@@ -0,0 +1,132 @@
+---
+manufacturer: Juniper
+model: EX4400-48T-DC-AFI
+part_number: EX4400-48T-DC-AFI
+slug: juniper-ex4400-48t-dc-afi
+u_height: 1
+airflow: rear-to-front
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-t
+  - name: ge-0/0/1
+    type: 1000base-t
+  - name: ge-0/0/2
+    type: 1000base-t
+  - name: ge-0/0/3
+    type: 1000base-t
+  - name: ge-0/0/4
+    type: 1000base-t
+  - name: ge-0/0/5
+    type: 1000base-t
+  - name: ge-0/0/6
+    type: 1000base-t
+  - name: ge-0/0/7
+    type: 1000base-t
+  - name: ge-0/0/8
+    type: 1000base-t
+  - name: ge-0/0/9
+    type: 1000base-t
+  - name: ge-0/0/10
+    type: 1000base-t
+  - name: ge-0/0/11
+    type: 1000base-t
+  - name: ge-0/0/12
+    type: 1000base-t
+  - name: ge-0/0/13
+    type: 1000base-t
+  - name: ge-0/0/14
+    type: 1000base-t
+  - name: ge-0/0/15
+    type: 1000base-t
+  - name: ge-0/0/16
+    type: 1000base-t
+  - name: ge-0/0/17
+    type: 1000base-t
+  - name: ge-0/0/18
+    type: 1000base-t
+  - name: ge-0/0/19
+    type: 1000base-t
+  - name: ge-0/0/20
+    type: 1000base-t
+  - name: ge-0/0/21
+    type: 1000base-t
+  - name: ge-0/0/22
+    type: 1000base-t
+  - name: ge-0/0/23
+    type: 1000base-t
+  - name: ge-0/0/24
+    type: 1000base-t
+  - name: ge-0/0/25
+    type: 1000base-t
+  - name: ge-0/0/26
+    type: 1000base-t
+  - name: ge-0/0/27
+    type: 1000base-t
+  - name: ge-0/0/28
+    type: 1000base-t
+  - name: ge-0/0/29
+    type: 1000base-t
+  - name: ge-0/0/30
+    type: 1000base-t
+  - name: ge-0/0/31
+    type: 1000base-t
+  - name: ge-0/0/32
+    type: 1000base-t
+  - name: ge-0/0/33
+    type: 1000base-t
+  - name: ge-0/0/34
+    type: 1000base-t
+  - name: ge-0/0/35
+    type: 1000base-t
+  - name: ge-0/0/36
+    type: 1000base-t
+  - name: ge-0/0/37
+    type: 1000base-t
+  - name: ge-0/0/38
+    type: 1000base-t
+  - name: ge-0/0/39
+    type: 1000base-t
+  - name: ge-0/0/40
+    type: 1000base-t
+  - name: ge-0/0/41
+    type: 1000base-t
+  - name: ge-0/0/42
+    type: 1000base-t
+  - name: ge-0/0/43
+    type: 1000base-t
+  - name: ge-0/0/44
+    type: 1000base-t
+  - name: ge-0/0/45
+    type: 1000base-t
+  - name: ge-0/0/46
+    type: 1000base-t
+  - name: ge-0/0/47
+    type: 1000base-t
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-48T-DC.yaml b/device-types/Juniper/EX4400-48T-DC.yaml
new file mode 100644
index 00000000..726fe55a
--- /dev/null
+++ b/device-types/Juniper/EX4400-48T-DC.yaml
@@ -0,0 +1,132 @@
+---
+manufacturer: Juniper
+model: EX4400-48T-DC
+part_number: EX4400-48T-DC
+slug: juniper-ex4400-48t-dc
+u_height: 1
+airflow: front-to-rear
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-t
+  - name: ge-0/0/1
+    type: 1000base-t
+  - name: ge-0/0/2
+    type: 1000base-t
+  - name: ge-0/0/3
+    type: 1000base-t
+  - name: ge-0/0/4
+    type: 1000base-t
+  - name: ge-0/0/5
+    type: 1000base-t
+  - name: ge-0/0/6
+    type: 1000base-t
+  - name: ge-0/0/7
+    type: 1000base-t
+  - name: ge-0/0/8
+    type: 1000base-t
+  - name: ge-0/0/9
+    type: 1000base-t
+  - name: ge-0/0/10
+    type: 1000base-t
+  - name: ge-0/0/11
+    type: 1000base-t
+  - name: ge-0/0/12
+    type: 1000base-t
+  - name: ge-0/0/13
+    type: 1000base-t
+  - name: ge-0/0/14
+    type: 1000base-t
+  - name: ge-0/0/15
+    type: 1000base-t
+  - name: ge-0/0/16
+    type: 1000base-t
+  - name: ge-0/0/17
+    type: 1000base-t
+  - name: ge-0/0/18
+    type: 1000base-t
+  - name: ge-0/0/19
+    type: 1000base-t
+  - name: ge-0/0/20
+    type: 1000base-t
+  - name: ge-0/0/21
+    type: 1000base-t
+  - name: ge-0/0/22
+    type: 1000base-t
+  - name: ge-0/0/23
+    type: 1000base-t
+  - name: ge-0/0/24
+    type: 1000base-t
+  - name: ge-0/0/25
+    type: 1000base-t
+  - name: ge-0/0/26
+    type: 1000base-t
+  - name: ge-0/0/27
+    type: 1000base-t
+  - name: ge-0/0/28
+    type: 1000base-t
+  - name: ge-0/0/29
+    type: 1000base-t
+  - name: ge-0/0/30
+    type: 1000base-t
+  - name: ge-0/0/31
+    type: 1000base-t
+  - name: ge-0/0/32
+    type: 1000base-t
+  - name: ge-0/0/33
+    type: 1000base-t
+  - name: ge-0/0/34
+    type: 1000base-t
+  - name: ge-0/0/35
+    type: 1000base-t
+  - name: ge-0/0/36
+    type: 1000base-t
+  - name: ge-0/0/37
+    type: 1000base-t
+  - name: ge-0/0/38
+    type: 1000base-t
+  - name: ge-0/0/39
+    type: 1000base-t
+  - name: ge-0/0/40
+    type: 1000base-t
+  - name: ge-0/0/41
+    type: 1000base-t
+  - name: ge-0/0/42
+    type: 1000base-t
+  - name: ge-0/0/43
+    type: 1000base-t
+  - name: ge-0/0/44
+    type: 1000base-t
+  - name: ge-0/0/45
+    type: 1000base-t
+  - name: ge-0/0/46
+    type: 1000base-t
+  - name: ge-0/0/47
+    type: 1000base-t
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/device-types/Juniper/EX4400-48T.yaml b/device-types/Juniper/EX4400-48T.yaml
new file mode 100644
index 00000000..8c84961f
--- /dev/null
+++ b/device-types/Juniper/EX4400-48T.yaml
@@ -0,0 +1,132 @@
+---
+manufacturer: Juniper
+model: EX4400-48T
+part_number: EX4400-48T
+slug: juniper-ex4400-48t
+u_height: 1
+airflow: front-to-rear
+weight: 13.01
+weight_unit: lb
+comments: '[Juniper EX4400 Hardware Guide](https://www.juniper.net/documentation/us/en/hardware/ex4400/topics/topic-map/ex4400-system-overview.html)'
+interfaces:
+  - name: me0
+    type: 1000base-t
+    mgmt_only: true
+  - name: ge-0/0/0
+    type: 1000base-t
+  - name: ge-0/0/1
+    type: 1000base-t
+  - name: ge-0/0/2
+    type: 1000base-t
+  - name: ge-0/0/3
+    type: 1000base-t
+  - name: ge-0/0/4
+    type: 1000base-t
+  - name: ge-0/0/5
+    type: 1000base-t
+  - name: ge-0/0/6
+    type: 1000base-t
+  - name: ge-0/0/7
+    type: 1000base-t
+  - name: ge-0/0/8
+    type: 1000base-t
+  - name: ge-0/0/9
+    type: 1000base-t
+  - name: ge-0/0/10
+    type: 1000base-t
+  - name: ge-0/0/11
+    type: 1000base-t
+  - name: ge-0/0/12
+    type: 1000base-t
+  - name: ge-0/0/13
+    type: 1000base-t
+  - name: ge-0/0/14
+    type: 1000base-t
+  - name: ge-0/0/15
+    type: 1000base-t
+  - name: ge-0/0/16
+    type: 1000base-t
+  - name: ge-0/0/17
+    type: 1000base-t
+  - name: ge-0/0/18
+    type: 1000base-t
+  - name: ge-0/0/19
+    type: 1000base-t
+  - name: ge-0/0/20
+    type: 1000base-t
+  - name: ge-0/0/21
+    type: 1000base-t
+  - name: ge-0/0/22
+    type: 1000base-t
+  - name: ge-0/0/23
+    type: 1000base-t
+  - name: ge-0/0/24
+    type: 1000base-t
+  - name: ge-0/0/25
+    type: 1000base-t
+  - name: ge-0/0/26
+    type: 1000base-t
+  - name: ge-0/0/27
+    type: 1000base-t
+  - name: ge-0/0/28
+    type: 1000base-t
+  - name: ge-0/0/29
+    type: 1000base-t
+  - name: ge-0/0/30
+    type: 1000base-t
+  - name: ge-0/0/31
+    type: 1000base-t
+  - name: ge-0/0/32
+    type: 1000base-t
+  - name: ge-0/0/33
+    type: 1000base-t
+  - name: ge-0/0/34
+    type: 1000base-t
+  - name: ge-0/0/35
+    type: 1000base-t
+  - name: ge-0/0/36
+    type: 1000base-t
+  - name: ge-0/0/37
+    type: 1000base-t
+  - name: ge-0/0/38
+    type: 1000base-t
+  - name: ge-0/0/39
+    type: 1000base-t
+  - name: ge-0/0/40
+    type: 1000base-t
+  - name: ge-0/0/41
+    type: 1000base-t
+  - name: ge-0/0/42
+    type: 1000base-t
+  - name: ge-0/0/43
+    type: 1000base-t
+  - name: ge-0/0/44
+    type: 1000base-t
+  - name: ge-0/0/45
+    type: 1000base-t
+  - name: ge-0/0/46
+    type: 1000base-t
+  - name: ge-0/0/47
+    type: 1000base-t
+  - name: et-0/1/0
+    type: 100gbase-x-qsfp28
+  - name: et-0/1/1
+    type: 100gbase-x-qsfp28
+console-ports:
+  - name: Console
+    type: rj-45
+  - name: Front Console
+    type: usb-c
+module-bays:
+  - name: Fan Module 0
+    weight: 0.26
+    weight_unit: lb
+  - name: Fan Module 1
+    weight: 0.26
+    weight_unit: lb
+  - name: Extension module
+    position: '2'
+  - name: PSU0
+    position: '0'
+  - name: PSU1
+    position: '1'
diff --git a/module-types/Juniper/EX4400-EM-1C.yaml b/module-types/Juniper/EX4400-EM-1C.yaml
new file mode 100644
index 00000000..f0c40e94
--- /dev/null
+++ b/module-types/Juniper/EX4400-EM-1C.yaml
@@ -0,0 +1,10 @@
+---
+manufacturer: Juniper
+model: EX4400-EM-1C
+part_number: EX4400-EM-1C
+weight: 0.26
+weight_unit: lb
+comments: 1x100GbE QSFP28 extension module
+interfaces:
+  - name: et-0/2/0
+    type: 100gbase-x-qsfp28
diff --git a/module-types/Juniper/EX4400-EM-4S.yaml b/module-types/Juniper/EX4400-EM-4S.yaml
new file mode 100644
index 00000000..df4ce7d2
--- /dev/null
+++ b/module-types/Juniper/EX4400-EM-4S.yaml
@@ -0,0 +1,16 @@
+---
+manufacturer: Juniper
+model: EX4400-EM-4S
+part_number: EX4400-EM-4S
+weight: 0.2
+weight_unit: lb
+comments: 4x10GbE SFP+ extension module
+interfaces:
+  - name: xe-0/2/0
+    type: 10gbase-x-sfpp
+  - name: xe-0/2/1
+    type: 10gbase-x-sfpp
+  - name: xe-0/2/2
+    type: 10gbase-x-sfpp
+  - name: xe-0/2/3
+    type: 10gbase-x-sfpp
diff --git a/module-types/Juniper/EX4400-EM-4Y.yaml b/module-types/Juniper/EX4400-EM-4Y.yaml
new file mode 100644
index 00000000..1f68ee34
--- /dev/null
+++ b/module-types/Juniper/EX4400-EM-4Y.yaml
@@ -0,0 +1,16 @@
+---
+manufacturer: Juniper
+model: EX4400-EM-4Y
+part_number: EX4400-EM-4Y
+weight: 0.29
+weight_unit: lb
+comments: 4x25GbE SFP28 extension module
+interfaces:
+  - name: et-0/2/0
+    type: 25gbase-x-sfp28
+  - name: et-0/2/1
+    type: 25gbase-x-sfp28
+  - name: et-0/2/2
+    type: 25gbase-x-sfp28
+  - name: et-0/2/3
+    type: 25gbase-x-sfp28
diff --git a/module-types/Juniper/JNP7100-FAN1RU-AI.yaml b/module-types/Juniper/JNP7100-FAN1RU-AI.yaml
new file mode 100644
index 00000000..f2786801
--- /dev/null
+++ b/module-types/Juniper/JNP7100-FAN1RU-AI.yaml
@@ -0,0 +1,6 @@
+---
+manufacturer: Juniper
+model: JNP7100-FAN1RU-AI
+part_number: JNP7100-FAN1RU-AI
+# airflow: rear-to-front
+comments: AFI Fan module for ACX7100 routers
diff --git a/module-types/Juniper/JNP7100-FAN1RU-AO.yaml b/module-types/Juniper/JNP7100-FAN1RU-AO.yaml
new file mode 100644
index 00000000..9ce9917c
--- /dev/null
+++ b/module-types/Juniper/JNP7100-FAN1RU-AO.yaml
@@ -0,0 +1,6 @@
+---
+manufacturer: Juniper
+model: JNP7100-FAN1RU-AO
+part_number: JNP7100-FAN1RU-AO
+# airflow: front-to-rear
+comments: AFO Fan module for ACX7100 routers
diff --git a/module-types/Juniper/JPSU-1050-C-AC-AFO.yaml b/module-types/Juniper/JPSU-1050-C-AC-AFO.yaml
new file mode 100644
index 00000000..6692ce3c
--- /dev/null
+++ b/module-types/Juniper/JPSU-1050-C-AC-AFO.yaml
@@ -0,0 +1,11 @@
+---
+manufacturer: Juniper
+model: JPSU-1050-C-AC-AFO
+part_number: JPSU-1050-C-AC-AFO
+# airflow: front-to-rear
+weight: 1.98
+weight_unit: lb
+power-ports:
+  - name: '{module}'
+    type: iec-60320-c16
+    maximum_draw: 1050
diff --git a/module-types/Juniper/JPSU-1600-C-AC-AFO.yaml b/module-types/Juniper/JPSU-1600-C-AC-AFO.yaml
new file mode 100644
index 00000000..62d12096
--- /dev/null
+++ b/module-types/Juniper/JPSU-1600-C-AC-AFO.yaml
@@ -0,0 +1,11 @@
+---
+manufacturer: Juniper
+model: JPSU-1600-C-AC-AFO
+part_number: JPSU-1600-C-AC-AFO
+# airflow: front-to-rear
+weight: 2
+weight_unit: lb
+power-ports:
+  - name: '{module}'
+    type: iec-60320-c16
+    maximum_draw: 1600
diff --git a/module-types/Juniper/JPSU-1600W-1UACAFI.yaml b/module-types/Juniper/JPSU-1600W-1UACAFI.yaml
new file mode 100644
index 00000000..d3b3aecb
--- /dev/null
+++ b/module-types/Juniper/JPSU-1600W-1UACAFI.yaml
@@ -0,0 +1,12 @@
+---
+manufacturer: Juniper
+model: JPSU-1600W-1UACAFI
+part_number: JPSU-1600W-1UACAFI
+# airflow: front-to-rear
+weight: 2.33
+weight_unit: lb
+comments: AC PSM for ACX, QFX
+power-ports:
+  - name: '{module}'
+    type: iec-60320-c16
+    maximum_draw: 1600
diff --git a/module-types/Juniper/JPSU-1600W-1UACAFO.yaml b/module-types/Juniper/JPSU-1600W-1UACAFO.yaml
new file mode 100644
index 00000000..572d45d2
--- /dev/null
+++ b/module-types/Juniper/JPSU-1600W-1UACAFO.yaml
@@ -0,0 +1,12 @@
+---
+manufacturer: Juniper
+model: JPSU-1600W-1UACAFO
+part_number: JPSU-1600W-1UACAFO
+# airflow: front-to-rear
+weight: 2.33
+weight_unit: lb
+comments: AC PSM for ACX, QFX
+power-ports:
+  - name: '{module}'
+    type: iec-60320-c16
+    maximum_draw: 1600
diff --git a/module-types/Juniper/JPSU-1600W-1UDCAFI.yaml b/module-types/Juniper/JPSU-1600W-1UDCAFI.yaml
new file mode 100644
index 00000000..6b3cef8d
--- /dev/null
+++ b/module-types/Juniper/JPSU-1600W-1UDCAFI.yaml
@@ -0,0 +1,12 @@
+---
+manufacturer: Juniper
+model: JPSU-1600W-1UDCAFI
+part_number: JPSU-1600W-1UDCAFI
+# airflow: front-to-rear
+weight: 2.40
+weight_unit: lb
+comments: DC PSM for ACX, QFX
+power-ports:
+  - name: '{module}'
+    type: dc-terminal
+    maximum_draw: 1600
diff --git a/module-types/Juniper/JPSU-1600W-1UDCAFO.yaml b/module-types/Juniper/JPSU-1600W-1UDCAFO.yaml
new file mode 100644
index 00000000..9cb45007
--- /dev/null
+++ b/module-types/Juniper/JPSU-1600W-1UDCAFO.yaml
@@ -0,0 +1,12 @@
+---
+manufacturer: Juniper
+model: JPSU-1600W-1UDCAFO
+part_number: JPSU-1600W-1UDCAFO
+# airflow: front-to-rear
+weight: 2.40
+weight_unit: lb
+comments: DC PSM for ACX, QFX
+power-ports:
+  - name: '{module}'
+    type: dc-terminal
+    maximum_draw: 1600
diff --git a/module-types/Juniper/JPSU-550-C-AC-AFI.yaml b/module-types/Juniper/JPSU-550-C-AC-AFI.yaml
new file mode 100644
index 00000000..24719c51
--- /dev/null
+++ b/module-types/Juniper/JPSU-550-C-AC-AFI.yaml
@@ -0,0 +1,11 @@
+---
+manufacturer: Juniper
+model: JPSU-550-C-AC-AFI
+part_number: JPSU-550-C-AC-AFI
+# airflow: rear-to-front
+weight: 1.76
+weight_unit: lb
+power-ports:
+  - name: '{module}'
+    type: iec-60320-c14
+    maximum_draw: 550
diff --git a/module-types/Juniper/JPSU-550-C-AC-AFO.yaml b/module-types/Juniper/JPSU-550-C-AC-AFO.yaml
new file mode 100644
index 00000000..1f06330b
--- /dev/null
+++ b/module-types/Juniper/JPSU-550-C-AC-AFO.yaml
@@ -0,0 +1,11 @@
+---
+manufacturer: Juniper
+model: JPSU-550-C-AC-AFO
+part_number: JPSU-550-C-AC-AFO
+# airflow: front-to-rear
+weight: 1.76
+weight_unit: lb
+power-ports:
+  - name: '{module}'
+    type: iec-60320-c14
+    maximum_draw: 550
diff --git a/module-types/Juniper/JPSU-550-C-DC-AFI.yaml b/module-types/Juniper/JPSU-550-C-DC-AFI.yaml
new file mode 100644
index 00000000..47d0132a
--- /dev/null
+++ b/module-types/Juniper/JPSU-550-C-DC-AFI.yaml
@@ -0,0 +1,11 @@
+---
+manufacturer: Juniper
+model: JPSU-550-C-DC-AFI
+part_number: JPSU-550-C-DC-AFI
+# airflow: rear-to-front
+weight: 1.65
+weight_unit: lb
+power-ports:
+  - name: '{module}'
+    type: dc-terminal
+    maximum_draw: 550
diff --git a/module-types/Juniper/JPSU-550-C-DC-AFO.yaml b/module-types/Juniper/JPSU-550-C-DC-AFO.yaml
new file mode 100644
index 00000000..b77780a9
--- /dev/null
+++ b/module-types/Juniper/JPSU-550-C-DC-AFO.yaml
@@ -0,0 +1,11 @@
+---
+manufacturer: Juniper
+model: JPSU-550-C-DC-AFO
+part_number: JPSU-550-C-DC-AFO
+# airflow: front-to-rear
+weight: 1.65
+weight_unit: lb
+power-ports:
+  - name: '{module}'
+    type: dc-terminal
+    maximum_draw: 550
-- 
GitLab