bosh-director 1.1858.0 → 1.1868.0

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.
data/lib/bosh/director.rb CHANGED
@@ -73,7 +73,6 @@ require 'bosh/director/instance_updater'
73
73
  require 'bosh/director/job_runner'
74
74
  require 'bosh/director/job_updater'
75
75
  require 'bosh/director/job_queue'
76
- require 'bosh/director/tar_gzipper'
77
76
  require 'bosh/director/lock'
78
77
  require 'bosh/director/nats_rpc'
79
78
  require 'bosh/director/network_reservation'
@@ -1,4 +1,4 @@
1
- require 'bosh/director/tar_gzipper'
1
+ require 'bosh/director/core/tar_gzipper'
2
2
  require 'bosh/director/compiled_package_downloader'
3
3
 
4
4
  module Bosh::Director
@@ -15,7 +15,7 @@ module Bosh::Director
15
15
  manifest = CompiledPackageManifest.new(@compiled_package_group)
16
16
  manifest.write(File.join(download_dir, 'compiled_packages.MF'))
17
17
 
18
- archiver = TarGzipper.new
18
+ archiver = Core::TarGzipper.new
19
19
  archiver.compress(download_dir, ['compiled_packages', 'compiled_packages.MF'], output_path)
20
20
  ensure
21
21
  downloader.cleanup
@@ -10,7 +10,6 @@ require 'bosh/director/deployment_plan/job'
10
10
  require 'bosh/director/deployment_plan/network'
11
11
  require 'bosh/director/deployment_plan/network_subnet'
12
12
  require 'bosh/director/deployment_plan/compiled_package'
13
- require 'bosh/director/deployment_plan/rendered_templates_archive'
14
13
  require 'bosh/director/deployment_plan/preparer'
15
14
  require 'bosh/director/deployment_plan/resource_pools'
16
15
  require 'bosh/director/deployment_plan/multi_job_updater'
@@ -19,7 +19,7 @@ module Bosh::Director
19
19
  # @return [Hash] A hash of template SHA1 hashes
20
20
  attr_accessor :template_hashes
21
21
 
22
- # @return [DeploymentPlan::RenderedTemplatesArchive]
22
+ # @return [Bosh::Director::Core::Templates::RenderedTemplatesArchive]
23
23
  attr_accessor :rendered_templates_archive
24
24
 
25
25
  # @return [Hash<String, NetworkReservation>] network reservations
@@ -215,9 +215,15 @@ module Bosh::Director
215
215
 
216
216
  releases_by_package_names.each do |package_name, releases|
217
217
  if releases.size > 1
218
+ release1, release2 = releases.to_a[0..1]
219
+ offending_template1 = templates.find { |t| t.release == release1 }
220
+ offending_template2 = templates.find { |t| t.release == release2 }
221
+
218
222
  raise JobPackageCollision,
219
- "Colocated package `#{package_name}' has the same name in multiple releases. " +
220
- 'BOSH cannot currently colocate two packages with identical names from separate releases.'
223
+ "Package name collision detected in job `#{@name}': "\
224
+ "template `#{release1.name}/#{offending_template1.name}' depends on package `#{release1.name}/#{package_name}', "\
225
+ "template `#{release2.name}/#{offending_template2.name}' depends on `#{release2.name}/#{package_name}'. " +
226
+ 'BOSH cannot currently collocate two packages with identical names from separate releases.'
221
227
  end
222
228
  end
223
229
  end
@@ -1,13 +1,13 @@
1
- require 'bosh/director/job_template_loader'
2
- require 'bosh/director/job_instance_renderer'
1
+ require 'bosh/director/core/templates/job_template_loader'
2
+ require 'bosh/director/core/templates/job_instance_renderer'
3
3
 
4
4
  module Bosh::Director
5
5
  class JobRenderer
6
6
  # @param [DeploymentPlan::Job]
7
7
  def initialize(job)
8
8
  @job = job
9
- job_template_loader = JobTemplateLoader.new(Config.logger)
10
- @instance_renderer = JobInstanceRenderer.new(@job, job_template_loader)
9
+ job_template_loader = Core::Templates::JobTemplateLoader.new(Config.logger)
10
+ @instance_renderer = Core::Templates::JobInstanceRenderer.new(@job, job_template_loader)
11
11
  end
