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.
- data/README.md +24 -1
- data/dev/Vagrantfile +7 -4
- data/dev/example-winston-manifest.yml +2 -2
- data/docs/build-aws-stemcell.md +66 -0
- data/docs/release-url.md +39 -0
- data/go/src/boshprovisioner/downloader/local_fs_downloader.go +1 -1
- data/go/src/boshprovisioner/main/config.go +28 -13
- data/go/src/boshprovisioner/main/config_test.go +67 -0
- data/go/src/boshprovisioner/main/main.go +7 -7
- data/go/src/boshprovisioner/main/main_suite_test.go +13 -0
- data/go/src/boshprovisioner/main/repos_factory.go +0 -10
- data/go/src/boshprovisioner/packagescompiler/concrete_packages_compiler.go +3 -3
- data/go/src/boshprovisioner/provisioner/deployment_provisioner_interface.go +10 -0
- data/go/src/boshprovisioner/provisioner/release_compiler.go +11 -51
- data/go/src/boshprovisioner/provisioner/{deployment_provisioner.go → single_configured_vm_provisioner.go} +8 -12
- data/go/src/boshprovisioner/provisioner/single_non_configured_vm_provisioner.go +40 -0
- data/go/src/boshprovisioner/provisioner/single_vm_provisioner_factory.go +68 -0
- data/go/src/boshprovisioner/release/dir_reader.go +127 -0
- data/go/src/boshprovisioner/release/manifest/manifest.go +38 -14
- data/go/src/boshprovisioner/release/manifest/manifest_suite_test.go +13 -0
- data/go/src/boshprovisioner/release/manifest/manifest_test.go +72 -0
- data/go/src/boshprovisioner/release/manifest/syntax_validator.go +134 -0
- data/go/src/boshprovisioner/release/reader_factory.go +13 -2
- data/go/src/boshprovisioner/release/reader_interface.go +6 -0
- data/go/src/boshprovisioner/release/tar_reader.go +26 -24
- data/go/src/boshprovisioner/vm/vagrant/agent_provisioner.go +70 -40
- data/go/src/boshprovisioner/vm/vagrant/asset_manager.go +1 -1
- data/go/src/boshprovisioner/vm/vagrant/configured_vm.go +29 -0
- data/go/src/boshprovisioner/vm/vagrant/deps_provisioner.go +38 -24
- data/go/src/boshprovisioner/vm/vagrant/monit_provisioner.go +1 -1
- data/go/src/boshprovisioner/vm/vagrant/non_configured_vm.go +26 -0
- data/go/src/boshprovisioner/vm/vagrant/runit_provisioner.go +1 -1
- data/go/src/boshprovisioner/vm/vagrant/simple_cmds.go +1 -1
- data/go/src/boshprovisioner/vm/vagrant/vcap_user_provisioner.go +87 -40
- data/go/src/boshprovisioner/vm/vagrant/vm_provisioner.go +58 -20
- data/go/src/boshprovisioner/vm/vagrant/vm_provisioner_factory.go +4 -7
- data/go/src/boshprovisioner/vm/vm_interface.go +25 -6
- data/lib/vagrant-bosh/asset_uploader.rb +4 -3
- data/lib/vagrant-bosh/assets/agent/agent-run +4 -1
- data/lib/vagrant-bosh/assets/agent/bosh-agent +0 -0
- data/lib/vagrant-bosh/assets/provisioner +0 -0
- data/lib/vagrant-bosh/bootstrapper.rb +34 -21
- data/lib/vagrant-bosh/communicator.rb +1 -0
- data/lib/vagrant-bosh/config.rb +25 -1
- data/lib/vagrant-bosh/deployment/manifest.rb +79 -0
- data/lib/vagrant-bosh/deployment/manifest_factory.rb +29 -0
- data/lib/vagrant-bosh/deployment/release_uploader.rb +40 -0
- data/lib/vagrant-bosh/deployment/uploadable_release.rb +82 -0
- data/lib/vagrant-bosh/deployment/uploadable_release_factory.rb +28 -0
- data/lib/vagrant-bosh/errors.rb +1 -3
- data/lib/vagrant-bosh/provisioner.rb +24 -5
- data/lib/vagrant-bosh/ui.rb +9 -7
- data/lib/vagrant-bosh/version.rb +1 -1
- data/templates/locales/en.yml +27 -0
- metadata +22 -7
- data/go/src/boshprovisioner/release/manifest_reader.go +0 -29
- data/go/src/boshprovisioner/releasesrepo/blobstore_releases_repository.go +0 -114
- data/go/src/boshprovisioner/releasesrepo/releases_repository_interface.go +0 -15
- 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
|
data/lib/vagrant-bosh/errors.rb
CHANGED
@@ -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
|
-
|
29
|
-
|
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")
|
data/lib/vagrant-bosh/ui.rb
CHANGED
@@ -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
|
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
|
37
|
+
def msg_string(key, hash)
|
38
38
|
path = @i18n_prefix ? "#{@i18n_prefix}.#{key}" : key
|
39
|
-
|
40
|
-
|
41
|
-
|
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)
|
data/lib/vagrant-bosh/version.rb
CHANGED
data/templates/locales/en.yml
CHANGED
@@ -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.
|
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-
|
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/
|
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/
|
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
|
-
}
|