vanagon 0.9.2 → 0.9.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0c9f345fa7806fdbe0b1cf43676acd3549f10ff7
4
- data.tar.gz: d8e6a4740b1a1e914d7b788b745caea008823204
3
+ metadata.gz: 79f3affb2f2797cad077ac7341d99cc2f613dd96
4
+ data.tar.gz: 4a90613f59d7e96c9015e61ff0200404f063fb3d
5
5
  SHA512:
6
- metadata.gz: 69d1ff1c24e3c71daf49454fa9a3bcdaf5faeb4caf611c4859106828e0e4e91f18337bd41500a0a9a56693f48f7ccff49fedd585678210fc8ebe6d43768ca15a
7
- data.tar.gz: 1dd4036ebfa52ec377234567a91c9e838e01e63a262b56d480646b89b0562296cd8e3ca9d64783565b0e1f13c940636c2e276da7b1561eb348aa4f7784c02fac
6
+ metadata.gz: 0f6b28cd90a8917063035914d5a094ce123aad6991aa721df89bab0c8bd9251e9aafbe924c5253b9c1ea8a6d046fa20149870b448496d126a0d354dd7ebee925
7
+ data.tar.gz: 6bc644ee0a223cebe705c0c43d7e69cc4de66b099dc05cfb436967298d21b194b320cb9d385e7beafb9132737eedd945268a93b7b8a75b45540940fdeae3a3c2
data/README.md CHANGED
@@ -73,8 +73,13 @@ Build machines should be cleaned between builds.
73
73
  #### Flagged arguments (can be anywhere in the command)
74
74
 
75
75
  ##### -w DIR, --workdir DIR
76
- Specifies a directory where the sources should be placed and builds performed.
77
- Defaults to a temporary directory created with Ruby's Dir.mktmpdir.
76
+ Specifies a directory on the local host where the sources should be placed and builds performed.
77
+ Defaults to a temporary directory created with Ruby's `Dir.mktmpdir` method.
78
+
79
+ ##### --remote_dir
80
+ Explicitly specify a directory on the remote target to place sources and perform
81
+ builds. Components can then be rebuilt manually on the build host for faster iteration. Sources may not be correctly updated if this directory already exists.
82
+ Defaults to a temporary directory created by running `mktemp -d` on the remote target.
78
83
 
79
84
  ##### -c DIR, --configdir DIR
80
85
  Specifies where project configuration is found. Defaults to $pwd/configs.
data/bin/build CHANGED
@@ -2,7 +2,7 @@
2
2
  load File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "vanagon.rb"))
3
3
 
4
4
  optparse = Vanagon::OptParse.new("#{File.basename(__FILE__)} <project-name> <platform-name> [<target>] [options]",
5
- [:workdir, :configdir, :engine, :preserve, :verbose, :skipcheck, :only_build])
5
+ [:workdir, :configdir, :engine, :preserve, :verbose, :skipcheck, :only_build, :remote_workdir])
6
6
  options = optparse.parse! ARGV
7
7
 
8
8
  project = ARGV[0]
@@ -230,14 +230,14 @@ class Vanagon
230
230
  # upgrade if it has been modified
231
231
  #
232
232
  # @param file [String] name of the configfile
233
- def configfile(file)
233
+ def configfile(file, mode: nil, owner: nil, group: nil)
234
234
  # I AM SO SORRY
235
235
  @component.delete_file file
236
236
  if @component.platform.name =~ /solaris-10|osx/
237
237
  @component.install << "mv '#{file}' '#{file}.pristine'"
238
- @component.add_file Vanagon::Common::Pathname.configfile("#{file}.pristine")
238
+ @component.add_file Vanagon::Common::Pathname.configfile("#{file}.pristine", mode: mode, owner: owner, group: group)
239
239
  else
240
- @component.add_file Vanagon::Common::Pathname.configfile(file)
240
+ @component.add_file Vanagon::Common::Pathname.configfile(file, mode: mode, owner: owner, group: group)
241
241
  end
