diff --git a/contrib/openapi.json b/contrib/openapi.json
index 652e2e341..bc71942c2 100644
--- a/contrib/openapi.json
+++ b/contrib/openapi.json
@@ -2,7 +2,7 @@
"openapi": "3.0.3",
"info": {
"title": "NetBox REST API",
- "version": "4.6.5",
+ "version": "4.6.6",
"license": {
"name": "Apache v2 License"
}
@@ -804,6 +804,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -828,6 +840,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -2231,6 +2255,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -2255,6 +2291,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -4154,6 +4202,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -4178,6 +4238,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -6273,6 +6345,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -6297,6 +6381,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -8485,6 +8581,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -8509,6 +8617,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -10310,6 +10430,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -10334,6 +10466,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -11764,6 +11908,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -11788,6 +11944,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -13448,6 +13616,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -13472,6 +13652,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -14763,6 +14955,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -14787,6 +14991,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -16406,6 +16622,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -16430,6 +16658,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -17952,6 +18192,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -17976,6 +18228,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -21387,6 +21651,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -21411,6 +21687,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -22129,6 +22417,33 @@
"format": "date-time"
}
},
+ {
+ "in": "query",
+ "name": "execution_time",
+ "schema": {
+ "type": "string",
+ "format": "duration"
+ },
+ "description": "Execution time"
+ },
+ {
+ "in": "query",
+ "name": "execution_time__gte",
+ "schema": {
+ "type": "string",
+ "format": "duration"
+ },
+ "description": "Execution time (minimum)"
+ },
+ {
+ "in": "query",
+ "name": "execution_time__lte",
+ "schema": {
+ "type": "string",
+ "format": "duration"
+ },
+ "description": "Execution time (maximum)"
+ },
{
"in": "query",
"name": "fields",
@@ -25629,6 +25944,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -25653,6 +25980,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -28747,6 +29086,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -28771,6 +29122,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -33116,6 +33479,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -33140,6 +33515,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -37407,6 +37794,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -37431,6 +37830,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -41081,6 +41492,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -41105,6 +41528,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -42868,6 +43303,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -42892,6 +43339,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -44198,6 +44657,91 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "end_of_life",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "end_of_life__empty",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "end_of_life__gt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "end_of_life__gte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "end_of_life__lt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "end_of_life__lte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "end_of_life__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "exclude_from_utilization",
@@ -45897,6 +46441,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -45921,6 +46477,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -50443,6 +51011,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -50467,6 +51047,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -50810,7 +51402,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/PaginatedDeviceWithConfigContextList"
+ "$ref": "#/components/schemas/PaginatedDeviceList"
}
}
},
@@ -50830,12 +51422,12 @@
"schema": {
"oneOf": [
{
- "$ref": "#/components/schemas/WritableDeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/WritableDeviceRequest"
},
{
"type": "array",
"items": {
- "$ref": "#/components/schemas/WritableDeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/WritableDeviceRequest"
}
}
]
@@ -50845,12 +51437,12 @@
"schema": {
"oneOf": [
{
- "$ref": "#/components/schemas/WritableDeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/WritableDeviceRequest"
},
{
"type": "array",
"items": {
- "$ref": "#/components/schemas/WritableDeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/WritableDeviceRequest"
}
}
]
@@ -50872,7 +51464,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/DeviceWithConfigContext"
+ "$ref": "#/components/schemas/Device"
}
}
},
@@ -50892,7 +51484,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/BulkDeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/BulkDeviceRequest"
}
}
},
@@ -50900,7 +51492,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/BulkDeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/BulkDeviceRequest"
}
}
}
@@ -50922,7 +51514,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/DeviceWithConfigContext"
+ "$ref": "#/components/schemas/Device"
}
}
}
@@ -50943,7 +51535,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/PatchedBulkDeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/PatchedBulkDeviceRequest"
}
}
},
@@ -50951,7 +51543,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/PatchedBulkDeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/PatchedBulkDeviceRequest"
}
}
}
@@ -50973,7 +51565,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/DeviceWithConfigContext"
+ "$ref": "#/components/schemas/Device"
}
}
}
@@ -50994,7 +51586,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/DeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/DeviceRequest"
}
}
},
@@ -51002,7 +51594,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/DeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/DeviceRequest"
}
}
}
@@ -51079,7 +51671,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/DeviceWithConfigContext"
+ "$ref": "#/components/schemas/Device"
}
}
},
@@ -51108,12 +51700,12 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/WritableDeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/WritableDeviceRequest"
}
},
"multipart/form-data": {
"schema": {
- "$ref": "#/components/schemas/WritableDeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/WritableDeviceRequest"
}
}
},
@@ -51132,7 +51724,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/DeviceWithConfigContext"
+ "$ref": "#/components/schemas/Device"
}
}
},
@@ -51161,12 +51753,12 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/PatchedWritableDeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/PatchedWritableDeviceRequest"
}
},
"multipart/form-data": {
"schema": {
- "$ref": "#/components/schemas/PatchedWritableDeviceWithConfigContextRequest"
+ "$ref": "#/components/schemas/PatchedWritableDeviceRequest"
}
}
}
@@ -51184,7 +51776,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/DeviceWithConfigContext"
+ "$ref": "#/components/schemas/Device"
}
}
},
@@ -55138,6 +55730,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -55162,6 +55766,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -55981,6 +56597,176 @@
},
"description": "Return only brief fields for each object."
},
+ {
+ "in": "query",
+ "name": "channel_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channel_id__empty",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "channel_id__gt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channel_id__gte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channel_id__lt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channel_id__lte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channel_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channels",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channels__empty",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "channels__gt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channels__gte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channels__lt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channels__lte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channels__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "created",
@@ -56830,6 +57616,30 @@
"type": "string"
}
},
+ {
+ "in": "query",
+ "name": "parent_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "parent_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "poe_mode",
@@ -57391,7 +58201,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -57411,7 +58221,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -57424,7 +58234,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -57437,7 +58247,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -57450,7 +58260,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -57463,7 +58273,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -57476,7 +58286,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -57489,7 +58299,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -57502,7 +58312,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -57515,7 +58325,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -57528,7 +58338,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -57541,7 +58351,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -58302,6 +59112,176 @@
"type": "boolean"
}
},
+ {
+ "in": "query",
+ "name": "channel_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channel_id__empty",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "channel_id__gt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channel_id__gte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channel_id__lt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channel_id__lte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channel_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channels",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channels__empty",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "channels__gt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channels__gte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channels__lt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channels__lte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "channels__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "connected",
@@ -61601,6 +62581,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -61625,6 +62617,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -61781,7 +62785,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -61801,7 +62805,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -61814,7 +62818,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -61827,7 +62831,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -61840,7 +62844,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -61853,7 +62857,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -61866,7 +62870,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -61879,7 +62883,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -61892,7 +62896,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -61905,7 +62909,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -61918,7 +62922,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -61931,7 +62935,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "x-spec-enum-id": "ab7c1626812ec9d4"
}
},
"explode": true,
@@ -64078,6 +65082,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -64102,6 +65118,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -68603,6 +69631,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -68627,6 +69667,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -70749,6 +71801,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -70773,6 +71837,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -72297,6 +73373,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -72321,6 +73409,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -73852,6 +74952,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -73876,6 +74988,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -74977,6 +76101,58 @@
"format": "uuid"
}
},
+ {
+ "in": "query",
+ "name": "module_bay_type",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": "Module bay type (slug)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_bay_type__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": "Module bay type (slug)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_bay_type_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Module bay type (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_bay_type_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Module bay type (ID)",
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "module_type_id",
@@ -75789,6 +76965,1715 @@
}
}
},
+ "/api/dcim/module-bay-types/": {
+ "get": {
+ "operationId": "dcim_module_bay_types_list",
+ "description": "Get a list of module bay type objects.",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "brief",
+ "schema": {
+ "type": "boolean"
+ },
+ "description": "Return only brief fields for each object."
+ },
+ {
+ "in": "query",
+ "name": "color",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "color__empty",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "color__ic",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "color__ie",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "color__iew",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "color__iregex",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "color__isw",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "color__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "color__nic",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "color__nie",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "color__niew",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "color__nisw",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "color__regex",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "created",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "created__empty",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "created__gt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "created__gte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "created__lt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "created__lte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "created__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "created_by_request",
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ },
+ {
+ "in": "query",
+ "name": "description",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "description__empty",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "description__ic",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "description__ie",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "description__iew",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "description__iregex",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "description__isw",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "description__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "description__nic",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "description__nie",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "description__niew",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "description__nisw",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "description__regex",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "fields",
+ "schema": {
+ "type": "string"
+ },
+ "description": "Comma-separated list of fields to include in the response. Example: `fields=id,name`."
+ },
+ {
+ "in": "query",
+ "name": "id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "id__empty",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "id__gt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "id__gte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "id__lt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "id__lte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "last_updated",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "last_updated__empty",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "last_updated__gt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "last_updated__gte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "last_updated__lt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "last_updated__lte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "last_updated__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date-time"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "name": "limit",
+ "required": false,
+ "in": "query",
+ "description": "Number of results to return per page.",
+ "schema": {
+ "type": "integer"
+ }
+ },
+ {
+ "in": "query",
+ "name": "manufacturer",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": "Manufacturer (slug)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "manufacturer__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": "Manufacturer (slug)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "manufacturer_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "nullable": true
+ }
+ },
+ "description": "Manufacturer (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "manufacturer_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "nullable": true
+ }
+ },
+ "description": "Manufacturer (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "modified_by_request",
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ },
+ {
+ "in": "query",
+ "name": "module_bay_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Module bay (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_bay_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Module bay (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_bay_template_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Module bay template (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_bay_template_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Module bay template (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_type_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Module type (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_type_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Module type (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "name",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "name__empty",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "name__ic",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "name__ie",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "name__iew",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "name__iregex",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "name__isw",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "name__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "name__nic",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "name__nie",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "name__niew",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "name__nisw",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "name__regex",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "name": "offset",
+ "required": false,
+ "in": "query",
+ "description": "The initial index from which to return the results.",
+ "schema": {
+ "type": "integer"
+ }
+ },
+ {
+ "in": "query",
+ "name": "omit",
+ "schema": {
+ "type": "string"
+ },
+ "description": "Comma-separated list of fields to exclude from the response. Example: `omit=description,tags`."
+ },
+ {
+ "name": "ordering",
+ "required": false,
+ "in": "query",
+ "description": "Which field to use when ordering the results.",
+ "schema": {
+ "type": "string"
+ }
+ },
+ {
+ "in": "query",
+ "name": "owner",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": "Owner (name)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "owner__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": "Owner (name)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "owner_group",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": "Owner Group (name)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "owner_group__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": "Owner Group (name)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "owner_group_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Owner Group (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "owner_group_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Owner Group (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "owner_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "nullable": true
+ }
+ },
+ "description": "Owner (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "owner_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "nullable": true
+ }
+ },
+ "description": "Owner (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "q",
+ "schema": {
+ "type": "string"
+ },
+ "description": "Search"
+ },
+ {
+ "in": "query",
+ "name": "slug",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "slug__empty",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "slug__ic",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "slug__ie",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "slug__iew",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "slug__iregex",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "slug__isw",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "slug__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "slug__nic",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "slug__nie",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "slug__niew",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "slug__nisw",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "slug__regex",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "name": "start",
+ "required": false,
+ "in": "query",
+ "description": "Cursor-based pagination: return results with pk >= start, ordered by pk. Mutually exclusive with offset.",
+ "schema": {
+ "type": "integer"
+ }
+ },
+ {
+ "in": "query",
+ "name": "tag",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "tag__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "tag_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "tag_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "updated_by_request",
+ "schema": {
+ "type": "string",
+ "format": "uuid"
+ }
+ }
+ ],
+ "tags": [
+ "dcim"
+ ],
+ "security": [
+ {
+ "cookieAuth": []
+ },
+ {
+ "tokenAuth": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PaginatedModuleBayTypeList"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ },
+ "post": {
+ "operationId": "dcim_module_bay_types_create",
+ "description": "Post a list of module bay type objects.",
+ "tags": [
+ "dcim"
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/ModuleBayTypeRequest"
+ },
+ {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ModuleBayTypeRequest"
+ }
+ }
+ ]
+ }
+ },
+ "multipart/form-data": {
+ "schema": {
+ "oneOf": [
+ {
+ "$ref": "#/components/schemas/ModuleBayTypeRequest"
+ },
+ {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ModuleBayTypeRequest"
+ }
+ }
+ ]
+ }
+ }
+ },
+ "required": true
+ },
+ "security": [
+ {
+ "cookieAuth": []
+ },
+ {
+ "tokenAuth": []
+ }
+ ],
+ "responses": {
+ "201": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ModuleBayType"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ },
+ "put": {
+ "operationId": "dcim_module_bay_types_bulk_update",
+ "description": "Put a list of module bay type objects.",
+ "tags": [
+ "dcim"
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BulkModuleBayTypeRequest"
+ }
+ }
+ },
+ "multipart/form-data": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BulkModuleBayTypeRequest"
+ }
+ }
+ }
+ },
+ "required": true
+ },
+ "security": [
+ {
+ "cookieAuth": []
+ },
+ {
+ "tokenAuth": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ModuleBayType"
+ }
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ },
+ "patch": {
+ "operationId": "dcim_module_bay_types_bulk_partial_update",
+ "description": "Patch a list of module bay type objects.",
+ "tags": [
+ "dcim"
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PatchedBulkModuleBayTypeRequest"
+ }
+ }
+ },
+ "multipart/form-data": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/PatchedBulkModuleBayTypeRequest"
+ }
+ }
+ }
+ },
+ "required": true
+ },
+ "security": [
+ {
+ "cookieAuth": []
+ },
+ {
+ "tokenAuth": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ModuleBayType"
+ }
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ },
+ "delete": {
+ "operationId": "dcim_module_bay_types_bulk_destroy",
+ "description": "Delete a list of module bay type objects.",
+ "tags": [
+ "dcim"
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ModuleBayTypeRequest"
+ }
+ }
+ },
+ "multipart/form-data": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ModuleBayTypeRequest"
+ }
+ }
+ }
+ },
+ "required": true
+ },
+ "security": [
+ {
+ "cookieAuth": []
+ },
+ {
+ "tokenAuth": []
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No response body"
+ }
+ }
+ }
+ },
+ "/api/dcim/module-bay-types/{id}/": {
+ "get": {
+ "operationId": "dcim_module_bay_types_retrieve",
+ "description": "Get a module bay type object.",
+ "parameters": [
+ {
+ "in": "query",
+ "name": "brief",
+ "schema": {
+ "type": "boolean"
+ },
+ "description": "Return only brief fields for each object."
+ },
+ {
+ "in": "query",
+ "name": "fields",
+ "schema": {
+ "type": "string"
+ },
+ "description": "Comma-separated list of fields to include in the response. Example: `fields=id,name`."
+ },
+ {
+ "in": "path",
+ "name": "id",
+ "schema": {
+ "type": "integer"
+ },
+ "description": "A unique integer value identifying this module bay type.",
+ "required": true
+ },
+ {
+ "in": "query",
+ "name": "omit",
+ "schema": {
+ "type": "string"
+ },
+ "description": "Comma-separated list of fields to exclude from the response. Example: `omit=description,tags`."
+ }
+ ],
+ "tags": [
+ "dcim"
+ ],
+ "security": [
+ {
+ "cookieAuth": []
+ },
+ {
+ "tokenAuth": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ModuleBayType"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ },
+ "put": {
+ "operationId": "dcim_module_bay_types_update",
+ "description": "Put a module bay type object.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "schema": {
+ "type": "integer"
+ },
+ "description": "A unique integer value identifying this module bay type.",
+ "required": true
+ }
+ ],
+ "tags": [
+ "dcim"
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ModuleBayTypeRequest"
+ }
+ },
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/ModuleBayTypeRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "security": [
+ {
+ "cookieAuth": []
+ },
+ {
+ "tokenAuth": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ModuleBayType"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ },
+ "patch": {
+ "operationId": "dcim_module_bay_types_partial_update",
+ "description": "Patch a module bay type object.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "schema": {
+ "type": "integer"
+ },
+ "description": "A unique integer value identifying this module bay type.",
+ "required": true
+ }
+ ],
+ "tags": [
+ "dcim"
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PatchedModuleBayTypeRequest"
+ }
+ },
+ "multipart/form-data": {
+ "schema": {
+ "$ref": "#/components/schemas/PatchedModuleBayTypeRequest"
+ }
+ }
+ }
+ },
+ "security": [
+ {
+ "cookieAuth": []
+ },
+ {
+ "tokenAuth": []
+ }
+ ],
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/ModuleBayType"
+ }
+ }
+ },
+ "description": ""
+ }
+ }
+ },
+ "delete": {
+ "operationId": "dcim_module_bay_types_destroy",
+ "description": "Delete a module bay type object.",
+ "parameters": [
+ {
+ "in": "path",
+ "name": "id",
+ "schema": {
+ "type": "integer"
+ },
+ "description": "A unique integer value identifying this module bay type.",
+ "required": true
+ }
+ ],
+ "tags": [
+ "dcim"
+ ],
+ "security": [
+ {
+ "cookieAuth": []
+ },
+ {
+ "tokenAuth": []
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "No response body"
+ }
+ }
+ }
+ },
"/api/dcim/module-bays/": {
"get": {
"operationId": "dcim_module_bays_list",
@@ -76810,6 +79695,58 @@
"format": "uuid"
}
},
+ {
+ "in": "query",
+ "name": "module_bay_type",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": "Module bay type (slug)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_bay_type__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": "Module bay type (slug)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_bay_type_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Module bay type (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_bay_type_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Module bay type (ID)",
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "module_id",
@@ -77529,6 +80466,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -77553,6 +80502,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -78884,6 +81845,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -78908,6 +81881,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -79973,6 +82958,91 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "end_of_life",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "end_of_life__empty",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "end_of_life__gt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "end_of_life__gte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "end_of_life__lt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "end_of_life__lte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "end_of_life__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "format": "date"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "fields",
@@ -80640,6 +83710,58 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "module_bay_type",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": "Module bay type (slug)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_bay_type__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "description": "Module bay type (slug)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_bay_type_id",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Module bay type (ID)",
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "module_bay_type_id__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "description": "Module bay type (ID)",
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "module_bays",
@@ -81378,6 +84500,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -81402,6 +84536,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -83675,6 +86821,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -83699,6 +86857,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -85266,6 +88436,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -85290,6 +88472,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -87743,6 +90937,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -87767,6 +90973,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -92826,6 +96044,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -92850,6 +96080,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -94680,6 +97922,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -94704,6 +97958,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -98802,6 +102068,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -98826,6 +102104,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -100559,6 +103849,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -100583,6 +103885,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -102096,6 +105410,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -102120,6 +105446,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -103868,6 +107206,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -103892,6 +107242,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -106244,6 +109606,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -106268,6 +109642,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -110102,6 +113488,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -110126,6 +113524,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -115170,6 +118580,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -115194,6 +118616,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -117081,6 +120515,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -117105,6 +120551,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -118661,6 +122119,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -118685,6 +122155,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -120777,6 +124259,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -120801,6 +124295,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -122714,6 +126220,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -122738,6 +126256,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -124455,6 +127985,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -124479,6 +128021,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -126797,6 +130351,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -126821,6 +130387,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -130894,6 +134472,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -130918,6 +134508,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -134100,6 +137702,13 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "nulls_first",
+ "schema": {
+ "type": "boolean"
+ }
+ },
{
"in": "query",
"name": "object_type",
@@ -134564,7 +138173,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "x-spec-enum-id": "6ec6eff91d34cc44"
}
},
"description": "The type of data this custom field holds",
@@ -134585,7 +138194,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "x-spec-enum-id": "6ec6eff91d34cc44"
}
},
"description": "The type of data this custom field holds",
@@ -134599,7 +138208,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "x-spec-enum-id": "6ec6eff91d34cc44"
}
},
"description": "The type of data this custom field holds",
@@ -134613,7 +138222,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "x-spec-enum-id": "6ec6eff91d34cc44"
}
},
"description": "The type of data this custom field holds",
@@ -134627,7 +138236,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "x-spec-enum-id": "6ec6eff91d34cc44"
}
},
"description": "The type of data this custom field holds",
@@ -134641,7 +138250,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "x-spec-enum-id": "6ec6eff91d34cc44"
}
},
"description": "The type of data this custom field holds",
@@ -134655,7 +138264,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "x-spec-enum-id": "6ec6eff91d34cc44"
}
},
"description": "The type of data this custom field holds",
@@ -134669,7 +138278,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "x-spec-enum-id": "6ec6eff91d34cc44"
}
},
"description": "The type of data this custom field holds",
@@ -134683,7 +138292,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "x-spec-enum-id": "6ec6eff91d34cc44"
}
},
"description": "The type of data this custom field holds",
@@ -134697,7 +138306,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "x-spec-enum-id": "6ec6eff91d34cc44"
}
},
"description": "The type of data this custom field holds",
@@ -134711,7 +138320,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "x-spec-enum-id": "6ec6eff91d34cc44"
}
},
"description": "The type of data this custom field holds",
@@ -134725,7 +138334,7 @@
"type": "array",
"items": {
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "x-spec-enum-id": "6ec6eff91d34cc44"
}
},
"description": "The type of data this custom field holds",
@@ -139115,6 +142724,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -139139,6 +142760,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -143742,6 +147375,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -143766,6 +147411,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -153081,6 +156738,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -153105,6 +156774,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -153117,6 +156798,91 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "timeout",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "timeout__empty",
+ "schema": {
+ "type": "boolean"
+ }
+ },
+ {
+ "in": "query",
+ "name": "timeout__gt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "timeout__gte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "timeout__lt",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "timeout__lte",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
+ {
+ "in": "query",
+ "name": "timeout__n",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "format": "int32"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "updated_by_request",
@@ -154409,6 +158175,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -154433,6 +158211,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -156122,6 +159912,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -156146,6 +159948,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -157794,6 +161608,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -157818,6 +161644,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -160802,6 +164640,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -160826,6 +164676,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -162843,6 +166705,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -162867,6 +166741,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -164635,6 +168521,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -164659,6 +168557,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -166896,6 +170806,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -166920,6 +170842,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -168871,6 +172805,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -168895,6 +172841,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -170273,6 +174231,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -170297,6 +174267,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -171841,6 +175823,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -171865,6 +175859,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -173400,6 +177406,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -173424,6 +177442,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -175144,6 +179174,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -175168,6 +179210,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -176743,6 +180797,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -176767,6 +180833,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -178308,6 +182386,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -178332,6 +182422,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -179524,6 +183626,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -179548,6 +183662,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -180011,6 +184137,13 @@
"type": "string"
}
},
+ {
+ "in": "query",
+ "name": "available_at_site_group",
+ "schema": {
+ "type": "string"
+ }
+ },
{
"in": "query",
"name": "available_on_device",
@@ -181614,6 +185747,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -181638,6 +185783,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -183321,6 +187478,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -183345,6 +187514,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -184844,6 +189025,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -184868,6 +189061,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -186374,6 +190579,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -186398,6 +190615,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -187776,6 +192005,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -187800,6 +192041,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -189679,6 +193932,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -189703,6 +193968,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -191334,6 +195611,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -191358,6 +195647,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -192860,6 +197161,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -192884,6 +197197,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -201437,6 +205762,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -201461,6 +205798,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -202839,6 +207188,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -202863,6 +207224,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -204688,6 +209061,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -204712,6 +209097,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -206733,6 +211130,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -206757,6 +211166,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -208245,6 +212666,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -208269,6 +212702,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -209917,6 +214362,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -209941,6 +214398,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -212813,6 +217282,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -212837,6 +217318,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -213202,7 +217695,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/PaginatedVirtualMachineWithConfigContextList"
+ "$ref": "#/components/schemas/PaginatedVirtualMachineList"
}
}
},
@@ -213222,12 +217715,12 @@
"schema": {
"oneOf": [
{
- "$ref": "#/components/schemas/WritableVirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/WritableVirtualMachineRequest"
},
{
"type": "array",
"items": {
- "$ref": "#/components/schemas/WritableVirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/WritableVirtualMachineRequest"
}
}
]
@@ -213237,12 +217730,12 @@
"schema": {
"oneOf": [
{
- "$ref": "#/components/schemas/WritableVirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/WritableVirtualMachineRequest"
},
{
"type": "array",
"items": {
- "$ref": "#/components/schemas/WritableVirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/WritableVirtualMachineRequest"
}
}
]
@@ -213264,7 +217757,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/VirtualMachineWithConfigContext"
+ "$ref": "#/components/schemas/VirtualMachine"
}
}
},
@@ -213284,7 +217777,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/BulkVirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/BulkVirtualMachineRequest"
}
}
},
@@ -213292,7 +217785,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/BulkVirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/BulkVirtualMachineRequest"
}
}
}
@@ -213314,7 +217807,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/VirtualMachineWithConfigContext"
+ "$ref": "#/components/schemas/VirtualMachine"
}
}
}
@@ -213335,7 +217828,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/PatchedBulkVirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/PatchedBulkVirtualMachineRequest"
}
}
},
@@ -213343,7 +217836,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/PatchedBulkVirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/PatchedBulkVirtualMachineRequest"
}
}
}
@@ -213365,7 +217858,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/VirtualMachineWithConfigContext"
+ "$ref": "#/components/schemas/VirtualMachine"
}
}
}
@@ -213386,7 +217879,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/VirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/VirtualMachineRequest"
}
}
},
@@ -213394,7 +217887,7 @@
"schema": {
"type": "array",
"items": {
- "$ref": "#/components/schemas/VirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/VirtualMachineRequest"
}
}
}
@@ -213471,7 +217964,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/VirtualMachineWithConfigContext"
+ "$ref": "#/components/schemas/VirtualMachine"
}
}
},
@@ -213500,12 +217993,12 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/WritableVirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/WritableVirtualMachineRequest"
}
},
"multipart/form-data": {
"schema": {
- "$ref": "#/components/schemas/WritableVirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/WritableVirtualMachineRequest"
}
}
},
@@ -213524,7 +218017,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/VirtualMachineWithConfigContext"
+ "$ref": "#/components/schemas/VirtualMachine"
}
}
},
@@ -213553,12 +218046,12 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/PatchedWritableVirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/PatchedWritableVirtualMachineRequest"
}
},
"multipart/form-data": {
"schema": {
- "$ref": "#/components/schemas/PatchedWritableVirtualMachineWithConfigContextRequest"
+ "$ref": "#/components/schemas/PatchedWritableVirtualMachineRequest"
}
}
}
@@ -213576,7 +218069,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/VirtualMachineWithConfigContext"
+ "$ref": "#/components/schemas/VirtualMachine"
}
}
},
@@ -214803,6 +219296,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -214827,6 +219332,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -217016,6 +221533,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -217040,6 +221569,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -218495,6 +223036,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -218519,6 +223072,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -220013,6 +224578,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -220037,6 +224614,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -221860,6 +226449,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -221884,6 +226485,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -223044,6 +227657,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -223068,6 +227693,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -225086,6 +229723,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -225110,6 +229759,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -226829,6 +231490,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -226853,6 +231526,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -227913,6 +232598,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -227937,6 +232634,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -229887,6 +234596,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -229911,6 +234632,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -231574,6 +236307,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -231598,6 +236343,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -233890,6 +238647,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -233914,6 +238683,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -236251,6 +241032,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag__n",
@@ -236275,6 +241068,18 @@
"explode": true,
"style": "form"
},
+ {
+ "in": "query",
+ "name": "tag_id__any",
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "integer"
+ }
+ },
+ "explode": true,
+ "style": "form"
+ },
{
"in": "query",
"name": "tag_id__n",
@@ -239379,7 +244184,7 @@
},
"BriefInterface": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"id": {
"type": "integer",
@@ -239432,7 +244237,7 @@
},
"BriefInterfaceRequest": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"device": {
"oneOf": [
@@ -240009,6 +244814,120 @@
"url"
]
},
+ "BriefModuleBayType": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "id": {
+ "type": "integer",
+ "readOnly": true
+ },
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "readOnly": true
+ },
+ "display": {
+ "type": "string",
+ "readOnly": true
+ },
+ "name": {
+ "type": "string",
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "manufacturer": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefManufacturer"
+ }
+ ],
+ "nullable": true
+ },
+ "color": {
+ "oneOf": [
+ {
+ "type": "string",
+ "pattern": "^[0-9a-f]{6}$",
+ "maxLength": 6
+ },
+ {
+ "type": "string",
+ "maxLength": 0
+ }
+ ]
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ }
+ },
+ "required": [
+ "display",
+ "id",
+ "name",
+ "slug",
+ "url"
+ ]
+ },
+ "BriefModuleBayTypeRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "manufacturer": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefManufacturerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "color": {
+ "oneOf": [
+ {
+ "type": "string",
+ "pattern": "^[0-9a-f]{6}$",
+ "maxLength": 6
+ },
+ {
+ "type": "string",
+ "maxLength": 0
+ }
+ ]
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ }
+ },
+ "required": [
+ "name",
+ "slug"
+ ]
+ },
"BriefModuleRequest": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
@@ -244727,8 +249646,8 @@
"multiobject"
],
"type": "string",
- "description": "* `text` - Text\n* `longtext` - Text (long)\n* `integer` - Integer\n* `decimal` - Decimal\n* `boolean` - Boolean (true/false)\n* `date` - Date\n* `datetime` - Date & time\n* `url` - URL\n* `json` - JSON\n* `select` - Selection\n* `multiselect` - Multiple selection\n* `object` - Object\n* `multiobject` - Multiple objects",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "description": "* `text` - Text\n* `longtext` - Text (long)\n* `integer` - Integer\n* `decimal` - Decimal\n* `boolean` - Boolean\n* `date` - Date\n* `datetime` - Date & time\n* `url` - URL\n* `json` - JSON\n* `select` - Selection\n* `multiselect` - Multiple selection\n* `object` - Object\n* `multiobject` - Multiple objects",
+ "x-spec-enum-id": "6ec6eff91d34cc44"
},
"related_object_type": {
"type": "string",
@@ -244804,6 +249723,10 @@
"type": "boolean",
"description": "Replicate this value when cloning objects"
},
+ "nulls_first": {
+ "type": "boolean",
+ "description": "Sort null values before non-null values when ordering by this field"
+ },
"default": {
"nullable": true,
"description": "Default value for the field (must be a JSON value). Encapsulate strings with double quotes (e.g. \"Foo\")."
@@ -245200,271 +250123,7 @@
"name"
]
},
- "BulkDeviceRoleRequest": {
- "type": "object",
- "description": "Base serializer class for models inheriting from NestedGroupModel.",
- "properties": {
- "id": {
- "type": "integer"
- },
- "name": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100
- },
- "slug": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100,
- "pattern": "^[-a-zA-Z0-9_]+$"
- },
- "color": {
- "type": "string",
- "minLength": 1,
- "pattern": "^[0-9a-f]{6}$",
- "maxLength": 6
- },
- "vm_role": {
- "type": "boolean",
- "description": "Virtual machines may be assigned to this role"
- },
- "config_template": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefConfigTemplateRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "parent": {
- "allOf": [
- {
- "$ref": "#/components/schemas/NestedDeviceRoleRequest"
- }
- ],
- "nullable": true
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTagRequest"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- },
- "owner": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwnerRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- }
- },
- "required": [
- "id",
- "name",
- "slug"
- ]
- },
- "BulkDeviceTypeRequest": {
- "type": "object",
- "description": "Base serializer class for models inheriting from PrimaryModel.",
- "properties": {
- "id": {
- "type": "integer"
- },
- "manufacturer": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "$ref": "#/components/schemas/BriefManufacturerRequest"
- }
- ]
- },
- "default_platform": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefPlatformRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "model": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100
- },
- "slug": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100,
- "pattern": "^[-a-zA-Z0-9_]+$"
- },
- "part_number": {
- "type": "string",
- "description": "Discrete part number (optional)",
- "maxLength": 50
- },
- "u_height": {
- "type": "number",
- "format": "double",
- "maximum": 1000,
- "minimum": 0.0,
- "exclusiveMaximum": true,
- "default": 1.0,
- "title": "Position (U)"
- },
- "exclude_from_utilization": {
- "type": "boolean",
- "description": "Devices of this type are excluded when calculating rack utilization."
- },
- "is_full_depth": {
- "type": "boolean",
- "description": "Device consumes both front and rear rack faces."
- },
- "subdevice_role": {
- "enum": [
- "parent",
- "child",
- "",
- null
- ],
- "type": "string",
- "description": "* `parent` - Parent\n* `child` - Child",
- "x-spec-enum-id": "65a61d5e1deb4a24",
- "nullable": true
- },
- "airflow": {
- "enum": [
- "front-to-rear",
- "rear-to-front",
- "left-to-right",
- "right-to-left",
- "side-to-rear",
- "rear-to-side",
- "bottom-to-top",
- "top-to-bottom",
- "passive",
- "mixed",
- "",
- null
- ],
- "type": "string",
- "description": "* `front-to-rear` - Front to rear\n* `rear-to-front` - Rear to front\n* `left-to-right` - Left to right\n* `right-to-left` - Right to left\n* `side-to-rear` - Side to rear\n* `rear-to-side` - Rear to side\n* `bottom-to-top` - Bottom to top\n* `top-to-bottom` - Top to bottom\n* `passive` - Passive\n* `mixed` - Mixed",
- "x-spec-enum-id": "11cb3d363b41ba9e",
- "nullable": true
- },
- "weight": {
- "type": "number",
- "format": "double",
- "maximum": 1000000,
- "minimum": -1000000,
- "exclusiveMaximum": true,
- "exclusiveMinimum": true,
- "nullable": true
- },
- "weight_unit": {
- "enum": [
- "kg",
- "g",
- "lb",
- "oz",
- "",
- null
- ],
- "type": "string",
- "description": "* `kg` - Kilograms\n* `g` - Grams\n* `lb` - Pounds\n* `oz` - Ounces",
- "x-spec-enum-id": "2235ce3f404afbc0",
- "nullable": true
- },
- "front_image": {
- "type": "string",
- "format": "binary",
- "nullable": true
- },
- "rear_image": {
- "type": "string",
- "format": "binary",
- "nullable": true
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "owner": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwnerRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTagRequest"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- }
- },
- "required": [
- "id",
- "manufacturer",
- "model",
- "slug"
- ]
- },
- "BulkDeviceWithConfigContextRequest": {
+ "BulkDeviceRequest": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
"properties": {
@@ -245803,6 +250462,276 @@
"site"
]
},
+ "BulkDeviceRoleRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from NestedGroupModel.",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "color": {
+ "type": "string",
+ "minLength": 1,
+ "pattern": "^[0-9a-f]{6}$",
+ "maxLength": 6
+ },
+ "vm_role": {
+ "type": "boolean",
+ "description": "Virtual machines may be assigned to this role"
+ },
+ "config_template": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefConfigTemplateRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "parent": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/NestedDeviceRoleRequest"
+ }
+ ],
+ "nullable": true
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "slug"
+ ]
+ },
+ "BulkDeviceTypeRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "manufacturer": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "$ref": "#/components/schemas/BriefManufacturerRequest"
+ }
+ ]
+ },
+ "default_platform": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefPlatformRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "model": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "part_number": {
+ "type": "string",
+ "description": "Discrete part number (optional)",
+ "maxLength": 50
+ },
+ "u_height": {
+ "type": "number",
+ "format": "double",
+ "maximum": 1000,
+ "minimum": 0.0,
+ "exclusiveMaximum": true,
+ "default": 1.0,
+ "title": "Position (U)"
+ },
+ "exclude_from_utilization": {
+ "type": "boolean",
+ "description": "Devices of this type are excluded when calculating rack utilization."
+ },
+ "is_full_depth": {
+ "type": "boolean",
+ "description": "Device consumes both front and rear rack faces."
+ },
+ "subdevice_role": {
+ "enum": [
+ "parent",
+ "child",
+ "",
+ null
+ ],
+ "type": "string",
+ "description": "* `parent` - Parent\n* `child` - Child",
+ "x-spec-enum-id": "65a61d5e1deb4a24",
+ "nullable": true
+ },
+ "airflow": {
+ "enum": [
+ "front-to-rear",
+ "rear-to-front",
+ "left-to-right",
+ "right-to-left",
+ "side-to-rear",
+ "rear-to-side",
+ "bottom-to-top",
+ "top-to-bottom",
+ "passive",
+ "mixed",
+ "",
+ null
+ ],
+ "type": "string",
+ "description": "* `front-to-rear` - Front to rear\n* `rear-to-front` - Rear to front\n* `left-to-right` - Left to right\n* `right-to-left` - Right to left\n* `side-to-rear` - Side to rear\n* `rear-to-side` - Rear to side\n* `bottom-to-top` - Bottom to top\n* `top-to-bottom` - Top to bottom\n* `passive` - Passive\n* `mixed` - Mixed",
+ "x-spec-enum-id": "11cb3d363b41ba9e",
+ "nullable": true
+ },
+ "weight": {
+ "type": "number",
+ "format": "double",
+ "maximum": 1000000,
+ "minimum": -1000000,
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "nullable": true
+ },
+ "weight_unit": {
+ "enum": [
+ "kg",
+ "g",
+ "lb",
+ "oz",
+ "",
+ null
+ ],
+ "type": "string",
+ "description": "* `kg` - Kilograms\n* `g` - Grams\n* `lb` - Pounds\n* `oz` - Ounces",
+ "x-spec-enum-id": "2235ce3f404afbc0",
+ "nullable": true
+ },
+ "end_of_life": {
+ "type": "string",
+ "format": "date",
+ "nullable": true,
+ "description": "The date after which this device type is no longer supported by the manufacturer"
+ },
+ "front_image": {
+ "type": "string",
+ "format": "binary",
+ "nullable": true
+ },
+ "rear_image": {
+ "type": "string",
+ "format": "binary",
+ "nullable": true
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "id",
+ "manufacturer",
+ "model",
+ "slug"
+ ]
+ },
"BulkEventRuleRequest": {
"type": "object",
"description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
@@ -247258,7 +252187,7 @@
},
"BulkInterfaceRequest": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"id": {
"type": "integer"
@@ -247310,6 +252239,7 @@
"virtual",
"bridge",
"lag",
+ "channel",
"100base-fx",
"100base-lfx",
"100base-tx",
@@ -247525,8 +252455,22 @@
"other"
],
"type": "string",
- "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `channel` - Channel\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
+ "x-spec-enum-id": "ab7c1626812ec9d4"
+ },
+ "channels": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The number of channels into which this interface is channelized"
+ },
+ "channel_id": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The channel on the parent interface to which this subinterface is bound"
},
"enabled": {
"type": "boolean"
@@ -247561,6 +252505,11 @@
"minimum": 1,
"nullable": true
},
+ "mac_address": {
+ "type": "string",
+ "nullable": true,
+ "minLength": 1
+ },
"primary_mac_address": {
"oneOf": [
{
@@ -248062,6 +253011,7 @@
"virtual",
"bridge",
"lag",
+ "channel",
"100base-fx",
"100base-lfx",
"100base-tx",
@@ -248277,8 +253227,22 @@
"other"
],
"type": "string",
- "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `channel` - Channel\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
+ "x-spec-enum-id": "ab7c1626812ec9d4"
+ },
+ "channels": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The number of channels into which this interface is channelized"
+ },
+ "channel_id": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The channel on the parent interface to which this subinterface is bound"
},
"enabled": {
"type": "boolean"
@@ -248291,6 +253255,14 @@
"type": "string",
"maxLength": 200
},
+ "parent": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/NestedInterfaceTemplateRequest"
+ }
+ ],
+ "nullable": true
+ },
"bridge": {
"allOf": [
{
@@ -249152,6 +254124,12 @@
"type": "string",
"maxLength": 200
},
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
+ },
"installed_module": {
"oneOf": [
{
@@ -249262,6 +254240,12 @@
"description": {
"type": "string",
"maxLength": 200
+ },
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
}
},
"required": [
@@ -249269,6 +254253,93 @@
"name"
]
},
+ "BulkModuleBayTypeRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "manufacturer": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefManufacturerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "color": {
+ "oneOf": [
+ {
+ "type": "string",
+ "pattern": "^[0-9a-f]{6}$",
+ "maxLength": 6
+ },
+ {
+ "type": "string",
+ "maxLength": 0
+ }
+ ]
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "slug"
+ ]
+ },
"BulkModuleRequest": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
@@ -249512,6 +254583,12 @@
"x-spec-enum-id": "2235ce3f404afbc0",
"nullable": true
},
+ "end_of_life": {
+ "type": "string",
+ "format": "date",
+ "nullable": true,
+ "description": "The date after which this module type is no longer supported by the manufacturer"
+ },
"description": {
"type": "string",
"maxLength": 200
@@ -249519,6 +254596,12 @@
"attributes": {
"nullable": true
},
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
+ },
"owner": {
"oneOf": [
{
@@ -253409,10 +258492,6 @@
"minimum": 0,
"nullable": true,
"description": "ID of the cryptographic pepper used to hash the token (v2 only)"
- },
- "token": {
- "type": "string",
- "minLength": 1
}
},
"required": [
@@ -254076,7 +259155,7 @@
},
"BulkVMInterfaceRequest": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"id": {
"type": "integer"
@@ -254121,6 +259200,11 @@
"minimum": 1,
"nullable": true
},
+ "mac_address": {
+ "type": "string",
+ "nullable": true,
+ "minLength": 1
+ },
"primary_mac_address": {
"oneOf": [
{
@@ -254851,95 +259935,7 @@
"virtual_machine"
]
},
- "BulkVirtualMachineTypeRequest": {
- "type": "object",
- "description": "Base serializer class for models inheriting from PrimaryModel.",
- "properties": {
- "id": {
- "type": "integer"
- },
- "name": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100
- },
- "slug": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100,
- "pattern": "^[-a-zA-Z0-9_]+$"
- },
- "default_platform": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefPlatformRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "default_vcpus": {
- "type": "number",
- "format": "double",
- "maximum": 10000,
- "minimum": 0.01,
- "exclusiveMaximum": true,
- "nullable": true
- },
- "default_memory": {
- "type": "integer",
- "maximum": 2147483647,
- "minimum": 0,
- "nullable": true
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "owner": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwnerRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTagRequest"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- }
- },
- "required": [
- "id",
- "name",
- "slug"
- ]
- },
- "BulkVirtualMachineWithConfigContextRequest": {
+ "BulkVirtualMachineRequest": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
"properties": {
@@ -255203,6 +260199,94 @@
"name"
]
},
+ "BulkVirtualMachineTypeRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "default_platform": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefPlatformRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "default_vcpus": {
+ "type": "number",
+ "format": "double",
+ "maximum": 10000,
+ "minimum": 0.01,
+ "exclusiveMaximum": true,
+ "nullable": true
+ },
+ "default_memory": {
+ "type": "integer",
+ "maximum": 2147483647,
+ "minimum": 0,
+ "nullable": true
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "id",
+ "name",
+ "slug"
+ ]
+ },
"BulkWebhookRequest": {
"type": "object",
"description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
@@ -255246,11 +260330,11 @@
},
"additional_headers": {
"type": "string",
- "description": "User-supplied HTTP headers to be sent with the request in addition to the HTTP content type. Headers should be defined in the format Name: Value. Jinja2 template processing is supported with the same context as the request body (below)."
+ "description": "User-supplied HTTP headers to be sent with the request in addition to the HTTP content type. Headers should be defined in the format Name: Value. Jinja2 template processing is supported with the same context as the request body (below). When interpolating untrusted data (such as object attributes) into a header value, apply the header_safe filter to guard against HTTP header injection, e.g. X-Object: {{ data.name | header_safe }}."
},
"body_template": {
"type": "string",
- "description": "Jinja2 template for a custom request body. If blank, a JSON object representing the change will be included. Available context data includes: event, model, timestamp, username, request_id, and data."
+ "description": "Jinja2 template for a custom request body. If blank, a JSON object representing the change will be included. Available context data includes: event, model, timestamp, request, and data."
},
"secret": {
"type": "string",
@@ -255267,6 +260351,13 @@
"description": "The specific CA certificate file to use for SSL verification. Leave blank to use the system defaults.",
"maxLength": 4096
},
+ "timeout": {
+ "type": "integer",
+ "maximum": 3600,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The maximum time (in seconds) to wait for a response before failing the request. Leave blank to use the system default (WEBHOOK_DEFAULT_TIMEOUT)."
+ },
"custom_fields": {
"type": "object",
"additionalProperties": {}
@@ -260736,8 +265827,8 @@
"multiobject"
],
"type": "string",
- "description": "* `text` - Text\n* `longtext` - Text (long)\n* `integer` - Integer\n* `decimal` - Decimal\n* `boolean` - Boolean (true/false)\n* `date` - Date\n* `datetime` - Date & time\n* `url` - URL\n* `json` - JSON\n* `select` - Selection\n* `multiselect` - Multiple selection\n* `object` - Object\n* `multiobject` - Multiple objects",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "description": "* `text` - Text\n* `longtext` - Text (long)\n* `integer` - Integer\n* `decimal` - Decimal\n* `boolean` - Boolean\n* `date` - Date\n* `datetime` - Date & time\n* `url` - URL\n* `json` - JSON\n* `select` - Selection\n* `multiselect` - Multiple selection\n* `object` - Object\n* `multiobject` - Multiple objects",
+ "x-spec-enum-id": "6ec6eff91d34cc44"
},
"label": {
"type": "string",
@@ -260746,7 +265837,7 @@
"Text (long)",
"Integer",
"Decimal",
- "Boolean (true/false)",
+ "Boolean",
"Date",
"Date & time",
"URL",
@@ -260875,6 +265966,10 @@
"type": "boolean",
"description": "Replicate this value when cloning objects"
},
+ "nulls_first": {
+ "type": "boolean",
+ "description": "Sort null values before non-null values when ordering by this field"
+ },
"default": {
"nullable": true,
"description": "Default value for the field (must be a JSON value). Encapsulate strings with double quotes (e.g. \"Foo\")."
@@ -261200,8 +266295,8 @@
"multiobject"
],
"type": "string",
- "description": "* `text` - Text\n* `longtext` - Text (long)\n* `integer` - Integer\n* `decimal` - Decimal\n* `boolean` - Boolean (true/false)\n* `date` - Date\n* `datetime` - Date & time\n* `url` - URL\n* `json` - JSON\n* `select` - Selection\n* `multiselect` - Multiple selection\n* `object` - Object\n* `multiobject` - Multiple objects",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "description": "* `text` - Text\n* `longtext` - Text (long)\n* `integer` - Integer\n* `decimal` - Decimal\n* `boolean` - Boolean\n* `date` - Date\n* `datetime` - Date & time\n* `url` - URL\n* `json` - JSON\n* `select` - Selection\n* `multiselect` - Multiple selection\n* `object` - Object\n* `multiobject` - Multiple objects",
+ "x-spec-enum-id": "6ec6eff91d34cc44"
},
"related_object_type": {
"type": "string",
@@ -261277,6 +266372,10 @@
"type": "boolean",
"description": "Replicate this value when cloning objects"
},
+ "nulls_first": {
+ "type": "boolean",
+ "description": "Sort null values before non-null values when ordering by this field"
+ },
"default": {
"nullable": true,
"description": "Default value for the field (must be a JSON value). Encapsulate strings with double quotes (e.g. \"Foo\")."
@@ -262186,6 +267285,10 @@
],
"nullable": true
},
+ "config_context": {
+ "nullable": true,
+ "readOnly": true
+ },
"local_context_data": {
"nullable": true,
"description": "Local config context data takes precedence over source contexts in the final rendered config context"
@@ -262254,6 +267357,7 @@
}
},
"required": [
+ "config_context",
"console_port_count",
"console_server_port_count",
"created",
@@ -262551,6 +267655,341 @@
"name"
]
},
+ "DeviceRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "name": {
+ "type": "string",
+ "nullable": true,
+ "maxLength": 64
+ },
+ "device_type": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "$ref": "#/components/schemas/BriefDeviceTypeRequest"
+ }
+ ]
+ },
+ "role": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "$ref": "#/components/schemas/BriefDeviceRoleRequest"
+ }
+ ]
+ },
+ "tenant": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefTenantRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "platform": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefPlatformRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "serial": {
+ "type": "string",
+ "title": "Serial number",
+ "description": "Chassis serial number, assigned by the manufacturer",
+ "maxLength": 50
+ },
+ "asset_tag": {
+ "type": "string",
+ "nullable": true,
+ "description": "A unique tag used to identify this device",
+ "maxLength": 50
+ },
+ "site": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "$ref": "#/components/schemas/BriefSiteRequest"
+ }
+ ]
+ },
+ "location": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefLocationRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "rack": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefRackRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "position": {
+ "type": "number",
+ "format": "double",
+ "maximum": 1000,
+ "minimum": 0.5,
+ "exclusiveMaximum": true,
+ "nullable": true,
+ "title": "Position (U)"
+ },
+ "face": {
+ "enum": [
+ "front",
+ "rear",
+ ""
+ ],
+ "type": "string",
+ "description": "* `front` - Front\n* `rear` - Rear",
+ "x-spec-enum-id": "d2fb9b3f75158b83"
+ },
+ "latitude": {
+ "type": "number",
+ "format": "double",
+ "maximum": 90.0,
+ "minimum": -90.0,
+ "nullable": true,
+ "description": "GPS coordinate in decimal format (xx.yyyyyy)"
+ },
+ "longitude": {
+ "type": "number",
+ "format": "double",
+ "maximum": 180.0,
+ "minimum": -180.0,
+ "nullable": true,
+ "description": "GPS coordinate in decimal format (xx.yyyyyy)"
+ },
+ "status": {
+ "enum": [
+ "offline",
+ "active",
+ "planned",
+ "staged",
+ "failed",
+ "inventory",
+ "decommissioning"
+ ],
+ "type": "string",
+ "description": "* `offline` - Offline\n* `active` - Active\n* `planned` - Planned\n* `staged` - Staged\n* `failed` - Failed\n* `inventory` - Inventory\n* `decommissioning` - Decommissioning",
+ "x-spec-enum-id": "65feb4244cc9110c"
+ },
+ "airflow": {
+ "enum": [
+ "front-to-rear",
+ "rear-to-front",
+ "left-to-right",
+ "right-to-left",
+ "side-to-rear",
+ "rear-to-side",
+ "bottom-to-top",
+ "top-to-bottom",
+ "passive",
+ "mixed",
+ ""
+ ],
+ "type": "string",
+ "description": "* `front-to-rear` - Front to rear\n* `rear-to-front` - Rear to front\n* `left-to-right` - Left to right\n* `right-to-left` - Right to left\n* `side-to-rear` - Side to rear\n* `rear-to-side` - Rear to side\n* `bottom-to-top` - Bottom to top\n* `top-to-bottom` - Top to bottom\n* `passive` - Passive\n* `mixed` - Mixed",
+ "x-spec-enum-id": "11cb3d363b41ba9e"
+ },
+ "primary_ip4": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefIPAddressRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "primary_ip6": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefIPAddressRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "oob_ip": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefIPAddressRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "cluster": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefClusterRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "virtual_chassis": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefVirtualChassisRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "vc_position": {
+ "type": "integer",
+ "maximum": 255,
+ "minimum": 0,
+ "nullable": true
+ },
+ "vc_priority": {
+ "type": "integer",
+ "maximum": 255,
+ "minimum": 0,
+ "nullable": true,
+ "description": "Virtual chassis master election priority"
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "config_template": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefConfigTemplateRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "local_context_data": {
+ "nullable": true,
+ "description": "Local config context data takes precedence over source contexts in the final rendered config context"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "device_type",
+ "role",
+ "site"
+ ]
+ },
"DeviceRole": {
"type": "object",
"description": "Base serializer class for models inheriting from NestedGroupModel.",
@@ -262927,6 +268366,12 @@
},
"nullable": true
},
+ "end_of_life": {
+ "type": "string",
+ "format": "date",
+ "nullable": true,
+ "description": "The date after which this device type is no longer supported by the manufacturer"
+ },
"front_image": {
"type": "string",
"format": "uri",
@@ -263160,6 +268605,12 @@
"x-spec-enum-id": "2235ce3f404afbc0",
"nullable": true
},
+ "end_of_life": {
+ "type": "string",
+ "format": "date",
+ "nullable": true,
+ "description": "The date after which this device type is no longer supported by the manufacturer"
+ },
"front_image": {
"type": "string",
"format": "binary",
@@ -263210,727 +268661,6 @@
"slug"
]
},
- "DeviceWithConfigContext": {
- "type": "object",
- "description": "Base serializer class for models inheriting from PrimaryModel.",
- "properties": {
- "id": {
- "type": "integer",
- "readOnly": true
- },
- "url": {
- "type": "string",
- "format": "uri",
- "readOnly": true
- },
- "display_url": {
- "type": "string",
- "format": "uri",
- "readOnly": true
- },
- "display": {
- "type": "string",
- "readOnly": true
- },
- "name": {
- "type": "string",
- "nullable": true,
- "maxLength": 64
- },
- "device_type": {
- "$ref": "#/components/schemas/BriefDeviceType"
- },
- "role": {
- "$ref": "#/components/schemas/BriefDeviceRole"
- },
- "tenant": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefTenant"
- }
- ],
- "nullable": true
- },
- "platform": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefPlatform"
- }
- ],
- "nullable": true
- },
- "serial": {
- "type": "string",
- "title": "Serial number",
- "description": "Chassis serial number, assigned by the manufacturer",
- "maxLength": 50
- },
- "asset_tag": {
- "type": "string",
- "nullable": true,
- "description": "A unique tag used to identify this device",
- "maxLength": 50
- },
- "site": {
- "$ref": "#/components/schemas/BriefSite"
- },
- "location": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefLocation"
- }
- ],
- "nullable": true
- },
- "rack": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefRack"
- }
- ],
- "nullable": true
- },
- "position": {
- "type": "number",
- "format": "double",
- "maximum": 1000,
- "minimum": 0.5,
- "exclusiveMaximum": true,
- "nullable": true,
- "title": "Position (U)"
- },
- "face": {
- "type": "object",
- "properties": {
- "value": {
- "enum": [
- "front",
- "rear",
- ""
- ],
- "type": "string",
- "description": "* `front` - Front\n* `rear` - Rear",
- "x-spec-enum-id": "d2fb9b3f75158b83"
- },
- "label": {
- "type": "string",
- "enum": [
- "Front",
- "Rear"
- ]
- }
- }
- },
- "latitude": {
- "type": "number",
- "format": "double",
- "maximum": 90.0,
- "minimum": -90.0,
- "nullable": true,
- "description": "GPS coordinate in decimal format (xx.yyyyyy)"
- },
- "longitude": {
- "type": "number",
- "format": "double",
- "maximum": 180.0,
- "minimum": -180.0,
- "nullable": true,
- "description": "GPS coordinate in decimal format (xx.yyyyyy)"
- },
- "parent_device": {
- "allOf": [
- {
- "$ref": "#/components/schemas/NestedDevice"
- }
- ],
- "nullable": true,
- "readOnly": true
- },
- "status": {
- "type": "object",
- "properties": {
- "value": {
- "enum": [
- "offline",
- "active",
- "planned",
- "staged",
- "failed",
- "inventory",
- "decommissioning"
- ],
- "type": "string",
- "description": "* `offline` - Offline\n* `active` - Active\n* `planned` - Planned\n* `staged` - Staged\n* `failed` - Failed\n* `inventory` - Inventory\n* `decommissioning` - Decommissioning",
- "x-spec-enum-id": "65feb4244cc9110c"
- },
- "label": {
- "type": "string",
- "enum": [
- "Offline",
- "Active",
- "Planned",
- "Staged",
- "Failed",
- "Inventory",
- "Decommissioning"
- ]
- }
- }
- },
- "airflow": {
- "type": "object",
- "properties": {
- "value": {
- "enum": [
- "front-to-rear",
- "rear-to-front",
- "left-to-right",
- "right-to-left",
- "side-to-rear",
- "rear-to-side",
- "bottom-to-top",
- "top-to-bottom",
- "passive",
- "mixed",
- ""
- ],
- "type": "string",
- "description": "* `front-to-rear` - Front to rear\n* `rear-to-front` - Rear to front\n* `left-to-right` - Left to right\n* `right-to-left` - Right to left\n* `side-to-rear` - Side to rear\n* `rear-to-side` - Rear to side\n* `bottom-to-top` - Bottom to top\n* `top-to-bottom` - Top to bottom\n* `passive` - Passive\n* `mixed` - Mixed",
- "x-spec-enum-id": "11cb3d363b41ba9e"
- },
- "label": {
- "type": "string",
- "enum": [
- "Front to rear",
- "Rear to front",
- "Left to right",
- "Right to left",
- "Side to rear",
- "Rear to side",
- "Bottom to top",
- "Top to bottom",
- "Passive",
- "Mixed"
- ]
- }
- }
- },
- "primary_ip": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefIPAddress"
- }
- ],
- "readOnly": true,
- "nullable": true
- },
- "primary_ip4": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefIPAddress"
- }
- ],
- "nullable": true
- },
- "primary_ip6": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefIPAddress"
- }
- ],
- "nullable": true
- },
- "oob_ip": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefIPAddress"
- }
- ],
- "nullable": true
- },
- "cluster": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefCluster"
- }
- ],
- "nullable": true
- },
- "virtual_chassis": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefVirtualChassis"
- }
- ],
- "nullable": true
- },
- "vc_position": {
- "type": "integer",
- "maximum": 255,
- "minimum": 0,
- "nullable": true
- },
- "vc_priority": {
- "type": "integer",
- "maximum": 255,
- "minimum": 0,
- "nullable": true,
- "description": "Virtual chassis master election priority"
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "owner": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwner"
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- },
- "config_template": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefConfigTemplate"
- }
- ],
- "nullable": true
- },
- "config_context": {
- "nullable": true,
- "readOnly": true
- },
- "local_context_data": {
- "nullable": true,
- "description": "Local config context data takes precedence over source contexts in the final rendered config context"
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTag"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- },
- "created": {
- "type": "string",
- "format": "date-time",
- "readOnly": true,
- "nullable": true
- },
- "last_updated": {
- "type": "string",
- "format": "date-time",
- "readOnly": true,
- "nullable": true
- },
- "console_port_count": {
- "type": "integer",
- "readOnly": true
- },
- "console_server_port_count": {
- "type": "integer",
- "readOnly": true
- },
- "power_port_count": {
- "type": "integer",
- "readOnly": true
- },
- "power_outlet_count": {
- "type": "integer",
- "readOnly": true
- },
- "interface_count": {
- "type": "integer",
- "readOnly": true
- },
- "front_port_count": {
- "type": "integer",
- "readOnly": true
- },
- "rear_port_count": {
- "type": "integer",
- "readOnly": true
- },
- "device_bay_count": {
- "type": "integer",
- "readOnly": true
- },
- "module_bay_count": {
- "type": "integer",
- "readOnly": true
- },
- "inventory_item_count": {
- "type": "integer",
- "readOnly": true
- }
- },
- "required": [
- "config_context",
- "console_port_count",
- "console_server_port_count",
- "created",
- "device_bay_count",
- "device_type",
- "display",
- "display_url",
- "front_port_count",
- "id",
- "interface_count",
- "inventory_item_count",
- "last_updated",
- "module_bay_count",
- "parent_device",
- "power_outlet_count",
- "power_port_count",
- "primary_ip",
- "rear_port_count",
- "role",
- "site",
- "url"
- ]
- },
- "DeviceWithConfigContextRequest": {
- "type": "object",
- "description": "Base serializer class for models inheriting from PrimaryModel.",
- "properties": {
- "name": {
- "type": "string",
- "nullable": true,
- "maxLength": 64
- },
- "device_type": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "$ref": "#/components/schemas/BriefDeviceTypeRequest"
- }
- ]
- },
- "role": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "$ref": "#/components/schemas/BriefDeviceRoleRequest"
- }
- ]
- },
- "tenant": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefTenantRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "platform": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefPlatformRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "serial": {
- "type": "string",
- "title": "Serial number",
- "description": "Chassis serial number, assigned by the manufacturer",
- "maxLength": 50
- },
- "asset_tag": {
- "type": "string",
- "nullable": true,
- "description": "A unique tag used to identify this device",
- "maxLength": 50
- },
- "site": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "$ref": "#/components/schemas/BriefSiteRequest"
- }
- ]
- },
- "location": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefLocationRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "rack": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefRackRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "position": {
- "type": "number",
- "format": "double",
- "maximum": 1000,
- "minimum": 0.5,
- "exclusiveMaximum": true,
- "nullable": true,
- "title": "Position (U)"
- },
- "face": {
- "enum": [
- "front",
- "rear",
- ""
- ],
- "type": "string",
- "description": "* `front` - Front\n* `rear` - Rear",
- "x-spec-enum-id": "d2fb9b3f75158b83"
- },
- "latitude": {
- "type": "number",
- "format": "double",
- "maximum": 90.0,
- "minimum": -90.0,
- "nullable": true,
- "description": "GPS coordinate in decimal format (xx.yyyyyy)"
- },
- "longitude": {
- "type": "number",
- "format": "double",
- "maximum": 180.0,
- "minimum": -180.0,
- "nullable": true,
- "description": "GPS coordinate in decimal format (xx.yyyyyy)"
- },
- "status": {
- "enum": [
- "offline",
- "active",
- "planned",
- "staged",
- "failed",
- "inventory",
- "decommissioning"
- ],
- "type": "string",
- "description": "* `offline` - Offline\n* `active` - Active\n* `planned` - Planned\n* `staged` - Staged\n* `failed` - Failed\n* `inventory` - Inventory\n* `decommissioning` - Decommissioning",
- "x-spec-enum-id": "65feb4244cc9110c"
- },
- "airflow": {
- "enum": [
- "front-to-rear",
- "rear-to-front",
- "left-to-right",
- "right-to-left",
- "side-to-rear",
- "rear-to-side",
- "bottom-to-top",
- "top-to-bottom",
- "passive",
- "mixed",
- ""
- ],
- "type": "string",
- "description": "* `front-to-rear` - Front to rear\n* `rear-to-front` - Rear to front\n* `left-to-right` - Left to right\n* `right-to-left` - Right to left\n* `side-to-rear` - Side to rear\n* `rear-to-side` - Rear to side\n* `bottom-to-top` - Bottom to top\n* `top-to-bottom` - Top to bottom\n* `passive` - Passive\n* `mixed` - Mixed",
- "x-spec-enum-id": "11cb3d363b41ba9e"
- },
- "primary_ip4": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefIPAddressRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "primary_ip6": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefIPAddressRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "oob_ip": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefIPAddressRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "cluster": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefClusterRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "virtual_chassis": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefVirtualChassisRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "vc_position": {
- "type": "integer",
- "maximum": 255,
- "minimum": 0,
- "nullable": true
- },
- "vc_priority": {
- "type": "integer",
- "maximum": 255,
- "minimum": 0,
- "nullable": true,
- "description": "Virtual chassis master election priority"
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "owner": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwnerRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- },
- "config_template": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefConfigTemplateRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "local_context_data": {
- "nullable": true,
- "description": "Local config context data takes precedence over source contexts in the final rendered config context"
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTagRequest"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- }
- },
- "required": [
- "device_type",
- "role",
- "site"
- ]
- },
"EventRule": {
"type": "object",
"description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
@@ -267732,7 +272462,7 @@
},
"Interface": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"id": {
"type": "integer",
@@ -267786,6 +272516,7 @@
"virtual",
"bridge",
"lag",
+ "channel",
"100base-fx",
"100base-lfx",
"100base-tx",
@@ -268001,8 +272732,8 @@
"other"
],
"type": "string",
- "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `channel` - Channel\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
+ "x-spec-enum-id": "ab7c1626812ec9d4"
},
"label": {
"type": "string",
@@ -268010,6 +272741,7 @@
"Virtual",
"Bridge",
"Link Aggregation Group (LAG)",
+ "Channel",
"100BASE-FX (10/100ME)",
"100BASE-LFX (10/100ME)",
"100BASE-TX (10/100ME)",
@@ -268227,6 +272959,20 @@
}
}
},
+ "channels": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The number of channels into which this interface is channelized"
+ },
+ "channel_id": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The channel on the parent interface to which this subinterface is bound"
+ },
"enabled": {
"type": "boolean"
},
@@ -268269,7 +273015,6 @@
},
"mac_address": {
"type": "string",
- "readOnly": true,
"nullable": true
},
"primary_mac_address": {
@@ -269056,7 +273801,6 @@
"last_updated",
"link_peers",
"link_peers_type",
- "mac_address",
"mac_addresses",
"name",
"type",
@@ -269066,7 +273810,7 @@
},
"InterfaceRequest": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"device": {
"oneOf": [
@@ -269115,6 +273859,7 @@
"virtual",
"bridge",
"lag",
+ "channel",
"100base-fx",
"100base-lfx",
"100base-tx",
@@ -269330,8 +274075,22 @@
"other"
],
"type": "string",
- "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `channel` - Channel\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
+ "x-spec-enum-id": "ab7c1626812ec9d4"
+ },
+ "channels": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The number of channels into which this interface is channelized"
+ },
+ "channel_id": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The channel on the parent interface to which this subinterface is bound"
},
"enabled": {
"type": "boolean"
@@ -269366,6 +274125,11 @@
"minimum": 1,
"nullable": true
},
+ "mac_address": {
+ "type": "string",
+ "nullable": true,
+ "minLength": 1
+ },
"primary_mac_address": {
"oneOf": [
{
@@ -269862,6 +274626,7 @@
"virtual",
"bridge",
"lag",
+ "channel",
"100base-fx",
"100base-lfx",
"100base-tx",
@@ -270077,8 +274842,8 @@
"other"
],
"type": "string",
- "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `channel` - Channel\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
+ "x-spec-enum-id": "ab7c1626812ec9d4"
},
"label": {
"type": "string",
@@ -270086,6 +274851,7 @@
"Virtual",
"Bridge",
"Link Aggregation Group (LAG)",
+ "Channel",
"100BASE-FX (10/100ME)",
"100BASE-LFX (10/100ME)",
"100BASE-TX (10/100ME)",
@@ -270303,6 +275069,20 @@
}
}
},
+ "channels": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The number of channels into which this interface is channelized"
+ },
+ "channel_id": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The channel on the parent interface to which this subinterface is bound"
+ },
"enabled": {
"type": "boolean"
},
@@ -270314,6 +275094,14 @@
"type": "string",
"maxLength": 200
},
+ "parent": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/NestedInterfaceTemplate"
+ }
+ ],
+ "nullable": true
+ },
"bridge": {
"allOf": [
{
@@ -270481,6 +275269,7 @@
"virtual",
"bridge",
"lag",
+ "channel",
"100base-fx",
"100base-lfx",
"100base-tx",
@@ -270696,8 +275485,22 @@
"other"
],
"type": "string",
- "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `channel` - Channel\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
+ "x-spec-enum-id": "ab7c1626812ec9d4"
+ },
+ "channels": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The number of channels into which this interface is channelized"
+ },
+ "channel_id": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The channel on the parent interface to which this subinterface is bound"
},
"enabled": {
"type": "boolean"
@@ -270710,6 +275513,14 @@
"type": "string",
"maxLength": 200
},
+ "parent": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/NestedInterfaceTemplateRequest"
+ }
+ ],
+ "nullable": true
+ },
"bridge": {
"allOf": [
{
@@ -271516,6 +276327,11 @@
"format": "date-time",
"nullable": true
},
+ "execution_time": {
+ "type": "string",
+ "readOnly": true,
+ "nullable": true
+ },
"user": {
"allOf": [
{
@@ -271574,6 +276390,7 @@
"display",
"display_url",
"error",
+ "execution_time",
"id",
"job_id",
"name",
@@ -272448,6 +277265,10 @@
"readOnly": true,
"nullable": true
},
+ "is_primary": {
+ "type": "boolean",
+ "readOnly": true
+ },
"description": {
"type": "string",
"maxLength": 200
@@ -272492,6 +277313,7 @@
"display",
"display_url",
"id",
+ "is_primary",
"last_updated",
"mac_address",
"url"
@@ -272819,6 +277641,10 @@
"format": "date-time",
"readOnly": true,
"nullable": true
+ },
+ "is_bay_compatible": {
+ "type": "boolean",
+ "readOnly": true
}
},
"required": [
@@ -272827,6 +277653,7 @@
"display",
"display_url",
"id",
+ "is_bay_compatible",
"last_updated",
"module_bay",
"module_type",
@@ -272887,6 +277714,12 @@
"type": "string",
"maxLength": 200
},
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayType"
+ }
+ },
"installed_module": {
"allOf": [
{
@@ -272929,6 +277762,10 @@
"type": "boolean",
"readOnly": true,
"title": " occupied"
+ },
+ "is_module_compatible": {
+ "type": "boolean",
+ "readOnly": true
}
},
"required": [
@@ -272938,6 +277775,7 @@
"display",
"display_url",
"id",
+ "is_module_compatible",
"last_updated",
"name",
"url"
@@ -272995,6 +277833,12 @@
"type": "string",
"maxLength": 200
},
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
+ },
"installed_module": {
"oneOf": [
{
@@ -273098,6 +277942,12 @@
"type": "string",
"maxLength": 200
},
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayType"
+ }
+ },
"created": {
"type": "string",
"format": "date-time",
@@ -273178,12 +278028,202 @@
"description": {
"type": "string",
"maxLength": 200
+ },
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
}
},
"required": [
"name"
]
},
+ "ModuleBayType": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "id": {
+ "type": "integer",
+ "readOnly": true
+ },
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "readOnly": true
+ },
+ "display_url": {
+ "type": "string",
+ "format": "uri",
+ "readOnly": true
+ },
+ "display": {
+ "type": "string",
+ "readOnly": true
+ },
+ "name": {
+ "type": "string",
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "manufacturer": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefManufacturer"
+ }
+ ],
+ "nullable": true
+ },
+ "color": {
+ "oneOf": [
+ {
+ "type": "string",
+ "pattern": "^[0-9a-f]{6}$",
+ "maxLength": 6
+ },
+ {
+ "type": "string",
+ "maxLength": 0
+ }
+ ]
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwner"
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTag"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "readOnly": true,
+ "nullable": true
+ },
+ "last_updated": {
+ "type": "string",
+ "format": "date-time",
+ "readOnly": true,
+ "nullable": true
+ }
+ },
+ "required": [
+ "created",
+ "display",
+ "display_url",
+ "id",
+ "last_updated",
+ "name",
+ "slug",
+ "url"
+ ]
+ },
+ "ModuleBayTypeRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "manufacturer": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefManufacturerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "color": {
+ "oneOf": [
+ {
+ "type": "string",
+ "pattern": "^[0-9a-f]{6}$",
+ "maxLength": 6
+ },
+ {
+ "type": "string",
+ "maxLength": 0
+ }
+ ]
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "name",
+ "slug"
+ ]
+ },
"ModuleRequest": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
@@ -273398,6 +278438,12 @@
},
"nullable": true
},
+ "end_of_life": {
+ "type": "string",
+ "format": "date",
+ "nullable": true,
+ "description": "The date after which this module type is no longer supported by the manufacturer"
+ },
"description": {
"type": "string",
"maxLength": 200
@@ -273405,6 +278451,12 @@
"attributes": {
"nullable": true
},
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayType"
+ }
+ },
"owner": {
"allOf": [
{
@@ -273701,6 +278753,12 @@
"x-spec-enum-id": "2235ce3f404afbc0",
"nullable": true
},
+ "end_of_life": {
+ "type": "string",
+ "format": "date",
+ "nullable": true,
+ "description": "The date after which this module type is no longer supported by the manufacturer"
+ },
"description": {
"type": "string",
"maxLength": 200
@@ -273708,6 +278766,12 @@
"attributes": {
"nullable": true
},
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
+ },
"owner": {
"oneOf": [
{
@@ -276635,6 +281699,37 @@
}
}
},
+ "PaginatedDeviceList": {
+ "type": "object",
+ "required": [
+ "count",
+ "results"
+ ],
+ "properties": {
+ "count": {
+ "type": "integer",
+ "example": 123
+ },
+ "next": {
+ "type": "string",
+ "nullable": true,
+ "format": "uri",
+ "example": "http://api.example.org/accounts/?offset=400&limit=100"
+ },
+ "previous": {
+ "type": "string",
+ "nullable": true,
+ "format": "uri",
+ "example": "http://api.example.org/accounts/?offset=200&limit=100"
+ },
+ "results": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/Device"
+ }
+ }
+ }
+ },
"PaginatedDeviceRoleList": {
"type": "object",
"required": [
@@ -276697,37 +281792,6 @@
}
}
},
- "PaginatedDeviceWithConfigContextList": {
- "type": "object",
- "required": [
- "count",
- "results"
- ],
- "properties": {
- "count": {
- "type": "integer",
- "example": 123
- },
- "next": {
- "type": "string",
- "nullable": true,
- "format": "uri",
- "example": "http://api.example.org/accounts/?offset=400&limit=100"
- },
- "previous": {
- "type": "string",
- "nullable": true,
- "format": "uri",
- "example": "http://api.example.org/accounts/?offset=200&limit=100"
- },
- "results": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/DeviceWithConfigContext"
- }
- }
- }
- },
"PaginatedEventRuleList": {
"type": "object",
"required": [
@@ -277627,6 +282691,37 @@
}
}
},
+ "PaginatedModuleBayTypeList": {
+ "type": "object",
+ "required": [
+ "count",
+ "results"
+ ],
+ "properties": {
+ "count": {
+ "type": "integer",
+ "example": 123
+ },
+ "next": {
+ "type": "string",
+ "nullable": true,
+ "format": "uri",
+ "example": "http://api.example.org/accounts/?offset=400&limit=100"
+ },
+ "previous": {
+ "type": "string",
+ "nullable": true,
+ "format": "uri",
+ "example": "http://api.example.org/accounts/?offset=200&limit=100"
+ },
+ "results": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/ModuleBayType"
+ }
+ }
+ }
+ },
"PaginatedModuleList": {
"type": "object",
"required": [
@@ -279549,6 +284644,37 @@
}
}
},
+ "PaginatedVirtualMachineList": {
+ "type": "object",
+ "required": [
+ "count",
+ "results"
+ ],
+ "properties": {
+ "count": {
+ "type": "integer",
+ "example": 123
+ },
+ "next": {
+ "type": "string",
+ "nullable": true,
+ "format": "uri",
+ "example": "http://api.example.org/accounts/?offset=400&limit=100"
+ },
+ "previous": {
+ "type": "string",
+ "nullable": true,
+ "format": "uri",
+ "example": "http://api.example.org/accounts/?offset=200&limit=100"
+ },
+ "results": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/VirtualMachine"
+ }
+ }
+ }
+ },
"PaginatedVirtualMachineTypeList": {
"type": "object",
"required": [
@@ -279580,37 +284706,6 @@
}
}
},
- "PaginatedVirtualMachineWithConfigContextList": {
- "type": "object",
- "required": [
- "count",
- "results"
- ],
- "properties": {
- "count": {
- "type": "integer",
- "example": 123
- },
- "next": {
- "type": "string",
- "nullable": true,
- "format": "uri",
- "example": "http://api.example.org/accounts/?offset=400&limit=100"
- },
- "previous": {
- "type": "string",
- "nullable": true,
- "format": "uri",
- "example": "http://api.example.org/accounts/?offset=200&limit=100"
- },
- "results": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/VirtualMachineWithConfigContext"
- }
- }
- }
- },
"PaginatedWebhookList": {
"type": "object",
"required": [
@@ -282297,8 +287392,8 @@
"multiobject"
],
"type": "string",
- "description": "* `text` - Text\n* `longtext` - Text (long)\n* `integer` - Integer\n* `decimal` - Decimal\n* `boolean` - Boolean (true/false)\n* `date` - Date\n* `datetime` - Date & time\n* `url` - URL\n* `json` - JSON\n* `select` - Selection\n* `multiselect` - Multiple selection\n* `object` - Object\n* `multiobject` - Multiple objects",
- "x-spec-enum-id": "47c52a3d983e924c"
+ "description": "* `text` - Text\n* `longtext` - Text (long)\n* `integer` - Integer\n* `decimal` - Decimal\n* `boolean` - Boolean\n* `date` - Date\n* `datetime` - Date & time\n* `url` - URL\n* `json` - JSON\n* `select` - Selection\n* `multiselect` - Multiple selection\n* `object` - Object\n* `multiobject` - Multiple objects",
+ "x-spec-enum-id": "6ec6eff91d34cc44"
},
"related_object_type": {
"type": "string",
@@ -282374,6 +287469,10 @@
"type": "boolean",
"description": "Replicate this value when cloning objects"
},
+ "nulls_first": {
+ "type": "boolean",
+ "description": "Sort null values before non-null values when ordering by this field"
+ },
"default": {
"nullable": true,
"description": "Default value for the field (must be a JSON value). Encapsulate strings with double quotes (e.g. \"Foo\")."
@@ -282756,266 +287855,7 @@
"id"
]
},
- "PatchedBulkDeviceRoleRequest": {
- "type": "object",
- "description": "Base serializer class for models inheriting from NestedGroupModel.",
- "properties": {
- "id": {
- "type": "integer"
- },
- "name": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100
- },
- "slug": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100,
- "pattern": "^[-a-zA-Z0-9_]+$"
- },
- "color": {
- "type": "string",
- "minLength": 1,
- "pattern": "^[0-9a-f]{6}$",
- "maxLength": 6
- },
- "vm_role": {
- "type": "boolean",
- "description": "Virtual machines may be assigned to this role"
- },
- "config_template": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefConfigTemplateRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "parent": {
- "allOf": [
- {
- "$ref": "#/components/schemas/NestedDeviceRoleRequest"
- }
- ],
- "nullable": true
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTagRequest"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- },
- "owner": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwnerRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- }
- },
- "required": [
- "id"
- ]
- },
- "PatchedBulkDeviceTypeRequest": {
- "type": "object",
- "description": "Base serializer class for models inheriting from PrimaryModel.",
- "properties": {
- "id": {
- "type": "integer"
- },
- "manufacturer": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "$ref": "#/components/schemas/BriefManufacturerRequest"
- }
- ]
- },
- "default_platform": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefPlatformRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "model": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100
- },
- "slug": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100,
- "pattern": "^[-a-zA-Z0-9_]+$"
- },
- "part_number": {
- "type": "string",
- "description": "Discrete part number (optional)",
- "maxLength": 50
- },
- "u_height": {
- "type": "number",
- "format": "double",
- "maximum": 1000,
- "minimum": 0.0,
- "exclusiveMaximum": true,
- "default": 1.0,
- "title": "Position (U)"
- },
- "exclude_from_utilization": {
- "type": "boolean",
- "description": "Devices of this type are excluded when calculating rack utilization."
- },
- "is_full_depth": {
- "type": "boolean",
- "description": "Device consumes both front and rear rack faces."
- },
- "subdevice_role": {
- "enum": [
- "parent",
- "child",
- "",
- null
- ],
- "type": "string",
- "description": "* `parent` - Parent\n* `child` - Child",
- "x-spec-enum-id": "65a61d5e1deb4a24",
- "nullable": true
- },
- "airflow": {
- "enum": [
- "front-to-rear",
- "rear-to-front",
- "left-to-right",
- "right-to-left",
- "side-to-rear",
- "rear-to-side",
- "bottom-to-top",
- "top-to-bottom",
- "passive",
- "mixed",
- "",
- null
- ],
- "type": "string",
- "description": "* `front-to-rear` - Front to rear\n* `rear-to-front` - Rear to front\n* `left-to-right` - Left to right\n* `right-to-left` - Right to left\n* `side-to-rear` - Side to rear\n* `rear-to-side` - Rear to side\n* `bottom-to-top` - Bottom to top\n* `top-to-bottom` - Top to bottom\n* `passive` - Passive\n* `mixed` - Mixed",
- "x-spec-enum-id": "11cb3d363b41ba9e",
- "nullable": true
- },
- "weight": {
- "type": "number",
- "format": "double",
- "maximum": 1000000,
- "minimum": -1000000,
- "exclusiveMaximum": true,
- "exclusiveMinimum": true,
- "nullable": true
- },
- "weight_unit": {
- "enum": [
- "kg",
- "g",
- "lb",
- "oz",
- "",
- null
- ],
- "type": "string",
- "description": "* `kg` - Kilograms\n* `g` - Grams\n* `lb` - Pounds\n* `oz` - Ounces",
- "x-spec-enum-id": "2235ce3f404afbc0",
- "nullable": true
- },
- "front_image": {
- "type": "string",
- "format": "binary",
- "nullable": true
- },
- "rear_image": {
- "type": "string",
- "format": "binary",
- "nullable": true
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "owner": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwnerRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTagRequest"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- }
- },
- "required": [
- "id"
- ]
- },
- "PatchedBulkDeviceWithConfigContextRequest": {
+ "PatchedBulkDeviceRequest": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
"properties": {
@@ -283351,6 +288191,271 @@
"id"
]
},
+ "PatchedBulkDeviceRoleRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from NestedGroupModel.",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "color": {
+ "type": "string",
+ "minLength": 1,
+ "pattern": "^[0-9a-f]{6}$",
+ "maxLength": 6
+ },
+ "vm_role": {
+ "type": "boolean",
+ "description": "Virtual machines may be assigned to this role"
+ },
+ "config_template": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefConfigTemplateRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "parent": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/NestedDeviceRoleRequest"
+ }
+ ],
+ "nullable": true
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "id"
+ ]
+ },
+ "PatchedBulkDeviceTypeRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "manufacturer": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "$ref": "#/components/schemas/BriefManufacturerRequest"
+ }
+ ]
+ },
+ "default_platform": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefPlatformRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "model": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "part_number": {
+ "type": "string",
+ "description": "Discrete part number (optional)",
+ "maxLength": 50
+ },
+ "u_height": {
+ "type": "number",
+ "format": "double",
+ "maximum": 1000,
+ "minimum": 0.0,
+ "exclusiveMaximum": true,
+ "default": 1.0,
+ "title": "Position (U)"
+ },
+ "exclude_from_utilization": {
+ "type": "boolean",
+ "description": "Devices of this type are excluded when calculating rack utilization."
+ },
+ "is_full_depth": {
+ "type": "boolean",
+ "description": "Device consumes both front and rear rack faces."
+ },
+ "subdevice_role": {
+ "enum": [
+ "parent",
+ "child",
+ "",
+ null
+ ],
+ "type": "string",
+ "description": "* `parent` - Parent\n* `child` - Child",
+ "x-spec-enum-id": "65a61d5e1deb4a24",
+ "nullable": true
+ },
+ "airflow": {
+ "enum": [
+ "front-to-rear",
+ "rear-to-front",
+ "left-to-right",
+ "right-to-left",
+ "side-to-rear",
+ "rear-to-side",
+ "bottom-to-top",
+ "top-to-bottom",
+ "passive",
+ "mixed",
+ "",
+ null
+ ],
+ "type": "string",
+ "description": "* `front-to-rear` - Front to rear\n* `rear-to-front` - Rear to front\n* `left-to-right` - Left to right\n* `right-to-left` - Right to left\n* `side-to-rear` - Side to rear\n* `rear-to-side` - Rear to side\n* `bottom-to-top` - Bottom to top\n* `top-to-bottom` - Top to bottom\n* `passive` - Passive\n* `mixed` - Mixed",
+ "x-spec-enum-id": "11cb3d363b41ba9e",
+ "nullable": true
+ },
+ "weight": {
+ "type": "number",
+ "format": "double",
+ "maximum": 1000000,
+ "minimum": -1000000,
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "nullable": true
+ },
+ "weight_unit": {
+ "enum": [
+ "kg",
+ "g",
+ "lb",
+ "oz",
+ "",
+ null
+ ],
+ "type": "string",
+ "description": "* `kg` - Kilograms\n* `g` - Grams\n* `lb` - Pounds\n* `oz` - Ounces",
+ "x-spec-enum-id": "2235ce3f404afbc0",
+ "nullable": true
+ },
+ "end_of_life": {
+ "type": "string",
+ "format": "date",
+ "nullable": true,
+ "description": "The date after which this device type is no longer supported by the manufacturer"
+ },
+ "front_image": {
+ "type": "string",
+ "format": "binary",
+ "nullable": true
+ },
+ "rear_image": {
+ "type": "string",
+ "format": "binary",
+ "nullable": true
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "id"
+ ]
+ },
"PatchedBulkEventRuleRequest": {
"type": "object",
"description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
@@ -284768,7 +289873,7 @@
},
"PatchedBulkInterfaceRequest": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"id": {
"type": "integer"
@@ -284820,6 +289925,7 @@
"virtual",
"bridge",
"lag",
+ "channel",
"100base-fx",
"100base-lfx",
"100base-tx",
@@ -285035,8 +290141,22 @@
"other"
],
"type": "string",
- "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `channel` - Channel\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
+ "x-spec-enum-id": "ab7c1626812ec9d4"
+ },
+ "channels": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The number of channels into which this interface is channelized"
+ },
+ "channel_id": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The channel on the parent interface to which this subinterface is bound"
},
"enabled": {
"type": "boolean"
@@ -285071,6 +290191,11 @@
"minimum": 1,
"nullable": true
},
+ "mac_address": {
+ "type": "string",
+ "nullable": true,
+ "minLength": 1
+ },
"primary_mac_address": {
"oneOf": [
{
@@ -285569,6 +290694,7 @@
"virtual",
"bridge",
"lag",
+ "channel",
"100base-fx",
"100base-lfx",
"100base-tx",
@@ -285784,8 +290910,22 @@
"other"
],
"type": "string",
- "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `channel` - Channel\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
+ "x-spec-enum-id": "ab7c1626812ec9d4"
+ },
+ "channels": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The number of channels into which this interface is channelized"
+ },
+ "channel_id": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The channel on the parent interface to which this subinterface is bound"
},
"enabled": {
"type": "boolean"
@@ -285798,6 +290938,14 @@
"type": "string",
"maxLength": 200
},
+ "parent": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/NestedInterfaceTemplateRequest"
+ }
+ ],
+ "nullable": true
+ },
"bridge": {
"allOf": [
{
@@ -286637,6 +291785,12 @@
"type": "string",
"maxLength": 200
},
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
+ },
"installed_module": {
"oneOf": [
{
@@ -286745,6 +291899,97 @@
"description": {
"type": "string",
"maxLength": 200
+ },
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
+ }
+ },
+ "required": [
+ "id"
+ ]
+ },
+ "PatchedBulkModuleBayTypeRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "manufacturer": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefManufacturerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "color": {
+ "oneOf": [
+ {
+ "type": "string",
+ "pattern": "^[0-9a-f]{6}$",
+ "maxLength": 6
+ },
+ {
+ "type": "string",
+ "maxLength": 0
+ }
+ ]
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
}
},
"required": [
@@ -286990,6 +292235,12 @@
"x-spec-enum-id": "2235ce3f404afbc0",
"nullable": true
},
+ "end_of_life": {
+ "type": "string",
+ "format": "date",
+ "nullable": true,
+ "description": "The date after which this module type is no longer supported by the manufacturer"
+ },
"description": {
"type": "string",
"maxLength": 200
@@ -286997,6 +292248,12 @@
"attributes": {
"nullable": true
},
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
+ },
"owner": {
"oneOf": [
{
@@ -290803,10 +296060,6 @@
"minimum": 0,
"nullable": true,
"description": "ID of the cryptographic pepper used to hash the token (v2 only)"
- },
- "token": {
- "type": "string",
- "minLength": 1
}
},
"required": [
@@ -291451,7 +296704,7 @@
},
"PatchedBulkVMInterfaceRequest": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"id": {
"type": "integer"
@@ -291496,6 +296749,11 @@
"minimum": 1,
"nullable": true
},
+ "mac_address": {
+ "type": "string",
+ "nullable": true,
+ "minLength": 1
+ },
"primary_mac_address": {
"oneOf": [
{
@@ -292209,93 +297467,7 @@
"id"
]
},
- "PatchedBulkVirtualMachineTypeRequest": {
- "type": "object",
- "description": "Base serializer class for models inheriting from PrimaryModel.",
- "properties": {
- "id": {
- "type": "integer"
- },
- "name": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100
- },
- "slug": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100,
- "pattern": "^[-a-zA-Z0-9_]+$"
- },
- "default_platform": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefPlatformRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "default_vcpus": {
- "type": "number",
- "format": "double",
- "maximum": 10000,
- "minimum": 0.01,
- "exclusiveMaximum": true,
- "nullable": true
- },
- "default_memory": {
- "type": "integer",
- "maximum": 2147483647,
- "minimum": 0,
- "nullable": true
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "owner": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwnerRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTagRequest"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- }
- },
- "required": [
- "id"
- ]
- },
- "PatchedBulkVirtualMachineWithConfigContextRequest": {
+ "PatchedBulkVirtualMachineRequest": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
"properties": {
@@ -292558,6 +297730,92 @@
"id"
]
},
+ "PatchedBulkVirtualMachineTypeRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "id": {
+ "type": "integer"
+ },
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "default_platform": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefPlatformRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "default_vcpus": {
+ "type": "number",
+ "format": "double",
+ "maximum": 10000,
+ "minimum": 0.01,
+ "exclusiveMaximum": true,
+ "nullable": true
+ },
+ "default_memory": {
+ "type": "integer",
+ "maximum": 2147483647,
+ "minimum": 0,
+ "nullable": true
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "id"
+ ]
+ },
"PatchedBulkWebhookRequest": {
"type": "object",
"description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
@@ -292601,11 +297859,11 @@
},
"additional_headers": {
"type": "string",
- "description": "User-supplied HTTP headers to be sent with the request in addition to the HTTP content type. Headers should be defined in the format Name: Value. Jinja2 template processing is supported with the same context as the request body (below)."
+ "description": "User-supplied HTTP headers to be sent with the request in addition to the HTTP content type. Headers should be defined in the format Name: Value. Jinja2 template processing is supported with the same context as the request body (below). When interpolating untrusted data (such as object attributes) into a header value, apply the header_safe filter to guard against HTTP header injection, e.g. X-Object: {{ data.name | header_safe }}."
},
"body_template": {
"type": "string",
- "description": "Jinja2 template for a custom request body. If blank, a JSON object representing the change will be included. Available context data includes: event, model, timestamp, username, request_id, and data."
+ "description": "Jinja2 template for a custom request body. If blank, a JSON object representing the change will be included. Available context data includes: event, model, timestamp, request, and data."
},
"secret": {
"type": "string",
@@ -292622,6 +297880,13 @@
"description": "The specific CA certificate file to use for SSL verification. Leave blank to use the system defaults.",
"maxLength": 4096
},
+ "timeout": {
+ "type": "integer",
+ "maximum": 3600,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The maximum time (in seconds) to wait for a response before failing the request. Leave blank to use the system default (WEBHOOK_DEFAULT_TIMEOUT)."
+ },
"custom_fields": {
"type": "object",
"additionalProperties": {}
@@ -294545,6 +299810,12 @@
"type": "string",
"maxLength": 200
},
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
+ },
"installed_module": {
"oneOf": [
{
@@ -294647,6 +299918,91 @@
"description": {
"type": "string",
"maxLength": 200
+ },
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
+ }
+ }
+ },
+ "PatchedModuleBayTypeRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "manufacturer": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefManufacturerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "color": {
+ "oneOf": [
+ {
+ "type": "string",
+ "pattern": "^[0-9a-f]{6}$",
+ "maxLength": 6
+ },
+ {
+ "type": "string",
+ "maxLength": 0
+ }
+ ]
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
}
}
},
@@ -295740,10 +301096,6 @@
"minimum": 0,
"nullable": true,
"description": "ID of the cryptographic pepper used to hash the token (v2 only)"
- },
- "token": {
- "type": "string",
- "minLength": 1
}
}
},
@@ -296328,11 +301680,11 @@
},
"additional_headers": {
"type": "string",
- "description": "User-supplied HTTP headers to be sent with the request in addition to the HTTP content type. Headers should be defined in the format Name: Value. Jinja2 template processing is supported with the same context as the request body (below)."
+ "description": "User-supplied HTTP headers to be sent with the request in addition to the HTTP content type. Headers should be defined in the format Name: Value. Jinja2 template processing is supported with the same context as the request body (below). When interpolating untrusted data (such as object attributes) into a header value, apply the header_safe filter to guard against HTTP header injection, e.g. X-Object: {{ data.name | header_safe }}."
},
"body_template": {
"type": "string",
- "description": "Jinja2 template for a custom request body. If blank, a JSON object representing the change will be included. Available context data includes: event, model, timestamp, username, request_id, and data."
+ "description": "Jinja2 template for a custom request body. If blank, a JSON object representing the change will be included. Available context data includes: event, model, timestamp, request, and data."
},
"secret": {
"type": "string",
@@ -296349,6 +301701,13 @@
"description": "The specific CA certificate file to use for SSL verification. Leave blank to use the system defaults.",
"maxLength": 4096
},
+ "timeout": {
+ "type": "integer",
+ "maximum": 3600,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The maximum time (in seconds) to wait for a response before failing the request. Leave blank to use the system default (WEBHOOK_DEFAULT_TIMEOUT)."
+ },
"custom_fields": {
"type": "object",
"additionalProperties": {}
@@ -297596,8 +302955,8 @@
"multiobject"
],
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c",
- "description": "The type of data this custom field holds\n\n* `text` - Text\n* `longtext` - Text (long)\n* `integer` - Integer\n* `decimal` - Decimal\n* `boolean` - Boolean (true/false)\n* `date` - Date\n* `datetime` - Date & time\n* `url` - URL\n* `json` - JSON\n* `select` - Selection\n* `multiselect` - Multiple selection\n* `object` - Object\n* `multiobject` - Multiple objects"
+ "x-spec-enum-id": "6ec6eff91d34cc44",
+ "description": "The type of data this custom field holds\n\n* `text` - Text\n* `longtext` - Text (long)\n* `integer` - Integer\n* `decimal` - Decimal\n* `boolean` - Boolean\n* `date` - Date\n* `datetime` - Date & time\n* `url` - URL\n* `json` - JSON\n* `select` - Selection\n* `multiselect` - Multiple selection\n* `object` - Object\n* `multiobject` - Multiple objects"
},
"related_object_type": {
"type": "string",
@@ -297673,6 +303032,10 @@
"type": "boolean",
"description": "Replicate this value when cloning objects"
},
+ "nulls_first": {
+ "type": "boolean",
+ "description": "Sort null values before non-null values when ordering by this field"
+ },
"default": {
"nullable": true,
"description": "Default value for the field (must be a JSON value). Encapsulate strings with double quotes (e.g. \"Foo\")."
@@ -297832,251 +303195,7 @@
}
}
},
- "PatchedWritableDeviceRoleRequest": {
- "type": "object",
- "description": "Base serializer class for models inheriting from NestedGroupModel.",
- "properties": {
- "name": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100
- },
- "slug": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100,
- "pattern": "^[-a-zA-Z0-9_]+$"
- },
- "color": {
- "type": "string",
- "minLength": 1,
- "pattern": "^[0-9a-f]{6}$",
- "maxLength": 6
- },
- "vm_role": {
- "type": "boolean",
- "description": "Virtual machines may be assigned to this role"
- },
- "config_template": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefConfigTemplateRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "parent": {
- "type": "integer",
- "nullable": true
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTagRequest"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- },
- "owner": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwnerRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- }
- }
- },
- "PatchedWritableDeviceTypeRequest": {
- "type": "object",
- "description": "Base serializer class for models inheriting from PrimaryModel.",
- "properties": {
- "manufacturer": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "$ref": "#/components/schemas/BriefManufacturerRequest"
- }
- ]
- },
- "default_platform": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefPlatformRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "model": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100
- },
- "slug": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100,
- "pattern": "^[-a-zA-Z0-9_]+$"
- },
- "part_number": {
- "type": "string",
- "description": "Discrete part number (optional)",
- "maxLength": 50
- },
- "u_height": {
- "type": "number",
- "format": "double",
- "maximum": 1000,
- "minimum": 0.0,
- "exclusiveMaximum": true,
- "default": 1.0,
- "title": "Position (U)"
- },
- "exclude_from_utilization": {
- "type": "boolean",
- "description": "Devices of this type are excluded when calculating rack utilization."
- },
- "is_full_depth": {
- "type": "boolean",
- "description": "Device consumes both front and rear rack faces."
- },
- "subdevice_role": {
- "enum": [
- "parent",
- "child",
- "",
- null
- ],
- "type": "string",
- "x-spec-enum-id": "65a61d5e1deb4a24",
- "nullable": true,
- "title": "Parent/child status",
- "description": "Parent devices house child devices in device bays. Leave blank if this device type is neither a parent nor a child.\n\n* `parent` - Parent\n* `child` - Child"
- },
- "airflow": {
- "enum": [
- "front-to-rear",
- "rear-to-front",
- "left-to-right",
- "right-to-left",
- "side-to-rear",
- "rear-to-side",
- "bottom-to-top",
- "top-to-bottom",
- "passive",
- "mixed",
- "",
- null
- ],
- "type": "string",
- "description": "* `front-to-rear` - Front to rear\n* `rear-to-front` - Rear to front\n* `left-to-right` - Left to right\n* `right-to-left` - Right to left\n* `side-to-rear` - Side to rear\n* `rear-to-side` - Rear to side\n* `bottom-to-top` - Bottom to top\n* `top-to-bottom` - Top to bottom\n* `passive` - Passive\n* `mixed` - Mixed",
- "x-spec-enum-id": "11cb3d363b41ba9e",
- "nullable": true
- },
- "weight": {
- "type": "number",
- "format": "double",
- "maximum": 1000000,
- "minimum": -1000000,
- "exclusiveMaximum": true,
- "exclusiveMinimum": true,
- "nullable": true
- },
- "weight_unit": {
- "enum": [
- "kg",
- "g",
- "lb",
- "oz",
- "",
- null
- ],
- "type": "string",
- "description": "* `kg` - Kilograms\n* `g` - Grams\n* `lb` - Pounds\n* `oz` - Ounces",
- "x-spec-enum-id": "2235ce3f404afbc0",
- "nullable": true
- },
- "front_image": {
- "type": "string",
- "format": "binary",
- "nullable": true
- },
- "rear_image": {
- "type": "string",
- "format": "binary",
- "nullable": true
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "owner": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwnerRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTagRequest"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- }
- }
- },
- "PatchedWritableDeviceWithConfigContextRequest": {
+ "PatchedWritableDeviceRequest": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
"properties": {
@@ -298411,6 +303530,256 @@
}
}
},
+ "PatchedWritableDeviceRoleRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from NestedGroupModel.",
+ "properties": {
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "color": {
+ "type": "string",
+ "minLength": 1,
+ "pattern": "^[0-9a-f]{6}$",
+ "maxLength": 6
+ },
+ "vm_role": {
+ "type": "boolean",
+ "description": "Virtual machines may be assigned to this role"
+ },
+ "config_template": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefConfigTemplateRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "parent": {
+ "type": "integer",
+ "nullable": true
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ }
+ }
+ },
+ "PatchedWritableDeviceTypeRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "manufacturer": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "$ref": "#/components/schemas/BriefManufacturerRequest"
+ }
+ ]
+ },
+ "default_platform": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefPlatformRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "model": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "part_number": {
+ "type": "string",
+ "description": "Discrete part number (optional)",
+ "maxLength": 50
+ },
+ "u_height": {
+ "type": "number",
+ "format": "double",
+ "maximum": 1000,
+ "minimum": 0.0,
+ "exclusiveMaximum": true,
+ "default": 1.0,
+ "title": "Position (U)"
+ },
+ "exclude_from_utilization": {
+ "type": "boolean",
+ "description": "Devices of this type are excluded when calculating rack utilization."
+ },
+ "is_full_depth": {
+ "type": "boolean",
+ "description": "Device consumes both front and rear rack faces."
+ },
+ "subdevice_role": {
+ "enum": [
+ "parent",
+ "child",
+ "",
+ null
+ ],
+ "type": "string",
+ "x-spec-enum-id": "65a61d5e1deb4a24",
+ "nullable": true,
+ "title": "Parent/child status",
+ "description": "Parent devices house child devices in device bays. Leave blank if this device type is neither a parent nor a child.\n\n* `parent` - Parent\n* `child` - Child"
+ },
+ "airflow": {
+ "enum": [
+ "front-to-rear",
+ "rear-to-front",
+ "left-to-right",
+ "right-to-left",
+ "side-to-rear",
+ "rear-to-side",
+ "bottom-to-top",
+ "top-to-bottom",
+ "passive",
+ "mixed",
+ "",
+ null
+ ],
+ "type": "string",
+ "description": "* `front-to-rear` - Front to rear\n* `rear-to-front` - Rear to front\n* `left-to-right` - Left to right\n* `right-to-left` - Right to left\n* `side-to-rear` - Side to rear\n* `rear-to-side` - Rear to side\n* `bottom-to-top` - Bottom to top\n* `top-to-bottom` - Top to bottom\n* `passive` - Passive\n* `mixed` - Mixed",
+ "x-spec-enum-id": "11cb3d363b41ba9e",
+ "nullable": true
+ },
+ "weight": {
+ "type": "number",
+ "format": "double",
+ "maximum": 1000000,
+ "minimum": -1000000,
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "nullable": true
+ },
+ "weight_unit": {
+ "enum": [
+ "kg",
+ "g",
+ "lb",
+ "oz",
+ "",
+ null
+ ],
+ "type": "string",
+ "description": "* `kg` - Kilograms\n* `g` - Grams\n* `lb` - Pounds\n* `oz` - Ounces",
+ "x-spec-enum-id": "2235ce3f404afbc0",
+ "nullable": true
+ },
+ "end_of_life": {
+ "type": "string",
+ "format": "date",
+ "nullable": true,
+ "description": "The date after which this device type is no longer supported by the manufacturer"
+ },
+ "front_image": {
+ "type": "string",
+ "format": "binary",
+ "nullable": true
+ },
+ "rear_image": {
+ "type": "string",
+ "format": "binary",
+ "nullable": true
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ }
+ },
"PatchedWritableEventRuleRequest": {
"type": "object",
"description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
@@ -299526,7 +304895,7 @@
},
"PatchedWritableInterfaceRequest": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"device": {
"oneOf": [
@@ -299575,6 +304944,7 @@
"virtual",
"bridge",
"lag",
+ "channel",
"100base-fx",
"100base-lfx",
"100base-tx",
@@ -299790,8 +305160,22 @@
"other"
],
"type": "string",
- "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `channel` - Channel\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
+ "x-spec-enum-id": "ab7c1626812ec9d4"
+ },
+ "channels": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The number of channels into which this interface is channelized"
+ },
+ "channel_id": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The channel on the parent interface to which this subinterface is bound"
},
"enabled": {
"type": "boolean"
@@ -299817,6 +305201,11 @@
"minimum": 1,
"nullable": true
},
+ "mac_address": {
+ "type": "string",
+ "nullable": true,
+ "minLength": 1
+ },
"primary_mac_address": {
"oneOf": [
{
@@ -300321,6 +305710,7 @@
"virtual",
"bridge",
"lag",
+ "channel",
"100base-fx",
"100base-lfx",
"100base-tx",
@@ -300536,8 +305926,22 @@
"other"
],
"type": "string",
- "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `channel` - Channel\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
+ "x-spec-enum-id": "ab7c1626812ec9d4"
+ },
+ "channels": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The number of channels into which this interface is channelized"
+ },
+ "channel_id": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The channel on the parent interface to which this subinterface is bound"
},
"enabled": {
"type": "boolean"
@@ -300550,6 +305954,11 @@
"type": "string",
"maxLength": 200
},
+ "parent": {
+ "type": "integer",
+ "nullable": true,
+ "title": "Parent interface"
+ },
"bridge": {
"type": "integer",
"nullable": true,
@@ -301170,6 +306579,12 @@
"x-spec-enum-id": "2235ce3f404afbc0",
"nullable": true
},
+ "end_of_life": {
+ "type": "string",
+ "format": "date",
+ "nullable": true,
+ "description": "The date after which this module type is no longer supported by the manufacturer"
+ },
"description": {
"type": "string",
"maxLength": 200
@@ -301177,6 +306592,12 @@
"attributes": {
"nullable": true
},
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
+ },
"owner": {
"oneOf": [
{
@@ -304069,7 +309490,7 @@
},
"PatchedWritableVMInterfaceRequest": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"virtual_machine": {
"oneOf": [
@@ -304105,6 +309526,11 @@
"minimum": 1,
"nullable": true
},
+ "mac_address": {
+ "type": "string",
+ "nullable": true,
+ "minLength": 1
+ },
"primary_mac_address": {
"oneOf": [
{
@@ -304568,7 +309994,7 @@
}
}
},
- "PatchedWritableVirtualMachineWithConfigContextRequest": {
+ "PatchedWritableVirtualMachineRequest": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
"properties": {
@@ -314476,7 +319902,8 @@
"description": "ID of the cryptographic pepper used to hash the token (v2 only)"
},
"token": {
- "type": "string"
+ "type": "string",
+ "readOnly": true
}
},
"required": [
@@ -314485,6 +319912,7 @@
"display_url",
"id",
"key",
+ "token",
"url",
"user"
]
@@ -314562,7 +319990,8 @@
"maxLength": 200
},
"token": {
- "type": "string"
+ "type": "string",
+ "readOnly": true
}
},
"required": [
@@ -314572,6 +320001,7 @@
"id",
"key",
"last_used",
+ "token",
"url",
"user"
]
@@ -314617,10 +320047,6 @@
"type": "string",
"writeOnly": true,
"minLength": 1
- },
- "token": {
- "type": "string",
- "minLength": 1
}
},
"required": [
@@ -314681,10 +320107,6 @@
"minimum": 0,
"nullable": true,
"description": "ID of the cryptographic pepper used to hash the token (v2 only)"
- },
- "token": {
- "type": "string",
- "minLength": 1
}
},
"required": [
@@ -316168,7 +321590,7 @@
},
"VMInterface": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"id": {
"type": "integer",
@@ -316222,7 +321644,6 @@
},
"mac_address": {
"type": "string",
- "readOnly": true,
"nullable": true
},
"primary_mac_address": {
@@ -316366,7 +321787,6 @@
"id",
"l2vpn_termination",
"last_updated",
- "mac_address",
"mac_addresses",
"name",
"url",
@@ -316375,7 +321795,7 @@
},
"VMInterfaceRequest": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"virtual_machine": {
"oneOf": [
@@ -316417,6 +321837,11 @@
"minimum": 1,
"nullable": true
},
+ "mac_address": {
+ "type": "string",
+ "nullable": true,
+ "minLength": 1
+ },
"primary_mac_address": {
"oneOf": [
{
@@ -317881,198 +323306,7 @@
"virtual_machine"
]
},
- "VirtualMachineType": {
- "type": "object",
- "description": "Base serializer class for models inheriting from PrimaryModel.",
- "properties": {
- "id": {
- "type": "integer",
- "readOnly": true
- },
- "url": {
- "type": "string",
- "format": "uri",
- "readOnly": true
- },
- "display_url": {
- "type": "string",
- "format": "uri",
- "readOnly": true
- },
- "display": {
- "type": "string",
- "readOnly": true
- },
- "name": {
- "type": "string",
- "maxLength": 100
- },
- "slug": {
- "type": "string",
- "maxLength": 100,
- "pattern": "^[-a-zA-Z0-9_]+$"
- },
- "default_platform": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefPlatform"
- }
- ],
- "nullable": true
- },
- "default_vcpus": {
- "type": "number",
- "format": "double",
- "maximum": 10000,
- "minimum": 0.01,
- "exclusiveMaximum": true,
- "nullable": true
- },
- "default_memory": {
- "type": "integer",
- "maximum": 2147483647,
- "minimum": 0,
- "nullable": true
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "owner": {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwner"
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTag"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- },
- "created": {
- "type": "string",
- "format": "date-time",
- "readOnly": true,
- "nullable": true
- },
- "last_updated": {
- "type": "string",
- "format": "date-time",
- "readOnly": true,
- "nullable": true
- },
- "virtual_machine_count": {
- "type": "integer",
- "readOnly": true
- }
- },
- "required": [
- "created",
- "display",
- "display_url",
- "id",
- "last_updated",
- "name",
- "slug",
- "url",
- "virtual_machine_count"
- ]
- },
- "VirtualMachineTypeRequest": {
- "type": "object",
- "description": "Base serializer class for models inheriting from PrimaryModel.",
- "properties": {
- "name": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100
- },
- "slug": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100,
- "pattern": "^[-a-zA-Z0-9_]+$"
- },
- "default_platform": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefPlatformRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "default_vcpus": {
- "type": "number",
- "format": "double",
- "maximum": 10000,
- "minimum": 0.01,
- "exclusiveMaximum": true,
- "nullable": true
- },
- "default_memory": {
- "type": "integer",
- "maximum": 2147483647,
- "minimum": 0,
- "nullable": true
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "owner": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwnerRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTagRequest"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- }
- },
- "required": [
- "name",
- "slug"
- ]
- },
- "VirtualMachineWithConfigContext": {
+ "VirtualMachine": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
"properties": {
@@ -318334,7 +323568,7 @@
"virtual_disk_count"
]
},
- "VirtualMachineWithConfigContextRequest": {
+ "VirtualMachineRequest": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
"properties": {
@@ -318594,6 +323828,197 @@
"name"
]
},
+ "VirtualMachineType": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "id": {
+ "type": "integer",
+ "readOnly": true
+ },
+ "url": {
+ "type": "string",
+ "format": "uri",
+ "readOnly": true
+ },
+ "display_url": {
+ "type": "string",
+ "format": "uri",
+ "readOnly": true
+ },
+ "display": {
+ "type": "string",
+ "readOnly": true
+ },
+ "name": {
+ "type": "string",
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "default_platform": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefPlatform"
+ }
+ ],
+ "nullable": true
+ },
+ "default_vcpus": {
+ "type": "number",
+ "format": "double",
+ "maximum": 10000,
+ "minimum": 0.01,
+ "exclusiveMaximum": true,
+ "nullable": true
+ },
+ "default_memory": {
+ "type": "integer",
+ "maximum": 2147483647,
+ "minimum": 0,
+ "nullable": true
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwner"
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTag"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "created": {
+ "type": "string",
+ "format": "date-time",
+ "readOnly": true,
+ "nullable": true
+ },
+ "last_updated": {
+ "type": "string",
+ "format": "date-time",
+ "readOnly": true,
+ "nullable": true
+ },
+ "virtual_machine_count": {
+ "type": "integer",
+ "readOnly": true
+ }
+ },
+ "required": [
+ "created",
+ "display",
+ "display_url",
+ "id",
+ "last_updated",
+ "name",
+ "slug",
+ "url",
+ "virtual_machine_count"
+ ]
+ },
+ "VirtualMachineTypeRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "default_platform": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefPlatformRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "default_vcpus": {
+ "type": "number",
+ "format": "double",
+ "maximum": 10000,
+ "minimum": 0.01,
+ "exclusiveMaximum": true,
+ "nullable": true
+ },
+ "default_memory": {
+ "type": "integer",
+ "maximum": 2147483647,
+ "minimum": 0,
+ "nullable": true
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "name",
+ "slug"
+ ]
+ },
"Webhook": {
"type": "object",
"description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
@@ -318649,11 +324074,11 @@
},
"additional_headers": {
"type": "string",
- "description": "User-supplied HTTP headers to be sent with the request in addition to the HTTP content type. Headers should be defined in the format Name: Value. Jinja2 template processing is supported with the same context as the request body (below)."
+ "description": "User-supplied HTTP headers to be sent with the request in addition to the HTTP content type. Headers should be defined in the format Name: Value. Jinja2 template processing is supported with the same context as the request body (below). When interpolating untrusted data (such as object attributes) into a header value, apply the header_safe filter to guard against HTTP header injection, e.g. X-Object: {{ data.name | header_safe }}."
},
"body_template": {
"type": "string",
- "description": "Jinja2 template for a custom request body. If blank, a JSON object representing the change will be included. Available context data includes: event, model, timestamp, username, request_id, and data."
+ "description": "Jinja2 template for a custom request body. If blank, a JSON object representing the change will be included. Available context data includes: event, model, timestamp, request, and data."
},
"secret": {
"type": "string",
@@ -318670,6 +324095,13 @@
"description": "The specific CA certificate file to use for SSL verification. Leave blank to use the system defaults.",
"maxLength": 4096
},
+ "timeout": {
+ "type": "integer",
+ "maximum": 3600,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The maximum time (in seconds) to wait for a response before failing the request. Leave blank to use the system default (WEBHOOK_DEFAULT_TIMEOUT)."
+ },
"custom_fields": {
"type": "object",
"additionalProperties": {}
@@ -318752,11 +324184,11 @@
},
"additional_headers": {
"type": "string",
- "description": "User-supplied HTTP headers to be sent with the request in addition to the HTTP content type. Headers should be defined in the format Name: Value. Jinja2 template processing is supported with the same context as the request body (below)."
+ "description": "User-supplied HTTP headers to be sent with the request in addition to the HTTP content type. Headers should be defined in the format Name: Value. Jinja2 template processing is supported with the same context as the request body (below). When interpolating untrusted data (such as object attributes) into a header value, apply the header_safe filter to guard against HTTP header injection, e.g. X-Object: {{ data.name | header_safe }}."
},
"body_template": {
"type": "string",
- "description": "Jinja2 template for a custom request body. If blank, a JSON object representing the change will be included. Available context data includes: event, model, timestamp, username, request_id, and data."
+ "description": "Jinja2 template for a custom request body. If blank, a JSON object representing the change will be included. Available context data includes: event, model, timestamp, request, and data."
},
"secret": {
"type": "string",
@@ -318773,6 +324205,13 @@
"description": "The specific CA certificate file to use for SSL verification. Leave blank to use the system defaults.",
"maxLength": 4096
},
+ "timeout": {
+ "type": "integer",
+ "maximum": 3600,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The maximum time (in seconds) to wait for a response before failing the request. Leave blank to use the system default (WEBHOOK_DEFAULT_TIMEOUT)."
+ },
"custom_fields": {
"type": "object",
"additionalProperties": {}
@@ -320914,8 +326353,8 @@
"multiobject"
],
"type": "string",
- "x-spec-enum-id": "47c52a3d983e924c",
- "description": "The type of data this custom field holds\n\n* `text` - Text\n* `longtext` - Text (long)\n* `integer` - Integer\n* `decimal` - Decimal\n* `boolean` - Boolean (true/false)\n* `date` - Date\n* `datetime` - Date & time\n* `url` - URL\n* `json` - JSON\n* `select` - Selection\n* `multiselect` - Multiple selection\n* `object` - Object\n* `multiobject` - Multiple objects"
+ "x-spec-enum-id": "6ec6eff91d34cc44",
+ "description": "The type of data this custom field holds\n\n* `text` - Text\n* `longtext` - Text (long)\n* `integer` - Integer\n* `decimal` - Decimal\n* `boolean` - Boolean\n* `date` - Date\n* `datetime` - Date & time\n* `url` - URL\n* `json` - JSON\n* `select` - Selection\n* `multiselect` - Multiple selection\n* `object` - Object\n* `multiobject` - Multiple objects"
},
"related_object_type": {
"type": "string",
@@ -320991,6 +326430,10 @@
"type": "boolean",
"description": "Replicate this value when cloning objects"
},
+ "nulls_first": {
+ "type": "boolean",
+ "description": "Sort null values before non-null values when ordering by this field"
+ },
"default": {
"nullable": true,
"description": "Default value for the field (must be a JSON value). Encapsulate strings with double quotes (e.g. \"Foo\")."
@@ -321159,260 +326602,7 @@
"type"
]
},
- "WritableDeviceRoleRequest": {
- "type": "object",
- "description": "Base serializer class for models inheriting from NestedGroupModel.",
- "properties": {
- "name": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100
- },
- "slug": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100,
- "pattern": "^[-a-zA-Z0-9_]+$"
- },
- "color": {
- "type": "string",
- "minLength": 1,
- "pattern": "^[0-9a-f]{6}$",
- "maxLength": 6
- },
- "vm_role": {
- "type": "boolean",
- "description": "Virtual machines may be assigned to this role"
- },
- "config_template": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefConfigTemplateRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "parent": {
- "type": "integer",
- "nullable": true
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTagRequest"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- },
- "owner": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwnerRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- }
- },
- "required": [
- "name",
- "slug"
- ]
- },
- "WritableDeviceTypeRequest": {
- "type": "object",
- "description": "Base serializer class for models inheriting from PrimaryModel.",
- "properties": {
- "manufacturer": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "$ref": "#/components/schemas/BriefManufacturerRequest"
- }
- ]
- },
- "default_platform": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefPlatformRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "model": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100
- },
- "slug": {
- "type": "string",
- "minLength": 1,
- "maxLength": 100,
- "pattern": "^[-a-zA-Z0-9_]+$"
- },
- "part_number": {
- "type": "string",
- "description": "Discrete part number (optional)",
- "maxLength": 50
- },
- "u_height": {
- "type": "number",
- "format": "double",
- "maximum": 1000,
- "minimum": 0.0,
- "exclusiveMaximum": true,
- "default": 1.0,
- "title": "Position (U)"
- },
- "exclude_from_utilization": {
- "type": "boolean",
- "description": "Devices of this type are excluded when calculating rack utilization."
- },
- "is_full_depth": {
- "type": "boolean",
- "description": "Device consumes both front and rear rack faces."
- },
- "subdevice_role": {
- "enum": [
- "parent",
- "child",
- "",
- null
- ],
- "type": "string",
- "x-spec-enum-id": "65a61d5e1deb4a24",
- "nullable": true,
- "title": "Parent/child status",
- "description": "Parent devices house child devices in device bays. Leave blank if this device type is neither a parent nor a child.\n\n* `parent` - Parent\n* `child` - Child"
- },
- "airflow": {
- "enum": [
- "front-to-rear",
- "rear-to-front",
- "left-to-right",
- "right-to-left",
- "side-to-rear",
- "rear-to-side",
- "bottom-to-top",
- "top-to-bottom",
- "passive",
- "mixed",
- "",
- null
- ],
- "type": "string",
- "description": "* `front-to-rear` - Front to rear\n* `rear-to-front` - Rear to front\n* `left-to-right` - Left to right\n* `right-to-left` - Right to left\n* `side-to-rear` - Side to rear\n* `rear-to-side` - Rear to side\n* `bottom-to-top` - Bottom to top\n* `top-to-bottom` - Top to bottom\n* `passive` - Passive\n* `mixed` - Mixed",
- "x-spec-enum-id": "11cb3d363b41ba9e",
- "nullable": true
- },
- "weight": {
- "type": "number",
- "format": "double",
- "maximum": 1000000,
- "minimum": -1000000,
- "exclusiveMaximum": true,
- "exclusiveMinimum": true,
- "nullable": true
- },
- "weight_unit": {
- "enum": [
- "kg",
- "g",
- "lb",
- "oz",
- "",
- null
- ],
- "type": "string",
- "description": "* `kg` - Kilograms\n* `g` - Grams\n* `lb` - Pounds\n* `oz` - Ounces",
- "x-spec-enum-id": "2235ce3f404afbc0",
- "nullable": true
- },
- "front_image": {
- "type": "string",
- "format": "binary",
- "nullable": true
- },
- "rear_image": {
- "type": "string",
- "format": "binary",
- "nullable": true
- },
- "description": {
- "type": "string",
- "maxLength": 200
- },
- "owner": {
- "oneOf": [
- {
- "type": "integer"
- },
- {
- "allOf": [
- {
- "$ref": "#/components/schemas/BriefOwnerRequest"
- }
- ],
- "nullable": true
- }
- ],
- "nullable": true
- },
- "comments": {
- "type": "string"
- },
- "tags": {
- "type": "array",
- "items": {
- "$ref": "#/components/schemas/NestedTagRequest"
- }
- },
- "custom_fields": {
- "type": "object",
- "additionalProperties": {}
- }
- },
- "required": [
- "manufacturer",
- "model",
- "slug"
- ]
- },
- "WritableDeviceWithConfigContextRequest": {
+ "WritableDeviceRequest": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
"properties": {
@@ -321752,6 +326942,265 @@
"site"
]
},
+ "WritableDeviceRoleRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from NestedGroupModel.",
+ "properties": {
+ "name": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "color": {
+ "type": "string",
+ "minLength": 1,
+ "pattern": "^[0-9a-f]{6}$",
+ "maxLength": 6
+ },
+ "vm_role": {
+ "type": "boolean",
+ "description": "Virtual machines may be assigned to this role"
+ },
+ "config_template": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefConfigTemplateRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "parent": {
+ "type": "integer",
+ "nullable": true
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "slug"
+ ]
+ },
+ "WritableDeviceTypeRequest": {
+ "type": "object",
+ "description": "Base serializer class for models inheriting from PrimaryModel.",
+ "properties": {
+ "manufacturer": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "$ref": "#/components/schemas/BriefManufacturerRequest"
+ }
+ ]
+ },
+ "default_platform": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefPlatformRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "model": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100
+ },
+ "slug": {
+ "type": "string",
+ "minLength": 1,
+ "maxLength": 100,
+ "pattern": "^[-a-zA-Z0-9_]+$"
+ },
+ "part_number": {
+ "type": "string",
+ "description": "Discrete part number (optional)",
+ "maxLength": 50
+ },
+ "u_height": {
+ "type": "number",
+ "format": "double",
+ "maximum": 1000,
+ "minimum": 0.0,
+ "exclusiveMaximum": true,
+ "default": 1.0,
+ "title": "Position (U)"
+ },
+ "exclude_from_utilization": {
+ "type": "boolean",
+ "description": "Devices of this type are excluded when calculating rack utilization."
+ },
+ "is_full_depth": {
+ "type": "boolean",
+ "description": "Device consumes both front and rear rack faces."
+ },
+ "subdevice_role": {
+ "enum": [
+ "parent",
+ "child",
+ "",
+ null
+ ],
+ "type": "string",
+ "x-spec-enum-id": "65a61d5e1deb4a24",
+ "nullable": true,
+ "title": "Parent/child status",
+ "description": "Parent devices house child devices in device bays. Leave blank if this device type is neither a parent nor a child.\n\n* `parent` - Parent\n* `child` - Child"
+ },
+ "airflow": {
+ "enum": [
+ "front-to-rear",
+ "rear-to-front",
+ "left-to-right",
+ "right-to-left",
+ "side-to-rear",
+ "rear-to-side",
+ "bottom-to-top",
+ "top-to-bottom",
+ "passive",
+ "mixed",
+ "",
+ null
+ ],
+ "type": "string",
+ "description": "* `front-to-rear` - Front to rear\n* `rear-to-front` - Rear to front\n* `left-to-right` - Left to right\n* `right-to-left` - Right to left\n* `side-to-rear` - Side to rear\n* `rear-to-side` - Rear to side\n* `bottom-to-top` - Bottom to top\n* `top-to-bottom` - Top to bottom\n* `passive` - Passive\n* `mixed` - Mixed",
+ "x-spec-enum-id": "11cb3d363b41ba9e",
+ "nullable": true
+ },
+ "weight": {
+ "type": "number",
+ "format": "double",
+ "maximum": 1000000,
+ "minimum": -1000000,
+ "exclusiveMaximum": true,
+ "exclusiveMinimum": true,
+ "nullable": true
+ },
+ "weight_unit": {
+ "enum": [
+ "kg",
+ "g",
+ "lb",
+ "oz",
+ "",
+ null
+ ],
+ "type": "string",
+ "description": "* `kg` - Kilograms\n* `g` - Grams\n* `lb` - Pounds\n* `oz` - Ounces",
+ "x-spec-enum-id": "2235ce3f404afbc0",
+ "nullable": true
+ },
+ "end_of_life": {
+ "type": "string",
+ "format": "date",
+ "nullable": true,
+ "description": "The date after which this device type is no longer supported by the manufacturer"
+ },
+ "front_image": {
+ "type": "string",
+ "format": "binary",
+ "nullable": true
+ },
+ "rear_image": {
+ "type": "string",
+ "format": "binary",
+ "nullable": true
+ },
+ "description": {
+ "type": "string",
+ "maxLength": 200
+ },
+ "owner": {
+ "oneOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "allOf": [
+ {
+ "$ref": "#/components/schemas/BriefOwnerRequest"
+ }
+ ],
+ "nullable": true
+ }
+ ],
+ "nullable": true
+ },
+ "comments": {
+ "type": "string"
+ },
+ "tags": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/NestedTagRequest"
+ }
+ },
+ "custom_fields": {
+ "type": "object",
+ "additionalProperties": {}
+ }
+ },
+ "required": [
+ "manufacturer",
+ "model",
+ "slug"
+ ]
+ },
"WritableEventRuleRequest": {
"type": "object",
"description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
@@ -322910,7 +328359,7 @@
},
"WritableInterfaceRequest": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"device": {
"oneOf": [
@@ -322959,6 +328408,7 @@
"virtual",
"bridge",
"lag",
+ "channel",
"100base-fx",
"100base-lfx",
"100base-tx",
@@ -323174,8 +328624,22 @@
"other"
],
"type": "string",
- "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `channel` - Channel\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
+ "x-spec-enum-id": "ab7c1626812ec9d4"
+ },
+ "channels": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The number of channels into which this interface is channelized"
+ },
+ "channel_id": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The channel on the parent interface to which this subinterface is bound"
},
"enabled": {
"type": "boolean"
@@ -323201,6 +328665,11 @@
"minimum": 1,
"nullable": true
},
+ "mac_address": {
+ "type": "string",
+ "nullable": true,
+ "minLength": 1
+ },
"primary_mac_address": {
"oneOf": [
{
@@ -323710,6 +329179,7 @@
"virtual",
"bridge",
"lag",
+ "channel",
"100base-fx",
"100base-lfx",
"100base-tx",
@@ -323925,8 +329395,22 @@
"other"
],
"type": "string",
- "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
- "x-spec-enum-id": "b067eb1f050c6ae9"
+ "description": "* `virtual` - Virtual\n* `bridge` - Bridge\n* `lag` - Link Aggregation Group (LAG)\n* `channel` - Channel\n* `100base-fx` - 100BASE-FX (10/100ME)\n* `100base-lfx` - 100BASE-LFX (10/100ME)\n* `100base-tx` - 100BASE-TX (10/100ME)\n* `100base-t1` - 100BASE-T1 (10/100ME)\n* `1000base-bx10-d` - 1000BASE-BX10-D (1GE BiDi Down)\n* `1000base-bx10-u` - 1000BASE-BX10-U (1GE BiDi Up)\n* `1000base-cwdm` - 1000BASE-CWDM (1GE)\n* `1000base-cx` - 1000BASE-CX (1GE DAC)\n* `1000base-dwdm` - 1000BASE-DWDM (1GE)\n* `1000base-ex` - 1000BASE-EX (1GE)\n* `1000base-lsx` - 1000BASE-LSX (1GE)\n* `1000base-lx` - 1000BASE-LX (1GE)\n* `1000base-lx10` - 1000BASE-LX10/LH (1GE)\n* `1000base-sx` - 1000BASE-SX (1GE)\n* `1000base-t` - 1000BASE-T (1GE)\n* `1000base-tx` - 1000BASE-TX (1GE)\n* `1000base-zx` - 1000BASE-ZX (1GE)\n* `2.5gbase-t` - 2.5GBASE-T (2.5GE)\n* `5gbase-t` - 5GBASE-T (5GE)\n* `10gbase-br-d` - 10GBASE-BR-D (10GE BiDi Down)\n* `10gbase-br-u` - 10GBASE-BR-U (10GE BiDi Up)\n* `10gbase-cu` - 10GBASE-CU (10GE DAC Passive Twinax)\n* `10gbase-cx4` - 10GBASE-CX4 (10GE DAC)\n* `10gbase-er` - 10GBASE-ER (10GE)\n* `10gbase-lr` - 10GBASE-LR (10GE)\n* `10gbase-lrm` - 10GBASE-LRM (10GE)\n* `10gbase-lx4` - 10GBASE-LX4 (10GE)\n* `10gbase-sr` - 10GBASE-SR (10GE)\n* `10gbase-t` - 10GBASE-T (10GE)\n* `10gbase-zr` - 10GBASE-ZR (10GE)\n* `25gbase-cr` - 25GBASE-CR (25GE DAC)\n* `25gbase-er` - 25GBASE-ER (25GE)\n* `25gbase-lr` - 25GBASE-LR (25GE)\n* `25gbase-sr` - 25GBASE-SR (25GE)\n* `25gbase-t` - 25GBASE-T (25GE)\n* `40gbase-cr4` - 40GBASE-CR4 (40GE DAC)\n* `40gbase-er4` - 40GBASE-ER4 (40GE)\n* `40gbase-fr4` - 40GBASE-FR4 (40GE)\n* `40gbase-lr4` - 40GBASE-LR4 (40GE)\n* `40gbase-sr4` - 40GBASE-SR4 (40GE)\n* `40gbase-sr4-bd` - 40GBASE-SR4 (40GE BiDi)\n* `50gbase-cr` - 50GBASE-CR (50GE DAC)\n* `50gbase-er` - 50GBASE-ER (50GE)\n* `50gbase-fr` - 50GBASE-FR (50GE)\n* `50gbase-lr` - 50GBASE-LR (50GE)\n* `50gbase-sr` - 50GBASE-SR (50GE)\n* `100gbase-cr1` - 100GBASE-CR1 (100GE DAC)\n* `100gbase-cr2` - 100GBASE-CR2 (100GE DAC)\n* `100gbase-cr4` - 100GBASE-CR4 (100GE DAC)\n* `100gbase-cr10` - 100GBASE-CR10 (100GE DAC)\n* `100gbase-cwdm4` - 100GBASE-CWDM4 (100GE)\n* `100gbase-dr` - 100GBASE-DR (100GE)\n* `100gbase-er4` - 100GBASE-ER4 (100GE)\n* `100gbase-fr1` - 100GBASE-FR1 (100GE)\n* `100gbase-lr1` - 100GBASE-LR1 (100GE)\n* `100gbase-lr4` - 100GBASE-LR4 (100GE)\n* `100gbase-sr1` - 100GBASE-SR1 (100GE)\n* `100gbase-sr1.2` - 100GBASE-SR1.2 (100GE BiDi)\n* `100gbase-sr2` - 100GBASE-SR2 (100GE)\n* `100gbase-sr4` - 100GBASE-SR4 (100GE)\n* `100gbase-sr10` - 100GBASE-SR10 (100GE)\n* `100gbase-zr` - 100GBASE-ZR (100GE)\n* `200gbase-cr2` - 200GBASE-CR2 (200GE)\n* `200gbase-cr4` - 200GBASE-CR4 (200GE)\n* `200gbase-dr4` - 200GBASE-DR4 (200GE)\n* `200gbase-er4` - 200GBASE-ER4 (200GE)\n* `200gbase-fr4` - 200GBASE-FR4 (200GE)\n* `200gbase-lr4` - 200GBASE-LR4 (200GE)\n* `200gbase-sr2` - 200GBASE-SR2 (200GE)\n* `200gbase-sr4` - 200GBASE-SR4 (200GE)\n* `200gbase-vr2` - 200GBASE-VR2 (200GE)\n* `400gbase-cr4` - 400GBASE-CR4 (400GE)\n* `400gbase-dr4` - 400GBASE-DR4 (400GE)\n* `400gbase-er8` - 400GBASE-ER8 (400GE)\n* `400gbase-fr4` - 400GBASE-FR4 (400GE)\n* `400gbase-fr8` - 400GBASE-FR8 (400GE)\n* `400gbase-lr4` - 400GBASE-LR4 (400GE)\n* `400gbase-lr8` - 400GBASE-LR8 (400GE)\n* `400gbase-sr4` - 400GBASE-SR4 (400GE)\n* `400gbase-sr4_2` - 400GBASE-SR4.2 (400GE BiDi)\n* `400gbase-sr8` - 400GBASE-SR8 (400GE)\n* `400gbase-sr16` - 400GBASE-SR16 (400GE)\n* `400gbase-vr4` - 400GBASE-VR4 (400GE)\n* `400gbase-zr` - 400GBASE-ZR (400GE)\n* `800gbase-cr8` - 800GBASE-CR8 (800GE)\n* `800gbase-dr8` - 800GBASE-DR8 (800GE)\n* `800gbase-sr8` - 800GBASE-SR8 (800GE)\n* `800gbase-vr8` - 800GBASE-VR8 (800GE)\n* `1.6tbase-cr8` - 1.6TBASE-CR8 (1.6TE)\n* `1.6tbase-dr8` - 1.6TBASE-DR8 (1.6TE)\n* `1.6tbase-dr8-2` - 1.6TBASE-DR8-2 (1.6TE)\n* `100base-x-sfp` - SFP (100ME)\n* `1000base-x-gbic` - GBIC (1GE)\n* `1000base-x-sfp` - SFP (1GE)\n* `2.5gbase-x-sfp` - SFP (2.5GE)\n* `10gbase-x-sfpp` - SFP+ (10GE)\n* `10gbase-x-xenpak` - XENPAK (10GE)\n* `10gbase-x-xfp` - XFP (10GE)\n* `10gbase-x-x2` - X2 (10GE)\n* `25gbase-x-sfp28` - SFP28 (25GE)\n* `40gbase-x-qsfpp` - QSFP+ (40GE)\n* `50gbase-x-sfp28` - QSFP28 (50GE)\n* `50gbase-x-sfp56` - SFP56 (50GE)\n* `100gbase-x-cfp` - CFP (100GE)\n* `100gbase-x-cfp2` - CFP2 (100GE)\n* `100gbase-x-cfp4` - CFP4 (100GE)\n* `100gbase-x-cxp` - CXP (100GE)\n* `100gbase-x-cpak` - Cisco CPAK (100GE)\n* `100gbase-x-dsfp` - DSFP (100GE)\n* `100gbase-x-qsfp28` - QSFP28 (100GE)\n* `100gbase-x-qsfpdd` - QSFP-DD (100GE)\n* `100gbase-x-sfpdd` - SFP-DD (100GE)\n* `200gbase-x-cfp2` - CFP2 (200GE)\n* `200gbase-x-qsfp56` - QSFP56 (200GE)\n* `200gbase-x-qsfpdd` - QSFP-DD (200GE)\n* `400gbase-x-qsfp112` - QSFP112 (400GE)\n* `400gbase-x-qsfpdd` - QSFP-DD (400GE)\n* `400gbase-x-cdfp` - CDFP (400GE)\n* `400gbase-x-cfp2` - CFP2 (400GE)\n* `400gbase-x-cfp8` - CPF8 (400GE)\n* `400gbase-x-osfp` - OSFP (400GE)\n* `400gbase-x-osfp-rhs` - OSFP-RHS (400GE)\n* `800gbase-x-osfp` - OSFP (800GE)\n* `800gbase-x-qsfpdd` - QSFP-DD (800GE)\n* `1.6tbase-x-osfp1600` - OSFP1600 (1.6TE)\n* `1.6tbase-x-osfp1600-rhs` - OSFP1600-RHS (1.6TE)\n* `1.6tbase-x-qsfpdd1600` - QSFP-DD1600 (1.6TE)\n* `1000base-kx` - 1000BASE-KX (1GE)\n* `2.5gbase-kx` - 2.5GBASE-KX (2.5GE)\n* `5gbase-kr` - 5GBASE-KR (5GE)\n* `10gbase-kr` - 10GBASE-KR (10GE)\n* `10gbase-kx4` - 10GBASE-KX4 (10GE)\n* `25gbase-kr` - 25GBASE-KR (25GE)\n* `40gbase-kr4` - 40GBASE-KR4 (40GE)\n* `50gbase-kr` - 50GBASE-KR (50GE)\n* `100gbase-kp4` - 100GBASE-KP4 (100GE)\n* `100gbase-kr2` - 100GBASE-KR2 (100GE)\n* `100gbase-kr4` - 100GBASE-KR4 (100GE)\n* `1.6tbase-kr8` - 1.6TBASE-KR8 (1.6TE)\n* `ieee802.11a` - IEEE 802.11a\n* `ieee802.11g` - IEEE 802.11b/g\n* `ieee802.11n` - IEEE 802.11n (Wi-Fi 4)\n* `ieee802.11ac` - IEEE 802.11ac (Wi-Fi 5)\n* `ieee802.11ad` - IEEE 802.11ad (WiGig)\n* `ieee802.11ax` - IEEE 802.11ax (Wi-Fi 6)\n* `ieee802.11ay` - IEEE 802.11ay (WiGig)\n* `ieee802.11be` - IEEE 802.11be (Wi-Fi 7)\n* `ieee802.15.1` - IEEE 802.15.1 (Bluetooth)\n* `ieee802.15.4` - IEEE 802.15.4 (LR-WPAN)\n* `other-wireless` - Other (Wireless)\n* `gsm` - GSM\n* `cdma` - CDMA\n* `lte` - LTE\n* `4g` - 4G\n* `5g` - 5G\n* `sonet-oc3` - OC-3/STM-1\n* `sonet-oc12` - OC-12/STM-4\n* `sonet-oc48` - OC-48/STM-16\n* `sonet-oc192` - OC-192/STM-64\n* `sonet-oc768` - OC-768/STM-256\n* `sonet-oc1920` - OC-1920/STM-640\n* `sonet-oc3840` - OC-3840/STM-1234\n* `1gfc-sfp` - SFP (1GFC)\n* `2gfc-sfp` - SFP (2GFC)\n* `4gfc-sfp` - SFP (4GFC)\n* `8gfc-sfpp` - SFP+ (8GFC)\n* `16gfc-sfpp` - SFP+ (16GFC)\n* `32gfc-sfp28` - SFP28 (32GFC)\n* `32gfc-sfpp` - SFP+ (32GFC)\n* `64gfc-qsfpp` - QSFP+ (64GFC)\n* `64gfc-sfpdd` - SFP-DD (64GFC)\n* `64gfc-sfpp` - SFP+ (64GFC)\n* `128gfc-qsfp28` - QSFP28 (128GFC)\n* `infiniband-sdr` - SDR (2 Gbps)\n* `infiniband-ddr` - DDR (4 Gbps)\n* `infiniband-qdr` - QDR (8 Gbps)\n* `infiniband-fdr10` - FDR10 (10 Gbps)\n* `infiniband-fdr` - FDR (13.5 Gbps)\n* `infiniband-edr` - EDR (25 Gbps)\n* `infiniband-hdr` - HDR (50 Gbps)\n* `infiniband-ndr` - NDR (100 Gbps)\n* `infiniband-xdr` - XDR (250 Gbps)\n* `t1` - T1 (1.544 Mbps)\n* `e1` - E1 (2.048 Mbps)\n* `t3` - T3 (45 Mbps)\n* `e3` - E3 (34 Mbps)\n* `xdsl` - xDSL\n* `docsis` - DOCSIS\n* `moca` - MoCA\n* `bpon` - BPON (622 Mbps / 155 Mbps)\n* `epon` - EPON (1 Gbps)\n* `10g-epon` - 10G-EPON (10 Gbps)\n* `gpon` - GPON (2.5 Gbps / 1.25 Gbps)\n* `xg-pon` - XG-PON (10 Gbps / 2.5 Gbps)\n* `xgs-pon` - XGS-PON (10 Gbps)\n* `ng-pon2` - NG-PON2 (TWDM-PON) (4x10 Gbps)\n* `25g-pon` - 25G-PON (25 Gbps)\n* `50g-pon` - 50G-PON (50 Gbps)\n* `cisco-stackwise` - Cisco StackWise\n* `cisco-stackwise-plus` - Cisco StackWise Plus\n* `cisco-flexstack` - Cisco FlexStack\n* `cisco-flexstack-plus` - Cisco FlexStack Plus\n* `cisco-stackwise-80` - Cisco StackWise-80\n* `cisco-stackwise-160` - Cisco StackWise-160\n* `cisco-stackwise-320` - Cisco StackWise-320\n* `cisco-stackwise-480` - Cisco StackWise-480\n* `cisco-stackwise-1t` - Cisco StackWise-1T\n* `juniper-vcp` - Juniper VCP\n* `extreme-summitstack` - Extreme SummitStack\n* `extreme-summitstack-128` - Extreme SummitStack-128\n* `extreme-summitstack-256` - Extreme SummitStack-256\n* `extreme-summitstack-512` - Extreme SummitStack-512\n* `other` - Other",
+ "x-spec-enum-id": "ab7c1626812ec9d4"
+ },
+ "channels": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The number of channels into which this interface is channelized"
+ },
+ "channel_id": {
+ "type": "integer",
+ "maximum": 1024,
+ "minimum": 1,
+ "nullable": true,
+ "description": "The channel on the parent interface to which this subinterface is bound"
},
"enabled": {
"type": "boolean"
@@ -323939,6 +329423,11 @@
"type": "string",
"maxLength": 200
},
+ "parent": {
+ "type": "integer",
+ "nullable": true,
+ "title": "Parent interface"
+ },
"bridge": {
"type": "integer",
"nullable": true,
@@ -324587,6 +330076,12 @@
"x-spec-enum-id": "2235ce3f404afbc0",
"nullable": true
},
+ "end_of_life": {
+ "type": "string",
+ "format": "date",
+ "nullable": true,
+ "description": "The date after which this module type is no longer supported by the manufacturer"
+ },
"description": {
"type": "string",
"maxLength": 200
@@ -324594,6 +330089,12 @@
"attributes": {
"nullable": true
},
+ "module_bay_types": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/BriefModuleBayTypeRequest"
+ }
+ },
"owner": {
"oneOf": [
{
@@ -327580,7 +333081,7 @@
},
"WritableVMInterfaceRequest": {
"type": "object",
- "description": "Adds an `owner` field for models which have a ForeignKey to users.Owner.",
+ "description": "Mixin for Interface and VMInterface serializers that adds a write-only `mac_address` shortcut\nfield for creating/updating the primary MACAddress in a single request.",
"properties": {
"virtual_machine": {
"oneOf": [
@@ -327616,6 +333117,11 @@
"minimum": 1,
"nullable": true
},
+ "mac_address": {
+ "type": "string",
+ "nullable": true,
+ "minLength": 1
+ },
"primary_mac_address": {
"oneOf": [
{
@@ -328100,7 +333606,7 @@
"status"
]
},
- "WritableVirtualMachineWithConfigContextRequest": {
+ "WritableVirtualMachineRequest": {
"type": "object",
"description": "Base serializer class for models inheriting from PrimaryModel.",
"properties": {
diff --git a/docs/administration/permissions.md b/docs/administration/permissions.md
index 0b7b88bcd..53cd28621 100644
--- a/docs/administration/permissions.md
+++ b/docs/administration/permissions.md
@@ -31,6 +31,9 @@ Some models have registered actions that appear as checkboxes in the "Actions" s
Constraints are expressed as a JSON object or list representing a [Django query filter](https://docs.djangoproject.com/en/stable/ref/models/querysets/#field-lookups). This is the same syntax that you would pass to the QuerySet `filter()` method when performing a query using the Django ORM. As with query filters, double underscores can be used to traverse related objects or invoke lookup expressions. Some example queries and their corresponding definitions are shown below.
+!!! note
+ Constraint definitions must be valid JSON. Because a backslash (`\`) is an escape character in a JSON string, a backslash that is part of a string value must itself be escaped. For example, a regular expression containing `\.` must be entered as `\\.` in the constraint definition.
+
All attributes defined within a single JSON object are applied with a logical AND. For example, suppose you assign a permission for the site model with the following constraints.
```json
@@ -83,6 +86,7 @@ While permissions are typically assigned to specific groups and/or users, it is
| `{"status": "active", "role": "testing"}` | Status is active **AND** role is testing |
| `{"name__startswith": "Foo"}` | Name starts with "Foo" (case-sensitive) |
| `{"name__iendswith": "bar"}` | Name ends with "bar" (case-insensitive) |
+| `{"name__regex": "^foo\\.bar$"}` | Name matches the regular expression `^foo\.bar$` |
| `{"vid__gte": 100, "vid__lt": 200}` | VLAN ID is greater than or equal to 100 **AND** less than 200 |
| `[{"vid__lt": 200}, {"status": "reserved"}]` | VLAN ID is less than 200 **OR** status is reserved |
diff --git a/docs/integrations/webhooks.md b/docs/integrations/webhooks.md
index 966655925..bcbd05350 100644
--- a/docs/integrations/webhooks.md
+++ b/docs/integrations/webhooks.md
@@ -36,6 +36,16 @@ The following data is available as context for Jinja2 templates:
* `data` - A detailed representation of the object in its current state. This is typically equivalent to the model's representation in NetBox's REST API.
* `snapshots` - Minimal "snapshots" of the object state both before and after the change was made; provided as a dictionary with keys named `prechange` and `postchange`. These are not as extensive as the fully serialized representation, but contain enough information to convey what has changed.
+### Sanitizing Header Values
+
+When rendering the `additional_headers` field, a `header_safe` filter is made available for sanitizing a value for safe inclusion in a raw HTTP header. It strips newlines and other control characters from the rendered value, preventing HTTP header (CR/LF) injection.
+
+Whenever a header value incorporates data which may be influenced by other users (such as an object's attributes), pass it through this filter to avoid smuggling of additional headers. For example:
+
+```
+X-Object-Name: {{ data.name | header_safe }}
+```
+
### Default Request Body
If no body template is specified, the request body will be populated with a JSON object containing the context data. For example, a newly created site might appear as follows:
diff --git a/docs/models/extras/webhook.md b/docs/models/extras/webhook.md
index 94dbf97ea..0614740df 100644
--- a/docs/models/extras/webhook.md
+++ b/docs/models/extras/webhook.md
@@ -52,6 +52,13 @@ The content type to indicate in the outgoing HTTP request header. See [this list
Any additional header to include with the outgoing HTTP request. These should be defined in the format `Name: Value`, with each header on a separate line. Jinja2 templating is supported for this field.
+!!! warning "Sanitize interpolated header values"
+ When interpolating data which may be influenced by other users (such as object attributes) into a header value, apply the `header_safe` filter to guard against HTTP header (CR/LF) injection. This filter strips newlines and other control characters which could otherwise be used to smuggle additional headers into the request. For example:
+
+ ```
+ X-Object-Name: {{ data.name | header_safe }}
+ ```
+
### Body Template
Jinja2 template for a custom request body, if desired. If not defined, NetBox will populate the request body with a raw dump of the webhook context.
diff --git a/docs/reference/filtering.md b/docs/reference/filtering.md
index 442aa14d8..e6187d3e2 100644
--- a/docs/reference/filtering.md
+++ b/docs/reference/filtering.md
@@ -110,6 +110,23 @@ expression: `n`. Here is an example of a lookup expression on a foreign key, it
GET /api/ipam/vlans/?group_id__n=3203
```
+### Tags
+
+The `tag` and `tag_id` filters support negation (`n`) as well as an `any` lookup expression:
+
+| Filter | Description |
+|--------|----------------------------------------------------|
+| `n` | Does not have any of these tags |
+| `any` | Has any of these tags (logical OR) |
+
+Passing multiple values for `tag`/`tag_id` without a lookup expression uses a logical AND: `GET /api/dcim/sites/?tag=foo&tag=bar` returns only sites tagged with both `foo` _and_ `bar`. To instead match sites tagged with `foo` _or_ `bar`, use the `any` lookup expression:
+
+```no-highlight
+GET /api/dcim/sites/?tag__any=foo&tag__any=bar
+```
+
+Note that `n` is not the logical complement of the default (AND) behavior: passing multiple values applies NOR logic, matching only objects which have _none_ of the specified tags, rather than objects which are simply missing at least one of them.
+
## Ordering Objects
To order results by a particular field, include the `ordering` query parameter. For example, order the list of sites according to their facility values:
diff --git a/docs/release-notes/version-4.6.md b/docs/release-notes/version-4.6.md
index 7b6502ac4..349ad62bb 100644
--- a/docs/release-notes/version-4.6.md
+++ b/docs/release-notes/version-4.6.md
@@ -1,5 +1,53 @@
# NetBox v4.6
+## v4.6.6 (2026-07-28)
+
+### Enhancements
+
+* [#19273](https://github.com/netbox-community/netbox/issues/19273) - Enable the selection of VLANs scoped to a device's cluster or cluster group when assigning VLANs to interfaces
+* [#22522](https://github.com/netbox-community/netbox/issues/22522) - Render colored badges for custom field choices in tables
+* [#22623](https://github.com/netbox-community/netbox/issues/22623) - Change the default color of the DHCP IP address status from green to purple to distinguish it from "available"
+* [#22685](https://github.com/netbox-community/netbox/issues/22685) - Introduce an "any" lookup for the `tag` and `tag_id` filters to match objects assigned any of the specified tags
+* [#22753](https://github.com/netbox-community/netbox/issues/22753) - Add a `header_safe` Jinja2 filter for sanitizing HTTP header values
+
+### Performance Improvements
+
+* [#22497](https://github.com/netbox-community/netbox/issues/22497) - Improve the speed of bulk object deletion by avoiding per-object cascade handling and N+1 counter updates
+* [#22687](https://github.com/netbox-community/netbox/issues/22687) - Avoid an unnecessary queryset evaluation when rendering export templates
+
+### Bug Fixes
+
+* [#21988](https://github.com/netbox-community/netbox/issues/21988) - Ensure view permissions are enforced when referencing a related object by its attributes in the REST API
+* [#22513](https://github.com/netbox-community/netbox/issues/22513) - Make `JournalEntry.created_by` immutable after creation to prevent audit trail spoofing
+* [#22565](https://github.com/netbox-community/netbox/issues/22565) - Include circuit distance when calculating the total length of a cable path
+* [#22588](https://github.com/netbox-community/netbox/issues/22588) - Restrict the VLANs available for assignment to a prefix scoped to a site group
+* [#22644](https://github.com/netbox-community/netbox/issues/22644) - Record changes to front/rear port mappings in the changelog
+* [#22654](https://github.com/netbox-community/netbox/issues/22654) - Redact server filesystem paths from tracebacks rendered by ConfigTemplate debug mode
+* [#22656](https://github.com/netbox-community/netbox/issues/22656) - Pre-populate interface attributes when using "Create & Add Another"
+* [#22662](https://github.com/netbox-community/netbox/issues/22662) - Avoid raising a `DataError` exception when a cable length exceeds the maximum supported value
+* [#22675](https://github.com/netbox-community/netbox/issues/22675) - Validate the URL scheme of RSS feed entries to prevent DOM-based cross-site scripting
+* [#22677](https://github.com/netbox-community/netbox/issues/22677) - Display validation errors for form fields which lack HTML5 constraints
+* [#22682](https://github.com/netbox-community/netbox/issues/22682) - Prevent the deletion of a site group from cascading to prefixes scoped to its member sites
+* [#22690](https://github.com/netbox-community/netbox/issues/22690) - Restore the left border on the quick search field
+* [#22697](https://github.com/netbox-community/netbox/issues/22697) - Return to the scripts list when cancelling out of the "add script" form
+* [#22707](https://github.com/netbox-community/netbox/issues/22707) - Fix the resolution of port mappings when `{vc_position}` is used on device type component templates
+* [#22712](https://github.com/netbox-community/netbox/issues/22712) - Highlight relevant dropdown fields when form validation fails
+* [#22717](https://github.com/netbox-community/netbox/issues/22717) - Fix `KeyError` raised when validating a device assigned to a cluster scoped to a different location
+* [#22719](https://github.com/netbox-community/netbox/issues/22719) - Avoid raising a `KeyError` for malformed IP address and prefix values submitted via the REST API
+* [#22720](https://github.com/netbox-community/netbox/issues/22720) - Raise a protected-deletion error rather than a `TypeError` when deleting a virtual chassis with a cross-chassis LAG
+* [#22729](https://github.com/netbox-community/netbox/issues/22729) - Escape object names when populating the `Content-Disposition` header of file responses
+* [#22736](https://github.com/netbox-community/netbox/issues/22736) - Include the `comments` field of ASNs in the global search index
+* [#22737](https://github.com/netbox-community/netbox/issues/22737) - Clear stale connector metadata from cable endpoints when deleting a profiled cable
+* [#22748](https://github.com/netbox-community/netbox/issues/22748) - Ensure `ContentTypeField` respects its declared queryset to prevent the selection of non-public object types
+* [#22752](https://github.com/netbox-community/netbox/issues/22752) - Restore the rear port fields on the front port bulk import form
+* [#22766](https://github.com/netbox-community/netbox/issues/22766) - Fix the GraphQL `length` lookup for array filters
+* [#22767](https://github.com/netbox-community/netbox/issues/22767) - Include the `comments` field of several models in the global search indexes
+* [#22768](https://github.com/netbox-community/netbox/issues/22768) - Store a null value rather than an empty string for `cable_end` when removing a cable
+* [#22773](https://github.com/netbox-community/netbox/issues/22773) - Fix `TypeError` exception when bulk adding module bays to devices
+* [#22790](https://github.com/netbox-community/netbox/issues/22790) - Enforce saved filter visibility when applied via the `filter` or `filter_id` query parameter
+
+---
+
## v4.6.5 (2026-07-14)
### Enhancements
diff --git a/netbox/circuits/migrations/0058_clear_stale_cable_profile_data.py b/netbox/circuits/migrations/0058_clear_stale_cable_profile_data.py
new file mode 100644
index 000000000..517257642
--- /dev/null
+++ b/netbox/circuits/migrations/0058_clear_stale_cable_profile_data.py
@@ -0,0 +1,30 @@
+from django.db import migrations
+from django.db.models import Q
+
+
+def clear_stale_cable_profile_data(apps, schema_editor):
+ """
+ Clear cached cable connector and position data from circuit terminations which no
+ longer have a cable attached. Earlier versions failed to clear these values when a
+ profiled cable was deleted, causing subsequent validation to fail.
+ """
+ CircuitTermination = apps.get_model('circuits', 'CircuitTermination')
+ db_alias = schema_editor.connection.alias
+
+ CircuitTermination.objects.using(db_alias).filter(
+ Q(cable_connector__isnull=False) | Q(cable_positions__isnull=False),
+ cable__isnull=True,
+ ).update(
+ cable_connector=None,
+ cable_positions=None,
+ )
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ('circuits', '0057_default_ordering_indexes'),
+ ]
+
+ operations = [
+ migrations.RunPython(clear_stale_cable_profile_data, migrations.RunPython.noop),
+ ]
diff --git a/netbox/circuits/migrations/0059_nullify_empty_cable_end.py b/netbox/circuits/migrations/0059_nullify_empty_cable_end.py
new file mode 100644
index 000000000..f3ccb758d
--- /dev/null
+++ b/netbox/circuits/migrations/0059_nullify_empty_cable_end.py
@@ -0,0 +1,23 @@
+from django.db import migrations
+
+
+def nullify_empty_cable_end(apps, schema_editor):
+ """
+ Replace empty strings with null values on cached cable end data. Earlier versions
+ wrote an empty string when a cable termination was deleted, leaving disconnected
+ terminations inconsistent with those which have never been cabled.
+ """
+ CircuitTermination = apps.get_model('circuits', 'CircuitTermination')
+ db_alias = schema_editor.connection.alias
+
+ CircuitTermination.objects.using(db_alias).filter(cable_end='').update(cable_end=None)
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ('circuits', '0058_clear_stale_cable_profile_data'),
+ ]
+
+ operations = [
+ migrations.RunPython(nullify_empty_cable_end, migrations.RunPython.noop),
+ ]
diff --git a/netbox/circuits/migrations/0058_denormalization_triggers.py b/netbox/circuits/migrations/0060_denormalization_triggers.py
similarity index 92%
rename from netbox/circuits/migrations/0058_denormalization_triggers.py
rename to netbox/circuits/migrations/0060_denormalization_triggers.py
index 3725150cf..9f9076e07 100644
--- a/netbox/circuits/migrations/0058_denormalization_triggers.py
+++ b/netbox/circuits/migrations/0060_denormalization_triggers.py
@@ -10,9 +10,9 @@ from utilities.migration import InstallDenormalizationTrigger
class Migration(migrations.Migration):
dependencies = [
- ('circuits', '0057_default_ordering_indexes'),
+ ('circuits', '0059_nullify_empty_cable_end'),
# Source tables (dcim_site, dcim_location) must already exist.
- ('dcim', '0240_ltree_paths'),
+ ('dcim', '0242_ltree_paths'),
]
operations = [
diff --git a/netbox/core/tests/test_api.py b/netbox/core/tests/test_api.py
index e2975e98d..c043e2948 100644
--- a/netbox/core/tests/test_api.py
+++ b/netbox/core/tests/test_api.py
@@ -387,7 +387,10 @@ class BackgroundTaskTestCase(RQQueueTestMixin, TestCase):
queue = get_queue('default')
worker = get_worker('default')
job = queue.enqueue(self.dummy_job_default)
- worker.prepare_job_execution(job)
+ # prepare_job_execution() invokes the worker heartbeat, which logs a "re-registering"
+ # warning for this freshly-created (unregistered) worker; suppress the expected noise.
+ with disable_logging():
+ worker.prepare_job_execution(job)
url = reverse('core-api:rqtask-stop', args=[job.id])
self.assertEqual(job.get_status(), JobStatus.STARTED)
diff --git a/netbox/core/tests/test_views.py b/netbox/core/tests/test_views.py
index dfa2c9ed8..ad89d002a 100644
--- a/netbox/core/tests/test_views.py
+++ b/netbox/core/tests/test_views.py
@@ -423,8 +423,11 @@ class BackgroundTaskTestCase(RQQueueTestMixin, TestCase):
worker = get_worker('default')
job = queue.enqueue(self.dummy_job_default)
- worker.prepare_job_execution(job)
- worker.prepare_execution(job)
+ # prepare_job_execution() invokes the worker heartbeat, which logs a "re-registering"
+ # warning for this freshly-created (unregistered) worker; suppress the expected noise.
+ with disable_logging():
+ worker.prepare_job_execution(job)
+ worker.prepare_execution(job)
self.assertEqual(job.get_status(), JobStatus.STARTED)
diff --git a/netbox/core/views.py b/netbox/core/views.py
index bb9a9d1dd..bfbab9fb4 100644
--- a/netbox/core/views.py
+++ b/netbox/core/views.py
@@ -12,6 +12,7 @@ from django.db import DatabaseError, connection
from django.http import Http404, HttpResponse, HttpResponseForbidden
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse
+from django.utils.http import content_disposition_header
from django.utils.translation import gettext_lazy as _
from django.views.generic import View
from django_rq.queues import get_queue_by_index, get_redis_connection
@@ -767,7 +768,7 @@ class SystemView(UserPassesTestMixin, View):
},
}
response = HttpResponse(json.dumps(data, cls=ConfigJSONEncoder, indent=4), content_type='text/json')
- response['Content-Disposition'] = 'attachment; filename="netbox.json"'
+ response['Content-Disposition'] = content_disposition_header(as_attachment=True, filename='netbox.json')
return response
# Serialize any JSON-based classes
diff --git a/netbox/dcim/forms/bulk_create.py b/netbox/dcim/forms/bulk_create.py
index e5546e08f..1ff48cdaf 100644
--- a/netbox/dcim/forms/bulk_create.py
+++ b/netbox/dcim/forms/bulk_create.py
@@ -115,7 +115,7 @@ class ModuleBayBulkCreateForm(
):
model = ModuleBay
field_order = ('name', 'label', 'position', 'enabled', 'description', 'tags')
- replication_fields = ('name', 'label', 'position', 'enabled')
+ replication_fields = ('name', 'label', 'position')
position = ExpandableNameField(
label=_('Position'),
required=False,
diff --git a/netbox/dcim/forms/bulk_import.py b/netbox/dcim/forms/bulk_import.py
index 6c273fed4..56827eea7 100644
--- a/netbox/dcim/forms/bulk_import.py
+++ b/netbox/dcim/forms/bulk_import.py
@@ -9,6 +9,7 @@ from django.utils.translation import gettext_lazy as _
from dcim.choices import *
from dcim.constants import *
from dcim.models import *
+from dcim.utils import reconcile_port_mappings
from extras.models import ConfigTemplate
from ipam.choices import VLANQinQRoleChoices
from ipam.models import VLAN, VRF, IPAddress, VLANGroup
@@ -1135,13 +1136,100 @@ class FrontPortImportForm(OwnerCSVMixin, NetBoxModelImportForm):
choices=PortTypeChoices,
help_text=_('Physical medium classification')
)
+ rear_port = CSVModelChoiceField(
+ label=_('Rear port'),
+ queryset=RearPort.objects.all(),
+ to_field_name='name',
+ help_text=_('Corresponding rear port (mapped to the front port\'s first position)')
+ )
+ rear_port_position = forms.IntegerField(
+ label=_('Rear port position'),
+ required=False,
+ help_text=_('Mapped position on the corresponding rear port (defaults to 1)')
+ )
class Meta:
model = FrontPort
fields = (
- 'device', 'name', 'label', 'type', 'color', 'mark_connected', 'positions', 'description', 'owner', 'tags'
+ 'device', 'name', 'label', 'type', 'color', 'mark_connected', 'positions', 'rear_port',
+ 'rear_port_position', 'description', 'owner', 'tags'
)
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+ # Limit RearPort choices to those belonging to this device (or VC master)
+ if self.is_bound and 'device' in self.data:
+ try:
+ device = self.fields['device'].to_python(self.data['device'])
+ except forms.ValidationError:
+ device = None
+ else:
+ try:
+ device = self.instance.device
+ except Device.DoesNotExist:
+ device = None
+
+ if device:
+ self.fields['rear_port'].queryset = RearPort.objects.filter(
+ device__in=[device, device.get_vc_master()]
+ )
+ else:
+ self.fields['rear_port'].queryset = RearPort.objects.none()
+
+ def clean(self):
+ super().clean()
+
+ rear_port = self.cleaned_data.get('rear_port')
+ rear_port_position = self.cleaned_data.get('rear_port_position') or 1
+ if not rear_port:
+ return
+
+ # Validate the rear port position against the selected rear port
+ if rear_port_position > rear_port.positions:
+ raise forms.ValidationError({
+ 'rear_port_position': _(
+ "Invalid rear port position ({rear_port_position}): Rear port {name} has only {positions} "
+ "positions."
+ ).format(
+ rear_port_position=rear_port_position,
+ name=rear_port.name,
+ positions=rear_port.positions
+ )
+ })
+
+ # Ensure the target rear port position isn't already occupied. reconcile_port_mappings() creates the
+ # mapping via create() (bypassing validate_unique()), so without this check a collision would surface
+ # as an uncaught IntegrityError (HTTP 500) rather than a row-level validation error.
+ occupied = PortMapping.objects.filter(
+ rear_port=rear_port, rear_port_position=rear_port_position
+ ).exclude(front_port=self.instance.pk)
+ if occupied.exists():
+ raise forms.ValidationError({
+ 'rear_port_position': _(
+ "Rear port {name} position {rear_port_position} is already occupied."
+ ).format(
+ name=rear_port.name,
+ rear_port_position=rear_port_position
+ )
+ })
+
+ def _save_m2m(self):
+ super()._save_m2m()
+
+ # Map the front port's first position to the specified rear port & position
+ if rear_port := self.cleaned_data.get('rear_port'):
+ reconcile_port_mappings(
+ PortMapping,
+ parent_field='front_port',
+ parent=self.instance,
+ desired=[{
+ 'front_port_position': 1,
+ 'rear_port_id': rear_port.pk,
+ 'rear_port_position': self.cleaned_data.get('rear_port_position') or 1,
+ }],
+ )
+
class RearPortImportForm(OwnerCSVMixin, NetBoxModelImportForm):
device = CSVModelChoiceField(
diff --git a/netbox/dcim/migrations/0240_clear_stale_cable_profile_data.py b/netbox/dcim/migrations/0240_clear_stale_cable_profile_data.py
new file mode 100644
index 000000000..7fbfc67b9
--- /dev/null
+++ b/netbox/dcim/migrations/0240_clear_stale_cable_profile_data.py
@@ -0,0 +1,42 @@
+from django.db import migrations
+from django.db.models import Q
+
+CABLED_MODELS = (
+ 'ConsolePort',
+ 'ConsoleServerPort',
+ 'FrontPort',
+ 'Interface',
+ 'PowerFeed',
+ 'PowerOutlet',
+ 'PowerPort',
+ 'RearPort',
+)
+
+
+def clear_stale_cable_profile_data(apps, schema_editor):
+ """
+ Clear cached cable connector and position data from endpoints which no longer have
+ a cable attached. Earlier versions failed to clear these values when a profiled
+ cable was deleted, causing subsequent validation of the endpoint to fail.
+ """
+ db_alias = schema_editor.connection.alias
+
+ for model_name in CABLED_MODELS:
+ model = apps.get_model('dcim', model_name)
+ model.objects.using(db_alias).filter(
+ Q(cable_connector__isnull=False) | Q(cable_positions__isnull=False),
+ cable__isnull=True,
+ ).update(
+ cable_connector=None,
+ cable_positions=None,
+ )
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ('dcim', '0239_add_portmapping_objectchange'),
+ ]
+
+ operations = [
+ migrations.RunPython(clear_stale_cable_profile_data, migrations.RunPython.noop),
+ ]
diff --git a/netbox/dcim/migrations/0241_nullify_empty_cable_end.py b/netbox/dcim/migrations/0241_nullify_empty_cable_end.py
new file mode 100644
index 000000000..35bab9b52
--- /dev/null
+++ b/netbox/dcim/migrations/0241_nullify_empty_cable_end.py
@@ -0,0 +1,35 @@
+from django.db import migrations
+
+CABLED_MODELS = (
+ 'ConsolePort',
+ 'ConsoleServerPort',
+ 'FrontPort',
+ 'Interface',
+ 'PowerFeed',
+ 'PowerOutlet',
+ 'PowerPort',
+ 'RearPort',
+)
+
+
+def nullify_empty_cable_end(apps, schema_editor):
+ """
+ Replace empty strings with null values on cached cable end data. Earlier versions
+ wrote an empty string when a cable termination was deleted, leaving disconnected
+ endpoints inconsistent with those which have never been cabled.
+ """
+ db_alias = schema_editor.connection.alias
+
+ for model_name in CABLED_MODELS:
+ model = apps.get_model('dcim', model_name)
+ model.objects.using(db_alias).filter(cable_end='').update(cable_end=None)
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ('dcim', '0240_clear_stale_cable_profile_data'),
+ ]
+
+ operations = [
+ migrations.RunPython(nullify_empty_cable_end, migrations.RunPython.noop),
+ ]
diff --git a/netbox/dcim/migrations/0240_ltree_paths.py b/netbox/dcim/migrations/0242_ltree_paths.py
similarity index 99%
rename from netbox/dcim/migrations/0240_ltree_paths.py
rename to netbox/dcim/migrations/0242_ltree_paths.py
index 81bed1ecf..eebf51f09 100644
--- a/netbox/dcim/migrations/0240_ltree_paths.py
+++ b/netbox/dcim/migrations/0242_ltree_paths.py
@@ -77,7 +77,7 @@ LEGACY_FIELDS = ('lft', 'rght', 'tree_id', 'level')
class Migration(migrations.Migration):
dependencies = [
- ('dcim', '0239_add_portmapping_objectchange'),
+ ('dcim', '0241_nullify_empty_cable_end'),
]
operations = [
diff --git a/netbox/dcim/migrations/0241_denormalization_triggers.py b/netbox/dcim/migrations/0243_denormalization_triggers.py
similarity index 98%
rename from netbox/dcim/migrations/0241_denormalization_triggers.py
rename to netbox/dcim/migrations/0243_denormalization_triggers.py
index e345fd284..e52befd67 100644
--- a/netbox/dcim/migrations/0241_denormalization_triggers.py
+++ b/netbox/dcim/migrations/0243_denormalization_triggers.py
@@ -30,7 +30,7 @@ COMPONENT_TABLES = (
class Migration(migrations.Migration):
dependencies = [
- ('dcim', '0240_ltree_paths'),
+ ('dcim', '0242_ltree_paths'),
]
operations = [
diff --git a/netbox/dcim/migrations/0242_device__config_context_data.py b/netbox/dcim/migrations/0244_device__config_context_data.py
similarity index 93%
rename from netbox/dcim/migrations/0242_device__config_context_data.py
rename to netbox/dcim/migrations/0244_device__config_context_data.py
index 8c225e5ee..fb01cfed6 100644
--- a/netbox/dcim/migrations/0242_device__config_context_data.py
+++ b/netbox/dcim/migrations/0244_device__config_context_data.py
@@ -3,7 +3,7 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
- ('dcim', '0241_denormalization_triggers'),
+ ('dcim', '0243_denormalization_triggers'),
]
operations = [
diff --git a/netbox/dcim/migrations/0243_consolidate_unique_constraints.py b/netbox/dcim/migrations/0245_consolidate_unique_constraints.py
similarity index 99%
rename from netbox/dcim/migrations/0243_consolidate_unique_constraints.py
rename to netbox/dcim/migrations/0245_consolidate_unique_constraints.py
index 59011b57a..8f509fddf 100644
--- a/netbox/dcim/migrations/0243_consolidate_unique_constraints.py
+++ b/netbox/dcim/migrations/0245_consolidate_unique_constraints.py
@@ -4,7 +4,7 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
- ('dcim', '0242_device__config_context_data'),
+ ('dcim', '0244_device__config_context_data'),
('extras', '0139_alter_customfieldchoiceset_extra_choices'),
('tenancy', '0025_ltree_paths'),
('users', '0016_default_ordering_indexes'),
diff --git a/netbox/dcim/migrations/0244_add_devicetype_end_of_life.py b/netbox/dcim/migrations/0246_add_devicetype_end_of_life.py
similarity index 89%
rename from netbox/dcim/migrations/0244_add_devicetype_end_of_life.py
rename to netbox/dcim/migrations/0246_add_devicetype_end_of_life.py
index bfd5d3f6c..94f7e557b 100644
--- a/netbox/dcim/migrations/0244_add_devicetype_end_of_life.py
+++ b/netbox/dcim/migrations/0246_add_devicetype_end_of_life.py
@@ -4,7 +4,7 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
- ("dcim", "0243_consolidate_unique_constraints"),
+ ("dcim", "0245_consolidate_unique_constraints"),
]
operations = [
diff --git a/netbox/dcim/migrations/0245_modulebaytype.py b/netbox/dcim/migrations/0247_modulebaytype.py
similarity index 98%
rename from netbox/dcim/migrations/0245_modulebaytype.py
rename to netbox/dcim/migrations/0247_modulebaytype.py
index 067eaf8b2..123fe3220 100644
--- a/netbox/dcim/migrations/0245_modulebaytype.py
+++ b/netbox/dcim/migrations/0247_modulebaytype.py
@@ -10,7 +10,7 @@ import utilities.json
class Migration(migrations.Migration):
dependencies = [
- ('dcim', '0244_add_devicetype_end_of_life'),
+ ('dcim', '0246_add_devicetype_end_of_life'),
('extras', '0141_custom_field_nulls_first'),
('users', '0016_default_ordering_indexes'),
]
diff --git a/netbox/dcim/migrations/0246_interfacetemplate_channels.py b/netbox/dcim/migrations/0248_interfacetemplate_channels.py
similarity index 97%
rename from netbox/dcim/migrations/0246_interfacetemplate_channels.py
rename to netbox/dcim/migrations/0248_interfacetemplate_channels.py
index e235a5fb9..3c61874f7 100644
--- a/netbox/dcim/migrations/0246_interfacetemplate_channels.py
+++ b/netbox/dcim/migrations/0248_interfacetemplate_channels.py
@@ -5,7 +5,7 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
- ('dcim', '0245_modulebaytype'),
+ ('dcim', '0247_modulebaytype'),
]
operations = [
diff --git a/netbox/dcim/migrations/0247_interface_channels.py b/netbox/dcim/migrations/0249_interface_channels.py
similarity index 95%
rename from netbox/dcim/migrations/0247_interface_channels.py
rename to netbox/dcim/migrations/0249_interface_channels.py
index a9cf48697..6bdc55bf0 100644
--- a/netbox/dcim/migrations/0247_interface_channels.py
+++ b/netbox/dcim/migrations/0249_interface_channels.py
@@ -5,7 +5,7 @@ from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
- ('dcim', '0246_interfacetemplate_channels'),
+ ('dcim', '0248_interfacetemplate_channels'),
]
operations = [
diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py
index 01a59b071..d25f3bfd5 100644
--- a/netbox/dcim/models/devices.py
+++ b/netbox/dcim/models/devices.py
@@ -946,7 +946,7 @@ class Device(
if self.cluster and self.cluster._location is not None and self.cluster._location != self.location:
raise ValidationError({
'cluster': _("The assigned cluster belongs to a different location ({location})").format(
- site=self.cluster._location
+ location=self.cluster._location
)
})
@@ -1235,10 +1235,13 @@ class VirtualChassis(PrimaryModel):
lag__device=F('device')
)
if interfaces:
- raise ProtectedError(_(
- "Unable to delete virtual chassis {self}. There are member interfaces which form a cross-chassis LAG "
- "interfaces."
- ).format(self=self, interfaces=InterfaceSpeedChoices))
+ raise ProtectedError(
+ _(
+ "Unable to delete virtual chassis {virtual_chassis}. One or more member interfaces form a "
+ "cross-chassis LAG."
+ ).format(virtual_chassis=self),
+ set(interfaces),
+ )
# Clear vc_position and vc_priority on member devices BEFORE calling super().delete()
# This must be done here because on_delete=SET_NULL executes before pre_delete signal
diff --git a/netbox/dcim/search.py b/netbox/dcim/search.py
index edea50e25..3f70a13ed 100644
--- a/netbox/dcim/search.py
+++ b/netbox/dcim/search.py
@@ -84,6 +84,7 @@ class DeviceRoleIndex(SearchIndex):
('name', 100),
('slug', 110),
('description', 500),
+ ('comments', 5000),
)
display_attrs = ('description',)
@@ -117,6 +118,7 @@ class MACAddressIndex(SearchIndex):
fields = (
('mac_address', 100),
('description', 500),
+ ('comments', 5000),
)
display_attrs = ('assigned_object', 'description')
@@ -251,6 +253,7 @@ class PlatformIndex(SearchIndex):
('name', 100),
('slug', 110),
('description', 500),
+ ('comments', 5000),
)
display_attrs = ('manufacturer', 'description')
diff --git a/netbox/dcim/signals.py b/netbox/dcim/signals.py
index ad4af4d82..b22a953e0 100644
--- a/netbox/dcim/signals.py
+++ b/netbox/dcim/signals.py
@@ -155,7 +155,12 @@ def nullify_connected_endpoints(instance, **kwargs):
Disassociate the Cable from the termination object, and retrace any affected CablePaths.
"""
model = instance.termination_type.model_class()
- model.objects.filter(pk=instance.termination_id).update(cable=None, cable_end='')
+ model.objects.filter(pk=instance.termination_id).update(
+ cable=None,
+ cable_end=None,
+ cable_connector=None,
+ cable_positions=None,
+ )
# If the removed termination was a channelized interface, also clear the cable attributes mirrored onto its channel
# subinterfaces. This must happen before the retrace below so that each channel's (now dead) path is torn down
diff --git a/netbox/dcim/tests/test_cablepaths.py b/netbox/dcim/tests/test_cablepaths.py
index 7fa4f9b8b..d60f5cc86 100644
--- a/netbox/dcim/tests/test_cablepaths.py
+++ b/netbox/dcim/tests/test_cablepaths.py
@@ -60,11 +60,11 @@ class LegacyCablePathTestCase(BaseCablePathTestCase):
interface2.refresh_from_db()
self.assertIsNone(interface1.cable_id)
- self.assertEqual(interface1.cable_end, '')
+ self.assertIsNone(interface1.cable_end)
self.assertPathIsNotSet(interface1)
self.assertIsNone(interface2.cable_id)
- self.assertEqual(interface2.cable_end, '')
+ self.assertIsNone(interface2.cable_end)
self.assertPathIsNotSet(interface2)
def test_102_consoleport_to_consoleserverport(self):
diff --git a/netbox/dcim/tests/test_models.py b/netbox/dcim/tests/test_models.py
index c00fdfece..4f547bc89 100644
--- a/netbox/dcim/tests/test_models.py
+++ b/netbox/dcim/tests/test_models.py
@@ -1,6 +1,7 @@
from decimal import Decimal
from django.core.exceptions import ValidationError
+from django.db.models import ProtectedError
from django.db.models.signals import post_save
from django.test import TestCase, tag
@@ -855,6 +856,50 @@ class DeviceTestCase(TestCase):
cluster=clusters[1]
).full_clean()
+ @tag('regression') # Ref: #22717
+ def test_device_mismatched_location_cluster(self):
+ """
+ A cluster scoped to a different location than the device must be rejected
+ with a field validation error naming that location.
+ """
+ site = Site.objects.create(name='Site 1', slug='site-1')
+ locations = (
+ Location(site=site, name='Location A', slug='location-a'),
+ Location(site=site, name='Location B', slug='location-b'),
+ )
+ for location in locations:
+ location.save()
+
+ cluster_type = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1')
+ cluster = Cluster.objects.create(name='Cluster 1', type=cluster_type, scope=locations[0])
+
+ device_type = DeviceType.objects.first()
+ device_role = DeviceRole.objects.first()
+
+ # Device in the cluster's location should pass
+ Device(
+ name='device1',
+ site=site,
+ location=locations[0],
+ device_type=device_type,
+ role=device_role,
+ cluster=cluster
+ ).full_clean()
+
+ # Device in a different location of the same site should fail
+ with self.assertRaisesMessage(
+ ValidationError,
+ 'The assigned cluster belongs to a different location (Location A)'
+ ):
+ Device(
+ name='device1',
+ site=site,
+ location=locations[1],
+ device_type=device_type,
+ role=device_role,
+ cluster=cluster
+ ).full_clean()
+
class DeviceBayTestCase(TestCase):
@@ -2573,6 +2618,59 @@ class VirtualChassisTestCase(TestCase):
self.assertIsNone(device2.vc_position)
self.assertIsNone(device2.vc_priority)
+ @tag('regression') # Ref: #22720
+ def test_virtualchassis_deletion_blocked_by_cross_chassis_lag(self):
+ """
+ Deleting a VirtualChassis whose members form a cross-chassis LAG must
+ raise ProtectedError exposing the blocking interfaces, leaving the VC
+ and its member assignments unchanged.
+ """
+ device1 = Device.objects.get(name='TestDevice1')
+ device2 = Device.objects.get(name='TestDevice2')
+
+ vc = VirtualChassis.objects.create(name='Test VC', master=device1)
+
+ device1.virtual_chassis = vc
+ device1.vc_position = 1
+ device1.vc_priority = 10
+ device1.save()
+
+ device2.virtual_chassis = vc
+ device2.vc_position = 2
+ device2.vc_priority = 20
+ device2.save()
+
+ lag = Interface.objects.create(device=device1, name='lag0', type=InterfaceTypeChoices.TYPE_LAG)
+ member_interface = Interface(
+ device=device2,
+ name='eth0',
+ type=InterfaceTypeChoices.TYPE_1GE_FIXED,
+ lag=lag,
+ )
+ # A cross-chassis LAG member is valid while both devices share the VC
+ member_interface.full_clean()
+ member_interface.save()
+
+ with self.assertRaises(ProtectedError) as cm:
+ vc.delete()
+
+ self.assertEqual(
+ cm.exception.args[0],
+ 'Unable to delete virtual chassis Test VC. One or more member interfaces form a cross-chassis LAG.'
+ )
+ self.assertEqual(set(cm.exception.protected_objects), {member_interface})
+
+ # The failed deletion must not clear the VC or its member assignments
+ self.assertTrue(VirtualChassis.objects.filter(pk=vc.pk).exists())
+ device1.refresh_from_db()
+ device2.refresh_from_db()
+ self.assertEqual(device1.virtual_chassis, vc)
+ self.assertEqual(device1.vc_position, 1)
+ self.assertEqual(device1.vc_priority, 10)
+ self.assertEqual(device2.virtual_chassis, vc)
+ self.assertEqual(device2.vc_position, 2)
+ self.assertEqual(device2.vc_priority, 20)
+
def test_virtualchassis_duplicate_vc_position(self):
"""
Test that two devices cannot be assigned to the same vc_position
diff --git a/netbox/dcim/tests/test_signals.py b/netbox/dcim/tests/test_signals.py
index 31d11e74c..768f2cad1 100644
--- a/netbox/dcim/tests/test_signals.py
+++ b/netbox/dcim/tests/test_signals.py
@@ -7,7 +7,7 @@ from django.db import connection
from django.test import SimpleTestCase, TestCase
from dcim import signals
-from dcim.choices import CableEndChoices, LinkStatusChoices
+from dcim.choices import CableEndChoices, CableProfileChoices, LinkStatusChoices
from dcim.models import (
Cable,
CablePath,
@@ -298,8 +298,38 @@ class CableSignalTestCase(TestCase):
self.assertIsNone(interface_b._path_id)
self.assertIsNone(interface_a.cable_id)
self.assertIsNone(interface_b.cable_id)
- self.assertEqual(interface_a.cable_end, '')
- self.assertEqual(interface_b.cable_end, '')
+ self.assertIsNone(interface_a.cable_end)
+ self.assertIsNone(interface_b.cable_end)
+
+ def test_deleting_profiled_cable_nullifies_endpoints(self):
+ """
+ Deleting a profiled cable must clear the cached connector and position data on both endpoints.
+ """
+ interface_a = Interface.objects.create(device=self.device, name='Interface A')
+ interface_b = Interface.objects.create(device=self.device, name='Interface B')
+ cable = Cable(
+ a_terminations=[interface_a],
+ b_terminations=[interface_b],
+ profile=CableProfileChoices.SINGLE_1C1P,
+ )
+ cable.save()
+
+ # Confirm the profile metadata was cached on both endpoints.
+ interface_a.refresh_from_db()
+ interface_b.refresh_from_db()
+ self.assertEqual(interface_a.cable_connector, 1)
+ self.assertEqual(interface_a.cable_positions, [1])
+ self.assertEqual(interface_b.cable_connector, 1)
+ self.assertEqual(interface_b.cable_positions, [1])
+
+ cable.delete()
+
+ for interface in (interface_a, interface_b):
+ interface.refresh_from_db()
+ self.assertIsNone(interface.cable_id)
+ self.assertIsNone(interface.cable_end)
+ self.assertIsNone(interface.cable_connector)
+ self.assertIsNone(interface.cable_positions)
def test_deleting_cable_skips_per_termination_retrace(self):
"""
@@ -363,7 +393,7 @@ class CableSignalTestCase(TestCase):
termination.delete()
interface_a.refresh_from_db()
self.assertIsNone(interface_a.cable_id)
- self.assertEqual(interface_a.cable_end, '')
+ self.assertIsNone(interface_a.cable_end)
class MACAddressInterfaceSignalTestCase(TestCase):
diff --git a/netbox/dcim/tests/test_views.py b/netbox/dcim/tests/test_views.py
index 72bce8204..e9bf762d5 100644
--- a/netbox/dcim/tests/test_views.py
+++ b/netbox/dcim/tests/test_views.py
@@ -3628,10 +3628,10 @@ class FrontPortTestCase(ViewTestCases.DeviceComponentViewTestCase):
}
cls.csv_data = (
- "device,name,type,positions",
- "Device 1,Front Port 4,8p8c,1",
- "Device 1,Front Port 5,8p8c,1",
- "Device 1,Front Port 6,8p8c,1",
+ "device,name,type,positions,rear_port,rear_port_position",
+ "Device 1,Front Port 4,8p8c,1,Rear Port 4,1",
+ "Device 1,Front Port 5,8p8c,1,Rear Port 5,1",
+ "Device 1,Front Port 6,8p8c,1,Rear Port 6,1",
)
cls.csv_update_data = (
@@ -3641,6 +3641,49 @@ class FrontPortTestCase(ViewTestCases.DeviceComponentViewTestCase):
f"{front_ports[2].pk},Front Port 9,New description9",
)
+ def test_bulk_import_objects_with_permission(self):
+ # Importing front ports with a rear_port (and position) should create the corresponding PortMapping
+ def check_port_mappings(scenario_name):
+ front_port = FrontPort.objects.get(name='Front Port 4')
+ mapping = PortMapping.objects.get(front_port=front_port)
+ self.assertEqual(mapping.rear_port.name, 'Rear Port 4')
+ self.assertEqual(mapping.front_port_position, 1)
+ self.assertEqual(mapping.rear_port_position, 1)
+
+ super().test_bulk_import_objects_with_permission(post_import_callback=check_port_mappings)
+
+ @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'], EXEMPT_EXCLUDE_MODELS=[])
+ def test_bulk_import_rear_port_position_exceeds_capacity(self):
+ # A rear_port_position beyond the rear port's capacity is rejected without creating the front port
+ self.add_permissions('dcim.add_frontport')
+ csv_data = (
+ "device,name,type,positions,rear_port,rear_port_position",
+ "Device 1,Front Port 10,8p8c,1,Rear Port 4,2",
+ )
+ response = self.client.post(self._get_url('bulk_import'), {
+ 'data': '\n'.join(csv_data),
+ 'format': ImportFormatChoices.CSV,
+ 'csv_delimiter': CSVDelimiterChoices.AUTO,
+ })
+ self.assertEqual(response.status_code, 200)
+ self.assertFalse(FrontPort.objects.filter(name='Front Port 10').exists())
+
+ @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'], EXEMPT_EXCLUDE_MODELS=[])
+ def test_bulk_import_rear_port_position_occupied(self):
+ # An already-occupied rear port position is rejected (rather than raising an IntegrityError)
+ self.add_permissions('dcim.add_frontport')
+ csv_data = (
+ "device,name,type,positions,rear_port,rear_port_position",
+ "Device 1,Front Port 10,8p8c,1,Rear Port 1,1",
+ )
+ response = self.client.post(self._get_url('bulk_import'), {
+ 'data': '\n'.join(csv_data),
+ 'format': ImportFormatChoices.CSV,
+ 'csv_delimiter': CSVDelimiterChoices.AUTO,
+ })
+ self.assertEqual(response.status_code, 200)
+ self.assertFalse(FrontPort.objects.filter(name='Front Port 10').exists())
+
def test_trace(self):
self.add_permissions(
'dcim.view_frontport',
@@ -3783,6 +3826,69 @@ class ModuleBayTestCase(ViewTestCases.DeviceComponentViewTestCase):
f"{module_bays[2].pk},Module Bay 9,New description9",
)
+ @tag('regression') # Issue #22773
+ def test_bulk_add_module_bays_to_devices(self):
+ """
+ Bulk-adding module bays expands the name pattern per device and applies enabled to every new bay.
+ """
+ self.add_permissions('dcim.add_modulebay')
+ device1 = Device.objects.get(name='Device 1')
+ device2 = create_test_device('Device 2')
+ initial_count = self._get_queryset().count()
+
+ # An unchecked box is not submitted by the browser at all
+ request = {
+ 'path': reverse('dcim:device_bulk_add_modulebay'),
+ 'data': post_data({
+ 'pk': [device1.pk, device2.pk],
+ 'name': 'PCI-Slot[1-2]',
+ '_create': True,
+ }),
+ }
+ response = self.client.post(**request)
+ self.assertHttpStatus(response, 302)
+ self.assertEqual(
+ list(
+ ModuleBay.objects.filter(name__startswith='PCI-Slot')
+ .order_by('device_id', 'name')
+ .values_list('device_id', 'name', 'enabled')
+ ),
+ [
+ (device1.pk, 'PCI-Slot1', False),
+ (device1.pk, 'PCI-Slot2', False),
+ (device2.pk, 'PCI-Slot1', False),
+ (device2.pk, 'PCI-Slot2', False),
+ ]
+ )
+
+ # A checked box applies True to every bay created
+ request = {
+ 'path': reverse('dcim:device_bulk_add_modulebay'),
+ 'data': post_data({
+ 'pk': [device1.pk, device2.pk],
+ 'name': 'PSU-Slot[1-2]',
+ 'enabled': True,
+ '_create': True,
+ }),
+ }
+ response = self.client.post(**request)
+ self.assertHttpStatus(response, 302)
+ self.assertEqual(
+ list(
+ ModuleBay.objects.filter(name__startswith='PSU-Slot')
+ .order_by('device_id', 'name')
+ .values_list('device_id', 'name', 'enabled')
+ ),
+ [
+ (device1.pk, 'PSU-Slot1', True),
+ (device1.pk, 'PSU-Slot2', True),
+ (device2.pk, 'PSU-Slot1', True),
+ (device2.pk, 'PSU-Slot2', True),
+ ]
+ )
+
+ self.assertEqual(initial_count + 8, self._get_queryset().count())
+
class DeviceBayTestCase(ViewTestCases.DeviceComponentViewTestCase):
model = DeviceBay
diff --git a/netbox/extras/models/mixins.py b/netbox/extras/models/mixins.py
index acf4183e5..bb7b2dec1 100644
--- a/netbox/extras/models/mixins.py
+++ b/netbox/extras/models/mixins.py
@@ -9,6 +9,7 @@ from django.core.exceptions import ValidationError
from django.core.files.storage import storages
from django.db import models
from django.http import HttpResponse
+from django.utils.http import content_disposition_header
from django.utils.module_loading import import_string
from django.utils.translation import gettext_lazy as _
@@ -265,6 +266,7 @@ class RenderTemplateMixin(models.Model):
filename = filename_from_object(context)
else:
filename = "output"
- response['Content-Disposition'] = f'attachment; filename="{filename}{extension}"'
+ filename = f'{filename}{extension}'
+ response['Content-Disposition'] = content_disposition_header(as_attachment=True, filename=filename)
return response
diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py
index 275582ffa..3cf2b46f1 100644
--- a/netbox/extras/models/models.py
+++ b/netbox/extras/models/models.py
@@ -34,7 +34,7 @@ from netbox.models.features import (
)
from netbox.models.mixins import OwnerMixin
from utilities.html import clean_html
-from utilities.jinja2 import render_jinja2
+from utilities.jinja2 import render_jinja2, sanitize_http_header
from utilities.querydict import dict_to_querydict
from utilities.querysets import RestrictedQuerySet
from utilities.tables import get_table_for_model
@@ -212,7 +212,9 @@ class Webhook(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, OwnerMixin, Ch
help_text=_(
"User-supplied HTTP headers to be sent with the request in addition to the HTTP content type. Headers "
"should be defined in the format Name: Value. Jinja2 template processing is supported with "
- "the same context as the request body (below)."
+ "the same context as the request body (below). When interpolating untrusted data (such as object "
+ "attributes) into a header value, apply the header_safe filter to guard against HTTP header "
+ "injection, e.g. X-Object: {{ data.name | header_safe }}."
)
)
body_template = models.TextField(
@@ -297,8 +299,12 @@ class Webhook(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, OwnerMixin, Ch
if not self.additional_headers:
return {}
ret = {}
- data = render_jinja2(self.additional_headers, context)
+ # Expose the `header_safe` filter so template authors can sanitize interpolated values (e.g. user-controlled
+ # object data) against HTTP header (CR/LF) injection. See utilities.jinja2.sanitize_http_header.
+ data = render_jinja2(self.additional_headers, context, filters={'header_safe': sanitize_http_header})
for line in data.splitlines():
+ if ':' not in line:
+ continue
header, value = line.split(':', 1)
ret[header.strip()] = value.strip()
return ret
diff --git a/netbox/extras/tests/test_event_rules.py b/netbox/extras/tests/test_event_rules.py
index 8baaec3c6..69ea80121 100644
--- a/netbox/extras/tests/test_event_rules.py
+++ b/netbox/extras/tests/test_event_rules.py
@@ -8,7 +8,7 @@ from unittest.mock import Mock, patch
import django_rq
from django.conf import settings
from django.http import HttpResponse
-from django.test import RequestFactory, tag
+from django.test import RequestFactory, TestCase, tag
from django.urls import reverse
from PIL import Image
from requests import Session
@@ -711,6 +711,13 @@ class EventRuleTestCase(RQQueueTestMixin, APITestCase):
Pre-existing non-dict action_data must not cause flush_events() to
raise.
"""
+ # flush_events() logs a warning about the invalid action_data; mute it so the expected
+ # message doesn't clutter the test runner's output.
+ events_logger = logging.getLogger('netbox.events_processor')
+ original_level = events_logger.level
+ events_logger.setLevel(logging.CRITICAL)
+ self.addCleanup(events_logger.setLevel, original_level)
+
site_type = ObjectType.objects.get_for_model(Site)
webhook = Webhook.objects.get(name='Webhook 1')
webhook_type = ObjectType.objects.get_for_model(Webhook)
@@ -874,3 +881,71 @@ class EventRuleTestCase(RQQueueTestMixin, APITestCase):
job = self.queue.jobs[0]
self.assertEqual(job.kwargs['event_rule'], event_rule)
self.assertEqual(job.kwargs['event_type'], OBJECT_UPDATED)
+
+
+class WebhookRenderHeadersTest(TestCase):
+
+ def test_render_headers(self):
+ """Basic header rendering with Jinja2 interpolation."""
+ webhook = Webhook(
+ name='Webhook 1',
+ payload_url='http://localhost:9000/',
+ additional_headers='X-Foo: Bar\nX-Object: {{ data.name }}',
+ )
+ headers = webhook.render_headers({'data': {'name': 'Site 1'}})
+ self.assertEqual(headers, {'X-Foo': 'Bar', 'X-Object': 'Site 1'})
+
+ def test_render_headers_multiline_block(self):
+ """A multi-line Jinja2 block (e.g. a loop generating headers) must render against the full template."""
+ webhook = Webhook(
+ name='Webhook 1',
+ payload_url='http://localhost:9000/',
+ additional_headers=(
+ '{% for k, v in data.headers.items() %}X-{{ k }}: {{ v }}\n'
+ '{% endfor %}'
+ ),
+ )
+ headers = webhook.render_headers({'data': {'headers': {'Foo': '1', 'Bar': '2'}}})
+ self.assertEqual(headers, {'X-Foo': '1', 'X-Bar': '2'})
+
+ def test_render_headers_skips_blank_lines(self):
+ """Blank lines in the rendered output (e.g. from Jinja2 block tags) must be skipped, not raise."""
+ webhook = Webhook(
+ name='Webhook 1',
+ payload_url='http://localhost:9000/',
+ # Block tags on their own lines leave behind blank lines once rendered
+ additional_headers=(
+ '{% for k, v in data.headers.items() %}\n'
+ 'X-{{ k }}: {{ v }}\n'
+ '{% endfor %}'
+ ),
+ )
+ headers = webhook.render_headers({'data': {'headers': {'Foo': '1', 'Bar': '2'}}})
+ self.assertEqual(headers, {'X-Foo': '1', 'X-Bar': '2'})
+
+ def test_render_headers_skips_lines_without_separator(self):
+ """A non-blank line lacking a 'Name: Value' separator must be skipped, not raise."""
+ webhook = Webhook(
+ name='Webhook 1',
+ payload_url='http://localhost:9000/',
+ additional_headers='X-Foo: Bar\nthis line has no colon\nX-Baz: Qux',
+ )
+ headers = webhook.render_headers({})
+ self.assertEqual(headers, {'X-Foo': 'Bar', 'X-Baz': 'Qux'})
+
+ def test_render_headers_header_safe_filter_available(self):
+ """
+ The `header_safe` filter must be available when rendering headers, and must strip control characters
+ (including CR/LF) so that untrusted data cannot smuggle additional headers via CR/LF injection.
+ """
+ webhook = Webhook(
+ name='Webhook 1',
+ payload_url='http://localhost:9000/',
+ additional_headers='X-Object: {{ data.name | header_safe }}',
+ )
+ headers = webhook.render_headers({'data': {'name': 'legit\r\nX-Injected: evil\x00'}})
+
+ # The injected newline is stripped, so only a single (sanitized) header is produced
+ self.assertEqual(list(headers.keys()), ['X-Object'])
+ self.assertNotIn('X-Injected', headers)
+ self.assertEqual(headers['X-Object'], 'legitX-Injected: evil')
diff --git a/netbox/extras/tests/test_jobs.py b/netbox/extras/tests/test_jobs.py
index 6906ebb69..44ff5efe6 100644
--- a/netbox/extras/tests/test_jobs.py
+++ b/netbox/extras/tests/test_jobs.py
@@ -1,3 +1,4 @@
+import logging
from contextlib import contextmanager
from types import SimpleNamespace
from unittest.mock import MagicMock, patch
@@ -45,6 +46,16 @@ class DummyScript:
class RunScriptTestCase(TestCase):
+ def setUp(self):
+ super().setUp()
+ # The failure/abort paths log via the module logger `netbox.scripts.`. These
+ # tests deliberately exercise those paths, so mute the logger to keep the expected error
+ # messages and tracebacks out of the test runner's output.
+ logger = logging.getLogger('netbox.scripts')
+ original_level = logger.level
+ logger.setLevel(logging.CRITICAL)
+ self.addCleanup(logger.setLevel, original_level)
+
def test_run_script_success_commit_true_sets_output_and_job_data(self):
runner = _make_runner()
script = DummyScript(run_result='hello')
diff --git a/netbox/extras/tests/test_models.py b/netbox/extras/tests/test_models.py
index ae087ffc5..6f614654c 100644
--- a/netbox/extras/tests/test_models.py
+++ b/netbox/extras/tests/test_models.py
@@ -36,7 +36,7 @@ from extras.models import (
from extras.models.mixins import RenderTemplateMixin
from tenancy.models import Tenant, TenantGroup
from utilities.exceptions import AbortRequest
-from utilities.jinja2 import env_filter, render_jinja2
+from utilities.jinja2 import env_filter, render_jinja2, sanitize_http_header
from utilities.tables import get_table_for_model
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine
@@ -1274,6 +1274,48 @@ class JinjaEnvFilterTestCase(TestCase):
self.assertEqual(output, 'overridden')
+class SanitizeHTTPHeaderFilterTestCase(TestCase):
+ """
+ Tests for the sanitize_http_header() Jinja2 filter (exposed as `header_safe`) and the render_jinja2()
+ `filters` argument used to make it available.
+ """
+
+ def test_strips_crlf(self):
+ self.assertEqual(sanitize_http_header('legit\r\nX-Injected: evil'), 'legitX-Injected: evil')
+
+ def test_strips_control_characters(self):
+ self.assertEqual(sanitize_http_header('foo\x00\x1f\x7fbar'), 'foobar')
+
+ def test_preserves_normal_value(self):
+ self.assertEqual(sanitize_http_header('application/json'), 'application/json')
+
+ def test_coerces_non_string(self):
+ self.assertEqual(sanitize_http_header(42), '42')
+
+ def test_available_via_render_filters_argument(self):
+ output = render_jinja2(
+ "{{ value | header_safe }}",
+ {'value': 'a\r\nb'},
+ filters={'header_safe': sanitize_http_header},
+ )
+ self.assertEqual(output, 'ab')
+
+ def test_render_filters_take_precedence_over_user_config(self):
+ # A per-render filter cannot be shadowed by a user-configured filter of the same name
+ with self.settings(JINJA_FILTERS={'header_safe': lambda v: 'shadowed'}):
+ output = render_jinja2(
+ "{{ value | header_safe }}",
+ {'value': 'a\r\nb'},
+ filters={'header_safe': sanitize_http_header},
+ )
+ self.assertEqual(output, 'ab')
+
+ def test_not_registered_without_filters_argument(self):
+ # The filter must not leak into general-purpose rendering
+ with self.assertRaises(TemplateError):
+ render_jinja2("{{ 'x' | header_safe }}", {})
+
+
class ExportTemplateContextTestCase(TestCase):
"""
Tests for ExportTemplate.get_context() including public model population.
diff --git a/netbox/extras/tests/test_views.py b/netbox/extras/tests/test_views.py
index 6d382789d..df0799a0c 100644
--- a/netbox/extras/tests/test_views.py
+++ b/netbox/extras/tests/test_views.py
@@ -1,3 +1,4 @@
+import logging
import uuid
from unittest.mock import PropertyMock, patch
@@ -467,6 +468,16 @@ class ImageAttachmentTestCase(
# placeholder URLs instead of real images on disk.
model = ImageAttachment
+ def setUp(self):
+ super().setUp()
+ # The fixtures use placeholder image URLs with no file on disk, so rendering the thumbnail
+ # column logs a FileNotFoundError traceback for every attachment. The missing files are
+ # expected here, so mute the sorl-thumbnail logger to keep the test output clean.
+ logger = logging.getLogger('sorl.thumbnail')
+ original_level = logger.level
+ logger.setLevel(logging.CRITICAL)
+ self.addCleanup(logger.setLevel, original_level)
+
@classmethod
def setUpTestData(cls):
ct = ContentType.objects.get_for_model(Site)
@@ -1150,6 +1161,20 @@ class ScriptListViewTestCase(TestCase):
self.assertTemplateUsed(response, 'extras/inc/script_list_content.html')
+class ScriptModuleCreateViewTestCase(TestCase):
+ user_permissions = ['core.add_managedfile', 'extras.add_scriptmodule']
+
+ @tag('regression')
+ def test_default_return_url(self):
+ """
+ The add view should fall back to the scripts list as its return URL.
+ """
+ response = self.client.get(reverse('extras:scriptmodule_add'))
+
+ self.assertEqual(response.status_code, 200)
+ self.assertEqual(response.context['return_url'], reverse('extras:script_list'))
+
+
class ScriptValidationErrorTestCase(TestCase):
user_permissions = ['extras.view_script', 'extras.run_script']
diff --git a/netbox/extras/views.py b/netbox/extras/views.py
index cec119378..8ce407e9b 100644
--- a/netbox/extras/views.py
+++ b/netbox/extras/views.py
@@ -9,6 +9,7 @@ from django.http import Http404, HttpResponse, HttpResponseBadRequest, HttpRespo
from django.shortcuts import get_object_or_404, redirect, render
from django.urls import reverse
from django.utils import timezone
+from django.utils.http import content_disposition_header
from django.utils.module_loading import import_string
from django.utils.translation import gettext_lazy as _
from django.views.generic import View
@@ -1273,7 +1274,7 @@ class ObjectRenderConfigView(generic.ObjectView):
content = context['rendered_config'] or context['error_message']
response = HttpResponse(content, content_type='text')
filename = f"{instance.name or 'config'}.txt"
- response['Content-Disposition'] = f'attachment; filename="{filename}"'
+ response['Content-Disposition'] = content_disposition_header(as_attachment=True, filename=filename)
return response
return render(
@@ -1636,6 +1637,7 @@ class DashboardWidgetDeleteView(LoginRequiredMixin, View):
class ScriptModuleCreateView(generic.ObjectEditView):
queryset = ScriptModule.objects.all()
form = forms.ScriptFileForm
+ default_return_url = 'extras:script_list'
def alter_object(self, obj, *args, **kwargs):
obj.file_root = ManagedFileRootPathChoices.SCRIPTS
@@ -1882,7 +1884,7 @@ class ScriptResultView(TableMixin, generic.ObjectView):
content = (job.data.get("output") or "").encode()
response = HttpResponse(content, content_type='text')
filename = f"{job.object.name or 'script-output'}_{job.completed.strftime('%Y-%m-%d_%H%M%S')}.txt"
- response['Content-Disposition'] = f'attachment; filename="{filename}"'
+ response['Content-Disposition'] = content_disposition_header(as_attachment=True, filename=filename)
return response
if job.completed:
diff --git a/netbox/ipam/api/field_serializers.py b/netbox/ipam/api/field_serializers.py
index f22f9abfb..6aa233291 100644
--- a/netbox/ipam/api/field_serializers.py
+++ b/netbox/ipam/api/field_serializers.py
@@ -20,7 +20,7 @@ class IPAddressField(serializers.CharField):
try:
return IPNetwork(data)
except AddrFormatError:
- raise serializers.ValidationError(_("Invalid IP address format: {data}").format(data))
+ raise serializers.ValidationError(_("Invalid IP address format: {data}").format(data=data))
except (TypeError, ValueError) as e:
raise serializers.ValidationError(e)
@@ -40,7 +40,7 @@ class IPNetworkField(serializers.CharField):
try:
return IPNetwork(data)
except AddrFormatError:
- raise serializers.ValidationError(_("Invalid IP prefix format: {data}").format(data))
+ raise serializers.ValidationError(_("Invalid IP prefix format: {data}").format(data=data))
except (TypeError, ValueError) as e:
raise serializers.ValidationError(e)
diff --git a/netbox/ipam/filtersets.py b/netbox/ipam/filtersets.py
index 356f70373..97abd274a 100644
--- a/netbox/ipam/filtersets.py
+++ b/netbox/ipam/filtersets.py
@@ -1069,6 +1069,10 @@ class VLANFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
queryset=Site.objects.all(),
method='get_for_site'
)
+ available_at_site_group = django_filters.ModelChoiceFilter(
+ queryset=SiteGroup.objects.all(),
+ method='get_for_site_group'
+ )
available_on_device = django_filters.ModelChoiceFilter(
queryset=Device.objects.select_related('cluster'),
method='get_for_device'
@@ -1130,6 +1134,10 @@ class VLANFilterSet(PrimaryModelFilterSet, TenancyFilterSet):
def get_for_site(self, queryset, name, value):
return queryset.get_for_site(value)
+ @extend_schema_field(OpenApiTypes.STR)
+ def get_for_site_group(self, queryset, name, value):
+ return queryset.get_for_site_group(value)
+
@extend_schema_field(OpenApiTypes.STR)
def get_for_device(self, queryset, name, value):
return queryset.get_for_device(value)
diff --git a/netbox/ipam/forms/model_forms.py b/netbox/ipam/forms/model_forms.py
index 5a5a0ad81..ed88519cc 100644
--- a/netbox/ipam/forms/model_forms.py
+++ b/netbox/ipam/forms/model_forms.py
@@ -5,7 +5,7 @@ from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _
from dcim.forms.mixins import ScopedForm
-from dcim.models import Device, Interface, Site
+from dcim.models import Device, Interface, Site, SiteGroup
from ipam.choices import *
from ipam.constants import *
from ipam.formfields import IPNetworkFormField
@@ -251,9 +251,17 @@ class PrefixForm(TenancyForm, ScopedForm, PrimaryModelForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- # #18605: only filter VLAN select list if the selected scope is a Site (or none is selected yet)
+ # #18605: only filter the VLAN select list if the selected scope is a Site (or none is selected yet).
+ # #22588: a Site Group scope filters VLANs by the group's member sites instead.
if scope_field := self.fields.get('scope', None):
- if scope_field.selected_model not in (None, Site):
+ selected_model = scope_field.selected_model
+ if selected_model is SiteGroup:
+ self.fields['vlan'].widget.dynamic_params.clear()
+ self.fields['vlan'].widget.attrs.pop('data-dynamic-params', None)
+ self.fields['vlan'].widget.add_query_params({
+ 'available_at_site_group': '$scope_object_id',
+ })
+ elif selected_model not in (None, Site):
self.fields['vlan'].widget.attrs.pop('data-dynamic-params', None)
diff --git a/netbox/ipam/migrations/0094_denormalization_triggers.py b/netbox/ipam/migrations/0094_denormalization_triggers.py
index 6fca21e26..1f43088bb 100644
--- a/netbox/ipam/migrations/0094_denormalization_triggers.py
+++ b/netbox/ipam/migrations/0094_denormalization_triggers.py
@@ -12,7 +12,7 @@ class Migration(migrations.Migration):
dependencies = [
('ipam', '0093_alter_prefix__region_alter_prefix__site_group'),
# Source tables (dcim_site, dcim_location) must already exist.
- ('dcim', '0240_ltree_paths'),
+ ('dcim', '0242_ltree_paths'),
]
operations = [
diff --git a/netbox/ipam/querysets.py b/netbox/ipam/querysets.py
index d58632672..ef546b697 100644
--- a/netbox/ipam/querysets.py
+++ b/netbox/ipam/querysets.py
@@ -290,6 +290,23 @@ class VLANQuerySet(RestrictedQuerySet):
Q(group__isnull=True, site__isnull=True) # Global VLANs
)
+ def get_for_site_group(self, site_group):
+ """
+ Return all VLANs available to the specified site group.
+ """
+ if site_group is None:
+ return self.none()
+ from .models import VLANGroup
+ q = Q(
+ scope_type=ContentType.objects.get_by_natural_key('dcim', 'sitegroup'),
+ scope_id__in=site_group.get_ancestors(include_self=True)
+ )
+ return self.filter(
+ Q(group__in=VLANGroup.objects.filter(q)) |
+ Q(group__scope_id__isnull=True, site__isnull=True) | # Global group VLANs
+ Q(group__isnull=True, site__isnull=True) # Global VLANs
+ )
+
def get_for_device(self, device):
"""
Return all VLANs available to the specified Device.
diff --git a/netbox/ipam/search.py b/netbox/ipam/search.py
index ea0d41db3..ec845541a 100644
--- a/netbox/ipam/search.py
+++ b/netbox/ipam/search.py
@@ -22,6 +22,7 @@ class ASNIndex(SearchIndex):
('asn', 100),
('prefixed_name', 110),
('description', 500),
+ ('comments', 5000),
)
display_attrs = ('rir', 'role', 'tenant', 'description')
@@ -171,6 +172,7 @@ class VLANTranslationPolicyIndex(SearchIndex):
fields = (
('name', 100),
('description', 500),
+ ('comments', 5000),
)
display_attrs = ('description',)
diff --git a/netbox/ipam/tests/test_api.py b/netbox/ipam/tests/test_api.py
index 70d884b5e..fb05e2a55 100644
--- a/netbox/ipam/tests/test_api.py
+++ b/netbox/ipam/tests/test_api.py
@@ -452,6 +452,19 @@ class PrefixTestCase(APIViewTestCases.APIViewTestCase):
)
Prefix.objects.bulk_create(prefixes)
+ @tag('regression')
+ def test_create_with_invalid_prefix(self):
+ """
+ POST of a malformed prefix value returns a 400 validation error.
+ """
+ self.add_permissions('ipam.add_prefix')
+ url = reverse('ipam-api:prefix-list')
+
+ response = self.client.post(url, {'prefix': 'invalid'}, format='json', **self.header)
+
+ self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST)
+ self.assertEqual(response.data['prefix'][0], 'Invalid IP prefix format: invalid')
+
@tag('regression')
def test_clean_validates_scope(self):
prefix = Prefix.objects.first()
@@ -858,6 +871,19 @@ class IPAddressTestCase(APIViewTestCases.APIViewTestCase):
)
IPAddress.objects.bulk_create(ip_addresses)
+ @tag('regression')
+ def test_create_with_invalid_address(self):
+ """
+ POST of a malformed address value returns a 400 validation error.
+ """
+ self.add_permissions('ipam.add_ipaddress')
+ url = reverse('ipam-api:ipaddress-list')
+
+ response = self.client.post(url, {'address': 'invalid'}, format='json', **self.header)
+
+ self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST)
+ self.assertEqual(response.data['address'][0], 'Invalid IP address format: invalid')
+
def test_assign_object(self):
"""
Test the creation of available IP addresses within a parent IP range.
diff --git a/netbox/ipam/tests/test_filtersets.py b/netbox/ipam/tests/test_filtersets.py
index 3b9288453..7b1fa8339 100644
--- a/netbox/ipam/tests/test_filtersets.py
+++ b/netbox/ipam/tests/test_filtersets.py
@@ -2221,6 +2221,11 @@ class VLANTestCase(TestCase, ChangeLoggedFilterSetTests):
params = {'available_at_site': site_id}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 5) # 4 scoped + 1 global group + 1 global
+ def test_available_at_site_group(self):
+ site_group = SiteGroup.objects.get(name='Site Group 1')
+ params = {'available_at_site_group': site_group.pk}
+ self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) # 1 scoped + 1 global group + 1 global
+
def test_interface(self):
interface_id = Interface.objects.first().pk
params = {'interface_id': interface_id}
diff --git a/netbox/ipam/tests/test_forms.py b/netbox/ipam/tests/test_forms.py
index fdf8aeca6..a0b0703b0 100644
--- a/netbox/ipam/tests/test_forms.py
+++ b/netbox/ipam/tests/test_forms.py
@@ -29,12 +29,21 @@ class PrefixFormTestCase(TestCase):
assert form.fields['vlan'].widget.attrs['data-dynamic-params'] == self.default_dynamic_params
+ def test_vlan_field_sets_dynamic_params_for_scope_site_group(self):
+ """data-dynamic-params present with available_at_site_group when scope type is Site Group"""
+ site_group = SiteGroup.objects.create(name='Site Group 1', slug='site-group-1')
+ form = PrefixForm(data={
+ 'scope_content_type': ContentType.objects.get_for_model(SiteGroup).id,
+ 'scope_object_id': site_group.pk,
+ })
+ expected = '[{"fieldName":"scope_object_id","queryParam":"available_at_site_group"}]'
+ assert form.fields['vlan'].widget.attrs['data-dynamic-params'] == expected
+
def test_vlan_field_does_not_set_dynamic_params_for_other_scopes(self):
- """data-dynamic-params not present when scope type is populated by is not Site"""
+ """data-dynamic-params not present when scope type is not Site or Site Group"""
cases = [
Region(name='Region 1', slug='region-1'),
Location(site=self.site, name='Location 1', slug='location-1'),
- SiteGroup(name='Site Group 1', slug='site-group-1'),
]
for case in cases:
case.save()
@@ -42,7 +51,6 @@ class PrefixFormTestCase(TestCase):
'scope_content_type': ContentType.objects.get_for_model(case._meta.model).id,
'scope_object_id': case.pk,
})
-
assert 'data-dynamic-params' not in form.fields['vlan'].widget.attrs
diff --git a/netbox/netbox/api/fields.py b/netbox/netbox/api/fields.py
index 0466bd980..8f0c9e231 100644
--- a/netbox/netbox/api/fields.py
+++ b/netbox/netbox/api/fields.py
@@ -1,4 +1,3 @@
-from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist
from django.db.backends.postgresql.psycopg_any import NumericRange
from django.utils.translation import gettext as _
@@ -112,7 +111,8 @@ class ContentTypeField(RelatedField):
def to_internal_value(self, data):
try:
app_label, model = data.split('.')
- return ContentType.objects.get_by_natural_key(app_label=app_label, model=model)
+ # Scoped to the field's declared queryset, not the raw ContentType table (#22748).
+ return self.get_queryset().get(app_label=app_label, model=model)
except ObjectDoesNotExist:
self.fail('does_not_exist', content_type=data)
except (AttributeError, TypeError, ValueError):
diff --git a/netbox/netbox/filtersets.py b/netbox/netbox/filtersets.py
index 3ef120fa5..090fb9028 100644
--- a/netbox/netbox/filtersets.py
+++ b/netbox/netbox/filtersets.py
@@ -2,6 +2,7 @@ import json
from copy import deepcopy
import django_filters
+from django.contrib.auth.models import AnonymousUser
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.db.models import Q
@@ -20,6 +21,7 @@ from utilities.constants import (
FILTER_CHAR_BASED_LOOKUP_MAP,
FILTER_NEGATION_LOOKUP_MAP,
FILTER_NUMERIC_BASED_LOOKUP_MAP,
+ FILTER_TAG_LOOKUP_MAP,
FILTER_TREENODE_NEGATION_LOOKUP_MAP,
)
from utilities.forms.fields import MACAddressField
@@ -117,7 +119,11 @@ class BaseFilterSet(django_filters.FilterSet):
except (ValueError, TypeError):
pass
- saved_filters = SavedFilter.objects.filter(
+ # Only apply SavedFilters the requesting user is permitted to see (#22790). Fall back to
+ # anonymous visibility (shared filters only) when no request is available.
+ request = kwargs.get('request')
+ user = request.user if request else AnonymousUser()
+ saved_filters = SavedFilter.objects.restrict_to_shared(user).filter(
Q(slug__in=data.pop('filter', [])) |
Q(pk__in=filter_ids)
)
@@ -153,10 +159,13 @@ class BaseFilterSet(django_filters.FilterSet):
# TreeNodeMultipleChoiceFilter only support negation but must maintain the `in` lookup expression
return FILTER_TREENODE_NEGATION_LOOKUP_MAP
+ if isinstance(existing_filter, (TagFilter, TagIDFilter)):
+ # Tags additionally support an "any of" (OR) mode, unlike other model choice filters
+ return FILTER_TAG_LOOKUP_MAP
+
if isinstance(existing_filter, (
django_filters.ModelChoiceFilter,
django_filters.ModelMultipleChoiceFilter,
- TagFilter
)):
# These filter types support only negation
return FILTER_NEGATION_LOOKUP_MAP
@@ -237,6 +246,10 @@ class BaseFilterSet(django_filters.FilterSet):
# Of course setting the negation of the existing filter's exclude attribute handles both cases
new_filter.exclude = not existing_filter.exclude
+ if lookup_name == 'any' and isinstance(new_filter, (TagFilter, TagIDFilter)):
+ # "Any of" is an OR match, whereas TagFilter/TagIDFilter default to AND (conjoined=True)
+ new_filter.conjoined = False
+
new_filters[new_filter_name] = new_filter
return new_filters
diff --git a/netbox/netbox/graphql/filter_lookups.py b/netbox/netbox/graphql/filter_lookups.py
index e56c3048b..4c3ad069c 100644
--- a/netbox/netbox/graphql/filter_lookups.py
+++ b/netbox/netbox/graphql/filter_lookups.py
@@ -308,10 +308,24 @@ class ArrayLookup(Generic[T]):
Class for Array field lookups
"""
- contains: list[T] | None = strawberry_django.filter_field(description='Contains the value')
- contained_by: list[T] | None = strawberry_django.filter_field(description='Contained by the value')
- overlap: list[T] | None = strawberry_django.filter_field(description='Overlaps with the value')
- length: int | None = strawberry_django.filter_field(description='Length of the array')
+ contains: list[T] | None = strawberry.field(default=strawberry.UNSET, description='Contains the value')
+ contained_by: list[T] | None = strawberry.field(default=strawberry.UNSET, description='Contained by the value')
+ overlap: list[T] | None = strawberry.field(default=strawberry.UNSET, description='Overlaps with the value')
+ length: int | None = strawberry.field(default=strawberry.UNSET, description='Length of the array')
+
+ @strawberry_django.filter_field
+ def filter(self, info: Info, queryset: QuerySet, prefix: str = '') -> tuple[QuerySet, Q]:
+ # Map the public GraphQL ``length`` field to Django's ``len`` array transform; the
+ # remaining lookups share their name with the corresponding ORM transform.
+ if self.contains is not strawberry.UNSET and self.contains is not None:
+ return queryset, Q(**{f'{prefix}contains': self.contains})
+ if self.contained_by is not strawberry.UNSET and self.contained_by is not None:
+ return queryset, Q(**{f'{prefix}contained_by': self.contained_by})
+ if self.overlap is not strawberry.UNSET and self.overlap is not None:
+ return queryset, Q(**{f'{prefix}overlap': self.overlap})
+ if self.length is not strawberry.UNSET and self.length is not None:
+ return queryset, Q(**{f'{prefix}len': self.length})
+ return queryset, Q()
@strawberry.input(one_of=True, description='Lookup for Array fields. Only one of the lookup fields can be set.')
diff --git a/netbox/netbox/models/deletion.py b/netbox/netbox/models/deletion.py
index 86ac2bfd7..e87321ae3 100644
--- a/netbox/netbox/models/deletion.py
+++ b/netbox/netbox/models/deletion.py
@@ -79,7 +79,9 @@ class DeleteMixin:
)
)
- collector = CustomCollector(using=using)
+ # Pass origin=self (matching Django's Model.delete) so signal receivers can tell that
+ # cascaded child objects are being deleted as part of deleting this object.
+ collector = CustomCollector(using=using, origin=self)
collector.collect([self], keep_parents=keep_parents)
return collector.delete()
diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py
index 3632ffd76..359c79c6d 100644
--- a/netbox/netbox/tables/columns.py
+++ b/netbox/netbox/tables/columns.py
@@ -570,9 +570,37 @@ class CustomFieldColumn(tables.Column):
return mark_safe(f'{escape(value)}')
return escape(value)
if self.customfield.type == CustomFieldTypeChoices.TYPE_SELECT:
- return self.customfield.get_choice_label(value)
+ if value is None:
+ return self.default
+ label = self.customfield.get_choice_label(value)
+ color = self.customfield.get_choice_color(value)
+ if color:
+ return mark_safe(
+ f'{escape(label)}'
+ )
+ return label
if self.customfield.type == CustomFieldTypeChoices.TYPE_MULTISELECT:
- return ', '.join(self.customfield.get_choice_label(v) for v in value)
+ if not value:
+ return ''
+
+ has_color = False
+ parts = []
+
+ for v in value:
+ label = self.customfield.get_choice_label(v)
+ color = self.customfield.get_choice_color(v)
+ if color:
+ has_color = True
+ parts.append((label, color))
+ if has_color:
+ badges = []
+ for label, color in parts:
+ badges.append(
+ f'{escape(label)}'
+ )
+ return mark_safe(' '.join(badges))
+ return ', '.join(label for label, _ in parts)
+
if self.customfield.type == CustomFieldTypeChoices.TYPE_MULTIOBJECT:
return mark_safe(', '.join(
self._linkify_item(obj) for obj in self.customfield.deserialize(value)
diff --git a/netbox/netbox/tests/test_api.py b/netbox/netbox/tests/test_api.py
index b84889fab..29d002a5e 100644
--- a/netbox/netbox/tests/test_api.py
+++ b/netbox/netbox/tests/test_api.py
@@ -1,5 +1,6 @@
import uuid
+from django.contrib.contenttypes.models import ContentType
from django.db.backends.postgresql.psycopg_any import NumericRange
from django.test import RequestFactory, TestCase
from django.urls import reverse
@@ -7,8 +8,9 @@ from rest_framework.exceptions import ValidationError
from rest_framework.request import Request
from dcim.api.serializers import RackSerializer
+from dcim.models import Device, Site
from netbox.api.exceptions import QuerySetNotOrdered
-from netbox.api.fields import IntegerRangeSerializer, RelatedObjectCountField
+from netbox.api.fields import ContentTypeField, IntegerRangeSerializer, RelatedObjectCountField
from netbox.api.pagination import NetBoxPagination
from users.models import Token
from utilities.testing import APITestCase
@@ -178,3 +180,60 @@ class IntegerRangeSerializerTestCase(TestCase):
serializer.to_internal_value(['100', '200'])
with self.assertRaises(ValidationError):
serializer.to_internal_value([100.5, 200.5])
+
+
+class ContentTypeFieldTestCase(TestCase):
+
+ def test_to_internal_value_resolves_content_type_within_queryset(self):
+ """A content type present in the field's declared queryset resolves successfully."""
+ site_ct = ContentType.objects.get_for_model(Site)
+ field = ContentTypeField(queryset=ContentType.objects.filter(pk=site_ct.pk))
+ self.assertEqual(field.to_internal_value('dcim.site'), site_ct)
+
+ def test_to_internal_value_rejects_content_type_outside_queryset(self):
+ """
+ Regression test for #22748: ContentTypeField.to_internal_value() previously resolved
+ against the raw, unfiltered ContentType table via get_by_natural_key(), ignoring the
+ field's own declared queryset entirely. A content type that is real and resolvable in
+ general, but falls outside the specific queryset a given field declares, must be
+ rejected rather than silently accepted.
+ """
+ site_ct = ContentType.objects.get_for_model(Site)
+ device_ct = ContentType.objects.get_for_model(Device)
+
+ # Scope the field to a single, unrelated content type so `dcim.site` is guaranteed to
+ # fall outside it.
+ field = ContentTypeField(queryset=ContentType.objects.filter(pk=device_ct.pk))
+ with self.assertRaises(ValidationError):
+ field.to_internal_value('dcim.site')
+
+ # Sanity check: the rejected content type is a genuine, generally-resolvable content
+ # type, so the rejection above is attributable to queryset scoping and not a bogus value.
+ self.assertTrue(ContentType.objects.filter(pk=site_ct.pk).exists())
+
+ def test_to_internal_value_rejects_malformed_input(self):
+ """Input must be exactly '.'."""
+ field = ContentTypeField(queryset=ContentType.objects.all())
+ with self.assertRaises(ValidationError):
+ field.to_internal_value('not-a-valid-format')
+ with self.assertRaises(ValidationError):
+ field.to_internal_value('too.many.dots')
+
+ def test_to_internal_value_rejects_nonexistent_content_type(self):
+ """A syntactically valid but nonexistent content type must be rejected."""
+ field = ContentTypeField(queryset=ContentType.objects.all())
+ with self.assertRaises(ValidationError):
+ field.to_internal_value('nonexistent_app.nonexistent_model')
+
+ def test_to_internal_value_many_rejects_content_type_outside_queryset(self):
+ """
+ many=True wraps the field in a ManyRelatedField, which delegates per-item validation to
+ the child field's to_internal_value() unconditionally; the same queryset scoping must
+ hold there too.
+ """
+ device_ct = ContentType.objects.get_for_model(Device)
+ field = ContentTypeField(queryset=ContentType.objects.filter(pk=device_ct.pk), many=True)
+
+ self.assertEqual(field.to_internal_value(['dcim.device']), [device_ct])
+ with self.assertRaises(ValidationError):
+ field.to_internal_value(['dcim.device', 'dcim.site'])
diff --git a/netbox/netbox/tests/test_graphql.py b/netbox/netbox/tests/test_graphql.py
index 3988f47f5..ccce68da7 100644
--- a/netbox/netbox/tests/test_graphql.py
+++ b/netbox/netbox/tests/test_graphql.py
@@ -14,7 +14,17 @@ from strawberry.extensions import QueryDepthLimiter
from strawberry.schema.config import StrawberryConfig
from dcim.choices import LocationStatusChoices
-from dcim.models import Device, DeviceRole, DeviceType, Location, Manufacturer, Site, VirtualChassis
+from dcim.models import (
+ Device,
+ DeviceRole,
+ DeviceType,
+ Location,
+ Manufacturer,
+ Rack,
+ RackReservation,
+ Site,
+ VirtualChassis,
+)
from extras.models import TableConfig, Tag
from netbox.graphql.scalars import BigInt, BigIntScalar
from netbox.graphql.schema import Query, get_schema_extensions, schema
@@ -337,6 +347,68 @@ class GraphQLAPITestCase(APITestCase):
self.assertNotIn('errors', data)
self.assertEqual(len(data['data']['device_list']), 3)
+ def test_graphql_array_length_lookup(self):
+ """
+ The public GraphQL ``length`` array lookup must map to Django's ``len`` transform.
+ Regression test for #22766 using a standard array field (RackReservation.units).
+ """
+ self.add_permissions('dcim.view_rackreservation')
+ url = reverse('graphql')
+
+ site = Site.objects.first()
+ rack = Rack.objects.create(name='Reservation Rack', site=site)
+ RackReservation.objects.create(rack=rack, units=[1, 2], user=self.user, description='Two units')
+ RackReservation.objects.create(rack=rack, units=[3, 4, 5], user=self.user, description='Three units')
+
+ query = """
+ {
+ rack_reservation_list(filters: {units: {length: 2}}) {
+ id units
+ }
+ }
+ """
+ response = self.client.post(url, data={'query': query}, format='json', **self.header)
+ self.assertHttpStatus(response, status.HTTP_200_OK)
+ data = json.loads(response.content)
+ self.assertNotIn('errors', data)
+ self.assertEqual(len(data['data']['rack_reservation_list']), 1)
+ self.assertEqual(data['data']['rack_reservation_list'][0]['units'], [1, 2])
+
+ def test_graphql_array_lookups(self):
+ """
+ The ``contains``, ``contained_by``, and ``overlap`` array lookups share their name with the
+ corresponding ORM transform. Verify they still resolve after #22766 replaced the auto-generated
+ filter fields with a manual ``filter()`` method.
+ """
+ self.add_permissions('dcim.view_rackreservation')
+ url = reverse('graphql')
+
+ site = Site.objects.first()
+ rack = Rack.objects.create(name='Array Lookup Rack', site=site)
+ RackReservation.objects.create(rack=rack, units=[1, 2], user=self.user, description='Low units')
+ RackReservation.objects.create(rack=rack, units=[3, 4, 5], user=self.user, description='High units')
+
+ def run(lookup):
+ query = f"""
+ {{
+ rack_reservation_list(filters: {{units: {lookup}}}) {{
+ id units
+ }}
+ }}
+ """
+ response = self.client.post(url, data={'query': query}, format='json', **self.header)
+ self.assertHttpStatus(response, status.HTTP_200_OK)
+ data = json.loads(response.content)
+ self.assertNotIn('errors', data)
+ return [r['units'] for r in data['data']['rack_reservation_list']]
+
+ # contains: arrays that include all of the given elements
+ self.assertEqual(run('{contains: [1]}'), [[1, 2]])
+ # contained_by: arrays whose elements all fall within the given set
+ self.assertEqual(run('{contained_by: [1, 2, 3]}'), [[1, 2]])
+ # overlap: arrays sharing at least one element with the given set
+ self.assertCountEqual(run('{overlap: [2, 3]}'), [[1, 2], [3, 4, 5]])
+
def test_graphql_tableconfig_object_type_exposes_id(self):
"""TableConfigType.object_type must expose ContentType fields (e.g. id)."""
self.add_permissions('extras.view_tableconfig')
diff --git a/netbox/netbox/tests/test_scaffold.py b/netbox/netbox/tests/test_scaffold.py
index dce3f509e..7e0f39388 100644
--- a/netbox/netbox/tests/test_scaffold.py
+++ b/netbox/netbox/tests/test_scaffold.py
@@ -44,6 +44,11 @@ class ScaffoldInstanceTest(SimpleTestCase):
self.enterContext(patch('netbox.scaffold._config_template', return_value=template))
self.enterContext(patch('netbox.scaffold._contrib_dir', return_value=contrib_src))
+ # scaffold_instance()/main() print per-file progress to stdout (legitimate `netbox setup`
+ # CLI feedback); swallow it here so it doesn't clutter the test runner's output. Tests that
+ # assert on captured output redirect stdout themselves within the individual test method.
+ self.enterContext(contextlib.redirect_stdout(StringIO()))
+
def test_scaffolds_configuration_and_contrib_examples(self):
"""A fresh target gets conf/__init__.py, conf/configuration.py, local_requirements.txt, and contrib/."""
written = scaffold.scaffold_instance(self.target)
diff --git a/netbox/netbox/tests/test_tables.py b/netbox/netbox/tests/test_tables.py
index c4cca0d4b..a4d3661a4 100644
--- a/netbox/netbox/tests/test_tables.py
+++ b/netbox/netbox/tests/test_tables.py
@@ -2,10 +2,11 @@ from django.contrib.auth.models import AnonymousUser
from django.template import Context, Template
from django.test import RequestFactory, TestCase
+from core.models import ObjectType
from dcim.models import Device, Site
from dcim.tables import DeviceTable
-from extras.choices import CustomFieldTypeChoices
-from extras.models import CustomField
+from extras.choices import CustomFieldChoiceColorChoices, CustomFieldTypeChoices
+from extras.models import CustomField, CustomFieldChoiceSet
from netbox.tables import NetBoxTable, columns
from utilities.testing import create_tags, create_test_device, create_test_user
@@ -124,26 +125,136 @@ class TagColumnTestCase(TestCase):
class CustomFieldColumnTestCase(TestCase):
- """
- A URL custom field value is rendered directly into an href, so its scheme must be validated
- against ALLOWED_URL_SCHEMES to avoid rendering dangerous schemes (e.g. javascript:) as clickable
- links (fixes #22640).
- """
+ @classmethod
+ def setUpTestData(cls):
+ cls.object_type = ObjectType.objects.get_for_model(Site)
- def _render(self, value):
+ # Choice set containing one colored and two uncolored choices
+ cls.mixed_choice_set = CustomFieldChoiceSet.objects.create(
+ name='Mixed Choice Set',
+ extra_choices=(
+ ('a', 'Option A'),
+ ('b', 'Option B'),
+ ('c', 'Option C'),
+ ),
+ choice_colors={
+ 'a': CustomFieldChoiceColorChoices.RED,
+ },
+ )
+
+ cls.select_cf = CustomField.objects.create(
+ name='select_field',
+ type=CustomFieldTypeChoices.TYPE_SELECT,
+ choice_set=cls.mixed_choice_set,
+ required=False,
+ )
+ cls.select_cf.object_types.set([cls.object_type])
+
+ cls.multiselect_cf = CustomField.objects.create(
+ name='multiselect_field',
+ type=CustomFieldTypeChoices.TYPE_MULTISELECT,
+ choice_set=cls.mixed_choice_set,
+ required=False,
+ )
+ cls.multiselect_cf.object_types.set([cls.object_type])
+
+ def test_colored_single_select(self):
+ column = columns.CustomFieldColumn(self.select_cf)
+
+ rendered = str(column.render('a'))
+
+ self.assertIn('badge', rendered)
+ self.assertIn('text-bg-red', rendered)
+ self.assertIn('Option A', rendered)
+
+ def test_uncolored_single_select(self):
+ column = columns.CustomFieldColumn(self.select_cf)
+
+ rendered = str(column.render('b'))
+
+ self.assertEqual(rendered, 'Option B')
+ self.assertNotIn('badge', rendered)
+
+ def test_empty_multiselect(self):
+ column = columns.CustomFieldColumn(self.multiselect_cf)
+
+ rendered = column.render([])
+
+ self.assertEqual(rendered, '')
+
+ def test_multiselect_without_selected_colored_choices(self):
+ column = columns.CustomFieldColumn(self.multiselect_cf)
+
+ rendered = str(column.render(['b', 'c']))
+
+ self.assertEqual(rendered, 'Option B, Option C')
+ self.assertNotIn('badge', rendered)
+
+ def test_multiselect_with_mixed_colored_choices(self):
+ column = columns.CustomFieldColumn(self.multiselect_cf)
+
+ rendered = str(column.render(['a', 'b']))
+
+ self.assertIn('Option A', rendered)
+ self.assertIn('Option B', rendered)
+
+ self.assertIn('text-bg-red', rendered)
+ self.assertIn('text-bg-secondary', rendered)
+
+ self.assertNotIn(',', rendered)
+
+ def test_html_sensitive_multiselect_labels(self):
+ choice_set = CustomFieldChoiceSet.objects.create(
+ name='HTML Choice Set',
+ extra_choices=(
+ ('x', 'Bold Option'),
+ ('y', ""),
+ ),
+ choice_colors={
+ 'x': CustomFieldChoiceColorChoices.RED,
+ },
+ )
+
+ custom_field = CustomField.objects.create(
+ name='html_multiselect_field',
+ type=CustomFieldTypeChoices.TYPE_MULTISELECT,
+ choice_set=choice_set,
+ required=False,
+ )
+ custom_field.object_types.set([self.object_type])
+
+ column = columns.CustomFieldColumn(custom_field)
+
+ rendered = str(column.render(['x', 'y']))
+
+ self.assertIn('<b>Bold Option</b>', rendered)
+ self.assertNotIn('<', rendered)
+ self.assertIn('<script>alert('xss')</script>', rendered,)
+ self.assertNotIn('