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.
- data/dev/Vagrantfile +2 -2
- data/dev/example-winston-manifest.yml +5 -8
- data/go/src/boshprovisioner/instance/instance.go +43 -0
- data/go/src/boshprovisioner/instance/instance_provisioner.go +48 -0
- data/go/src/boshprovisioner/instance/updater/updater.go +31 -36
- data/go/src/boshprovisioner/instance/updater/updater_factory.go +0 -3
- data/go/src/boshprovisioner/main/config.go +3 -0
- data/go/src/boshprovisioner/main/main.go +8 -6
- data/go/src/boshprovisioner/provisioner/deployment_provisioner.go +36 -5
- data/go/src/boshprovisioner/provisioner/release_compiler.go +2 -0
- data/go/src/boshprovisioner/vm/{agent_provisioner.go → vagrant/agent_provisioner.go} +1 -1
- data/go/src/boshprovisioner/vm/{asset_manager.go → vagrant/asset_manager.go} +0 -0
- data/go/src/boshprovisioner/vm/vagrant/deps_provisioner.go +200 -0
- data/go/src/boshprovisioner/vm/{monit_provisioner.go → vagrant/monit_provisioner.go} +3 -1
- data/go/src/boshprovisioner/vm/{runit_provisioner.go → vagrant/runit_provisioner.go} +15 -11
- data/go/src/boshprovisioner/vm/{simple_cmds.go → vagrant/simple_cmds.go} +0 -0
- data/go/src/boshprovisioner/vm/{vcap_user_provisioner.go → vagrant/vcap_user_provisioner.go} +0 -0
- data/go/src/boshprovisioner/vm/vagrant/vm.go +27 -0
- data/go/src/boshprovisioner/vm/vagrant/vm_provisioner.go +81 -0
- data/go/src/boshprovisioner/vm/{vm_provisioner_factory.go → vagrant/vm_provisioner_factory.go} +14 -7
- data/go/src/boshprovisioner/vm/vm_interface.go +26 -0
- data/lib/vagrant-bosh/assets/provisioner +0 -0
- data/lib/vagrant-bosh/bootstrapper.rb +10 -6
- data/lib/vagrant-bosh/config.rb +6 -0
- data/lib/vagrant-bosh/provisioner.rb +1 -1
- data/lib/vagrant-bosh/version.rb +1 -1
- metadata +22 -19
- checksums.yaml +0 -7
- data/go/src/boshprovisioner/instance/updater/preparer.go +0 -39
- data/go/src/boshprovisioner/provisioner/instance_provisioner.go +0 -48
- data/go/src/boshprovisioner/vm/deps_provisioner.go +0 -92
- data/go/src/boshprovisioner/vm/vm.go +0 -19
- 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
|
-
|
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.
|
6
|
-
url: file:///vagrant/room101-0
|
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:
|
46
|
-
|
47
|
-
|
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
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
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
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
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)
|
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("
|
55
|
+
task := stage.BeginTask("Applying")
|
60
56
|
|
61
|
-
err := task.End(u.
|
57
|
+
err := task.End(u.applier.Apply())
|
62
58
|
if err != nil {
|
63
|
-
return bosherr.WrapError(err, "
|
59
|
+
return bosherr.WrapError(err, "Applying")
|
64
60
|
}
|
65
61
|
|
66
|
-
task = stage.BeginTask("
|
62
|
+
task = stage.BeginTask("Starting")
|
67
63
|
|
68
|
-
err = task.End(u.
|
64
|
+
err = task.End(u.starter.Start())
|
69
65
|
if err != nil {
|
70
|
-
return bosherr.WrapError(err, "
|
66
|
+
return bosherr.WrapError(err, "Starting")
|
71
67
|
}
|
72
68
|
|
73
|
-
task = stage.BeginTask("
|
69
|
+
task = stage.BeginTask("Waiting")
|
74
70
|
|
75
|
-
err = task.End(u.
|
71
|
+
err = task.End(u.waiter.Wait())
|
76
72
|
if err != nil {
|
77
|
-
return bosherr.WrapError(err, "
|
73
|
+
return bosherr.WrapError(err, "Waiting")
|
78
74
|
}
|
79
75
|
|
80
|
-
|
76
|
+
return nil
|
77
|
+
}
|
81
78
|
|
82
|
-
|
83
|
-
|
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
|
82
|
+
task := stage.BeginTask("Draining")
|
88
83
|
|
89
|
-
err
|
84
|
+
err := task.End(u.drainer.Drain())
|
90
85
|
if err != nil {
|
91
|
-
return bosherr.WrapError(err, "
|
86
|
+
return bosherr.WrapError(err, "Draining")
|
92
87
|
}
|
93
88
|
|
94
|
-
task = stage.BeginTask("
|
89
|
+
task = stage.BeginTask("Stopping")
|
95
90
|
|
96
|
-
err = task.End(u.
|
91
|
+
err = task.End(u.stopper.Stop())
|
97
92
|
if err != nil {
|
98
|
-
return bosherr.WrapError(err, "
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
148
|
+
vagrantVMProvisioner,
|
147
149
|
eventLog,
|
148
150
|
logger,
|
149
151
|
)
|
150
152
|
|
151
|
-
instanceProvisioner :=
|
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,
|
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.
|
94
|
+
vm, err = p.vmProvisioner.Provision(depInstance)
|
71
95
|
if err != nil {
|
72
|
-
return bosherr.WrapError(err, "Provisioning
|
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
|
}
|