vanagon 0.15.8 → 0.15.9
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/vanagon/component.rb +1 -0
- data/lib/vanagon/component/dsl.rb +20 -16
- data/lib/vanagon/platform.rb +32 -0
- data/lib/vanagon/platform/dsl.rb +18 -2
- data/lib/vanagon/project.rb +5 -1
- data/resources/deb/postinst.erb +18 -13
- data/resources/deb/postrm.erb +6 -6
- data/resources/deb/prerm.erb +12 -8
- data/resources/rpm/project.spec.erb +11 -11
- data/spec/lib/vanagon/component/dsl_spec.rb +45 -8
- data/spec/lib/vanagon/platform_spec.rb +80 -0
- metadata +31 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d495893440327f099e0b318c1d7e5966a7c186e6
|
4
|
+
data.tar.gz: c626b8ca9a1e48dbe0d08d6bc3857e7226223233
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78aee1207d6b21ac432bf07bda73f9491d1b19ae80271b545fad51e1cffcf27e8b3f5adba2a3b70bf1713c555feb5000a6b8f50a0f40b0fc184d9e49b3c21127
|
7
|
+
data.tar.gz: b81d5f2cf49c8de57cbbc4d5b952eaecaed7af319a03b500c9aaa1c001b91cff03584e20976470caf84dccae6858cf1572dad59e2f26553ee5c1c1939b00a51f
|
data/lib/vanagon/component.rb
CHANGED
@@ -163,36 +163,40 @@ class Vanagon
|
|
163
163
|
#
|
164
164
|
# @param service_file [String] path to the service file relative to the source
|
165
165
|
# @param default_file [String] path to the default file relative to the source
|
166
|
-
# @param
|
167
|
-
#
|
168
|
-
#
|
169
|
-
|
170
|
-
|
166
|
+
# @param options optional extra parameters
|
167
|
+
# service_name [String] name of the service
|
168
|
+
# service_type [String] type of the service (network, application, system, etc)
|
169
|
+
# link_target [String] executable service file should be linked to
|
170
|
+
def install_service(service_file, default_file = nil, service_name = @component.name, **options) # rubocop:disable Metrics/AbcSize
|
171
|
+
init_system = options[:init_system] || @component.platform.servicetype
|
172
|
+
servicedir = @component.platform.get_service_dir(init_system)
|
173
|
+
|
174
|
+
case init_system
|
171
175
|
when "sysv"
|
172
|
-
target_service_file = File.join(
|
176
|
+
target_service_file = File.join(servicedir, service_name)
|
173
177
|
target_default_file = File.join(@component.platform.defaultdir, service_name)
|
174
178
|
target_mode = '0755'
|
175
179
|
default_mode = '0644'
|
176
180
|
when "systemd"
|
177
|
-
target_service_file = File.join(
|
181
|
+
target_service_file = File.join(servicedir, "#{service_name}.service")
|
178
182
|
target_default_file = File.join(@component.platform.defaultdir, service_name)
|
179
183
|
target_mode = '0644'
|
180
184
|
default_mode = '0644'
|
181
185
|
when "launchd"
|
182
|
-
target_service_file = File.join(
|
186
|
+
target_service_file = File.join(servicedir, "#{service_name}.plist")
|
183
187
|
target_mode = '0644'
|
184
188
|
default_mode = '0644'
|
185
189
|
when "smf"
|
186
|
-
target_service_file = File.join(
|
190
|
+
target_service_file = File.join(servicedir, options[:service_type].to_s, "#{service_name}.xml")
|
187
191
|
target_default_file = File.join(@component.platform.defaultdir, service_name)
|
188
192
|
target_mode = '0644'
|
189
193
|
default_mode = '0755'
|
190
194
|
when "aix"
|
191
|
-
@component.service
|
195
|
+
@component.service << OpenStruct.new(:name => service_name, :service_command => File.read(service_file).chomp)
|
192
196
|
# Return here because there is no file to install, just a string read in
|
193
197
|
return
|
194
198
|
when "windows"
|
195
|
-
@component.service
|
199
|
+
@component.service << OpenStruct.new(\
|
196
200
|
:bindir_id => "#{service_name.gsub(/[^A-Za-z0-9]/, '').upcase}BINDIR", \
|
197
201
|
:service_file => service_file, \
|
198
202
|
:component_group_id => "#{service_name.gsub(/[^A-Za-z0-9]/, '')}Component"\
|
@@ -200,13 +204,13 @@ class Vanagon
|
|
200
204
|
# return here as we are just collecting the name of the service file to put into the harvest filter list.
|
201
205
|
return
|
202
206
|
else
|
203
|
-
fail "Don't know how to install the #{
|
207
|
+
fail "Don't know how to install the #{init_system}. Please teach #install_service how to do this."
|
204
208
|
end
|
205
209
|
|
206
210
|
# Install the service and default files
|
207
|
-
if link_target
|
208
|
-
install_file(service_file, link_target, mode: target_mode)
|
209
|
-
link link_target, target_service_file
|
211
|
+
if options[:link_target]
|
212
|
+
install_file(service_file, options[:link_target], mode: target_mode)
|
213
|
+
link options[:link_target], target_service_file
|
210
214
|
else
|
211
215
|
install_file(service_file, target_service_file, mode: target_mode)
|
212
216
|
end
|
@@ -217,7 +221,7 @@ class Vanagon
|
|
217
221
|
end
|
218
222
|
|
219
223
|
# Register the service for use in packaging
|
220
|
-
@component.service
|
224
|
+
@component.service << OpenStruct.new(:name => service_name, :service_file => target_service_file, :type => options[:service_type])
|
221
225
|
end
|
222
226
|
|
223
227
|
# Copies a file from source to target during the install phase of the component
|
data/lib/vanagon/platform.rb
CHANGED
@@ -32,6 +32,9 @@ class Vanagon
|
|
32
32
|
# Where does a given platform expect to find init scripts/service files?
|
33
33
|
# e.g. /etc/init.d, /usr/lib/systemd/system
|
34
34
|
attr_accessor :servicedir
|
35
|
+
# Array of OpenStructs containing the servicetype and the corresponding
|
36
|
+
# servicedir
|
37
|
+
attr_accessor :servicetypes
|
35
38
|
# Where does a given platform's init system expect to find
|
36
39
|
# something resembling 'defaults' files. Most likely to apply
|
37
40
|
# to Linux systems that use SysV-ish, upstart, or systemd init systems.
|
@@ -239,6 +242,7 @@ class Vanagon
|
|
239
242
|
# Our first attempt at defining metadata about a platform
|
240
243
|
@cross_compiled ||= false
|
241
244
|
@valid_operators ||= ['<', '>', '<=', '>=', '=']
|
245
|
+
@servicetypes = []
|
242
246
|
end
|
243
247
|
|
244
248
|
def shell # rubocop:disable Lint/DuplicateMethods
|
@@ -530,5 +534,33 @@ class Vanagon
|
|
530
534
|
def validate_operator(operator_string)
|
531
535
|
valid_operators.include?(operator_string)
|
532
536
|
end
|
537
|
+
|
538
|
+
# Get all configured service types (added through plat.servicetype)
|
539
|
+
# @return array of service types, empty array if none have been configured
|
540
|
+
def get_service_types
|
541
|
+
if @servicetypes.any?
|
542
|
+
@servicetypes.flat_map(&:servicetype).compact
|
543
|
+
elsif @servicetype
|
544
|
+
[@servicetype]
|
545
|
+
else
|
546
|
+
[]
|
547
|
+
end
|
548
|
+
end
|
549
|
+
|
550
|
+
# Get configured service dir (added through plat.servicedir, or plat.servicetype 'foo', servicedir: 'bar')
|
551
|
+
# @param servicetype the service type you want the service dir for (optional)
|
552
|
+
# @raises VanagonError if more than one service dir is found
|
553
|
+
def get_service_dir(servicetype = '')
|
554
|
+
if @servicetypes.empty?
|
555
|
+
return @servicedir
|
556
|
+
end
|
557
|
+
servicedir = @servicetypes.select { |s| s.servicetype.include?(servicetype) }.flat_map(&:servicedir).compact
|
558
|
+
|
559
|
+
if servicedir.size > 1
|
560
|
+
raise Vanagon::Error, "You can only have one service dir for each service type. Found '#{servicedir.join(',')}' for service type #{servicetype}"
|
561
|
+
end
|
562
|
+
|
563
|
+
servicedir.first
|
564
|
+
end
|
533
565
|
end
|
534
566
|
end
|
data/lib/vanagon/platform/dsl.rb
CHANGED
@@ -9,6 +9,7 @@ require 'vanagon/platform/solaris_10'
|
|
9
9
|
require 'vanagon/platform/solaris_11'
|
10
10
|
require 'vanagon/platform/windows'
|
11
11
|
require 'securerandom'
|
12
|
+
require 'ostruct'
|
12
13
|
require 'uri'
|
13
14
|
|
14
15
|
class Vanagon
|
@@ -218,6 +219,11 @@ class Vanagon
|
|
218
219
|
# @param dir [String] Directory where service files live on the platform
|
219
220
|
def servicedir(dir)
|
220
221
|
@platform.servicedir = dir
|
222
|
+
|
223
|
+
# Add to the servicetypes array if we haven't already
|
224
|
+
if @platform.servicetype && @platform.servicedir && @platform.servicetypes.select { |s| s.servicetype == @platform.servicetype }.empty?
|
225
|
+
@platform.servicetypes << OpenStruct.new(:servicetype => @platform.servicetype, :servicedir => @platform.servicedir)
|
226
|
+
end
|
221
227
|
end
|
222
228
|
|
223
229
|
# Set the directory where default or sysconfig files live for the platform
|
@@ -230,8 +236,18 @@ class Vanagon
|
|
230
236
|
# Set the servicetype for the platform so that services can be installed correctly.
|
231
237
|
#
|
232
238
|
# @param type [String] service type for the platform ('sysv' for example)
|
233
|
-
|
234
|
-
|
239
|
+
# @param servicedir [String] service dir for this platform and service type ('/etc/init.d' for example). Optional.
|
240
|
+
def servicetype(type, servicedir: nil) # rubocop:disable Metrics/AbcSize
|
241
|
+
if servicedir
|
242
|
+
@platform.servicetypes << OpenStruct.new(:servicetype => type, :servicedir => servicedir)
|
243
|
+
else
|
244
|
+
@platform.servicetype = type
|
245
|
+
end
|
246
|
+
|
247
|
+
# Add to the servicetypes array if we haven't already
|
248
|
+
if @platform.servicetype && @platform.servicedir && @platform.servicetypes.select { |s| s.servicetype == @platform.servicetype }.empty?
|
249
|
+
@platform.servicetypes << OpenStruct.new(:servicetype => @platform.servicetype, :servicedir => @platform.servicedir)
|
250
|
+
end
|
235
251
|
end
|
236
252
|
|
237
253
|
# Set the list of possible host to perform a build on (when not using
|
data/lib/vanagon/project.rb
CHANGED
@@ -289,10 +289,14 @@ class Vanagon
|
|
289
289
|
# will return nil
|
290
290
|
#
|
291
291
|
# @param [string] name of service to grab
|
292
|
-
# @return [@component.service obj] specific service
|
292
|
+
# @return [@component.service obj] specific service, or array of services
|
293
|
+
# if there's more than one
|
293
294
|
def get_service(name)
|
294
295
|
components.each do |component|
|
295
296
|
if component.name == name
|
297
|
+
if component.service.size == 1
|
298
|
+
return component.service.first
|
299
|
+
end
|
296
300
|
return component.service
|
297
301
|
end
|
298
302
|
end
|
data/resources/deb/postinst.erb
CHANGED
@@ -2,18 +2,23 @@
|
|
2
2
|
<%- get_services.each do |service| -%>
|
3
3
|
# switch based on systemd vs systemv
|
4
4
|
#
|
5
|
-
<%- if
|
6
|
-
if [ -
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
<%- if service.init_system.nil? || service.init_system.eq?('systemd') -%>
|
6
|
+
if [ -d '/run/systemd/system' ] ; then
|
7
|
+
if [ -z "$2" ]; then
|
8
|
+
systemctl enable <%= service.name %>.service >/dev/null || :
|
9
|
+
else
|
10
|
+
systemctl try-restart <%= service.name %>.service >/dev/null || :
|
11
|
+
fi
|
10
12
|
fi
|
11
|
-
<%-
|
12
|
-
if
|
13
|
-
|
13
|
+
<%- end -%>
|
14
|
+
<%- if service.init_system.nil? || service.init_system.eq?('sysv') -%>
|
15
|
+
if [ ! -d '/run/systemd/system' ] ; then
|
16
|
+
if [ -x "<%= service.service_file %>" ]; then
|
17
|
+
update-rc.d <%= service.name %> defaults > /dev/null
|
14
18
|
|
15
|
-
|
16
|
-
|
19
|
+
if [ -n "$2" ]; then
|
20
|
+
invoke-rc.d <%= service.name %> condrestart || true
|
21
|
+
fi
|
17
22
|
fi
|
18
23
|
fi
|
19
24
|
<%- end -%>
|
@@ -27,17 +32,17 @@ fi
|
|
27
32
|
|
28
33
|
# Set up any specific permissions needed...
|
29
34
|
<%- (get_directories + get_configfiles + get_files).select { |pathname| pathname.has_overrides? }.uniq.each do |file_or_directory| -%>
|
30
|
-
<%= "chmod '#{file_or_directory.mode}' '#{file_or_directory.path}'" if file_or_directory.mode %>
|
35
|
+
<%= "chmod '#{file_or_directory.mode}' '#{file_or_directory.path}' &>/dev/null ||:" if file_or_directory.mode %>
|
31
36
|
<%- if file_or_directory.owner -%>
|
32
37
|
if getent passwd '<%= file_or_directory.owner %>' &> /dev/null; then
|
33
|
-
chown '<%= file_or_directory.owner %>' '<%= file_or_directory.path %>'
|
38
|
+
chown '<%= file_or_directory.owner %>' '<%= file_or_directory.path %>' &>/dev/null ||:
|
34
39
|
else
|
35
40
|
echo "Error updating '<%= file_or_directory.path %>': user '<%= file_or_directory.owner %>' does not exist."
|
36
41
|
fi
|
37
42
|
<%- end -%>
|
38
43
|
<%- if file_or_directory.group -%>
|
39
44
|
if getent group '<%= file_or_directory.group %>' &> /dev/null; then
|
40
|
-
chgrp '<%= file_or_directory.group %>' '<%= file_or_directory.path %>'
|
45
|
+
chgrp '<%= file_or_directory.group %>' '<%= file_or_directory.path %>' &>/dev/null ||:
|
41
46
|
else
|
42
47
|
echo "Error updating '<%= file_or_directory.path %>': group '<%= file_or_directory.group %>' does not exist."
|
43
48
|
fi
|
data/resources/deb/postrm.erb
CHANGED
@@ -13,11 +13,11 @@ fi
|
|
13
13
|
<%- get_services.each do |service| -%>
|
14
14
|
# switch based on systemd vs systemv
|
15
15
|
#
|
16
|
-
|
17
|
-
systemctl daemon-reload >/dev/null 2>&1 || :
|
18
|
-
|
19
|
-
if [ "$1" = "purge" ] ; then
|
20
|
-
|
16
|
+
if [ -d '/run/systemd/system' ] ; then
|
17
|
+
systemctl daemon-reload >/dev/null 2>&1 || :
|
18
|
+
else
|
19
|
+
if [ "$1" = "purge" ] ; then
|
20
|
+
update-rc.d <%= service.name %> remove > /dev/null
|
21
|
+
fi
|
21
22
|
fi
|
22
|
-
<%- end -%>
|
23
23
|
<%- end -%>
|
data/resources/deb/prerm.erb
CHANGED
@@ -13,15 +13,19 @@ fi
|
|
13
13
|
<%- get_services.each do |service| -%>
|
14
14
|
# switch based on systemd vs systemv
|
15
15
|
#
|
16
|
-
<%- if
|
17
|
-
if [
|
18
|
-
|
19
|
-
|
16
|
+
<%- if service.init_system.nil? || service.init_system.eq?('systemd') -%>
|
17
|
+
if [ -d '/run/systemd/system' ] ; then
|
18
|
+
if [ "$1" = remove ]; then
|
19
|
+
systemctl --no-reload disable <%= service.name %>.service > /dev/null 2>&1 || :
|
20
|
+
systemctl stop <%= service.name %>.service > /dev/null 2>&1 || :
|
21
|
+
fi
|
20
22
|
fi
|
21
|
-
|
22
|
-
<%-
|
23
|
-
if [ -
|
24
|
-
|
23
|
+
<%- end -%>
|
24
|
+
<%- if service.init_system.nil? || service.init_system.eq?('sysv') -%>
|
25
|
+
if [ ! -d '/run/systemd/system' ] ; then
|
26
|
+
if [ -x "<%= service.service_file %>" ] && [ "$1" = remove ]; then
|
27
|
+
invoke-rc.d <%= service.name %> stop || true
|
28
|
+
fi
|
25
29
|
fi
|
26
30
|
<%- end -%>
|
27
31
|
<%- end -%>
|
@@ -76,7 +76,7 @@ Requires(post): /bin/touch
|
|
76
76
|
<%- end -%>
|
77
77
|
|
78
78
|
<%- if has_services? -%>
|
79
|
-
<%- if @platform.
|
79
|
+
<%- if @platform.get_service_types.include?("systemd") -%>
|
80
80
|
<%- if @platform.is_sles? -%>
|
81
81
|
BuildRequires: systemd
|
82
82
|
%{?systemd_requires}
|
@@ -86,7 +86,7 @@ Requires(post): systemd
|
|
86
86
|
Requires(preun): systemd
|
87
87
|
Requires(postun): systemd
|
88
88
|
<%- end -%>
|
89
|
-
<%- elsif @platform.
|
89
|
+
<%- elsif @platform.get_service_types.include?("sysv") -%>
|
90
90
|
<%- if @platform.is_sles? -%>
|
91
91
|
Requires: aaa_base
|
92
92
|
<%- elsif @platform.is_linux? -%>
|
@@ -230,15 +230,15 @@ fi
|
|
230
230
|
<%- get_services.each do |service| -%>
|
231
231
|
# switch based on systemd vs systemv vs smf vs aix
|
232
232
|
#
|
233
|
-
<%- if @platform.
|
233
|
+
<%- if @platform.get_service_types.include?("systemd") -%>
|
234
234
|
<%- if @platform.is_sles? -%>
|
235
235
|
%service_add_post <%= service.name %>.service
|
236
236
|
<%- else -%>
|
237
237
|
%systemd_post <%= service.name %>.service
|
238
238
|
<%- end -%>
|
239
|
-
<%- elsif @platform.
|
239
|
+
<%- elsif @platform.get_service_types.include?("sysv") -%>
|
240
240
|
chkconfig --add <%= service.name %> >/dev/null 2>&1 || :
|
241
|
-
<%- elsif @platform.
|
241
|
+
<%- elsif @platform.get_service_types.include?("aix") -%>
|
242
242
|
if /usr/bin/lssrc -s <%= service.name -%> > /dev/null 2>&1; then
|
243
243
|
/usr/bin/chssys -s <%= service.name -%> -p <%= service.service_command -%> -w 7 -S -n 15 -f 9 > /dev/null 2>&1 || :
|
244
244
|
else
|
@@ -279,17 +279,17 @@ fi
|
|
279
279
|
<%- get_services.each do |service| -%>
|
280
280
|
# switch based on systemd vs systemv vs smf vs aix
|
281
281
|
#
|
282
|
-
<%- if @platform.
|
282
|
+
<%- if @platform.get_service_types.include?("systemd") -%>
|
283
283
|
<%- if @platform.is_sles? -%>
|
284
284
|
%service_del_postun <%= service.name %>.service
|
285
285
|
<%- else -%>
|
286
286
|
%systemd_postun_with_restart <%= service.name %>.service
|
287
287
|
<%- end -%>
|
288
|
-
<%- elsif @platform.
|
288
|
+
<%- elsif @platform.get_service_types.include?("sysv") -%>
|
289
289
|
if [ "$1" -eq 1 ]; then
|
290
290
|
/sbin/service <%= service.name %> condrestart || :
|
291
291
|
fi
|
292
|
-
<%- elsif @platform.
|
292
|
+
<%- elsif @platform.get_service_types.include?("aix") -%>
|
293
293
|
if [ "$1" -eq 0 ]; then
|
294
294
|
/usr/bin/rmssys -s <%= service.name -%> > /dev/null 2>&1 || :
|
295
295
|
/usr/sbin/rmitab <%= service.name -%> > /dev/null 2>&1 || :
|
@@ -310,18 +310,18 @@ if [ "$1" -eq 0 ] ; then
|
|
310
310
|
fi
|
311
311
|
|
312
312
|
<%- get_services.each do |service| -%>
|
313
|
-
<%- if @platform.
|
313
|
+
<%- if @platform.get_service_types.include?("systemd") -%>
|
314
314
|
<%- if @platform.is_sles? -%>
|
315
315
|
%service_del_preun <%= service.name %>.service
|
316
316
|
<%- else -%>
|
317
317
|
%systemd_preun <%= service.name %>.service
|
318
318
|
<%- end -%>
|
319
|
-
<%- elsif @platform.
|
319
|
+
<%- elsif @platform.get_service_types.include?("sysv") -%>
|
320
320
|
if [ "$1" -eq 0 ]; then
|
321
321
|
/sbin/service <%= service.name %> stop >/dev/null 2>&1 || :
|
322
322
|
chkconfig --del <%= service.name %> || :
|
323
323
|
fi
|
324
|
-
<%- elsif @platform.
|
324
|
+
<%- elsif @platform.get_service_types.include?("aix") -%>
|
325
325
|
# stop the service only on a real uninstall, not on upgrades
|
326
326
|
if [ "$1" -eq 0 ] ; then
|
327
327
|
/usr/bin/stopsrc -s <%= service.name -%> > /dev/null 2>&1 || :
|
@@ -33,6 +33,16 @@ end" }
|
|
33
33
|
plat._platform
|
34
34
|
}
|
35
35
|
|
36
|
+
let (:dummy_platform_sysv_or_systemd) {
|
37
|
+
plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
|
38
|
+
plat.instance_eval("platform 'debian-8-x86_64' do |plat|
|
39
|
+
plat.servicetype 'sysv', servicedir: '/etc/init.d'
|
40
|
+
plat.servicetype 'systemd', servicedir: '/usr/lib/systemd/system'
|
41
|
+
plat.defaultdir '/etc/default'
|
42
|
+
end")
|
43
|
+
plat._platform
|
44
|
+
}
|
45
|
+
|
36
46
|
let (:dummy_platform_smf) {
|
37
47
|
plat = Vanagon::Platform::DSL.new('debian-11-i386')
|
38
48
|
plat.instance_eval("platform 'debian-11-i386' do |plat|
|
@@ -567,15 +577,15 @@ end" }
|
|
567
577
|
expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test', mode: '0755'))
|
568
578
|
|
569
579
|
# The component should now have a service registered
|
570
|
-
expect(comp._component.service.name).to
|
580
|
+
expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
|
571
581
|
end
|
572
582
|
|
573
583
|
it 'reads from a file when the OS is AIX for services' do
|
574
584
|
comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_aix)
|
575
585
|
comp.install_service('spec/fixtures/component/mcollective.service', nil, 'mcollective')
|
576
|
-
expect(comp._component.service.name).to
|
577
|
-
expect(comp._component.service.service_command).to include('/opt/puppetlabs/puppet/bin/ruby')
|
578
|
-
expect(comp._component.service.service_command).not_to include("\n")
|
586
|
+
expect(comp._component.service.flat_map(&:name).compact).to include('mcollective')
|
587
|
+
expect(comp._component.service.flat_map(&:service_command).compact.first).to include('/opt/puppetlabs/puppet/bin/ruby')
|
588
|
+
expect(comp._component.service.flat_map(&:service_command).compact.first).not_to include("\n")
|
579
589
|
end
|
580
590
|
|
581
591
|
it 'adds the correct command to the install for the component for systemd platforms' do
|
@@ -594,7 +604,34 @@ end" }
|
|
594
604
|
expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/usr/lib/systemd/system/service-test.service', mode: '0644'))
|
595
605
|
|
596
606
|
# The component should now have a service registered
|
597
|
-
expect(comp._component.service.name).to
|
607
|
+
expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
|
608
|
+
end
|
609
|
+
|
610
|
+
it 'adds the correct command when installing both systemd and sysv' do
|
611
|
+
comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_sysv_or_systemd)
|
612
|
+
comp.install_service('component-client.init', 'component-client.sysconfig', init_system: 'sysv')
|
613
|
+
comp.install_service('component-client.service', 'component-client.sysconfig', init_system: 'systemd')
|
614
|
+
# Look for servicedir creation and copy - sysv
|
615
|
+
expect(comp._component.install).to include("install -d '/etc/init.d'")
|
616
|
+
expect(comp._component.install).to include("cp -p 'component-client.init' '/etc/init.d/service-test'")
|
617
|
+
|
618
|
+
# Look for servicedir creation and copy - systemd
|
619
|
+
expect(comp._component.install).to include("install -d '/usr/lib/systemd/system'")
|
620
|
+
expect(comp._component.install).to include("cp -p 'component-client.service' '/usr/lib/systemd/system/service-test.service'")
|
621
|
+
|
622
|
+
# Look for defaultdir creation and copy
|
623
|
+
expect(comp._component.install).to include("install -d '/etc/default'")
|
624
|
+
expect(comp._component.install).to include("cp -p 'component-client.sysconfig' '/etc/default/service-test'")
|
625
|
+
|
626
|
+
# Look for files and configfiles - sysv
|
627
|
+
expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('/etc/default/service-test'))
|
628
|
+
expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test', mode: '0755'))
|
629
|
+
|
630
|
+
# Look for files and configfiles - systemd
|
631
|
+
expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/usr/lib/systemd/system/service-test.service', mode: '0644'))
|
632
|
+
|
633
|
+
# The component should now have a service registered
|
634
|
+
expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
|
598
635
|
end
|
599
636
|
|
600
637
|
it 'adds the correct command to the install for smf services using a service_type' do
|
@@ -613,7 +650,7 @@ end" }
|
|
613
650
|
expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/var/svc/manifest/network/service-test.xml', mode: '0644'))
|
614
651
|
|
615
652
|
# The component should now have a service registered
|
616
|
-
expect(comp._component.service.name).to
|
653
|
+
expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
|
617
654
|
end
|
618
655
|
|
619
656
|
it 'adds the correct command to the install for smf services' do
|
@@ -632,7 +669,7 @@ end" }
|
|
632
669
|
expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/var/svc/manifest/service-test.xml', mode: '0644'))
|
633
670
|
|
634
671
|
# The component should now have a service registered
|
635
|
-
expect(comp._component.service.name).to
|
672
|
+
expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
|
636
673
|
end
|
637
674
|
|
638
675
|
it 'installs the file as a link when link_target is specified' do
|
@@ -653,7 +690,7 @@ end" }
|
|
653
690
|
expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test'))
|
654
691
|
|
655
692
|
# The component should now have a service registered
|
656
|
-
expect(comp._component.service.name).to
|
693
|
+
expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
|
657
694
|
end
|
658
695
|
end
|
659
696
|
|
@@ -1,6 +1,33 @@
|
|
1
1
|
require 'vanagon/platform'
|
2
2
|
|
3
3
|
describe "Vanagon::Platform" do
|
4
|
+
let(:deb_platform_just_servicedir) { "platform 'debian-test-fixture' do |plat|
|
5
|
+
plat.servicedir '/etc/init.d'
|
6
|
+
end
|
7
|
+
"}
|
8
|
+
let(:deb_platform_just_servicetype) { "platform 'debian-test-fixture' do |plat|
|
9
|
+
plat.servicetype 'sysv'
|
10
|
+
end
|
11
|
+
"}
|
12
|
+
let(:deb_platform_multi_servicetypes) { "platform 'debian-test-fixture' do |plat|
|
13
|
+
plat.servicetype 'sysv', servicedir: '/etc/init.d'
|
14
|
+
plat.servicetype 'systemd', servicedir: '/lib/systemd/system'
|
15
|
+
end
|
16
|
+
"}
|
17
|
+
let(:deb_platform_no_service) { "platform 'debian-test-fixture' do |plat|
|
18
|
+
end
|
19
|
+
"}
|
20
|
+
let(:deb_platform_servicetype) { "platform 'debian-test-fixture' do |plat|
|
21
|
+
plat.servicetype 'sysv'
|
22
|
+
plat.servicedir '/etc/init.d'
|
23
|
+
end
|
24
|
+
"}
|
25
|
+
let(:deb_platform_bad_servicedir_block) { "platform 'debian-test-fixture' do |plat|
|
26
|
+
plat.servicetype 'sysv', servicedir: '/etc/init.d'
|
27
|
+
plat.servicetype 'sysv', servicedir: '/etc/rc.d'
|
28
|
+
end
|
29
|
+
"}
|
30
|
+
|
4
31
|
let(:platforms) do
|
5
32
|
[
|
6
33
|
{
|
@@ -172,4 +199,57 @@ describe "Vanagon::Platform" do
|
|
172
199
|
end
|
173
200
|
end
|
174
201
|
end
|
202
|
+
|
203
|
+
describe "#get_service_type" do
|
204
|
+
it "returns plat.servicetype if that's the only thing set" do
|
205
|
+
plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
|
206
|
+
plat.instance_eval(deb_platform_just_servicetype)
|
207
|
+
expect(plat._platform.get_service_types).to include('sysv')
|
208
|
+
end
|
209
|
+
|
210
|
+
it "returns from servicetypes if that's set" do
|
211
|
+
plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
|
212
|
+
plat.instance_eval(deb_platform_servicetype)
|
213
|
+
expect(plat._platform.get_service_types).to include('sysv')
|
214
|
+
end
|
215
|
+
|
216
|
+
it "returns multiples if there's more than one" do
|
217
|
+
plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
|
218
|
+
plat.instance_eval(deb_platform_multi_servicetypes)
|
219
|
+
expect(plat._platform.get_service_types).to include('sysv')
|
220
|
+
expect(plat._platform.get_service_types).to include('systemd')
|
221
|
+
end
|
222
|
+
|
223
|
+
it "returns an empty array if nothing is set" do
|
224
|
+
plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
|
225
|
+
plat.instance_eval(deb_platform_no_service)
|
226
|
+
expect(plat._platform.get_service_types.size).to eq(0)
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
describe "#get_service_dir" do
|
231
|
+
it "returns plat.servicedir if that's the only thing set" do
|
232
|
+
plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
|
233
|
+
plat.instance_eval(deb_platform_just_servicedir)
|
234
|
+
expect(plat._platform.get_service_dir).to eq('/etc/init.d')
|
235
|
+
end
|
236
|
+
|
237
|
+
it "returns servicedirs set via servicetype" do
|
238
|
+
plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
|
239
|
+
plat.instance_eval(deb_platform_servicetype)
|
240
|
+
expect(plat._platform.get_service_dir).to eq('/etc/init.d')
|
241
|
+
end
|
242
|
+
|
243
|
+
it "returns the servicedir based on servicetype" do
|
244
|
+
plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
|
245
|
+
plat.instance_eval(deb_platform_multi_servicetypes)
|
246
|
+
expect(plat._platform.get_service_dir('systemd')).to eq('/lib/systemd/system')
|
247
|
+
end
|
248
|
+
|
249
|
+
it "fails if there are >1 servicedir for a service type" do
|
250
|
+
plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
|
251
|
+
plat.instance_eval(deb_platform_bad_servicedir_block)
|
252
|
+
expect { plat._platform.get_service_dir('sysv') }.to raise_error(Vanagon::Error)
|
253
|
+
end
|
254
|
+
end
|
175
255
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vanagon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.15.
|
4
|
+
version: 0.15.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppet Labs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: git
|
@@ -264,41 +264,41 @@ signing_key:
|
|
264
264
|
specification_version: 3
|
265
265
|
summary: All of your packages will fit into this van with this one simple trick.
|
266
266
|
test_files:
|
267
|
-
- spec/lib/
|
268
|
-
- spec/lib/
|
269
|
-
- spec/lib/vanagon/
|
270
|
-
- spec/lib/vanagon/
|
271
|
-
- spec/lib/vanagon/
|
272
|
-
- spec/lib/vanagon/
|
273
|
-
- spec/lib/vanagon/platform/solaris_11_spec.rb
|
274
|
-
- spec/lib/vanagon/platform/solaris_10_spec.rb
|
275
|
-
- spec/lib/vanagon/platform/dsl_spec.rb
|
276
|
-
- spec/lib/vanagon/platform/osx_spec.rb
|
277
|
-
- spec/lib/vanagon/platform/deb_spec.rb
|
278
|
-
- spec/lib/vanagon/platform/rpm_spec.rb
|
279
|
-
- spec/lib/vanagon/platform/rpm/aix_spec.rb
|
280
|
-
- spec/lib/vanagon/component/source/rewrite_spec.rb
|
267
|
+
- spec/lib/git/rev_list_spec.rb
|
268
|
+
- spec/lib/makefile_spec.rb
|
269
|
+
- spec/lib/vanagon/common/pathname_spec.rb
|
270
|
+
- spec/lib/vanagon/common/user_spec.rb
|
271
|
+
- spec/lib/vanagon/component/dsl_spec.rb
|
272
|
+
- spec/lib/vanagon/component/rules_spec.rb
|
281
273
|
- spec/lib/vanagon/component/source/git_spec.rb
|
282
|
-
- spec/lib/vanagon/component/source/local_spec.rb
|
283
274
|
- spec/lib/vanagon/component/source/http_spec.rb
|
284
|
-
- spec/lib/vanagon/component/
|
275
|
+
- spec/lib/vanagon/component/source/local_spec.rb
|
276
|
+
- spec/lib/vanagon/component/source/rewrite_spec.rb
|
285
277
|
- spec/lib/vanagon/component/source_spec.rb
|
286
|
-
- spec/lib/vanagon/
|
287
|
-
- spec/lib/vanagon/
|
288
|
-
- spec/lib/vanagon/extensions/set/json_spec.rb
|
289
|
-
- spec/lib/vanagon/extensions/ostruct/json_spec.rb
|
290
|
-
- spec/lib/vanagon/project/dsl_spec.rb
|
291
|
-
- spec/lib/vanagon/utilities/shell_utilities_spec.rb
|
292
|
-
- spec/lib/vanagon/utilities_spec.rb
|
293
|
-
- spec/lib/vanagon/common/pathname_spec.rb
|
294
|
-
- spec/lib/vanagon/common/user_spec.rb
|
295
|
-
- spec/lib/vanagon/platform_spec.rb
|
278
|
+
- spec/lib/vanagon/component_spec.rb
|
279
|
+
- spec/lib/vanagon/driver_spec.rb
|
296
280
|
- spec/lib/vanagon/engine/always_be_scheduling_spec.rb
|
281
|
+
- spec/lib/vanagon/engine/base_spec.rb
|
297
282
|
- spec/lib/vanagon/engine/docker_spec.rb
|
298
283
|
- spec/lib/vanagon/engine/ec2_spec.rb
|
299
284
|
- spec/lib/vanagon/engine/hardware_spec.rb
|
300
285
|
- spec/lib/vanagon/engine/local_spec.rb
|
301
|
-
- spec/lib/vanagon/engine/base_spec.rb
|
302
286
|
- spec/lib/vanagon/engine/pooler_spec.rb
|
303
|
-
- spec/lib/
|
304
|
-
- spec/lib/
|
287
|
+
- spec/lib/vanagon/environment_spec.rb
|
288
|
+
- spec/lib/vanagon/extensions/ostruct/json_spec.rb
|
289
|
+
- spec/lib/vanagon/extensions/set/json_spec.rb
|
290
|
+
- spec/lib/vanagon/extensions/string_spec.rb
|
291
|
+
- spec/lib/vanagon/optparse_spec.rb
|
292
|
+
- spec/lib/vanagon/platform/deb_spec.rb
|
293
|
+
- spec/lib/vanagon/platform/dsl_spec.rb
|
294
|
+
- spec/lib/vanagon/platform/osx_spec.rb
|
295
|
+
- spec/lib/vanagon/platform/rpm/aix_spec.rb
|
296
|
+
- spec/lib/vanagon/platform/rpm_spec.rb
|
297
|
+
- spec/lib/vanagon/platform/solaris_10_spec.rb
|
298
|
+
- spec/lib/vanagon/platform/solaris_11_spec.rb
|
299
|
+
- spec/lib/vanagon/platform/windows_spec.rb
|
300
|
+
- spec/lib/vanagon/platform_spec.rb
|
301
|
+
- spec/lib/vanagon/project/dsl_spec.rb
|
302
|
+
- spec/lib/vanagon/project_spec.rb
|
303
|
+
- spec/lib/vanagon/utilities/shell_utilities_spec.rb
|
304
|
+
- spec/lib/vanagon/utilities_spec.rb
|