242
242
  end
243
243
 
@@ -245,9 +245,9 @@ class Vanagon
245
245
  #
246
246
  # @param source [String] path to the configfile to copy
247
247
  # @param target [String] path to the desired target of the configfile
248
- def install_configfile(source, target)
249
- install_file(source, target)
250
- configfile(target)
248
+ def install_configfile(source, target, mode: '0644', owner: nil, group: nil)
249
+ install_file(source, target, mode: mode, owner: owner, group: group)
250
+ configfile(target, mode: mode, owner: owner, group: group)
251
251
  end
252
252
 
253
253
  # link will add a command to the install to create a symlink from source to target
@@ -10,10 +10,10 @@ require 'logger'
10
10
  class Vanagon
11
11
  class Driver
12
12
  include Vanagon::Utilities
13
- attr_accessor :platform, :project, :target, :workdir, :verbose, :preserve
13
+ attr_accessor :platform, :project, :target, :workdir, :remote_workdir, :verbose, :preserve
14
14
  attr_accessor :timeout, :retry_count
15
15
 
16
- def initialize(platform, project, options = { workdir: nil, configdir: nil, target: nil, engine: nil, components: nil, skipcheck: false, verbose: false, preserve: false, only_build: nil }) # rubocop:disable Metrics/AbcSize
16
+ def initialize(platform, project, options = { workdir: nil, configdir: nil, target: nil, engine: nil, components: nil, skipcheck: false, verbose: false, preserve: false, only_build: nil, remote_workdir: nil }) # rubocop:disable Metrics/AbcSize
17
17
  @verbose = options[:verbose]
18
18
  @preserve = options[:preserve]
19
19
  @workdir = options[:workdir] || Dir.mktmpdir
@@ -31,6 +31,8 @@ class Vanagon
31
31
  filter_out_components(only_build) if only_build
32
32
  loginit('vanagon_hosts.log')
33
33
 
34
+ @remote_workdir = options[:remote_workdir]
35
+
34
36
  load_engine(engine, @platform, target)
35
37
  rescue LoadError => e
36
38
  raise Vanagon::Error.wrap(e, "Could not load the desired engine '#{engine}'")
@@ -63,7 +65,7 @@ class Vanagon
63
65
 
64
66
  def load_engine_object(engine_type, platform, target)
65
67
  require "vanagon/engine/#{engine_type}"
66
- @engine = Object::const_get("Vanagon::Engine::#{camelize(engine_type)}").new(platform, target)
68
+ @engine = Object::const_get("Vanagon::Engine::#{camelize(engine_type)}").new(platform, target, remote_workdir: remote_workdir)
67
69
  rescue
68
70
  fail "No such engine '#{camelize(engine_type)}'"
69
71
  end
@@ -66,7 +66,7 @@ class Vanagon
66
66
  # $ build_host_info puppet-agent aix-5.3-ppc --engine always_be_scheduling
67
67
  # {"name":"aix-53-ppc","engine":"always_be_scheduling"}
68
68
  class AlwaysBeScheduling < Base
69
- def initialize(platform, target)
69
+ def initialize(platform, target, **opts)
70
70
  super
71
71
 
72
72
  Vanagon::Driver.logger.debug "AlwaysBeScheduling engine invoked."
@@ -6,11 +6,12 @@ class Vanagon
6
6
  class Base
7
7
  attr_accessor :target, :remote_workdir
8
8
 
9
- def initialize(platform, target = nil)
9
+ def initialize(platform, target = nil, **opts)
10
10
  @platform = platform
11
11
  @required_attributes = ["ssh_port"]
12
12
  @target = target if target
13
13
  @target_user = @platform.target_user
14
+ @remote_workdir_path = opts[:remote_workdir]
14
15
  end
15
16
 
16
17
  # Get the engine name
@@ -57,7 +58,15 @@ class Vanagon
57
58
  end
58
59
 
59
60
  def get_remote_workdir
