vagrant-bosh 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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
- }