vagrant-bosh 0.0.3 → 0.0.4

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.
Files changed (59) hide show
  1. data/README.md +24 -1
  2. data/dev/Vagrantfile +7 -4
  3. data/dev/example-winston-manifest.yml +2 -2
  4. data/docs/build-aws-stemcell.md +66 -0
  5. data/docs/release-url.md +39 -0
  6. data/go/src/boshprovisioner/downloader/local_fs_downloader.go +1 -1
  7. data/go/src/boshprovisioner/main/config.go +28 -13
  8. data/go/src/boshprovisioner/main/config_test.go +67 -0
  9. data/go/src/boshprovisioner/main/main.go +7 -7
  10. data/go/src/boshprovisioner/main/main_suite_test.go +13 -0
  11. data/go/src/boshprovisioner/main/repos_factory.go +0 -10
  12. data/go/src/boshprovisioner/packagescompiler/concrete_packages_compiler.go +3 -3
  13. data/go/src/boshprovisioner/provisioner/deployment_provisioner_interface.go +10 -0
  14. data/go/src/boshprovisioner/provisioner/release_compiler.go +11 -51
  15. data/go/src/boshprovisioner/provisioner/{deployment_provisioner.go → single_configured_vm_provisioner.go} +8 -12
  16. data/go/src/boshprovisioner/provisioner/single_non_configured_vm_provisioner.go +40 -0
  17. data/go/src/boshprovisioner/provisioner/single_vm_provisioner_factory.go +68 -0
  18. data/go/src/boshprovisioner/release/dir_reader.go +127 -0
  19. data/go/src/boshprovisioner/release/manifest/manifest.go +38 -14
  20. data/go/src/boshprovisioner/release/manifest/manifest_suite_test.go +13 -0
  21. data/go/src/boshprovisioner/release/manifest/manifest_test.go +72 -0
  22. data/go/src/boshprovisioner/release/manifest/syntax_validator.go +134 -0
  23. data/go/src/boshprovisioner/release/reader_factory.go +13 -2
  24. data/go/src/boshprovisioner/release/reader_interface.go +6 -0
  25. data/go/src/boshprovisioner/release/tar_reader.go +26 -24
  26. data/go/src/boshprovisioner/vm/vagrant/agent_provisioner.go +70 -40
  27. data/go/src/boshprovisioner/vm/vagrant/asset_manager.go +1 -1
  28. data/go/src/boshprovisioner/vm/vagrant/configured_vm.go +29 -0
  29. data/go/src/boshprovisioner/vm/vagrant/deps_provisioner.go +38 -24
  30. data/go/src/boshprovisioner/vm/vagrant/monit_provisioner.go +1 -1
  31. data/go/src/boshprovisioner/vm/vagrant/non_configured_vm.go +26 -0
  32. data/go/src/boshprovisioner/vm/vagrant/runit_provisioner.go +1 -1
  33. data/go/src/boshprovisioner/vm/vagrant/simple_cmds.go +1 -1
  34. data/go/src/boshprovisioner/vm/vagrant/vcap_user_provisioner.go +87 -40
  35. data/go/src/boshprovisioner/vm/vagrant/vm_provisioner.go +58 -20
  36. data/go/src/boshprovisioner/vm/vagrant/vm_provisioner_factory.go +4 -7
  37. data/go/src/boshprovisioner/vm/vm_interface.go +25 -6
  38. data/lib/vagrant-bosh/asset_uploader.rb +4 -3
  39. data/lib/vagrant-bosh/assets/agent/agent-run +4 -1
  40. data/lib/vagrant-bosh/assets/agent/bosh-agent +0 -0
  41. data/lib/vagrant-bosh/assets/provisioner +0 -0
  42. data/lib/vagrant-bosh/bootstrapper.rb +34 -21
  43. data/lib/vagrant-bosh/communicator.rb +1 -0
  44. data/lib/vagrant-bosh/config.rb +25 -1
  45. data/lib/vagrant-bosh/deployment/manifest.rb +79 -0
  46. data/lib/vagrant-bosh/deployment/manifest_factory.rb +29 -0
  47. data/lib/vagrant-bosh/deployment/release_uploader.rb +40 -0
  48. data/lib/vagrant-bosh/deployment/uploadable_release.rb +82 -0
  49. data/lib/vagrant-bosh/deployment/uploadable_release_factory.rb +28 -0
  50. data/lib/vagrant-bosh/errors.rb +1 -3
  51. data/lib/vagrant-bosh/provisioner.rb +24 -5
  52. data/lib/vagrant-bosh/ui.rb +9 -7
  53. data/lib/vagrant-bosh/version.rb +1 -1
  54. data/templates/locales/en.yml +27 -0
  55. metadata +22 -7
  56. data/go/src/boshprovisioner/release/manifest_reader.go +0 -29
  57. data/go/src/boshprovisioner/releasesrepo/blobstore_releases_repository.go +0 -114
  58. data/go/src/boshprovisioner/releasesrepo/releases_repository_interface.go +0 -15
  59. data/go/src/boshprovisioner/vm/vagrant/vm.go +0 -27