60
- @remote_workdir ||= dispatch("mktemp -d -p /var/tmp 2>/dev/null || mktemp -d -t 'tmp'", true)
61
+ unless @remote_workdir
62
+ if @remote_workdir_path
63
+ dispatch("mkdir -p #{@remote_workdir_path}", true)
64
+ @remote_workdir = @remote_workdir_path
65
+ else
66
+ @remote_workdir = dispatch("mktemp -d -p /var/tmp 2>/dev/null || mktemp -d -t 'tmp'", true)
67
+ end
68
+ end
69
+ @remote_workdir
61
70
  end
62
71
 
63
72
  def ship_workdir(workdir)
@@ -5,7 +5,7 @@ class Vanagon
5
5
  class Docker < Base
6
6
  # Both the docker_image and the docker command itself are required for
7
7
  # the docker engine to work
8
- def initialize(platform, target = nil)
8
+ def initialize(platform, target = nil, **opts)
9
9
  super
10
10
 
11
11
  @docker_cmd = Vanagon::Utilities.find_program_on_path('docker')
@@ -9,7 +9,7 @@ class Vanagon
9
9
  attr_accessor :ami, :key_name, :userdata, :key, :key_name, :shutdown_behavior
10
10
  attr_accessor :subnet_id, :instance_type
11
11
 
12
- def initialize(platform, target = nil) # rubocop:disable Metrics/AbcSize
12
+ def initialize(platform, target = nil, **opts) # rubocop:disable Metrics/AbcSize
13
13
  super
14
14
 
15
15
  @ami = @platform.aws_ami
@@ -49,7 +49,7 @@ class Vanagon
49
49
  @lockman.unlock(@target, VANAGON_LOCK_USER)
50
50
  end
51
51
 
52
- def initialize(platform, target)
52
+ def initialize(platform, target, **opts)
53
53
  super
54
54
 
55
55
  Vanagon::Driver.logger.debug "Hardware engine invoked."
@@ -5,7 +5,7 @@ require 'vanagon/errors'
5
5
  class Vanagon
6
6
  class Engine
7
7
  class Local < Base
8
- def initialize(platform, target = nil)
8
+ def initialize(platform, target = nil, **opts)
9
9
  # local engine can't be used with a target
10
10
  super(platform, 'local machine')
11
11
 
@@ -7,7 +7,7 @@ class Vanagon
7
7
  attr_reader :token
8
8
 
9
9
  # The vmpooler_template is required to use the pooler engine
10
- def initialize(platform, target = nil)
10
+ def initialize(platform, target = nil, **opts)
11
11
  super
12
12
 
13
13
  @pooler = "http://vmpooler.delivery.puppetlabs.net"
@@ -4,6 +4,7 @@ class Vanagon
4
4
  class OptParse
