xenrec 0.1.1 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +7 -0
- data/Rakefile +2 -0
- data/VERSION +1 -1
- data/lib/xenrec.rb +90 -15
- data/xenrec.gemspec +8 -2
- metadata +22 -2
data/README.rdoc
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
Capistrano recipe for targeting XenServer Hosts, to create and remove VMs
|
4
4
|
|
5
|
+
== Sample deploy.rb
|
6
|
+
role :xen, "myXenHost"
|
7
|
+
set :user, "root"
|
8
|
+
|
9
|
+
set :xen_storage_uuid, "3ec9e184-08ab-bdf1-e542-42040e4ee506"
|
10
|
+
set :xen_template_uuid, "ec61c6b2-8641-a870-b284-1cca4c891392"
|
11
|
+
|
5
12
|
== Note on Patches/Pull Requests
|
6
13
|
|
7
14
|
* Fork the project.
|
data/Rakefile
CHANGED
@@ -13,6 +13,8 @@ begin
|
|
13
13
|
gem.add_development_dependency "rspec"
|
14
14
|
gem.add_development_dependency "yard"
|
15
15
|
gem.add_development_dependency "cucumber"
|
16
|
+
gem.add_dependency('capistrano', '>= 2.5.9')
|
17
|
+
gem.add_dependency('capistrano-ext', '>= 1.2.1')
|
16
18
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
17
19
|
end
|
18
20
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/lib/xenrec.rb
CHANGED
@@ -1,18 +1,36 @@
|
|
1
1
|
Capistrano::Configuration.instance(:must_exist).load do
|
2
2
|
namespace :xenrec do
|
3
|
-
|
4
|
-
desc "
|
5
|
-
task :
|
3
|
+
namespace :sr do
|
4
|
+
desc "List Storage Nodes"
|
5
|
+
task :list, :roles => :xen do
|
6
6
|
get_command_line
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
output = capture "xe sr-list"
|
8
|
+
puts(output)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
namespace :template do
|
13
|
+
desc "List Templates"
|
14
|
+
task :list, :roles => :xen do
|
15
|
+
get_command_line
|
16
|
+
output = capture "xe template-list"
|
17
|
+
puts(output)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
namespace :vm do
|
22
|
+
desc "Install a Xen VM"
|
23
|
+
task :install, :roles => :xen do
|
24
|
+
get_command_line
|
25
|
+
command = "xe vm-install template=\"#{xen_template_uuid}\" new-name-label=\"#{xen_vm_name}\""
|
26
|
+
command << " sr-uuid=#{xen_storage_uuid}" if defined? xen_storage_uuid
|
27
|
+
run command
|
10
28
|
end
|
11
29
|
|
12
30
|
desc "Shutdown a Xen VM"
|
13
31
|
task :shutdown, :roles => :xen do
|
14
32
|
get_command_line
|
15
|
-
run "xe vm-shutdown force=#{xen_use_force} vm=\"#{xen_vm_name}\""
|
33
|
+
run "xe vm-shutdown --multiple force=#{xen_use_force} vm=\"#{xen_vm_name}\""
|
16
34
|
end
|
17
35
|
|
18
36
|
desc "Start a Xen VM"
|
@@ -21,25 +39,82 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
21
39
|
run "xe vm-start force=#{xen_use_force} vm=\"#{xen_vm_name}\""
|
22
40
|
end
|
23
41
|
|
42
|
+
desc "List Virtual Machines"
|
43
|
+
task :list, :roles => :xen do
|
44
|
+
get_command_line
|
45
|
+
output = capture "xe vm-list"
|
46
|
+
puts(output)
|
47
|
+
end
|
48
|
+
|
49
|
+
desc "Search for IP on a Xen VM. You may want to re-run this until one is returned if you just rebooted or started a vm"
|
50
|
+
task :find_ip, :roles => :xen do
|
51
|
+
get_command_line
|
52
|
+
uuid = find_uuid_by_name_label(xen_vm_name)
|
53
|
+
ip = nil;
|
54
|
+
|
55
|
+
do_until xen_retries, xen_wait do |count|
|
56
|
+
begin
|
57
|
+
ip = find_ip_by_uuid(uuid)
|
58
|
+
rescue
|
59
|
+
end
|
60
|
+
end
|
61
|
+
puts ip
|
62
|
+
ip
|
63
|
+
end
|
64
|
+
|
65
|
+
desc "Reboot a Xen VM"
|
66
|
+
task :reboot, :roles => :xen do
|
67
|
+
get_command_line
|
68
|
+
run "xe vm-reboot force=#{xen_use_force} vm=\"#{xen_vm_name}\""
|
69
|
+
end
|
70
|
+
|
24
71
|
desc "Uninstall a Xen VM and all its singular dependencies"
|
25
72
|
task :uninstall, :roles => :xen do
|
26
73
|
begin
|
27
|
-
xenrec.shutdown
|
74
|
+
xenrec.vm.shutdown
|
28
75
|
rescue
|
29
76
|
end
|
30
|
-
run "xe vm-uninstall force=#{xen_use_force}
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
|
-
def get_command_line
|
35
|
-
set(:xen_vm_name, ENV["VM_NAME"]) if ENV["VM_NAME"]
|
77
|
+
run "xe vm-uninstall --multiple force=#{xen_use_force} vm=\"#{xen_vm_name}\""
|
36
78
|
end
|
79
|
+
end
|
80
|
+
end
|
37
81
|
|
38
82
|
set :xen_use_force, "true"
|
39
|
-
set :
|
83
|
+
set :xen_retries, 20
|
84
|
+
set :xen_wait, 2
|
40
85
|
set :xen_template_uuid, lambda { Capistrano::CLI.ui.ask('Enter template name or UUID')}
|
41
86
|
set :xen_vm_name, lambda { Capistrano::CLI.ui.ask('Enter name for new VM')}
|
42
87
|
|
88
|
+
def get_command_line
|
89
|
+
set(:xen_vm_name, ENV["VM_NAME"]) if ENV["VM_NAME"]
|
90
|
+
end
|
91
|
+
|
92
|
+
def do_until (repeat = 1, delay = 1, &block)
|
93
|
+
timed_out = true
|
94
|
+
repeat.times do |count|
|
95
|
+
if yield count
|
96
|
+
timed_out = false
|
97
|
+
break
|
98
|
+
end
|
99
|
+
sleep delay
|
100
|
+
end
|
101
|
+
timed_out
|
102
|
+
end
|
103
|
+
|
104
|
+
def find_uuid_by_name_label(name_label)
|
105
|
+
# This is quite dodgy, it's based entirely on a single example from our XenServer 5.5 host
|
106
|
+
matches = capture("xe vm-list name-label=\"#{name_label}\"").match(/^\s*uuid.*?:\s*(.*)\s*$/)
|
107
|
+
return matches[1] unless matches.nil? || matches[1].nil?
|
108
|
+
raise "could not find uuid for vm: #{name_label}"
|
109
|
+
end
|
110
|
+
|
111
|
+
def find_ip_by_uuid(uuid)
|
112
|
+
# This is quite dodgy, it's based entirely on a single example from our XenServer 5.5 host
|
113
|
+
matches = capture("xe vm-param-list uuid=#{uuid}").match(/^\s*networks.*?:.*?:\s*(.*)\s*$/)
|
114
|
+
return matches[1] unless matches.nil? || matches[1].nil?
|
115
|
+
raise "could not find ip for vm: #{uuid}"
|
116
|
+
|
43
117
|
end
|
118
|
+
|
44
119
|
end
|
45
120
|
|
data/xenrec.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{xenrec}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rasheed Abdul-Aziz"]
|
12
|
-
s.date = %q{2009-10-
|
12
|
+
s.date = %q{2009-10-27}
|
13
13
|
s.description = %q{Capistrano recipes that allow you to control a XenServer Host, for adding and removing VM's on the fly.}
|
14
14
|
s.email = %q{rasheed@visfleet.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -49,14 +49,20 @@ Gem::Specification.new do |s|
|
|
49
49
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
50
50
|
s.add_development_dependency(%q<yard>, [">= 0"])
|
51
51
|
s.add_development_dependency(%q<cucumber>, [">= 0"])
|
52
|
+
s.add_runtime_dependency(%q<capistrano>, [">= 2.5.9"])
|
53
|
+
s.add_runtime_dependency(%q<capistrano-ext>, [">= 1.2.1"])
|
52
54
|
else
|
53
55
|
s.add_dependency(%q<rspec>, [">= 0"])
|
54
56
|
s.add_dependency(%q<yard>, [">= 0"])
|
55
57
|
s.add_dependency(%q<cucumber>, [">= 0"])
|
58
|
+
s.add_dependency(%q<capistrano>, [">= 2.5.9"])
|
59
|
+
s.add_dependency(%q<capistrano-ext>, [">= 1.2.1"])
|
56
60
|
end
|
57
61
|
else
|
58
62
|
s.add_dependency(%q<rspec>, [">= 0"])
|
59
63
|
s.add_dependency(%q<yard>, [">= 0"])
|
60
64
|
s.add_dependency(%q<cucumber>, [">= 0"])
|
65
|
+
s.add_dependency(%q<capistrano>, [">= 2.5.9"])
|
66
|
+
s.add_dependency(%q<capistrano-ext>, [">= 1.2.1"])
|
61
67
|
end
|
62
68
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xenrec
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rasheed Abdul-Aziz
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-10-
|
12
|
+
date: 2009-10-27 00:00:00 +13:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -42,6 +42,26 @@ dependencies:
|
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: "0"
|
44
44
|
version:
|
45
|
+
- !ruby/object:Gem::Dependency
|
46
|
+
name: capistrano
|
47
|
+
type: :runtime
|
48
|
+
version_requirement:
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 2.5.9
|
54
|
+
version:
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: capistrano-ext
|
57
|
+
type: :runtime
|
58
|
+
version_requirement:
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 1.2.1
|
64
|
+
version:
|
45
65
|
description: Capistrano recipes that allow you to control a XenServer Host, for adding and removing VM's on the fly.
|
46
66
|
email: rasheed@visfleet.com
|
47
67
|
executables: []
|