gns3-server 3.0.2__py3-none-any.whl → 3.0.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of gns3-server might be problematic. Click here for more details.

Files changed (94) hide show
  1. {gns3_server-3.0.2.dist-info → gns3_server-3.0.4.dist-info}/METADATA +18 -18
  2. {gns3_server-3.0.2.dist-info → gns3_server-3.0.4.dist-info}/RECORD +93 -41
  3. {gns3_server-3.0.2.dist-info → gns3_server-3.0.4.dist-info}/WHEEL +1 -1
  4. gns3server/api/routes/compute/iou_nodes.py +1 -1
  5. gns3server/api/routes/controller/computes.py +1 -1
  6. gns3server/appliances/alpine-cloud.gns3a +56 -0
  7. gns3server/appliances/cisco-asav.gns3a +2 -2
  8. gns3server/appliances/cisco-c8000v.gns3a +15 -2
  9. gns3server/appliances/cisco-cat9k.gns3a +2 -2
  10. gns3server/appliances/cisco-csr1000v.gns3a +3 -3
  11. gns3server/appliances/cisco-iosv.gns3a +22 -7
  12. gns3server/appliances/cisco-iosvl2.gns3a +2 -1
  13. gns3server/appliances/cisco-iosxrv.gns3a +2 -2
  14. gns3server/appliances/cisco-iosxrv9k.gns3a +16 -133
  15. gns3server/appliances/cisco-iou-l2.gns3a +2 -0
  16. gns3server/appliances/cisco-iou-l3.gns3a +2 -0
  17. gns3server/appliances/cisco-nxosv.gns3a +2 -1
  18. gns3server/appliances/cisco-nxosv9k.gns3a +36 -343
  19. gns3server/appliances/fortianalyzer.gns3a +42 -0
  20. gns3server/appliances/fortigate.gns3a +42 -0
  21. gns3server/appliances/fortimanager.gns3a +43 -1
  22. gns3server/appliances/infix.gns3a +75 -0
  23. gns3server/appliances/stormshield-eva.gns3a +50 -0
  24. gns3server/appliances/vyos.gns3a +13 -0
  25. gns3server/compute/virtualbox/virtualbox_vm.py +29 -25
  26. gns3server/compute/vmware/vmware_vm.py +1 -2
  27. gns3server/controller/__init__.py +14 -0
  28. gns3server/crash_report.py +1 -1
  29. gns3server/custom_symbols/6wind.svg +1 -0
  30. gns3server/custom_symbols/alpine-virt-qemu.svg +46 -0
  31. gns3server/custom_symbols/arista_bybaro.svg +24 -0
  32. gns3server/custom_symbols/asterfusion-vAsterNOS.svg +48 -0
  33. gns3server/custom_symbols/cisco-fmcv.svg +498 -0
  34. gns3server/custom_symbols/cisco-ise.svg +244 -0
  35. gns3server/custom_symbols/csr1000v_bybaro.svg +38 -0
  36. gns3server/custom_symbols/cumulus_bybaro.svg +27 -0
  37. gns3server/custom_symbols/firefox.svg +1 -0
  38. gns3server/custom_symbols/fortigate_bybaro.svg +42 -0
  39. gns3server/custom_symbols/fortinet.svg +72 -0
  40. gns3server/custom_symbols/innovaphone-ap-icon.jpg +0 -0
  41. gns3server/custom_symbols/innovaphone-pbx-green.png +0 -0
  42. gns3server/custom_symbols/juniper-vmx.svg +284 -0
  43. gns3server/custom_symbols/juniper-vqfx.svg +324 -0
  44. gns3server/custom_symbols/junos_olive_bybaro.svg +18 -0
  45. gns3server/custom_symbols/linux_guest.svg +1917 -0
  46. gns3server/custom_symbols/loadbalancer.svg +380 -0
  47. gns3server/custom_symbols/loadbalancer_docker.svg +387 -0
  48. gns3server/custom_symbols/mgmt_station.svg +1967 -0
  49. gns3server/custom_symbols/mgmt_station_docker.svg +1996 -0
  50. gns3server/custom_symbols/microsoft.svg +85 -0
  51. gns3server/custom_symbols/multilayer_switch_docker.svg +332 -0
  52. gns3server/custom_symbols/multilayer_switch_green_docker.svg +344 -0
  53. gns3server/custom_symbols/multilayer_switch_red_docker.svg +344 -0
  54. gns3server/custom_symbols/opennac.png +0 -0
  55. gns3server/custom_symbols/opensuse.svg +126 -0
  56. gns3server/custom_symbols/openvswitch_bybaro.svg +26 -0
  57. gns3server/custom_symbols/ostinato-3d-icon.svg +95 -0
  58. gns3server/custom_symbols/packetfence2.png +0 -0
  59. gns3server/custom_symbols/pan-vm-fw.svg +364 -0
  60. gns3server/custom_symbols/parrotlogo.png +0 -0
  61. gns3server/custom_symbols/qemu_guest_win10_bybaro.svg +56 -0
  62. gns3server/custom_symbols/qemu_guest_win7_bybaro.svg +59 -0
  63. gns3server/custom_symbols/qemu_guest_win8_bybaro.svg +56 -0
  64. gns3server/custom_symbols/router_docker.svg +213 -0
  65. gns3server/custom_symbols/router_green.svg +206 -0
  66. gns3server/custom_symbols/router_green_docker.svg +665 -0
  67. gns3server/custom_symbols/router_red.svg +206 -0
  68. gns3server/custom_symbols/router_red_docker.svg +213 -0
  69. gns3server/custom_symbols/rpi.png +0 -0
  70. gns3server/custom_symbols/securityonion-logo.png +0 -0
  71. gns3server/custom_symbols/shieldedtux.png +0 -0
  72. gns3server/custom_symbols/steelhead-vcx.png +0 -0
  73. gns3server/custom_symbols/stormshield.png +0 -0
  74. gns3server/custom_symbols/ubuntu.svg +1750 -0
  75. gns3server/custom_symbols/vRIN.svg +316 -0
  76. gns3server/custom_symbols/vsrx_bybaro.svg +44 -0
  77. gns3server/custom_symbols/vyos.svg +35 -0
  78. gns3server/main.py +40 -2
  79. gns3server/schemas/compute/docker_nodes.py +2 -2
  80. gns3server/schemas/compute/dynamips_nodes.py +5 -5
  81. gns3server/schemas/compute/iou_nodes.py +2 -2
  82. gns3server/schemas/controller/templates/docker_templates.py +2 -2
  83. gns3server/schemas/controller/templates/dynamips_templates.py +19 -19
  84. gns3server/schemas/controller/templates/iou_templates.py +4 -4
  85. gns3server/schemas/controller/templates/qemu_templates.py +1 -1
  86. gns3server/schemas/controller/users.py +3 -3
  87. gns3server/server.py +23 -38
  88. gns3server/static/web-ui/index.html +1 -1
  89. gns3server/static/web-ui/main.87178dd64c9c79ba.js +1 -0
  90. gns3server/version.py +2 -2
  91. gns3server/static/web-ui/main.62c99707e4709a56.js +0 -1
  92. {gns3_server-3.0.2.dist-info → gns3_server-3.0.4.dist-info}/LICENSE +0 -0
  93. {gns3_server-3.0.2.dist-info → gns3_server-3.0.4.dist-info}/entry_points.txt +0 -0
  94. {gns3_server-3.0.2.dist-info → gns3_server-3.0.4.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,316 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ width="70"
13
+ height="70"
14
+ viewBox="0 0 70.000002 70.000001"
15
+ id="svg2"
16
+ version="1.1"
17
+ inkscape:version="0.91 r13725"
18
+ sodipodi:docname="vRIN.svg">
19
+ <defs
20
+ id="defs4">
21
+ <marker
22
+ inkscape:stockid="Arrow2Lend"
23
+ orient="auto"
24
+ refY="0"
25
+ refX="0"
26
+ id="marker4924"
27
+ style="overflow:visible"
28
+ inkscape:isstock="true">
29
+ <path
30
+ id="path4926"
31
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
32
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
33
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
34
+ inkscape:connector-curvature="0" />
35
+ </marker>
36
+ <marker
37
+ inkscape:stockid="Arrow2Mend"
38
+ orient="auto"
39
+ refY="0"
40
+ refX="0"
41
+ id="Arrow2Mend"
42
+ style="overflow:visible"
43
+ inkscape:isstock="true">
44
+ <path
45
+ id="path4185"
46
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
47
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
48
+ transform="scale(-0.6,-0.6)"
49
+ inkscape:connector-curvature="0" />
50
+ </marker>
51
+ <marker
52
+ inkscape:stockid="TriangleOutL"
53
+ orient="auto"
54
+ refY="0"
55
+ refX="0"
56
+ id="TriangleOutL"
57
+ style="overflow:visible"
58
+ inkscape:isstock="true">
59
+ <path
60
+ id="path4300"
61
+ d="m 5.77,0 -8.65,5 0,-10 8.65,5 z"
62
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1pt;stroke-opacity:1"
63
+ transform="scale(0.8,0.8)"
64
+ inkscape:connector-curvature="0" />
65
+ </marker>
66
+ <marker
67
+ inkscape:stockid="Arrow1Lend"
68
+ orient="auto"
69
+ refY="0"
70
+ refX="0"
71
+ id="Arrow1Lend"
72
+ style="overflow:visible"
73
+ inkscape:isstock="true">
74
+ <path
75
+ id="path4161"
76
+ d="M 0,0 5,-5 -12.5,0 5,5 0,0 Z"
77
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1pt;stroke-opacity:1"
78
+ transform="matrix(-0.8,0,0,-0.8,-10,0)"
79
+ inkscape:connector-curvature="0" />
80
+ </marker>
81
+ <marker
82
+ inkscape:stockid="Arrow2Lend"
83
+ orient="auto"
84
+ refY="0"
85
+ refX="0"
86
+ id="marker4782"
87
+ style="overflow:visible"
88
+ inkscape:isstock="true">
89
+ <path
90
+ id="path4784"
91
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
92
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
93
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
94
+ inkscape:connector-curvature="0" />
95
+ </marker>
96
+ <marker
97
+ inkscape:stockid="Arrow2Lend"
98
+ orient="auto"
99
+ refY="0"
100
+ refX="0"
101
+ id="Arrow2Lend"
102
+ style="overflow:visible"
103
+ inkscape:isstock="true">
104
+ <path
105
+ id="path4179"
106
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
107
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
108
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
109
+ inkscape:connector-curvature="0" />
110
+ </marker>
111
+ <marker
112
+ inkscape:stockid="Arrow2Lend"
113
+ orient="auto"
114
+ refY="0"
115
+ refX="0"
116
+ id="marker4924-8"
117
+ style="overflow:visible"
118
+ inkscape:isstock="true">
119
+ <path
120
+ inkscape:connector-curvature="0"
121
+ id="path4926-5"
122
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
123
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
124
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
125
+ </marker>
126
+ <marker
127
+ inkscape:stockid="Arrow2Lend"
128
+ orient="auto"
129
+ refY="0"
130
+ refX="0"
131
+ id="marker4924-8-2"
132
+ style="overflow:visible"
133
+ inkscape:isstock="true">
134
+ <path
135
+ inkscape:connector-curvature="0"
136
+ id="path4926-5-7"
137
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
138
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
139
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
140
+ </marker>
141
+ <marker
142
+ inkscape:stockid="Arrow2Lend"
143
+ orient="auto"
144
+ refY="0"
145
+ refX="0"
146
+ id="marker4924-8-20"
147
+ style="overflow:visible"
148
+ inkscape:isstock="true">
149
+ <path
150
+ inkscape:connector-curvature="0"
151
+ id="path4926-5-8"
152
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
153
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
154
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
155
+ </marker>
156
+ <marker
157
+ inkscape:stockid="Arrow2Lend"
158
+ orient="auto"
159
+ refY="0"
160
+ refX="0"
161
+ id="marker4924-7"
162
+ style="overflow:visible"
163
+ inkscape:isstock="true">
164
+ <path
165
+ inkscape:connector-curvature="0"
166
+ id="path4926-7"
167
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
168
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
169
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
170
+ </marker>
171
+ <marker
172
+ inkscape:stockid="Arrow2Lend"
173
+ orient="auto"
174
+ refY="0"
175
+ refX="0"
176
+ id="marker4924-8-2-9"
177
+ style="overflow:visible"
178
+ inkscape:isstock="true">
179
+ <path
180
+ inkscape:connector-curvature="0"
181
+ id="path4926-5-7-4"
182
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
183
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
184
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
185
+ </marker>
186
+ <marker
187
+ inkscape:stockid="Arrow2Lend"
188
+ orient="auto"
189
+ refY="0"
190
+ refX="0"
191
+ id="marker4924-8-20-9"
192
+ style="overflow:visible"
193
+ inkscape:isstock="true">
194
+ <path
195
+ inkscape:connector-curvature="0"
196
+ id="path4926-5-8-8"
197
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
198
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
199
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
200
+ </marker>
201
+ <marker
202
+ inkscape:stockid="Arrow2Lend"
203
+ orient="auto"
204
+ refY="0"
205
+ refX="0"
206
+ id="marker4924-7-5"
207
+ style="overflow:visible"
208
+ inkscape:isstock="true">
209
+ <path
210
+ inkscape:connector-curvature="0"
211
+ id="path4926-7-0"
212
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
213
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
214
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
215
+ </marker>
216
+ <marker
217
+ inkscape:stockid="Arrow2Lend"
218
+ orient="auto"
219
+ refY="0"
220
+ refX="0"
221
+ id="marker4924-7-58"
222
+ style="overflow:visible"
223
+ inkscape:isstock="true">
224
+ <path
225
+ inkscape:connector-curvature="0"
226
+ id="path4926-7-9"
227
+ style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
228
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
229
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
230
+ </marker>
231
+ </defs>
232
+ <sodipodi:namedview
233
+ id="base"
234
+ pagecolor="#ffffff"
235
+ bordercolor="#666666"
236
+ borderopacity="1.0"
237
+ inkscape:pageopacity="0.0"
238
+ inkscape:pageshadow="2"
239
+ inkscape:zoom="8"
240
+ inkscape:cx="13.588207"
241
+ inkscape:cy="41.315689"
242
+ inkscape:document-units="px"
243
+ inkscape:current-layer="layer1"
244
+ showgrid="false"
245
+ units="px"
246
+ inkscape:window-width="1920"
247
+ inkscape:window-height="1016"
248
+ inkscape:window-x="0"
249
+ inkscape:window-y="0"
250
+ inkscape:window-maximized="1"
251
+ fit-margin-top="0"
252
+ fit-margin-left="0"
253
+ fit-margin-right="0"
254
+ fit-margin-bottom="0" />
255
+ <metadata
256
+ id="metadata7">
257
+ <rdf:RDF>
258
+ <cc:Work
259
+ rdf:about="">
260
+ <dc:format>image/svg+xml</dc:format>
261
+ <dc:type
262
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
263
+ <dc:title />
264
+ </cc:Work>
265
+ </rdf:RDF>
266
+ </metadata>
267
+ <g
268
+ inkscape:label="vRIN"
269
+ inkscape:groupmode="layer"
270
+ id="layer1"
271
+ style="display:inline"
272
+ transform="translate(0,-892.46783)">
273
+ <circle
274
+ style="fill:#1392e8;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
275
+ id="path3346"
276
+ cx="35"
277
+ cy="927.48718"
278
+ r="35" />
279
+ <circle
280
+ style="display:inline;fill:#91c2fb;fill-opacity:1;stroke:none"
281
+ id="path4149"
282
+ r="30.676126"
283
+ cy="927.48718"
284
+ cx="35.233734" />
285
+ <path
286
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.93489146;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4924-7)"
287
+ d="m 22.32053,907.09486 18.69783,0"
288
+ id="path4152"
289
+ inkscape:connector-curvature="0" />
290
+ <path
291
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.93489146;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4924-8-2-9)"
292
+ d="m 38.48734,920.78412 18.69783,0"
293
+ id="path4152-9-9"
294
+ inkscape:connector-curvature="0" />
295
+ <path
296
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.93489146;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4924-8-20-9)"
297
+ d="m 38.6042,934.69063 18.69783,0"
298
+ id="path4152-9-91"
299
+ inkscape:connector-curvature="0" />
300
+ <path
301
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.93489146;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4924-7-5)"
302
+ d="m -265.0259,179.09455 18.69783,0"
303
+ id="path4152-1"
304
+ inkscape:connector-curvature="0" />
305
+ <path
306
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.93489146;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4924-7-58)"
307
+ d="m 22.32053,947.84486 18.69783,0"
308
+ id="path4152-2"
309
+ inkscape:connector-curvature="0" />
310
+ </g>
311
+ <path
312
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:8;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:3;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker4924-8)"
313
+ d="m 191.34167,32.035246 160,0"
314
+ id="path4152-9"
315
+ inkscape:connector-curvature="0" />
316
+ </svg>
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <svg id="svg1998" width="55.044277" height="63.620274" version="1.0" xmlns="http://www.w3.org/2000/svg">
3
+ <title id="title3303">ASA</title>
4
+ <defs id="defs2001">
5
+ <marker orient="auto" refY="0" refX="0" id="Arrow2Lstart" style="overflow:visible">
6
+ <path id="path11918" style="font-size:12px;fill-rule:evenodd;stroke-width:0.73333335;stroke-linejoin:round" d="M 11.403143,4.732916 -1.416553,0.01878889 11.403144,-4.6953372 c -2.0480517,2.7832182 -2.0362508,6.5911436 -10e-7,9.4282532 z"/>
7
+ </marker>
8
+ <marker orient="auto" refY="0" refX="0" id="Arrow1Send" style="overflow:visible">
9
+ <path id="path11921" d="M -1.28,0 -2.3466667,1.0666667 1.3866667,0 -2.3466667,-1.0666667 Z" style="fill-rule:evenodd;stroke:#000000;stroke-width:0.21333334pt;marker-start:none"/>
10
+ </marker>
11
+ <marker orient="auto" refY="0" refX="0" id="Arrow1Lstart" style="overflow:visible">
12
+ <path id="path11936" d="M 10.666667,0 14.933333,-4.2666667 0,0 14.933333,4.2666667 Z" style="fill-rule:evenodd;stroke:#000000;stroke-width:0.85333335pt;marker-start:none"/>
13
+ </marker>
14
+ <linearGradient id="linearGradient6875" gradientUnits="userSpaceOnUse" gradientTransform="matrix(26.557584,0,0,27.099161,-9.2951537,-5.3720715)" x1="2.1178279" y1="0.30649999" x2="-0.4954865" y2="0.30649999">
15
+ <stop style="stop-color:#6e8caa;stop-opacity:1;" offset="0" id="stop8333"/>
16
+ <stop style="stop-color:#dde3ef;stop-opacity:1;" offset="1" id="stop8335"/>
17
+ </linearGradient>
18
+ </defs>
19
+ <path id="path11907" d="m 2.277686,60.343382 v 3.25342 h 45.379267 v -3.25342 H 2.277686" style="fill:#000000;fill-opacity:0.39215686;stroke:none;stroke-width:1.06666672"/>
20
+ <path id="path11020" d="M 47.765643,8.1809483 55.044279,1.3761504 55.028695,57.643455 47.654539,63.62027 47.765638,8.1809483" style="fill:#000000;fill-opacity:0.39215686;stroke:none;stroke-width:1.06666672"/>
21
+ <path id="path2037" d="M 0.47692057,5.3149867 V 49.230745 H 47.778461 V 5.3149867 H 0.47692057" style="fill:#6e8caa;fill-opacity:1;stroke:none;stroke-width:1.06666672"/>
22
+ <path id="path2041" d="M 0,5.8198859 6.0551291,0.04776213 H 53.885337 L 47.777093,5.8198859 H 0" style="fill:url(#linearGradient6875);fill-opacity:1;stroke:none;stroke-width:1.06666672"/>
23
+ <path id="path2045" d="M 47.635174,5.2911061 53.670405,0 v 43.968341 l -6.035231,5.291106 V 5.2911061" style="fill:#6e8296;fill-opacity:1;stroke:none;stroke-width:1.06666672"/>
24
+ <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06040335" d="m 68.017411,-124.00618 h 32.336679 v -2.5979 l 6.95208,5.19579 -6.95208,5.62568 v -2.59789 H 68.017411 v -5.62568" id="path39"/>
25
+ <path style="fill:#000000;stroke:#ffffff;stroke-width:1.06040335;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 56.893321,-121.40829 H 70.452314" id="path61"/>
26
+ <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06040335" d="M 16.19484,61.82555 H 0.42243277 V 55.665507 H 16.19484 v 6.160043" id="path99"/>
27
+ <path style="fill:#000000;stroke:#e1e1e1;stroke-width:0.47963932;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 16.19484,61.82555 H 0.57567743" id="path101"/>
28
+ <path style="fill:#000000;stroke:#e1e1e1;stroke-width:0.47819233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 0.66977537,55.665507 H 16.19484 v 6.160043" id="path103"/>
29
+ <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#e1e1e1;stroke-width:0.47819233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 47.780883,61.82555 H 31.991982 v -6.160043 h 15.788901 v 6.160043" id="path105"/>
30
+ <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#e1e1e1;stroke-width:0.47819233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 40.280128,61.82555 H 24.474743 v -6.160043 h 15.805385 v 6.160043" id="path107"/>
31
+ <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#e1e1e1;stroke-width:0.47819233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 24.474743,61.82555 H 8.6940847 V 55.665507 H 24.474743 v 6.160043" id="path109"/>
32
+ <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#e1e1e1;stroke-width:0.50290239;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 50.792321,53.512289 2.638353,-2.735375 v -6.805626 l -2.638353,2.720386 v 6.820615" id="path111"/>
33
+ <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#e1e1e1;stroke-width:0.47819233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 50.792321,59.372711 2.638353,-2.166775 v -6.166822 l -2.638353,2.160008 v 6.173589" id="path125"/>
34
+ <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#e1e1e1;stroke-width:0.47819233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 47.780883,61.82555 3.011438,-2.452839 v -6.173589 l -3.011438,2.466385 v 6.160043" id="path127"/>
35
+ <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#e1e1e1;stroke-width:0.47819233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 31.991982,55.665507 H 16.19484 v -6.166811 h 15.797142 v 6.166811" id="path133"/>
36
+ <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.06040335" d="M 16.19484,55.665507 H 0.42243277 V 49.498685 H 16.19484 v 6.166822" id="path135"/>
37
+ <path style="fill:#000000;stroke:#e1e1e1;stroke-width:0.48108193;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 16.19484,55.665507 H 0.48158037" id="path137"/>
38
+ <path style="fill:#000000;stroke:#e1e1e1;stroke-width:0.48039833;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 0.52620409,49.498696 H 16.19484 v 6.166811" id="path139"/>
39
+ <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#e1e1e1;stroke-width:0.47819233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="M 47.780883,55.665507 H 31.991982 v -6.166811 h 15.788901 v 6.166811" id="path141"/>
40
+ <path style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#e1e1e1;stroke-width:0.48692337;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1" d="m 47.780883,55.665507 3.011438,-2.557269 v -6.387053 l -3.011438,2.550268 v 6.394054" id="path145"/>
41
+ <path d="M 24.272 46.546 C 34.337 46.546 42.543 38.338 42.543 28.274 C 42.543 18.21 34.337 10 24.272 10 C 14.207 10 6 18.21 6 28.274 C 6 38.338 14.207 46.546 24.272 46.546 Z" fill="#12537c"/>
42
+ <path d="M 24.001 48.003 C 35.017 48.003 44 39.018 44 28.003 C 44 16.987 35.017 8 24.001 8 C 12.984 8 4 16.987 4 28.003 C 4 39.018 12.984 48.003 24.001 48.003 Z" stroke="#bcbec0" stroke-linecap="butt" stroke-linejoin="miter" stroke-width="1.125" style="fill: rgb(18, 83, 124);"/>
43
+ <path d="M 22.025 26.701 L 20.936 26.701 L 8.503 26.701 L 8.503 23.706 L 19.439 23.706 L 19.439 17.324 L 17.836 17.324 L 19.397 14.621 L 20.604 12.533 L 20.958 11.92 L 22.52 14.621 L 24.078 17.324 L 23.366 17.324 L 22.434 17.324 L 22.434 25.203 L 22.434 26.701 L 22.025 26.701 L 22.025 26.701 Z M 34.665 27.673 L 34.665 26.701 L 26.887 26.701 L 25.39 26.701 L 25.39 26.289 L 25.39 25.203 L 25.39 12.858 L 28.385 12.858 L 28.385 23.705 L 34.664 23.705 L 34.666 22.141 L 37.366 23.703 L 39.453 24.907 L 39.248 25.264 L 39.453 24.907 L 40.069 25.263 L 37.366 26.824 L 34.664 28.381 L 34.664 27.673 L 34.665 27.673 Z M 19.849 43.677 L 19.849 43.267 L 20.261 43.267 L 19.849 43.267 L 19.849 43.677 L 19.439 43.677 L 19.439 32.828 L 13.334 32.828 L 13.334 34.468 L 10.633 32.907 L 7.931 31.348 L 10.633 29.787 L 13.334 28.228 L 13.334 28.937 L 13.334 29.835 L 20.936 29.835 L 22.434 29.835 L 22.434 30.245 L 22.434 31.331 L 22.434 43.677 L 19.849 43.677 L 19.849 43.677 Z M 26.886 43.239 L 27.242 43.034 L 26.886 43.239 L 26.886 43.239 Z M 25.325 41.358 L 23.766 38.654 L 24.477 38.654 L 25.39 38.653 L 25.39 31.331 L 25.39 29.835 L 25.8 29.835 L 26.887 29.835 L 39.32 29.835 L 39.32 32.828 L 28.386 32.828 L 28.386 38.655 L 30.006 38.655 L 28.446 41.359 L 27.242 43.444 L 26.887 44.062 L 25.325 41.358 L 25.325 41.358 Z" fill="white"/>
44
+ </svg>
@@ -0,0 +1,35 @@
1
+ <svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <rect height="60" width="60" x="0" y="0" style="fill:#ffffff" />
3
+ <path d="M43.8 7.2H52.8V37.2H60V0H43.8V7.2Z" fill="url(#paint0_linear)"/>
4
+ <path d="M37.2 0H0V16.2H7.2V7.2H37.2V0Z" fill="url(#paint1_linear)"/>
5
+ <path d="M7.2 22.8H0V60H16.2V52.8H7.2V22.8Z" fill="url(#paint2_linear)"/>
6
+ <path d="M22.8 52.8V60H60V43.8H52.8V52.8H22.8Z" fill="url(#paint3_linear)"/>
7
+ <path d="M13.2 13.2H20.4L33.6 46.8H26.4L13.2 13.2Z" fill="url(#paint4_linear)"/>
8
+ <path d="M46.8 13.2H39.6L26.4 46.8H33.6L46.8 13.2Z" fill="url(#paint5_linear)"/>
9
+ <defs>
10
+ <linearGradient id="paint0_linear" x1="0" y1="0" x2="60" y2="60" gradientUnits="userSpaceOnUse">
11
+ <stop stop-color="#FFBF12"/>
12
+ <stop offset="1" stop-color="#FF9000"/>
13
+ </linearGradient>
14
+ <linearGradient id="paint1_linear" x1="0" y1="0" x2="60" y2="60" gradientUnits="userSpaceOnUse">
15
+ <stop stop-color="#FFBF12"/>
16
+ <stop offset="1" stop-color="#FF9000"/>
17
+ </linearGradient>
18
+ <linearGradient id="paint2_linear" x1="0" y1="0" x2="60" y2="60" gradientUnits="userSpaceOnUse">
19
+ <stop stop-color="#FFBF12"/>
20
+ <stop offset="1" stop-color="#FF9000"/>
21
+ </linearGradient>
22
+ <linearGradient id="paint3_linear" x1="0" y1="0" x2="60" y2="60" gradientUnits="userSpaceOnUse">
23
+ <stop stop-color="#FFBF12"/>
24
+ <stop offset="1" stop-color="#FF9000"/>
25
+ </linearGradient>
26
+ <linearGradient id="paint4_linear" x1="0" y1="0" x2="60" y2="60" gradientUnits="userSpaceOnUse">
27
+ <stop stop-color="#FFBF12"/>
28
+ <stop offset="1" stop-color="#FF9000"/>
29
+ </linearGradient>
30
+ <linearGradient id="paint5_linear" x1="0" y1="0" x2="60" y2="60" gradientUnits="userSpaceOnUse">
31
+ <stop stop-color="#FFBF12"/>
32
+ <stop offset="1" stop-color="#FF9000"/>
33
+ </linearGradient>
34
+ </defs>
35
+ </svg>
gns3server/main.py CHANGED
@@ -30,6 +30,7 @@ import gns3server.utils.get_resource
30
30
  import os
