vagrant-bosh 0.0.4 → 0.0.5
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.
- checksums.yaml +7 -0
- data/README.md +2 -0
- data/go/src/boshprovisioner/instance/templatescompiler/concrete_templates_compiler.go +82 -71
- data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/concrete_jobs_repository.go +28 -6
- data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/concrete_runtime_packages_repository.go +29 -21
- data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/concrete_template_to_job_repository.go +20 -10
- data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/jobs_repository_interface.go +24 -6
- data/go/src/boshprovisioner/release/dir_reader.go +23 -4
- data/go/src/boshprovisioner/vm/vagrant/agent_provisioner.go +4 -4
- data/lib/vagrant-bosh/assets/provisioner +0 -0
- data/lib/vagrant-bosh/config.rb +7 -0
- data/lib/vagrant-bosh/deployment/release_uploader.rb +17 -15
- data/lib/vagrant-bosh/deployment/uploadable_release.rb +7 -4
- data/lib/vagrant-bosh/deployment/uploadable_release_factory.rb +3 -1
- data/lib/vagrant-bosh/provisioner.rb +1 -0
- data/lib/vagrant-bosh/version.rb +1 -1
- metadata +7 -9
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9b39c42d2c0ba1faafad24df1d60a9d0f0c5a307
|
4
|
+
data.tar.gz: a0e9d0f83323e94d562920c7b36bed3c50e3b44d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e41b4554521cc02ef5e25b4adc3a49fd86569abcaf2ebf52e204c0230573c4138a28465e3ad99bcb41c0315637db2a220b0dcab15cfd4fd4c98ff3c84f5020b0
|
7
|
+
data.tar.gz: 896cf5defcceb1c98e6ee9825e07e2946889874884eba1be76b851edbf2359a2b2236a07f7b341bae4bec1ebfdc75d0356c79ca74b7116df80650c87705b1fbd
|
data/README.md
CHANGED
@@ -87,13 +87,13 @@ func (tc ConcreteTemplatesCompiler) Precompile(release bprel.Release) error {
|
|
87
87
|
}
|
88
88
|
}
|
89
89
|
|
90
|
-
err
|
90
|
+
releaseJobRec, err := tc.tplToJobRepo.SaveForJob(release, job)
|
91
91
|
if err != nil {
|
92
92
|
return bosherr.WrapError(err, "Saving release job %s", job.Name)
|
93
93
|
}
|
94
94
|
|
95
95
|
// todo associate to release instead
|
96
|
-
err = tc.runPkgsRepo.
|
96
|
+
err = tc.runPkgsRepo.SaveAll(releaseJobRec, allPkgs)
|
97
97
|
if err != nil {
|
98
98
|
return bosherr.WrapError(err, "Saving release job %s", job.Name)
|
99
99
|
}
|
@@ -104,12 +104,7 @@ func (tc ConcreteTemplatesCompiler) Precompile(release bprel.Release) error {
|
|
104
104
|
|
105
105
|
// Compile populates blobstore with rendered jobs for a given deployment instance.
|
106
106
|
func (tc ConcreteTemplatesCompiler) Compile(job bpdep.Job, instance bpdep.Instance) error {
|
107
|
-
|
108
|
-
if err != nil {
|
109
|
-
return err
|
110
|
-
}
|
111
|
-
|
112
|
-
blobID, fingerprint, err := tc.compileJob(relJobReaders, instance)
|
107
|
+
blobID, fingerprint, err := tc.compileJob(job, instance)
|
113
108
|
if err != nil {
|
114
109
|
return err
|
115
110
|
}
|
@@ -132,18 +127,18 @@ func (tc ConcreteTemplatesCompiler) Compile(job bpdep.Job, instance bpdep.Instan
|
|
132
127
|
func (tc ConcreteTemplatesCompiler) FindPackages(template bpdep.Template) ([]bprel.Package, error) {
|
133
128
|
var pkgs []bprel.Package
|
134
129
|
|
135
|
-
|
130
|
+
releaseJobRec, found, err := tc.tplToJobRepo.FindByTemplate(template)
|
136
131
|
if err != nil {
|
137
|
-
return pkgs, bosherr.WrapError(err, "Finding job by template %s", template.Name)
|
132
|
+
return pkgs, bosherr.WrapError(err, "Finding release job record by template %s", template.Name)
|
138
133
|
} else if !found {
|
139
|
-
return pkgs, bosherr.New("Expected to find job by template %s", template.Name)
|
134
|
+
return pkgs, bosherr.New("Expected to find release job record by template %s", template.Name)
|
140
135
|
}
|
141
136
|
|
142
|
-
pkgs, found, err = tc.runPkgsRepo.
|
137
|
+
pkgs, found, err = tc.runPkgsRepo.Find(releaseJobRec)
|
143
138
|
if err != nil {
|
144
|
-
return pkgs, bosherr.WrapError(err, "Finding packages by job %
|
139
|
+
return pkgs, bosherr.WrapError(err, "Finding packages by release job record %v", releaseJobRec)
|
145
140
|
} else if !found {
|
146
|
-
return pkgs, bosherr.New("Expected to find packages by job %
|
141
|
+
return pkgs, bosherr.New("Expected to find packages by release job record %v", releaseJobRec)
|
147
142
|
}
|
148
143
|
|
149
144
|
return pkgs, nil
|
@@ -167,44 +162,13 @@ func (tc ConcreteTemplatesCompiler) FindRenderedArchive(job bpdep.Job, instance
|
|
167
162
|
return renderedArchiveRec, nil
|
168
163
|
}
|
169
164
|
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
func (tc ConcreteTemplatesCompiler) buildJobReaders(job bpdep.Job) ([]jobReader, error) {
|
176
|
-
var readers []jobReader
|
177
|
-
|
178
|
-
for _, template := range job.Templates {
|
179
|
-
relJob, found, err := tc.tplToJobRepo.FindByTemplate(template)
|
180
|
-
if err != nil {
|
181
|
-
return readers, bosherr.WrapError(err, "Finding dep-template -> rel-job %s", template.Name)
|
182
|
-
} else if !found {
|
183
|
-
return readers, bosherr.New("Expected to find dep-template -> rel-job %s", template.Name)
|
184
|
-
}
|
185
|
-
|
186
|
-
jobRec, found, err := tc.jobsRepo.Find(relJob)
|
187
|
-
if err != nil {
|
188
|
-
return readers, bosherr.WrapError(err, "Finding job source blob %s", template.Name)
|
189
|
-
} else if !found {
|
190
|
-
return readers, bosherr.New("Expected to find job source blob %s", template.Name)
|
191
|
-
}
|
192
|
-
|
193
|
-
jobURL := fmt.Sprintf("blobstore:///%s?fingerprint=%s", jobRec.BlobID, jobRec.SHA1)
|
194
|
-
|
195
|
-
reader := jobReader{
|
196
|
-
relJob: relJob,
|
197
|
-
tarReader: tc.jobReaderFactory.NewTarReader(jobURL),
|
198
|
-
}
|
199
|
-
|
200
|
-
readers = append(readers, reader)
|
165
|
+
// compileJob produces and saves rendered templates archive to a blobstore.
|
166
|
+
func (tc ConcreteTemplatesCompiler) compileJob(job bpdep.Job, instance bpdep.Instance) (string, string, error) {
|
167
|
+
jobReaders, err := tc.buildJobReaders(job)
|
168
|
+
if err != nil {
|
169
|
+
return "", "", bosherr.WrapError(err, "Building job readers")
|
201
170
|
}
|
202
171
|
|
203
|
-
return readers, nil
|
204
|
-
}
|
205
|
-
|
206
|
-
// compileJob produces and saves rendered templates archive to a blobstore.
|
207
|
-
func (tc ConcreteTemplatesCompiler) compileJob(jobReaders []jobReader, instance bpdep.Instance) (string, string, error) {
|
208
172
|
var relJobs []bpreljob.Job
|
209
173
|
|
210
174
|
for _, jobReader := range jobReaders {
|
@@ -215,7 +179,7 @@ func (tc ConcreteTemplatesCompiler) compileJob(jobReaders []jobReader, instance
|
|
215
179
|
|
216
180
|
defer jobReader.tarReader.Close()
|
217
181
|
|
218
|
-
err = tc.associatePackages(jobReader.
|
182
|
+
err = tc.associatePackages(jobReader.rec, relJob)
|
219
183
|
if err != nil {
|
220
184
|
return "", "", bosherr.WrapError(err, "Preparing runtime dep packages")
|
221
185
|
}
|
@@ -238,36 +202,83 @@ func (tc ConcreteTemplatesCompiler) compileJob(jobReaders []jobReader, instance
|
|
238
202
|
return blobID, fingerprint, nil
|
239
203
|
}
|
240
204
|
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
}
|
205
|
+
type jobReader struct {
|
206
|
+
rec bpjobsrepo.ReleaseJobRecord
|
207
|
+
tarReader *bpreljob.TarReader
|
208
|
+
}
|
246
209
|
|
247
|
-
|
248
|
-
|
210
|
+
func (tc ConcreteTemplatesCompiler) buildJobReaders(job bpdep.Job) ([]jobReader, error) {
|
211
|
+
var readers []jobReader
|
212
|
+
|
213
|
+
for _, template := range job.Templates {
|
214
|
+
rec, found, err := tc.tplToJobRepo.FindByTemplate(template)
|
249
215
|
if err != nil {
|
250
|
-
return bosherr.WrapError(err, "Finding
|
216
|
+
return readers, bosherr.WrapError(err, "Finding dep-template -> release-job record %s", template.Name)
|
251
217
|
} else if !found {
|
252
|
-
return bosherr.New("Expected to find
|
218
|
+
return readers, bosherr.New("Expected to find dep-template -> release-job record %s", template.Name)
|
253
219
|
}
|
254
220
|
|
255
|
-
|
221
|
+
jobRec, found, err := tc.jobsRepo.FindByReleaseJob(rec)
|
222
|
+
if err != nil {
|
223
|
+
return readers, bosherr.WrapError(err, "Finding job source blob %s", template.Name)
|
224
|
+
} else if !found {
|
225
|
+
return readers, bosherr.New("Expected to find job source blob %s -- %s", template.Name, rec)
|
226
|
+
}
|
256
227
|
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
}
|
263
|
-
}
|
228
|
+
jobURL := fmt.Sprintf("blobstore:///%s?fingerprint=%s", jobRec.BlobID, jobRec.SHA1)
|
229
|
+
|
230
|
+
reader := jobReader{
|
231
|
+
rec: rec,
|
232
|
+
tarReader: tc.jobReaderFactory.NewTarReader(jobURL),
|
264
233
|
}
|
265
234
|
|
266
|
-
|
267
|
-
|
268
|
-
|
235
|
+
readers = append(readers, reader)
|
236
|
+
}
|
237
|
+
|
238
|
+
return readers, nil
|
239
|
+
}
|
240
|
+
|
241
|
+
func (tc ConcreteTemplatesCompiler) associatePackages(rec bpjobsrepo.ReleaseJobRecord, relJob bpreljob.Job) error {
|
242
|
+
_, found, err := tc.runPkgsRepo.Find(rec)
|
243
|
+
if err != nil {
|
244
|
+
return bosherr.WrapError(err, "Finding runtime deps for %s", rec)
|
245
|
+
}
|
246
|
+
|
247
|
+
if found {
|
248
|
+
return nil
|
249
|
+
}
|
250
|
+
|
251
|
+
// Find all packages in the same release,
|
252
|
+
// regardless if job previously was associated with packages
|
253
|
+
allPkgs, found, err := tc.runPkgsRepo.FindAll(rec)
|
254
|
+
if err != nil {
|
255
|
+
return bosherr.WrapError(err, "Finding rel-job -> rel-pkgs %s", rec)
|
256
|
+
} else if !found {
|
257
|
+
return bosherr.New("Expected to find rel-job -> rel-pkgs %s", rec)
|
258
|
+
}
|
259
|
+
|
260
|
+
var pkgs []bprel.Package
|
261
|
+
|
262
|
+
// From all packages, select packages that are used by the job
|
263
|
+
for _, pkg := range allPkgs {
|
264
|
+
for _, p := range relJob.Packages {
|
265
|
+
if pkg.Name == p.Name {
|
266
|
+
pkgs = append(pkgs, pkg)
|
267
|
+
break
|
268
|
+
}
|
269
269
|
}
|
270
270
|
}
|
271
271
|
|
272
|
+
// Return error if at least one depedency is missing
|
273
|
+
if len(pkgs) != len(relJob.Packages) {
|
274
|
+
return bosherr.New("Expected to find all release packages")
|
275
|
+
}
|
276
|
+
|
277
|
+
// Associate those packages with a job
|
278
|
+
err = tc.runPkgsRepo.Save(rec, pkgs)
|
279
|
+
if err != nil {
|
280
|
+
return bosherr.WrapError(err, "Saving job packages %s", rec)
|
281
|
+
}
|
282
|
+
|
272
283
|
return nil
|
273
284
|
}
|
@@ -17,7 +17,8 @@ type jobToJobKey struct {
|
|
17
17
|
JobName string
|
18
18
|
JobVersion string
|
19
19
|
|
20
|
-
// Fingerprint of a
|
20
|
+
// Fingerprint of a job captures its dependenices; however,
|
21
|
+
// that does not capture package changes in an associated release.
|
21
22
|
JobFingerprint string
|
22
23
|
}
|
23
24
|
|
@@ -34,28 +35,49 @@ func NewConcreteJobsRepository(
|
|
34
35
|
func (r CJRepository) Find(job bprel.Job) (JobRecord, bool, error) {
|
35
36
|
var record JobRecord
|
36
37
|
|
37
|
-
err := r.index.Find(r.
|
38
|
+
err := r.index.Find(r.key(job), &record)
|
38
39
|
if err != nil {
|
39
40
|
if err == bpindex.ErrNotFound {
|
40
41
|
return record, false, nil
|
41
42
|
}
|
42
43
|
|
43
|
-
return record, false, bosherr.WrapError(err, "Finding
|
44
|
+
return record, false, bosherr.WrapError(err, "Finding job record")
|
45
|
+
}
|
46
|
+
|
47
|
+
return record, true, nil
|
48
|
+
}
|
49
|
+
|
50
|
+
func (r CJRepository) FindByReleaseJob(rec ReleaseJobRecord) (JobRecord, bool, error) {
|
51
|
+
var record JobRecord
|
52
|
+
|
53
|
+
key := jobToJobKey{
|
54
|
+
JobName: rec.JobName,
|
55
|
+
JobVersion: rec.JobVersion,
|
56
|
+
JobFingerprint: rec.JobFingerprint,
|
57
|
+
}
|
58
|
+
|
59
|
+
err := r.index.Find(key, &record)
|
60
|
+
if err != nil {
|
61
|
+
if err == bpindex.ErrNotFound {
|
62
|
+
return record, false, nil
|
63
|
+
}
|
64
|
+
|
65
|
+
return record, false, bosherr.WrapError(err, "Finding job record")
|
44
66
|
}
|
45
67
|
|
46
68
|
return record, true, nil
|
47
69
|
}
|
48
70
|
|
49
71
|
func (r CJRepository) Save(job bprel.Job, record JobRecord) error {
|
50
|
-
err := r.index.Save(r.
|
72
|
+
err := r.index.Save(r.key(job), record)
|
51
73
|
if err != nil {
|
52
|
-
return bosherr.WrapError(err, "Saving
|
74
|
+
return bosherr.WrapError(err, "Saving job record")
|
53
75
|
}
|
54
76
|
|
55
77
|
return nil
|
56
78
|
}
|
57
79
|
|
58
|
-
func (r CJRepository)
|
80
|
+
func (r CJRepository) key(job bprel.Job) jobToJobKey {
|
59
81
|
return jobToJobKey{
|
60
82
|
JobName: job.Name,
|
61
83
|
JobVersion: job.Version,
|
@@ -24,6 +24,9 @@ func NewConcreteRuntimePackagesRepository(
|
|
24
24
|
}
|
25
25
|
|
26
26
|
type jobToPkgsKey struct {
|
27
|
+
ReleaseName string
|
28
|
+
ReleaseVersion string
|
29
|
+
|
27
30
|
// Mostly for ease of debugging
|
28
31
|
JobName string
|
29
32
|
JobVersion string
|
@@ -35,70 +38,75 @@ type jobToPkgsKey struct {
|
|
35
38
|
ContainsAllPackages bool
|
36
39
|
}
|
37
40
|
|
38
|
-
func (r CRPRepository)
|
41
|
+
func (r CRPRepository) Find(rec ReleaseJobRecord) ([]bprel.Package, bool, error) {
|
39
42
|
var pkgs []bprel.Package
|
40
43
|
|
41
|
-
err := r.index.Find(r.jobSpecificKey(
|
44
|
+
err := r.index.Find(r.jobSpecificKey(rec), &pkgs)
|
42
45
|
if err != nil {
|
43
46
|
if err == bpindex.ErrNotFound {
|
44
47
|
return pkgs, false, nil
|
45
48
|
}
|
46
49
|
|
47
|
-
return pkgs, false, bosherr.WrapError(err, "Finding rel-job -> specific rel-pkgs record")
|
50
|
+
return pkgs, false, bosherr.WrapError(err, "Finding rel-job record -> specific rel-pkgs record")
|
48
51
|
}
|
49
52
|
|
50
53
|
return pkgs, true, nil
|
51
54
|
}
|
52
55
|
|
53
|
-
func (r CRPRepository)
|
54
|
-
err := r.index.Save(r.jobSpecificKey(
|
56
|
+
func (r CRPRepository) Save(rec ReleaseJobRecord, pkgs []bprel.Package) error {
|
57
|
+
err := r.index.Save(r.jobSpecificKey(rec), pkgs)
|
55
58
|
if err != nil {
|
56
|
-
return bosherr.WrapError(err, "Saving rel-job -> specific rel-pkgs record")
|
59
|
+
return bosherr.WrapError(err, "Saving rel-job record -> specific rel-pkgs record")
|
57
60
|
}
|
58
61
|
|
59
62
|
return nil
|
60
63
|
}
|
61
64
|
|
62
|
-
|
63
|
-
func (r CRPRepository) FindAllByReleaseJob(job bprel.Job) ([]bprel.Package, bool, error) {
|
65
|
+
func (r CRPRepository) FindAll(rec ReleaseJobRecord) ([]bprel.Package, bool, error) {
|
64
66
|
var pkgs []bprel.Package
|
65
67
|
|
66
|
-
err := r.index.Find(r.jobAllKey(
|
68
|
+
err := r.index.Find(r.jobAllKey(rec), &pkgs)
|
67
69
|
if err != nil {
|
68
70
|
if err == bpindex.ErrNotFound {
|
69
71
|
return pkgs, false, nil
|
70
72
|
}
|
71
73
|
|
72
|
-
return pkgs, false, bosherr.WrapError(err, "Finding rel-job -> all rel-pkgs record")
|
74
|
+
return pkgs, false, bosherr.WrapError(err, "Finding rel-job record -> all rel-pkgs record")
|
73
75
|
}
|
74
76
|
|
75
77
|
return pkgs, true, nil
|
76
78
|
}
|
77
79
|
|
78
|
-
func (r CRPRepository)
|
79
|
-
err := r.index.Save(r.jobAllKey(
|
80
|
+
func (r CRPRepository) SaveAll(rec ReleaseJobRecord, pkgs []bprel.Package) error {
|
81
|
+
err := r.index.Save(r.jobAllKey(rec), pkgs)
|
80
82
|
if err != nil {
|
81
|
-
return bosherr.WrapError(err, "Saving rel-job -> all rel-pkgs record")
|
83
|
+
return bosherr.WrapError(err, "Saving rel-job record -> all rel-pkgs record")
|
82
84
|
}
|
83
85
|
|
84
86
|
return nil
|
85
87
|
}
|
86
88
|
|
87
|
-
func (r CRPRepository) jobSpecificKey(
|
89
|
+
func (r CRPRepository) jobSpecificKey(rec ReleaseJobRecord) jobToPkgsKey {
|
88
90
|
return jobToPkgsKey{
|
89
|
-
|
90
|
-
|
91
|
-
|
91
|
+
ReleaseName: rec.ReleaseName,
|
92
|
+
ReleaseVersion: rec.ReleaseVersion,
|
93
|
+
|
94
|
+
JobName: rec.JobName,
|
95
|
+
JobVersion: rec.JobVersion,
|
96
|
+
JobFingerprint: rec.JobFingerprint,
|
92
97
|
|
93
98
|
ContainsAllPackages: false,
|
94
99
|
}
|
95
100
|
}
|
96
101
|
|
97
|
-
func (r CRPRepository) jobAllKey(
|
102
|
+
func (r CRPRepository) jobAllKey(rec ReleaseJobRecord) jobToPkgsKey {
|
98
103
|
return jobToPkgsKey{
|
99
|
-
|
100
|
-
|
101
|
-
|
104
|
+
ReleaseName: rec.ReleaseName,
|
105
|
+
ReleaseVersion: rec.ReleaseVersion,
|
106
|
+
|
107
|
+
JobName: rec.JobName,
|
108
|
+
JobVersion: rec.JobVersion,
|
109
|
+
JobFingerprint: rec.JobFingerprint,
|
102
110
|
|
103
111
|
ContainsAllPackages: true,
|
104
112
|
}
|
@@ -30,28 +30,38 @@ func NewConcreteTemplateToJobRepository(
|
|
30
30
|
}
|
31
31
|
}
|
32
32
|
|
33
|
-
func (r CTTJRepository) FindByTemplate(template bpdep.Template) (
|
34
|
-
var
|
33
|
+
func (r CTTJRepository) FindByTemplate(template bpdep.Template) (ReleaseJobRecord, bool, error) {
|
34
|
+
var rec ReleaseJobRecord
|
35
35
|
|
36
|
-
err := r.index.Find(r.templateKey(template), &
|
36
|
+
err := r.index.Find(r.templateKey(template), &rec)
|
37
37
|
if err != nil {
|
38
38
|
if err == bpindex.ErrNotFound {
|
39
|
-
return
|
39
|
+
return rec, false, nil
|
40
40
|
}
|
41
41
|
|
42
|
-
return
|
42
|
+
return rec, false, bosherr.WrapError(err, "Finding dep-template -> release-job record")
|
43
43
|
}
|
44
44
|
|
45
|
-
return
|
45
|
+
return rec, true, nil
|
46
46
|
}
|
47
47
|
|
48
|
-
func (r CTTJRepository) SaveForJob(release bprel.Release, job bprel.Job) error {
|
49
|
-
|
48
|
+
func (r CTTJRepository) SaveForJob(release bprel.Release, job bprel.Job) (ReleaseJobRecord, error) {
|
49
|
+
// todo redundant info stored in value
|
50
|
+
rec := ReleaseJobRecord{
|
51
|
+
ReleaseName: release.Name,
|
52
|
+
ReleaseVersion: release.Version,
|
53
|
+
|
54
|
+
JobName: job.Name,
|
55
|
+
JobVersion: job.Version,
|
56
|
+
JobFingerprint: job.Fingerprint,
|
57
|
+
}
|
58
|
+
|
59
|
+
err := r.index.Save(r.jobKey(release, job), rec)
|
50
60
|
if err != nil {
|
51
|
-
return bosherr.WrapError(err, "Saving dep-template ->
|
61
|
+
return rec, bosherr.WrapError(err, "Saving dep-template -> release-job record")
|
52
62
|
}
|
53
63
|
|
54
|
-
return nil
|
64
|
+
return rec, nil
|
55
65
|
}
|
56
66
|
|
57
67
|
func (r CTTJRepository) templateKey(template bpdep.Template) templateToJobKey {
|
data/go/src/boshprovisioner/instance/templatescompiler/jobsrepo/jobs_repository_interface.go
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
package jobsrepo
|
2
2
|
|
3
3
|
import (
|
4
|
+
"fmt"
|
5
|
+
|
4
6
|
bpdep "boshprovisioner/deployment"
|
5
7
|
bprel "boshprovisioner/release"
|
6
8
|
)
|
@@ -10,22 +12,38 @@ type JobRecord struct {
|
|
10
12
|
SHA1 string
|
11
13
|
}
|
12
14
|
|
15
|
+
type ReleaseJobRecord struct {
|
16
|
+
ReleaseName string
|
17
|
+
ReleaseVersion string
|
18
|
+
|
19
|
+
JobName string
|
20
|
+
JobVersion string
|
21
|
+
JobFingerprint string
|
22
|
+
}
|
23
|
+
|
24
|
+
func (r ReleaseJobRecord) String() string {
|
25
|
+
return fmt.Sprintf("job %s in release %s/%s", r.JobName, r.ReleaseName, r.ReleaseVersion)
|
26
|
+
}
|
27
|
+
|
13
28
|
// JobsRepository maintains list of job source code as blobs
|
14
29
|
type JobsRepository interface {
|
15
30
|
Find(bprel.Job) (JobRecord, bool, error)
|
16
31
|
Save(bprel.Job, JobRecord) error
|
32
|
+
|
33
|
+
FindByReleaseJob(ReleaseJobRecord) (JobRecord, bool, error)
|
17
34
|
}
|
18
35
|
|
19
36
|
type TemplateToJobRepository interface {
|
20
|
-
FindByTemplate(bpdep.Template) (
|
21
|
-
SaveForJob(bprel.Release, bprel.Job) error
|
37
|
+
FindByTemplate(bpdep.Template) (ReleaseJobRecord, bool, error)
|
38
|
+
SaveForJob(bprel.Release, bprel.Job) (ReleaseJobRecord, error)
|
22
39
|
}
|
23
40
|
|
41
|
+
// RuntimePackagesRepository maintains list of releases' packages
|
24
42
|
type RuntimePackagesRepository interface {
|
25
|
-
|
26
|
-
|
43
|
+
Find(ReleaseJobRecord) ([]bprel.Package, bool, error)
|
44
|
+
Save(ReleaseJobRecord, []bprel.Package) error
|
27
45
|
|
28
46
|
// Keeps association between all possible packages for a job
|
29
|
-
|
30
|
-
|
47
|
+
FindAll(ReleaseJobRecord) ([]bprel.Package, bool, error)
|
48
|
+
SaveAll(ReleaseJobRecord, []bprel.Package) error
|
31
49
|
}
|
@@ -73,18 +73,37 @@ func (r DirReader) Close() error {
|
|
73
73
|
|
74
74
|
// populateReleaseTarPaths sets TarPath for each job/package in the release.
|
75
75
|
func (r DirReader) populateReleaseTarPaths(release *Release) {
|
76
|
+
devBuilds := filepath.Join(r.dir, ".dev_builds")
|
77
|
+
finalBuilds := filepath.Join(r.dir, ".final_builds")
|
78
|
+
|
76
79
|
for i, job := range release.Jobs {
|
77
80
|
fileName := job.Fingerprint + ".tgz"
|
78
81
|
|
79
|
-
|
80
|
-
|
82
|
+
devPath := filepath.Join(devBuilds, "jobs", job.Name, fileName)
|
83
|
+
finalPath := filepath.Join(finalBuilds, "jobs", job.Name, fileName)
|
84
|
+
|
85
|
+
release.Jobs[i].TarPath = r.pathThatExistsOrEmpty(devPath, finalPath)
|
81
86
|
}
|
82
87
|
|
83
88
|
for _, pkg := range release.Packages {
|
84
89
|
fileName := pkg.Fingerprint + ".tgz"
|
85
90
|
|
86
|
-
|
87
|
-
|
91
|
+
devPath := filepath.Join(devBuilds, "packages", pkg.Name, fileName)
|
92
|
+
finalPath := filepath.Join(finalBuilds, "packages", pkg.Name, fileName)
|
93
|
+
|
94
|
+
pkg.TarPath = r.pathThatExistsOrEmpty(devPath, finalPath)
|
95
|
+
}
|
96
|
+
}
|
97
|
+
|
98
|
+
// pathThatExists returns first path that exists on the file system.
|
99
|
+
func (r DirReader) pathThatExistsOrEmpty(firstPath, secondPath string) string {
|
100
|
+
switch {
|
101
|
+
case r.fs.FileExists(firstPath):
|
102
|
+
return firstPath
|
103
|
+
case r.fs.FileExists(secondPath):
|
104
|
+
return secondPath
|
105
|
+
default:
|
106
|
+
return ""
|
88
107
|
}
|
89
108
|
}
|
90
109
|
|
@@ -99,15 +99,15 @@ func (p AgentProvisioner) Provision() error {
|
|
99
99
|
func (p AgentProvisioner) Configure(instance bpdep.Instance) (bpagclient.Client, error) {
|
100
100
|
stage := p.eventLog.BeginStage("Configuring BOSH agent", 1)
|
101
101
|
|
102
|
-
|
103
|
-
|
104
|
-
err := task.End(p.placeInfSettings(instance))
|
102
|
+
err := p.placeInfSettings(instance)
|
105
103
|
if err != nil {
|
106
104
|
return nil, bosherr.WrapError(err, "Placing infrastructure settings")
|
107
105
|
}
|
108
106
|
|
107
|
+
task := stage.BeginTask("Configuring infrastructure settings")
|
108
|
+
|
109
109
|
agentClient, err := p.buildAgentClient()
|
110
|
-
if err != nil {
|
110
|
+
if task.End(err) != nil {
|
111
111
|
return nil, bosherr.WrapError(err, "Building agent client")
|
112
112
|
}
|
113
113
|
|
Binary file
|
data/lib/vagrant-bosh/config.rb
CHANGED
@@ -20,6 +20,11 @@ module VagrantPlugins
|
|
20
20
|
|
21
21
|
attr_accessor :agent_infrastructure, :agent_platform, :agent_configuration
|
22
22
|
|
23
|
+
# Command to run to create a BOSH release on the host.
|
24
|
+
# BOSH release has a rake task to create a dev release
|
25
|
+
# because it creates locally versioned gems.
|
26
|
+
attr_accessor :create_release_cmd
|
27
|
+
|
23
28
|
def initialize(*args)
|
24
29
|
super
|
25
30
|
@base_dir = "/opt/vagrant-bosh"
|
@@ -36,6 +41,8 @@ module VagrantPlugins
|
|
36
41
|
@synced_releases_dir = File.join(@base_dir, "synced-releases")
|
37
42
|
|
38
43
|
@full_stemcell_compatibility = !!@full_stemcell_compatibility
|
44
|
+
|
45
|
+
@create_release_cmd ||= "bosh -n create release --force"
|
39
46
|
end
|
40
47
|
|
41
48
|
def validate(machine)
|
@@ -16,21 +16,23 @@ module VagrantPlugins
|
|
16
16
|
def sync(host_dir, guest_dir)
|
17
17
|
# RsyncHelper uses @machine.ui internally
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
19
|
+
dir_names = [
|
20
|
+
# .dev_builds/ and .final_builds/ contain jobs/ and packages/ tgzs
|
21
|
+
".dev_builds",
|
22
|
+
".final_builds",
|
23
|
+
|
24
|
+
# dev_releases/ contains dev release manifest files
|
25
|
+
"dev_releases",
|
26
|
+
]
|
27
|
+
|
28
|
+
dir_names.each do |dir_name|
|
29
|
+
SyncedFolderRSync::RsyncHelper.rsync_single(@machine, @machine.ssh_info, {
|
30
|
+
type: :rsync,
|
31
|
+
hostpath: File.join(host_dir, dir_name),
|
32
|
+
guestpath: File.join(guest_dir, dir_name),
|
33
|
+
disabled: false,
|
34
|
+
})
|
35
|
+
end
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
@@ -10,11 +10,12 @@ module VagrantPlugins
|
|
10
10
|
# UplodableRelease represents a release
|
11
11
|
# that *can be* synced to a guest FS location.
|
12
12
|
class UplodableRelease
|
13
|
-
def initialize(name, version, host_dir, guest_root_dir, release_uploader, ui)
|
13
|
+
def initialize(name, version, host_dir, guest_root_dir, release_uploader, create_release_cmd, ui)
|
14
14
|
@name = name
|
15
15
|
@version = version
|
16
16
|
@host_dir = host_dir
|
17
17
|
@release_uploader = release_uploader
|
18
|
+
@create_release_cmd = create_release_cmd
|
18
19
|
|
19
20
|
@ui = ui.for(:deployment, :uploadable_release)
|
20
21
|
@logger = Log4r::Logger.new("vagrant::provisioners::bosh::deployment::uploadable_release")
|
@@ -35,11 +36,13 @@ module VagrantPlugins
|
|
35
36
|
|
36
37
|
def create_release
|
37
38
|
result = @ui.timed_msg(:create_release, name: @name) do
|
39
|
+
shell = ENV["SHELL"] || "bash"
|
40
|
+
|
38
41
|
# Without clearing out environment Vagrant ruby env will be inherited
|
39
42
|
Vagrant::Util::Subprocess.execute(
|
40
|
-
"env",
|
41
|
-
|
42
|
-
|
43
|
+
"env", "-i", "HOME=#{ENV["HOME"]}", "TERM=#{ENV["TERM"]}",
|
44
|
+
shell, "-l", "-c",
|
45
|
+
@create_release_cmd,
|
43
46
|
{workdir: @host_dir},
|
44
47
|
)
|
45
48
|
end
|
@@ -4,9 +4,10 @@ module VagrantPlugins
|
|
4
4
|
module VagrantBosh
|
5
5
|
module Deployment
|
6
6
|
class UploadableReleaseFactory
|
7
|
-
def initialize(guest_root_dir, release_uploader, ui)
|
7
|
+
def initialize(guest_root_dir, release_uploader, create_release_cmd, ui)
|
8
8
|
@guest_root_dir = guest_root_dir
|
9
9
|
@release_uploader = release_uploader
|
10
|
+
@create_release_cmd = create_release_cmd
|
10
11
|
@ui = ui
|
11
12
|
end
|
12
13
|
|
@@ -17,6 +18,7 @@ module VagrantPlugins
|
|
17
18
|
host_dir,
|
18
19
|
@guest_root_dir,
|
19
20
|
@release_uploader,
|
21
|
+
@create_release_cmd,
|
20
22
|
@ui,
|
21
23
|
)
|
22
24
|
end
|
data/lib/vagrant-bosh/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-bosh
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.5
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Dmitriy Kalinin
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-
|
11
|
+
date: 2014-07-15 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description: BOSH provisioner allows to provision guest VM by specifying regular BOSH
|
15
14
|
deployment manifest.
|
@@ -183,27 +182,26 @@ files:
|
|
183
182
|
homepage: https://github.com/cppforlife/vagrant-bosh
|
184
183
|
licenses:
|
185
184
|
- MIT
|
185
|
+
metadata: {}
|
186
186
|
post_install_message:
|
187
187
|
rdoc_options: []
|
188
188
|
require_paths:
|
189
189
|
- lib
|
190
190
|
- templates
|
191
191
|
required_ruby_version: !ruby/object:Gem::Requirement
|
192
|
-
none: false
|
193
192
|
requirements:
|
194
|
-
- -
|
193
|
+
- - '>='
|
195
194
|
- !ruby/object:Gem::Version
|
196
195
|
version: '0'
|
197
196
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
|
-
none: false
|
199
197
|
requirements:
|
200
|
-
- -
|
198
|
+
- - '>='
|
201
199
|
- !ruby/object:Gem::Version
|
202
200
|
version: '0'
|
203
201
|
requirements: []
|
204
202
|
rubyforge_project:
|
205
|
-
rubygems_version:
|
203
|
+
rubygems_version: 2.3.0
|
206
204
|
signing_key:
|
207
|
-
specification_version:
|
205
|
+
specification_version: 4
|
208
206
|
summary: Vagrant BOSH provisioner plugin.
|
209
207
|
test_files: []
|