5
5
  FLAGS = {
6
6
  :workdir => ['-w DIR', '--workdir DIR', "Working directory where build source should be put (defaults to a tmpdir)"],
7
+ :remote_workdir => ['--remote_workdir DIR', "Working directory where build source should be put on the remote host (defaults to a tmpdir)"],
7
8
  :configdir => ['-c', '--configdir DIR', 'Configs dir (defaults to $pwd/configs)'],
8
9
  :target => ['-t HOST', '--target HOST', 'Configure a target machine for build and packaging (defaults to grabbing one from the pooler)'],
9
10
  :engine => ['-e ENGINE', '--engine ENGINE', "A custom engine to use (defaults to the pooler) [base, local, docker, pooler currently supported]"],
@@ -10,6 +10,7 @@ class Vanagon
10
10
  attr_accessor :os_name
11
11
  attr_accessor :os_version
12
12
  attr_accessor :codename # this is Debian/Ubuntu specific
13
+ attr_writer :dist # most likely to be used by rpm
13
14
 
14
15
  # The name of the sort of package type that a given platform expects,
15
16
  # e.g. msi, rpm,
@@ -216,6 +217,15 @@ class Vanagon
216
217
  @output_dir ||= File.join(@os_name, @os_version, target_repo, @architecture)
217
218
  end
218
219
 
220
+ # Get the value of @dist, or derive it from the value of @os_name and @os_version.
221
+ # This is relatively RPM specific but '#codename' is defined in Platform, and that's
222
+ # just as Deb/Ubuntu specific. All of the accessors in the top-level Platform
223
+ # namespace should be refactored, but #dist will live here for now.
224
+ # @return [String] the %dist name that RPM will use to build new RPMs
225
+ def dist
226
+ @dist ||= @os_name.tr('-', '_') + @os_version
227
+ end
228
+
219
229
  # Sets and gets the name of the operating system for the platform.
220
230
  # Also has the side effect of setting the @os_name instance attribute
221
231
  #
@@ -132,6 +132,13 @@ class Vanagon
132
132
  @platform.cross_compiled = cxx_flag
133
133
  end
134
134
 
135
+ # define an explicit Dist for the platform (most likely used for RPM platforms)
136
+ #
137
+ # @param dist_string [String] the value to use for .dist when building RPMs
138
+ def dist(dist_string)
139
+ @platform.dist = dist_string
140
+ end
141
+
135
142
  # Set the path to rpmbuild for the platform
136
143
  #
137
144
  # @param rpmbuild_cmd [String] Full path to rpmbuild with arguments to be used by default
@@ -44,7 +44,7 @@ class Vanagon
44
44
  defines = %(--define '_topdir $(tempdir)/rpmbuild' )
45
45
  # RPM doesn't allow dashes in the os_name. This was added to
46
46
  # convert cisco-wrlinux to cisco_wrlinux
47
- defines << %(--define 'dist .#{@os_name.tr('-', '_')}#{@os_version}' )
47
+ defines << %(--define 'dist .#{dist}')
48
48
  end
49
49
 
50
50
  def add_repository(definition) # rubocop:disable Metrics/AbcSize
@@ -13,14 +13,14 @@ file-list-before-build:
13
13
  <%- if dirnames.empty? -%>
14
14
  touch file-list-before-build
15
15
  <%- else -%>
16
- (<%= @platform.find %> -L "<%= dirnames.join('" "') %>" 2>/dev/null || <%= @platform.find %> "<%= dirnames.join('" "') %>" -follow 2>/dev/null) | <%= "xargs -I[] cygpath --mixed --long-name --absolute [] |" if @platform.is_windows? %> <%= @platform.sort %> | uniq > file-list-before-build
16
+ (<%= @platform.find %> -H "<%= dirnames.join('" "') %>" 2>/dev/null || <%= @platform.find %> "<%= dirnames.join('" "') %>" 2>/dev/null) | <%= "xargs -I[] cygpath --mixed --long-name --absolute [] |" if @platform.is_windows? %> <%= @platform.sort %> | uniq > file-list-before-build
17
17
  <%- end -%>
18
18
 
19
19
  file-list-after-build: <%= @components.map {|comp| comp.name }.join(" ") %>
20
20
  <%- if dirnames.empty? -%>
21
21
  touch file-list-after-build
22
22
  <%- else -%>
23
- (<%= @platform.find %> -L "<%= dirnames.join('" "') %>" 2>/dev/null || <%= @platform.find %> "<%= dirnames.join('" "') %>" -follow 2>/dev/null) | <%= "xargs -I[] cygpath --mixed --long-name --absolute [] |" if @platform.is_windows? %> <%= @platform.sort %> | uniq > file-list-after-build
23
+ (<%= @platform.find %> -H "<%= dirnames.join('" "') %>" 2>/dev/null || <%= @platform.find %> "<%= dirnames.join('" "') %>" 2>/dev/null) | <%= "xargs -I[] cygpath --mixed --long-name --absolute [] |" if @platform.is_windows? %> <%= @platform.sort %> | uniq > file-list-after-build
24
24
  <%- end -%>
25
25
 
26
26
  <%= @name %>-<%= @version %>.tar.gz: file-list <%= @cleanup ? 'cleanup-components' : '' %>
@@ -142,7 +142,7 @@ install -d %{buildroot}
142
142
 
143
143
  # Here we turn all dirs in the file-list into %dir entries to avoid duplicate files
144
144
  for entry in `cat %{SOURCE1}`; do
145
- if [ -n "$entry" -a -d "$entry" ]; then
145
+ if [ -n "$entry" -a -d "$entry" -a ! -L "$entry" ]; then
146
146
  PATH=/opt/freeware/bin:$PATH sed -i "s|^\($entry\)\$|%dir \1|g" %{SOURCE1}
147
147
  fi
148
148
  done
@@ -587,7 +587,14 @@ end" }
587
587
  it 'adds the file to the configfiles list' do
588
588
  comp = Vanagon::Component::DSL.new('install-config-file-test', {}, platform)
589
589
  comp.install_configfile('thing1', 'place/to/put/thing1')
590
- expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('place/to/put/thing1'))
590
+ expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('place/to/put/thing1', mode: '0644'))
591
+ expect(comp._component.files).not_to include(Vanagon::Common::Pathname.file('place/to/put/thing1'))
592
+ end
593
+
594
+ it 'sets owner, group, and mode for the configfiles' do
595
+ comp = Vanagon::Component::DSL.new('install-config-file-test', {}, platform)
596
+ comp.install_configfile('thing1', 'place/to/put/thing1', owner: 'bob', group: 'timmy', mode: '0022')
597
+ expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('place/to/put/thing1', mode: '0022', group: 'timmy', owner: 'bob'))
591
598
  expect(comp._component.files).not_to include(Vanagon::Common::Pathname.file('place/to/put/thing1'))
