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
data/dev/Vagrantfile CHANGED
@@ -24,7 +24,7 @@ Vagrant.configure("2") do |config|
24
24
  end
25
25
 
26
26
  config.vm.provision "bosh" do |c|
27
- c.manifest = `cat example-bosh-manifest.yml`
28
- # c.manifest = `cat example-winston-manifest.yml`
27
+ # c.manifest = `cat example-bosh-manifest.yml`
28
+ c.manifest = `cat example-winston-manifest.yml`
29
29
  end
30
30
  end
@@ -2,8 +2,8 @@ name: room101
2
2
 
3
3
  releases:
4
4
  - name: room101
5
- version: 0.1-dev
6
- url: file:///vagrant/room101-0.1-dev.tgz
5
+ version: 0+dev.3
6
+ url: file:///vagrant/room101-0+dev.3.tgz
7
7
 
8
8
  networks:
9
9
  - name: room101
@@ -42,12 +42,9 @@ jobs:
42
42
  winston:
43
43
  config:
44
44
  jobs:
45
- - name: bosh_unit
46
- privileged: true
47
- build: ci/bosh_unit.yml
48
- inputs:
49
- - resource: ci
50
- - resource: bosh-repo
45
+ - name: nothing
46
+ image: ubuntu
47
+ script: "echo works"
51
48
 
52
49
  prole:
53
50
  address: 127.0.0.1:4637
