vagrant-bosh 0.0.2 → 0.0.3

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 (33) hide show
  1. data/dev/Vagrantfile +2 -2
  2. data/dev/example-winston-manifest.yml +5 -8
  3. data/go/src/boshprovisioner/instance/instance.go +43 -0
  4. data/go/src/boshprovisioner/instance/instance_provisioner.go +48 -0
  5. data/go/src/boshprovisioner/instance/updater/updater.go +31 -36
  6. data/go/src/boshprovisioner/instance/updater/updater_factory.go +0 -3
  7. data/go/src/boshprovisioner/main/config.go +3 -0
  8. data/go/src/boshprovisioner/main/main.go +8 -6
  9. data/go/src/boshprovisioner/provisioner/deployment_provisioner.go +36 -5
  10. data/go/src/boshprovisioner/provisioner/release_compiler.go +2 -0
  11. data/go/src/boshprovisioner/vm/{agent_provisioner.go → vagrant/agent_provisioner.go} +1 -1
  12. data/go/src/boshprovisioner/vm/{asset_manager.go → vagrant/asset_manager.go} +0 -0
  13. data/go/src/boshprovisioner/vm/vagrant/deps_provisioner.go +200 -0
  14. data/go/src/boshprovisioner/vm/{monit_provisioner.go → vagrant/monit_provisioner.go} +3 -1
  15. data/go/src/boshprovisioner/vm/{runit_provisioner.go → vagrant/runit_provisioner.go} +15 -11
  16. data/go/src/boshprovisioner/vm/{simple_cmds.go → vagrant/simple_cmds.go} +0 -0
  17. data/go/src/boshprovisioner/vm/{vcap_user_provisioner.go → vagrant/vcap_user_provisioner.go} +0 -0
  18. data/go/src/boshprovisioner/vm/vagrant/vm.go +27 -0
  19. data/go/src/boshprovisioner/vm/vagrant/vm_provisioner.go +81 -0
  20. data/go/src/boshprovisioner/vm/{vm_provisioner_factory.go → vagrant/vm_provisioner_factory.go} +14 -7
  21. data/go/src/boshprovisioner/vm/vm_interface.go +26 -0
  22. data/lib/vagrant-bosh/assets/provisioner +0 -0
  23. data/lib/vagrant-bosh/bootstrapper.rb +10 -6
  24. data/lib/vagrant-bosh/config.rb +6 -0
  25. data/lib/vagrant-bosh/provisioner.rb +1 -1
  26. data/lib/vagrant-bosh/version.rb +1 -1
  27. metadata +22 -19
  28. checksums.yaml +0 -7
  29. data/go/src/boshprovisioner/instance/updater/preparer.go +0 -39
  30. data/go/src/boshprovisioner/provisioner/instance_provisioner.go +0 -48
  31. data/go/src/boshprovisioner/vm/deps_provisioner.go +0 -92
  32. data/go/src/boshprovisioner/vm/vm.go +0 -19
  33. data/go/src/boshprovisioner/vm/vm_provisioner.go +0 -57
@@ -0,0 +1,26 @@
1
+ package vm
2
+
3
+ import (
4
+ bpagclient "boshprovisioner/agent/client"
5
+ bpdep "boshprovisioner/deployment"
6
+ )
7
+
8
+ type VMProvisioner interface {
9
+ // Provision creates and configures VM to be usable by BOSH releases.
10
+ // todo should not rely on bpdep.Instance
11
+ Provision(bpdep.Instance) (VM, error)
12
+ }
13
+
14
+ type VMProvisionerConfig struct {
15
+ // When provisioning, install all dependencies that official stemcells carry.
16
+ // By default, provisioners will only install absolutely needed dependencies.
17
+ FullStemcellCompatibility bool `json:"full_stemcell_compatibility"`
18
+ }
19
+
20
+ type VM interface {
21
+ // AgentClient returns a client immediately ready for communication.
22
+ AgentClient() bpagclient.Client
23
+
24
+ // Deprovision deletes VM previously provisioned VM.
25
+ Deprovision() error
26
+ }
Binary file
@@ -4,11 +4,11 @@ require "json"
4
4
  module VagrantPlugins
5
5
  module VagrantBosh
6
6
  class Bootstrapper
7
- def initialize(communicator, asset_uploader, base_dir, manifest, provisioner_tracker)
7
+ def initialize(communicator, asset_uploader, base_dir, config, provisioner_tracker)
8
8
  @c = communicator
9
9
  @asset_uploader = asset_uploader
