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