1from datetime import datetime
2
3try:
4    # python3
5    from xmlrpc.client import DateTime
6except ImportError:
7    # python2
8    from xmlrpclib import DateTime
9
10
11def image_list(options):
12
13    ret = [{'author_id': 248842,
14            'datacenter_id': 3,
15            'date_created': DateTime('20130902T15:04:18'),
16            'date_updated': DateTime('20130903T12:14:30'),
17            'disk_id': 527489,
18            'id': 131,
19            'kernel_version': '3.2-i386',
20            'label': 'Fedora 17 32 bits',
21            'os_arch': 'x86-32',
22            'size': 3072,
23            'visibility': 'all'},
24           {'author_id': 248842,
25            'datacenter_id': 3,
26            'date_created': DateTime('20130902T15:04:18'),
27            'date_updated': DateTime('20130903T12:14:30'),
28            'disk_id': 527490,
29            'id': 132,
30            'kernel_version': '3.2-x86_64',
31            'label': 'Fedora 17 64 bits',
32            'os_arch': 'x86-64',
33            'size': 3072,
34            'visibility': 'all'},
35           {'author_id': 248842,
36            'datacenter_id': 3,
37            'date_created': DateTime('20130902T15:04:18'),
38            'date_updated': DateTime('20130903T12:14:30'),
39            'disk_id': 527491,
40            'id': 133,
41            'kernel_version': '3.2-i386',
42            'label': 'OpenSUSE 12.2 32 bits',
43            'os_arch': 'x86-32',
44            'size': 3072,
45            'visibility': 'all'},
46           {'author_id': 248842,
47            'datacenter_id': 3,
48            'date_created': DateTime('20130902T15:04:18'),
49            'date_updated': DateTime('20130903T12:14:30'),
50            'disk_id': 527494,
51            'id': 134,
52            'kernel_version': '3.2-x86_64',
53            'label': 'OpenSUSE 12.2 64 bits',
54            'os_arch': 'x86-64',
55            'size': 3072,
56            'visibility': 'all'},
57           {'author_id': 248842,
58            'datacenter_id': 3,
59            'date_created': DateTime('20130902T15:04:18'),
60            'date_updated': DateTime('20130903T12:14:30'),
61            'disk_id': 726224,
62            'id': 149,
63            'kernel_version': '2.6.32',
64            'label': 'CentOS 5 32 bits',
65            'os_arch': 'x86-32',
66            'size': 3072,
67            'visibility': 'all'},
68           {'author_id': 248842,
69            'datacenter_id': 3,
70            'date_created': DateTime('20130902T15:04:18'),
71            'date_updated': DateTime('20130903T12:14:30'),
72            'disk_id': 726225,
73            'id': 150,
74            'kernel_version': '2.6.32-x86_64',
75            'label': 'CentOS 5 64 bits',
76            'os_arch': 'x86-64',
77            'size': 3072,
78            'visibility': 'all'},
79           {'author_id': 248842,
80            'datacenter_id': 3,
81            'date_created': DateTime('20130902T15:04:18'),
82            'date_updated': DateTime('20130903T12:14:30'),
83            'disk_id': 726230,
84            'id': 151,
85            'kernel_version': '3.2-i386',
86            'label': 'ArchLinux 32 bits',
87            'os_arch': 'x86-32',
88            'size': 3072,
89            'visibility': 'all'},
90           {'author_id': 248842,
91            'datacenter_id': 3,
92            'date_created': DateTime('20130902T15:04:18'),
93            'date_updated': DateTime('20130903T12:14:30'),
94            'disk_id': 726233,
95            'id': 152,
96            'kernel_version': '3.2-x86_64',
97            'label': 'ArchLinux 64 bits',
98            'os_arch': 'x86-64',
99            'size': 3072,
100            'visibility': 'all'},
101           {'author_id': 248842,
102            'datacenter_id': 2,
103            'date_created': DateTime('20140417T18:38:53'),
104            'date_updated': DateTime('20141030T10:38:45'),
105            'disk_id': 1401491,
106            'id': 161,
107            'kernel_version': '3.12-x86_64 (hvm)',
108            'label': 'Debian 7 64 bits (HVM)',
109            'os_arch': 'x86-64',
110            'size': 3072,
111            'visibility': 'all'},
112           {'author_id': 248842,
113            'datacenter_id': 1,
114            'date_created': DateTime('20140417T18:38:53'),
115            'date_updated': DateTime('20141030T18:06:44'),
116            'disk_id': 1349810,
117            'id': 162,
118            'kernel_version': '3.12-x86_64 (hvm)',
119            'label': 'Debian 7 64 bits (HVM)',
120            'os_arch': 'x86-64',
121            'size': 3072,
122            'visibility': 'deprecated'},
123           {'author_id': 248842,
124            'datacenter_id': 3,
125            'date_created': DateTime('20140417T18:38:53'),
126            'date_updated': DateTime('20141030T10:38:45'),
127            'disk_id': 1401327,
128            'id': 167,
129            'kernel_version': '3.12-x86_64 (hvm)',
130            'label': 'Debian 7 64 bits (HVM)',
131            'os_arch': 'x86-64',
132            'size': 3072,
133            'visibility': 'all'},
134           {'author_id': 248842,
135            'datacenter_id': 1,
136            'date_created': DateTime('20141203T14:15:28'),
137            'date_updated': DateTime('20150116T11:24:56'),
138            'disk_id': 3315704,
139            'id': 172,
140            'kernel_version': '3.12-x86_64 (hvm)',
141            'label': 'Debian 8 (testing) 64 bits (HVM)',
142            'os_arch': 'x86-64',
143            'size': 3072,
144            'visibility': 'all'},
145           {'author_id': 248842,
146            'datacenter_id': 2,
147            'date_created': DateTime('20141203T14:15:28'),
148            'date_updated': DateTime('20150116T11:24:56'),
149            'disk_id': 3315992,
150            'id': 176,
151            'kernel_version': '3.12-x86_64 (hvm)',
152            'label': 'Debian 8 (testing) 64 bits (HVM)',
153            'os_arch': 'x86-64',
154            'size': 3072,
155            'visibility': 'all'},
156           {'author_id': 248842,
157            'datacenter_id': 1,
158            'date_created': DateTime('20141203T14:15:28'),
159            'date_updated': DateTime('20150116T11:24:56'),
160            'disk_id': 3316070,
161            'id': 178,
162            'kernel_version': '3.12-x86_64 (hvm)',
163            'label': 'Debian 8',
164            'os_arch': 'x86-64',
165            'size': 3072,
166            'visibility': 'all'},
167           {'author_id': 248842,
168            'datacenter_id': 3,
169            'date_created': DateTime('20141203T14:15:28'),
170            'date_updated': DateTime('20150116T11:24:56'),
171            'disk_id': 3316070,
172            'id': 178,
173            'kernel_version': '3.12-x86_64 (hvm)',
174            'label': 'Debian 8',
175            'os_arch': 'x86-64',
176            'size': 3072,
177            'visibility': 'all'},
178           {'author_id': 248842,
179            'datacenter_id': 4,
180            'date_created': DateTime('20141203T14:15:28'),
181            'date_updated': DateTime('20150116T11:24:56'),
182            'disk_id': 3316070,
183            'id': 178,
184            'kernel_version': '3.12-x86_64 (hvm)',
185            'label': 'Debian 8',
186            'os_arch': 'x86-64',
187            'size': 3072,
188            'visibility': 'all'},
189           {'author_id': 248842,
190            'datacenter_id': 5,
191            'date_created': DateTime('20141203T14:15:28'),
192            'date_updated': DateTime('20150116T11:24:56'),
193            'disk_id': 3316070,
194            'id': 178,
195            'kernel_version': '3.12-x86_64 (hvm)',
196            'label': 'Debian 8',
197            'os_arch': 'x86-64',
198            'size': 3072,
199            'visibility': 'all'},
200           {'author_id': 248842,
201            'datacenter_id': 3,
202            'date_created': DateTime('20141203T14:15:28'),
203            'date_updated': DateTime('20150116T11:24:56'),
204            'disk_id': 3316076,
205            'id': 180,
206            'kernel_version': '3.12-x86_64 (hvm)',
207            'label': 'Debian 8 (testing) 64 bits (HVM)',
208            'os_arch': 'x86-64',
209            'size': 3072,
210            'visibility': 'all'},
211           {'author_id': 248842,
212            'datacenter_id': 1,
213            'date_created': DateTime('20141203T14:15:28'),
214            'date_updated': DateTime('20150116T11:24:56'),
215            'disk_id': 3315748,
216            'id': 184,
217            'kernel_version': '3.12-x86_64 (hvm)',
218            'label': 'Ubuntu 14.04 64 bits LTS (HVM)',
219            'os_arch': 'x86-64',
220            'size': 3072,
221            'visibility': 'all'},
222           {'author_id': 248842,
223            'datacenter_id': 2,
224            'date_created': DateTime('20141203T14:15:28'),
225            'date_updated': DateTime('20150116T11:24:56'),
226            'disk_id': 3316144,
227            'id': 188,
228            'kernel_version': '3.12-x86_64 (hvm)',
229            'label': 'Ubuntu 14.04 64 bits LTS (HVM)',
230            'os_arch': 'x86-64',
231            'size': 3072,
232            'visibility': 'all'},
233           {'author_id': 248842,
234            'datacenter_id': 3,
235            'date_created': DateTime('20141203T14:15:28'),
236            'date_updated': DateTime('20150116T11:24:56'),
237            'disk_id': 3316160,
238            'id': 192,
239            'kernel_version': '3.12-x86_64 (hvm)',
240            'label': 'Ubuntu 14.04 64 bits LTS (HVM)',
241            'os_arch': 'x86-64',
242            'size': 3072,
243            'visibility': 'all'},
244           {'author_id': 248842,
245            'datacenter_id': 1,
246            'date_created': None,
247            'date_updated': DateTime('20150116T11:24:56'),
248            'disk_id': 2876292,
249            'id': 196,
250            'kernel_version': '3.12-x86_64 (hvm)',
251            'label': 'CentOS 7 64 bits (HVM)',
252            'os_arch': 'x86-64',
253            'size': 3072,
254            'visibility': 'all'},
255           {'author_id': 248842,
256            'datacenter_id': 2,
257            'date_created': None,
258            'date_updated': DateTime('20150116T11:24:56'),
259            'disk_id': 4744388,
260            'id': 200,
261            'kernel_version': '3.12-x86_64 (hvm)',
262            'label': 'CentOS 7 64 bits (HVM)',
263            'os_arch': 'x86-64',
264            'size': 3072,
265            'visibility': 'all'},
266           {'author_id': 248842,
267            'datacenter_id': 3,
268            'date_created': None,
269            'date_updated': DateTime('20150116T11:24:56'),
270            'disk_id': 4744392,
271            'id': 204,
272            'kernel_version': '3.12-x86_64 (hvm)',
273            'label': 'CentOS 7 64 bits (HVM)',
274            'os_arch': 'x86-64',
275            'size': 3072,
276            'visibility': 'all'},
277           {'author_id': 248842,
278            'datacenter_id': 4,
279            'date_created': DateTime('20140417T18:38:53'),
280            'date_updated': DateTime('20141030T10:38:45'),
281            'disk_id': 1401492,
282            'id': 163,
283            'kernel_version': '3.12-x86_64 (hvm)',
284            'label': 'Debian 7 64 bits (HVM)',
285            'os_arch': 'x86-64',
286            'size': 3072,
287            'visibility': 'all'},
288           {'author_id': 248842,
289            'datacenter_id': 5,
290            'date_created': DateTime('20140417T18:38:53'),
291            'date_updated': DateTime('20141030T10:38:45'),
292            'disk_id': 1401492,
293            'id': 163,
294            'kernel_version': '3.12-x86_64 (hvm)',
295            'label': 'Debian 7 64 bits (HVM)',
296            'os_arch': 'x86-64',
297            'size': 3072,
298            'visibility': 'all'},
299           ]
300
301    for fkey in options:
302        ret = [dc for dc in ret if dc[fkey] == options[fkey]]
303    return ret
304
305
306def datacenter_list(options):
307
308    ret = [{'iso': 'FR',
309            'name': 'Equinix Paris',
310            'id': 1,
311            'can_migrate_to': [4],
312            'country': 'France',
313            'deactivate_at': datetime(2017, 12, 25, 0, 0, 0),
314            'iaas_closed_for': 'NEW',
315            'paas_closed_for': 'NEW',
316            'dc_code': 'FR-SD2'},
317           {'iso': 'US',
318            'name': 'Level3 Baltimore',
319            'id': 2,
320            'can_migrate_to': [],
321            'country': 'United States of America',
322            'deactivate_at': datetime(2016, 12, 25, 0, 0, 0),
323            'iaas_closed_for': 'ALL',
324            'paas_closed_for': 'ALL',
325            'dc_code': 'US-BA1'},
326           {'iso': 'LU',
327            'name': 'Bissen',
328            'id': 3,
329            'can_migrate_to': [],
330            'country': 'Luxembourg',
331            'deactivate_at': None,
332            'iaas_closed_for': 'NONE',
333            'paas_closed_for': 'NONE',
334            'dc_code': 'LU-BI1'},
335           {'iso': 'FR',
336            'name': 'France, Paris',
337            'id': 4,
338            'can_migrate_to': [],
339            'country': 'France',
340            'deactivate_at': None,
341            'iaas_closed_for': 'NONE',
342            'paas_closed_for': 'ALL',
343            'dc_code': 'FR-SD3'},
344           {'iso': 'FR',
345            'name': 'France, Paris',
346            'id': 5,
347            'can_migrate_to': [],
348            'country': 'France',
349            'deactivate_at': None,
350            'iaas_closed_for': 'NONE',
351            'paas_closed_for': 'ALL',
352            'dc_code': 'FR-SD5'}]
353
354    options.pop('sort_by', None)
355    for fkey in options:
356        if (fkey == 'iaas_opened') or (fkey == 'paas_opened'):
357            fkey = '%s_closed_for' % fkey[:4]
358            ret = [dc for dc in ret if dc[fkey] in ['NONE', 'NEW']]
359        else:
360            ret = [dc for dc in ret if dc[fkey] == options[fkey]]
361
362    return ret
363
364
365def disk_list(options):
366
367    disks = [{'can_snapshot': True,
368              'datacenter_id': 3,
369              'date_created': DateTime('20150319T11:10:34'),
370              'date_updated': DateTime('20150319T11:10:58'),
371              'id': 4969232,
372              'is_boot_disk': True,
373              'kernel_version': '3.12-x86_64 (hvm)',
374              'label': 'Debian 7 64 bits (HVM)',
375              'name': 'sys_1426759833',
376              'size': 3072,
377              'snapshot_profile_id': None,
378              'snapshots_id': [],
379              'source': 1401327,
380              'state': 'created',
381              'total_size': 3072,
382              'type': 'data',
383              'visibility': 'private',
384              'vms_id': [152966]},
385             {'can_snapshot': True,
386              'datacenter_id': 1,
387              'date_created': DateTime('20150319T11:14:13'),
388              'date_updated': DateTime('20150319T11:14:29'),
389              'id': 4969249,
390              'is_boot_disk': True,
391              'kernel_cmdline': {'console': 'ttyS0',
392                                 'nosep': True,
393                                 'ro': True,
394                                 'root': '/dev/sda'},
395              'kernel_version': '3.12-x86_64 (hvm)',
396              'label': 'Debian 7 64 bits (HVM)',
397              'name': 'sys_server01',
398              'size': 3072,
399              'snapshot_profile_id': None,
400              'snapshots_id': [],
401              'source': 1349810,
402              'state': 'created',
403              'total_size': 3072,
404              'type': 'data',
405              'visibility': 'private',
406              'vms_id': [152967]},
407             {'can_snapshot': True,
408              'datacenter_id': 1,
409              'date_created': DateTime('20150319T15:39:54'),
410              'date_updated': DateTime('20150319T15:40:24'),
411              'id': 4970079,
412              'is_boot_disk': False,
413              'kernel_version': None,
414              'label': None,
415              'name': 'data',
416              'size': 3072,
417              'snapshot_profile_id': 1,
418              'snapshots_id': [663497],
419              'source': None,
420              'state': 'created',
421              'total_size': 3072,
422              'type': 'data',
423              'visibility': 'private',
424              'vms_id': [152967]},
425             {'can_snapshot': False,
426              'datacenter_id': 1,
427              'date_created': DateTime('20140826T00:00:00'),
428              'date_updated': DateTime('20140826T00:00:00'),
429              'id': 663497,
430              'is_boot_disk': False,
431              'kernel_version': '3.2-x86_64',
432              'label': 'Debian 7 64 bits',
433              'name': 'snaptest',
434              'size': 3072,
435              'snapshot_profile_id': None,
436              'snapshots_id': [],
437              'source': 4970079,
438              'state': 'created',
439              'total_size': 3072,
440              'type': 'snapshot',
441              'visibility': 'private',
442              'vms_id': []},
443             {'can_snapshot': True,
444              'datacenter_id': 3,
445              'date_created': DateTime('20150319T11:10:34'),
446              'date_updated': DateTime('20150319T11:10:58'),
447              'id': 4969233,
448              'is_boot_disk': True,
449              'kernel_version': '3.12-x86_64 (hvm)',
450              'label': 'Debian 7 64 bits (HVM)',
451              'name': 'newdisk',
452              'size': 3072,
453              'snapshot_profile_id': None,
454              'snapshots_id': [],
455              'source': 1401327,
456              'state': 'created',
457              'total_size': 3072,
458              'type': 'data',
459              'visibility': 'private',
460              'vms_id': []}]
461
462    options.pop('items_per_page', None)
463
464    for fkey in options:
465        ret = []
466        for disk in disks:
467            if isinstance(options[fkey], list):
468                if disk[fkey] in options[fkey]:
469                    ret.append(disk)
470            elif disk[fkey] == options[fkey]:
471                ret.append(disk)
472        disks = ret
473
474    return disks
475
476
477def disk_info(id):
478    disks = disk_list({})
479    disks = dict([(disk['id'], disk) for disk in disks])
480    return disks[id]
481
482
483def disk_update(disk_id, options):
484    return {'id': 200, 'step': 'WAIT'}
485
486
487def disk_delete(disk_id):
488    return {'id': 200, 'step': 'WAIT'}
489
490
491def disk_rollback_from(disk_id):
492    return {'id': 200, 'step': 'WAIT'}
493
494
495def disk_migrate(disk_id, datacenter_id):
496    return {'id': 200, 'step': 'WAIT'}
497
498
499def disk_create_from(options, disk_id):
500    return {'id': 200, 'step': 'WAIT'}
501
502
503def disk_create(options):
504    return {'id': 200, 'step': 'WAIT', 'disk_id': 9000}
505
506
507def vm_migrate(vm_id, finalize=False):
508    return {'id': 9900, 'step': 'WAIT'}
509
510
511def vm_can_migrate(vm_id):
512    if vm_id == 152964:
513        return {'can_migrate': False,
514                'matched': ['FR-SD5'],
515                'can_migrate_to': []}
516
517    return {'can_migrate': True,
518            'matched': ['LU-BI1'],
519            'can_migrate_to': ['LU-BI1']}
520
521
522def vm_list(options):
523
524    ret = [{'ai_active': 0,
525            'console': 0,
526            'cores': 1,
527            'datacenter_id': 3,
528            'date_created': DateTime('20141008T16:13:59'),
529            'date_updated': DateTime('20150319T11:11:31'),
530            'description': None,
531            'disks_id': [4969232],
532            'flex_shares': 0,
533            'hostname': 'vm1426759833',
534            'id': 152966,
535            'ifaces_id': [156572],
536            'memory': 256,
537            'state': 'running',
538            'vm_max_memory': 2048},
539           {'ai_active': 0,
540            'console': 0,
541            'cores': 1,
542            'datacenter_id': 3,
543            'date_created': DateTime('20141008T16:13:59'),
544            'date_updated': DateTime('20150319T11:11:31'),
545            'description': None,
546            'disks_id': [4969232],
547            'flex_shares': 0,
548            'hostname': 'vm1426759844',
549            'id': 152964,
550            'ifaces_id': [156572],
551            'memory': 256,
552            'state': 'running',
553            'vm_max_memory': 2048},
554           {'ai_active': 0,
555            'console': 0,
556            'cores': 1,
557            'datacenter_id': 1,
558            'date_created': DateTime('20150319T11:14:13'),
559            'date_updated': DateTime('20150319T11:14:55'),
560            'description': None,
561            'disks_id': [4969249],
562            'flex_shares': 0,
563            'hostname': 'server01',
564            'id': 152967,
565            'ifaces_id': [156573],
566            'memory': 256,
567            'state': 'running',
568            'vm_max_memory': 2048},
569           {'ai_active': 0,
570            'console': 0,
571            'cores': 1,
572            'datacenter_id': 1,
573            'date_created': DateTime('20150319T11:14:13'),
574            'date_updated': DateTime('20150319T11:14:55'),
575            'description': None,
576            'disks_id': [4969250],
577            'flex_shares': 0,
578            'hostname': 'server02',
579            'id': 152968,
580            'ifaces_id': [156574],
581            'memory': 256,
582            'state': 'halted',
583            'vm_max_memory': 2048}]
584
585    options.pop('items_per_page', None)
586
587    for fkey in options:
588        ret = [vm for vm in ret if vm[fkey] == options[fkey]]
589
590    return ret
591
592
593def vm_info(id):
594
595    ret = [{'ai_active': 0,
596            'console': 0,
597            'console_url': 'console.gandi.net',
598            'cores': 1,
599            'datacenter_id': 3,
600            'date_created': DateTime('20150319T11:10:34'),
601            'date_updated': DateTime('20150319T11:11:31'),
602            'description': None,
603            'disks': [{'can_snapshot': True,
604                       'datacenter_id': 3,
605                       'date_created': DateTime('20150319T11:10:34'),
606                       'date_updated': DateTime('20150319T11:10:58'),
607                       'id': 4969232,
608                       'is_boot_disk': True,
609                       'kernel_cmdline': {'console': 'ttyS0',
610                                          'nosep': True,
611                                          'ro': True,
612                                          'root': '/dev/sda'},
613                       'kernel_version': '3.12-x86_64 (hvm)',
614                       'label': 'Debian 7 64 bits (HVM)',
615                       'name': 'sys_1426759833',
616                       'size': 3072,
617                       'snapshot_profile': None,
618                       'snapshots_id': [],
619                       'source': 1401327,
620                       'state': 'created',
621                       'total_size': 3072,
622                       'type': 'data',
623                       'visibility': 'private',
624                       'vms_id': [152966]}],
625            'disks_id': [4969232],
626            'flex_shares': 0,
627            'graph_urls': {'vcpu': [''], 'vdi': [''], 'vif': ['']},
628            'hostname': 'vm1426759833',
629            'id': 152966,
630            'ifaces': [{'bandwidth': 102400.0,
631                        'datacenter_id': 3,
632                        'date_created': DateTime('20150319T11:10:34'),
633                        'date_updated': DateTime('20150319T11:10:35'),
634                        'id': 156572,
635                        'ips': [{'datacenter_id': 3,
636                                 'date_created': DateTime('20150319T11:10:34'),
637                                 'date_updated': DateTime('20150319T11:10:36'),
638                                 'id': 204557,
639                                 'iface_id': 156572,
640                                 'ip': '2001:4b98:dc2:43:216:3eff:fece:e25f',
641                                 'num': 0,
642                                 'reverse': 'xvm6-dc2-fece-e25f.ghst.net',
643                                 'state': 'created',
644                                 'version': 6}],
645                        'ips_id': [204557],
646                        'num': 0,
647                        'state': 'used',
648                        'type': 'public',
649                        'vlan': None,
650                        'vm_id': 152966}],
651            'ifaces_id': [156572],
652            'memory': 256,
653            'probes': [],
654            'state': 'running',
655            'triggers': [],
656            'vm_max_memory': 2048},
657           {'ai_active': 0,
658            'console': 0,
659            'console_url': 'console.gandi.net',
660            'cores': 1,
661            'datacenter_id': 1,
662            'date_created': DateTime('20150319T11:14:13'),
663            'date_updated': DateTime('20150319T11:14:55'),
664            'description': None,
665            'disks': [{'can_snapshot': True,
666                       'datacenter_id': 1,
667                       'date_created': DateTime('20150319T11:14:13'),
668                       'date_updated': DateTime('20150319T11:14:29'),
669                       'id': 4969249,
670                       'is_boot_disk': True,
671                       'kernel_cmdline': {'console': 'ttyS0',
672                                          'nosep': True,
673                                          'ro': True,
674                                          'root': '/dev/sda'},
675                       'kernel_version': '3.12-x86_64 (hvm)',
676                       'label': 'Debian 7 64 bits (HVM)',
677                       'name': 'sys_server01',
678                       'size': 3072,
679                       'snapshot_profile': None,
680                       'snapshots_id': [],
681                       'source': 1349810,
682                       'state': 'created',
683                       'total_size': 3072,
684                       'type': 'data',
685                       'visibility': 'private',
686                       'vms_id': [152967]}],
687            'disks_id': [4969249],
688            'flex_shares': 0,
689            'graph_urls': {'vcpu': [''], 'vdi': [''], 'vif': ['']},
690            'hostname': 'server01',
691            'id': 152967,
692            'ifaces': [{'bandwidth': 102400.0,
693                        'datacenter_id': 1,
694                        'date_created': DateTime('20150319T11:14:13'),
695                        'date_updated': DateTime('20150319T11:14:16'),
696                        'id': 156573,
697                        'ips': [{'datacenter_id': 1,
698                                 'date_created': DateTime('20150317T16:20:10'),
699                                 'date_updated': DateTime('20150319T11:14:13'),
700                                 'id': 203968,
701                                 'iface_id': 156573,
702                                 'ip': '95.142.160.181',
703                                 'num': 0,
704                                 'reverse': 'xvm-160-181.dc0.ghst.net',
705                                 'state': 'created',
706                                 'version': 4},
707                                {'datacenter_id': 1,
708                                 'date_created': DateTime('20150319T11:14:16'),
709                                 'date_updated': DateTime('20150319T11:14:16'),
710                                 'id': 204558,
711                                 'iface_id': 156573,
712                                 'ip': '2001:4b98:dc0:47:216:3eff:feb2:3862',
713                                 'num': 1,
714                                 'reverse': 'xvm6-dc0-feb2-3862.ghst.net',
715                                 'state': 'created',
716                                 'version': 6}],
717                        'ips_id': [203968, 204558],
718                        'num': 0,
719                        'state': 'used',
720                        'type': 'public',
721                        'vlan': None,
722                        'vm_id': 152967}],
723            'ifaces_id': [156573],
724            'memory': 256,
725            'probes': [],
726            'state': 'running',
727            'triggers': [],
728            'vm_max_memory': 2048},
729           {'ai_active': 0,
730            'console': 0,
731            'console_url': 'console.gandi.net',
732            'cores': 1,
733            'datacenter_id': 4,
734            'date_created': DateTime('20160115T162658'),
735            'date_updated': DateTime('20160115T162658'),
736            'description': None,
737            'disks': [],
738            'disks_id': [4969250],
739            'flex_shares': 0,
740            'graph_urls': {'vcpu': [''], 'vdi': [''], 'vif': ['', '']},
741            'hostname': 'server02',
742            'hvm_state': 'unknown',
743            'id': 152968,
744            'ifaces': [{'bandwidth': 102400.0,
745                        'datacenter_id': 4,
746                        'date_created': DateTime('20160115T162658'),
747                        'date_updated': DateTime('20160115T162658'),
748                        'id': 1274919,
749                        'ips': [{'datacenter_id': 4,
750                                 'date_created': DateTime('20160115T162658'),
751                                 'date_updated': DateTime('20160115T162658'),
752                                 'id': 351155,
753                                 'iface_id': 1274919,
754                                 'ip': '213.167.231.3',
755                                 'num': 0,
756                                 'reverse': 'xvm-231-3.sd3.ghst.net',
757                                 'state': 'created',
758                                 'version': 4},
759                                {'datacenter_id': 4,
760                                 'date_created': DateTime('20160115T162658'),
761                                 'date_updated': DateTime('20160115T162658'),
762                                 'id': 352862,
763                                 'iface_id': 1274919,
764                                 'ip': '2001:4b98:c001:1:216:3eff:fec5:c104',
765                                 'num': 1,
766                                 'reverse': 'xvm6-c001-fec5-c104.ghst.net',
767                                 'state': 'created',
768                                 'version': 6}],
769                        'ips_id': [351155, 352862],
770                        'num': 0,
771                        'state': 'used',
772                        'type': 'public',
773                        'vlan': {'id': 717, 'name': 'pouet'},
774                        'vm_id': 227627},
775                       {'bandwidth': 102400.0,
776                        'datacenter_id': 4,
777                        'date_created': DateTime('20160115T162658'),
778                        'date_updated': DateTime('20160115T162658'),
779                        'id': 1416,
780                        'ips': [{'datacenter_id': 1,
781                                 'date_created': DateTime('20160115T162658'),
782                                 'date_updated': DateTime('20160115T162702'),
783                                 'id': 2361,
784                                 'iface_id': 1416,
785                                 'ip': '192.168.232.252',
786                                 'num': 0,
787                                 'reverse': '',
788                                 'state': 'created',
789                                 'version': 4}],
790                        'ips_id': [2361],
791                        'num': 1,
792                        'state': 'used',
793                        'type': 'private',
794                        'vlan': {'id': 717, 'name': 'pouet'},
795                        'vm_id': 227627}],
796            'ifaces_id': [1274919, 1416],
797            'memory': 236,
798            'probes': [],
799            'state': 'halted',
800            'triggers': [],
801            'vm_max_memory': 2048}]
802
803    vms = dict([(vm['id'], vm) for vm in ret])
804    return vms[id]
805
806
807def metric_query(query):
808
809    vif_bytes_all = [
810        {'direction': ['in'],
811         'metric': 'vif.bytes',
812         'points': [{'timestamp': '2015-03-18T10:00:00', 'value': 24420.0},
813                    {'timestamp': '2015-03-18T11:00:00', 'value': 22370.0},
814                    {'timestamp': '2015-03-18T12:00:00', 'value': 46680.0},
815                    {'timestamp': '2015-03-18T13:00:00', 'value': 61664.0},
816                    {'timestamp': '2015-03-18T14:00:00', 'value': 142789.0},
817                    {'timestamp': '2015-03-18T15:00:00', 'value': 35633.0},
818                    {'timestamp': '2015-03-18T16:00:00', 'value': 213987.0},
819                    {'timestamp': '2015-03-18T17:00:00', 'value': 80055.0},
820                    {'timestamp': '2015-03-18T18:00:00', 'value': 57690.0},
821                    {'timestamp': '2015-03-18T19:00:00', 'value': 83508.0},
822                    {'timestamp': '2015-03-18T20:00:00', 'value': 115038.0},
823                    {'timestamp': '2015-03-18T21:00:00', 'value': 71923.0},
824                    {'timestamp': '2015-03-18T22:00:00', 'value': 259466.0},
825                    {'timestamp': '2015-03-18T23:00:00', 'value': 301198.0},
826                    {'timestamp': '2015-03-19T00:00:00', 'value': 69579.0},
827                    {'timestamp': '2015-03-19T01:00:00', 'value': 99998.0},
828                    {'timestamp': '2015-03-19T02:00:00', 'value': 53706.0},
829                    {'timestamp': '2015-03-19T03:00:00', 'value': 55539.0},
830                    {'timestamp': '2015-03-19T04:00:00', 'value': 60018.0},
831                    {'timestamp': '2015-03-19T05:00:00', 'value': 23000.0},
832                    {'timestamp': '2015-03-19T06:00:00', 'value': 57812.0},
833                    {'timestamp': '2015-03-19T07:00:00', 'value': 984992.0},
834                    {'timestamp': '2015-03-19T08:00:00', 'value': 315608.0},
835                    {'timestamp': '2015-03-19T09:00:00', 'value': 77852.0}],
836         'resource_id': 152967,
837         'resource_type': 'vm',
838         'type': ['public']},
839        {'direction': ['out'],
840         'metric': 'vif.bytes',
841         'points': [{'timestamp': '2015-03-18T10:00:00', 'value': 5335.0},
842                    {'timestamp': '2015-03-18T11:00:00', 'value': 8763.0},
843                    {'timestamp': '2015-03-18T12:00:00', 'value': 43790.0},
844                    {'timestamp': '2015-03-18T13:00:00', 'value': 73345.0},
845                    {'timestamp': '2015-03-18T14:00:00', 'value': 259536.0},
846                    {'timestamp': '2015-03-18T15:00:00', 'value': 18595.0},
847                    {'timestamp': '2015-03-18T16:00:00', 'value': 751379.0},
848                    {'timestamp': '2015-03-18T17:00:00', 'value': 150840.0},
849                    {'timestamp': '2015-03-18T18:00:00', 'value': 43115.0},
850                    {'timestamp': '2015-03-18T19:00:00', 'value': 593737.0},
851                    {'timestamp': '2015-03-18T20:00:00', 'value': 619675.0},
852                    {'timestamp': '2015-03-18T21:00:00', 'value': 67605.0},
853                    {'timestamp': '2015-03-18T22:00:00', 'value': 300711.0},
854                    {'timestamp': '2015-03-18T23:00:00', 'value': 380400.0},
855                    {'timestamp': '2015-03-19T00:00:00', 'value': 62705.0},
856                    {'timestamp': '2015-03-19T01:00:00', 'value': 100512.0},
857                    {'timestamp': '2015-03-19T02:00:00', 'value': 47963.0},
858                    {'timestamp': '2015-03-19T03:00:00', 'value': 50301.0},
859                    {'timestamp': '2015-03-19T04:00:00', 'value': 48572.0},
860                    {'timestamp': '2015-03-19T05:00:00', 'value': 6263.0},
861                    {'timestamp': '2015-03-19T06:00:00', 'value': 67014.0},
862                    {'timestamp': '2015-03-19T07:00:00', 'value': 777215.0},
863                    {'timestamp': '2015-03-19T08:00:00', 'value': 495497.0},
864                    {'timestamp': '2015-03-19T09:00:00', 'value': 660825.0}],
865         'resource_id': 152967,
866         'resource_type': 'vm',
867         'type': ['public']}]
868
869    vbd_bytes_all = [
870        {'direction': ['read'],
871         'metric': 'vbd.bytes',
872         'points': [{'timestamp': '2015-03-18T10:00:00', 'value': 13824000.0},
873                    {'timestamp': '2015-03-18T11:00:00', 'value': 5644288.0},
874                    {'timestamp': '2015-03-18T12:00:00', 'value': 0.0},
875                    {'timestamp': '2015-03-18T13:00:00', 'value': 13516800.0},
876                    {'timestamp': '2015-03-18T14:00:00', 'value': 27918336.0},
877                    {'timestamp': '2015-03-18T15:00:00', 'value': 9150464.0},
878                    {'timestamp': '2015-03-18T16:00:00', 'value': 64323584.0},
879                    {'timestamp': '2015-03-18T17:00:00', 'value': 29974528.0},
880                    {'timestamp': '2015-03-18T18:00:00', 'value': 761856.0},
881                    {'timestamp': '2015-03-18T19:00:00', 'value': 41775104.0},
882                    {'timestamp': '2015-03-18T20:00:00', 'value': 14286848.0},
883                    {'timestamp': '2015-03-18T21:00:00', 'value': 1073152.0},
884                    {'timestamp': '2015-03-18T22:00:00', 'value': 387248128.0},
885                    {'timestamp': '2015-03-18T23:00:00', 'value': 13754368.0},
886                    {'timestamp': '2015-03-19T00:00:00', 'value': 2056192.0},
887                    {'timestamp': '2015-03-19T01:00:00', 'value': 9990144.0},
888                    {'timestamp': '2015-03-19T02:00:00', 'value': 643072.0},
889                    {'timestamp': '2015-03-19T03:00:00', 'value': 6148096.0},
890                    {'timestamp': '2015-03-19T04:00:00', 'value': 8974336.0},
891                    {'timestamp': '2015-03-19T05:00:00', 'value': 782336.0},
892                    {'timestamp': '2015-03-19T06:00:00', 'value': 12214272.0},
893                    {'timestamp': '2015-03-19T07:00:00', 'value': 29261824.0},
894                    {'timestamp': '2015-03-19T08:00:00', 'value': 144080896.0},
895                    {'timestamp': '2015-03-19T09:00:00', 'value': 39198720.0}],
896         'resource_id': 152967,
897         'resource_type': 'vm'},
898        {'direction': ['write'],
899         'metric': 'vbd.bytes',
900         'points': [{'timestamp': '2015-03-18T10:00:00', 'value': 217088.0},
901                    {'timestamp': '2015-03-18T11:00:00', 'value': 229376.0},
902                    {'timestamp': '2015-03-18T12:00:00', 'value': 401408.0},
903                    {'timestamp': '2015-03-18T13:00:00', 'value': 577536.0},
904                    {'timestamp': '2015-03-18T14:00:00', 'value': 3862528.0},
905                    {'timestamp': '2015-03-18T15:00:00', 'value': 217088.0},
906                    {'timestamp': '2015-03-18T16:00:00', 'value': 2363392.0},
907                    {'timestamp': '2015-03-18T17:00:00', 'value': 1773568.0},
908                    {'timestamp': '2015-03-18T18:00:00', 'value': 217088.0},
909                    {'timestamp': '2015-03-18T19:00:00', 'value': 3153920.0},
910                    {'timestamp': '2015-03-18T20:00:00', 'value': 2039808.0},
911                    {'timestamp': '2015-03-18T21:00:00', 'value': 606208.0},
912                    {'timestamp': '2015-03-18T22:00:00', 'value': 12505088.0},
913                    {'timestamp': '2015-03-18T23:00:00', 'value': 675840.0},
914                    {'timestamp': '2015-03-19T00:00:00', 'value': 602112.0},
915                    {'timestamp': '2015-03-19T01:00:00', 'value': 598016.0},
916                    {'timestamp': '2015-03-19T02:00:00', 'value': 483328.0},
917                    {'timestamp': '2015-03-19T03:00:00', 'value': 462848.0},
918                    {'timestamp': '2015-03-19T04:00:00', 'value': 471040.0},
919                    {'timestamp': '2015-03-19T05:00:00', 'value': 487424.0},
920                    {'timestamp': '2015-03-19T06:00:00', 'value': 499712.0},
921                    {'timestamp': '2015-03-19T07:00:00', 'value': 42958848.0},
922                    {'timestamp': '2015-03-19T08:00:00', 'value': 6299648.0},
923                    {'timestamp': '2015-03-19T09:00:00', 'value': 3862528.0}],
924         'resource_id': 152967,
925         'resource_type': 'vm'}]
926
927    vfs_df_bytes_all = [
928        {'metric': 'vfs.df.bytes',
929         'points': [{'timestamp': '2015-11-18T07:19:00',
930                     'value': 10679488512.0},
931                    {'timestamp': '2015-11-18T07:20:00'}],
932         'resource_id': 163744,
933         'resource_type': 'paas',
934         'size': ['free']},
935        {'metric': 'vfs.df.bytes',
936         'points': [{'timestamp': '2015-11-18T07:19:00',
937                     'value': 57929728.0},
938                    {'timestamp': '2015-11-18T07:20:00'}],
939         'resource_id': 163744,
940         'resource_type': 'paas',
941         'size': ['used']}]
942
943    webacc_requests_cache_all = [
944        {'cache': ['miss'],
945         'metric': 'webacc.requests',
946         'points': [{'timestamp': '2015-11-17T00:00:00', 'value': 2.0},
947                    {'timestamp': '2015-11-18T00:00:00'}],
948         'resource_id': 163744,
949         'resource_type': 'paas',
950         'status': ['2xx']}]
951
952    metrics = {'vif.bytes.all': vif_bytes_all,
953               'vbd.bytes.all': vbd_bytes_all,
954               'vfs.df.bytes.all': vfs_df_bytes_all,
955               'webacc.requests.cache.all': webacc_requests_cache_all}
956
957    metrics = [item for item in metrics[query['query']]
958               if item['resource_id'] == query['resource_id'][0]]
959
960    return metrics
961
962
963def disk_list_kernels(dc_id):
964
965    ret = {
966        1: {'linux': ['2.6.18 (deprecated)',
967                      '2.6.27-compat-sysfs (deprecated)',
968                      '2.6.32',
969                      '2.6.27 (deprecated)',
970                      '2.6.32-x86_64',
971                      '2.6.36 (deprecated)',
972                      '2.6.32-x86_64-grsec',
973                      '2.6.36-x86_64 (deprecated)',
974                      '3.2-i386',
975                      '3.2-x86_64',
976                      '3.2-x86_64-grsec',
977                      '3.10-x86_64',
978                      '3.10-i386'],
979            'linux-hvm': ['3.12-x86_64 (hvm)', 'grub', 'raw']},
980        2: {'linux': ['2.6.18 (deprecated)',
981                      '2.6.27-compat-sysfs (deprecated)',
982                      '2.6.32',
983                      '2.6.27 (deprecated)',
984                      '2.6.32-x86_64',
985                      '2.6.36 (deprecated)',
986                      '2.6.32-x86_64-grsec',
987                      '2.6.36-x86_64 (deprecated)',
988                      '3.2-i386',
989                      '3.2-x86_64',
990                      '3.2-x86_64-grsec',
991                      '3.10-x86_64',
992                      '3.10-i386'],
993            'linux-hvm': ['3.12-x86_64 (hvm)', 'grub', 'raw']},
994        3: {'linux': ['2.6.32',
995                      '2.6.27 (deprecated)',
996                      '2.6.32-x86_64',
997                      '2.6.32-x86_64-grsec',
998                      '3.2-i386',
999                      '3.2-x86_64',
1000                      '3.2-x86_64-grsec',
1001                      '3.10-x86_64',
1002                      '3.10-i386'],
1003            'linux-hvm': ['3.12-x86_64 (hvm)', 'grub', 'raw']},
1004        4: {'linux': ['2.6.32',
1005                      '2.6.27 (deprecated)',
1006                      '2.6.32-x86_64',
1007                      '2.6.32-x86_64-grsec',
1008                      '3.2-i386',
1009                      '3.2-x86_64',
1010                      '3.2-x86_64-grsec',
1011                      '3.10-x86_64',
1012                      '3.10-i386',
1013                      '3.12-x86_64'],
1014            'linux-hvm': ['3.12-x86_64 (hvm)', 'grub', 'raw']}}
1015
1016    return ret.get(dc_id, ret[4])
1017
1018
1019def account_info():
1020    return {'average_credit_cost': 0.0,
1021            'credits': 2335360,
1022            'cycle_day': 23,
1023            'date_credits_expiration': DateTime('20160319T10:07:24'),
1024            'fullname': 'Peter Parker',
1025            'handle': 'PXP561-GANDI',
1026            'id': 2920674,
1027            'products': None,
1028            'rating_enabled': True,
1029            'resources': {'available': None,
1030                          'expired': None,
1031                          'granted': None,
1032                          'used': None},
1033            'share_definition': None}
1034
1035
1036def rating_list():
1037    return [{'bw_out': None,
1038             'cpu': {'default': 168},
1039             'disk_data': {'default': 135},
1040             'disk_snapshot': None,
1041             'disk_snapshot_auto': None,
1042             'instance': {'default': 0},
1043             'ip': {'v4_public': 210, 'v6': 0},
1044             'ram': {'default': 120},
1045             'rproxy': None,
1046             'rproxy_server': None,
1047             'rproxy_ssl': None,
1048             'timestamp': DateTime('20150319T15:07:24')}]
1049
1050
1051def vm_disk_detach(vm_id, disk_id):
1052    if vm_id == 152967 and disk_id == 4970079:
1053        return {'id': 200, 'step': 'WAIT'}
1054
1055
1056def vm_iface_detach(vm_id, iface_id):
1057    if vm_id == 152967 and iface_id == 156573:
1058        return {'id': 200, 'step': 'WAIT'}
1059
1060
1061def vm_iface_attach(vm_id, iface_id):
1062    if vm_id == 152966 and iface_id == 156573:
1063        return {'id': 200, 'step': 'WAIT'}
1064
1065    if vm_id == 152967 and iface_id == 156572:
1066        return {'id': 200, 'step': 'WAIT'}
1067
1068    if vm_id == 152967 and iface_id == 156573:
1069        return {'id': 200, 'step': 'WAIT', 'iface_id': 156573}
1070
1071
1072def vm_disk_attach(vm_id, disk_id, options):
1073    if vm_id == 152967 and disk_id == 663497:
1074        return {'id': 200, 'step': 'WAIT'}
1075
1076    if vm_id == 152966 and disk_id == 4970079:
1077        return {'id': 200, 'step': 'WAIT'}
1078
1079    if vm_id == 152967 and disk_id == 9000:
1080        return {'id': 200, 'step': 'WAIT'}
1081
1082
1083def vm_stop(vm_id):
1084    if vm_id in (152967, 152966):
1085        return {'id': 200, 'step': 'WAIT'}
1086
1087
1088def vm_start(vm_id):
1089    if vm_id in (152967, 152966):
1090        return {'id': 200, 'step': 'WAIT'}
1091
1092
1093def vm_reboot(vm_id):
1094    if vm_id in (152967, 152966):
1095        return {'id': 200, 'step': 'WAIT'}
1096
1097
1098def vm_delete(vm_id):
1099    if vm_id in (152968, 152967, 152966):
1100        return {'id': 200, 'step': 'WAIT'}
1101
1102
1103def vm_update(vm_id, options):
1104    if vm_id in (152967, 152966):
1105        return {'id': 200, 'step': 'WAIT'}
1106
1107
1108def vm_create_from(vm_spec, disk_spec, src_disk_id):
1109    return [{'id': 300, 'step': 'WAIT'}]
1110
1111
1112def vlan_list(options):
1113
1114    ret = [{'datacenter_id': 1,
1115            'gateway': '10.7.13.254',
1116            'id': 123,
1117            'name': 'vlantest',
1118            'state': 'created',
1119            'subnet': '10.7.13.0/24',
1120            'uuid': 321},
1121           {'datacenter_id': 1,
1122            'gateway': '192.168.232.254',
1123            'id': 717,
1124            'name': 'pouet',
1125            'state': 'created',
1126            'subnet': '192.168.232.0/24',
1127            'uuid': 720},
1128           {'datacenter_id': 4,
1129            'gateway': '10.7.242.254',
1130            'id': 999,
1131            'name': 'intranet',
1132            'state': 'created',
1133            'subnet': '10.7.242.0/24',
1134            'uuid': 421}]
1135
1136    options.pop('items_per_page', None)
1137
1138    for fkey in options:
1139        ret = [vlan for vlan in ret if vlan[fkey] == options[fkey]]
1140
1141    return ret
1142
1143
1144def vlan_info(id):
1145    vlans = vlan_list({})
1146    vlans = dict([(vlan['id'], vlan) for vlan in vlans])
1147    return vlans[id]
1148
1149
1150def vlan_delete(vlan_id):
1151    return {'id': 200, 'step': 'WAIT'}
1152
1153
1154def vlan_create(options):
1155    return {'id': 200, 'step': 'WAIT'}
1156
1157
1158def vlan_update(vlan_id, options):
1159    return {'id': 200, 'step': 'WAIT'}
1160
1161
1162def iface_create(options):
1163    if 'ip' in options:
1164        return {'id': 200, 'step': 'WAIT', 'iface_id': 156572}
1165
1166    return {'id': 200, 'step': 'WAIT', 'iface_id': 156573}
1167
1168
1169def iface_delete(ip_id):
1170    return {'id': 200, 'step': 'WAIT'}
1171
1172
1173def iface_list(options):
1174
1175    ret = [{'bandwidth': 102400.0,
1176            'datacenter_id': 1,
1177            'date_created': DateTime('20140423T00:00:00'),
1178            'date_updated': DateTime('20140423T00:00:00'),
1179            'id': 156573,
1180            'ips_id': [203968, 204558],
1181            'ips': [{'datacenter_id': 1,
1182                     'date_created': DateTime('20150317T16:20:10'),
1183                     'date_updated': DateTime('20150319T11:14:13'),
1184                     'id': 203968,
1185                     'iface_id': 156573,
1186                     'ip': '95.142.160.181',
1187                     'num': 0,
1188                     'reverse': 'xvm-160-181.dc0.ghst.net',
1189                     'state': 'created',
1190                     'version': 4},
1191                    {'datacenter_id': 1,
1192                     'date_created': DateTime('20150319T11:14:16'),
1193                     'date_updated': DateTime('20150319T11:14:16'),
1194                     'id': 204558,
1195                     'iface_id': 156573,
1196                     'ip': '2001:4b98:dc0:47:216:3eff:feb2:3862',
1197                     'num': 1,
1198                     'reverse': 'xvm6-dc0-feb2-3862.ghst.net',
1199                     'state': 'created',
1200                     'version': 6}],
1201            'num': 0,
1202            'state': 'used',
1203            'type': 'public',
1204            'vlan': None,
1205            'vm_id': 152967},
1206           {'bandwidth': 102400.0,
1207            'datacenter_id': 1,
1208            'date_created': DateTime('20141009T00:00:00'),
1209            'date_updated': DateTime('20141105T00:00:00'),
1210            'id': 1416,
1211            'ips_id': [2361],
1212            'ips': [{'datacenter_id': 1,
1213                     'date_created': DateTime('20160115T162658'),
1214                     'date_updated': DateTime('20160115T162702'),
1215                     'id': 2361,
1216                     'iface_id': 1416,
1217                     'ip': '192.168.232.252',
1218                     'num': 0,
1219                     'reverse': '',
1220                     'state': 'created',
1221                     'version': 4}],
1222            'num': None,
1223            'state': 'used',
1224            'type': 'private',
1225            'vlan': {'id': 717, 'name': 'pouet'},
1226            'vm_id': 152968},
1227           {'bandwidth': 204800.0,
1228            'datacenter_id': 1,
1229            'date_created': DateTime('20150105T00:00:00'),
1230            'date_updated': DateTime('20150105T00:00:00'),
1231            'id': 1914,
1232            'ips': [{'datacenter_id': 1,
1233                     'date_created': DateTime('20160115T162658'),
1234                     'date_updated': DateTime('20160115T162702'),
1235                     'id': 2361,
1236                     'iface_id': 1914,
1237                     'ip': '192.168.232.253',
1238                     'num': 0,
1239                     'reverse': '',
1240                     'state': 'created',
1241                     'version': 4}],
1242            'ips_id': [2361],
1243            'num': None,
1244            'state': 'used',
1245            'type': 'private',
1246            'vlan': {'id': 717, 'name': 'pouet'},
1247            'vm_id': 152968},
1248           {'bandwidth': 204800.0,
1249            'datacenter_id': 1,
1250            'date_created': DateTime('20150105T00:00:00'),
1251            'date_updated': DateTime('20150105T00:00:00'),
1252            'id': 156572,
1253            'ips_id': [204557],
1254            'ips': [{'datacenter_id': 3,
1255                     'date_created': DateTime('20150319T11:10:34'),
1256                     'date_updated': DateTime('20150319T11:10:36'),
1257                     'id': 204557,
1258                     'iface_id': 156572,
1259                     'ip': '10.50.10.10',
1260                     'num': 0,
1261                     'reverse': 'xvm6-dc2-fece-e25f.ghst.net',
1262                     'state': 'created',
1263                     'version': 4}],
1264            'num': None,
1265            'state': 'free',
1266            'type': 'private',
1267            'vlan': None,
1268            'vm_id': None}]
1269
1270    options.pop('items_per_page', None)
1271
1272    for fkey in options:
1273        if fkey == 'vlan':
1274            ret_ = []
1275            for iface in ret:
1276                if iface['vlan'] and iface['vlan']['name'] == options['vlan']:
1277                    ret_.append(iface)
1278            ret = ret_
1279        elif fkey == 'vlan_id':
1280            ret_ = []
1281            for iface in ret:
1282                if iface['vlan'] and iface['vlan']['id'] == options['vlan_id']:
1283                    ret_.append(iface)
1284            ret = ret_
1285        else:
1286            ret = [iface for iface in ret if iface[fkey] == options[fkey]]
1287
1288    return ret
1289
1290
1291def iface_info(iface_id):
1292
1293    ifaces = iface_list({})
1294    ifaces = dict([(iface['id'], iface) for iface in ifaces])
1295    return ifaces[iface_id]
1296
1297
1298def ip_list(options):
1299
1300    ips = [{'datacenter_id': 1,
1301            'date_created': DateTime('20150317T16:20:10'),
1302            'date_updated': DateTime('20150319T11:14:13'),
1303            'id': 203968,
1304            'iface_id': 156573,
1305            'ip': '95.142.160.181',
1306            'num': 0,
1307            'reverse': 'xvm-160-181.dc0.ghst.net',
1308            'state': 'created',
1309            'version': 4},
1310           {'datacenter_id': 3,
1311            'date_created': DateTime('20150319T11:10:34'),
1312            'date_updated': DateTime('20150319T11:10:36'),
1313            'id': 204557,
1314            'iface_id': 156572,
1315            'ip': '2001:4b98:dc2:43:216:3eff:fece:e25f',
1316            'num': 0,
1317            'reverse': 'xvm6-dc2-fece-e25f.ghst.net',
1318            'state': 'created',
1319            'version': 6},
1320           {'datacenter_id': 1,
1321            'date_created': DateTime('20150319T11:14:16'),
1322            'date_updated': DateTime('20150319T11:14:16'),
1323            'id': 204558,
1324            'iface_id': 156573,
1325            'ip': '2001:4b98:dc0:47:216:3eff:feb2:3862',
1326            'num': 1,
1327            'reverse': 'xvm6-dc0-feb2-3862.ghst.net',
1328            'state': 'created',
1329            'version': 6},
1330           {'datacenter_id': 1,
1331            'date_created': DateTime('20160115T162658'),
1332            'date_updated': DateTime('20160115T162702'),
1333            'id': 2361,
1334            'iface_id': 1914,
1335            'ip': '192.168.232.253',
1336            'num': 0,
1337            'reverse': '',
1338            'state': 'created',
1339            'version': 4},
1340           {'datacenter_id': 1,
1341            'date_created': DateTime('20160115T162658'),
1342            'date_updated': DateTime('20160115T162702'),
1343            'id': 2361,
1344            'iface_id': 1416,
1345            'ip': '192.168.232.252',
1346            'num': 0,
1347            'reverse': '',
1348            'state': 'created',
1349            'version': 4}]
1350
1351    options.pop('items_per_page', None)
1352
1353    for fkey in options:
1354        ret = []
1355        for ip in ips:
1356            if isinstance(options[fkey], list):
1357                if ip[fkey] in options[fkey]:
1358                    ret.append(ip)
1359            elif ip[fkey] == options[fkey]:
1360                ret.append(ip)
1361        ips = ret
1362
1363    return ips
1364
1365
1366def ip_info(ip_id):
1367    ips = ip_list({})
1368    ips = dict([(ip['id'], ip) for ip in ips])
1369    return ips[ip_id]
1370
1371
1372def ip_update(ip_id, options):
1373    return {'id': 200, 'step': 'WAIT'}
1374
1375
1376def ssh_list(options):
1377    ret = [{'fingerprint': 'b3:11:67:10:2e:1b:a5:66:ed:16:24:98:3e:2e:ed:f5',
1378            'id': 134,
1379            'name': 'default',
1380            'value': 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC63QZAW3tusdv+JuyzOoXTND9/wxKogMwZbxBPPtoN7Hjnyn0kUUHMJ6ji5xpbatRYKOeGAoZDW2TXojvbJdQj7tWsRr7ES0qB9qhDGVSDIJWRQ6f9MQCCLjV5tpBTAwb unknown@lol.cat'},  # noqa
1381           {'fingerprint': '09:11:21:e3:90:3c:7d:d5:06:d9:6f:f9:36:e1:99:a6',
1382            'id': 141,
1383            'name': 'mysecretkey'}]
1384
1385    options.pop('items_per_page', None)
1386
1387    for fkey in options:
1388        ret = [vm for vm in ret if vm[fkey] == options[fkey]]
1389
1390    return ret
1391
1392
1393def ssh_info(key_id):
1394    keys = ssh_list({})
1395    keys = dict([(key['id'], key) for key in keys])
1396    return keys[key_id]
1397
1398
1399def ssh_delete(key_id):
1400    return {'id': 200, 'step': 'WAIT'}
1401
1402
1403def ssh_create(params):
1404    return {'fingerprint': 'b3:11:67:10:2e:1b:a5:55:ed:16:24:98:3e:2e:ed:f5',
1405            'id': 145,
1406            'name': params['name'],
1407            'value': params['value']}
1408
1409
1410def snapshotprofile_list(options):
1411    ret = [{'id': 1,
1412            'kept_total': 2,
1413            'name': 'minimal',
1414            'quota_factor': 1.2,
1415            'schedules': [{'kept_version': 2, 'name': 'daily'}]},
1416           {'id': 2,
1417            'kept_total': 7,
1418            'name': 'full_week',
1419            'quota_factor': 1.7,
1420            'schedules': [{'kept_version': 7, 'name': 'daily'}]},
1421           {'id': 3,
1422            'kept_total': 10,
1423            'name': 'security',
1424            'quota_factor': 2.0,
1425            'schedules': [{'kept_version': 3, 'name': 'hourly6'},
1426                          {'kept_version': 6, 'name': 'daily'},
1427                          {'kept_version': 1, 'name': 'weekly4'}]}]
1428
1429    for fkey in options:
1430        ret = [snp for snp in ret if snp[fkey] == options[fkey]]
1431
1432    return ret
1433
1434
1435def rproxy_list(options):
1436
1437    ret = [{'datacenter_id': 3,
1438            'date_created': DateTime('20160115T162658'),
1439            'id': 12138,
1440            'name': 'webacc01',
1441            'probe': {'enable': True,
1442                      'host': None,
1443                      'interval': None,
1444                      'method': None,
1445                      'response': None,
1446                      'threshold': None,
1447                      'timeout': None,
1448                      'url': None,
1449                      'window': None},
1450            'servers': [{'fallback': False,
1451                         'id': 14988,
1452                         'ip': '195.142.160.181',
1453                         'port': 80,
1454                         'rproxy_id': 132691,
1455                         'state': 'running'}],
1456            'ssl_enable': False,
1457            'state': 'running',
1458            'uuid': 12138,
1459            'vhosts': []},
1460           {'datacenter_id': 1,
1461            'date_created': DateTime('20160115T162658'),
1462            'id': 13263,
1463            'name': 'testwebacc',
1464            'probe': {'enable': True,
1465                      'host': '95.142.160.181',
1466                      'interval': 10,
1467                      'method': 'GET',
1468                      'response': 200,
1469                      'threshold': 3,
1470                      'timeout': 5,
1471                      'url': '/',
1472                      'window': 5},
1473            'servers': [{'fallback': False,
1474                         'id': 4988,
1475                         'ip': '95.142.160.181',
1476                         'port': 80,
1477                         'rproxy_id': 13269,
1478                         'state': 'running'}],
1479            'ssl_enable': False,
1480            'state': 'running',
1481            'uuid': 13263,
1482            'vhosts': [{'cert_id': None,
1483                        'id': 5171,
1484                        'name': 'pouet.iheartcli.com',
1485                        'rproxy_id': 13263,
1486                        'state': 'running'}]}]
1487
1488    options.pop('items_per_page', None)
1489
1490    for fkey in options:
1491        ret = [rpx for rpx in ret if rpx[fkey] == options[fkey]]
1492
1493    return ret
1494
1495
1496def rproxy_delete(rproxy_id):
1497    return {'id': 200, 'step': 'WAIT'}
1498
1499
1500def rproxy_info(rproxy_id):
1501    ret = [{'datacenter': {'country': 'France',
1502                           'dc_code': 'FR-SD2',
1503                           'id': 1,
1504                           'iso': 'FR',
1505                           'name': 'Equinix Paris'},
1506            'date_created': DateTime('20160115T162658'),
1507            'id': 13263,
1508            'lb': {'algorithm': 'client-ip'},
1509            'name': 'testwebacc',
1510            'probe': {'enable': True,
1511                      'host': '95.142.160.181',
1512                      'interval': 10,
1513                      'method': 'GET',
1514                      'response': 200,
1515                      'threshold': 3,
1516                      'timeout': 5,
1517                      'url': '/',
1518                      'window': 5},
1519            'servers': [{'fallback': False,
1520                         'id': 4988,
1521                         'ip': '95.142.160.181',
1522                         'port': 80,
1523                         'rproxy_id': 13269,
1524                         'state': 'running'}],
1525            'ssl_enable': False,
1526            'state': 'running',
1527            'uuid': 13263,
1528            'vhosts': [{'cert_id': None,
1529                        'id': 5171,
1530                        'name': 'pouet.iheartcli.com',
1531                        'rproxy_id': 13263,
1532                        'state': 'running'}]},
1533           {'datacenter': {'country': 'France',
1534                           'dc_code': 'FR-SD2',
1535                           'id': 1,
1536                           'iso': 'FR',
1537                           'name': 'Equinix Paris'},
1538            'date_created': DateTime('20160115T162658'),
1539            'id': 12138,
1540            'lb': {'algorithm': 'client-ip'},
1541            'name': 'webacc01',
1542            'probe': {'enable': True,
1543                      'host': None,
1544                      'interval': None,
1545                      'method': None,
1546                      'response': None,
1547                      'threshold': None,
1548                      'timeout': None,
1549                      'url': None,
1550                      'window': None},
1551            'servers': [{'fallback': False,
1552                         'id': 14988,
1553                         'ip': '195.142.160.181',
1554                         'port': 80,
1555                         'rproxy_id': 132691,
1556                         'state': 'running'}],
1557            'ssl_enable': False,
1558            'state': 'running',
1559            'uuid': 12138,
1560            'vhosts': []}]
1561
1562    rpx = dict([(rpx['id'], rpx) for rpx in ret])
1563    return rpx[rproxy_id]
1564
1565
1566def rproxy_update(rproxy_id, params):
1567    return {'id': 200, 'step': 'WAIT'}
1568
1569
1570def rproxy_create(params):
1571    return {'id': 200, 'step': 'WAIT'}
1572
1573
1574def rproxy_probe_disable(rproxy_id):
1575    return {'id': 200, 'step': 'WAIT'}
1576
1577
1578def rproxy_probe_enable(rproxy_id):
1579    return {'id': 200, 'step': 'WAIT'}
1580
1581
1582def rproxy_vhost_list():
1583    ret = [{'cert_id': None,
1584            'id': 5177,
1585            'name': 'pouet.iheartcli.com',
1586            'rproxy_id': 13269,
1587            'state': 'running'}]
1588
1589    return ret
1590
1591
1592def rproxy_vhost_delete(vhost):
1593    return {'id': 200, 'step': 'WAIT'}
1594
1595
1596def rproxy_vhost_create(rproxy_id, vhost):
1597    return {'id': 200, 'step': 'WAIT'}
1598
1599
1600def rproxy_probe_test(rproxy_id, params):
1601    return {'servers': [{'server': 4988, 'status': 200, 'timeout': 1.0}],
1602            'status': 200,
1603            'timeout': 1.0}
1604
1605
1606def rproxy_probe_update(rproxy_id, params):
1607    return {'id': 200, 'step': 'WAIT'}
1608
1609
1610def rproxy_server_create(rproxy_id, params):
1611    return {'id': 200, 'step': 'WAIT'}
1612
1613
1614def rproxy_server_list(params):
1615    return [{'fallback': False,
1616             'id': 14988,
1617             'ip': '195.142.160.181',
1618             'port': 80,
1619             'rproxy_id': 132691,
1620             'state': 'running'}]
1621
1622
1623def rproxy_server_delete(server_id):
1624    return {'id': 200, 'step': 'WAIT'}
1625
1626
1627def rproxy_server_enable(server_id):
1628    return {'id': 200, 'step': 'WAIT'}
1629
1630
1631def rproxy_server_disable(server_id):
1632    return {'id': 200, 'step': 'WAIT'}
1633