592
599
  end
593
600
  end
@@ -617,7 +624,7 @@ end" }
617
624
  it 'adds the file to the configfiles list' do
618
625
  comp = Vanagon::Component::DSL.new('install-config-file-test', {}, platform)
619
626
  comp.install_configfile('thing1', 'place/to/put/thing1')
620
- expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('place/to/put/thing1.pristine'))
627
+ expect(comp._component.configfiles).to include(Vanagon::Common::Pathname.configfile('place/to/put/thing1.pristine', mode: '0644'))
621
628
  expect(comp._component.configfiles).not_to include(Vanagon::Common::Pathname.file('place/to/put/thing1'))
622
629
  end
623
630
  end
@@ -13,6 +13,9 @@ describe 'Vanagon::Driver' do
13
13
  END
14
14
  end
15
15
 
16
+ let(:explicit_workdir){ Dir.mktmpdir }
17
+ let(:explicit_remote_workdir){ Dir.mktmpdir }
18
+
16
19
  def eval_platform(name, definition)
17
20
  plat = Vanagon::Platform::DSL.new(name)
18
21
  plat.instance_eval(definition)
@@ -27,6 +30,22 @@ describe 'Vanagon::Driver' do
27
30
  end
28
31
 
29
32
  describe 'when resolving build host info' do
33
+ it 'uses an expicitly specified workdir if provided' do
34
+ derived = create_driver(redhat)
35
+ explicit = create_driver(redhat, workdir: explicit_workdir)
36
+
37
+ expect(explicit.workdir).to eq(explicit_workdir)
38
+ expect(explicit.workdir).not_to eq(derived.workdir)
39
+ end
40
+
41
+ it 'uses an expicitly specified remote workdir if provided' do
42
+ derived = create_driver(redhat)
43
+ explicit = create_driver(redhat, remote_workdir: explicit_remote_workdir)
44
+
45
+ expect(explicit.remote_workdir).to eq(explicit_remote_workdir)
46
+ expect(explicit.remote_workdir).not_to eq(derived.remote_workdir)
47
+ end
48
+
30
49
  it 'returns the vmpooler_template using the pooler engine' do
31
50
  info = create_driver(redhat).build_host_info
