vagrant-bosh 0.0.2 → 0.0.3

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