12
12
 
13
13
  def render_job_instances(blobstore)
@@ -18,7 +18,7 @@ module Bosh::Director
18
18
 
19
19
  archive_model = instance.model.latest_rendered_templates_archive
20
20
  if archive_model && archive_model.content_sha1 == configuration_hash
21
- rendered_templates_archive = DeploymentPlan::RenderedTemplatesArchive.new(archive_model.blobstore_id, archive_model.sha1)
21
+ rendered_templates_archive = Core::Templates::RenderedTemplatesArchive.new(archive_model.blobstore_id, archive_model.sha1)
22
22
  else
23
23
  rendered_templates_archive = rendered_job_instance.persist(blobstore)
24
24
  instance.model.add_rendered_templates_archive(
@@ -1,3 +1,5 @@
1
+ require 'bosh/director/core/tar_gzipper'
2
+
1
3
  module Bosh::Director
2
4
  module Jobs
3
5
  class Backup < BaseJob
@@ -11,7 +13,7 @@ module Bosh::Director
11
13
 
12
14
  def initialize(dest, options={})
13
15
  @backup_file = dest
14
- @tar_gzipper = options.fetch(:tar_gzipper) { TarGzipper.new }
16
+ @tar_gzipper = options.fetch(:tar_gzipper) { Core::TarGzipper.new }
15
17
  @blobstore_client = options.fetch(:blobstore) { App.instance.blobstores.blobstore }
16
18
  @db_adapter = options.fetch(:db_adapter) { Bosh::Director::DbBackup.create(Config.db_config) }
17
19
  @base_dir = options.fetch(:base_dir) { Config.base_dir }
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Director
3
- VERSION = '1.1858.0'
3
+ VERSION = '1.1868.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosh-director
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1858.0
4
+ version: 1.1868.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-27 00:00:00.000000000 Z
12
+ date: 2014-01-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bcrypt-ruby
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ~>
36
36
  - !ruby/object:Gem::Version
37
- version: 1.1858.0
37
+ version: 1.1868.0
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ~>
44
44
  - !ruby/object:Gem::Version
45
- version: 1.1858.0
45
+ version: 1.1868.0
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: bosh-core
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - ~>
52
52
  - !ruby/object:Gem::Version
53
- version: 1.1858.0
53
+ version: 1.1868.0
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -58,7 +58,23 @@ dependencies:
58
58
  requirements:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: 1.1858.0
61
+ version: 1.1868.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: bosh-director-core
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.1868.0
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.1868.0
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: bosh_common
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -66,7 +82,7 @@ dependencies:
66
82
  requirements:
67
83
  - - ~>
68
84
  - !ruby/object:Gem::Version
69
- version: 1.1858.0
85
+ version: 1.1868.0
70
86
  type: :runtime
71
87
  prerelease: false
72
88
  version_requirements: !ruby/object:Gem::Requirement
@@ -74,7 +90,7 @@ dependencies:
74
90
  requirements:
75
91
  - - ~>
76
92
  - !ruby/object:Gem::Version
77
- version: 1.1858.0
93
+ version: 1.1868.0
78
94
  - !ruby/object:Gem::Dependency
79
95
  name: bosh_cpi
80
96
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +98,7 @@ dependencies:
82
98
  requirements:
83
99
  - - ~>
84
100
  - !ruby/object:Gem::Version
85
- version: 1.1858.0
101
+ version: 1.1868.0
86
102
  type: :runtime
87
103
  prerelease: false
88
104
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +106,7 @@ dependencies:
90
106
  requirements:
91
107
  - - ~>
92
108
  - !ruby/object:Gem::Version
93
- version: 1.1858.0
109
+ version: 1.1868.0
94
110
  - !ruby/object:Gem::Dependency
95
111
  name: bosh_openstack_cpi
96
112
  requirement: !ruby/object:Gem::Requirement
@@ -98,7 +114,7 @@ dependencies:
98
114
  requirements:
99
115
  - - ~>
100
116
  - !ruby/object:Gem::Version
101
- version: 1.1858.0
117
+ version: 1.1868.0
102
118
  type: :runtime
103
119
  prerelease: false
104
120
  version_requirements: !ruby/object:Gem::Requirement
@@ -106,7 +122,7 @@ dependencies:
106
122
  requirements:
107
123
  - - ~>
108
124
  - !ruby/object:Gem::Version
109
- version: 1.1858.0
125
+ version: 1.1868.0
110
126
  - !ruby/object:Gem::Dependency
111
127
  name: bosh_aws_cpi
112
128
  requirement: !ruby/object:Gem::Requirement
@@ -114,7 +130,7 @@ dependencies:
114
130
  requirements:
115
131
  - - ~>
116
132
  - !ruby/object:Gem::Version
117
- version: 1.1858.0
133
+ version: 1.1868.0
118
134
  type: :runtime
119
135
  prerelease: false
120
136
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,7 +138,7 @@ dependencies:
122
138
  requirements:
123
139
  - - ~>
124
140
  - !ruby/object:Gem::Version
125
- version: 1.1858.0
141
+ version: 1.1868.0
126
142
  - !ruby/object:Gem::Dependency
127
143
  name: bosh_vsphere_cpi
128
144
  requirement: !ruby/object:Gem::Requirement
@@ -130,7 +146,7 @@ dependencies:
130
146
  requirements:
131
147
  - - ~>
132
148
  - !ruby/object:Gem::Version
133
- version: 1.1858.0
149
+ version: 1.1868.0
134
150
  type: :runtime
135
151
  prerelease: false
136
152
  version_requirements: !ruby/object:Gem::Requirement
@@ -138,7 +154,7 @@ dependencies:
138
154
  requirements:
139
155
  - - ~>
140
156
  - !ruby/object:Gem::Version
141
- version: 1.1858.0
157
+ version: 1.1868.0
142
158
  - !ruby/object:Gem::Dependency
143
159
  name: eventmachine
144
160
  requirement: !ruby/object:Gem::Requirement
@@ -461,7 +477,7 @@ dependencies:
461
477
  version: '1.0'
462
478
  description: ! 'BOSH Director
463
479
 
464
- 570d8c'
480
+ f69423'
465
481
  email: support@cloudfoundry.com
466
482
  executables:
467
483
  - bosh-director
@@ -556,7 +572,6 @@ files:
556
572
  - lib/bosh/director/compiled_package_group.rb
557
573
  - lib/bosh/director/compiled_package_manifest.rb
558
574
  - lib/bosh/director/compiled_packages_exporter.rb
559
- - lib/bosh/director/compressed_rendered_job_templates.rb
560
575
  - lib/bosh/director/config.rb
561
576
  - lib/bosh/director/cycle_helper.rb
562
577
  - lib/bosh/director/db_backup.rb
@@ -581,7 +596,6 @@ files:
581
596
  - lib/bosh/director/deployment_plan/planner.rb
582
597
  - lib/bosh/director/deployment_plan/preparer.rb
583
598
  - lib/bosh/director/deployment_plan/release_version.rb
584
- - lib/bosh/director/deployment_plan/rendered_templates_archive.rb
585
599
  - lib/bosh/director/deployment_plan/resource_pool.rb
586
600
  - lib/bosh/director/deployment_plan/resource_pools.rb
587
601
  - lib/bosh/director/deployment_plan/stemcell.rb
@@ -601,12 +615,9 @@ files:
601
615
  - lib/bosh/director/instance_preparer.rb
602
616
  - lib/bosh/director/instance_updater.rb
603
617
  - lib/bosh/director/ip_util.rb
604
- - lib/bosh/director/job_instance_renderer.rb
605
618
  - lib/bosh/director/job_queue.rb
606
619
  - lib/bosh/director/job_renderer.rb
607
620
  - lib/bosh/director/job_runner.rb
608
- - lib/bosh/director/job_template_loader.rb
609
- - lib/bosh/director/job_template_renderer.rb
610
621
  - lib/bosh/director/job_updater.rb
611
622
  - lib/bosh/director/jobs/backup.rb
612
623
  - lib/bosh/director/jobs/base_job.rb
@@ -669,15 +680,11 @@ files:
669
680
  - lib/bosh/director/problem_handlers/unresponsive_agent.rb
670
681
  - lib/bosh/director/problem_resolver.rb
671
682
  - lib/bosh/director/problem_scanner.rb
672
- - lib/bosh/director/rendered_job_instance.rb
673
- - lib/bosh/director/rendered_job_template.rb
674
683
  - lib/bosh/director/rendered_job_templates_cleaner.rb
675
- - lib/bosh/director/rendered_templates_writer.rb
676
684
  - lib/bosh/director/resource_pool_updater.rb
677
685
  - lib/bosh/director/scheduler.rb
678
686
  - lib/bosh/director/sequel.rb
679
687
  - lib/bosh/director/stale_file_killer.rb
680
- - lib/bosh/director/tar_gzipper.rb
681
688
  - lib/bosh/director/task_result_file.rb
682
689
  - lib/bosh/director/thread_pool.rb
683
690
  - lib/bosh/director/validation_helper.rb
@@ -715,7 +722,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
715
722
  version: '0'
716
723
  segments:
717
724
  - 0
718
- hash: 1775214425609302363
725
+ hash: -2788441104523827358
719
726
  requirements: []
720
727
  rubyforge_project:
721
728
  rubygems_version: 1.8.23
@@ -1,30 +0,0 @@
1
- require 'tmpdir'
2
- require 'digest/sha1'
3
- require 'bosh/director/tar_gzipper'
4
- require 'bosh/director/rendered_templates_writer'
5
-
6
- module Bosh::Director
7
- class CompressedRenderedJobTemplates
8
- def initialize(path)
9
- @path = path
10
- end
11
-
12
- def write(rendered_templates)
13
- Dir.mktmpdir do |dir|
14
- writer = RenderedTemplatesWriter.new
15
- writer.write(rendered_templates, dir)
16
-
17
- tar_gzipper = TarGzipper.new
18
- tar_gzipper.compress(dir, %w(.), @path)
19
- end
20
- end
21
-
22
- def contents
23
- File.open(@path, 'r')
24
- end
25
-
26
- def sha1
27
- Digest::SHA1.file(@path).hexdigest
28
- end
29
- end
30
- end
@@ -1,14 +0,0 @@
1
- module Bosh::Director::DeploymentPlan
2
- class RenderedTemplatesArchive
3
- attr_reader :blobstore_id, :sha1
4
-
5
- def initialize(blobstore_id, sha1)
6
- @blobstore_id = blobstore_id
7
- @sha1 = sha1
8
- end
9
-
10
- def spec
11
- { 'blobstore_id' => @blobstore_id, 'sha1' => @sha1 }
12
- end
13
- end
14
- end
@@ -1,30 +0,0 @@
1
- require 'bosh/director/rendered_job_instance'
2
-
3
- module Bosh::Director
4
- class JobInstanceRenderer
5
- def initialize(job, job_template_loader)
6
- @job = job
7
- @job_template_loader = job_template_loader
8
- end
9
-
10
- def render(instance)
11
- rendered_templates = job.templates.map do |template|
12
- job_template_renderer = job_template_renderers[template.name]
13
- job_template_renderer.render(job.name, instance)
14
- end
15
-
16
- RenderedJobInstance.new(rendered_templates)
17
- end
18
-
19
- private
20
-
21
- def job_template_renderers
22
- @job_template_renderers ||= job.templates.reduce({}) do |hash, template|
23
- hash[template.name] = job_template_loader.process(template)
24
- hash
25
- end
26
- end
27
-
28
- attr_reader :job_template_loader, :job
29
- end
30
- end
@@ -1,56 +0,0 @@
1
- require 'bosh/director/job_template_renderer'
2
-
3
- module Bosh::Director
4
- SrcFileTemplate = Struct.new(:src_name, :dest_name, :erb_file)
5
-
6
- class JobTemplateLoader
7
- def initialize(logger)
8
- @logger = logger
9
- end
10
-
11
- def process(job_template)
12
- template_dir = extract_template(job_template)
13
- manifest = Psych.load_file(File.join(template_dir, 'job.MF'))
14
-
15
- monit_template = erb(File.join(template_dir, 'monit'))
16
- monit_template.filename = File.join(job_template.name, 'monit')
17
-
18
- templates = []
19
-
20
- manifest.fetch('templates', {}).each_pair do |src_name, dest_name|
21
- erb_file = erb(File.join(template_dir, 'templates', src_name))
22
- erb_file.filename = File.join(job_template.name, src_name)
23
- templates << SrcFileTemplate.new(src_name, dest_name, erb_file)
24
- end
25
-
26
- JobTemplateRenderer.new(job_template.name, monit_template, templates, logger)
27
- ensure
28
- FileUtils.rm_rf(template_dir) if template_dir
29
- end
30
-
31
- private
32
-
33
- attr_reader :logger
34
-
35
- def extract_template(job_template)
36
- temp_path = job_template.download_blob
37
- template_dir = Dir.mktmpdir('template_dir')
38
-
39
- output = `tar -C #{template_dir} -xzf #{temp_path} 2>&1`
40
- if $?.exitstatus != 0
41
- raise JobTemplateUnpackFailed,
42
- "Cannot unpack `#{job_template.name}' job template, " +
43
- "tar returned #{$?.exitstatus}, " +
44
- "tar output: #{output}"
45
- end
46
-
47
- template_dir
48
- ensure
49
- FileUtils.rm_f(temp_path) if temp_path
50
- end
51
-
52
- def erb(path)
53
- ERB.new(File.read(path))
54
- end
55
- end
56
- end
@@ -1,50 +0,0 @@
1
- require 'bosh/director/rendered_job_template'
2
-
3
- module Bosh::Director
4
- RenderedFileTemplate = Struct.new(:src_name, :dest_name, :contents)
5
- class JobTemplateRenderer
6
-
7
- attr_reader :monit_template, :templates
8
-
9
- def initialize(name, monit_template, templates, logger)
10
- @name = name
11
- @monit_template = monit_template
12
- @templates = templates
13
- @logger = logger
14
- end
15
-
16
- def render(job_name, instance)
17
- template_context = Bosh::Common::TemplateEvaluationContext.new(instance.spec)
18
-
19
- monit = render_erb(job_name, monit_template, template_context, instance.index)
20
-
21
- rendered_templates = templates.map do |template_file|
22
- file_contents = render_erb(job_name, template_file.erb_file, template_context, instance.index)
23
- RenderedFileTemplate.new(template_file.src_name, template_file.dest_name, file_contents)
24
- end
25
-
26
- RenderedJobTemplate.new(name, monit, rendered_templates)
27
- end
28
-
29
- private
30
-
31
- attr_reader :name, :logger
32
-
33
- def render_erb(job_name, template, template_context, index)
34
- template.result(template_context.get_binding)
35
- rescue Exception => e
36
- logger.debug(e.inspect)
37
- job_desc = "#{job_name}/#{index}"
38
- line_index = e.backtrace.index { |l| l.include?(template.filename) }
39
- line = line_index ? e.backtrace[line_index] : '(unknown):(unknown)'
40
- template_name, line = line.split(':')
41
-
42
- message = "Error filling in template `#{File.basename(template_name)}' " +
43
- "for `#{job_desc}' (line #{line}: #{e})"
44
-
45
- logger.debug("#{message}\n#{e.backtrace.join("\n")}")
46
-
47
- raise JobTemplateBindingFailed, "#{message}"
48
- end
49
- end
50
- end
@@ -1,48 +0,0 @@
1
- require 'bosh/director/deployment_plan/rendered_templates_archive'
2
- require 'bosh/director/compressed_rendered_job_templates'
3
- require 'digest/sha1'
4
- require 'tempfile'
5
-
6
- module Bosh::Director
7
- class RenderedJobInstance
8
- def initialize(job_templates)
9
- @job_templates = job_templates
10
- end
11
-
12
- def configuration_hash
13
- instance_digest = Digest::SHA1.new
14
- job_templates.sort { |x, y| x.name <=> y.name }.each do |rendered_job_template|
15
- bound_templates = ''
16
- bound_templates << rendered_job_template.monit
17
-
18
- rendered_job_template.templates.sort { |x, y| x.src_name <=> y.src_name }.each do |template_file|
19
- bound_templates << template_file.contents
20
- instance_digest << bound_templates
21
- end
22
- end
23
-
24
- instance_digest.hexdigest
25
- end
26
-
27
- def template_hashes
28
- job_templates.reduce({}) do |h, rendered_job_template|
29
- h.merge(rendered_job_template.name => rendered_job_template.template_hash)
30
- end
31
- end
32
-
33
- def persist(blobstore)
34
- file = Tempfile.new('compressed-rendered-job-templates')
35
-
36
- compressed_archive = CompressedRenderedJobTemplates.new(file.path)
37
- compressed_archive.write(job_templates)
38
-
39
- blobstore_id = blobstore.create(compressed_archive.contents)
40
- DeploymentPlan::RenderedTemplatesArchive.new(blobstore_id, compressed_archive.sha1)
41
- ensure
42
- file.close!
43
- end
44
-
45
- private
46
- attr_reader :job_templates
47
- end
48
- end
@@ -1,21 +0,0 @@
1
- module Bosh::Director
2
- class RenderedJobTemplate
3
- attr_reader :name, :monit, :templates
4
-
5
- def initialize(name, monit, templates)
6
- @name = name
7
- @monit = monit
8
- @templates = templates
9
- end
10
-
11
- def template_hash
12
- template_digest = Digest::SHA1.new
13
- template_digest << monit
14
- templates.sort { |x, y| x.src_name <=> y.src_name }.each do |template_file|
15
- template_digest << template_file.contents
16
- end
17
-
18
- template_digest.hexdigest
19
- end
20
- end
21
- end
@@ -1,24 +0,0 @@
1
- require 'fileutils'
2
-
3
- module Bosh::Director
4
- class RenderedTemplatesWriter
5
- def write(rendered_templates, output_dir)
6
- rendered_templates.each do |job_template|
7
- job_template_dir = File.join(output_dir, job_template.name)
8
- Dir.mkdir(job_template_dir)
9
-
10
- File.open(File.join(job_template_dir, 'monit'), 'w') do |f|
11
- f.write(job_template.monit)
12
- end
13
-
14
- job_template.templates.each do |file_template|
15
- file_template_dest = File.join(job_template_dir, file_template.dest_name)
16
- FileUtils.mkdir_p(File.dirname(file_template_dest))
17
- File.open(file_template_dest, 'w') do |f|
18
- f.write(file_template.contents)
19
- end
20
- end
21
- end
22
- end
23
- end
24
- end
@@ -1,46 +0,0 @@
1
- require 'tmpdir'
2
- require 'open3'
3
-
4
- module Bosh::Director
5
- class TarGzipper
6
- # @param [String] base_dir the directory from which the tar command is run
7
- # @param [String, Array] sources the relative paths to include
8
- # @param [String] dest the destination filename for the tgz output
9
- # @param [Hash] options the options for compress
10
- # @option options [Boolean] :copy_first copy the source to a temp dir before archiving
11
- def compress(base_dir, sources, dest, options={})
12
- sources = [*sources]
13
-
14
- sources.each do |source|
15
- raise "Sources must have a path depth of 1 and contain no '#{File::SEPARATOR}'" if source.include?(File::SEPARATOR)
16
- end
17
-
18
- base_dir_path = Pathname.new(base_dir)
19
-
20
- unless base_dir_path.exist?
21
- raise "The base directory #{base_dir} could not be found."
22
- end
23
-
24
- unless base_dir_path.absolute?
25
- raise "The base directory #{base_dir} is not an absolute path."
26
- end
27
-
28
- if options[:copy_first]
29
- Dir.mktmpdir do |tmpdir|
30
- FileUtils.cp_r(sources.map { |s| File.join(base_dir, s) }, "#{tmpdir}/")
31
- tar(tmpdir, dest, sources)
32
- end
33
- else
34
- tar(base_dir, dest, sources)
35
- end
36
- end
37
-
38
- private
39
-
40
- def tar(base_dir, dest, sources)
41
- out, err, status = Open3.capture3('tar', '-C', base_dir, '-czf', dest, *sources)
42
- raise("tar exited #{status.exitstatus}, output: '#{out}', error: '#{err}'") unless status.success?
43
- out
44
- end
45
- end
46
- end