vanagon 0.18.1 → 0.21.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -2
  3. data/bin/build +3 -1
  4. data/bin/build_host_info +3 -1
  5. data/bin/build_requirements +3 -1
  6. data/bin/inspect +3 -1
  7. data/bin/render +3 -1
  8. data/bin/repo +3 -1
  9. data/bin/ship +3 -1
  10. data/bin/sign +3 -1
  11. data/lib/vanagon/cli.rb +4 -2
  12. data/lib/vanagon/cli/build.rb +2 -1
  13. data/lib/vanagon/cli/build_host_info.rb +3 -2
  14. data/lib/vanagon/cli/build_requirements.rb +4 -4
  15. data/lib/vanagon/cli/completion.rb +4 -3
  16. data/lib/vanagon/cli/inspect.rb +3 -2
  17. data/lib/vanagon/cli/list.rb +16 -6
  18. data/lib/vanagon/cli/render.rb +2 -1
  19. data/lib/vanagon/cli/ship.rb +4 -19
  20. data/lib/vanagon/cli/sign.rb +3 -2
  21. data/lib/vanagon/component.rb +13 -10
  22. data/lib/vanagon/component/dsl.rb +27 -20
  23. data/lib/vanagon/component/source.rb +2 -1
  24. data/lib/vanagon/component/source/git.rb +35 -10
  25. data/lib/vanagon/component/source/http.rb +3 -2
  26. data/lib/vanagon/component/source/local.rb +2 -1
  27. data/lib/vanagon/component/source/rewrite.rb +3 -2
  28. data/lib/vanagon/driver.rb +20 -23
  29. data/lib/vanagon/engine/always_be_scheduling.rb +12 -11
  30. data/lib/vanagon/engine/docker.rb +2 -1
  31. data/lib/vanagon/engine/ec2.rb +5 -4
  32. data/lib/vanagon/engine/hardware.rb +4 -3
  33. data/lib/vanagon/engine/pooler.rb +6 -5
  34. data/lib/vanagon/environment.rb +3 -2
  35. data/lib/vanagon/logger.rb +31 -0
  36. data/lib/vanagon/platform.rb +38 -5
  37. data/lib/vanagon/platform/defaults/debian-10-amd64.rb +11 -0
  38. data/lib/vanagon/platform/defaults/debian-8-amd64.rb +12 -0
  39. data/lib/vanagon/platform/defaults/debian-8-i386.rb +12 -0
  40. data/lib/vanagon/platform/defaults/debian-9-amd64.rb +12 -0
  41. data/lib/vanagon/platform/defaults/debian-9-i386.rb +12 -0
  42. data/lib/vanagon/platform/defaults/el-6-i386.rb +11 -0
  43. data/lib/vanagon/platform/defaults/el-6-x86_64.rb +11 -0
  44. data/lib/vanagon/platform/defaults/el-7-aarch64.rb +13 -0
  45. data/lib/vanagon/platform/defaults/el-7-x86_64.rb +11 -0
  46. data/lib/vanagon/platform/defaults/el-8-aarch64.rb +10 -0
  47. data/lib/vanagon/platform/defaults/el-8-x86_64.rb +10 -0
  48. data/lib/vanagon/platform/defaults/fedora-30-x86_64.rb +11 -0
  49. data/lib/vanagon/platform/defaults/fedora-31-x86_64.rb +11 -0
  50. data/lib/vanagon/platform/defaults/fedora-32-x86_64.rb +11 -0
  51. data/lib/vanagon/platform/defaults/osx-10.14-x86_64.rb +22 -0
  52. data/lib/vanagon/platform/defaults/osx-10.15-x86_64.rb +21 -0
  53. data/lib/vanagon/platform/defaults/redhatfips-7-x86_64.rb +11 -0
  54. data/lib/vanagon/platform/defaults/sles-12-x86_64.rb +11 -0
  55. data/lib/vanagon/platform/defaults/sles-15-x86_64.rb +10 -0
  56. data/lib/vanagon/platform/defaults/solaris-11-i386.rb +9 -0
  57. data/lib/vanagon/platform/defaults/solaris-11-sparc.rb +10 -0
  58. data/lib/vanagon/platform/defaults/ubuntu-16.04-amd64.rb +12 -0
  59. data/lib/vanagon/platform/defaults/ubuntu-16.04-i386.rb +12 -0
  60. data/lib/vanagon/platform/defaults/ubuntu-18.04-amd64.rb +12 -0
  61. data/lib/vanagon/platform/defaults/ubuntu-20.04-aarch64.rb +11 -0
  62. data/lib/vanagon/platform/defaults/ubuntu-20.04-amd64.rb +11 -0
  63. data/lib/vanagon/platform/dsl.rb +30 -6
  64. data/lib/vanagon/platform/windows.rb +3 -1
  65. data/lib/vanagon/project.rb +25 -15
  66. data/lib/vanagon/project/dsl.rb +6 -5
  67. data/lib/vanagon/utilities.rb +5 -4
  68. data/resources/deb/control.erb +1 -1
  69. data/resources/deb/postinst.erb +24 -13
  70. data/resources/deb/postrm.erb +9 -6
  71. data/resources/deb/prerm.erb +18 -8
  72. data/resources/osx/postinstall.erb +6 -2
  73. data/resources/rpm/project.spec.erb +12 -12
  74. data/resources/solaris/10/depend.erb +2 -2
  75. data/resources/solaris/10/postinstall.erb +11 -3
  76. data/resources/solaris/11/p5m.erb +2 -2
  77. data/spec/lib/vanagon/cli_spec.rb +57 -9
  78. data/spec/lib/vanagon/component/dsl_spec.rb +54 -10
  79. data/spec/lib/vanagon/component/source/git_spec.rb +4 -4
  80. data/spec/lib/vanagon/component_spec.rb +15 -2
  81. data/spec/lib/vanagon/engine/always_be_scheduling_spec.rb +4 -4
  82. data/spec/lib/vanagon/platform_spec.rb +80 -0
  83. data/spec/lib/vanagon/utilities_spec.rb +4 -1
  84. metadata +58 -31