31
31
  import sys
32
32
  import asyncio
33
+ import argparse
33
34
 
34
35
 
35
36
  def daemonize():
@@ -59,6 +60,42 @@ def daemonize():
59
60
  print("Second fork failed: %d (%s)\n" % (e.errno, e.strerror), file=sys.stderr)
60
61
  sys.exit(1)
61
62
 
63
+ def parse_arguments(argv):
64
+ """
65
+ Parse command line arguments
66
+
67
+ :param argv: Array of command line arguments
68
+ """
69
+ from gns3server.version import __version__
70
+ parser = argparse.ArgumentParser(description=f"GNS3 server version {__version__}")
71
+ parser.add_argument("-v", "--version", help="show the version", action="version", version=__version__)
72
+ parser.add_argument("--host", help="run on the given host/IP address")
73
+ parser.add_argument("--port", help="run on the given port", type=int)
74
+ parser.add_argument("--ssl", action="store_true", help="run in SSL mode")
75
+ parser.add_argument("--config", help="Configuration file")
76
+ parser.add_argument("--certfile", help="SSL cert file")
77
+ parser.add_argument("--certkey", help="SSL key file")
78
+ parser.add_argument("-L", "--local", action="store_true", help="local mode (allows some insecure operations)")
79
+ parser.add_argument(
80
+ "-A", "--allow", action="store_true", help="allow remote connections to local console ports"
81
+ )
82
+ parser.add_argument("-q", "--quiet", default=False, action="store_true", help="do not show logs on stdout")
83
+ parser.add_argument("-d", "--debug", default=False, action="store_true", help="show debug logs")
84
+ parser.add_argument("--logfile", "--log", help="send output to logfile instead of console")
85
+ parser.add_argument("--logmaxsize", default=10000000, help="maximum logfile size in bytes (default is 10MB)")
86
+ parser.add_argument(
87
+ "--logbackupcount", default=10, help="number of historical log files to keep (default is 10)"
88
+ )
89
+ parser.add_argument(
90
+ "--logcompression", default=False, action="store_true", help="compress inactive (historical) logs"
91
+ )
92
+ parser.add_argument("--daemon", action="store_true", help="start as a daemon")
93
+ parser.add_argument("--pid", help="store process pid")
94
+ parser.add_argument("--profile", help="Settings profile (blank will use default settings files)")
95
+
96
+ args = parser.parse_args(argv)
97
+ return parser, args
98
+
62
99
 
