packer-config 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +36 -0
- data/.rubocop.yml +340 -0
- data/.travis.yml +6 -0
- data/Gemfile +17 -0
- data/LICENSE +176 -0
- data/README.md +107 -0
- data/Rakefile +47 -0
- data/TODO.md +8 -0
- data/lib/packer-config.rb +181 -0
- data/lib/packer/builder.rb +65 -0
- data/lib/packer/builders/all.rb +17 -0
- data/lib/packer/builders/amazon.rb +214 -0
- data/lib/packer/builders/docker.rb +47 -0
- data/lib/packer/builders/virtualbox.rb +169 -0
- data/lib/packer/dataobject.rb +128 -0
- data/lib/packer/envvar.rb +27 -0
- data/lib/packer/macro.rb +28 -0
- data/lib/packer/postprocessor.rb +77 -0
- data/lib/packer/postprocessors/all.rb +16 -0
- data/lib/packer/postprocessors/docker.rb +35 -0
- data/lib/packer/postprocessors/vagrant.rb +47 -0
- data/lib/packer/provisioner.rb +86 -0
- data/lib/packer/provisioners/all.rb +16 -0
- data/lib/packer/provisioners/file.rb +36 -0
- data/lib/packer/provisioners/shell.rb +60 -0
- data/packer-config.gemspec +46 -0
- data/spec/integration/README.md +14 -0
- data/spec/integration/builds/.gitignore +4 -0
- data/spec/integration/centos_vagrant_spec.rb +76 -0
- data/spec/integration/packer_cache/.gitignore +4 -0
- data/spec/integration/scripts/chef.sh +199 -0
- data/spec/integration/scripts/cleanup.sh +17 -0
- data/spec/integration/scripts/fix-slow-dns.sh +13 -0
- data/spec/integration/scripts/hello.sh +3 -0
- data/spec/integration/scripts/kickstart/centos-6.5-ks.cfg +71 -0
- data/spec/integration/scripts/minimize.sh +9 -0
- data/spec/integration/scripts/sshd.sh +6 -0
- data/spec/integration/scripts/vagrant.sh +10 -0
- data/spec/integration/scripts/vmtools.sh +39 -0
- data/spec/packer/builder_spec.rb +39 -0
- data/spec/packer/builders/amazon_spec.rb +88 -0
- data/spec/packer/builders/docker_spec.rb +25 -0
- data/spec/packer/builders/virtualbox_spec.rb +44 -0
- data/spec/packer/dataobject_spec.rb +239 -0
- data/spec/packer/envvar_spec.rb +38 -0
- data/spec/packer/macro_spec.rb +38 -0
- data/spec/packer/postprocessor_spec.rb +72 -0
- data/spec/packer/postprocessors/docker_import_spec.rb +27 -0
- data/spec/packer/postprocessors/docker_push_spec.rb +27 -0
- data/spec/packer/postprocessors/vagrant_spec.rb +27 -0
- data/spec/packer/provisioner_spec.rb +78 -0
- data/spec/packer/provisioners/file_spec.rb +63 -0
- data/spec/packer/provisioners/shell_spec.rb +116 -0
- data/spec/packer_config_spec.rb +197 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/unit_helper.rb +15 -0
- metadata +220 -0
@@ -0,0 +1,25 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
# Copyright 2014 Ian Chesal
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
require 'spec_helper'
|
16
|
+
|
17
|
+
RSpec.describe Packer::Builder::Docker do
|
18
|
+
let(:builder) { Packer::Builder.get_builder(Packer::Builder::DOCKER) }
|
19
|
+
|
20
|
+
describe '#initialize' do
|
21
|
+
it 'has a type of docker' do
|
22
|
+
expect(builder.data['type']).to eq(Packer::Builder::DOCKER)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
# Copyright 2014 Ian Chesal
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
require 'spec_helper'
|
16
|
+
|
17
|
+
RSpec.describe Packer::Builder::VirtualBoxISO do
|
18
|
+
let(:builder) { Packer::Builder.get_builder(Packer::Builder::VIRTUALBOX_ISO) }
|
19
|
+
let(:in_commands_strings) { [["command1", "1"], ["command2", "2"]] }
|
20
|
+
let(:in_commands_mixed) { [["command1", 1 ], ["command2", 2 ]] }
|
21
|
+
let(:out_commands_strings) { [["command1", "1"], ["command2", "2"]] }
|
22
|
+
|
23
|
+
describe '#initialize' do
|
24
|
+
it 'has a type of virtualbox-iso' do
|
25
|
+
expect(builder.data['type']).to eq(Packer::Builder::VIRTUALBOX_ISO)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#vboxmanage' do
|
30
|
+
it 'builds an array of arrays of strings' do
|
31
|
+
builder.vboxmanage(in_commands_mixed)
|
32
|
+
expect( builder.data['vboxmanage'] ).to eq(out_commands_strings)
|
33
|
+
builder.data.delete('vboxmanage')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#vboxmanage_post' do
|
38
|
+
it 'builds an array of arrays of strings' do
|
39
|
+
builder.vboxmanage_post(in_commands_mixed)
|
40
|
+
expect( builder.data['vboxmanage_post'] ).to eq(out_commands_strings)
|
41
|
+
builder.data.delete('vboxmanage_post')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,239 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
# Copyright 2014 Ian Chesal
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
require 'spec_helper'
|
16
|
+
|
17
|
+
RSpec.describe Packer::DataObject do
|
18
|
+
let(:dataobject) { Packer::DataObject.new }
|
19
|
+
let(:some_string) { 'some string' }
|
20
|
+
let(:keys) { %w[key1 key2] }
|
21
|
+
let(:some_array_of_strings) { %w[value1 value2 value3] }
|
22
|
+
let(:some_array_of_ints) { [1, 2, 3] }
|
23
|
+
let(:some_hash_of_mixed) { { 'a' => 1, 'b' => 2 } }
|
24
|
+
let(:some_hash_of_strings) { { 'a' => '1', 'b' => '2' } }
|
25
|
+
let(:in_commands_strings) { [["command1", "1"], ["command2", "2"]] }
|
26
|
+
let(:in_commands_mixed) { [["command1", 1 ], ["command2", 2 ]] }
|
27
|
+
let(:out_commands_strings) { [["command1", "1"], ["command2", "2"]] }
|
28
|
+
|
29
|
+
describe "#initialize" do
|
30
|
+
it 'has a data hash' do
|
31
|
+
expect(dataobject.data).to eq({})
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#add_required' do
|
36
|
+
it 'tracks required settings' do
|
37
|
+
dataobject.add_required('a', 'b')
|
38
|
+
dataobject.add_required(['c', 'd'])
|
39
|
+
expect(dataobject.required).to eq(['a', 'b', ['c', 'd']])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#validate' do
|
44
|
+
it 'returns true when all required settings are present' do
|
45
|
+
dataobject.add_required('key')
|
46
|
+
dataobject.__add_string('key', 'value')
|
47
|
+
expect(dataobject.validate).to be_truthy
|
48
|
+
dataobject.data = []
|
49
|
+
dataobject.required = []
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'raises an error when a required setting is missing' do
|
53
|
+
dataobject.add_required('key')
|
54
|
+
expect { dataobject.validate }.to raise_error
|
55
|
+
dataobject.data = []
|
56
|
+
dataobject.required = []
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'returns true when exactly one setting from an exclusive set is preset' do
|
60
|
+
dataobject.add_required(['key1', 'key2'])
|
61
|
+
dataobject.__add_string('key1', 'value')
|
62
|
+
expect(dataobject.validate).to be_truthy
|
63
|
+
dataobject.data = []
|
64
|
+
dataobject.required = []
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'raises an error when no settings from an exclusive set are present' do
|
68
|
+
dataobject.add_required(['key1', 'key2'])
|
69
|
+
expect { dataobject.validate }.to raise_error
|
70
|
+
dataobject.data = []
|
71
|
+
dataobject.required = []
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'raises an error when more than one setting from an exclusive set is present' do
|
75
|
+
dataobject.add_required(['key1', 'key2'])
|
76
|
+
dataobject.__add_string('key1', 'value')
|
77
|
+
dataobject.__add_string('key2', 'value')
|
78
|
+
expect { dataobject.validate }.to raise_error
|
79
|
+
dataobject.data = []
|
80
|
+
dataobject.required = []
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'returns true when there are no required settings to validate' do
|
84
|
+
expect(dataobject.validate).to be_truthy
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#deep_copy' do
|
89
|
+
it 'retuns a full copy of the data structure' do
|
90
|
+
dataobject.__add_string('key', 'foo')
|
91
|
+
copy = dataobject.deep_copy
|
92
|
+
expect(copy).to eq(dataobject.data)
|
93
|
+
expect(copy).not_to be(dataobject.data)
|
94
|
+
copy['key'] << 'bar'
|
95
|
+
expect(copy).not_to eq(dataobject.data)
|
96
|
+
dataobject.data.delete('key')
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "#__exclusive_key_error" do
|
101
|
+
it 'returns true when the key is exclusive' do
|
102
|
+
dataobject.data[keys[0]] = 'value'
|
103
|
+
expect(dataobject.__exclusive_key_error(keys[0], keys[1..-1])).to be_truthy
|
104
|
+
dataobject.data.delete(keys[0])
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'raises an error when the key is not exclusive' do
|
108
|
+
dataobject.data[keys[0]] = 'value'
|
109
|
+
dataobject.data[keys[1]] = 'value'
|
110
|
+
expect { dataobject.__exclusive_key_error(keys[0], keys[1..-1]) }.to raise_error
|
111
|
+
dataobject.data.delete(keys)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe '#__add_array_of_strings' do
|
116
|
+
it 'assigns an array of strings to key' do
|
117
|
+
dataobject.__add_array_of_strings('key', some_array_of_strings)
|
118
|
+
expect(dataobject.data['key']).to eq(some_array_of_strings)
|
119
|
+
dataobject.data.delete('key')
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'converts an array of non-strings to strings and assigns them to key' do
|
123
|
+
dataobject.__add_array_of_strings('key', some_array_of_ints)
|
124
|
+
expect(dataobject.data['key']).to eq(some_array_of_ints.map{ |c| c.to_s })
|
125
|
+
dataobject.data.delete('key')
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'raises an error if the values cannot be turned in to an Array' do
|
129
|
+
expect { dataobject.__add_array_of_strings('key', 'some string') }.to raise_error
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
describe "#__add_array_of_array_of_strings" do
|
134
|
+
it 'assigns an array of array of strings to key' do
|
135
|
+
dataobject.__add_array_of_array_of_strings('key', in_commands_strings)
|
136
|
+
expect(dataobject.data['key']).to eq(out_commands_strings)
|
137
|
+
dataobject.data.delete('key')
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'converts non-strings to strings in the sub-arrays during assignment to key' do
|
141
|
+
dataobject.__add_array_of_array_of_strings('key', in_commands_mixed)
|
142
|
+
expect(dataobject.data['key']).to eq(out_commands_strings)
|
143
|
+
dataobject.data.delete('key')
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'raises an error if the values argument is not an array' do
|
147
|
+
expect { dataobject.__add_array_of_array_of_strings('key', 'some string') }.to raise_error
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'raises an error if any element in the values argument is not an array' do
|
151
|
+
expect { dataobject.__add_array_of_array_of_strings('key', [['legal'], 'illegal']) }.to raise_error
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
describe '#__add_string' do
|
156
|
+
it 'accepts a string' do
|
157
|
+
dataobject.__add_string('key', some_string)
|
158
|
+
expect(dataobject.data['key']).to eq(some_string)
|
159
|
+
dataobject.data.delete('key')
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'converts any argument passed to a string' do
|
163
|
+
dataobject.__add_string('key', some_array_of_ints)
|
164
|
+
expect(dataobject.data['key']).to eq(some_array_of_ints.to_s)
|
165
|
+
dataobject.data.delete('key')
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
describe '#__add_integer' do
|
170
|
+
it 'accepts anything that can be converted to an integer with #to_i' do
|
171
|
+
dataobject.__add_integer(keys[0], 1)
|
172
|
+
dataobject.__add_integer(keys[1], "2")
|
173
|
+
expect(dataobject.data[keys[0]]).to eq(1)
|
174
|
+
expect(dataobject.data[keys[1]]).to eq(2)
|
175
|
+
dataobject.data.delete(keys)
|
176
|
+
end
|
177
|
+
|
178
|
+
it 'raises an error if the value cannot be converted to an integer with #to_i' do
|
179
|
+
expect { dataobject.__add_integer('key', StandardError.new("not convertable")) }.to raise_error
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
describe '#__add_boolean' do
|
184
|
+
it 'accepts any truthy value and converts it to true' do
|
185
|
+
dataobject.__add_boolean('key', some_string)
|
186
|
+
expect(dataobject.data['key']).to be_truthy
|
187
|
+
dataobject.data.delete('key')
|
188
|
+
end
|
189
|
+
|
190
|
+
it 'accepts any non-truthy value and converts it to false' do
|
191
|
+
dataobject.__add_boolean('key', false)
|
192
|
+
expect(dataobject.data['key']).to be_falsey
|
193
|
+
dataobject.data.delete('key')
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
describe '#__add_hash' do
|
198
|
+
it 'assigns a hash to a key' do
|
199
|
+
dataobject.__add_hash('key', some_hash_of_strings)
|
200
|
+
expect(dataobject.data['key']).to eq(some_hash_of_strings)
|
201
|
+
dataobject.data.delete('key')
|
202
|
+
end
|
203
|
+
|
204
|
+
it 'converts a hash of non-strings to strings and assigns them to key' do
|
205
|
+
dataobject.__add_hash('key', some_hash_of_mixed)
|
206
|
+
expect(dataobject.data['key']).to eq(some_hash_of_strings)
|
207
|
+
dataobject.data.delete('key')
|
208
|
+
end
|
209
|
+
|
210
|
+
it 'raises an error if the values argument is not a Hash' do
|
211
|
+
expect { dataobject.__add_hash('key', 'some string') }.to raise_error
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
describe '#__add_array_of_hashes' do
|
216
|
+
it 'assigns an array of hashes to a key' do
|
217
|
+
array = [some_hash_of_strings, some_hash_of_strings]
|
218
|
+
dataobject.__add_array_of_hashes('key', array)
|
219
|
+
expect(dataobject.data['key']).to eq(array)
|
220
|
+
dataobject.data.delete('key')
|
221
|
+
end
|
222
|
+
|
223
|
+
it 'converts non-strings in the hashes to strings during assignment to key' do
|
224
|
+
array = [some_hash_of_mixed, some_hash_of_mixed]
|
225
|
+
dataobject.__add_array_of_hashes('key', array)
|
226
|
+
expect(dataobject.data['key']).to eq([some_hash_of_strings, some_hash_of_strings])
|
227
|
+
dataobject.data.delete('key')
|
228
|
+
end
|
229
|
+
|
230
|
+
it 'raises an error if the values argument is not an array' do
|
231
|
+
expect { dataobject.__add_array_of_hashes('key', 'some string') }.to raise_error
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'raises an error if any element in the values argument is not a Hash' do
|
235
|
+
expect { dataobject.__add_array_of_hashes('key', [some_hash_of_strings, 'illegal']) }.to raise_error
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
# Copyright 2014 Ian Chesal
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
require 'spec_helper'
|
16
|
+
|
17
|
+
RSpec.describe Packer::EnvVar do
|
18
|
+
let(:envvar) do
|
19
|
+
Packer::EnvVar.new
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns a packer.io envvar string for any method' do
|
23
|
+
expect(envvar.FOO).to eq("{{env `FOO`}}")
|
24
|
+
expect(envvar.BAR).to eq("{{env `BAR`}}")
|
25
|
+
expect(envvar.MOO).to eq("{{env `MOO`}}")
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'never changes the capitalization of the env var' do
|
29
|
+
expect(envvar.foo).to eq("{{env `foo`}}")
|
30
|
+
expect(envvar.Foo).to eq("{{env `Foo`}}")
|
31
|
+
expect(envvar.fOo).to eq("{{env `fOo`}}")
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'responds to anything' do
|
35
|
+
expect(envvar.respond_to? 'anything').to be_truthy
|
36
|
+
expect(envvar.respond_to? 'anything_else').to be_truthy
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
# Copyright 2014 Ian Chesal
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
require 'spec_helper'
|
16
|
+
|
17
|
+
RSpec.describe Packer::Macro do
|
18
|
+
let(:macro) do
|
19
|
+
Packer::Macro.new
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns a packer.io macro string for any method' do
|
23
|
+
expect(macro.Foo).to eq("{{ .Foo }}")
|
24
|
+
expect(macro.Bar).to eq("{{ .Bar }}")
|
25
|
+
expect(macro.Moo).to eq("{{ .Moo }}")
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'always capitalizes the first letter in the macro' do
|
29
|
+
expect(macro.foo).to eq("{{ .Foo }}")
|
30
|
+
expect(macro.Foo).to eq("{{ .Foo }}")
|
31
|
+
expect(macro.fOo).to eq("{{ .FOo }}")
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'responds to anything' do
|
35
|
+
expect(macro.respond_to? 'anything').to be_truthy
|
36
|
+
expect(macro.respond_to? 'anything_else').to be_truthy
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# Encoding: utf-8
|
2
|
+
# Copyright 2014 Ian Chesal
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
require 'spec_helper'
|
16
|
+
|
17
|
+
RSpec.describe Packer::PostProcessor do
|
18
|
+
POSTPROCESSOR_TYPE = 'vagrant'
|
19
|
+
|
20
|
+
let(:postprocessor) do
|
21
|
+
Packer::PostProcessor.new
|
22
|
+
end
|
23
|
+
|
24
|
+
let(:overrides) do
|
25
|
+
{
|
26
|
+
"key1" => "value1",
|
27
|
+
"key2" => "value2"
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '.get_postprocessor' do
|
32
|
+
it 'returns a post-processor' do
|
33
|
+
expect(Packer::PostProcessor.get_postprocessor(POSTPROCESSOR_TYPE)).to be_a_kind_of(Packer::PostProcessor)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'raises an error when the post-processor type is not recognized' do
|
37
|
+
expect { Packer::PostProcessor.get_postprocessor('unknown-type') }.to raise_error
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '#only' do
|
42
|
+
it 'adds an only exception' do
|
43
|
+
postprocessor.only('thing1')
|
44
|
+
expect(postprocessor.data['only']).to eq(%w[thing1])
|
45
|
+
postprocessor.only('thing2')
|
46
|
+
expect(postprocessor.data['only']).to eq(%w[thing1 thing2])
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#except' do
|
51
|
+
it 'adds an execpt exception' do
|
52
|
+
postprocessor.except('thing3')
|
53
|
+
expect(postprocessor.data['except']).to eq(%w[thing3])
|
54
|
+
postprocessor.except('thing4')
|
55
|
+
expect(postprocessor.data['except']).to eq(%w[thing3 thing4])
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#keep_input_artifact' do
|
60
|
+
it 'accepts any truthy value and converts it to true' do
|
61
|
+
postprocessor.keep_input_artifact('this is true')
|
62
|
+
expect(postprocessor.data['keep_input_artifact']).to be_truthy
|
63
|
+
postprocessor.data.delete('keep_input_artifact')
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'accepts any non-truthy value and converts it to false' do
|
67
|
+
postprocessor.keep_input_artifact(false)
|
68
|
+
expect(postprocessor.data['keep_input_artifact']).to be_falsey
|
69
|
+
postprocessor.data.delete('keep_input_artifact')
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|