@@ -0,0 +1,29 @@
1
+ require "vagrant-bosh/deployment/manifest"
2
+
3
+ module VagrantPlugins
4
+ module VagrantBosh
5
+ module Deployment
6
+ class ManifestFactory
7
+ def initialize(uploadable_release_factory, ui)
8
+ @uploadable_release_factory = uploadable_release_factory
9
+ @ui = ui
10
+ end
11
+
12
+ def new_manifest(manifest)
13
+ if manifest.empty?
14
+ EmptyManifest.new
15
+ else
16
+ Manifest.new(manifest, @uploadable_release_factory, @ui)
17
+ end
18
+ end
19
+ end
20
+
21
+ class EmptyManifest
22
+ def resolve_releases; end
23
+ def as_string; ""; end
24
+ end
25
+
26
+ #~
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,40 @@
1
+ require "log4r"
2
+
3
+ require Vagrant.source_root.join("plugins/synced_folders/rsync/helper")
4
+
5
+ module VagrantPlugins
6
+ module VagrantBosh
7
+ module Deployment
8
+ class ReleaseUploader
9
+ def initialize(machine, ui)
10
+ @machine = machine
11
+
12
+ @ui = ui.for(:deployment, :release_uploader)
13
+ @logger = Log4r::Logger.new("vagrant::provisioners::bosh::deployment::release_uploader")
14
+ end
15
+
16
+ def sync(host_dir, guest_dir)
17
+ # RsyncHelper uses @machine.ui internally
18
+
19
+ # .dev_builds/ contains jobs/ and packages/ tgzs
20
+ SyncedFolderRSync::RsyncHelper.rsync_single(@machine, @machine.ssh_info, {
21
+ type: :rsync,
22
+ hostpath: File.join(host_dir, ".dev_builds"),
23
+ guestpath: File.join(guest_dir, ".dev_builds"),
24
+ disabled: false,
25
+ })
26
+
27
+ # dev_releases/ contains dev release manifest files
28
+ SyncedFolderRSync::RsyncHelper.rsync_single(@machine, @machine.ssh_info, {
29
+ type: :rsync,
30
+ hostpath: File.join(host_dir, "dev_releases"),
31
+ guestpath: File.join(guest_dir, "dev_releases"),
32
+ disabled: false,
33
+ })
34
+ end
35
+ end
36
+
37
+ #~
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,82 @@
1
+ require "log4r"
2
+ require "vagrant/util/subprocess"
3
+ require "vagrant-bosh/errors"
4
+
5
+ require Vagrant.source_root.join("plugins/synced_folders/rsync/helper")
6
+
7
+ module VagrantPlugins
8
+ module VagrantBosh
9
+ module Deployment
10
+ # UplodableRelease represents a release
11
+ # that *can be* synced to a guest FS location.
12
+ class UplodableRelease
13
+ def initialize(name, version, host_dir, guest_root_dir, release_uploader, ui)
14
+ @name = name
15
+ @version = version
16
+ @host_dir = host_dir
17
+ @release_uploader = release_uploader
18
+
19
+ @ui = ui.for(:deployment, :uploadable_release)
20
+ @logger = Log4r::Logger.new("vagrant::provisioners::bosh::deployment::uploadable_release")
21
+
22
+ @guest_dir = File.join(guest_root_dir, name)
23
+ end
24
+
25
+ def upload
26
+ version = @version == "latest" ? create_release : @version
27
+
28
+ # Sync either existing or newly-created release
29
+ @release_uploader.sync(@host_dir, @guest_dir)
30
+
31
+ UploadedRelease.new(@name, version, @guest_dir)
32
+ end
33
+
34
+ private
35
+
36
+ def create_release
37
+ result = @ui.timed_msg(:create_release, name: @name) do
38
+ # Without clearing out environment Vagrant ruby env will be inherited
39
+ Vagrant::Util::Subprocess.execute(
40
+ "env", "-i", "HOME=#{ENV["HOME"]}", "TERM=#{ENV["TERM"]}",
41
+ "bash", "-l", "-c",
42
+ "bosh create release --force",
43
+ {workdir: @host_dir},
44
+ )
45
+ end
46
+
47
+ if result.exit_code != 0
48
+ error_msg = @ui.msg_string(:create_release_error, {
49
+ name: @name,
50
+ stdout: result.stdout,
51
+ stderr: result.stderr,
52
+ })
53
+ raise VagrantPlugins::VagrantBosh::Errors::BoshReleaseError, error_msg
54
+ end
55
+
56
+ if result.stdout =~ /^Release version: (.+)$/
57
+ version = $1
58
+ else
59
+ error_msg = @ui.msg_string(:missing_release_version_error, {
60
+ name: @name,
61
+ stdout: result.stdout,
62
+ stderr: result.stderr,
63
+ })
64
+ raise VagrantPlugins::VagrantBosh::Errors::BoshReleaseError, error_msg
65
+ end
66
+
67
+ version
68
+ end
69
+ end
70
+
71
+ # UploadedRelease represents a release
72
+ # that *was* synced to a guest FS location.
73
+ class UploadedRelease < Struct.new(:name, :version, :guest_dir)
74
+ def as_hash
75
+ {"name" => name, "version" => version, "url" => "dir://#{guest_dir}"}
76
+ end
77
+ end
78
+
79
+ #~
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,28 @@
1
+ require "vagrant-bosh/deployment/uploadable_release"
2
+
3
+ module VagrantPlugins
4
+ module VagrantBosh
5
+ module Deployment
6
+ class UploadableReleaseFactory
7
+ def initialize(guest_root_dir, release_uploader, ui)
8
+ @guest_root_dir = guest_root_dir
9
+ @release_uploader = release_uploader
10
+ @ui = ui
11
+ end
12
+
13
+ def new_uploadable_release(name, version, host_dir)
14
+ UplodableRelease.new(
15
+ name,
16
+ version,
17
+ host_dir,
18
+ @guest_root_dir,
19
+ @release_uploader,
20
+ @ui,
21
+ )
22
+ end
23
+ end
24
+
25
+ #~
26
+ end
27
+ end
28
+ end
@@ -3,9 +3,7 @@ require "vagrant"
3
3
  module VagrantPlugins
