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 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
@@ -66,6 +66,8 @@ end
66
66
 
67
67
  - `agent_configuration` (Hash, default: '{ ... }')
68
68
 
69
+ - `create_release_cmd` (String, default: `bosh -n create release --force`)
70
+
69
71
 
70
72
  ### Using BOSH provisioner to build BOSH stemcells
71
73
 
@@ -87,13 +87,13 @@ func (tc ConcreteTemplatesCompiler) Precompile(release bprel.Release) error {
87
87
  }
88
88
  }
89
89
 
90
- err = tc.tplToJobRepo.SaveForJob(release, job)
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.SaveAllForReleaseJob(job, allPkgs)
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
- relJobReaders, err := tc.buildJobReaders(job)
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
- job, found, err := tc.tplToJobRepo.FindByTemplate(template)
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.FindByReleaseJob(job)
137
+ pkgs, found, err = tc.runPkgsRepo.Find(releaseJobRec)
143
138
  if err != nil {
144
- return pkgs, bosherr.WrapError(err, "Finding packages by job %s", job.Name)
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 %s", job.Name)
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
- type jobReader struct {
171
- relJob bprel.Job
172
- tarReader *bpreljob.TarReader
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.relJob, relJob)
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
- func (tc ConcreteTemplatesCompiler) associatePackages(rJob bprel.Job, relJob bpreljob.Job) error {
242
- _, found, err := tc.runPkgsRepo.FindByReleaseJob(rJob)
243
- if err != nil {
244
- return bosherr.WrapError(err, "Finding runtime deps for %s", rJob.Name)
245
- }
205
+ type jobReader struct {
206
+ rec bpjobsrepo.ReleaseJobRecord
207
+ tarReader *bpreljob.TarReader
208
+ }
246
209
 
247
- if !found {
248
- allPkgs, found, err := tc.runPkgsRepo.FindAllByReleaseJob(rJob)
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 rel-job -> rel-pkgs %s", rJob.Name)
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 rel-job -> rel-pkgs %s", rJob.Name)
218
+ return readers, bosherr.New("Expected to find dep-template -> release-job record %s", template.Name)
253
219
  }
254
220
 
255
- var pkgs []bprel.Package
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
- for _, pkg := range allPkgs {
258
- for _, p := range relJob.Packages {
259
- if pkg.Name == p.Name {
260
- pkgs = append(pkgs, pkg)
261
- break
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
- err = tc.runPkgsRepo.SaveForReleaseJob(rJob, pkgs)
267
- if err != nil {
268
- return bosherr.WrapError(err, "Saving job packages %s", rJob.Name)
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 package captures its dependenices
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.jobKey(job), &record)
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 package record")
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.jobKey(job), record)
72
+ err := r.index.Save(r.key(job), record)
51
73
  if err != nil {
52
- return bosherr.WrapError(err, "Saving package record")
74
+ return bosherr.WrapError(err, "Saving job record")
53
75
  }
54
76
 
55
77
  return nil
56
78
  }
57
79
 
58
- func (r CJRepository) jobKey(job bprel.Job) jobToJobKey {
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) FindByReleaseJob(job bprel.Job) ([]bprel.Package, bool, error) {
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(job), &pkgs)
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) SaveForReleaseJob(job bprel.Job, pkgs []bprel.Package) error {
54
- err := r.index.Save(r.jobSpecificKey(job), pkgs)
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
- // FindAllByReleaseJob keeps association between all possible packages for a job
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(job), &pkgs)
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) SaveAllForReleaseJob(job bprel.Job, pkgs []bprel.Package) error {
79
- err := r.index.Save(r.jobAllKey(job), pkgs)
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(job bprel.Job) jobToPkgsKey {
89
+ func (r CRPRepository) jobSpecificKey(rec ReleaseJobRecord) jobToPkgsKey {
88
90
  return jobToPkgsKey{
89
- JobName: job.Name,
90
- JobVersion: job.Version,
91
- JobFingerprint: job.Fingerprint,
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(job bprel.Job) jobToPkgsKey {
102
+ func (r CRPRepository) jobAllKey(rec ReleaseJobRecord) jobToPkgsKey {
98
103
  return jobToPkgsKey{
99
- JobName: job.Name,
100
- JobVersion: job.Version,
101
- JobFingerprint: job.Fingerprint,
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) (bprel.Job, bool, error) {
34
- var job bprel.Job
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), &job)
36
+ err := r.index.Find(r.templateKey(template), &rec)
37
37
  if err != nil {
38
38
  if err == bpindex.ErrNotFound {
39
- return job, false, nil
39
+ return rec, false, nil
40
40
  }
41
41
 
42
- return job, false, bosherr.WrapError(err, "Finding dep-template -> rel-job record")
42
+ return rec, false, bosherr.WrapError(err, "Finding dep-template -> release-job record")
43
43
  }
44
44
 
45
- return job, true, nil
45
+ return rec, true, nil
46
46
  }
47
47
 
48
- func (r CTTJRepository) SaveForJob(release bprel.Release, job bprel.Job) error {
49
- err := r.index.Save(r.jobKey(release, job), job)
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 -> rel-job record")
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 {
@@ -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) (bprel.Job, bool, error)
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
- FindByReleaseJob(bprel.Job) ([]bprel.Package, bool, error)
26
- SaveForReleaseJob(bprel.Job, []bprel.Package) error
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
- FindAllByReleaseJob(bprel.Job) ([]bprel.Package, bool, error)
30
- SaveAllForReleaseJob(bprel.Job, []bprel.Package) error
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
- release.Jobs[i].TarPath = filepath.Join(
80
- r.dir, ".dev_builds", "jobs", job.Name, fileName)
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
- pkg.TarPath = filepath.Join(
87
- r.dir, ".dev_builds", "packages", pkg.Name, fileName)
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
- task := stage.BeginTask("Configuring infrastructure settings")
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
@@ -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
- # .dev_builds/ contains jobs/ and packages/ tgzs
20
- SyncedFolderRSync::RsyncHelper.rsync_single(@machine, @machine.ssh_info, {
21
- type: :rsync,
22
- hostpath: File.join(host_dir, ".dev_builds"),
23
- guestpath: File.join(guest_dir, ".dev_builds"),
24
- disabled: false,
25
- })
26
-
27
- # dev_releases/ contains dev release manifest files
28
- SyncedFolderRSync::RsyncHelper.rsync_single(@machine, @machine.ssh_info, {
29
- type: :rsync,
30
- hostpath: File.join(host_dir, "dev_releases"),
31
- guestpath: File.join(guest_dir, "dev_releases"),
32
- disabled: false,
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", "-i", "HOME=#{ENV["HOME"]}", "TERM=#{ENV["TERM"]}",
41
- "bash", "-l", "-c",
42
- "bosh create release --force",
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
@@ -34,6 +34,7 @@ module VagrantPlugins
34
34
  uploadable_release_factory = Deployment::UploadableReleaseFactory.new(
35
35
  config.synced_releases_dir,
36
36
  release_uploader,
37
+ config.create_release_cmd,
37
38
  machine_ui,
38
39
  )
39
40
 
@@ -1,5 +1,5 @@
1
1
  module VagrantPlugins
2
2
  module VagrantBosh
3
- VERSION = "0.0.4"
3
+ VERSION = "0.0.5"
4
4
  end
5
5
  end
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.4
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-06-30 00:00:00.000000000 Z
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: 1.8.23
203
+ rubygems_version: 2.3.0
206
204
  signing_key:
207
- specification_version: 3
205
+ specification_version: 4
208
206
  summary: Vagrant BOSH provisioner plugin.
209
207
  test_files: []