@@ -0,0 +1,43 @@
1
+ package instance
2
+
3
+ import (
4
+ bosherr "bosh/errors"
5
+ boshlog "bosh/logger"
6
+
7
+ bpdep "boshprovisioner/deployment"
8
+ bpinstupd "boshprovisioner/instance/updater"
9
+ )
10
+
11
+ type Instance struct {
12
+ updater bpinstupd.Updater
13
+
14
+ job bpdep.Job
15
+ depInstance bpdep.Instance
16
+
17
+ logger boshlog.Logger
18
+ }
19
+
20
+ func NewInstance(
21
+ updater bpinstupd.Updater,
22
+ job bpdep.Job,
23
+ depInstance bpdep.Instance,
24
+ logger boshlog.Logger,
25
+ ) Instance {
26
+ return Instance{
27
+ updater: updater,
28
+ job: job,
29
+ depInstance: depInstance,
30
+ logger: logger,
31
+ }
32
+ }
33
+
34
+ func (i Instance) Deprovision() error {
35
+ i.logger.Debug(instanceProvisionerLogTag, "Tearing down instance")
36
+
37
+ err := i.updater.TearDown()
38
+ if err != nil {
39
+ return bosherr.WrapError(err, "Tearing down instance %d", i.depInstance.Index)
40
+ }
41
+
42
+ return nil
43
+ }
@@ -0,0 +1,48 @@
1
+ package instance
2
+
3
+ import (
4
+ bosherr "bosh/errors"
5
+ boshlog "bosh/logger"
6
+
7
+ bpagclient "boshprovisioner/agent/client"
8
+ bpdep "boshprovisioner/deployment"
9
+ bpinstupd "boshprovisioner/instance/updater"
10
+ )
11
+
12
+ const instanceProvisionerLogTag = "InstanceProvisioner"
13
+
14
+ type InstanceProvisioner struct {
15
+ instanceUpdaterFactory bpinstupd.UpdaterFactory
16
+ logger boshlog.Logger
17
+ }
18
+
19
+ func NewInstanceProvisioner(
20
+ instanceUpdaterFactory bpinstupd.UpdaterFactory,
21
+ logger boshlog.Logger,
22
+ ) InstanceProvisioner {
23
+ return InstanceProvisioner{
24
+ instanceUpdaterFactory: instanceUpdaterFactory,
25
+ logger: logger,
26
+ }
27
+ }
28
+
29
+ func (p InstanceProvisioner) Provision(ac bpagclient.Client, job bpdep.Job, depInstance bpdep.Instance) (Instance, error) {
30
+ p.logger.Debug(instanceProvisionerLogTag, "Updating instance")
31
+
32
+ updater := p.instanceUpdaterFactory.NewUpdater(ac, job, depInstance)
33
+
34
+ err := updater.SetUp()
35
+ if err != nil {
36
+ return Instance{}, bosherr.WrapError(err, "Updating instance %d", depInstance.Index)
37
+ }
38
+
39
+ return NewInstance(updater, job, depInstance, p.logger), nil
40
+ }
41
+
42
+ func (p InstanceProvisioner) PreviouslyProvisioned(ac bpagclient.Client, job bpdep.Job, depInstance bpdep.Instance) Instance {
43
+ p.logger.Debug(instanceProvisionerLogTag, "Finding previously provisioned instance")
44
+
45
+ updater := p.instanceUpdaterFactory.NewUpdater(ac, job, depInstance)
46
+
47
+ return NewInstance(updater, job, depInstance, p.logger)
48
+ }
@@ -15,12 +15,11 @@ const updaterLogTag = "Updater"
15
15
  type Updater struct {
16
16
  instanceDesc string
17
17
 
18
- preparer Preparer
19
- drainer Drainer
20
- stopper Stopper
21
- applier bpapplier.Applier
22
- starter Starter
23
- waiter Waiter
18
+ drainer Drainer
19
+ stopper Stopper
20
+ applier bpapplier.Applier
21
+ starter Starter
22
+ waiter Waiter
24
23
 
25
24
  eventLog bpeventlog.Log
26
25
  logger boshlog.Logger
@@ -28,7 +27,6 @@ type Updater struct {
28
27
 
29
28
  func NewUpdater(
30
29
  instanceDesc string,
31
- preparer Preparer,
32
30
  drainer Drainer,
33
31
  stopper Stopper,
34
32
  applier bpapplier.Applier,
@@ -40,62 +38,59 @@ func NewUpdater(
40
38
  return Updater{
41
39
  instanceDesc: instanceDesc,
42
40
 
43
- preparer: preparer,
44
- drainer: drainer,
45
- stopper: stopper,
46
- applier: applier,
47
- starter: starter,
48
- waiter: waiter,
41
+ drainer: drainer,
42
+ stopper: stopper,
43
+ applier: applier,
44
+ starter: starter,
45
+ waiter: waiter,
49
46
 
50
47
  eventLog: eventLog,
51
48
  logger: logger,
52
49
  }
53
50
  }
54
51
 
55
- func (u Updater) Update() error {
56
- stage := u.eventLog.BeginStage(
57
- fmt.Sprintf("Updating instance %s", u.instanceDesc), 6)
52
+ func (u Updater) SetUp() error {
53
+ stage := u.eventLog.BeginStage(fmt.Sprintf("Setting up instance %s", u.instanceDesc), 3)
58
54
 
59
- task := stage.BeginTask("Preparing")
55
+ task := stage.BeginTask("Applying")
60
56
 
61
- err := task.End(u.preparer.Prepare())
57
+ err := task.End(u.applier.Apply())
62
58
  if err != nil {
63
- return bosherr.WrapError(err, "Preparing")
59
+ return bosherr.WrapError(err, "Applying")
64
60
  }
65
61
 
66
- task = stage.BeginTask("Draining")
62
+ task = stage.BeginTask("Starting")
67
63
 
68
- err = task.End(u.drainer.Drain())
64
+ err = task.End(u.starter.Start())
69
65
  if err != nil {
70
- return bosherr.WrapError(err, "Draining")
66
+ return bosherr.WrapError(err, "Starting")
71
67
  }
72
68
 
73
- task = stage.BeginTask("Stopping")
69
+ task = stage.BeginTask("Waiting")
74
70
 
75
- err = task.End(u.stopper.Stop())
71
+ err = task.End(u.waiter.Wait())
76
72
  if err != nil {
77
- return bosherr.WrapError(err, "Stopping")
73
+ return bosherr.WrapError(err, "Waiting")
78
74
  }
79
75
 
80
- task = stage.BeginTask("Applying")
76
+ return nil
77
+ }
81
78
 
82
- err = task.End(u.applier.Apply())
83
- if err != nil {
84
- return bosherr.WrapError(err, "Applying")
85
- }
79
+ func (u Updater) TearDown() error {
80
+ stage := u.eventLog.BeginStage(fmt.Sprintf("Tearing down instance %s", u.instanceDesc), 2)
86
81
 
87
- task = stage.BeginTask("Starting")
82
+ task := stage.BeginTask("Draining")
88
83
 
89
- err = task.End(u.starter.Start())
84
+ err := task.End(u.drainer.Drain())
90
85
  if err != nil {
91
- return bosherr.WrapError(err, "Starting")
86
+ return bosherr.WrapError(err, "Draining")
92
87
  }
93
88
 
94
- task = stage.BeginTask("Waiting")
89
+ task = stage.BeginTask("Stopping")
95
90
 
96
- err = task.End(u.waiter.Wait())
91
+ err = task.End(u.stopper.Stop())
97
92
  if err != nil {
98
- return bosherr.WrapError(err, "Waiting")
93
+ return bosherr.WrapError(err, "Stopping")
99
94
  }
100
95
 
101
96
  return nil
@@ -42,8 +42,6 @@ func (f UpdaterFactory) NewUpdater(
42
42
  depJob bpdep.Job,
43
43
  instance bpdep.Instance,
44
44
  ) Updater {
45
- preparer := NewPreparer(agentClient, f.logger)
46
-
47
45
  drainer := NewDrainer(agentClient, f.logger)
48
46
 
49
47
  stopper := NewStopper(agentClient, f.logger)
@@ -69,7 +67,6 @@ func (f UpdaterFactory) NewUpdater(
69
67
 
70
68
  updater := NewUpdater(
71
69
  fmt.Sprintf("%s/%d", instance.JobName, instance.Index),
72
- preparer,
73
70
  drainer,
74
71
  stopper,
75
72
  applier,
@@ -7,6 +7,7 @@ import (
7
7
  boshsys "bosh/system"
8
8
 
9
9
  bpprov "boshprovisioner/provisioner"
10
+ bpvm "boshprovisioner/vm"
10
11
  )
11
12
 
12
13
  type Config struct {
@@ -24,6 +25,8 @@ type Config struct {
24
25
  Mbus string `json:"mbus"`
25
26
 
26
27
  Blobstore bpprov.BlobstoreConfig `json:"blobstore"`
28
+
29
+ VMProvisioner bpvm.VMProvisionerConfig `json:"vm_provisioner"`
27
30
  }
28
31
 
29
32
  func NewConfigFromPath(path string, fs boshsys.FileSystem) (Config, error) {
@@ -12,6 +12,7 @@ import (
12
12
  bpdep "boshprovisioner/deployment"
13
13
  bpdload "boshprovisioner/downloader"
14
14
  bpeventlog "boshprovisioner/eventlog"
15
+ bpinstance "boshprovisioner/instance"
15
16
  bptplcomp "boshprovisioner/instance/templatescompiler"
16
17
  bpinstupd "boshprovisioner/instance/updater"
17
18
  bppkgscomp "boshprovisioner/packagescompiler"
@@ -19,7 +20,7 @@ import (
19
20
  bprel "boshprovisioner/release"
20
21
  bpreljob "boshprovisioner/release/job"
21
22
  bptar "boshprovisioner/tar"
22
- bpvm "boshprovisioner/vm"
23
+ bpvagrantvm "boshprovisioner/vm/vagrant"
23
24
  )
24
25
 
25
26
  const mainLogTag = "main"
@@ -126,37 +127,38 @@ func main() {
126
127
 
127
128
  deploymentReaderFactory := bpdep.NewReaderFactory(fs, logger)
128
129
 
129
- vmProvisionerFactory := bpvm.NewVMProvisionerFactory(
130
+ vagrantVMProvisionerFactory := bpvagrantvm.NewVMProvisionerFactory(
130
131
  fs,
131
132
  runner,
132
133
  config.AssetsDir,
133
134
  config.Mbus,
134
135
  config.Blobstore.AsMap(),
136
+ config.VMProvisioner,
135
137
  eventLog,
136
138
  logger,
137
139
  )
138
140
 
139
- vmProvisioner := vmProvisionerFactory.NewVMProvisioner()
141
+ vagrantVMProvisioner := vagrantVMProvisionerFactory.NewVMProvisioner()
140
142
 
141
143
  releaseCompiler := bpprov.NewReleaseCompiler(
142
144
  reposFactory.NewBlobstoreReleasesRepo(),
143
145
  releaseReaderFactory,
144
146
  packagesCompilerFactory,
145
147
  templatesCompiler,
146
- vmProvisioner,
148
+ vagrantVMProvisioner,
147
149
  eventLog,
148
150
  logger,
149
151
  )
150
152
 
151
- instanceProvisioner := bpprov.NewInstanceProvisioner(
153
+ instanceProvisioner := bpinstance.NewInstanceProvisioner(
152
154
  updaterFactory,
153
- vmProvisioner,
154
155
  logger,
155
156
  )
156
157
 
157
158
  deploymentProvisioner := bpprov.NewDeploymentProvisioner(
158
159
  config.ManifestPath,
159
160
  deploymentReaderFactory,
161
+ vagrantVMProvisioner,
160
162
  releaseCompiler,
161
163
  instanceProvisioner,
162
164
  eventLog,
@@ -6,6 +6,8 @@ import (
6
6
 
7
7
  bpdep "boshprovisioner/deployment"
8
8
  bpeventlog "boshprovisioner/eventlog"
9
+ bpinstance "boshprovisioner/instance"
10
+ bpvm "boshprovisioner/vm"
9
11
  )
10
12
 
11
13
  const deploymentProvisionerLogTag = "DeploymentProvisioner"
@@ -16,8 +18,9 @@ type DeploymentProvisioner struct {
16
18
  manifestPath string
17
19
  deploymentReaderFactory bpdep.ReaderFactory
18
20
 
21
+ vmProvisioner bpvm.VMProvisioner
19
22
  releaseCompiler ReleaseCompiler
20
- instanceProvisioner InstanceProvisioner
23
+ instanceProvisioner bpinstance.InstanceProvisioner
21
24
 
22
25
  eventLog bpeventlog.Log
23
26
  logger boshlog.Logger
@@ -26,8 +29,9 @@ type DeploymentProvisioner struct {
26
29
  func NewDeploymentProvisioner(
27
30
  manifestPath string,
28
31
  deploymentReaderFactory bpdep.ReaderFactory,
32
+ vmProvisioner bpvm.VMProvisioner,
29
33
  releaseCompiler ReleaseCompiler,
30
- instanceProvisioner InstanceProvisioner,
34
+ instanceProvisioner bpinstance.InstanceProvisioner,
31
35
  eventLog bpeventlog.Log,
32
36
  logger boshlog.Logger,
33
37
  ) DeploymentProvisioner {
@@ -35,6 +39,7 @@ func NewDeploymentProvisioner(
35
39
  manifestPath: manifestPath,
36
40
  deploymentReaderFactory: deploymentReaderFactory,
37
41
 
42
+ vmProvisioner: vmProvisioner,
38
43
  releaseCompiler: releaseCompiler,
39
44
  instanceProvisioner: instanceProvisioner,
40
45
 
@@ -57,21 +62,47 @@ func (p DeploymentProvisioner) Provision() error {
57
62
 
58
63
  task = stage.BeginTask("Validating instance")
59
64
 
60
- job, instance, err := p.validateInstance(deployment)
65
+ job, depInstance, err := p.validateInstance(deployment)
61
66
  if task.End(err) != nil {
62
67
  return bosherr.WrapError(err, "Validating instance")
63
68
  }
64
69
 
70
+ // todo VM was possibly provisioned last time
71
+ vm, err := p.vmProvisioner.Provision(depInstance)
72
+ if err != nil {
73
+ return bosherr.WrapError(err, "Provisioning VM")
74
+ }
75
+
76
+ instance := p.instanceProvisioner.PreviouslyProvisioned(vm.AgentClient(), job, depInstance)
77
+
78
+ err = instance.Deprovision()
79
+ if err != nil {
80
+ return bosherr.WrapError(err, "Deprovisioning instance")
81
+ }
82
+
83
+ // Deprovision VM before using release compiler since it will try to provision its own VM
84
+ err = vm.Deprovision()
85
+ if err != nil {
86
+ return bosherr.WrapError(err, "Deprovisioning VM")
87
+ }
88
+
65
89
  err = p.releaseCompiler.Compile(deployment.CompilationInstance, deployment.Releases)
66
90
  if err != nil {
67
91
  return bosherr.WrapError(err, "Compiling releases")
68
92
  }
69
93
 
70
- err = p.instanceProvisioner.Provision(job, instance)
94
+ vm, err = p.vmProvisioner.Provision(depInstance)
71
95
  if err != nil {
72
- return bosherr.WrapError(err, "Provisioning instance")
96
+ return bosherr.WrapError(err, "Provisioning VM")
73
97
  }
74
98
 
99
+ _, err = p.instanceProvisioner.Provision(vm.AgentClient(), job, depInstance)
100
+ if err != nil {
101
+ return bosherr.WrapError(err, "Starting instance")
102
+ }
103
+
104
+ // Do not Deprovision() VM to keep instance running
105
+
75
106
  return nil
76
107
  }
77
108
 
@@ -59,6 +59,8 @@ func (p ReleaseCompiler) Compile(instance bpdep.Instance, releases []bpdep.Relea
59
59
  return bosherr.WrapError(err, "Provisioning agent")
60
60
  }
61
61
 
62
+ defer vm.Deprovision()
63
+
62
64
  err = p.uploadReleases(releases)
63
65
  if err != nil {
64
66
  return bosherr.WrapError(err, "Uploading releases")
@@ -87,7 +87,7 @@ func (p AgentProvisioner) Provision(instance bpdep.Instance) (bpagclient.Client,
87
87
 
88
88
  task = stage.BeginTask("Starting")
89
89
 
90
- err = task.End(p.runitProvisioner.Provision("agent"))
90
+ err = task.End(p.runitProvisioner.Provision("agent", 10*time.Second))
91
91
  if err != nil {
92
92
  return nil, bosherr.WrapError(err, "Provisioning agent with runit")
93
93
  }