4
4
  module VagrantBosh
5
5
  module Errors
6
- class BoshReleaseError < Vagrant::Errors::VagrantError
7
- error_namespace("bosh")
8
- end
6
+ class BoshReleaseError < StandardError; end
9
7
  end
10
8
  end
11
9
  end
@@ -4,6 +4,9 @@ require "vagrant-bosh/communicator"
4
4
  require "vagrant-bosh/asset_uploader"
5
5
  require "vagrant-bosh/bootstrapper"
6
6
  require "vagrant-bosh/provisioner_tracker"
7
+ require "vagrant-bosh/deployment/release_uploader"
8
+ require "vagrant-bosh/deployment/uploadable_release_factory"
9
+ require "vagrant-bosh/deployment/manifest_factory"
7
10
 
8
11
  module VagrantPlugins
9
12
  module VagrantBosh
@@ -17,18 +20,34 @@ module VagrantPlugins
17
20
 
18
21
  asset_uploader = AssetUploader.new(
19
22
  communicator,
20
- machine_ui,
21
23
  File.absolute_path("../assets", __FILE__),
24
+ machine_ui,
22
25
  )
23
26
 
24
27
  provisioner_tracker = ProvisionerTracker.new(machine_ui)
25
28
 
29
+ release_uploader = Deployment::ReleaseUploader.new(
30
+ machine,
31
+ machine_ui,
32
+ )
33
+
34
+ uploadable_release_factory = Deployment::UploadableReleaseFactory.new(
35
+ config.synced_releases_dir,
36
+ release_uploader,
37
+ machine_ui,
38
+ )
39
+
40
+ manifest_factory = Deployment::ManifestFactory.new(
41
+ uploadable_release_factory,
42
+ machine_ui,
43
+ )
44
+
26
45
  @bootstrapper = Bootstrapper.new(
27
- communicator,
28
- asset_uploader,
29
- "/opt/vagrant-bosh",
30
- config,
46
+ communicator,
47
+ config,
48
+ asset_uploader,
31
49
  provisioner_tracker,
50
+ manifest_factory,
32
51
  )