10
10
  @base_dir = base_dir
11
- @manifest = manifest
11
+ @config = config
12
12
  @provisioner_tracker = provisioner_tracker
13
13
  @logger = Log4r::Logger.new("vagrant::provisioners::bosh::bootstrapper")
14
14
 
@@ -21,7 +21,7 @@ module VagrantPlugins
21
21
  def bootstrap
22
22
  @asset_uploader.sync(@assets_path)
23
23
 
24
- @asset_uploader.upload_text(@manifest, @manifest_path)
24
+ @asset_uploader.upload_text(@config.manifest, @manifest_path)
25
25
 
26
26
  config_json = JSON.dump(config_hash)
27
27
  @asset_uploader.upload_text(config_json, @config_path)
@@ -31,7 +31,7 @@ module VagrantPlugins
31
31
  @c.chmod_x(provisioner_path)
32
32
 
33
33
  @c.sudo(
34
- "#{provisioner_path} -configPath=#{@config_path}",
34
+ "#{provisioner_path} -configPath=#{@config_path} 2> >(tee /tmp/provisioner.log >&2)",
35
35
  &@provisioner_tracker.method(:add_data)
36
36
  )
37
37
  end
@@ -43,15 +43,19 @@ module VagrantPlugins
43
43
  manifest_path: @manifest_path,
44
44
  assets_dir: @assets_path,
45
45
  repos_dir: @repos_path,
46
-
46
+
47
47
  mbus: "https://user:password@127.0.0.1:4321/agent",
48
48
 
49
49
  blobstore: {
50
50
  provider: "local",
51
- options: {
51
+ options: {
52
52
  blobstore_path: File.join(@base_dir, "blobstore"),
53
53
  },
54
54
  },
55
+
56
+ vm_provisioner: {
57
+ full_stemcell_compatibility: @config.full_stemcell_compatibility,
58
+ },
55
59
  }
56
60
  end
57
61
  end
@@ -3,9 +3,15 @@ require "vagrant"
3
3
  module VagrantPlugins
4
4
  module VagrantBosh
5
5
  class Config < Vagrant.plugin("2", :config)
6
+ # Manifest holds full BOSH deployment manifest as a string.
6
7
  attr_accessor :manifest
7
8
 
9
+ # Full stemcell compatibility forces provisioner to install all
10
+ # (not just minimum) dependencies usually found on a stemcell.
11
+ attr_accessor :full_stemcell_compatibility
12
+
8
13
  def finalize!
14
+ self.full_stemcell_compatibility = !!self.full_stemcell_compatibility
9
15
  end
10
16
 
11
17
  def validate(machine)
@@ -27,7 +27,7 @@ module VagrantPlugins
27
27
  communicator,
28
28
  asset_uploader,
29
29
  "/opt/vagrant-bosh",
30
- config.manifest,
30
+ config,
31
31
  provisioner_tracker,
32
32
  )
33
33
 
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module VagrantBosh
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vagrant-bosh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Dmitriy Kalinin
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2014-06-20 00:00:00.000000000 Z
12
+ date: 2014-06-24 00:00:00.000000000 Z
12
13
  dependencies: []
13
14
  description: BOSH provisioner allows to provision guest VM by specifying regular BOSH
14
15
  deployment manifest.
@@ -64,6 +65,8 @@ files:
64
65
  - go/src/boshprovisioner/index/file_index_test.go
65
66
  - go/src/boshprovisioner/index/index_interface.go
66
67
  - go/src/boshprovisioner/index/index_suite_test.go
68
+ - go/src/boshprovisioner/instance/instance.go
69
+ - go/src/boshprovisioner/instance/instance_provisioner.go
67
70
  - go/src/boshprovisioner/instance/templatescompiler/concrete_templates_compiler.go
68
71
  - go/src/boshprovisioner/instance/templatescompiler/erbrenderer/erb_renderer.go
69
72
  - go/src/boshprovisioner/instance/templatescompiler/erbrenderer/erbrenderer_suite_test.go
@@ -83,7 +86,6 @@ files:
83
86
  - go/src/boshprovisioner/instance/updater/applier/empty_state.go
84
87
  - go/src/boshprovisioner/instance/updater/applier/job_state.go
85
88
  - go/src/boshprovisioner/instance/updater/drainer.go
86
- - go/src/boshprovisioner/instance/updater/preparer.go
87
89
  - go/src/boshprovisioner/instance/updater/starter.go
88
90
  - go/src/boshprovisioner/instance/updater/stopper.go