63
100
  def main():
64
101
  """
@@ -69,10 +106,11 @@ def main():
69
106
  raise SystemExit("Windows is not a supported platform to run the GNS3 server")
70
107
  if "--daemon" in sys.argv:
71
108
  daemonize()
72
- from gns3server.server import Server
73
109
 
74
110
  try:
75
- asyncio.run(Server().run())
111
+ parser, args = parse_arguments(sys.argv[1:])
112
+ from gns3server.server import Server
113
+ asyncio.run(Server().run(parser, args))
76
114
  except KeyboardInterrupt:
77
115
  pass
78
116
 
@@ -43,8 +43,8 @@ class DockerBase(BaseModel):
43
43
  environment: Optional[str] = Field(None, description="Docker environment variables")
44
44
  extra_hosts: Optional[str] = Field(None, description="Docker extra hosts (added to /etc/hosts)")
45
45
  extra_volumes: Optional[List[str]] = Field(None, description="Additional directories to make persistent")
46
- memory: Optional[int] = Field(None, description="Maximum amount of memory the container can use in MB")
47
- cpus: Optional[float] = Field(None, description="Maximum amount of CPU resources the container can use")
46
+ memory: Optional[int] = Field(None, ge=0, description="Maximum amount of memory the container can use in MB")
47
+ cpus: Optional[float] = Field(None, ge=0, description="Maximum amount of CPU resources the container can use")
48
48
  custom_adapters: Optional[List[CustomAdapter]] = Field(None, description="Custom adapters")
49
49
 
50
50
 
@@ -124,8 +124,8 @@ class DynamipsBase(BaseModel):
124
124
  name: Optional[str] = None
125
125
  dynamips_id: Optional[int] = Field(None, description="Dynamips internal ID")
126
126
  platform: Optional[DynamipsPlatform] = Field(None, description="Cisco router platform")
127
- ram: Optional[int] = Field(None, description="Amount of RAM in MB")
128
- nvram: Optional[int] = Field(None, description="Amount of NVRAM in KB")
127
+ ram: Optional[int] = Field(None, gt=0, description="Amount of RAM in MB")
128
+ nvram: Optional[int] = Field(None, gt=0, description="Amount of NVRAM in KB")
129
129
  image: Optional[str] = Field(None, description="Path to the IOS image")
130
130
  image_md5sum: Optional[str] = Field(None, description="Checksum of the IOS image")
131
131
  usage: Optional[str] = Field(None, description="How to use the Dynamips VM")
@@ -139,8 +139,8 @@ class DynamipsBase(BaseModel):
139
139
  idlemax: Optional[int] = Field(None, description="Idlemax value")
140
140
  idlesleep: Optional[int] = Field(None, description="Idlesleep value")
141
141
  exec_area: Optional[int] = Field(None, description="Exec area value")
142
- disk0: Optional[int] = Field(None, description="Disk0 size in MB")
143
- disk1: Optional[int] = Field(None, description="Disk1 size in MB")
142
+ disk0: Optional[int] = Field(None, ge=0, description="Disk0 size in MB")
143
+ disk1: Optional[int] = Field(None, ge=0, description="Disk1 size in MB")
144
144
  auto_delete_disks: Optional[bool] = Field(None, description="Automatically delete nvram and disk files")
145
145
  console: Optional[int] = Field(None, gt=0, le=65535, description="Console TCP port")
146
146
  console_type: Optional[DynamipsConsoleType] = Field(None, description="Console type")
@@ -176,7 +176,7 @@ class DynamipsCreate(DynamipsBase):
176
176
  name: str
177
177
  platform: str = Field(..., description="Cisco router platform", pattern="^c[0-9]{4}$")
178
178
  image: str = Field(..., description="Path to the IOS image")
179
- ram: int = Field(..., description="Amount of RAM in MB")
179
+ ram: int = Field(..., gt=0, description="Amount of RAM in MB")
180
180
 
181
181
 
182
182
  class DynamipsUpdate(DynamipsBase):
@@ -36,8 +36,8 @@ class IOUBase(BaseModel):
36
36
  md5sum: Optional[str] = Field(None, description="IOU executable checksum")
37
37
  serial_adapters: Optional[int] = Field(None, description="How many serial adapters are connected to IOU")
38
38
  ethernet_adapters: Optional[int] = Field(None, description="How many Ethernet adapters are connected to IOU")
39
- ram: Optional[int] = Field(None, description="Amount of RAM in MB")
40
- nvram: Optional[int] = Field(None, description="Amount of NVRAM in KB")
39
+ ram: Optional[int] = Field(None, gt=0, description="Amount of RAM in MB")
40
+ nvram: Optional[int] = Field(None, gt=0, description="Amount of NVRAM in KB")
41
41
  l1_keepalives: Optional[bool] = Field(None, description="Use default IOU values")
42
42
  use_default_iou_values: Optional[bool] = Field(None, description="Always up Ethernet interfaces")
43
43
  startup_config_content: Optional[str] = Field(None, description="Content of IOU startup configuration file")
@@ -49,8 +49,8 @@ class DockerTemplate(TemplateBase):
49
49
  )
50
50
  extra_hosts: Optional[str] = Field("", description="Docker extra hosts (added to /etc/hosts)")
51
51
  extra_volumes: Optional[List] = Field([], description="Additional directories to make persistent")
52
- memory: Optional[int] = Field(0, description="Maximum amount of memory the container can use in MB")
53
- cpus: Optional[float] = Field(0, description="Maximum amount of CPU resources the container can use")
52
+ memory: Optional[int] = Field(0, ge=0, description="Maximum amount of memory the container can use in MB")
53
+ cpus: Optional[float] = Field(0, ge=0, description="Maximum amount of CPU resources the container can use")
54
54
  custom_adapters: Optional[List[CustomAdapter]] = Field(default_factory=list, description="Custom adapters")
55
55
 
56
56
 
@@ -37,7 +37,7 @@ class DynamipsTemplate(TemplateBase):
37
37
  symbol: Optional[str] = "router"
38
38
  platform: DynamipsPlatform = Field(..., description="Cisco router platform")
39
39
  image: str = Field(..., description="Path to the IOS image")
40
- exec_area: Optional[int] = Field(64, description="Exec area value")
40
+ exec_area: Optional[int] = Field(64, ge=0, description="Exec area value")
41
41
  mmap: Optional[bool] = Field(True, description="MMAP feature")
42
42
  mac_addr: Optional[str] = Field(
43
43
  "", description="Base MAC address", pattern="^([0-9a-fA-F]{4}\\.){2}[0-9a-fA-F]{4}$|^$"
@@ -46,10 +46,10 @@ class DynamipsTemplate(TemplateBase):
46
46
  startup_config: Optional[str] = Field("ios_base_startup-config.txt", description="IOS startup configuration file")
47
47
  private_config: Optional[str] = Field("", description="IOS private configuration file")
48
48
  idlepc: Optional[str] = Field("", description="Idle-PC value", pattern="^(0x[0-9a-fA-F]+)?$|^$")
49
- idlemax: Optional[int] = Field(500, description="Idlemax value")
50
- idlesleep: Optional[int] = Field(30, description="Idlesleep value")
51
- disk0: Optional[int] = Field(0, description="Disk0 size in MB")
52
- disk1: Optional[int] = Field(0, description="Disk1 size in MB")
49
+ idlemax: Optional[int] = Field(500, ge=0, description="Idlemax value")
50
+ idlesleep: Optional[int] = Field(30, ge=0, description="Idlesleep value")
51
+ disk0: Optional[int] = Field(0, ge=0, description="Disk0 size in MB")
52
+ disk1: Optional[int] = Field(0, ge=0, description="Disk1 size in MB")
53
53
  auto_delete_disks: Optional[bool] = Field(False, description="Automatically delete nvram and disk files")
54
54
  console_type: Optional[DynamipsConsoleType] = Field(DynamipsConsoleType.telnet, description="Console type")
55
55
  console_auto_start: Optional[bool] = Field(
@@ -70,8 +70,8 @@ class DynamipsTemplate(TemplateBase):
70
70
 
71
71
  class C7200DynamipsTemplate(DynamipsTemplate):
72
72
 
73
- ram: Optional[int] = Field(512, description="Amount of RAM in MB")
74
- nvram: Optional[int] = Field(512, description="Amount of NVRAM in KB")
73
+ ram: Optional[int] = Field(512, gt=0, description="Amount of RAM in MB")
74
+ nvram: Optional[int] = Field(512, gt=0, description="Amount of NVRAM in KB")
75
75
  npe: Optional[DynamipsNPE] = Field(DynamipsNPE.npe_400, description="NPE model")
76
76
  midplane: Optional[DynamipsMidplane] = Field(DynamipsMidplane.vxr, description="Midplane model")
77
77
  sparsemem: Optional[bool] = Field(True, description="Sparse memory feature")
@@ -85,8 +85,8 @@ class C7200DynamipsTemplateUpdate(C7200DynamipsTemplate):
85
85
 
86
86
  class C3725DynamipsTemplate(DynamipsTemplate):
87
87
 
88
- ram: Optional[int] = Field(128, description="Amount of RAM in MB")
89
- nvram: Optional[int] = Field(256, description="Amount of NVRAM in KB")
88
+ ram: Optional[int] = Field(128, gt=0, description="Amount of RAM in MB")
89
+ nvram: Optional[int] = Field(256, gt=0, description="Amount of NVRAM in KB")
90
90
  iomem: Optional[int] = Field(5, ge=0, le=100, description="I/O memory percentage")
91
91
  sparsemem: Optional[bool] = Field(True, description="Sparse memory feature")
92
92
 
@@ -99,8 +99,8 @@ class C3725DynamipsTemplateUpdate(C3725DynamipsTemplate):
99
99
 
100
100
  class C3745DynamipsTemplate(DynamipsTemplate):
101
101
 
102
- ram: Optional[int] = Field(256, description="Amount of RAM in MB")
103
- nvram: Optional[int] = Field(256, description="Amount of NVRAM in KB")
102
+ ram: Optional[int] = Field(256, gt=0, description="Amount of RAM in MB")
103
+ nvram: Optional[int] = Field(256, gt=0, description="Amount of NVRAM in KB")
104
104
  iomem: Optional[int] = Field(5, ge=0, le=100, description="I/O memory percentage")
105
105
  sparsemem: Optional[bool] = Field(True, description="Sparse memory feature")
106
106
 
@@ -121,8 +121,8 @@ class C3600ChassisType(str, Enum):
121
121
  class C3600DynamipsTemplate(DynamipsTemplate):
122
122
 
123
123
  chassis: Optional[C3600ChassisType] = Field("c3660", description="Chassis type")
124
- ram: Optional[int] = Field(192, description="Amount of RAM in MB")
125
- nvram: Optional[int] = Field(128, description="Amount of NVRAM in KB")
124
+ ram: Optional[int] = Field(192, gt=0, description="Amount of RAM in MB")
125
+ nvram: Optional[int] = Field(128, gt=0, description="Amount of NVRAM in KB")
126
126
  iomem: Optional[int] = Field(5, ge=0, le=100, description="I/O memory percentage")
127
127
  sparsemem: Optional[bool] = Field(True, description="Sparse memory feature")
128
128
 
@@ -135,8 +135,8 @@ class C3600DynamipsTemplateUpdate(C3600DynamipsTemplate):
135
135
 
136
136
  class C2691DynamipsTemplate(DynamipsTemplate):
137
137
 
138
- ram: Optional[int] = Field(192, description="Amount of RAM in MB")
139
- nvram: Optional[int] = Field(256, description="Amount of NVRAM in KB")
138
+ ram: Optional[int] = Field(192, gt=0, description="Amount of RAM in MB")
139
+ nvram: Optional[int] = Field(256, gt=0, description="Amount of NVRAM in KB")
140
140
  iomem: Optional[int] = Field(5, ge=0, le=100, description="I/O memory percentage")
141
141
  sparsemem: Optional[bool] = Field(True, description="Sparse memory feature")
142
142
 
@@ -163,8 +163,8 @@ class C2600ChassisType(str, Enum):
163
163
  class C2600DynamipsTemplate(DynamipsTemplate):
164
164
 
165
165
  chassis: Optional[C2600ChassisType] = Field("2651XM", description="Chassis type")
166
- ram: Optional[int] = Field(160, description="Amount of RAM in MB")
167
- nvram: Optional[int] = Field(128, description="Amount of NVRAM in KB")
166
+ ram: Optional[int] = Field(160, gt=0, description="Amount of RAM in MB")
167
+ nvram: Optional[int] = Field(128, gt=0, description="Amount of NVRAM in KB")
168
168
  iomem: Optional[int] = Field(15, ge=0, le=100, description="I/O memory percentage")
169
169
  sparsemem: Optional[bool] = Field(True, description="Sparse memory feature")
170
170
 
@@ -187,8 +187,8 @@ class C1700ChassisType(str, Enum):
187
187
  class C1700DynamipsTemplate(DynamipsTemplate):
188
188
 
189
189
  chassis: Optional[C1700ChassisType] = Field("1760", description="Chassis type")
190
- ram: Optional[int] = Field(160, description="Amount of RAM in MB")
191
- nvram: Optional[int] = Field(128, description="Amount of NVRAM in KB")
190
+ ram: Optional[int] = Field(160, gt=0, description="Amount of RAM in MB")
191
+ nvram: Optional[int] = Field(128, gt=0, description="Amount of NVRAM in KB")
192
192
  iomem: Optional[int] = Field(15, ge=0, le=100, description="I/O memory percentage")
193
193
  sparsemem: Optional[bool] = Field(False, description="Sparse memory feature")
194
194