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.
- 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
|
-
}
|