vanagon 0.8.2 → 0.9.1
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/README.md +1 -0
- data/bin/build +1 -1
- data/lib/vanagon/component/dsl.rb +14 -24
- data/lib/vanagon/component/source/git.rb +1 -6
- data/lib/vanagon/component/source/http.rb +7 -0
- data/lib/vanagon/component/source/local.rb +8 -2
- data/lib/vanagon/driver.rb +31 -11
- data/lib/vanagon/engine/always_be_scheduling.rb +92 -0
- data/lib/vanagon/engine/base.rb +1 -2
- data/lib/vanagon/engine/hardware.rb +1 -1
- data/lib/vanagon/engine/pooler.rb +42 -10
- data/lib/vanagon/optparse.rb +1 -0
- data/lib/vanagon/platform.rb +10 -7
- data/lib/vanagon/platform/dsl.rb +13 -2
- data/lib/vanagon/project.rb +41 -3
- data/lib/vanagon/project/dsl.rb +9 -4
- data/lib/vanagon/utilities.rb +10 -13
- data/resources/Makefile.erb +1 -1
- data/resources/rpm/project.spec.erb +9 -0
- data/spec/fixtures/files/fake_dir/fake_file.txt +0 -0
- data/spec/fixtures/files/fake_nested_dir/fake_dir/fake_file.txt +0 -0
- data/spec/lib/vanagon/component/dsl_spec.rb +51 -2
- data/spec/lib/vanagon/component/source/git_spec.rb +8 -0
- data/spec/lib/vanagon/component/source/http_spec.rb +15 -15
- data/spec/lib/vanagon/component/source/local_spec.rb +17 -1
- data/spec/lib/vanagon/component/source_spec.rb +1 -1
- data/spec/lib/vanagon/driver_spec.rb +33 -1
- data/spec/lib/vanagon/engine/always_be_scheduling_spec.rb +84 -0
- data/spec/lib/vanagon/engine/pooler_spec.rb +80 -16
- data/spec/lib/vanagon/platform/dsl_spec.rb +14 -0
- data/spec/lib/vanagon/platform/windows_spec.rb +2 -2
- data/spec/lib/vanagon/project_spec.rb +79 -5
- data/spec/lib/vanagon/utilities_spec.rb +5 -0
- data/spec/spec_helper.rb +22 -2
- metadata +29 -24
data/lib/vanagon/platform/dsl.rb
CHANGED
@@ -68,8 +68,8 @@ class Vanagon
|
|
68
68
|
# We only magically handle get_ methods, any other methods just get the
|
69
69
|
# standard method_missing treatment.
|
70
70
|
#
|
71
|
-
def method_missing(
|
72
|
-
attribute_match =
|
71
|
+
def method_missing(method_name, *args)
|
72
|
+
attribute_match = method_name.to_s.match(/get_(.*)/)
|
73
73
|
if attribute_match
|
74
74
|
attribute = attribute_match.captures.first
|
75
75
|
else
|
@@ -79,6 +79,10 @@ class Vanagon
|
|
79
79
|
@platform.send(attribute)
|
80
80
|
end
|
81
81
|
|
82
|
+
def respond_to_missing?(method_name, include_private = false)
|
83
|
+
method_name.to_s.start_with?('get_') || super
|
84
|
+
end
|
85
|
+
|
82
86
|
# Set the path to make for the platform
|
83
87
|
#
|
84
88
|
# @param make_cmd [String] Full path to the make command for the platform
|
@@ -221,6 +225,13 @@ class Vanagon
|
|
221
225
|
self.vmpooler_template(name)
|
222
226
|
end
|
223
227
|
|
228
|
+
# Set the name of this platform as always-be-scheduling (ABS) expects it
|
229
|
+
#
|
230
|
+
# @param name [String] name of the platform to request from always-be-scheduling
|
231
|
+
def abs_resource_name(name)
|
232
|
+
@platform.abs_resource_name = name
|
233
|
+
end
|
234
|
+
|
224
235
|
# Set the name of the docker image to use
|
225
236
|
#
|
226
237
|
# @param name [String] name of the docker image to use
|
data/lib/vanagon/project.rb
CHANGED
@@ -54,10 +54,15 @@ class Vanagon
|
|
54
54
|
end
|
55
55
|
|
56
56
|
# Magic getter to retrieve settings in the project
|
57
|
-
def method_missing(
|
58
|
-
if @settings.key?(
|
59
|
-
return @settings[
|
57
|
+
def method_missing(method_name, *args)
|
58
|
+
if @settings.key?(method_name)
|
59
|
+
return @settings[method_name]
|
60
60
|
end
|
61
|
+
super
|
62
|
+
end
|
63
|
+
|
64
|
+
def respond_to_missing?(method_name, include_private = false)
|
65
|
+
@settings.key?(method_name) || super
|
61
66
|
end
|
62
67
|
|
63
68
|
# Collects all sources and patches into the provided workdir
|
@@ -82,6 +87,39 @@ class Vanagon
|
|
82
87
|
files.flatten.uniq
|
83
88
|
end
|
84
89
|
|
90
|
+
# Returns a filtered out set of components only including those
|
91
|
+
# components necessary to build a specific component. This is a
|
92
|
+
# recursive function that will call itself until it gets to a
|
93
|
+
# component with no build requirements
|
94
|
+
#
|
95
|
+
# @param name [String] name of component to add. must be present in configdir/components and named $name.rb currently
|
96
|
+
# @return [Array] array of Vanagon::Component including only those required to build "name", or [] if there are none
|
97
|
+
def filter_component(name)
|
98
|
+
filtered_component = get_component(name)
|
99
|
+
return [] if filtered_component.nil?
|
100
|
+
included_components = [filtered_component]
|
101
|
+
|
102
|
+
unless filtered_component.build_requires.empty?
|
103
|
+
filtered_component.build_requires.each do |build_requirement|
|
104
|
+
unless get_component(build_requirement).nil?
|
105
|
+
included_components += filter_component(build_requirement)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
included_components.uniq
|
110
|
+
end
|
111
|
+
|
112
|
+
# Gets the component with component.name = "name" from the list
|
113
|
+
# of project.components
|
114
|
+
#
|
115
|
+
# @param [String] component name
|
116
|
+
# @return [Vanagon::Component] the component with component.name = "name"
|
117
|
+
def get_component(name)
|
118
|
+
comps = @components.select { |comp| comp.name.to_s == name.to_s }
|
119
|
+
raise "ERROR: two or more components with the same name: #{comps.first.name}" if comps.size > 1
|
120
|
+
comps.first
|
121
|
+
end
|
122
|
+
|
85
123
|
# Collects all of the requires for both the project and its components
|
86
124
|
#
|
87
125
|
# @return [Array] array of runtime requirements for the project
|
data/lib/vanagon/project/dsl.rb
CHANGED
@@ -44,18 +44,23 @@ class Vanagon
|
|
44
44
|
# We only magically handle get_ methods, any other methods just get the
|
45
45
|
# standard method_missing treatment.
|
46
46
|
#
|
47
|
-
def method_missing(
|
48
|
-
attribute_match =
|
47
|
+
def method_missing(method_name, *args)
|
48
|
+
attribute_match = method_name.to_s.match(/get_(.*)/)
|
49
49
|
if attribute_match
|
50
50
|
attribute = attribute_match.captures.first
|
51
51
|
@project.send(attribute)
|
52
|
-
elsif @project.settings.key?(
|
53
|
-
return @project.settings[
|
52
|
+
elsif @project.settings.key?(method_name)
|
53
|
+
return @project.settings[method_name]
|
54
54
|
else
|
55
55
|
super
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
+
def respond_to_missing?(method_name, include_private = false)
|
60
|
+
method_name.to_s.start_with?('get_') || @project.settings.key?(method_name) || super
|
61
|
+
end
|
62
|
+
|
63
|
+
|
59
64
|
# Sets a key value pair on the settings hash of the project
|
60
65
|
#
|
61
66
|
# @param name [String] name of the setting
|
data/lib/vanagon/utilities.rb
CHANGED
@@ -16,6 +16,7 @@ class Vanagon
|
|
16
16
|
|
17
17
|
# Utility to get the md5 sum of a file
|
18
18
|
#
|
19
|
+
# @deprecated Please use #get_sum instead, this will be removed in a future vanagon release.
|
19
20
|
# @param file [String] file to md5sum
|
20
21
|
# @return [String] md5sum of the given file
|
21
22
|
def get_md5sum(file)
|
@@ -25,21 +26,17 @@ class Vanagon
|
|
25
26
|
# Generic file summing utility
|
26
27
|
#
|
27
28
|
# @param file [String] file to sum
|
28
|
-
# @param type [String] type of sum to provide
|
29
|
+
# @param type [String] type of sum to provide, defaults to md5
|
29
30
|
# @return [String] sum of the given file
|
30
31
|
# @raise [RuntimeError] raises an exception if the given sum type is not supported
|
31
|
-
def get_sum(file, type)
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
else
|
40
|
-
fail "Don't know how to produce a sum of type: '#{type}' for '#{file}'."
|
41
|
-
end
|
42
|
-
end
|
32
|
+
def get_sum(file, type = 'md5')
|
33
|
+
Digest.const_get(type.upcase).file(file).hexdigest.to_s
|
34
|
+
|
35
|
+
# If Digest::const_get fails, it'll raise a LoadError when it tries to
|
36
|
+
# pull in the subclass `type`. We catch that error, and fail instead.
|
37
|
+
rescue LoadError
|
38
|
+
fail "Don't know how to produce a sum of type: '#{type}' for '#{file}'"
|
39
|
+
end
|
43
40
|
|
44
41
|
# Simple wrapper around Net::HTTP. Will make a request of the given type to
|
45
42
|
# the given url and return the body as parsed by JSON.
|
data/resources/Makefile.erb
CHANGED
@@ -36,7 +36,7 @@ file-list: file-list-before-build <%= @name %>-project
|
|
36
36
|
<%- end -%>
|
37
37
|
|
38
38
|
<%- if @bill_of_materials -%>
|
39
|
-
<%= @bill_of_materials %>:
|
39
|
+
<%= @bill_of_materials.path %>:
|
40
40
|
mkdir -p '<%= @bill_of_materials.path %>'
|
41
41
|
mv bill-of-materials '<%= @bill_of_materials.path %>'
|
42
42
|
<%- end -%>
|
@@ -48,6 +48,15 @@ Autoreq: 0
|
|
48
48
|
<%- get_requires.each do |requires| -%>
|
49
49
|
Requires: <%= requires %>
|
50
50
|
<%- end -%>
|
51
|
+
# All rpm packages built by vanagon have the pre-/post-install script
|
52
|
+
# boilerplates (defined below). These require `mkdir` and `touch` but previously
|
53
|
+
# did not specify a dependency on these.
|
54
|
+
# In the future, we will supress pre/post scripts completely if there's nothing
|
55
|
+
# specified by the project or the components.
|
56
|
+
Requires(pre): /bin/mkdir
|
57
|
+
Requires(pre): /bin/touch
|
58
|
+
Requires(post): /bin/mkdir
|
59
|
+
Requires(post): /bin/touch
|
51
60
|
<%- if has_services? -%>
|
52
61
|
<%- if @platform.servicetype == "systemd" -%>
|
53
62
|
<%- if @platform.is_sles? -%>
|
File without changes
|
File without changes
|
@@ -53,15 +53,64 @@ end" }
|
|
53
53
|
plat._platform
|
54
54
|
}
|
55
55
|
|
56
|
-
|
57
|
-
|
58
56
|
let(:platform) { double(Vanagon::Platform) }
|
59
57
|
|
58
|
+
# These TOTALLY VALID sums are computed against a passage from
|
59
|
+
# "The Hitchhiker's Guide to the Galaxy", by Douglas Adams (1979).
|
60
|
+
# Specifically, about humans assuming they are smarter than dolphins
|
61
|
+
# for exactly the same reason dolphins assume they are smart than
|
62
|
+
# humans. This seemed appropriate after the checksum refactoring
|
63
|
+
# broke all checksums and we discovered that they were untested.
|
64
|
+
let(:dummy_md5_sum) { "08b55473b59d2b43af8b61c9512ef5c6" }
|
65
|
+
let(:dummy_sha1_sum) { "fdaa03c3f506d7b71635f2c32dfd41b0cc8b904f" }
|
66
|
+
let(:dummy_sha256_sum) { "fd9c922702eb2e2fb26376c959753f0fc167bb6bc99c79262fcff7bcc8b34be1" }
|
67
|
+
let(:dummy_sha512_sum) { "8feda1e9896be618dd6c65120d10afafce93888df8569c598f52285083c23befd1477da5741939d4eae042f822e45ca2e45d8d4d18cf9224b7acaf71d883841e" }
|
68
|
+
|
60
69
|
before do
|
61
70
|
allow(platform).to receive(:install).and_return('install')
|
62
71
|
allow(platform).to receive(:copy).and_return('cp')
|
63
72
|
end
|
64
73
|
|
74
|
+
describe "#md5sum" do
|
75
|
+
it "sets a checksum value & type correctly" do
|
76
|
+
comp = Vanagon::Component::DSL.new('test-fixture', {}, {})
|
77
|
+
comp.md5sum(dummy_md5_sum)
|
78
|
+
|
79
|
+
expect(comp._component.options[:sum]).to eq(dummy_md5_sum)
|
80
|
+
expect(comp._component.options[:sum_type]).to eq('md5')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "#sha1sum" do
|
85
|
+
it "sets a checksum value & type correctly" do
|
86
|
+
comp = Vanagon::Component::DSL.new('test-fixture', {}, {})
|
87
|
+
comp.sha1sum(dummy_sha1_sum)
|
88
|
+
|
89
|
+
expect(comp._component.options[:sum]).to eq(dummy_sha1_sum)
|
90
|
+
expect(comp._component.options[:sum_type]).to eq('sha1')
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe "#sha256sum" do
|
95
|
+
it "sets a checksum value & type correctly" do
|
96
|
+
comp = Vanagon::Component::DSL.new('test-fixture', {}, {})
|
97
|
+
comp.sha256sum(dummy_sha256_sum)
|
98
|
+
|
99
|
+
expect(comp._component.options[:sum]).to eq(dummy_sha256_sum)
|
100
|
+
expect(comp._component.options[:sum_type]).to eq('sha256')
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "#sha512sum" do
|
105
|
+
it "sets a checksum value & type correctly" do
|
106
|
+
comp = Vanagon::Component::DSL.new('test-fixture', {}, {})
|
107
|
+
comp.sha512sum(dummy_sha512_sum)
|
108
|
+
|
109
|
+
expect(comp._component.options[:sum]).to eq(dummy_sha512_sum)
|
110
|
+
expect(comp._component.options[:sum_type]).to eq('sha512')
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
65
114
|
describe '#load_from_json' do
|
66
115
|
it "sets the ref and url based on the json fixture" do
|
67
116
|
comp = Vanagon::Component::DSL.new('test-fixture', {}, {})
|
@@ -32,6 +32,14 @@ describe "Vanagon::Component::Source::Git" do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
|
+
describe "#ref" do
|
36
|
+
it "returns a default value of HEAD when no explicit Git reference is provided" do
|
37
|
+
git_source = klass.new(url, workdir: workdir)
|
38
|
+
expect(git_source.ref)
|
39
|
+
.to eq('HEAD')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
35
43
|
describe "#fetch" do
|
36
44
|
it "raises an error on checkout failure with a bad SHA" do
|
37
45
|
expect { klass.new("#{url}", ref: bad_sha, workdir: workdir).fetch }
|
@@ -12,7 +12,14 @@ describe "Vanagon::Component::Source::Http" do
|
|
12
12
|
let (:md5sum) { 'abcdssasasa' }
|
13
13
|
let (:sha256sum) { 'foobarbaz' }
|
14
14
|
let (:sha512sum) { 'teststring' }
|
15
|
-
let (:workdir) {
|
15
|
+
let (:workdir) { Dir.mktmpdir }
|
16
|
+
|
17
|
+
describe "#initialize" do
|
18
|
+
it "fails with a bad sum_type" do
|
19
|
+
expect { Vanagon::Component::Source::Http.new(plaintext_url, sum: md5sum, workdir: workdir, sum_type: "md4") }
|
20
|
+
.to raise_error(RuntimeError)
|
21
|
+
end
|
22
|
+
end
|
16
23
|
|
17
24
|
describe "#dirname" do
|
18
25
|
it "returns the name of the tarball, minus extension for archives" do
|
@@ -30,17 +37,10 @@ describe "Vanagon::Component::Source::Http" do
|
|
30
37
|
end
|
31
38
|
end
|
32
39
|
|
33
|
-
describe "verify" do
|
34
|
-
it "fails with a bad sum_type" do
|
35
|
-
http_source = Vanagon::Component::Source::Http.new(plaintext_url, sum: md5sum, workdir: workdir, sum_type: "md4")
|
36
|
-
expect(http_source).to receive(:download).and_return(plaintext_filename)
|
37
|
-
http_source.fetch
|
38
|
-
expect{ http_source.verify }.to raise_error(RuntimeError)
|
39
|
-
end
|
40
|
-
|
40
|
+
describe "#verify" do
|
41
41
|
it "calls md5 digest when it's supposed to" do
|
42
|
-
Digest::MD5.
|
43
|
-
Digest::MD5.
|
42
|
+
allow_any_instance_of(Digest::MD5).to receive(:file).and_return(Digest::MD5.new)
|
43
|
+
allow_any_instance_of(Digest::MD5).to receive(:hexdigest).and_return(md5sum)
|
44
44
|
http_source = Vanagon::Component::Source::Http.new(plaintext_url, sum: md5sum, workdir: workdir, sum_type: "md5")
|
45
45
|
expect(http_source).to receive(:download).and_return(plaintext_filename)
|
46
46
|
http_source.fetch
|
@@ -48,8 +48,8 @@ describe "Vanagon::Component::Source::Http" do
|
|
48
48
|
end
|
49
49
|
|
50
50
|
it "calls sha256 digest when it's supposed to" do
|
51
|
-
Digest::SHA256.
|
52
|
-
Digest::SHA256.
|
51
|
+
allow_any_instance_of(Digest::SHA256).to receive(:file).and_return(Digest::SHA256.new)
|
52
|
+
allow_any_instance_of(Digest::SHA256).to receive(:hexdigest).and_return(sha256sum)
|
53
53
|
http_source = Vanagon::Component::Source::Http.new(plaintext_url, sum: sha256sum, workdir: workdir, sum_type: "sha256")
|
54
54
|
expect(http_source).to receive(:download).and_return(plaintext_filename)
|
55
55
|
http_source.fetch
|
@@ -57,8 +57,8 @@ describe "Vanagon::Component::Source::Http" do
|
|
57
57
|
end
|
58
58
|
|
59
59
|
it "calls sha512 digest when it's supposed to" do
|
60
|
-
Digest::SHA512.
|
61
|
-
Digest::SHA512.
|
60
|
+
allow_any_instance_of(Digest::SHA512).to receive(:file).and_return(Digest::SHA512.new)
|
61
|
+
allow_any_instance_of(Digest::SHA512).to receive(:hexdigest).and_return(sha512sum)
|
62
62
|
http_source = Vanagon::Component::Source::Http.new(plaintext_url, sum: sha512sum, workdir: workdir, sum_type: "sha512")
|
63
63
|
expect(http_source).to receive(:download).and_return(plaintext_filename)
|
64
64
|
http_source.fetch
|
@@ -4,7 +4,9 @@ describe "Vanagon::Component::Source::File" do
|
|
4
4
|
let (:file_base) { 'file://spec/fixtures/files/fake_file_ext' }
|
5
5
|
let (:tar_filename) { 'file://spec/fixtures/files/fake_dir.tar.gz' }
|
6
6
|
let (:plaintext_filename) { 'file://spec/fixtures/files/fake_file.txt' }
|
7
|
-
let (:workdir) {
|
7
|
+
let (:workdir) { Dir.mktmpdir }
|
8
|
+
let (:simple_directory) { 'file://spec/fixtures/files/fake_dir/' }
|
9
|
+
let (:nested_directory) { 'file://spec/fixtures/files/fake_nested_dir/' }
|
8
10
|
|
9
11
|
describe "#fetch" do
|
10
12
|
it "puts the source file in to the workdir" do
|
@@ -12,6 +14,18 @@ describe "Vanagon::Component::Source::File" do
|
|
12
14
|
file.fetch
|
13
15
|
expect(File).to exist("#{workdir}/fake_file.txt")
|
14
16
|
end
|
17
|
+
|
18
|
+
it "puts the source directory in to the workdir" do
|
19
|
+
file = Vanagon::Component::Source::Local.new(simple_directory, workdir: workdir)
|
20
|
+
file.fetch
|
21
|
+
expect(File).to exist("#{workdir}/fake_dir/fake_file.txt")
|
22
|
+
end
|
23
|
+
|
24
|
+
it "preserves nested directories when copying folders" do
|
25
|
+
file = Vanagon::Component::Source::Local.new(nested_directory, workdir: workdir)
|
26
|
+
file.fetch
|
27
|
+
expect(File).to exist("#{workdir}/fake_nested_dir/fake_dir/fake_file.txt")
|
28
|
+
end
|
15
29
|
end
|
16
30
|
|
17
31
|
describe "#dirname" do
|
@@ -20,7 +34,9 @@ describe "Vanagon::Component::Source::File" do
|
|
20
34
|
file.fetch
|
21
35
|
expect(file.dirname).to eq("fake_dir")
|
22
36
|
end
|
37
|
+
end
|
23
38
|
|
39
|
+
describe "#ref" do
|
24
40
|
it "returns the current directory for non-archive files" do
|
25
41
|
file = Vanagon::Component::Source::Local.new(plaintext_filename, workdir: workdir)
|
26
42
|
file.fetch
|
@@ -21,7 +21,7 @@ describe "Vanagon::Component::Source" do
|
|
21
21
|
|
22
22
|
let(:ref) { "cafebeef" }
|
23
23
|
let(:sum) { "abcd1234" }
|
24
|
-
let(:workdir) {
|
24
|
+
let(:workdir) { Dir.mktmpdir }
|
25
25
|
|
26
26
|
let(:original_git_url) { "git://things.and.stuff/foo-bar.git" }
|
27
27
|
let(:rewritten_git_url) { "git://things.end.stuff/foo-ber.git" }
|
@@ -54,6 +54,39 @@ describe 'Vanagon::Driver' do
|
|
54
54
|
'engine' => 'hardware' })
|
55
55
|
end
|
56
56
|
|
57
|
+
it 'returns the first build_host using the hardware engine when not using an engine, and not specifying an engine in the platform configuration' do
|
58
|
+
platform = eval_platform('aix-7.1-ppc', <<-END)
|
59
|
+
platform 'aix-7.1-ppc' do |plat|
|
60
|
+
plat.build_host ["pe-aix-71-01", "pe-aix-71-02"]
|
61
|
+
end
|
62
|
+
END
|
63
|
+
|
64
|
+
info = create_driver(platform).build_host_info
|
65
|
+
|
66
|
+
expect(info).to match({ 'name' => 'pe-aix-71-01',
|
67
|
+
'engine' => 'hardware' })
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'returns the platform and the always_be_scheduling engine when using the always_be_scheduling engine' do
|
71
|
+
platform = eval_platform('aix-7.1-ppc', <<-END)
|
72
|
+
platform 'aix-7.1-ppc' do |plat|
|
73
|
+
plat.build_host ["pe-aix-71-01", "pe-aix-71-02"]
|
74
|
+
end
|
75
|
+
END
|
76
|
+
|
77
|
+
info = create_driver(platform, :engine => 'always_be_scheduling').build_host_info
|
78
|
+
|
79
|
+
expect(info).to match({ 'name' => 'aix-7.1-ppc',
|
80
|
+
'engine' => 'always_be_scheduling' })
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'returns the vmpooler_template using the always_be_scheduling engine when using the always_be_scheduling engine' do
|
84
|
+
info = create_driver(redhat, :engine => 'always_be_scheduling').build_host_info
|
85
|
+
|
86
|
+
expect(info).to match({ 'name' => 'centos-7-x86_64',
|
87
|
+
'engine' => 'always_be_scheduling' })
|
88
|
+
end
|
89
|
+
|
57
90
|
it 'returns the docker_image using the docker engine' do
|
58
91
|
platform = eval_platform('el-7-x86_64', <<-END)
|
59
92
|
platform 'el-7-x86_64' do |plat|
|
@@ -85,4 +118,3 @@ describe 'Vanagon::Driver' do
|
|
85
118
|
end
|
86
119
|
end
|
87
120
|
end
|
88
|
-
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'vanagon/engine/always_be_scheduling'
|
2
|
+
require 'vanagon/driver'
|
3
|
+
require 'vanagon/platform'
|
4
|
+
require 'logger'
|
5
|
+
|
6
|
+
class Vanagon
|
7
|
+
class Driver
|
8
|
+
@@logger = Logger.new('/dev/null')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'Vanagon::Engine::AlwaysBeScheduling' do
|
13
|
+
let (:platform) {
|
14
|
+
plat = Vanagon::Platform::DSL.new('aix-6.1-ppc')
|
15
|
+
plat.instance_eval("platform 'aix-6.1-ppc' do |plat|
|
16
|
+
plat.build_host 'abcd'
|
17
|
+
end")
|
18
|
+
plat._platform
|
19
|
+
}
|
20
|
+
|
21
|
+
let (:platform_with_vmpooler_template) {
|
22
|
+
plat = Vanagon::Platform::DSL.new('ubuntu-10.04-amd64 ')
|
23
|
+
plat.instance_eval("platform 'aix-6.1-ppc' do |plat|
|
24
|
+
plat.build_host 'abcd'
|
25
|
+
plat.vmpooler_template 'ubuntu-1004-amd64'
|
26
|
+
end")
|
27
|
+
plat._platform
|
28
|
+
}
|
29
|
+
|
30
|
+
let (:platform_with_abs_resource_name) {
|
31
|
+
plat = Vanagon::Platform::DSL.new('aix-6.1-ppc')
|
32
|
+
plat.instance_eval("platform 'aix-6.1-ppc' do |plat|
|
33
|
+
plat.build_host 'abcd'
|
34
|
+
plat.abs_resource_name 'aix-61-ppc'
|
35
|
+
end")
|
36
|
+
plat._platform
|
37
|
+
}
|
38
|
+
|
39
|
+
let (:platform_with_both) {
|
40
|
+
plat = Vanagon::Platform::DSL.new('aix-6.1-ppc')
|
41
|
+
plat.instance_eval("platform 'aix-6.1-ppc' do |plat|
|
42
|
+
plat.build_host 'abcd'
|
43
|
+
plat.vmpooler_template 'aix-six-one-ppc'
|
44
|
+
plat.abs_resource_name 'aix-61-ppc'
|
45
|
+
end")
|
46
|
+
plat._platform
|
47
|
+
}
|
48
|
+
|
49
|
+
describe '#validate_platform' do
|
50
|
+
it 'returns true if the platform has the required attributes' do
|
51
|
+
expect(Vanagon::Engine::AlwaysBeScheduling.new(platform, nil).validate_platform)
|
52
|
+
.to be(true)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '#build_host_name' do
|
57
|
+
it 'by default returns the platform name with no translation' do
|
58
|
+
expect(Vanagon::Engine::AlwaysBeScheduling.new(platform, nil).build_host_name)
|
59
|
+
.to eq("aix-6.1-ppc")
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'returns vmpooler_template if vmpooler_template is specified' do
|
63
|
+
expect(Vanagon::Engine::AlwaysBeScheduling.new(platform_with_vmpooler_template, nil).build_host_name)
|
64
|
+
.to eq("ubuntu-1004-amd64")
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'returns abs_resource_name if abs_resource_name is specified' do
|
68
|
+
expect(Vanagon::Engine::AlwaysBeScheduling.new(platform_with_abs_resource_name, nil).build_host_name)
|
69
|
+
.to eq("aix-61-ppc")
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'prefers abs_resource_name to vmpooler_template if both are specified' do
|
73
|
+
expect(Vanagon::Engine::AlwaysBeScheduling.new(platform_with_both, nil).build_host_name)
|
74
|
+
.to eq("aix-61-ppc")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#name' do
|
79
|
+
it 'returns "always_be_scheduling" engine name' do
|
80
|
+
expect(Vanagon::Engine::AlwaysBeScheduling.new(platform, nil).name)
|
81
|
+
.to eq('always_be_scheduling')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|