xenrec 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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: []
|