33
52
 
34
53
  logger = Log4r::Logger.new("vagrant::provisioners::bosh")
@@ -22,10 +22,10 @@ module VagrantPlugins
22
22
  @logger = Log4r::Logger.new("vagrant::provisioners::bosh::ui")
23
23
  end
24
24
 
25
- def for(extra_i18n_prefix)
25
+ def for(*extra_i18n_prefix)
26
26
  self.class.new(@machine, {
27
27
  show_debug: @show_debug,
28
- i18n_prefix: [@i18n_prefix, extra_i18n_prefix].compact.join("."),
28
+ i18n_prefix: ([@i18n_prefix] + extra_i18n_prefix).compact.join("."),
29
29
  start_time: @start_time,
30
30
  })
31
31
  end
@@ -34,11 +34,13 @@ module VagrantPlugins
34
34
  msg(key, hash)
35
35
  end
36
36
 
37
- def msg(key, hash)
37
+ def msg_string(key, hash)
38
38
  path = @i18n_prefix ? "#{@i18n_prefix}.#{key}" : key
39
- title = I18n.t("bosh.ui.#{path}", hash)
40
-
41
- @machine.ui.info(time_prefix(title))
39
+ I18n.t("bosh.ui.#{path}", hash)
40
+ end
41
+
42
+ def msg(key, hash)
43
+ @machine.ui.info(time_prefix(msg_string(key, hash)))
42
44
  end
43
45
 
44
46
  def timed_msg(key, hash, &blk)
@@ -52,7 +54,7 @@ module VagrantPlugins
52
54
  return
53
55
  end
54
56
 
55
- # In non-debug mode show "Uploading /var/vcap/bosh/bin/bosh-agent (sudo)... 1.33s"
57
+ # In non-debug mode show e.g. "Uploading /var/vcap/bosh/bin/bosh-agent (sudo)... 1.33s"
56
58
  begin
57
59
  t1 = Time.now
58
60
  @machine.ui.info(time_prefix("#{title}..."), new_line: false)
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module VagrantBosh
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
@@ -9,6 +9,33 @@ en:
9
9
  asset_uploader:
10
10
  upload: "Uploading %{dst_path}"
11
11
 
12
+ deployment:
13
+ manifest:
14
+ parse_error: "Failed to parse deployment manifest: %{details}"
15
+
16
+ non_hash_class_error: |-
17
+ Deployment manifest must be parseable into a Hash (was %{actual_class})
18
+
19
+ uploadable_release:
20
+ create_release: "Creating new dev release for %{name}"
21
+
22
+ create_release_error: |-
23
+ === stdout
24
+ %{stdout}
25
+ === stderr
26
+ %{stderr}
27
+ !!! Failed to create new dev release for %{name}
28
+
29
+ missing_release_version_error: |-
30
+ === stdout
31
+ %{stdout}
32
+ === stderr
33
+ %{stderr}
34
+ !!! Failed to find release version for %{name}
35
+
36
+ release_uploader:
37
+ upload: "Uploading BOSH release %{dst_path}"
38
+
12
39
  provisioner_tracker:
