abiquo-etk 0.4.15 → 0.4.16

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.15
1
+ 0.4.16
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{abiquo-etk}
8
- s.version = "0.4.15"
8
+ s.version = "0.4.16"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Sergio Rubio"]
12
- s.date = %q{2010-10-20}
12
+ s.date = %q{2010-10-21}
13
13
  s.description = %q{Tools to troubleshoot your Abiquo installation}
14
14
  s.email = %q{srubio@abiquo.com}
15
15
  s.executables = ["abiquo-check-16-install", "aetk-setup-rs", "aetk-setup-v2v", "abicli", "aetk-setup-server"]
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
33
33
  "bin/aetk-setup-rs",
34
34
  "bin/aetk-setup-server",
35
35
  "bin/aetk-setup-v2v",
36
+ "lib/abicli/commands/instant-deploy.rb",
36
37
  "lib/abicli/commands/remote-services-settings.rb",
37
38
  "lib/abicli/commands/server-settings.rb",
38
39
  "lib/abicli/commands/set.rb",
@@ -0,0 +1,176 @@
1
+ # requirements:
2
+ # Check kvm installed
3
+ # check kvm fullvirt available
4
+ # check if qemu-img is installed
5
+ # check distribution supported
6
+ #
7
+ if ARGV[0] == 'instant-deploy'
8
+ ARGV.shift
9
+
10
+ #
11
+ # HTTPDownloader code based on code from http://www.vagrantup.com
12
+ #
13
+ require 'net/http'
14
+ require 'net/https'
15
+ require 'open-uri'
16
+ require 'uri'
17
+ require 'fileutils'
18
+
19
+ class HTTPDownloader
20
+ def self.match?(uri)
21
+ # URI.parse barfs on '<drive letter>:\\files \on\ windows'
22
+ extracted = URI.extract(uri).first
23
+ extracted && extracted.include?(uri)
24
+ end
25
+
26
+ def report_progress(progress, total, show_parts=true)
27
+ line_reset = "\r\e[0K"
28
+ percent = (progress.to_f / total.to_f) * 100
29
+ line = "Progress: #{percent.to_i}%"
30
+ line << " (#{progress} / #{total})" if show_parts
31
+ line = "#{line_reset}#{line}"
32
+ $stdout.sync = true
33
+ $stdout.print line
34
+ end
35
+
36
+ def download!(source_url, destination_file)
37
+ proxy_uri = URI.parse(ENV["http_proxy"] || "")
38
+ uri = URI.parse(source_url)
39
+ http = Net::HTTP.new(uri.host, uri.port, proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password)
40
+
41
+ if uri.scheme == "https"
42
+ http.use_ssl = true
43
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
44
+ end
45
+
46
+ http.start do |h|
47
+ h.request_get(uri.request_uri) do |response|
48
+ total = response.content_length
49
+ progress = 0
50
+ segment_count = 0
51
+
52
+ response.read_body do |segment|
53
+ # Report the progress out
54
+ progress += segment.length
55
+ segment_count += 1
56
+
57
+ # Progress reporting is limited to every 25 segments just so
58
+ # we're not constantly updating
59
+ if segment_count % 25 == 0
60
+ report_progress(progress, total)
61
+ segment_count = 0
62
+ end
63
+
64
+
65
+ # Store the segment
66
+ destination_file.write(segment)
67
+ end
68
+ end
69
+ end
70
+ rescue SocketError
71
+ raise Errors::DownloaderHTTPSocketError.new
72
+ end
73
+ end
74
+ class InstantDeployCLI
75
+ include Mixlib::CLI
76
+
77
+ option :iso_url,
78
+ :long => '--iso-url URL',
79
+ :description => 'Abiquo ISO URL'
80
+
81
+ option :help,
82
+ :short => "-h",
83
+ :long => "--help",
84
+ :description => ".\n\n",
85
+ :on => :tail,
86
+ :boolean => true,
87
+ :show_options => true,
88
+ :exit => 0
89
+ end
90
+
91
+ def preflight_check
92
+ #
93
+ # Check if this is Ubuntu
94
+ #
95
+ if not File.exists? '/etc/lsb-release'
96
+ $stderr.puts "\nYou are not running Ubuntu. Other distributions are not supported.\n\n"
97
+ exit
98
+ end
99
+ if not (File.read('/etc/lsb-release') =~ /DISTRIB_ID=Ubuntu/)
100
+ $stderr.puts "\nYou are not running Ubuntu. Other distributions are not supported\n\n"
101
+ exit
102
+ end
103
+
104
+ #
105
+ # Check if KVM installed
106
+ #
107
+ if `which /usr/bin/kvm`.strip.chomp.empty?
108
+ $stderr.puts "\nKVM not found. Install it first:\n\n"
109
+ $stderr.puts "sudo apt-get install kvm\n\n"
110
+ exit
111
+ end
112
+
113
+ #
114
+ # Check if qemu-img installed
115
+ #
116
+ if `which /usr/bin/qemu-img`.strip.chomp.empty?
117
+ $stderr.puts "\nqemu-img not found. Install it first:\n\n"
118
+ $stderr.puts "sudo apt-get install kvm\n\n"
119
+ exit
120
+ end
121
+ end
122
+
123
+ def install_iso(params = {})
124
+ target_dir = params[:target_dir] || "abiquo-instant-deploy-#{Time.now.strftime "%s"}"
125
+ disk_file = params[:disk_file] || "#{target_dir}/abiquo.qcow2"
126
+ iso_url = params[:iso_url]
127
+ # Create target directory
128
+ begin
129
+ FileUtils.mkdir(target_dir)
130
+ rescue Exception
131
+ $stderr.puts "\nError creating directory #{target_dir}. Aborting.\n\n"
132
+ exit 1
133
+ end
134
+
135
+ # Create qemu img
136
+ if File.exist? disk_file
137
+ raise Exception.new("Image #{disk_file} already exists")
138
+ end
139
+ `/usr/bin/qemu-img create -f qcow2 #{disk_file} 20GB`
140
+
141
+ # Download the iso
142
+ downloader = HTTPDownloader.new
143
+ puts "Downloading Abiquo ISO..."
144
+ begin
145
+ downloader.download! iso_url, File.new(target_dir + '/instant-deploy.iso', 'w')
146
+ rescue Exception
147
+ $stderr.puts "Error downloading Abiquo ISO. Aborting."
148
+ exit
149
+ end
150
+
151
+ puts "Booting the Installer..."
152
+ # Boot
153
+ `kvm -m 1024 -drive file=#{disk_file},if=scsi,boot=on -net user -net nic -cdrom #{target_dir}/instant-deploy.iso -boot once=d`
154
+ end
155
+
156
+ target_dir = "abiquo-instant-deploy-#{Time.now.strftime "%s"}"
157
+
158
+ trap("INT") { puts "\n\nCleaning Environment..."; exit }
159
+
160
+ preflight_check
161
+
162
+ cli = InstantDeployCLI.new
163
+ cli.parse_options
164
+ url = cli.config[:iso_url]
165
+ if url.nil?
166
+ $stderr.puts "\n--iso-url argument is mandatory.\n\n"
167
+ puts cli.opt_parser.help
168
+ exit
169
+ end
170
+ puts "\n"
171
+ print "Abiquo Instant Deploy: ".bold
172
+ puts "One Command Cloud Builder\n\n"
173
+ puts "Building the cloud into #{target_dir.bold} directory..."
174
+ install_iso(:target_dir => target_dir, :iso_url => url)
175
+
176
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abiquo-etk
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 47
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 15
10
- version: 0.4.15
9
+ - 16
10
+ version: 0.4.16
11
11
  platform: ruby
12
12
  authors:
13
13
  - Sergio Rubio
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-20 00:00:00 +02:00
18
+ date: 2010-10-21 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -92,6 +92,7 @@ files:
92
92
  - bin/aetk-setup-rs
93
93
  - bin/aetk-setup-server
94
94
  - bin/aetk-setup-v2v
95
+ - lib/abicli/commands/instant-deploy.rb
95
96
  - lib/abicli/commands/remote-services-settings.rb
96
97
  - lib/abicli/commands/server-settings.rb
97
98
  - lib/abicli/commands/set.rb