89
91
  - go/src/boshprovisioner/instance/updater/updater.go
@@ -104,7 +106,6 @@ files:
104
106
  - go/src/boshprovisioner/provisioner/blobstore_config.go
105
107
  - go/src/boshprovisioner/provisioner/blobstore_provisioner.go
106
108
  - go/src/boshprovisioner/provisioner/deployment_provisioner.go
107
- - go/src/boshprovisioner/provisioner/instance_provisioner.go
108
109
  - go/src/boshprovisioner/provisioner/release_compiler.go
109
110
  - go/src/boshprovisioner/release/job/job.go
110
111
  - go/src/boshprovisioner/release/job/manifest/manifest.go
@@ -127,16 +128,17 @@ files:
127
128
  - go/src/boshprovisioner/tar/compressor_interface.go
128
129
  - go/src/boshprovisioner/tar/extractor_interface.go
129
130
  - go/src/boshprovisioner/util/string_keyed.go
130
- - go/src/boshprovisioner/vm/agent_provisioner.go
131
- - go/src/boshprovisioner/vm/asset_manager.go
132
- - go/src/boshprovisioner/vm/deps_provisioner.go
133
- - go/src/boshprovisioner/vm/monit_provisioner.go
134
- - go/src/boshprovisioner/vm/runit_provisioner.go
135
- - go/src/boshprovisioner/vm/simple_cmds.go
136
- - go/src/boshprovisioner/vm/vcap_user_provisioner.go
137
- - go/src/boshprovisioner/vm/vm.go
138
- - go/src/boshprovisioner/vm/vm_provisioner.go
139
- - go/src/boshprovisioner/vm/vm_provisioner_factory.go
131
+ - go/src/boshprovisioner/vm/vagrant/agent_provisioner.go
132
+ - go/src/boshprovisioner/vm/vagrant/asset_manager.go
133
+ - go/src/boshprovisioner/vm/vagrant/deps_provisioner.go
134
+ - go/src/boshprovisioner/vm/vagrant/monit_provisioner.go
135
+ - go/src/boshprovisioner/vm/vagrant/runit_provisioner.go
136
+ - go/src/boshprovisioner/vm/vagrant/simple_cmds.go
137
+ - go/src/boshprovisioner/vm/vagrant/vcap_user_provisioner.go
138
+ - go/src/boshprovisioner/vm/vagrant/vm.go
139
+ - go/src/boshprovisioner/vm/vagrant/vm_provisioner.go
140
+ - go/src/boshprovisioner/vm/vagrant/vm_provisioner_factory.go
141
+ - go/src/boshprovisioner/vm/vm_interface.go
140
142
  - lib/vagrant-bosh.rb
141
143
  - lib/vagrant-bosh/asset_uploader.rb
142
144
  - lib/vagrant-bosh/assets/agent/agent-log
@@ -166,26 +168,27 @@ files:
166
168
  homepage: https://github.com/cppforlife/vagrant-bosh
167
169
  licenses:
168
170
  - MIT
169
- metadata: {}
170
171
  post_install_message:
171
172
  rdoc_options: []
172
173
  require_paths:
173
174
  - lib
174
175
  - templates
175
176
  required_ruby_version: !ruby/object:Gem::Requirement
177
+ none: false
176
178
  requirements:
177
- - - '>='
179
+ - - ! '>='
178
180
  - !ruby/object:Gem::Version
179
181
  version: '0'
180
182
  required_rubygems_version: !ruby/object:Gem::Requirement
183
+ none: false
181
184
  requirements:
182
- - - '>='
185
+ - - ! '>='
183
186
  - !ruby/object:Gem::Version
184
187
  version: '0'
185
188
  requirements: []
186
189
  rubyforge_project:
187
- rubygems_version: 2.2.2
190
+ rubygems_version: 1.8.23
188
191
  signing_key:
189
- specification_version: 4
192
+ specification_version: 3
190
193
  summary: Vagrant BOSH provisioner plugin.