13
40
  event: "%{state} %{stage} > %{task}"
14
41
  invalid_event: "%{content}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-bosh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
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-06-24 00:00:00.000000000 Z
12
+ date: 2014-06-30 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: BOSH provisioner allows to provision guest VM by specifying regular BOSH
15
15
  deployment manifest.
@@ -29,6 +29,8 @@ files:
29
29
  - dev/Vagrantfile
30
30
  - dev/example-bosh-manifest.yml
31
31
  - dev/example-winston-manifest.yml
32
+ - docs/build-aws-stemcell.md
33
+ - docs/release-url.md
32
34
  - go/.gitignore
33
35
  - go/bin/build
34
36
  - go/bin/build-linux-amd64
@@ -94,7 +96,9 @@ files:
94
96
  - go/src/boshprovisioner/instance/updater/waiter.go
95
97
  - go/src/boshprovisioner/instance/updater/waiter_test.go
96
98
  - go/src/boshprovisioner/main/config.go
99
+ - go/src/boshprovisioner/main/config_test.go
97
100
  - go/src/boshprovisioner/main/main.go
101
+ - go/src/boshprovisioner/main/main_suite_test.go
98
102
  - go/src/boshprovisioner/main/repos_factory.go
99
103
  - go/src/boshprovisioner/packagescompiler/compiledpackagesrepo/compiled_packages_repository_interface.go
100
104
  - go/src/boshprovisioner/packagescompiler/compiledpackagesrepo/concrete_compiled_packages_repository.go
@@ -105,8 +109,12 @@ files:
105
109
  - go/src/boshprovisioner/packagescompiler/packagesrepo/packages_repository_interface.go
106
110
  - go/src/boshprovisioner/provisioner/blobstore_config.go
107
111
  - go/src/boshprovisioner/provisioner/blobstore_provisioner.go
108
- - go/src/boshprovisioner/provisioner/deployment_provisioner.go
112
+ - go/src/boshprovisioner/provisioner/deployment_provisioner_interface.go
109
113
  - go/src/boshprovisioner/provisioner/release_compiler.go
114
+ - go/src/boshprovisioner/provisioner/single_configured_vm_provisioner.go
115
+ - go/src/boshprovisioner/provisioner/single_non_configured_vm_provisioner.go
116
+ - go/src/boshprovisioner/provisioner/single_vm_provisioner_factory.go
117
+ - go/src/boshprovisioner/release/dir_reader.go
110
118
  - go/src/boshprovisioner/release/job/job.go
111
119
  - go/src/boshprovisioner/release/job/manifest/manifest.go
112
120
  - go/src/boshprovisioner/release/job/manifest/manifest_suite_test.go
@@ -115,14 +123,15 @@ files:
115
123
  - go/src/boshprovisioner/release/job/reader_factory.go
116
124
  - go/src/boshprovisioner/release/job/tar_reader.go
117
125
  - go/src/boshprovisioner/release/manifest/manifest.go
118
- - go/src/boshprovisioner/release/manifest_reader.go
126
+ - go/src/boshprovisioner/release/manifest/manifest_suite_test.go
127
+ - go/src/boshprovisioner/release/manifest/manifest_test.go
128
+ - go/src/boshprovisioner/release/manifest/syntax_validator.go
119
129
  - go/src/boshprovisioner/release/reader_factory.go
130
+ - go/src/boshprovisioner/release/reader_interface.go
120
131
  - go/src/boshprovisioner/release/release.go
121
132
  - go/src/boshprovisioner/release/release_suite_test.go
122
133
  - go/src/boshprovisioner/release/release_test.go
123
134
  - go/src/boshprovisioner/release/tar_reader.go
124
- - go/src/boshprovisioner/releasesrepo/blobstore_releases_repository.go
125
- - go/src/boshprovisioner/releasesrepo/releases_repository_interface.go
126
135
  - go/src/boshprovisioner/tar/cmd_compressor.go