@@ -18,7 +18,7 @@ Breaks: <%= get_replaces.map { |replace| "#{replace.replacement} #{replace.versi
18
18
  Conflicts: <%= get_conflicts.map { |conflict| "#{conflict.pkgname} #{conflict.version ? "(#{conflict.version})" : ""}" }.join(", ") %>
19
19
  <%- end -%>
20
20
  <%- unless get_requires.empty? -%>
21
- Depends: <%= get_requires.join(", ") %>
21
+ Depends: <%= get_requires.map { |req| "#{req.requirement} #{req.version ? "(#{req.version})" : ""}" }.join(", ") %>
22
22
  <%- end -%>
23
23
  <%- unless get_provides.empty? -%>
24
24
  Provides: <%= get_provides.map { |prov| prov.provide }.join(", ") %>
@@ -2,18 +2,29 @@
2
2
  <%- get_services.each do |service| -%>
3
3
  # switch based on systemd vs systemv
4
4
  #
5
- <%- if @platform.servicetype == "systemd" -%>
6
- if [ -z "$2" ]; then
7
- systemctl enable <%= service.name %>.service >/dev/null || :
8
- else
9
- systemctl try-restart <%= service.name %>.service >/dev/null || :
5
+ <%- if service.init_system.nil? || service.init_system.eql?('systemd') -%>
6
+ if [ -f '/proc/1/comm' ]; then
7
+ init_comm=`cat /proc/1/comm`
8
+ if [ "$init_comm" = "systemd" ]; then
9
+ if [ -z "$2" ]; then
10
+ systemctl enable <%= service.name %>.service >/dev/null || :
11
+ else
12
+ systemctl try-restart <%= service.name %>.service >/dev/null || :
13
+ fi
14
+ fi
10
15
  fi
11
- <%- elsif @platform.servicetype == "sysv" -%>
12
- if [ -x "<%= service.service_file %>" ]; then
13
- update-rc.d <%= service.name %> defaults > /dev/null
16
+ <%- end -%>
17
+ <%- if service.init_system.nil? || service.init_system.eql?('sysv') -%>
18
+ if [ -f '/proc/1/comm' ]; then
19
+ init_comm=`cat /proc/1/comm`
20
+ if [ "$init_comm" = "init" ]; then
21
+ if [ -x "<%= service.service_file %>" ]; then
22
+ update-rc.d <%= service.name %> defaults > /dev/null
14
23
 
15
- if [ -n "$2" ]; then
16
- invoke-rc.d <%= service.name %> condrestart || true
24
+ if [ -n "$2" ]; then
25
+ invoke-rc.d <%= service.name %> condrestart || true
26
+ fi
27
+ fi
17
28
  fi
18
29
  fi
19
30
  <%- end -%>
@@ -27,17 +38,17 @@ fi
27
38
 
28
39
  # Set up any specific permissions needed...
29
40
  <%- (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 %>
41
+ <%= "chmod '#{file_or_directory.mode}' '#{file_or_directory.path}' &>/dev/null ||:" if file_or_directory.mode %>
31
42
  <%- if file_or_directory.owner -%>
32
43
  if getent passwd '<%= file_or_directory.owner %>' &> /dev/null; then
33
- chown '<%= file_or_directory.owner %>' '<%= file_or_directory.path %>'
44
+ chown '<%= file_or_directory.owner %>' '<%= file_or_directory.path %>' &>/dev/null ||:
34
45
  else
35
46
  echo "Error updating '<%= file_or_directory.path %>': user '<%= file_or_directory.owner %>' does not exist."
36
47
  fi
37
48
  <%- end -%>
38
49
  <%- if file_or_directory.group -%>
39
50
  if getent group '<%= file_or_directory.group %>' &> /dev/null; then
40
- chgrp '<%= file_or_directory.group %>' '<%= file_or_directory.path %>'
51
+ chgrp '<%= file_or_directory.group %>' '<%= file_or_directory.path %>' &>/dev/null ||:
41
52
  else
42
53
  echo "Error updating '<%= file_or_directory.path %>': group '<%= file_or_directory.group %>' does not exist."
43
54
  fi
@@ -13,11 +13,14 @@ fi
13
13
  <%- get_services.each do |service| -%>
14
14
  # switch based on systemd vs systemv
15
15
  #
16
- <%- if @platform.servicetype == "systemd" -%>
17
- systemctl daemon-reload >/dev/null 2>&1 || :
18
- <%- elsif @platform.servicetype == "sysv" -%>
19
- if [ "$1" = "purge" ] ; then
20
- update-rc.d <%= service.name %> remove > /dev/null
16
+ if [ -f '/proc/1/comm' ]; then
17
+ init_comm=`cat /proc/1/comm`
18
+ if [ "$init_comm" = "systemd" ]; then
19
+ systemctl daemon-reload >/dev/null 2>&1 || :
20
+ else
21
+ if [ "$1" = "purge" ] ; then
22
+ update-rc.d <%= service.name %> remove > /dev/null
23
+ fi
24
+ fi
21
25
  fi
22
- <%- end -%>
23
26
  <%- end -%>
@@ -13,15 +13,25 @@ fi
13
13
  <%- get_services.each do |service| -%>
14
14
  # switch based on systemd vs systemv
15
15
  #
16
- <%- if @platform.servicetype == "systemd" -%>
17
- if [ "$1" = remove ]; then
18
- systemctl --no-reload disable <%= service.name %>.service > /dev/null 2>&1 || :
19
- systemctl stop <%= service.name %>.service > /dev/null 2>&1 || :
16
+ <%- if service.init_system.nil? || service.init_system.eql?('systemd') -%>
17
+ if [ -f '/proc/1/comm' ]; then
18
+ init_comm=`cat /proc/1/comm`
19
+ if [ "$init_comm" = "systemd" ]; then
20
+ if [ "$1" = remove ]; then
21
+ systemctl --no-reload disable <%= service.name %>.service > /dev/null 2>&1 || :
22
+ systemctl stop <%= service.name %>.service > /dev/null 2>&1 || :
23
+ fi
24
+ fi
20
25
  fi
21
-
22
- <%- elsif @platform.servicetype == "sysv" -%>
23
- if [ -x "<%= service.service_file %>" ] && [ "$1" = remove ]; then
24
- invoke-rc.d <%= service.name %> stop || true
26
+ <%- end -%>
27
+ <%- if service.init_system.nil? || service.init_system.eql?('sysv') -%>
28
+ if [ -f '/proc/1/comm' ]; then
29
+ init_comm=`cat /proc/1/comm`
30
+ if [ "$init_comm" = "init" ]; then
31
+ if [ -x "<%= service.service_file %>" ] && [ "$1" = remove ]; then
32
+ invoke-rc.d <%= service.name %> stop || true
33
+ fi
34
+ fi
25
35
  fi
26
36
  <%- end -%>
27
37
  <%- end -%>
@@ -5,8 +5,12 @@
5
5
  <%- get_configfiles.each do |config|
6
6
  dest_file = config.path.gsub(/\.pristine$/, '') -%>
7
7
 
8
- if [ -f "<%= dest_file %>" ] && ! diff "<%= config.path %>" "<%= dest_file %>" > /dev/null; then
9
- echo "Detected file at '<%= dest_file %>'; updated file at '<%= config.path %>'."
8
+ if [ -f "<%= dest_file %>" ]; then
9
+ if diff "<%= config.path %>" "<%= dest_file %>" > /dev/null; then
10
+ rm -f "<%= config.path %>"
11
+ else
12
+ echo "Detected file at '<%= dest_file %>'; updated file at '<%= config.path %>'."
13
+ fi
10
14
  else
11
15
  mv '<%= config.path %>' '<%= dest_file %>'
12
16
  fi
@@ -77,7 +77,7 @@ Source1: file-list-for-rpm
77
77
  Autoprov: 0
78
78
  Autoreq: 0
79
79
  <%- get_requires.each do |requires| -%>
80
- Requires: <%= requires %>
80
+ Requires: <%= requires.requirement %><%= requires.version ? " #{requires.version}" : "" %>
81
81
  <%- end -%>
82
82
 
83
83
  # All rpm packages built by vanagon have the pre-/post-install script
@@ -98,7 +98,7 @@ Requires(post): /bin/touch
98
98
  <%- end -%>
99
99
 
100
100
  <%- if has_services? -%>
101
- <%- if @platform.servicetype == "systemd" -%>
101
+ <%- if @platform.get_service_types.include?("systemd") -%>
102
102
  <%- if @platform.is_sles? -%>
103
103
  BuildRequires: systemd
104
104
  %{?systemd_requires}
@@ -108,7 +108,7 @@ Requires(post): systemd
108
108
  Requires(preun): systemd
109
109
  Requires(postun): systemd
110
110
  <%- end -%>
111
- <%- elsif @platform.servicetype == "sysv" -%>
111
+ <%- elsif @platform.get_service_types.include?("sysv") -%>
112
112
  <%- if @platform.is_sles? -%>
113
113
  Requires: aaa_base
114
114
  <%- elsif @platform.is_linux? -%>
@@ -256,15 +256,15 @@ fi
256
256
  <%- get_services.each do |service| -%>
257
257
  # switch based on systemd vs systemv vs smf vs aix
258
258
  #
259
- <%- if @platform.servicetype == "systemd" -%>
259
+ <%- if @platform.get_service_types.include?("systemd") -%>
260
260
  <%- if @platform.is_sles? -%>
261
261
  %service_add_post <%= service.name %>.service
262
262
  <%- else -%>
263
263
  %systemd_post <%= service.name %>.service
264
264
  <%- end -%>
265
- <%- elsif @platform.servicetype == "sysv" -%>
265
+ <%- elsif @platform.get_service_types.include?("sysv") -%>
266
266
  chkconfig --add <%= service.name %> >/dev/null 2>&1 || :
267
- <%- elsif @platform.servicetype == "aix" -%>
267
+ <%- elsif @platform.get_service_types.include?("aix") -%>
268
268
  if /usr/bin/lssrc -s <%= service.name -%> > /dev/null 2>&1; then
269
269
  /usr/bin/chssys -s <%= service.name -%> -p <%= service.service_command -%> -w 7 -S -n 15 -f 9 > /dev/null 2>&1 || :
270
270
  else
@@ -305,17 +305,17 @@ fi
305
305
  <%- get_services.each do |service| -%>
306
306
  # switch based on systemd vs systemv vs smf vs aix
307
307
  #
308
- <%- if @platform.servicetype == "systemd" -%>
308
+ <%- if @platform.get_service_types.include?("systemd") -%>
309
309
  <%- if @platform.is_sles? -%>
310
310
  %service_del_postun <%= service.name %>.service
311
311
  <%- else -%>
312
312
  %systemd_postun_with_restart <%= service.name %>.service
313
313
  <%- end -%>
314
- <%- elsif @platform.servicetype == "sysv" -%>
314
+ <%- elsif @platform.get_service_types.include?("sysv") -%>
315
315
  if [ "$1" -eq 1 ]; then
316
316
  /sbin/service <%= service.name %> condrestart || :
317
317
  fi
318
- <%- elsif @platform.servicetype == "aix" -%>
318
+ <%- elsif @platform.get_service_types.include?("aix") -%>
319
319
  if [ "$1" -eq 0 ]; then
320
320
  /usr/bin/rmssys -s <%= service.name -%> > /dev/null 2>&1 || :
321
321
  /usr/sbin/rmitab <%= service.name -%> > /dev/null 2>&1 || :
@@ -336,18 +336,18 @@ if [ "$1" -eq 0 ] ; then
336
336
  fi
337
337
 
338
338
  <%- get_services.each do |service| -%>
339
- <%- if @platform.servicetype == "systemd" -%>
339
+ <%- if @platform.get_service_types.include?("systemd") -%>
340
340
  <%- if @platform.is_sles? -%>
341
341
  %service_del_preun <%= service.name %>.service
342
342
  <%- else -%>
343
343
  %systemd_preun <%= service.name %>.service
344
344
  <%- end -%>
345
- <%- elsif @platform.servicetype == "sysv" -%>
345
+ <%- elsif @platform.get_service_types.include?("sysv") -%>
346
346
  if [ "$1" -eq 0 ]; then
347
347
  /sbin/service <%= service.name %> stop >/dev/null 2>&1 || :
348
348
  chkconfig --del <%= service.name %> || :
349
349
  fi
350
- <%- elsif @platform.servicetype == "aix" -%>
350
+ <%- elsif @platform.get_service_types.include?("aix") -%>
351
351
  # stop the service only on a real uninstall, not on upgrades
352
352
  if [ "$1" -eq 0 ] ; then
353
353
  /usr/bin/stopsrc -s <%= service.name -%> > /dev/null 2>&1 || :
@@ -1,3 +1,3 @@
1
- <%- get_requires.each do |requirement| -%>
2
- P <%= requirement %>
1
+ <%- get_requires.each do |requires| -%>
2
+ P <%= requires.requirement %>
3
3
  <%- end -%>
@@ -9,8 +9,12 @@
9
9
  <%- get_configfiles.each do |config|
10
10
  dest_file = config.path.gsub(/\.pristine$/, '') -%>
11
11
 
12
- if [ -f "<%= dest_file %>" ] && ! diff "<%= config.path %>" "<%= dest_file %>" > /dev/null; then
13
- echo "Detected file at '<%= dest_file %>'; updated file at '<%= config.path %>'."
12
+ if [ -f "<%= dest_file %>" ]; then
13
+ if diff "<%= config.path %>" "<%= dest_file %>" > /dev/null; then
14
+ rm -f "<%= config.path %>"
15
+ else
16
+ echo "Detected file at '<%= dest_file %>'; updated file at '<%= config.path %>'."
17
+ fi
14
18
  else
15
19
  cp -pr '<%= config.path %>' '<%= dest_file %>'
16
20
  fi
@@ -19,7 +23,11 @@ fi
19
23
 
20
24
  # Set up any specific permissions needed...
21
25
  <%- (get_directories + get_configfiles + get_files).select { |pathname| pathname.has_overrides? }.uniq.each do |file_or_directory| -%>
22
- <%= "chmod '#{file_or_directory.mode}' '#{file_or_directory.path}'" if file_or_directory.mode %>
26
+ <%- if file_or_directory.mode -%>
27
+ if [ -f "<%= file_or_directory.path %>" ] || [ -d "<%= file_or_directory.path %>" ]; then
28
+ chmod '<%= file_or_directory.mode %>' '<%= file_or_directory.path %>'
29
+ fi
30
+ <%- end -%>
23
31
  <%- if file_or_directory.owner -%>
24
32
  if getent passwd '<%= file_or_directory.owner %>' &> /dev/null; then
25
33
  chown '<%= file_or_directory.owner %>' '<%= file_or_directory.path %>'
@@ -17,8 +17,8 @@ set name=variant.opensolaris.zone value=global value=nonglobal
17
17
  %>
18
18
 
19
19
  # Add any needed dependencies
20
- <%- get_requires.each do |requirement| -%>
21
- depend fmri=pkg:/<%= requirement %> type=require
20
+ <%- get_requires.each do |requires| -%>
21
+ depend fmri=pkg:/<%= requires.requirement %> type=require
22
22
  <%- end -%>
23
23
 
24
24
  # Always drop /etc, /usr, and /var, it will cause conflicts with other system packages
@@ -93,6 +93,7 @@ describe Vanagon::CLI::List do
93
93
  end
94
94
 
95
95
  describe "#run" do
96
+ let(:defaults){ ['def1', 'def2', 'def3'] }
96
97
  let(:projects){ ['foo', 'bar', 'baz'] }
97
98
  let(:platforms){ ['1', '2', '3'] }
98
99
  let(:output_both){
@@ -115,6 +116,9 @@ baz
115
116
  expect(Dir).to receive(:exist?)
116
117
  .with("#{File.join(Dir.pwd, 'configs', 'projects')}")
117
118
  .and_return(true)
119
+ expect(Dir).to receive(:children)
120
+ .with("#{File.join(Dir.pwd, 'lib', 'vanagon' ,'cli', '..', 'platform', 'defaults')}")
121
+ .and_return(defaults)
118
122
  expect(Dir).to receive(:children)
119
123
  .with("#{File.join(Dir.pwd, 'configs', 'projects')}")
120
124
  .and_return(projects)
@@ -124,28 +128,32 @@ baz
124
128
  end
125
129
  let(:options_empty) { {
126
130
  nil=>false,
127
- :configdir=>"#{Dir.pwd}/configs",
131
+ :configdir=>"#{Dir.pwd}/configs",
132
+ :defaults=>false,
128
133
  :platforms=>false,
129
134
  :projects=>false,
130
135
  :use_spaces=>false
131
136
  } }
132
137
  let(:options_platforms_only) { {
133
138
  nil=>false,
134
- :configdir=>"#{Dir.pwd}/configs",
139
+ :configdir=>"#{Dir.pwd}/configs",
140
+ :defaults=>false,
135
141
  :platforms=>true,
136
142
  :projects=>false,
137
143
  :use_spaces=>false
138
144
  } }
139
145
  let(:options_projects_only) { {
140
146
  nil=>false,
141
- :configdir=>"#{Dir.pwd}/configs",
147
+ :configdir=>"#{Dir.pwd}/configs",
148
+ :defaults=>false,
142
149
  :platforms=>false,
143
150
  :projects=>true,
144
151
  :use_spaces=>false
145
152
  } }
146
153
  let(:options_space_only) { {
147
154
  nil=>false,
148
- :configdir=>"#{Dir.pwd}/configs",
155
+ :configdir=>"#{Dir.pwd}/configs",
156
+ :defaults=>false,
149
157
  :platforms=>false,
150
158
  :projects=>false,
151
159
  :use_spaces=>true
@@ -164,7 +172,7 @@ foo bar baz
164
172
  - Platforms
165
173
  1 2 3
166
174
  "
167
- }
175
+ }
168
176
  it "outputs projects and platforms space separated" do
169
177
  expect do
170
178
  cli.run(options_space_only)
@@ -202,14 +210,19 @@ baz
202
210
  let(:options_configdir) { {
203
211
  nil=>false,
204
212
  :configdir=> '/configs',
213
+ :defaults=>false,
205
214
  :platforms=>false,
206
215
  :projects=>false,
207
- :use_spaces=>false} }
216
+ :use_spaces=>false
217
+ } }
208
218
  it "it successfully takes the configs directory" do
209
219
  expect(Dir).to receive(:exist?).with('/configs' + '/platforms')
210
220
  .and_return(true)
211
221
  expect(Dir).to receive(:exist?).with('/configs' + '/projects')
212
222
  .and_return(true)
223
+ expect(Dir).to receive(:children)
224
+ .with("#{File.join(Dir.pwd, 'lib', 'vanagon' ,'cli', '..', 'platform', 'defaults')}")
225
+ .and_return(defaults)
213
226
  expect(Dir).to receive(:children).with('/configs' + '/projects')
214
227
  .and_return(projects)
215
228
  expect(Dir).to receive(:children).with('/configs' + '/platforms')
@@ -219,8 +232,43 @@ baz
219
232
  end.to output(output_both).to_stdout
220
233
  end
221
234
  end
235
+
236
+ context "spec to determine vanagon defaults" do
237
+ let(:options_default_platforms) { {
238
+ nil=>false,
239
+ :configdir=>"#{Dir.pwd}/configs",
240
+ :defaults=>true,
241
+ :platforms=>false,
242
+ :projects=>false,
243
+ :use_spaces=>false
244
+ } }
245
+ let(:output_defaults){
246
+ "- Defaults
247
+ def1
248
+ def2
249
+ def3
250
+ "
251
+ }
252
+ it "lists the vanagon defaults" do
253
+ expect(Dir).to receive(:exist?)
254
+ .with("#{File.join(Dir.pwd, 'configs', 'platforms')}")
255
+ .and_return(true)
256
+ expect(Dir).to receive(:exist?)
257
+ .with("#{File.join(Dir.pwd, 'configs', 'projects')}")
258
+ .and_return(true)
259
+ expect(Dir).to receive(:children)
260
+ .with("#{File.join(Dir.pwd, 'lib', 'vanagon' ,'cli', '..', 'platform', 'defaults')}")
261
+ .and_return(defaults)
262
+ expect(Dir).to receive(:children)
263
+ .with("#{File.join(Dir.pwd, 'configs', 'projects')}")
264
+ .and_return(projects)
265
+ expect(Dir).to receive(:children)
266
+ .with("#{File.join(Dir.pwd, 'configs', 'platforms')}")
267
+ .and_return(platforms)
268
+ expect do
269
+ cli.run(options_default_platforms)
270
+ end.to output(output_defaults).to_stdout
271
+ end
272
+ end
222
273
  end
223
274
  end
224
-
225
-
226
-
@@ -34,6 +34,16 @@ end" }
34
34
  plat._platform
35
35
  }
36
36
 
37
+ let (:dummy_platform_sysv_or_systemd) {
38
+ plat = Vanagon::Platform::DSL.new('debian-8-x86_64')
39
+ plat.instance_eval("platform 'debian-8-x86_64' do |plat|
40
+ plat.servicetype 'sysv', servicedir: '/etc/init.d'
41
+ plat.servicetype 'systemd', servicedir: '/usr/lib/systemd/system'
42
+ plat.defaultdir '/etc/default'
43
+ end")
44
+ plat._platform
45
+ }
46
+
37
47
  let (:dummy_platform_smf) {
38
48
  plat = Vanagon::Platform::DSL.new('debian-11-i386')
39
49
  plat.instance_eval("platform 'debian-11-i386' do |plat|
@@ -313,11 +323,18 @@ end" }
313
323
  comp = Vanagon::Component::DSL.new('requires-test', {}, {})
314
324
  comp.requires('library1')
315
325
  comp.requires('library2')
316
- expect(comp._component.requires).to include('library1')
317
- expect(comp._component.requires).to include('library2')
326
+ expect(comp._component.requires.first.requirement).to include('library1')
327
+ expect(comp._component.requires.last.requirement).to include('library2')
318
328
  end
319
329
  end
320
330
 
331
+ it 'supports versioned requires' do
332
+ comp = Vanagon::Component::DSL.new('requires-test', {}, {})
333
+ comp.requires('library1', '1.2.3')
334
+ expect(comp._component.requires.first.requirement).to eq('library1')
335
+ expect(comp._component.requires.first.version).to eq('1.2.3')
336
+ end
337
+
321
338
  describe '#provides' do
322
339
  it 'adds the package provide to the list of provides' do
323
340
  comp = Vanagon::Component::DSL.new('provides-test', {}, {})
@@ -568,15 +585,15 @@ end" }
568
585
  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test', mode: '0755'))
569
586
 
570
587
  # The component should now have a service registered
571
- expect(comp._component.service.name).to eq('service-test')
588
+ expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
572
589
  end
573
590
 
574
591
  it 'reads from a file when the OS is AIX for services' do
575
592
  comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_aix)
576
593
  comp.install_service('spec/fixtures/component/mcollective.service', nil, 'mcollective')
577
- expect(comp._component.service.name).to eq('mcollective')
578
- expect(comp._component.service.service_command).to include('/opt/puppetlabs/puppet/bin/ruby')
579
- expect(comp._component.service.service_command).not_to include("\n")
594
+ expect(comp._component.service.flat_map(&:name).compact).to include('mcollective')
595
+ expect(comp._component.service.flat_map(&:service_command).compact.first).to include('/opt/puppetlabs/puppet/bin/ruby')
596
+ expect(comp._component.service.flat_map(&:service_command).compact.first).not_to include("\n")
580
597
  end
581
598
 
582
599
  it 'adds the correct command to the install for the component for systemd platforms' do
@@ -595,7 +612,34 @@ end" }
595
612
  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/usr/lib/systemd/system/service-test.service', mode: '0644'))
596
613
 
597
614
  # The component should now have a service registered
598
- expect(comp._component.service.name).to eq('service-test')
615
+ expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
616
+ end
617
+
618
+ it 'adds the correct command when installing both systemd and sysv' do
619
+ comp = Vanagon::Component::DSL.new('service-test', {}, dummy_platform_sysv_or_systemd)
620
+ comp.install_service('component-client.init', 'component-client.sysconfig', init_system: 'sysv')
621
+ comp.install_service('component-client.service', 'component-client.sysconfig', init_system: 'systemd')
622
+ # Look for servicedir creation and copy - sysv
623
+ expect(comp._component.install).to include("install -d '/etc/init.d'")
624
+ expect(comp._component.install).to include("cp -p 'component-client.init' '/etc/init.d/service-test'")
625
+
626
+ # Look for servicedir creation and copy - systemd
627
+ expect(comp._component.install).to include("install -d '/usr/lib/systemd/system'")
628
+ expect(comp._component.install).to include("cp -p 'component-client.service' '/usr/lib/systemd/system/service-test.service'")
629
+
630
+ # Look for defaultdir creation and copy
631
+ expect(comp._component.install).to include("install -d '/etc/default'")
632
+ expect(comp._component.install).to include("cp -p 'component-client.sysconfig' '/etc/default/service-test'")
633
+
634
+ # Look for files and configfiles - sysv
635
+ expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('/etc/default/service-test'))
636
+ expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test', mode: '0755'))
637
+
638
+ # Look for files and configfiles - systemd
639
+ expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/usr/lib/systemd/system/service-test.service', mode: '0644'))
640
+
641
+ # The component should now have a service registered
642
+ expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
599
643
  end
600
644
 
601
645
  it 'adds the correct command to the install for smf services using a service_type' do
@@ -614,7 +658,7 @@ end" }
614
658
  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/var/svc/manifest/network/service-test.xml', mode: '0644'))
615
659
 
616
660
  # The component should now have a service registered
617
- expect(comp._component.service.name).to eq('service-test')
661
+ expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
618
662
  end
619
663
 
620
664
  it 'adds the correct command to the install for smf services' do
@@ -633,7 +677,7 @@ end" }
633
677
  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/var/svc/manifest/service-test.xml', mode: '0644'))
634
678
 
635
679
  # The component should now have a service registered
636
- expect(comp._component.service.name).to eq('service-test')
680
+ expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
637
681
  end
638
682
 
639
683
  it 'installs the file as a link when link_target is specified' do
@@ -654,7 +698,7 @@ end" }
654
698
  expect(comp._component.files).to include(Vanagon::Common::Pathname.file('/etc/init.d/service-test'))
655
699
 
656
700
  # The component should now have a service registered
657
- expect(comp._component.service.name).to eq('service-test')
701
+ expect(comp._component.service.flat_map(&:name).compact).to include('service-test')
658
702
  end
659
703
  end
660
704