ganeti_client 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -13
- data/lib/ganeti_client.rb +1 -1
- data/lib/ganeti_client/client.rb +64 -26
- data/lib/ganeti_client/ganeti_object.rb +1 -1
- metadata +4 -4
data/README
CHANGED
@@ -2,28 +2,16 @@
|
|
2
2
|
|
3
3
|
1. Manually test the following methods + fix when bugs found
|
4
4
|
1.1. redistribute_config
|
5
|
-
1.2. instance_create
|
6
5
|
1.3. instance_delete
|
7
|
-
1.4. instance_reboot
|
8
|
-
1.5. instance_shutdown
|
9
|
-
1.6. instance_startup
|
10
6
|
1.7. instance_reinstall
|
11
7
|
1.8. instance_replace_disks
|
12
8
|
1.9. instance_activate_disks
|
13
|
-
1.10. instance_create_tags
|
14
|
-
1.11. instance_delete_tags
|
15
9
|
1.13. job_delete
|
16
|
-
1.14. node_evaluate
|
17
10
|
1.15. node_migrate
|
18
11
|
1.16. node_change_role
|
19
12
|
1.17. node_get_storage
|
20
13
|
1.18. node_modify_storage
|
21
14
|
1.19. node_repair_storage
|
22
|
-
1.20. node_get_tags
|
23
|
-
1.21. node_create_tags
|
24
|
-
1.22. node_delete_tags
|
25
|
-
1.22. tags_create
|
26
|
-
1.23. tags_delete
|
27
15
|
2. Add some error handling
|
28
16
|
3. Make some code improvements
|
29
17
|
4. Add better comments
|
@@ -47,7 +35,7 @@
|
|
47
35
|
|
48
36
|
# now you should be able to access the api resources by using the client instance.
|
49
37
|
# example:
|
50
|
-
info = client.
|
38
|
+
info = client.info_get
|
51
39
|
=> #<GanetiInfo:0x10151bb78>
|
52
40
|
|
53
41
|
# most methods return an object. When you use .to_json on an object, you get the json object returned
|
data/lib/ganeti_client.rb
CHANGED
data/lib/ganeti_client/client.rb
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
# Copyright:: Copyright (c) 2010 Michaël Rigart
|
28
28
|
# License:: Distributes under AGPL Licence
|
29
29
|
|
30
|
-
module
|
30
|
+
module Ganeti
|
31
31
|
|
32
32
|
# This class contains all active resources available in Ganeti RAPI
|
33
33
|
class Client
|
@@ -85,6 +85,7 @@ module GanetiClient
|
|
85
85
|
# Array of all available instances. The array items contain a GanetiInstance object
|
86
86
|
def instances_get(bulk = 0)
|
87
87
|
url = get_url("instances", {"bulk" => bulk})
|
88
|
+
body = JSON.generate({"bulk" => bulk})
|
88
89
|
response_body = JSON.parse(send_request("GET", url))
|
89
90
|
|
90
91
|
create_class("GanetiInstance")
|
@@ -103,12 +104,12 @@ module GanetiClient
|
|
103
104
|
# excluded to not cause issues with rapi.
|
104
105
|
#
|
105
106
|
# Example:
|
106
|
-
#
|
107
|
-
#
|
108
|
-
#
|
109
|
-
#
|
110
|
-
#
|
111
|
-
#
|
107
|
+
# info = {
|
108
|
+
# 'hypervisor' => 'kvm' , 'disk_template' => 'plain',
|
109
|
+
# 'pnode' => 'node.netronix.be', 'name' => 'vm1.netronix.be', 'os' => 'debootstrap+lucid',
|
110
|
+
# 'vcpus' => '4', 'memory' => '4096', 'disks' => [25600],
|
111
|
+
# 'kernel-path' => '/boot/vmlinuz-2.6-kvmU'
|
112
|
+
# }
|
112
113
|
#
|
113
114
|
# Parameters:
|
114
115
|
# info: hash of data needed for the instance creation
|
@@ -120,7 +121,7 @@ module GanetiClient
|
|
120
121
|
params = {
|
121
122
|
'hypervisor' => info['hypervisor'], 'disk_template' => info['disk_template'],
|
122
123
|
'pnode' => info['pnode'], 'name' => info['iname'], 'os' => info['os'],
|
123
|
-
'vcpus' => info['vcpus'], 'memory' => info['memory'], 'disks' =>
|
124
|
+
'vcpus' => info['vcpus'], 'memory' => info['memory'], 'disks' => info['disks']
|
124
125
|
}
|
125
126
|
|
126
127
|
# Add secondary node
|
@@ -202,7 +203,7 @@ module GanetiClient
|
|
202
203
|
# dry_run: 0|1 (optional)
|
203
204
|
#
|
204
205
|
# Return:
|
205
|
-
#
|
206
|
+
# job id
|
206
207
|
def instance_reboot(name, type = "soft", ignore_secondaries = 0, dry_run = 0)
|
207
208
|
url = get_url("instances/#{name}/reboot", {"type" => type, "ignore_secondaries" => ignore_secondaries, "dry_run" => 0})
|
208
209
|
response_body = send_request("POST", url)
|
@@ -218,12 +219,12 @@ module GanetiClient
|
|
218
219
|
# dry_run: 0|1 (optional)
|
219
220
|
#
|
220
221
|
# Return:
|
221
|
-
#
|
222
|
+
# job id
|
222
223
|
def instance_shutdown(name, dry_run = 0)
|
223
224
|
url = get_url("instances/#{name}/shutdown", {"dry-run" => dry_run})
|
224
225
|
response_body = send_request("PUT", url)
|
225
226
|
|
226
|
-
return response_body
|
227
|
+
return response_body
|
227
228
|
end
|
228
229
|
|
229
230
|
# Startup an instance
|
@@ -235,11 +236,10 @@ module GanetiClient
|
|
235
236
|
# dry_run: 0|1 (optional)
|
236
237
|
#
|
237
238
|
# Return:
|
238
|
-
#
|
239
|
+
# job id
|
239
240
|
def instance_startup(name, force = 0, dry_run=0)
|
240
241
|
url = get_url("instances/#{name}/startup", {"force" => force, "dry-run" => dry_run})
|
241
|
-
|
242
|
-
response_body = send_request("PUT", url, body)
|
242
|
+
response_body = send_request("PUT", url)
|
243
243
|
|
244
244
|
return response_body
|
245
245
|
end
|
@@ -333,9 +333,9 @@ module GanetiClient
|
|
333
333
|
# dry_run: 0|1 (optional)
|
334
334
|
#
|
335
335
|
# Return:
|
336
|
-
#
|
336
|
+
# job id
|
337
337
|
def instance_create_tags(name, tags, dry_run = 0)
|
338
|
-
url = get_url("instances/#{name}/tags", {
|
338
|
+
url = get_url("instances/#{name}/tags", {'dry-run' => dry_run, 'tag' => tags})
|
339
339
|
response_body = send_request("PUT", url)
|
340
340
|
|
341
341
|
return response_body
|
@@ -349,9 +349,9 @@ module GanetiClient
|
|
349
349
|
# dry_run: 0|1 (optional)
|
350
350
|
#
|
351
351
|
# Return:
|
352
|
-
#
|
352
|
+
# job id
|
353
353
|
def instance_delete_tags(name, tags, dry_run = 0)
|
354
|
-
url = get_url("instances/#{name}/tags",
|
354
|
+
url = get_url("instances/#{name}/tags", {'dry-run' => dry_run, 'tag' => tags})
|
355
355
|
response_body = send_request("DELETE", url)
|
356
356
|
|
357
357
|
return response_body
|
@@ -439,7 +439,7 @@ module GanetiClient
|
|
439
439
|
# ?
|
440
440
|
def job_delete(job_id)
|
441
441
|
url = get_url("jobs/#{job_id}")
|
442
|
-
|
442
|
+
response_body = send_request("DELETE", url)
|
443
443
|
|
444
444
|
return response_body
|
445
445
|
end
|
@@ -477,7 +477,10 @@ module GanetiClient
|
|
477
477
|
# Example:
|
478
478
|
# evacuate?iallocator=[iallocator]
|
479
479
|
# evacuate?remote_node=[nodeX.example.com]
|
480
|
-
|
480
|
+
#
|
481
|
+
# Return:
|
482
|
+
# job id
|
483
|
+
def node_evaluate(name, iallocator = "", remote_node = "")
|
481
484
|
url = get_url("nodes/#{name}/evacuate", {"iallocator" => iallocator, "remote_node" => remote_node})
|
482
485
|
response_body = send_request("POST", url)
|
483
486
|
|
@@ -570,9 +573,15 @@ module GanetiClient
|
|
570
573
|
#
|
571
574
|
# Example:
|
572
575
|
# ["tag1","tag2", "tag3"]
|
576
|
+
#
|
577
|
+
# Parameters:
|
578
|
+
# name: name of node
|
579
|
+
#
|
580
|
+
# Return:
|
581
|
+
# array of tags
|
573
582
|
def node_get_tags(name)
|
574
583
|
url = get_url("nodes/#{name}/tags")
|
575
|
-
response_body = send_request("GET", url)
|
584
|
+
response_body = JSON.parse(send_request("GET", url))
|
576
585
|
|
577
586
|
return response_body
|
578
587
|
end
|
@@ -582,8 +591,15 @@ module GanetiClient
|
|
582
591
|
# It supports the dry-run argument
|
583
592
|
#
|
584
593
|
# The result will be a job id
|
594
|
+
#
|
595
|
+
# Parameters:
|
596
|
+
# name: node name
|
597
|
+
# tags: Array of tags
|
598
|
+
#
|
599
|
+
# Return:
|
600
|
+
# job id
|
585
601
|
def node_create_tags(name, tags, dry_run = 0)
|
586
|
-
url = get_url("nodes/#{name}/tags", {"
|
602
|
+
url = get_url("nodes/#{name}/tags", {"tag" => tags, "dry-run" => dry_run})
|
587
603
|
response_body = send_request("PUT", url)
|
588
604
|
|
589
605
|
return response_body
|
@@ -594,8 +610,15 @@ module GanetiClient
|
|
594
610
|
# /tags?tag=[tag]&tag=[tag]
|
595
611
|
#
|
596
612
|
# It supports the dry-run argument
|
613
|
+
#
|
614
|
+
# Parameters:
|
615
|
+
# name: node name
|
616
|
+
# tags: Array of tags
|
617
|
+
#
|
618
|
+
# Return:
|
619
|
+
# job id
|
597
620
|
def node_delete_tags(name, tags, dry_run = 0)
|
598
|
-
url = get_url("nodes/#{name}/tags", {"
|
621
|
+
url = get_url("nodes/#{name}/tags", {"tag" => tags, "dry-run" => dry_run})
|
599
622
|
response_body = send_request("DELETE", url)
|
600
623
|
|
601
624
|
return response_body
|
@@ -620,6 +643,9 @@ module GanetiClient
|
|
620
643
|
#
|
621
644
|
# Example:
|
622
645
|
# ["tag1", "tag2", "tag3"]
|
646
|
+
#
|
647
|
+
# Return:
|
648
|
+
# Array of tags
|
623
649
|
def tags_get
|
624
650
|
url = get_url("tags")
|
625
651
|
response_body = JSON.parse(send_request("GET", url))
|
@@ -631,8 +657,14 @@ module GanetiClient
|
|
631
657
|
# The request as a list of strings should be PUT to this URI. The result will be a job id
|
632
658
|
#
|
633
659
|
# It supports the dry-run argument
|
660
|
+
#
|
661
|
+
# Parameters
|
662
|
+
# tags: Array of tags
|
663
|
+
#
|
664
|
+
# Return:
|
665
|
+
# job id
|
634
666
|
def tags_create(tags, dry_run = 0)
|
635
|
-
url = get_url("tags", {"
|
667
|
+
url = get_url("tags", {"tag" => tags, "dry-run" => dry_run})
|
636
668
|
response_body = send_request("PUT", url)
|
637
669
|
|
638
670
|
return response_body
|
@@ -643,8 +675,14 @@ module GanetiClient
|
|
643
675
|
# /tags?tag=[tag]&tag=[tag]
|
644
676
|
#
|
645
677
|
# It supports the dry-run argument
|
678
|
+
#
|
679
|
+
# Parameters:
|
680
|
+
# tags: Array of tags
|
681
|
+
#
|
682
|
+
# Return:
|
683
|
+
# job id
|
646
684
|
def tags_delete(tags, dry_run = 0)
|
647
|
-
url = get_url("tags", {"
|
685
|
+
url = get_url("tags", {"tag" => tags, "dry-run" => dry_run})
|
648
686
|
response_body = send_request("DELETE", url)
|
649
687
|
|
650
688
|
return response_body
|
@@ -710,7 +748,7 @@ module GanetiClient
|
|
710
748
|
|
711
749
|
def create_class(class_name)
|
712
750
|
unless(class_exists?(class_name))
|
713
|
-
klass = Class.new
|
751
|
+
klass = Class.new Ganeti::GanetiObject
|
714
752
|
Object.const_set(class_name, klass)
|
715
753
|
end
|
716
754
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ganeti_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Micha\xC3\xABl Rigart"
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-08-
|
18
|
+
date: 2010-08-17 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|