vanagon 0.3.18
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 +7 -0
- data/LICENSE +13 -0
- data/README.md +175 -0
- data/bin/build +33 -0
- data/bin/devkit +22 -0
- data/bin/repo +26 -0
- data/bin/ship +15 -0
- data/lib/vanagon.rb +8 -0
- data/lib/vanagon/common.rb +2 -0
- data/lib/vanagon/common/pathname.rb +87 -0
- data/lib/vanagon/common/user.rb +25 -0
- data/lib/vanagon/component.rb +157 -0
- data/lib/vanagon/component/dsl.rb +307 -0
- data/lib/vanagon/component/source.rb +66 -0
- data/lib/vanagon/component/source/git.rb +60 -0
- data/lib/vanagon/component/source/http.rb +158 -0
- data/lib/vanagon/driver.rb +112 -0
- data/lib/vanagon/engine/base.rb +82 -0
- data/lib/vanagon/engine/docker.rb +40 -0
- data/lib/vanagon/engine/local.rb +40 -0
- data/lib/vanagon/engine/pooler.rb +85 -0
- data/lib/vanagon/errors.rb +28 -0
- data/lib/vanagon/extensions/string.rb +11 -0
- data/lib/vanagon/optparse.rb +62 -0
- data/lib/vanagon/platform.rb +245 -0
- data/lib/vanagon/platform/deb.rb +71 -0
- data/lib/vanagon/platform/dsl.rb +293 -0
- data/lib/vanagon/platform/osx.rb +100 -0
- data/lib/vanagon/platform/rpm.rb +76 -0
- data/lib/vanagon/platform/rpm/wrl.rb +39 -0
- data/lib/vanagon/platform/solaris_10.rb +182 -0
- data/lib/vanagon/platform/solaris_11.rb +138 -0
- data/lib/vanagon/platform/swix.rb +35 -0
- data/lib/vanagon/project.rb +251 -0
- data/lib/vanagon/project/dsl.rb +218 -0
- data/lib/vanagon/utilities.rb +299 -0
- data/spec/fixures/component/invalid-test-fixture.json +3 -0
- data/spec/fixures/component/mcollective.service +1 -0
- data/spec/fixures/component/test-fixture.json +4 -0
- data/spec/lib/vanagon/common/pathname_spec.rb +103 -0
- data/spec/lib/vanagon/common/user_spec.rb +36 -0
- data/spec/lib/vanagon/component/dsl_spec.rb +443 -0
- data/spec/lib/vanagon/component/source/git_spec.rb +19 -0
- data/spec/lib/vanagon/component/source/http_spec.rb +43 -0
- data/spec/lib/vanagon/component/source_spec.rb +99 -0
- data/spec/lib/vanagon/component_spec.rb +22 -0
- data/spec/lib/vanagon/engine/base_spec.rb +40 -0
- data/spec/lib/vanagon/engine/docker_spec.rb +40 -0
- data/spec/lib/vanagon/engine/pooler_spec.rb +54 -0
- data/spec/lib/vanagon/platform/deb_spec.rb +60 -0
- data/spec/lib/vanagon/platform/dsl_spec.rb +128 -0
- data/spec/lib/vanagon/platform/rpm_spec.rb +41 -0
- data/spec/lib/vanagon/platform/solaris_11_spec.rb +44 -0
- data/spec/lib/vanagon/platform_spec.rb +53 -0
- data/spec/lib/vanagon/project/dsl_spec.rb +203 -0
- data/spec/lib/vanagon/project_spec.rb +44 -0
- data/spec/lib/vanagon/utilities_spec.rb +140 -0
- data/templates/Makefile.erb +116 -0
- data/templates/deb/changelog.erb +5 -0
- data/templates/deb/conffiles.erb +3 -0
- data/templates/deb/control.erb +21 -0
- data/templates/deb/dirs.erb +3 -0
- data/templates/deb/docs.erb +1 -0
- data/templates/deb/install.erb +3 -0
- data/templates/deb/postinst.erb +46 -0
- data/templates/deb/postrm.erb +15 -0
- data/templates/deb/prerm.erb +17 -0
- data/templates/deb/rules.erb +25 -0
- data/templates/osx/postinstall.erb +24 -0
- data/templates/osx/preinstall.erb +19 -0
- data/templates/osx/project-installer.xml.erb +19 -0
- data/templates/rpm/project.spec.erb +217 -0
- data/templates/solaris/10/depend.erb +3 -0
- data/templates/solaris/10/pkginfo.erb +13 -0
- data/templates/solaris/10/postinstall.erb +37 -0
- data/templates/solaris/10/preinstall.erb +7 -0
- data/templates/solaris/10/preremove.erb +6 -0
- data/templates/solaris/10/proto.erb +5 -0
- data/templates/solaris/11/p5m.erb +73 -0
- metadata +172 -0
@@ -0,0 +1,443 @@
|
|
1
|
+
require 'vanagon/component/dsl'
|
2
|
+
require 'vanagon/common'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
describe 'Vanagon::Component::DSL' do
|
6
|
+
let (:component_block) {
|
7
|
+
"component 'test-fixture' do |pkg, settings, platform|
|
8
|
+
pkg.load_from_json('spec/fixures/component/test-fixture.json')
|
9
|
+
end" }
|
10
|
+
|
11
|
+
let (:invalid_component_block) {
|
12
|
+
"component 'test-fixture' do |pkg, settings, platform|
|
13
|
+
pkg.load_from_json('spec/fixures/component/invalid-test-fixture.json')
|
14
|
+
end" }
|
15
|
+
|
16
|
+
let (:dummy_platform_sysv) {
|
17
|
+
plat = Vanagon::Platform::DSL.new('debian-6-i386')
|
18
|
+
plat.instance_eval("platform 'debian-6-i386' do |plat|
|
19
|
+
plat.servicetype 'sysv'
|
20
|
+
plat.servicedir '/etc/init.d'
|
21
|
+
plat.defaultdir '/etc/default'
|
22
|
+
end")
|
23
|
+
plat._platform
|
24
|
+
}
|
25
|
+
|
26
|
+
let (:dummy_platform_systemd) {
|
27
|
+
plat = Vanagon::Platform::DSL.new('el-7-x86_64')
|
28
|
+
plat.instance_eval("platform 'el-7-x86_64' do |plat|
|
29
|
+
plat.servicetype 'systemd'
|
30
|
+
plat.servicedir '/usr/lib/systemd/system'
|
31
|
+
plat.defaultdir '/etc/default'
|
32
|
+
end")
|
33
|
+
plat._platform
|
34
|
+
}
|
35
|
+
|
36
|
+
let (:dummy_platform_smf) {
|
37
|
+
plat = Vanagon::Platform::DSL.new('debian-11-i386')
|
38
|
+
plat.instance_eval("platform 'debian-11-i386' do |plat|
|
39
|
+
plat.servicetype 'smf'
|
40
|
+
plat.servicedir '/var/svc/manifest'
|
41
|
+
plat.defaultdir '/lib/svc/method'
|
42
|
+
end")
|
43
|
+
plat._platform
|
44
|
+
}
|
45
|
+
|
46
|
+
let (:dummy_platform_aix) {
|
47
|
+
plat = Vanagon::Platform::DSL.new('aix-7.1-ppc')
|
48
|
+
plat.instance_eval("platform 'aix-7.1-ppc' do |plat|
|
49
|
+
plat.servicetype 'aix'
|
50
|
+
plat.servicedir '/etc/rc.d'
|
51
|
+
plat.defaultdir '/etc/rc.d'
|
52
|
+
end")
|
53
|
+
plat._platform
|
54
|
+
}
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
let(:platform) { double(Vanagon::Platform) }
|
59
|
+
|
60
|
+
before do
|
61
|
+
allow(platform).to receive(:install).and_return('install')
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#load_from_json' do
|
65
|
+
it "sets the ref and url based on the json fixture" do
|
66
|
+
comp = Vanagon::Component::DSL.new('test-fixture', {}, {})
|
67
|
+
comp.instance_eval(component_block)
|
68
|
+
expect(comp._component.options[:ref]).to eq('3.7.3')
|
69
|
+
expect(comp._component.url).to eq('git@github.com:puppetlabs/puppet')
|
70
|
+
end
|
71
|
+
|
72
|
+
it "raises an error on invalid methods/attributes in the json" do
|
73
|
+
comp = Vanagon::Component::DSL.new('test-fixture', {}, {})
|
74
|
+
expect { comp.instance_eval(invalid_component_block) }.to raise_error(RuntimeError)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#configure' do
|
79
|
+
it 'sets configure to the value if configure is empty' do
|
80
|
+
comp = Vanagon::Component::DSL.new('configure-test', {}, {})
|
81
|
+
comp.configure { './configure' }
|
82
|
+
expect(comp._component.configure).to eq(['./configure'])
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'appends to the existing configure if not empty' do
|
86
|
+
comp = Vanagon::Component::DSL.new('configure-test', {}, {})
|
87
|
+
comp.configure { './configure' }
|
88
|
+
comp.configure { './test' }
|
89
|
+
expect(comp._component.configure).to eq(['./configure', './test'])
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe '#build' do
|
94
|
+
it 'sets build to the value if build is empty' do
|
95
|
+
comp = Vanagon::Component::DSL.new('build-test', {}, {})
|
96
|
+
comp.build { './build' }
|
97
|
+
expect(comp._component.build).to eq(['./build'])
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'appends to the existing build if not empty' do
|
101
|
+
comp = Vanagon::Component::DSL.new('build-test', {}, {})
|
102
|
+
comp.build { './build' }
|
103
|
+
comp.build { './test' }
|
104
|
+
expect(comp._component.build).to eq(['./build', './test'])
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe '#install' do
|
109
|
+
it 'sets install to the value if install is empty' do
|
110
|
+
comp = Vanagon::Component::DSL.new('install-test', {}, {})
|
111
|
+
comp.install { './install' }
|
112
|
+
expect(comp._component.install).to eq(['./install'])
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'appends to the existing install if not empty' do
|
116
|
+
comp = Vanagon::Component::DSL.new('install-test', {}, {})
|
117
|
+
comp.install { './install' }
|
118
|
+
comp.install { './test' }
|
119
|
+
expect(comp._component.install).to eq(['./install', './test'])
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe '#apply_patch' do
|
124
|
+
it 'adds the patch to the list of patches' do
|
125
|
+
comp = Vanagon::Component::DSL.new('patch-test', {}, {})
|
126
|
+
comp.apply_patch('patch_file1')
|
127
|
+
comp.apply_patch('patch_file2')
|
128
|
+
expect(comp._component.patches.count).to eq 2
|
129
|
+
expect(comp._component.patches.first.path).to eq 'patch_file1'
|
130
|
+
expect(comp._component.patches.last.path).to eq 'patch_file2'
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'can specify strip and fuzz' do
|
134
|
+
comp = Vanagon::Component::DSL.new('patch-test', {}, {})
|
135
|
+
# This patch must be amazing
|
136
|
+
comp.apply_patch('patch_file1', fuzz: 12, strip: 1000000)
|
137
|
+
expect(comp._component.patches.count).to eq 1
|
138
|
+
expect(comp._component.patches.first.path).to eq 'patch_file1'
|
139
|
+
expect(comp._component.patches.first.fuzz).to eq '12'
|
140
|
+
expect(comp._component.patches.first.strip).to eq '1000000'
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
describe '#build_requires' do
|
145
|
+
it 'adds the build requirement to the list of build requirements' do
|
146
|
+
comp = Vanagon::Component::DSL.new('buildreq-test', {}, {})
|
147
|
+
comp.build_requires('library1')
|
148
|
+
comp.build_requires('library2')
|
149
|
+
expect(comp._component.build_requires).to include('library1')
|
150
|
+
expect(comp._component.build_requires).to include('library2')
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
describe '#requires' do
|
155
|
+
it 'adds the runtime requirement to the list of requirements' do
|
156
|
+
comp = Vanagon::Component::DSL.new('requires-test', {}, {})
|
157
|
+
comp.requires('library1')
|
158
|
+
comp.requires('library2')
|
159
|
+
expect(comp._component.requires).to include('library1')
|
160
|
+
expect(comp._component.requires).to include('library2')
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
describe '#provides' do
|
165
|
+
it 'adds the package provide to the list of provides' do
|
166
|
+
comp = Vanagon::Component::DSL.new('provides-test', {}, {})
|
167
|
+
comp.provides('thing1')
|
168
|
+
comp.provides('thing2')
|
169
|
+
expect(comp._component.provides.first.provide).to eq('thing1')
|
170
|
+
expect(comp._component.provides.last.provide).to eq('thing2')
|
171
|
+
end
|
172
|
+
|
173
|
+
it 'supports versioned provides' do
|
174
|
+
comp = Vanagon::Component::DSL.new('provides-test', {}, {})
|
175
|
+
comp.provides('thing1', '1.2.3')
|
176
|
+
expect(comp._component.provides.first.provide).to eq('thing1')
|
177
|
+
expect(comp._component.provides.first.version).to eq('1.2.3')
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
describe '#replaces' do
|
182
|
+
it 'adds the package replacement to the list of replacements' do
|
183
|
+
comp = Vanagon::Component::DSL.new('replaces-test', {}, {})
|
184
|
+
comp.replaces('thing1')
|
185
|
+
comp.replaces('thing2')
|
186
|
+
expect(comp._component.replaces.first.replacement).to eq('thing1')
|
187
|
+
expect(comp._component.replaces.last.replacement).to eq('thing2')
|
188
|
+
end
|
189
|
+
|
190
|
+
it 'supports versioned replaces' do
|
191
|
+
comp = Vanagon::Component::DSL.new('replaces-test', {}, {})
|
192
|
+
comp.replaces('thing1', '1.2.3')
|
193
|
+
expect(comp._component.replaces.first.replacement).to eq('thing1')
|
194
|
+
expect(comp._component.replaces.first.version).to eq('1.2.3')
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
describe '#add_actions' do
|
199
|
+
it 'adds the corect preinstall action to the component for rpm platforms' do
|
200
|
+
comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
|
201
|
+
comp.add_preinstall_action('chkconfig --list')
|
202
|
+
expect(comp._component.preinstall_actions).to include("chkconfig --list")
|
203
|
+
end
|
204
|
+
|
205
|
+
it 'adds the corect postinstall action to the component for rpm platforms' do
|
206
|
+
comp = Vanagon::Component::DSL.new('action-test', {}, dummy_platform_sysv)
|
207
|
+
comp.add_postinstall_action('chkconfig --list')
|
208
|
+
expect(comp._component.postinstall_actions).to include("chkconfig --list")
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
describe '#install_service' do
|
213
|
+
it 'adds the correct command to the install for the component for sysv platforms' do
|
214
|
+
comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_sysv)
|
215
|
+
comp.install_service('component-client.init', 'component-client.sysconfig')
|
216
|
+
# Look for servicedir creation and copy
|
217
|
+
expect(comp._component.install).to include("install -d '/etc/init.d'")
|
218
|
+
expect(comp._component.install).to include("cp -p 'component-client.init' '/etc/init.d/service-test'")
|
219
|
+
|
220
|
+
# Look for defaultdir creation and copy
|
221
|
+
expect(comp._component.install).to include("install -d '/etc/default'")
|
222
|
+
expect(comp._component.install).to include("cp -p 'component-client.sysconfig' '/etc/default/service-test'")
|
223
|
+
|
224
|
+
# Look for files and configfiles
|
225
|
+
expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('/etc/default/service-test'))
|
226
|
+
expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test', mode: '0755'))
|
227
|
+
|
228
|
+
# The component should now have a service registered
|
229
|
+
expect(comp._component.service.name).to eq('service-test')
|
230
|
+
end
|
231
|
+
|
232
|
+
it 'reads from a file when the OS is AIX for services' do
|
233
|
+
comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_aix)
|
234
|
+
comp.install_service('spec/fixures/component/mcollective.service', nil, 'mcollective')
|
235
|
+
expect(comp._component.service.name).to eq('mcollective')
|
236
|
+
expect(comp._component.service.service_command).to include('/opt/puppetlabs/puppet/bin/ruby')
|
237
|
+
expect(comp._component.service.service_command).not_to include("\n")
|
238
|
+
end
|
239
|
+
|
240
|
+
it 'adds the correct command to the install for the component for systemd platforms' do
|
241
|
+
comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_systemd)
|
242
|
+
comp.install_service('component-client.service', 'component-client.sysconfig')
|
243
|
+
# Look for servicedir creation and copy
|
244
|
+
expect(comp._component.install).to include("install -d '/usr/lib/systemd/system'")
|
245
|
+
expect(comp._component.install).to include("cp -p 'component-client.service' '/usr/lib/systemd/system/service-test.service'")
|
246
|
+
|
247
|
+
# Look for defaultdir creation and copy
|
248
|
+
expect(comp._component.install).to include("install -d '/etc/default'")
|
249
|
+
expect(comp._component.install).to include("cp -p 'component-client.sysconfig' '/etc/default/service-test'")
|
250
|
+
|
251
|
+
# Look for files and configfiles
|
252
|
+
expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('/etc/default/service-test'))
|
253
|
+
expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/usr/lib/systemd/system/service-test.service', mode: '0644'))
|
254
|
+
|
255
|
+
# The component should now have a service registered
|
256
|
+
expect(comp._component.service.name).to eq('service-test')
|
257
|
+
end
|
258
|
+
|
259
|
+
it 'adds the correct command to the install for smf services using a service_type' do
|
260
|
+
comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_smf)
|
261
|
+
comp.install_service('service.xml', 'service-default-file', service_type: 'network')
|
262
|
+
# Look for servicedir creation and copy
|
263
|
+
expect(comp._component.install).to include("install -d '/var/svc/manifest/network'")
|
264
|
+
expect(comp._component.install).to include("cp -p 'service.xml' '/var/svc/manifest/network/service-test.xml'")
|
265
|
+
|
266
|
+
# Look for defaultdir creation and copy
|
267
|
+
expect(comp._component.install).to include("install -d '/lib/svc/method'")
|
268
|
+
expect(comp._component.install).to include("cp -p 'service-default-file' '/lib/svc/method/service-test'")
|
269
|
+
|
270
|
+
# Look for files and configfiles
|
271
|
+
expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('/lib/svc/method/service-test'))
|
272
|
+
expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/var/svc/manifest/network/service-test.xml', mode: '0644'))
|
273
|
+
|
274
|
+
# The component should now have a service registered
|
275
|
+
expect(comp._component.service.name).to eq('service-test')
|
276
|
+
end
|
277
|
+
|
278
|
+
it 'adds the correct command to the install for smf services' do
|
279
|
+
comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_smf)
|
280
|
+
comp.install_service('service.xml', 'service-default-file')
|
281
|
+
# Look for servicedir creation and copy
|
282
|
+
expect(comp._component.install).to include("install -d '/var/svc/manifest'")
|
283
|
+
expect(comp._component.install).to include("cp -p 'service.xml' '/var/svc/manifest/service-test.xml'")
|
284
|
+
|
285
|
+
# Look for defaultdir creation and copy
|
286
|
+
expect(comp._component.install).to include("install -d '/lib/svc/method'")
|
287
|
+
expect(comp._component.install).to include("cp -p 'service-default-file' '/lib/svc/method/service-test'")
|
288
|
+
|
289
|
+
# Look for files and configfiles
|
290
|
+
expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('/lib/svc/method/service-test'))
|
291
|
+
expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/var/svc/manifest/service-test.xml', mode: '0644'))
|
292
|
+
|
293
|
+
# The component should now have a service registered
|
294
|
+
expect(comp._component.service.name).to eq('service-test')
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
describe '#install_file' do
|
299
|
+
it 'installs correctly using GNU install on AIX' do
|
300
|
+
comp = Vanagon::Component::DSL.new('install-file-test', {}, dummy_platform_aix)
|
301
|
+
comp.install_file('thing1', 'place/to/put/thing1')
|
302
|
+
expect(comp._component.install).to include("/opt/freeware/bin/install -d 'place/to/put'")
|
303
|
+
expect(comp._component.install).to include("cp -p 'thing1' 'place/to/put/thing1'")
|
304
|
+
end
|
305
|
+
|
306
|
+
it 'adds the correct commands to the install to copy the file' do
|
307
|
+
comp = Vanagon::Component::DSL.new('install-file-test', {}, platform)
|
308
|
+
comp.install_file('thing1', 'place/to/put/thing1')
|
309
|
+
expect(comp._component.install).to include("install -d 'place/to/put'")
|
310
|
+
expect(comp._component.install).to include("cp -p 'thing1' 'place/to/put/thing1'")
|
311
|
+
end
|
312
|
+
|
313
|
+
it 'adds an owner and group to the installation' do
|
314
|
+
comp = Vanagon::Component::DSL.new('install-file-test', {}, platform)
|
315
|
+
comp.install_file('thing1', 'place/to/put/thing1', owner: 'bob', group: 'timmy', mode: '0022')
|
316
|
+
expect(comp._component.install).to include("install -d 'place/to/put'")
|
317
|
+
expect(comp._component.install).to include("cp -p 'thing1' 'place/to/put/thing1'")
|
318
|
+
expect(comp._component.files).to include(Vanagon::Common::Pathname.file('place/to/put/thing1', mode: '0022', owner: 'bob', group: 'timmy'))
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
describe 'configfile handling' do
|
323
|
+
let(:platform) { double(Vanagon::Platform) }
|
324
|
+
|
325
|
+
describe 'on anything but solaris 10' do
|
326
|
+
before do
|
327
|
+
allow(platform).to receive(:name).and_return('debian-8-amd64')
|
328
|
+
end
|
329
|
+
|
330
|
+
describe '#configfile' do
|
331
|
+
it 'adds the file to the configfiles list' do
|
332
|
+
comp = Vanagon::Component::DSL.new('config-file-test', {}, platform)
|
333
|
+
comp.configfile('/place/to/put/thing1')
|
334
|
+
expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('/place/to/put/thing1'))
|
335
|
+
expect(comp._component.configfiles).not_to include(Vanagon::Common::Pathname.file('/place/to/put/thing1'))
|
336
|
+
end
|
337
|
+
end
|
338
|
+
|
339
|
+
describe '#install_configfile' do
|
340
|
+
it 'adds the commands to install the configfile' do
|
341
|
+
comp = Vanagon::Component::DSL.new('install-config-file-test', {}, platform)
|
342
|
+
comp.install_configfile('thing1', 'place/to/put/thing1')
|
343
|
+
expect(comp._component.install).to include("install -d 'place/to/put'")
|
344
|
+
expect(comp._component.install).to include("cp -p 'thing1' 'place/to/put/thing1'")
|
345
|
+
end
|
346
|
+
|
347
|
+
it 'adds the file to the configfiles list' do
|
348
|
+
comp = Vanagon::Component::DSL.new('install-config-file-test', {}, platform)
|
349
|
+
comp.install_configfile('thing1', 'place/to/put/thing1')
|
350
|
+
expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('place/to/put/thing1'))
|
351
|
+
expect(comp._component.files).not_to include(Vanagon::Common::Pathname.file('place/to/put/thing1'))
|
352
|
+
end
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
356
|
+
describe 'on solaris 10, do something terrible' do
|
357
|
+
before do
|
358
|
+
allow(platform).to receive(:name).and_return('solaris-10-x86_64')
|
359
|
+
end
|
360
|
+
|
361
|
+
describe '#configfile' do
|
362
|
+
it 'adds the file to the configfiles list' do
|
363
|
+
comp = Vanagon::Component::DSL.new('config-file-test', {}, platform)
|
364
|
+
comp.configfile('/place/to/put/thing1')
|
365
|
+
expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('/place/to/put/thing1.pristine'))
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
369
|
+
describe '#install_configfile' do
|
370
|
+
it 'adds the commands to install the configfile' do
|
371
|
+
comp = Vanagon::Component::DSL.new('install-config-file-test', {}, platform)
|
372
|
+
comp.install_configfile('thing1', 'place/to/put/thing1')
|
373
|
+
expect(comp._component.install).to include("install -d 'place/to/put'")
|
374
|
+
expect(comp._component.install).to include("cp -p 'thing1' 'place/to/put/thing1'")
|
375
|
+
end
|
376
|
+
|
377
|
+
it 'adds the file to the configfiles list' do
|
378
|
+
comp = Vanagon::Component::DSL.new('install-config-file-test', {}, platform)
|
379
|
+
comp.install_configfile('thing1', 'place/to/put/thing1')
|
380
|
+
expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('place/to/put/thing1.pristine'))
|
381
|
+
expect(comp._component.configfiles).not_to include(Vanagon::Common::Pathname.file('place/to/put/thing1'))
|
382
|
+
end
|
383
|
+
end
|
384
|
+
end
|
385
|
+
end
|
386
|
+
|
387
|
+
describe '#link' do
|
388
|
+
it 'adds the correct command to the install for the component' do
|
389
|
+
comp = Vanagon::Component::DSL.new('link-test', {}, platform)
|
390
|
+
comp.link('link-source', '/place/to/put/things')
|
391
|
+
expect(comp._component.install).to include("install -d '/place/to/put'")
|
392
|
+
expect(comp._component.install).to include("ln -s 'link-source' '/place/to/put/things'")
|
393
|
+
end
|
394
|
+
end
|
395
|
+
|
396
|
+
describe '#environment' do
|
397
|
+
it 'adds an override to the environment for a component' do
|
398
|
+
comp = Vanagon::Component::DSL.new('env-test', {}, {})
|
399
|
+
comp.environment({'PATH' => '/usr/local/bin'})
|
400
|
+
expect(comp._component.environment).to eq({'PATH' => '/usr/local/bin'})
|
401
|
+
end
|
402
|
+
|
403
|
+
it 'merges against the existing environment' do
|
404
|
+
comp = Vanagon::Component::DSL.new('env-test', {}, {})
|
405
|
+
comp.environment({'PATH' => '/usr/local/bin'})
|
406
|
+
comp.environment({'PATH' => '/usr/bin'})
|
407
|
+
comp.environment({'CFLAGS' => '-I /usr/local/bin'})
|
408
|
+
expect(comp._component.environment).to eq({'PATH' => '/usr/bin', 'CFLAGS' => '-I /usr/local/bin'})
|
409
|
+
end
|
410
|
+
end
|
411
|
+
|
412
|
+
describe '#directory' do
|
413
|
+
it 'adds a directory with the desired path to the directory collection for the component' do
|
414
|
+
comp = Vanagon::Component::DSL.new('directory-test', {}, {})
|
415
|
+
comp.directory('/a/b/c')
|
416
|
+
expect(comp._component.directories).to include(Vanagon::Common::Pathname.new('/a/b/c'))
|
417
|
+
end
|
418
|
+
|
419
|
+
it 'adds a directory with the desired mode to the directory collection for the component' do
|
420
|
+
comp = Vanagon::Component::DSL.new('directory-test', {}, {})
|
421
|
+
comp.directory('/a/b/c', mode: '0755')
|
422
|
+
expect(comp._component.directories.first).to eq(Vanagon::Common::Pathname.new('/a/b/c', mode: '0755'))
|
423
|
+
end
|
424
|
+
|
425
|
+
it 'adds a directory with the desired owner to the directory collection for the component' do
|
426
|
+
comp = Vanagon::Component::DSL.new('directory-test', {}, {})
|
427
|
+
comp.directory('/a/b/c', owner: 'olivia')
|
428
|
+
expect(comp._component.directories.first).to eq(Vanagon::Common::Pathname.new('/a/b/c', owner: 'olivia'))
|
429
|
+
end
|
430
|
+
|
431
|
+
it 'adds a directory with the desired group to the directory collection for the component' do
|
432
|
+
comp = Vanagon::Component::DSL.new('directory-test', {}, {})
|
433
|
+
comp.directory('/a/b/c', group: 'release-engineering')
|
434
|
+
expect(comp._component.directories.first).to eq(Vanagon::Common::Pathname.new('/a/b/c', group: 'release-engineering'))
|
435
|
+
end
|
436
|
+
|
437
|
+
it 'adds a directory with the desired attributes to the directory collection for the component' do
|
438
|
+
comp = Vanagon::Component::DSL.new('directory-test', {}, {})
|
439
|
+
comp.directory('/a/b/c', mode: '0400', owner: 'olivia', group: 'release-engineering')
|
440
|
+
expect(comp._component.directories.first).to eq(Vanagon::Common::Pathname.new('/a/b/c', mode: '0400', owner: 'olivia', group: 'release-engineering'))
|
441
|
+
end
|
442
|
+
end
|
443
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'vanagon/component/source/git'
|
2
|
+
|
3
|
+
describe "Vanagon::Component::Source::Git" do
|
4
|
+
let (:url) { 'git://github.com/puppetlabs/facter' }
|
5
|
+
let (:ref) { '2.2.0' }
|
6
|
+
let (:workdir) { "/tmp" }
|
7
|
+
|
8
|
+
describe "#dirname" do
|
9
|
+
it "returns the name of the repo" do
|
10
|
+
git_source = Vanagon::Component::Source::Git.new(url, ref, workdir)
|
11
|
+
expect(git_source.dirname).to eq('facter')
|
12
|
+
end
|
13
|
+
|
14
|
+
it "returns the name of the repo and strips .git" do
|
15
|
+
git_source = Vanagon::Component::Source::Git.new("#{url}.git", ref, workdir)
|
16
|
+
expect(git_source.dirname).to eq('facter')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|