127
136
  - go/src/boshprovisioner/tar/cmd_extractor.go
128
137
  - go/src/boshprovisioner/tar/compressor_interface.go
@@ -130,12 +139,13 @@ files:
130
139
  - go/src/boshprovisioner/util/string_keyed.go
131
140
  - go/src/boshprovisioner/vm/vagrant/agent_provisioner.go
132
141
  - go/src/boshprovisioner/vm/vagrant/asset_manager.go
142
+ - go/src/boshprovisioner/vm/vagrant/configured_vm.go
133
143
  - go/src/boshprovisioner/vm/vagrant/deps_provisioner.go
134
144
  - go/src/boshprovisioner/vm/vagrant/monit_provisioner.go
145
+ - go/src/boshprovisioner/vm/vagrant/non_configured_vm.go
135
146
  - go/src/boshprovisioner/vm/vagrant/runit_provisioner.go
136
147
  - go/src/boshprovisioner/vm/vagrant/simple_cmds.go
137
148
  - go/src/boshprovisioner/vm/vagrant/vcap_user_provisioner.go
138
- - go/src/boshprovisioner/vm/vagrant/vm.go
139
149
  - go/src/boshprovisioner/vm/vagrant/vm_provisioner.go
140
150
  - go/src/boshprovisioner/vm/vagrant/vm_provisioner_factory.go
141
151
  - go/src/boshprovisioner/vm/vm_interface.go
@@ -157,6 +167,11 @@ files:
157
167
  - lib/vagrant-bosh/bootstrapper.rb
158
168
  - lib/vagrant-bosh/communicator.rb
159
169
  - lib/vagrant-bosh/config.rb
170
+ - lib/vagrant-bosh/deployment/manifest.rb
171
+ - lib/vagrant-bosh/deployment/manifest_factory.rb
172
+ - lib/vagrant-bosh/deployment/release_uploader.rb
173
+ - lib/vagrant-bosh/deployment/uploadable_release.rb
174
+ - lib/vagrant-bosh/deployment/uploadable_release_factory.rb
160
175
  - lib/vagrant-bosh/errors.rb
161
176
  - lib/vagrant-bosh/plugin.rb
162
177
  - lib/vagrant-bosh/provisioner.rb
