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