vagrant-vultr_pro 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,888 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'vultr/version'
4
+
5
+ module Vultr extend self
6
+
7
+ DEFINITIONS = {
8
+ # Account
9
+ Account: {
10
+ info: {
11
+ :method => :get,
12
+ :path => '/v1/account/info',
13
+ :apikey_required => true
14
+ }
15
+ },
16
+ # Application
17
+ App: {
18
+ list: {
19
+ :method => :get,
20
+ :path => '/v1/app/list',
21
+ :apikey_required => false
22
+ }
23
+ },
24
+ # API Key
25
+ Auth: {
26
+ info: {
27
+ :method => :get,
28
+ :path => '/v1/auth/info',
29
+ :apikey_required => true
30
+ }
31
+ },
32
+ # Backup
33
+ Backup: {
34
+ list: {
35
+ :method => :get,
36
+ :path => '/v1/backup/list',
37
+ :params => %w(SUBID BACKUPID),
38
+ :apikey_required => true
39
+ }
40
+ },
41
+ # Bare Metal
42
+ BareMetal: {
43
+ app_change: {
44
+ :method => :post,
45
+ :path => '/v1/baremetal/app_change',
46
+ :params => %w(SUBID APPID),
47
+ :apikey_required => true
48
+ },
49
+ app_change_list: {
50
+ :method => :get,
51
+ :path => '/v1/baremetal/app_change_list',
52
+ :params => %w(SUBID),
53
+ :apikey_required => true
54
+ },
55
+ bandwidth: {
56
+ :method => :get,
57
+ :path => '/v1/baremetal/bandwidth',
58
+ :apikey_required => true
59
+ },
60
+ create: {
61
+ :method => :post,
62
+ :path => '/v1/baremetal/create',
63
+ :params => %w(DCID METALPLANID OSID SCRIPTID SNAPSHOTID enable_ipv6 label SSHKEYID APPID userdata notify_activate hostname tag),
64
+ :apikey_required => true
65
+ },
66
+ destroy: {
67
+ :method => :post,
68
+ :path => '/v1/baremetal/destroy',
69
+ :params => %w(SUBID),
70
+ :apikey_required => true
71
+ },
72
+ get_app_info: {
73
+ :method => :get,
74
+ :path => '/v1/baremetal/get_app_info',
75
+ :params => %w(SUBID),
76
+ :apikey_required => true
77
+ },
78
+ get_user_data: {
79
+ :method => :get,
80
+ :path => '/v1/baremetal/get_user_data',
81
+ :params => %w(SUBID),
82
+ :apikey_required => true
83
+ },
84
+ halt: {
85
+ :method => :post,
86
+ :path => '/v1/baremetal/halt',
87
+ :params => %w(SUBID),
88
+ :apikey_required => true
89
+ },
90
+ ipv6_enable: {
91
+ :method => :post,
92
+ :path => '/v1/baremetal/ipv6_enable',
93
+ :params => %w(SUBID),
94
+ :apikey_required => true
95
+ },
96
+ label_set: {
97
+ :method => :post,
98
+ :path => '/v1/baremetal/label_set',
99
+ :params => %w(SUBID label),
100
+ :apikey_required => true
101
+ },
102
+ list: {
103
+ :method => :get,
104
+ :path => '/v1/baremetal/list',
105
+ :params => %w(SUBID tag label main_ip),
106
+ :apikey_required => true
107
+ },
108
+ list_ipv4: {
109
+ :method => :get,
110
+ :path => '/v1/baremetal/list_ipv4',
111
+ :params => %w(SUBID),
112
+ :apikey_required => true
113
+ },
114
+ list_ipv6: {
115
+ :method => :get,
116
+ :path => '/v1/baremetal/list_ipv6',
117
+ :params => %w(SUBID),
118
+ :apikey_required => true
119
+ },
120
+ os_change: {
121
+ :method => :post,
122
+ :path => '/v1/baremetal/os_change',
123
+ :params => %w(SUBID OSID),
124
+ :apikey_required => true
125
+ },
126
+ os_change_list: {
127
+ :method => :get,
128
+ :path => '/v1/baremetal/os_change_list',
129
+ :params => %w(SUBID),
130
+ :apikey_required => true
131
+ },
132
+ reboot: {
133
+ :method => :post,
134
+ :path => '/v1/baremetal/reboot',
135
+ :params => %w(SUBID),
136
+ :apikey_required => true
137
+ },
138
+ reinstall: {
139
+ :method => :post,
140
+ :path => '/v1/baremetal/reinstall',
141
+ :params => %w(SUBID),
142
+ :apikey_required => true
143
+ },
144
+ set_user_data: {
145
+ :method => :post,
146
+ :path => '/v1/baremetal/set_user_data',
147
+ :params => %w(SUBID userdata),
148
+ :apikey_required => true
149
+ },
150
+ tag_set: {
151
+ :method => :post,
152
+ :path => '/v1/baremetal/tag_set',
153
+ :params => %w(SUBID tag),
154
+ :apikey_required => true
155
+ }
156
+ },
157
+ # Block Storage
158
+ Block: {
159
+ attach: {
160
+ :method => :post,
161
+ :path => '/v1/block/attach?api_key=[api_key]',
162
+ :params => %w(SUBID attach_to_SUBID),
163
+ :apikey_required => true
164
+ },
165
+ create: {
166
+ :method => :post,
167
+ :path => '/v1/block/create',
168
+ :params => %w(DCID size_gb label),
169
+ :apikey_required => true
170
+ },
171
+ delete: {
172
+ :method => :post,
173
+ :path => '/v1/block/delete',
174
+ :params => %w(SUBID),
175
+ :apikey_required => true
176
+ },
177
+ detach: {
178
+ :method => :post,
179
+ :path => '/v1/block/detach',
180
+ :params => %w(SUBID),
181
+ :apikey_required => true
182
+ },
183
+ label_set: {
184
+ :method => :post,
185
+ :path => '/v1/block/label_set',
186
+ :params => %w(SUBID label),
187
+ :apikey_required => true
188
+ },
189
+ list: {
190
+ :method => :get,
191
+ :path => '/v1/block/list',
192
+ :params => %w(SUBID),
193
+ :apikey_required => true
194
+ },
195
+ resize: {
196
+ :method => :post,
197
+ :path => '/v1/block/resize',
198
+ :params => %w(SUBID size_gb),
199
+ :apikey_required => true
200
+ }
201
+ },
202
+ # DNS
203
+ DNS: {
204
+ create_domain: {
205
+ :method => :post,
206
+ :path => '/v1/dns/create_domain',
207
+ :params => %w(domain serverip),
208
+ :apikey_required => true
209
+ },
210
+ create_record: {
211
+ :method => :post,
212
+ :path => '/v1/dns/create_record',
213
+ :params => %w(domain name type data ttl priority),
214
+ :apikey_required => true
215
+ },
216
+ delete_domain: {
217
+ :method => :post,
218
+ :path => '/v1/dns/delete_domain',
219
+ :params => %w(domain),
220
+ :apikey_required => true
221
+ },
222
+ delete_record: {
223
+ :method => :post,
224
+ :path => '/v1/dns/delete_record',
225
+ :params => %w(domain RECORDID),
226
+ :apikey_required => true
227
+ },
228
+ dnssec_enable: {
229
+ :method => :post,
230
+ :path => '/v1/dns/dnssec_enable',
231
+ :params => %w(domain enable),
232
+ :apikey_required => true
233
+ },
234
+ dnssec_info: {
235
+ :method => :post,
236
+ :path => '/v1/dns/dnssec_info',
237
+ :params => %w(domain),
238
+ :apikey_required => true
239
+ },
240
+ list: {
241
+ :method => :get,
242
+ :path => '/v1/dns/list',
243
+ :apikey_required => true
244
+ },
245
+ records: {
246
+ :method => :get,
247
+ :path => '/v1/dns/records',
248
+ :params => %w(domain),
249
+ :apikey_required => true
250
+ },
251
+ soa_info: {
252
+ :method => :get,
253
+ :path => '/v1/dns/records',
254
+ :params => %w(domain),
255
+ :apikey_required => true
256
+ },
257
+ soa_update: {
258
+ :method => :get,
259
+ :path => '/v1/dns/records',
260
+ :params => %w(domain),
261
+ :apikey_required => true
262
+ },
263
+ update_record: {
264
+ :method => :post,
265
+ :path => '/v1/dns/update_record',
266
+ :params => %w(domain RECORDID name type data ttl priority),
267
+ :apikey_required => true
268
+ }
269
+ },
270
+ # Firewall
271
+ Firewall: {
272
+ group_create: {
273
+ :method => :post,
274
+ :path => '/v1/firewall/group_create',
275
+ :params => %w(description),
276
+ :apikey_required => true
277
+ },
278
+ group_delete: {
279
+ :method => :post,
280
+ :path => '/v1/firewall/group_delete',
281
+ :params => %w(FIREWALLGROUPID),
282
+ :apikey_required => true
283
+ },
284
+ group_list: {
285
+ :method => :get,
286
+ :path => '/v1/firewall/group_list',
287
+ :params => %w(FIREWALLGROUPID),
288
+ :apikey_required => true
289
+ },
290
+ group_set_description: {
291
+ :method => :post,
292
+ :path => '/v1/firewall/group_set_description',
293
+ :params => %w(FIREWALLGROUPID description),
294
+ :apikey_required => true
295
+ },
296
+ rule_create: {
297
+ :method => :post,
298
+ :path => '/v1/firewall/rule_create',
299
+ :params => %w(FIREWALLGROUPID direction ip_type protocol subnet subnet_size port notes),
300
+ :apikey_required => true
301
+ },
302
+ rule_delete: {
303
+ :method => :post,
304
+ :path => '/v1/firewall/rule_delete',
305
+ :params => %w(FIREWALLGROUPID rulenumber),
306
+ :apikey_required => true
307
+ },
308
+ rule_list: {
309
+ :method => :get,
310
+ :path => '/v1/firewall/rule_list',
311
+ :params => %w(FIREWALLGROUPID direction ip_type),
312
+ :apikey_required => true
313
+ }
314
+ },
315
+ # ISO Image
316
+ ISO: {
317
+ create_from_url: {
318
+ :method => :post,
319
+ :path => '/v1/iso/create_from_url',
320
+ :params => %w(url),
321
+ :apikey_required => true
322
+ },
323
+ list: {
324
+ :method => :get,
325
+ :path => '/v1/iso/list',
326
+ :apikey_required => true
327
+ },
328
+ list_public: {
329
+ :method => :get,
330
+ :path => '/v1/iso/list_public',
331
+ :apikey_required => true
332
+ }
333
+ },
334
+ # Network
335
+ Network: {
336
+ create: {
337
+ :method => :post,
338
+ :path => '/v1/network/create',
339
+ :params => %w(DCID description v4_subnet v4_subnet_mask),
340
+ :apikey_required => true
341
+ },
342
+ destroy: {
343
+ :method => :post,
344
+ :path => '/v1/network/destroy',
345
+ :params => %w(NETWORKID),
346
+ :apikey_required => true
347
+ },
348
+ list: {
349
+ :method => :get,
350
+ :path => '/v1/network/list',
351
+ :apikey_required => true
352
+ }
353
+ },
354
+ # Operating System
355
+ OS: {
356
+ list: {
357
+ :method => :get,
358
+ :path => '/v1/os/list',
359
+ :apikey_required => false
360
+ }
361
+ },
362
+ # Plans
363
+ Plans: {
364
+ list: {
365
+ :method => :get,
366
+ :path => '/v1/plans/list',
367
+ :params => %w(type),
368
+ :apikey_required => true
369
+ },
370
+ list_baremetal: {
371
+ :method => :get,
372
+ :path => '/v1/plans/list_baremetal',
373
+ :apikey_required => true
374
+ },
375
+ list_vc2: {
376
+ :method => :get,
377
+ :path => '/v1/plans/list_vc2',
378
+ :apikey_required => false
379
+ },
380
+ list_vdc2: {
381
+ :method => :get,
382
+ :path => '/v1/plans/list_vdc2',
383
+ :apikey_required => false
384
+ }
385
+ },
386
+ # Regions
387
+ Regions: {
388
+ availability: {
389
+ :method => :get,
390
+ :path => '/v1/regions/availability',
391
+ :params => %w(DCID type),
392
+ :apikey_required => false
393
+ },
394
+ availability_baremetal: {
395
+ :method => :get,
396
+ :path => '/v1/regions/availability_baremetal',
397
+ :params => %w(DCID),
398
+ :apikey_required => true
399
+ },
400
+ availability_vc2: {
401
+ :method => :get,
402
+ :path => '/v1/regions/availability_vc2',
403
+ :params => %w(DCID),
404
+ :apikey_required => false
405
+ },
406
+ availability_vdc2: {
407
+ :method => :get,
408
+ :path => '/v1/regions/availability_vdc2',
409
+ :params => %w(DCID),
410
+ :apikey_required => false
411
+ },
412
+ list: {
413
+ :method => :get,
414
+ :path => '/v1/regions/list',
415
+ :params => %w(availability),
416
+ :apikey_required => false
417
+ }
418
+ },
419
+ # Reserved IP
420
+ ReservedIP: {
421
+ attach: {
422
+ :method => :post,
423
+ :path => '/v1/reservedip/attach',
424
+ :params => %w(ip_address attach_SUBID),
425
+ :apikey_required => true
426
+ },
427
+ convert: {
428
+ :method => :post,
429
+ :path => '/v1/reservedip/convert',
430
+ :params => %w(SUBID ip_address label),
431
+ :apikey_required => true
432
+ },
433
+ create: {
434
+ :method => :post,
435
+ :path => '/v1/reservedip/create',
436
+ :params => %w(DCID ip_type label),
437
+ :apikey_required => true
438
+ },
439
+ destroy: {
440
+ :method => :post,
441
+ :path => '/v1/reservedip/destroy',
442
+ :params => %w(ip_address),
443
+ :apikey_required => true
444
+ },
445
+ detach: {
446
+ :method => :post,
447
+ :path => '/v1/reservedip/detach',
448
+ :params => %w(ip_address detach_SUBID),
449
+ :apikey_required => true
450
+ },
451
+ list: {
452
+ :method => :get,
453
+ :path => '/v1/reservedip/list',
454
+ :apikey_required => true
455
+ }
456
+ },
457
+ # Server
458
+ Server: {
459
+ app_change: {
460
+ :method => :post,
461
+ :path => '/v1/server/app_change',
462
+ :params => %w(SUBID APPID),
463
+ :apikey_required => true
464
+ },
465
+ app_change_list: {
466
+ :method => :get,
467
+ :path => '/v1/server/app_change_list',
468
+ :params => ['SUBID'],
469
+ :apikey_required => true
470
+ },
471
+ backup_disable: {
472
+ :method => :post,
473
+ :path => '/v1/server/backup_disable',
474
+ :params => %w(SUBID),
475
+ :apikey_required => true
476
+ },
477
+ backup_enable: {
478
+ :method => :post,
479
+ :path => '/v1/server/backup_enable',
480
+ :params => %w(SUBID),
481
+ :apikey_required => true
482
+ },
483
+ backup_get_schedule: {
484
+ :method => :post,
485
+ :path => '/v1/server/backup_get_schedule',
486
+ :params => %w(SUBID),
487
+ :apikey_required => true
488
+ },
489
+ backup_set_schedule: {
490
+ :method => :post,
491
+ :path => '/v1/server/backup_set_schedule',
492
+ :params => %w(SUBID cron_type hour dow dom),
493
+ :apikey_required => true
494
+ },
495
+ bandwidth: {
496
+ :method => :get,
497
+ :path => '/v1/server/bandwidth',
498
+ :params => %w(SUBID),
499
+ :apikey_required => true
500
+ },
501
+ create: {
502
+ :method => :post,
503
+ :path => '/v1/server/create',
504
+ :params => %w(DCID VPSPLANID OSID ipxe_chain_url ISOID SCRIPTID SNAPSHOTID enable_ipv6 enable_private_network NETWORKID label SSHKEYID auto_backups APPID userdata notify_activate ddos_protection reserved_ip_v4 hostname tag FIREWALLGROUPID),
505
+ :apikey_required => true
506
+ },
507
+ create_ipv4: {
508
+ :method => :post,
509
+ :path => '/v1/server/create_ipv4',
510
+ :params => %w(SUBID reboot),
511
+ :apikey_required => true
512
+ },
513
+ destroy: {
514
+ :method => :post,
515
+ :path => '/v1/server/destroy',
516
+ :params => %w(SUBID),
517
+ :apikey_required => true
518
+ },
519
+ destroy_ipv4: {
520
+ :method => :post,
521
+ :path => '/v1/server/destroy_ipv4',
522
+ :params => %w(SUBID ip),
523
+ :apikey_required => true
524
+ },
525
+ firewall_group_set: {
526
+ :method => :post,
527
+ :path => '/v1/server/firewall_group_set',
528
+ :params => %w(SUBID FIREWALLGROUPID),
529
+ :apikey_required => true
530
+ },
531
+ get_app_info: {
532
+ :method => :get,
533
+ :path => '/v1/server/get_app_info',
534
+ :params => %w(SUBID),
535
+ :apikey_required => true
536
+ },
537
+ get_user_data: {
538
+ :method => :get,
539
+ :path => '/v1/server/set_user_data',
540
+ :params => %w(SUBID),
541
+ :apikey_required => true
542
+ },
543
+ halt: {
544
+ :method => :post,
545
+ :path => '/v1/server/halt',
546
+ :params => %w('SUBID'),
547
+ :apikey_required => true
548
+ },
549
+ ipv6_enable: {
550
+ :method => :post,
551
+ :path => '/v1/server/ipv6_enable',
552
+ :params => %w(SUBID),
553
+ :apikey_required => true
554
+ },
555
+ iso_attach: {
556
+ :method => :post,
557
+ :path => '/v1/server/iso_detach',
558
+ :params => %w(SUBID, ISOID),
559
+ :apikey_required => true
560
+ },
561
+ iso_detach: {
562
+ :method => :post,
563
+ :path => '/v1/server/iso_detach',
564
+ :params => %w(SUBID),
565
+ :apikey_required => true
566
+ },
567
+ iso_status: {
568
+ :method => :get,
569
+ :path => '/v1/server/iso_status',
570
+ :params => %w(SUBID),
571
+ :apikey_required => true
572
+ },
573
+ label_set: {
574
+ :method => :post,
575
+ :path => '/v1/server/label_set',
576
+ :params => %w(SUBID label),
577
+ :apikey_required => true
578
+ },
579
+ list: {
580
+ :method => :get,
581
+ :path => '/v1/server/list',
582
+ :params => %w(SUBID tag label main_ip),
583
+ :apikey_required => true
584
+ },
585
+ list_ipv4: {
586
+ :method => :get,
587
+ :path => '/v1/server/list_ipv4',
588
+ :params => %w(SUBID),
589
+ :apikey_required => true
590
+ },
591
+ list_ipv6: {
592
+ :method => :get,
593
+ :path => '/v1/server/list_ipv6',
594
+ :params => %w(SUBID),
595
+ :apikey_required => true
596
+ },
597
+ neighbors: {
598
+ :method => :get,
599
+ :path => '/v1/server/neighbors',
600
+ :params => %w(SUBID),
601
+ :apikey_required => true
602
+ },
603
+ os_change: {
604
+ :method => :post,
605
+ :path => '/v1/server/os_change',
606
+ :params => %w(SUBID OSID),
607
+ :apikey_required => true
608
+ },
609
+ os_change_list: {
610
+ :method => :get,
611
+ :path => '/v1/server/os_change_list',
612
+ :params => %w(SUBID),
613
+ :apikey_required => true
614
+ },
615
+ private_network_disable: {
616
+ :method => :post,
617
+ :path => '/v1/server/private_network_disable',
618
+ :params => %w(SUBID NETWORKID),
619
+ :apikey_required => true
620
+ },
621
+ private_network_enable: {
622
+ :method => :post,
623
+ :path => '/v1/server/private_network_enable',
624
+ :params => %w(SUBID NETWORKID),
625
+ :apikey_required => true
626
+ },
627
+ private_networks: {
628
+ :method => :get,
629
+ :path => '/v1/server/private_networks',
630
+ :params => %w(SUBID),
631
+ :apikey_required => true
632
+ },
633
+ reboot: {
634
+ :method => :post,
635
+ :path => '/v1/server/reboot',
636
+ :params => %w(SUBID),
637
+ :apikey_required => true
638
+ },
639
+ reinstall: {
640
+ :method => :post,
641
+ :path => '/v1/server/reinstall',
642
+ :params => %w(SUBID hostname),
643
+ :apikey_required => true
644
+ },
645
+ restore_backup: {
646
+ :method => :post,
647
+ :path => '/v1/server/restore_backup',
648
+ :params => %w(SUBID BACKUPID),
649
+ :apikey_required => true
650
+ },
651
+ restore_snapshot: {
652
+ :method => :post,
653
+ :path => '/v1/server/restore_snapshot',
654
+ :params => %w(SUBID SNAPSHOTID),
655
+ :apikey_required => true
656
+ },
657
+ reverse_default_ipv4: {
658
+ :method => :post,
659
+ :path => '/v1/server/reverse_default_ipv4',
660
+ :params => %w(SUBID ip),
661
+ :apikey_required => true
662
+ },
663
+ reverse_delete_ipv6: {
664
+ :method => :post,
665
+ :path => '/v1/server/reverse_delete_ipv6',
666
+ :params => %w(SUBID ip),
667
+ :apikey_required => true
668
+ },
669
+ reverse_list_ipv6: {
670
+ :method => :get,
671
+ :path => '/v1/server/reverse_list_ipv6',
672
+ :params => %w(SUBID),
673
+ :apikey_required => true
674
+ },
675
+ reverse_set_ipv4: {
676
+ :method => :post,
677
+ :path => '/v1/server/reverse_set_ipv4',
678
+ :params => %w(SUBID ip entry),
679
+ :apikey_required => true
680
+ },
681
+ reverse_set_ipv6: {
682
+ :method => :post,
683
+ :path => '/v1/server/reverse_set_ipv6',
684
+ :params => %w(SUBID ip entry),
685
+ :apikey_required => true
686
+ },
687
+ set_user_data: {
688
+ :method => :post,
689
+ :path => '/v1/server/set_user_data',
690
+ :params => %w(SUBID userdata),
691
+ :apikey_required => true
692
+ },
693
+ start: {
694
+ :method => :post,
695
+ :path => '/v1/server/start',
696
+ :params => %w(SUBID),
697
+ :apikey_required => true
698
+ },
699
+ tag_set: {
700
+ :method => :post,
701
+ :path => '/v1/server/tag_set',
702
+ :params => %w(SUBID tag),
703
+ :apikey_required => true
704
+ },
705
+ upgrade_plan: {
706
+ :method => :post,
707
+ :path => '/v1/server/upgrade_plan',
708
+ :params => %w(SUBID VPSPLANID),
709
+ :apikey_required => true
710
+ },
711
+ upgrade_plan_list: {
712
+ :method => :get,
713
+ :path => '/v1/server/upgrade_plan_list',
714
+ :params => %w(SUBID),
715
+ :apikey_required => true
716
+ }
717
+ },
718
+ # Snapshot
719
+ Snapshot: {
720
+ create: {
721
+ :method => :post,
722
+ :path => '/v1/snapshot/create',
723
+ :params => %w(SUBID),
724
+ :apikey_required => true
725
+ },
726
+ destroy: {
727
+ :method => :post,
728
+ :path => '/v1/snapshot/destroy',
729
+ :params => %w(SNAPSHOTID),
730
+ :apikey_required => true
731
+ },
732
+ list: {
733
+ :method => :get,
734
+ :path => '/v1/snapshot/list',
735
+ :apikey_required => true
736
+ }
737
+ },
738
+ # SSH Key
739
+ SSHKey: {
740
+ create: {
741
+ :method => :post,
742
+ :path => '/v1/sshkey/create',
743
+ :params => %w(name ssh_key),
744
+ :apikey_required => true
745
+ },
746
+ destroy: {
747
+ :method => :post,
748
+ :path => '/v1/sshkey/destroy',
749
+ :params => %w(SSHKEYID),
750
+ :apikey_required => true
751
+ },
752
+ list: {
753
+ :method => :get,
754
+ :path => '/v1/sshkey/list',
755
+ :apikey_required => true
756
+ },
757
+ update: {
758
+ :method => :post,
759
+ :path => '/v1/sshkey/update',
760
+ :params => %w(SSHKEYID name ssh_key),
761
+ :apikey_required => true
762
+ }
763
+ },
764
+ # Startup Script
765
+ StartupScript: {
766
+ create: {
767
+ :method => :post,
768
+ :path => '/v1/startupscript/create',
769
+ :params => %w(name script type),
770
+ :apikey_required => true
771
+ },
772
+ destroy: {
773
+ :method => :post,
774
+ :path => '/v1/startupscript/destroy',
775
+ :params => %w(SCRIPTID),
776
+ :apikey_required => true
777
+ },
778
+ list: {
779
+ :method => :get,
780
+ :path => '/v1/startupscript/list',
781
+ :apikey_required => true
782
+ },
783
+ update: {
784
+ :method => :post,
785
+ :path => '/v1/startupscript/update',
786
+ :params => %w(SCRIPTID name script),
787
+ :apikey_required => true
788
+ }
789
+ },
790
+ # User Management
791
+ User: {
792
+ create: {
793
+ :method => :post,
794
+ :path => '/v1/user/create',
795
+ :params => %w(email name password api_enabled acls),
796
+ :apikey_required => true
797
+ },
798
+ delete: {
799
+ :method => :post,
800
+ :path => '/v1/user/delete',
801
+ :params => %w(USERID),
802
+ :apikey_required => true
803
+ },
804
+ list: {
805
+ :method => :get,
806
+ :path => '/v1/user/list',
807
+ :apikey_required => true
808
+ },
809
+ update: {
810
+ :method => :post,
811
+ :path => '/v1/user/update',
812
+ :params => %w(USERID email name password api_enabled acls),
813
+ :apikey_required => true
814
+ }
815
+ }
816
+ }
817
+
818
+ DEFINITIONS.each do |resource_name, actions|
819
+ resource_class = Class.new(Object) do
820
+ actions.each do |action, config|
821
+ method = config.fetch(:method)
822
+ path = config.fetch(:path)
823
+ params = config.fetch(:params, nil)
824
+ apikey_required = config.fetch(:apikey_required, false)
825
+
826
+ define_singleton_method action do |*args|
827
+ headers = apikey_required ? {'API-Key' => Vultr::APIKey} : {}
828
+ body = nil
829
+ if method == :get
830
+ extra_params = Hash.new
831
+ hash = args[-1]
832
+ if hash.is_a?(Hash)
833
+ hash.each do |key, value|
834
+ extra_params[key] = value if params.include? key.to_s
835
+ end
836
+ end
837
+ url = Vultr.request.build_url(path, extra_params)
838
+ elsif method == :post
839
+ body = Hash.new
840
+ hash = args[-1]
841
+ if hash.is_a?(Hash)
842
+ hash.each do |key, value|
843
+ body[key] = value if params.include? key.to_s
844
+ end
845
+ end
846
+ url = Vultr.request.build_url(path)
847
+ end
848
+
849
+ resp = Vultr.request.run_request(method, url, body, headers)
850
+ {status: resp.status, result: resp.body}
851
+ end
852
+ end
853
+ end
854
+
855
+ Vultr.const_set(resource_name, resource_class)
856
+ end
857
+
858
+ def request=(request)
859
+ @request = request
860
+ end
861
+
862
+ def request
863
+ @request
864
+ end
865
+
866
+ def api_key=(api_key)
867
+ Vultr.const_set('APIKey', api_key)
868
+ setup_request!
869
+
870
+ Vultr::APIKey
871
+ end
872
+
873
+ def api_key
874
+ return Vultr::APIKey if Vultr::APIKey
875
+ 'API Key is required'
876
+ end
877
+
878
+ private
879
+
880
+ def setup_request!
881
+ Vultr.request = Faraday.new do |faraday|
882
+ faraday.url_prefix = 'https://api.vultr.com'
883
+ faraday.request :url_encoded
884
+ faraday.response :json, :content_type => 'application/json'
885
+ faraday.adapter :net_http
886
+ end
887
+ end
888
+ end