32
51
 
@@ -1,43 +1,35 @@
1
1
  require 'vanagon/platform'
2
2
 
3
- describe "Vanagon::Platform::RPM" do
4
- platforms =[
5
- {
6
- :name => "el-5-i386",
7
- :os_name => "el",
8
- :os_version => "5",
9
- :architecture => "i386",
10
- :block => %Q[ platform "el-5-i386" do |plat| end ]
11
- },
12
- {
13
- :name => "fedora-21-x86_64",
14
- :os_name => "fedora",
15
- :os_version => "21",
16
- :architecture => "x86_64",
17
- :block => %Q[ platform "fedora-21-x86_64" do |plat| end ]
18
- },
19
- {
20
- :name => "cisco-wrlinux-7-x86_64",
21
- :os_name => "fedora",
22
- :os_version => "21",
23
- :architecture => "x86_64",
24
- :block => %Q[ platform "cisco-wrlinux-7-x86_64" do |plat| end ]
25
- },
26
- ]
3
+ describe 'Vanagon::Platform::RPM' do
4
+ platforms = [
5
+ { name: 'el-5-i386' },
6
+ { name: 'fedora-21-x86_64', dist: 'f21' },
7
+ { name: 'cisco-wrlinux-7-x86_64' }
8
+ ]
27
9
 
28
- platforms.each do |plat|
29
- context "on #{plat[:name]} we should behave ourselves" do
30
- let(:platform) { plat }
31
- let(:cur_plat) { Vanagon::Platform::DSL.new(plat[:name]) }
10
+ platforms.each do |platform|
11
+ context "defines RPM-based platform attributes for #{platform[:name]}" do
12
+ subject {
13
+ plat = Vanagon::Platform::DSL.new(platform[:name])
14
+ plat.instance_eval(%(platform("#{platform[:name]}") { |plat| }))
15
+ plat._platform.dist = platform[:dist]
16
+ plat._platform
17
+ }
32
18
 
33
- before do
34
- cur_plat.instance_eval(plat[:block])
35
- end
19
+ let(:derived_dist) { subject.os_name.tr('-', '_') + subject.os_version }
20
+ let(:dist) { platform[:dist] || derived_dist }
21
+ let(:defined_dist) { "--define 'dist .#{dist}'" }
36
22
 
37
23
  describe '#rpm_defines' do
38
- it "removes dashes from the dist macro" do
39
- expected_dist = "--define 'dist .#{cur_plat._platform.os_name.gsub('-', '_')}#{cur_plat._platform.os_version}'"
40
- expect(cur_plat._platform.rpm_defines).to include(expected_dist)
24
+ it "includes the expected 'dist' defines" do
25
+ expect(subject.rpm_defines).to include(defined_dist)
26
+ end
27
+ end
28
+
29
+ describe "#dist" do
30
+ it "uses explicit values when available" do
31
+ expect(subject.dist).to eq(derived_dist) unless platform[:dist]
32
+ expect(subject.dist).to eq(dist)
41
33
  end
42
34
  end
43
35
  end
@@ -1,8 +1,8 @@
1
+ require 'tmpdir'
1
2
  require 'vanagon/platform'
2
3
  require 'vanagon/project'
3
4
  require 'vanagon/common'
4
5
 
5
-
6
6
  # These constants are defined for the purpose of the project/generic file merge tests
7
7
  # to point these directories to test areas under the /tmp directory.
8
8
  # This allows individual test cases to be specified accurately.
@@ -10,7 +10,7 @@ require 'vanagon/common'
10
10
  # data structures are not available under the test conditions causing failures in the
11
11
  # ERB template translation
12
12
 
13
- WORK_BASE = "/tmp/vanwintest"
13
+ WORK_BASE = Dir.mktmpdir
14
14
  VANAGON_ROOT = "#{WORK_BASE}/generic"
15
15
  PROJ_ROOT = "#{WORK_BASE}/project"
