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 0000000000000000000000000000000000000000..dd2248774d128b8de233a9eef919a575fcd15774
--- /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 0000000000000000000000000000000000000000..d2ce79bb4e670864caf33afb759fb81707e4ff3e
--- /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 0000000000000000000000000000000000000000..0a3f47f57bba0fd99c39e97cebee56a4afcbe9cb
--- /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 f8746a1048ae395d895fce0c8dfa8385086f78aa..c3ca00522c5f0b66e974c0226cb7d416f44aa8f6 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 0000000000000000000000000000000000000000..f66041004d0583e714eb8f490015854fdb0cd8ad
--- /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 0000000000000000000000000000000000000000..386f1e6b5c5601b2acc8c6bd8ff8786ffe668c02
--- /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 0000000000000000000000000000000000000000..481cb8d5b71e5e3409c280ed8ab7ee6deee9c7fc
--- /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 0000000000000000000000000000000000000000..20e71c81935ac8ef5f086d6db1a586e9492e782b
--- /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 0000000000000000000000000000000000000000..79a5cc7cdaff395a4d35245df2e50038dc58e6e3
--- /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 0000000000000000000000000000000000000000..28a0fdba4b382ba160fa9527a9fe8bb4e245761b
--- /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 0000000000000000000000000000000000000000..c7ddfb6370f9004eb5d6bbbba93bd3c9a1ba58f0
--- /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 0000000000000000000000000000000000000000..3d7e043472755b9af54fcfc50b63b83cc1fec419
--- /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 0000000000000000000000000000000000000000..e19a71d41eab90cd84881df85091c4b42a0a9fe4
--- /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 0000000000000000000000000000000000000000..33425fc5e36a89eec2a549721a5f25bcaabffb0c
--- /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 0000000000000000000000000000000000000000..530ddf020b9a46e38830f49d68099e0879e28b4b
--- /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 0000000000000000000000000000000000000000..19d4bd160eb7ff393327c7fa1291136e337d56c4
--- /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 0000000000000000000000000000000000000000..6ae99d3383b48c06cedfe5c35f13bdc4d70af009
--- /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 0000000000000000000000000000000000000000..af98bebeeaa2023fac2e9e4175dcc7498ef5a8cd
--- /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 0000000000000000000000000000000000000000..9e33de06b1233622fe2317caa66575665bef4c0d
--- /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 0000000000000000000000000000000000000000..93b985b6d80da70dfd36f31a10bbdbe1375b1755
--- /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 0000000000000000000000000000000000000000..58694e686bde3958b7465d64ba56ee81a7770c1f
--- /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 0000000000000000000000000000000000000000..076e2ef9609f7b5ec63a89fa0ee6f5fc389f2565
--- /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 0000000000000000000000000000000000000000..691e904a4862edcef4e8a98ff425cf15e5747d1b
--- /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 0000000000000000000000000000000000000000..b0844678440d5b852dbe19ba3180ca706b302df8
--- /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 0000000000000000000000000000000000000000..726fe55ae0687614dafe8c9cde82f166d923a761
--- /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 0000000000000000000000000000000000000000..8c84961f1104ebcbfc7b5f17439089c3a38712ab
--- /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 0000000000000000000000000000000000000000..f0c40e944ced2b4af62e9bca77bd51d1c8235095
--- /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 0000000000000000000000000000000000000000..df4ce7d2e165e5cb1b00438f2d16dd57ae6255fb
--- /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 0000000000000000000000000000000000000000..1f68ee34782e977394897954716fcb53b27e07ef
--- /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 0000000000000000000000000000000000000000..f2786801d310fdf7f50495fcac82b40646e80125
--- /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 0000000000000000000000000000000000000000..9ce9917c0964b101b8358a67d616a2249ce5cb28
--- /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 0000000000000000000000000000000000000000..6692ce3c06eb6dad8f1f172be3dc072e98dfe697
--- /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 0000000000000000000000000000000000000000..62d12096b8ce50c97f2ce0f2572efad8095ba8bf
--- /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 0000000000000000000000000000000000000000..d3b3aecb32cd0bdc7a3774ab1910ac3041cfd11b
--- /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 0000000000000000000000000000000000000000..572d45d2a8e962592ab784e354ac027f85443678
--- /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 0000000000000000000000000000000000000000..6b3cef8d5585b8354985baabde71eadf06b490af
--- /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 0000000000000000000000000000000000000000..9cb45007da77419a3740fd849f0732b0fea32028
--- /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 0000000000000000000000000000000000000000..24719c51d295ab5347b7482fcad114718f4670a6
--- /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 0000000000000000000000000000000000000000..1f06330b46dbdb4540f8f925fa419c6bfb8328c5
--- /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 0000000000000000000000000000000000000000..47d0132acd59d6caf7488eaf46c72f28b38ffce0
--- /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 0000000000000000000000000000000000000000..b77780a9d03e6afa8bc6d27bc910dbb4868f1838
--- /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