@@ -1,29 +0,0 @@
1
- package release
2
-
3
- import (
4
- bosherr "bosh/errors"
5
- boshlog "bosh/logger"
6
- boshsys "bosh/system"
7
- )
8
-
9
- type ManifestReader struct {
10
- path string
11
- fs boshsys.FileSystem
12
- logger boshlog.Logger
13
- }
14
-
15
- func NewManifestReader(
16
- path string,
17
- fs boshsys.FileSystem,
18
- logger boshlog.Logger,
19
- ) ManifestReader {
20
- return ManifestReader{path: path, fs: fs, logger: logger}
21
- }
22
-
23
- func (r ManifestReader) Read() (Release, error) {
24
- return Release{}, bosherr.New("Not implemented")
25
- }
26
-
27
- func (r ManifestReader) Close() error {
28
- return nil
29
- }
@@ -1,114 +0,0 @@
1
- package releasesrepo
2
-
3
- import (
4
- boshblob "bosh/blobstore"
5
- bosherr "bosh/errors"
6
- boshlog "bosh/logger"
7
-
8
- bpdep "boshprovisioner/deployment"
9
- bpdload "boshprovisioner/downloader"
10
- bpindex "boshprovisioner/index"
11
- )
12
-
13
- type BlobstoreReleasesRepository struct {
14
- downloader bpdload.Downloader
15
- blobstore boshblob.Blobstore
16
- index bpindex.Index
17
- logger boshlog.Logger
18
- }
19
-
20
- type blobstoreRecord struct {
21
- BlobID string
22
- Fingerprint string
23
- }
24
-
25
- func NewBlobstoreReleasesRepository(
26
- downloader bpdload.Downloader,
27
- blobstore boshblob.Blobstore,
28
- index bpindex.Index,
29
- logger boshlog.Logger,
30
- ) BlobstoreReleasesRepository {
31
- return BlobstoreReleasesRepository{
32
- downloader: downloader,
33
- blobstore: blobstore,
34
- index: index,
35
- logger: logger,
36
- }
37
- }
38
-
39
- func (rr BlobstoreReleasesRepository) Pull(release bpdep.Release) error {
40
- var record blobstoreRecord
41
-
42
- err := rr.index.Find(release, &record)
43
- if err == nil {
44
- return nil // nothing to do if already exists
45
- } else if err != bpindex.ErrNotFound {
46
- return bosherr.WrapError(err, "Finding release in index")
47
- }
48
-
49
- path, err := rr.downloader.Download(release.URL)
50
- if err != nil {
51
- return bosherr.WrapError(err, "Downloading release")
52
- }
53
-
54
- defer rr.downloader.CleanUp(path)
55
-
56
- blobID, fingerprint, err := rr.blobstore.Create(path)
57
- if err != nil {
58
- return bosherr.WrapError(err, "Creating release blob")
59
- }
60
-
61
- record = blobstoreRecord{
62
- BlobID: blobID,
63
- Fingerprint: fingerprint,
64
- }
65
-
66
- err = rr.index.Save(release, record)
67
- if err != nil {
68
- // todo delete from blobstore
69
-
70
- return bosherr.WrapError(err, "Saving release to index")
71
- }
72
-
73
- return nil
74
- }
75
-
76
- func (rr BlobstoreReleasesRepository) KeepOnly(releasesToKeep []bpdep.Release) error {
77
- var allReleases []bpdep.Release
78
-
79
- err := rr.index.ListKeys(&allReleases)
80
- if err != nil {
81
- return bosherr.WrapError(err, "Listing releases in index")
82
- }
83
-
84
- for _, foundRelease := range allReleases {
85
- var keep bool
86
-
87
- for _, releaseToKeep := range releasesToKeep {
88
- if foundRelease == releaseToKeep {
89
- keep = true
90
- break
91
- }
92
- }
93
-
94
- if keep {
95
- continue
96
- }
97
-
98
- var record blobstoreRecord
99
-
100
- err := rr.index.Find(foundRelease, &record)
101
- if err != nil {
102
- return bosherr.WrapError(err, "Finding release to delete")
103
- }
104
-
105
- // todo delete from blobstore
106
-
107
- err = rr.index.Remove(foundRelease)
108
- if err != nil {
109
- return bosherr.WrapError(err, "Deleting release from index")
110
- }
111
- }
112
-
113
- return nil
114
- }
@@ -1,15 +0,0 @@
1
- package releasesrepo
2
-
3
- import (
4
- bpdep "boshprovisioner/deployment"
5
- )
6
-
7
- // ReleasesRepository manages collection of releases
8
- // available to use for provisioning
9
- type ReleasesRepository interface {
10
- // Pull downloads/copies/retrieves a release
11
- Pull(bpdep.Release) error
12
-
13
- // KeepOnly deletes all releases but the provided ones
14
- KeepOnly([]bpdep.Release) error
15
- }
@@ -1,27 +0,0 @@
1
- package vm
2
-
3
- import (
4
- bpagclient "boshprovisioner/agent/client"
5
- )
6
-
7
- // VM represents already provisioned Vagrant machine
8
- // that can be communicated with via an AgentClient.
9
- type VM struct {
10
- vmProvisioner *VMProvisioner
11
- agentClient bpagclient.Client
12
- }
13
-
14
- func NewVM(vmProvisioner *VMProvisioner, agentClient bpagclient.Client) VM {
15
- return VM{
16
- vmProvisioner: vmProvisioner,
17
- agentClient: agentClient,
18
- }
19
- }
20
-
21
- func (vm VM) AgentClient() bpagclient.Client {
22
- return vm.agentClient
23
- }
24
-
25
- func (vm VM) Deprovision() error {
26
- return vm.vmProvisioner.Deprovision(vm)
27
- }