16
16
  WORKDIR = "#{WORK_BASE}/workdir"
@@ -36,14 +36,14 @@ describe "Vanagon::Platform::Windows" do
36
36
  let(:platform) { plat }
37
37
  let(:cur_plat) { Vanagon::Platform::DSL.new(plat[:name]) }
38
38
  let (:project_block) {
39
- <<-HERE
40
- project 'test-fixture' do |proj|
41
- proj.setting(:company_name, "Test Name")
42
- proj.setting(:company_id, "TestID")
43
- proj.setting(:product_id, "TestProduct")
44
- proj.setting(:base_dir, "ProgramFilesFolder")
45
- end
46
- HERE
39
+ <<-HERE.undent
40
+ project 'test-fixture' do |proj|
41
+ proj.setting(:company_name, "Test Name")
42
+ proj.setting(:company_id, "TestID")
43
+ proj.setting(:product_id, "TestProduct")
44
+ proj.setting(:base_dir, "ProgramFilesFolder")
45
+ end
46
+ HERE
47
47
  }
48
48
 
49
49
  before do
@@ -180,13 +180,14 @@ HERE
180
180
  cur_plat.instance_eval(plat[:block])
181
181
  comp = Vanagon::Component::DSL.new('service-test', {}, cur_plat._platform)
182
182
  comp.install_service('SourceDir/ProgramFilesFolder/TestID/TestProduct/opt/bin.exe')
183
- expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service].flatten.compact, proj._project)).to eq( \
184
- <<-HERE
185
- <Directory Name="opt" Id="opt_0_0">
186
- <Directory Id="SERVICETESTBINDIR" />
187
- </Directory>
188
- HERE
189
- )
183
+ expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service].flatten.compact, proj._project))
184
+ .to eq(
185
+ <<-HERE.undent
186
+ <Directory Name="opt" Id="opt_0_0">
187
+ <Directory Id="SERVICETESTBINDIR" />
188
+ </Directory>
189
+ HERE
190
+ )
190
191
  end
191
192
 
192
193
  it "returns one directory with non-default name" do
@@ -195,14 +196,14 @@ HERE
195
196
  cur_plat.instance_eval(plat[:block])
196
197
  comp = Vanagon::Component::DSL.new('service-test', {}, cur_plat._platform)
197
198
  comp.install_service('SourceDir/ProgramFilesFolder/TestID/TestProduct/opt/bin.exe', nil, "service-test-2")
198
- expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service].flatten.compact, proj._project)).to eq( \
199
-
200
- <<-HERE
201
- <Directory Name="opt" Id="opt_0_0">
202
- <Directory Id="SERVICETEST2BINDIR" />
203
- </Directory>
204
- HERE
205
- )
199
+ expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service].flatten.compact, proj._project))
200
+ .to eq(
201
+ <<-HERE.undent
202
+ <Directory Name="opt" Id="opt_0_0">
203
+ <Directory Id="SERVICETEST2BINDIR" />
204
+ </Directory>
205
+ HERE
206
+ )
206
207
  end
207
208
 
208
209
  it "returns nested directory correctly with \\" do
@@ -211,16 +212,16 @@ HERE
211
212
  cur_plat.instance_eval(plat[:block])
212
213
  comp = Vanagon::Component::DSL.new('service-test', {}, cur_plat._platform)
213
214
  comp.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\someotherdir\\bin.exe')
214
- expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service].flatten.compact, proj._project)).to eq( \
215
-
216
- <<-HERE
217
- <Directory Name="somedir" Id="somedir_0_0">
218
- <Directory Name="someotherdir" Id="someotherdir_0_1">
219
- <Directory Id="SERVICETESTBINDIR" />
220
- </Directory>
221
- </Directory>
222
- HERE
223
- )
215
+ expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service].flatten.compact, proj._project))
216
+ .to eq(
217
+ <<-HERE.undent
218
+ <Directory Name="somedir" Id="somedir_0_0">
219
+ <Directory Name="someotherdir" Id="someotherdir_0_1">
220
+ <Directory Id="SERVICETESTBINDIR" />
221
+ </Directory>
222
+ </Directory>
223
+ HERE
224
+ )
224
225
  end
