imagemaster3000 0.1.1 → 0.2.0
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.
- checksums.yaml +4 -4
- data/lib/imagemaster3000.rb +1 -0
- data/lib/imagemaster3000/cleaner.rb +25 -0
- data/lib/imagemaster3000/entities/downloadable.rb +5 -4
- data/lib/imagemaster3000/entities/image.rb +1 -1
- data/lib/imagemaster3000/image_list/templates/image_list.erb +1 -1
- data/lib/imagemaster3000/main_process.rb +4 -1
- data/lib/imagemaster3000/verification/hash.rb +5 -5
- data/lib/imagemaster3000/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f9ddf76551e39e0d2564d060fcf9a142b8462c7c
|
4
|
+
data.tar.gz: 7cd13f3d108660e57a4857aae1ec89648260d897
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10fd45c4b7c924ee7b6550223461bfb44455bbf284fb7987273035100edf2ad2e2eb825687c9a2443637678cb686831df53f40a14eaad53536ac427c7ba2ea17
|
7
|
+
data.tar.gz: 0a056a01e1e64cbf82acf53c153836b99d9bbc160e2ffd357d6a3d08e6839f5c76b77cbbc21d42d58ce9c4a691b7e1b05d55f09d82db3337af5e660f4691578d
|
data/lib/imagemaster3000.rb
CHANGED
@@ -4,6 +4,7 @@ require 'gpgme'
|
|
4
4
|
module Imagemaster3000
|
5
5
|
autoload :CLI, 'imagemaster3000/cli'
|
6
6
|
autoload :Settings, 'imagemaster3000/settings'
|
7
|
+
autoload :Cleaner, 'imagemaster3000/cleaner'
|
7
8
|
autoload :MainProcess, 'imagemaster3000/main_process'
|
8
9
|
|
9
10
|
autoload :Errors, 'imagemaster3000/errors'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Imagemaster3000
|
2
|
+
class Cleaner
|
3
|
+
CLEAN_FILE = File.join(Imagemaster3000::Settings[:'image-dir'], 'clean.list')
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def clean
|
7
|
+
return unless File.exist? CLEAN_FILE
|
8
|
+
|
9
|
+
logger.debug 'Cleaning old images'
|
10
|
+
files = File.read(CLEAN_FILE).lines.map(&:strip)
|
11
|
+
files.each do |file|
|
12
|
+
logger.debug "Removing file #{file.inspect}"
|
13
|
+
File.delete file if File.exist? file
|
14
|
+
end
|
15
|
+
File.delete CLEAN_FILE
|
16
|
+
end
|
17
|
+
|
18
|
+
def write_clean_file(files)
|
19
|
+
clean_data = files.join("\n").concat("\n")
|
20
|
+
logger.debug "Writing clean file, new data:\n#{clean_data}"
|
21
|
+
File.write CLEAN_FILE, clean_data, mode: 'a'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -7,11 +7,12 @@ module Imagemaster3000
|
|
7
7
|
logger.debug "Downloading image from #{url.inspect}"
|
8
8
|
|
9
9
|
uri = URI.parse url
|
10
|
-
filename = generate_filename
|
10
|
+
filename = generate_filename
|
11
|
+
@local_filename = filename
|
12
|
+
@remote_filename = File.basename(uri.path)
|
11
13
|
retrieve_image(uri, filename)
|
12
14
|
|
13
15
|
logger.debug "Image from #{url.inspect} was saved as #{filename.inspect}"
|
14
|
-
@file = filename
|
15
16
|
@size = File.size filename
|
16
17
|
rescue ::URI::InvalidURIError, ::IOError => ex
|
17
18
|
raise Imagemaster3000::Errors::DownloadError, ex
|
@@ -39,8 +40,8 @@ module Imagemaster3000
|
|
39
40
|
raise Imagemaster3000::Errors::DownloadError, ex
|
40
41
|
end
|
41
42
|
|
42
|
-
def generate_filename
|
43
|
-
File.join(Imagemaster3000::Settings[:'image-dir'],
|
43
|
+
def generate_filename
|
44
|
+
File.join(Imagemaster3000::Settings[:'image-dir'], SecureRandom.hex)
|
44
45
|
end
|
45
46
|
end
|
46
47
|
end
|
@@ -3,7 +3,7 @@ module Imagemaster3000
|
|
3
3
|
class Image
|
4
4
|
include Downloadable
|
5
5
|
|
6
|
-
attr_accessor :name, :url, :distribution, :version, :ram, :cpu, :actions, :verification, :
|
6
|
+
attr_accessor :name, :url, :distribution, :version, :ram, :cpu, :actions, :verification, :local_filename, :remote_filename, :size
|
7
7
|
|
8
8
|
def initialize(name: nil, url: nil, distribution: nil, version: nil, ram: nil, cpu: nil, actions: nil, verification: nil)
|
9
9
|
raise Imagemaster3000::Errors::ArgumentError, 'name, url, distribution or version cannot be nil' \
|
@@ -24,7 +24,7 @@
|
|
24
24
|
<% end -%>
|
25
25
|
"hv:format":"qcow2",
|
26
26
|
"hv:size":"<%= image.size %>",
|
27
|
-
"hv:uri":"<%= File.join(Imagemaster3000::Settings[:endpoint], File.basename(image.
|
27
|
+
"hv:uri":"<%= File.join(Imagemaster3000::Settings[:endpoint], File.basename(image.local_filename)) %>",
|
28
28
|
"hv:version":"<%= image.version %>",
|
29
29
|
<% if image.verification -%>
|
30
30
|
"sl:checksum:sha512":"<%= image.verification[:hash][:checksum] %>",
|
@@ -9,6 +9,9 @@ module Imagemaster3000
|
|
9
9
|
logger.debug 'Generating image list'
|
10
10
|
image_list = Imagemaster3000::ImageList::Signer.sign(Imagemaster3000::ImageList::Generator.generate(images))
|
11
11
|
File.write Imagemaster3000::Settings[:'image-list'], image_list
|
12
|
+
Imagemaster3000::Cleaner.clean
|
13
|
+
ensure
|
14
|
+
Imagemaster3000::Cleaner.write_clean_file images.map(&:local_filename)
|
12
15
|
end
|
13
16
|
|
14
17
|
private
|
@@ -16,7 +19,7 @@ module Imagemaster3000
|
|
16
19
|
def process_image(image)
|
17
20
|
image.download
|
18
21
|
image.verify! if image.respond_to? :verify!
|
19
|
-
image.actions.each { |action| action.run image.
|
22
|
+
image.actions.each { |action| action.run image.local_filename } unless image.actions.blank?
|
20
23
|
end
|
21
24
|
end
|
22
25
|
end
|
@@ -4,15 +4,15 @@ module Imagemaster3000
|
|
4
4
|
def verify_hash!
|
5
5
|
logger.debug 'Verifying checksum'
|
6
6
|
checksum = find_checksum!
|
7
|
-
computed_checksum = verification[:hash][:function].file(
|
7
|
+
computed_checksum = verification[:hash][:function].file(local_filename).hexdigest
|
8
8
|
|
9
9
|
if checksum == computed_checksum
|
10
|
-
verification[:hash][:checksum] = ::Digest::SHA512.file(
|
10
|
+
verification[:hash][:checksum] = ::Digest::SHA512.file(local_filename).hexdigest
|
11
11
|
return
|
12
12
|
end
|
13
13
|
|
14
14
|
raise Imagemaster3000::Errors::VerificationError,
|
15
|
-
"Checksum mismatch for file #{
|
15
|
+
"Checksum mismatch for file #{local_filename}: expected: #{checksum}, was: #{computed_checksum}"
|
16
16
|
end
|
17
17
|
|
18
18
|
private
|
@@ -23,7 +23,7 @@ module Imagemaster3000
|
|
23
23
|
|
24
24
|
def find_checksum_line
|
25
25
|
checksum_list = verification[:hash][:list]
|
26
|
-
filename =
|
26
|
+
filename = remote_filename
|
27
27
|
|
28
28
|
logger.debug "Looking for filename #{filename.inspect} in list \n#{checksum_list}"
|
29
29
|
|
@@ -32,7 +32,7 @@ module Imagemaster3000
|
|
32
32
|
unless found_lines.count == 1
|
33
33
|
|
34
34
|
checksum_line = found_lines.first
|
35
|
-
logger.debug "Found
|
35
|
+
logger.debug "Found matching line #{checksum_line.inspect}"
|
36
36
|
|
37
37
|
checksum_line
|
38
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imagemaster3000
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michal Kimle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -288,6 +288,7 @@ files:
|
|
288
288
|
- lib/imagemaster3000/actions.rb
|
289
289
|
- lib/imagemaster3000/actions/copy.rb
|
290
290
|
- lib/imagemaster3000/actions/remove.rb
|
291
|
+
- lib/imagemaster3000/cleaner.rb
|
291
292
|
- lib/imagemaster3000/cli.rb
|
292
293
|
- lib/imagemaster3000/definitions.rb
|
293
294
|
- lib/imagemaster3000/definitions/parser.rb
|