vagrant-bosh 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|