225
226
 
226
227
 
@@ -233,14 +234,15 @@ HERE
233
234
  comp.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\bin.exe')
234
235
  comp2 = Vanagon::Component::DSL.new('service-test-2', {}, cur_plat._platform)
235
236
  comp2.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\bin.exe')
236
- expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service, comp2._component.service].flatten.compact, proj._project)).to eq( \
237
- <<-HERE
238
- <Directory Name="somedir" Id="somedir_0_0">
239
- <Directory Id="SERVICETESTBINDIR" />
240
- <Directory Id="SERVICETEST2BINDIR" />
241
- </Directory>
242
- HERE
243
- )
237
+ expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service, comp2._component.service].flatten.compact, proj._project))
238
+ .to eq(
239
+ <<-HERE.undent
240
+ <Directory Name="somedir" Id="somedir_0_0">
241
+ <Directory Id="SERVICETESTBINDIR" />
242
+ <Directory Id="SERVICETEST2BINDIR" />
243
+ </Directory>
244
+ HERE
245
+ )
244
246
  end
245
247
 
246
248
  it "returns correctly formatted multiple nested directories" do
@@ -253,25 +255,26 @@ HERE
253
255
  comp2.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\oneUpAgain\\twoUp\\bin.exe')
254
256
  comp3 = Vanagon::Component::DSL.new('service-test-3', {}, cur_plat._platform)
255
257
  comp3.install_service('SourceDir\\ProgramFilesFolder\\TestID\\TestProduct\\somedir\\oneUpAgain\\twoUpAgain\\bin.exe')
256
- expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service, comp2._component.service, comp3._component.service].flatten.compact, proj._project)).to eq( \
257
- <<-HERE
258
- <Directory Name="somedir" Id="somedir_0_0">
259
- <Directory Name="oneUp" Id="oneUp_0_1">
260
- <Directory Name="twoUp" Id="twoUp_0_2">
261
- <Directory Id="SERVICETEST1BINDIR" />
262
- </Directory>
263
- </Directory>
264
- <Directory Name="oneUpAgain" Id="oneUpAgain_1_1">
265
- <Directory Name="twoUp" Id="twoUp_1_2">
266
- <Directory Id="SERVICETEST2BINDIR" />
267
- </Directory>
268
- <Directory Name="twoUpAgain" Id="twoUpAgain_2_2">
269
- <Directory Id="SERVICETEST3BINDIR" />
270
- </Directory>
271
- </Directory>
272
- </Directory>
273
- HERE
274
- )
258
+ expect(cur_plat._platform.generate_service_bin_dirs([comp._component.service, comp2._component.service, comp3._component.service].flatten.compact, proj._project))
259
+ .to eq(
260
+ <<-HERE.undent
261
+ <Directory Name="somedir" Id="somedir_0_0">
262
+ <Directory Name="oneUp" Id="oneUp_0_1">
263
+ <Directory Name="twoUp" Id="twoUp_0_2">
264
+ <Directory Id="SERVICETEST1BINDIR" />
265
+ </Directory>
266
+ </Directory>
267
+ <Directory Name="oneUpAgain" Id="oneUpAgain_1_1">
268
+ <Directory Name="twoUp" Id="twoUp_1_2">
269
+ <Directory Id="SERVICETEST2BINDIR" />
270
+ </Directory>
271
+ <Directory Name="twoUpAgain" Id="twoUpAgain_2_2">
272
+ <Directory Id="SERVICETEST3BINDIR" />
273
+ </Directory>
274
+ </Directory>
275
+ </Directory>
276
+ HERE
277
+ )
275
278
  end
276
279
  end
277
280
  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.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Puppet Labs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-31 00:00:00.000000000 Z
11
+ date: 2017-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git