191
194
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: 831ea9bc4698d6a0dea969a338e2d48bfc936306
4
- data.tar.gz: d5454ec89149ebd6779f72b7d27226284bdd1bde
5
- SHA512:
6
- metadata.gz: d34fbdcc2ef35e1174997bb0b98800d14493a2a2a308d50a728154be225fe6edc6b6421d1f16ceb7a258195e2f6d956257cbca6af8225ba3f6a0a29430d5e3b9
7
- data.tar.gz: d56779c9cca2243e903c21690c1c7a379ed4d663b850554a03aabaf352f646de4aa99c5b0c8797621b92d63498bc7deb5d5a6dd1d8279e0cff67a84bac038055
@@ -1,39 +0,0 @@
1
- package updater
2
-
3
- import (
4
- boshas "bosh/agent/applier/applyspec"
5
- bosherr "bosh/errors"
6
- boshlog "bosh/logger"
7
-
8
- bpagclient "boshprovisioner/agent/client"
9
- )
10
-
11
- const preparerLogTag = "Preparer"
12
-
13
- type Preparer struct {
14
- agentClient bpagclient.Client
15
- logger boshlog.Logger
16
- }
17
-
18
- func NewPreparer(
19
- agentClient bpagclient.Client,
20
- logger boshlog.Logger,
21
- ) Preparer {
22
- return Preparer{
23
- agentClient: agentClient,
24
- logger: logger,
25
- }
26
- }
27
-
28
- func (p Preparer) Prepare() error {
29
- p.logger.Debug(preparerLogTag, "Preparing instance")
30
-
31
- spec := boshas.V1ApplySpec{}
32
-
33
- _, err := p.agentClient.Prepare(spec)
34
- if err != nil {
35
- return bosherr.WrapError(err, "Sending prepare")
36
- }
37
-
38
- return nil
39
- }
@@ -1,48 +0,0 @@
1
- package provisioner
2
-
3
- import (
4
- bosherr "bosh/errors"
5
- boshlog "bosh/logger"
6
-
7
- bpdep "boshprovisioner/deployment"
8
- bpinstupd "boshprovisioner/instance/updater"
9
- bpvm "boshprovisioner/vm"
10
- )
11
-
12
- const instanceProvisionerLogTag = "InstanceProvisioner"
13
-
14
- type InstanceProvisioner struct {
15
- instanceUpdaterFactory bpinstupd.UpdaterFactory
16
- vmProvisioner bpvm.VMProvisioner
17
- logger boshlog.Logger
18
- }
19
-
20
- func NewInstanceProvisioner(
21
- instanceUpdaterFactory bpinstupd.UpdaterFactory,
22
- vmProvisioner bpvm.VMProvisioner,
23
- logger boshlog.Logger,
24
- ) InstanceProvisioner {
25
- return InstanceProvisioner{
26
- instanceUpdaterFactory: instanceUpdaterFactory,
27
- vmProvisioner: vmProvisioner,
28
- logger: logger,
29
- }
30
- }
31
-
32
- func (p InstanceProvisioner) Provision(job bpdep.Job, instance bpdep.Instance) error {
33
- p.logger.Debug(instanceProvisionerLogTag, "Updating instance")
34
-
35
- vm, err := p.vmProvisioner.Provision(instance)
36
- if err != nil {
37
- return bosherr.WrapError(err, "Provisioning agent")
38
- }
39
-
40
- updater := p.instanceUpdaterFactory.NewUpdater(vm.AgentClient(), job, instance)
41
-
42
- err = updater.Update()
43
- if err != nil {
44
- return bosherr.WrapError(err, "Updating instance %d", instance.Index)
45
- }
46
-
47
- return nil
48
- }
@@ -1,92 +0,0 @@
1
- package vm
2
-
3
- import (
4
- "fmt"
5
- "strings"
6
-
7
- bosherr "bosh/errors"
8
- boshlog "bosh/logger"
9
- boshsys "bosh/system"
10
-
11
- bpeventlog "boshprovisioner/eventlog"
12
- )
13
-
14
- const (
15
- depsProvisionerLogTag = "DepsProvisioner"
16
- runAptGetUpdateMsg = "E: Unable to fetch some archives, maybe run apt-get update"
17
- )
18
-
19
- // DepsProvisioner installs basic dependencies for running
20
- // packaging scripts from BOSH packages. It also installs
21
- // non-captured dependencies by few common BOSH releases.
22
- // (e.g. cmake, quota)
23
- type DepsProvisioner struct {
24
- runner boshsys.CmdRunner
25
- eventLog bpeventlog.Log
26
- logger boshlog.Logger
27
- }
28
-
29
- func NewDepsProvisioner(
30
- runner boshsys.CmdRunner,
31
- eventLog bpeventlog.Log,
32
- logger boshlog.Logger,
33
- ) DepsProvisioner {
34
- return DepsProvisioner{
35
- runner: runner,
36
- eventLog: eventLog,
37
- logger: logger,
38
- }
39
- }
40
-
41
- func (p DepsProvisioner) Provision() error {
42
- pkgNames := []string{
43
- // For packaging scripts in BOSH releases
44
- "build-essential", // 16sec
45
- "cmake", // 6sec
46
- "libcap-dev", // 3sec
47
-
48
- "libbz2-1.0", // noop on precise64 Vagrant box
49
- "libbz2-dev", // 2sec
50
- "libxslt-dev", // 2sec
51
- "libxml2-dev", // 2sec
52
-
53
- // For warden
54
- "quota", // 1sec
55
- }
56
-
57
- stage := p.eventLog.BeginStage("Installing dependencies", len(pkgNames))
58
-
59
- for _, pkgName := range pkgNames {
60
- task := stage.BeginTask(fmt.Sprintf("Package %s", pkgName))
61
-
62
- err := task.End(p.installPkg(pkgName))
63
- if err != nil {
64
- return bosherr.WrapError(err, "Installing %s", pkgName)
65
- }
66
- }
67
-
68
- return nil
69
- }
70
-
71
- func (p DepsProvisioner) installPkg(name string) error {
72
- _, _, _, err := p.runner.RunCommand("apt-get", "-y", "install", name)
73
- if err == nil {
74
- return nil
75
- }
76
-
77
- // Avoid running 'apt-get update' since it usually takes 30sec
78
- if strings.Contains(err.Error(), runAptGetUpdateMsg) {
79
- _, _, _, err := p.runner.RunCommand("apt-get", "-y", "update")
80
- if err != nil {
81
- return bosherr.WrapError(err, "Updating sources")
82
- }
83
-
84
- // Try second time after updating
85
- _, _, _, err = p.runner.RunCommand("apt-get", "-y", "install", name)
86
- if err != nil {
87
- return bosherr.WrapError(err, "Installing %s after updating", name)
88
- }
89
- }
90
-
91
- return nil
92
- }
@@ -1,19 +0,0 @@
1
- package vm
2
-
3
- import (
4
- bpagclient "boshprovisioner/agent/client"
5
- )
6
-
7
- // VM represents already provisioned machine
8
- // that can be communicated with via an AgentClient.
9
- type VM struct {
10
- agentClient bpagclient.Client
11
- }
12
-
13
- func NewVM(agentClient bpagclient.Client) VM {
14
- return VM{agentClient: agentClient}
15
- }
16
-
17
- func (vm VM) AgentClient() bpagclient.Client {
18
- return vm.agentClient
19
- }
@@ -1,57 +0,0 @@
1
- package vm
2
-
3
- import (
4
- bosherr "bosh/errors"
5
- boshlog "bosh/logger"
6
-
7
- bpdep "boshprovisioner/deployment"
8
- )
9
-
10
- const vmProvisionerLogTag = "VMProvisioner"
11
-
12
- // VMProvisioner installs system dependencies that
13
- // are usually found on a stemcell, adds vcap user,
14
- // and finally install Agent and Monit.
15
- type VMProvisioner struct {
16
- vcapUserProvisioner VCAPUserProvisioner
17
- depsProvisioner DepsProvisioner
18
- agentProvisioner AgentProvisioner
19
-
20
- logger boshlog.Logger
21
- }
22
-
23
- func NewVMProvisioner(
24
- vcapUserProvisioner VCAPUserProvisioner,
25
- depsProvisioner DepsProvisioner,
26
- agentProvisioner AgentProvisioner,
27
- logger boshlog.Logger,
28
- ) VMProvisioner {
29
- return VMProvisioner{
30
- vcapUserProvisioner: vcapUserProvisioner,
31
- depsProvisioner: depsProvisioner,
32
- agentProvisioner: agentProvisioner,
33
-
34
- logger: logger,
35
- }
36
- }
37
-
38
- func (p VMProvisioner) Provision(instance bpdep.Instance) (VM, error) {
39
- var vm VM
40
-
41
- err := p.vcapUserProvisioner.Provision()
42
- if err != nil {
43
- return vm, bosherr.WrapError(err, "Provisioning vcap user")
44
- }
45
-
46
- err = p.depsProvisioner.Provision()
47
- if err != nil {
48
- return vm, bosherr.WrapError(err, "Provisioning dependencies")
49
- }
50
-
51
- agentClient, err := p.agentProvisioner.Provision(instance)
52
- if err != nil {
53
- return vm, bosherr.WrapError(err, "Provisioning agent")
54
- }
55
-
56
- return NewVM(agentClient), nil
57
- }