vagrant-bosh 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/README.md +24 -1
  2. data/dev/Vagrantfile +7 -4
  3. data/dev/example-winston-manifest.yml +2 -2
  4. data/docs/build-aws-stemcell.md +66 -0
  5. data/docs/release-url.md +39 -0
  6. data/go/src/boshprovisioner/downloader/local_fs_downloader.go +1 -1
  7. data/go/src/boshprovisioner/main/config.go +28 -13
  8. data/go/src/boshprovisioner/main/config_test.go +67 -0
  9. data/go/src/boshprovisioner/main/main.go +7 -7
  10. data/go/src/boshprovisioner/main/main_suite_test.go +13 -0
  11. data/go/src/boshprovisioner/main/repos_factory.go +0 -10
  12. data/go/src/boshprovisioner/packagescompiler/concrete_packages_compiler.go +3 -3
  13. data/go/src/boshprovisioner/provisioner/deployment_provisioner_interface.go +10 -0
  14. data/go/src/boshprovisioner/provisioner/release_compiler.go +11 -51
  15. data/go/src/boshprovisioner/provisioner/{deployment_provisioner.go → single_configured_vm_provisioner.go} +8 -12
  16. data/go/src/boshprovisioner/provisioner/single_non_configured_vm_provisioner.go +40 -0
  17. data/go/src/boshprovisioner/provisioner/single_vm_provisioner_factory.go +68 -0
  18. data/go/src/boshprovisioner/release/dir_reader.go +127 -0
  19. data/go/src/boshprovisioner/release/manifest/manifest.go +38 -14
  20. data/go/src/boshprovisioner/release/manifest/manifest_suite_test.go +13 -0
  21. data/go/src/boshprovisioner/release/manifest/manifest_test.go +72 -0
  22. data/go/src/boshprovisioner/release/manifest/syntax_validator.go +134 -0
  23. data/go/src/boshprovisioner/release/reader_factory.go +13 -2
  24. data/go/src/boshprovisioner/release/reader_interface.go +6 -0
  25. data/go/src/boshprovisioner/release/tar_reader.go +26 -24
  26. data/go/src/boshprovisioner/vm/vagrant/agent_provisioner.go +70 -40
  27. data/go/src/boshprovisioner/vm/vagrant/asset_manager.go +1 -1
  28. data/go/src/boshprovisioner/vm/vagrant/configured_vm.go +29 -0
  29. data/go/src/boshprovisioner/vm/vagrant/deps_provisioner.go +38 -24
  30. data/go/src/boshprovisioner/vm/vagrant/monit_provisioner.go +1 -1
  31. data/go/src/boshprovisioner/vm/vagrant/non_configured_vm.go +26 -0
  32. data/go/src/boshprovisioner/vm/vagrant/runit_provisioner.go +1 -1
  33. data/go/src/boshprovisioner/vm/vagrant/simple_cmds.go +1 -1
  34. data/go/src/boshprovisioner/vm/vagrant/vcap_user_provisioner.go +87 -40
  35. data/go/src/boshprovisioner/vm/vagrant/vm_provisioner.go +58 -20
  36. data/go/src/boshprovisioner/vm/vagrant/vm_provisioner_factory.go +4 -7
  37. data/go/src/boshprovisioner/vm/vm_interface.go +25 -6
  38. data/lib/vagrant-bosh/asset_uploader.rb +4 -3
  39. data/lib/vagrant-bosh/assets/agent/agent-run +4 -1
  40. data/lib/vagrant-bosh/assets/agent/bosh-agent +0 -0
  41. data/lib/vagrant-bosh/assets/provisioner +0 -0
  42. data/lib/vagrant-bosh/bootstrapper.rb +34 -21
  43. data/lib/vagrant-bosh/communicator.rb +1 -0
  44. data/lib/vagrant-bosh/config.rb +25 -1
  45. data/lib/vagrant-bosh/deployment/manifest.rb +79 -0
  46. data/lib/vagrant-bosh/deployment/manifest_factory.rb +29 -0
  47. data/lib/vagrant-bosh/deployment/release_uploader.rb +40 -0
  48. data/lib/vagrant-bosh/deployment/uploadable_release.rb +82 -0
  49. data/lib/vagrant-bosh/deployment/uploadable_release_factory.rb +28 -0
  50. data/lib/vagrant-bosh/errors.rb +1 -3
  51. data/lib/vagrant-bosh/provisioner.rb +24 -5
  52. data/lib/vagrant-bosh/ui.rb +9 -7
  53. data/lib/vagrant-bosh/version.rb +1 -1
  54. data/templates/locales/en.yml +27 -0
  55. metadata +22 -7
  56. data/go/src/boshprovisioner/release/manifest_reader.go +0 -29
  57. data/go/src/boshprovisioner/releasesrepo/blobstore_releases_repository.go +0 -114
  58. data/go/src/boshprovisioner/releasesrepo/releases_repository_interface.go +0 -15
  59. data/go/src/boshprovisioner/vm/vagrant/vm.go +0 -27
@@ -17,7 +17,8 @@ const tarReaderLogTag = "TarReader"
17
17
  // TarReader reads .tgz release file and returns a Release.
18
18
  // See unpacked release directory layout at the end of the file.
19
19
  type TarReader struct {
20
- path string
20
+ url string
21
+
21
22
  downloader bpdload.Downloader
22
23
  extractor bptar.Extractor
23
24
  fs boshsys.FileSystem
@@ -29,14 +30,15 @@ type TarReader struct {
29
30
  }
30
31
 
31
32
  func NewTarReader(
32
- path string,
33
+ url string,
33
34
  downloader bpdload.Downloader,
34
35
  extractor bptar.Extractor,
35
36
  fs boshsys.FileSystem,
36
37
  logger boshlog.Logger,
37
38
  ) *TarReader {
38
39
  return &TarReader{
39
- path: path,
40
+ url: url,
41
+
40
42
  downloader: downloader,
41
43
  extractor: extractor,
42
44
  fs: fs,
@@ -44,61 +46,61 @@ func NewTarReader(
44
46
  }
45
47
  }
46
48
 
47
- func (tr *TarReader) Read() (Release, error) {
49
+ func (r *TarReader) Read() (Release, error) {
48
50
  var release Release
49
51
 
50
- downloadPath, err := tr.downloader.Download(tr.path)
52
+ downloadPath, err := r.downloader.Download(r.url)
51
53
  if err != nil {
52
54
  return release, bosherr.WrapError(err, "Downloading release")
53
55
  }
54
56
 
55
- tr.downloadPath = downloadPath
57
+ r.downloadPath = downloadPath
56
58
 
57
- extractPath, err := tr.extractor.Extract(tr.downloadPath)
59
+ extractPath, err := r.extractor.Extract(r.downloadPath)
58
60
  if err != nil {
59
- cleanUpErr := tr.downloader.CleanUp(tr.downloadPath)
61
+ cleanUpErr := r.downloader.CleanUp(r.downloadPath)
60
62
  if cleanUpErr != nil {
61
- tr.logger.Debug(tarReaderLogTag,
63
+ r.logger.Debug(tarReaderLogTag,
62
64
  "Failed to clean up downloaded release %v", cleanUpErr)
63
65
  }
64
66
 
65
67
  return release, bosherr.WrapError(err, "Extracting release")
66
68
  }
67
69
 
68
- tr.extractPath = extractPath
70
+ r.extractPath = extractPath
69
71
 
70
- manifestPath := filepath.Join(tr.extractPath, "release.MF")
72
+ manifestPath := filepath.Join(r.extractPath, "release.MF")
71
73
 
72
- manifest, err := bprelman.NewManifestFromPath(manifestPath, tr.fs)
74
+ manifest, err := bprelman.NewManifestFromPath(manifestPath, r.fs)
73
75
  if err != nil {
74
- closeErr := tr.Close()
76
+ closeErr := r.Close()
75
77
  if closeErr != nil {
76
- tr.logger.Debug(tarReaderLogTag,
78
+ r.logger.Debug(tarReaderLogTag,
77
79
  "Failed to close release %v", closeErr)
78
80
  }
79
81
 
80
82
  return release, bosherr.WrapError(err, "Building manifest")
81
83
  }
82
84
 
83
- tr.logger.Debug(tarReaderLogTag, "Done building manifest %#v", manifest)
85
+ r.logger.Debug(tarReaderLogTag, "Done building manifest %#v", manifest)
84
86
 
85
87
  release.populateFromManifest(manifest)
86
88
 
87
- tr.populateReleaseTarPaths(&release)
89
+ r.populateReleaseTarPaths(&release)
88
90
 
89
91
  return release, nil
90
92
  }
91
93
 
92
- func (tr TarReader) Close() error {
93
- dlErr := tr.downloader.CleanUp(tr.downloadPath)
94
+ func (r TarReader) Close() error {
95
+ dlErr := r.downloader.CleanUp(r.downloadPath)
94
96
  if dlErr != nil {
95
- tr.logger.Debug(tarReaderLogTag,
97
+ r.logger.Debug(tarReaderLogTag,
96
98
  "Failed to clean up downloaded release %v", dlErr)
97
99
  }
98
100
 
99
- exErr := tr.extractor.CleanUp(tr.extractPath)
101
+ exErr := r.extractor.CleanUp(r.extractPath)
100
102
  if exErr != nil {
101
- tr.logger.Debug(tarReaderLogTag,
103
+ r.logger.Debug(tarReaderLogTag,
102
104
  "Failed to clean up extracted release %v", exErr)
103
105
  }
104
106
 
@@ -110,15 +112,15 @@ func (tr TarReader) Close() error {
110
112
  }
111
113
 
112
114
  // populateReleaseTarPaths sets TarPath for each job/package in the release.
113
- func (tr TarReader) populateReleaseTarPaths(release *Release) {
115
+ func (r TarReader) populateReleaseTarPaths(release *Release) {
114
116
  for i, job := range release.Jobs {
115
117
  fileName := job.Name + ".tgz"
116
- release.Jobs[i].TarPath = filepath.Join(tr.extractPath, "jobs", fileName)
118
+ release.Jobs[i].TarPath = filepath.Join(r.extractPath, "jobs", fileName)
117
119
  }
118
120
 
119
121
  for _, pkg := range release.Packages {
120
122
  fileName := pkg.Name + ".tgz"
121
- pkg.TarPath = filepath.Join(tr.extractPath, "packages", fileName)
123
+ pkg.TarPath = filepath.Join(r.extractPath, "packages", fileName)
122
124
  }
123
125
  }
124
126
 
@@ -1,4 +1,4 @@
1
- package vm
1
+ package vagrant
2
2
 
3
3
  import (
4
4
  "encoding/json"
@@ -13,6 +13,7 @@ import (
13
13
  bpagclient "boshprovisioner/agent/client"
14
14
  bpdep "boshprovisioner/deployment"
15
15
  bpeventlog "boshprovisioner/eventlog"
16
+ bpvm "boshprovisioner/vm"
16
17
  )
17
18
 
18
19
  const agentProvisionerLogTag = "AgentProvisioner"
@@ -27,8 +28,8 @@ type AgentProvisioner struct {
27
28
  runitProvisioner RunitProvisioner
28
29
  monitProvisioner MonitProvisioner
29
30
 
30
- blobstoreConfig map[string]interface{}
31
- agentURL string
31
+ blobstoreConfig map[string]interface{}
32
+ agentProvisionerConfig bpvm.AgentProvisionerConfig
32
33
 
33
34
  eventLog bpeventlog.Log
34
35
  logger boshlog.Logger
@@ -41,7 +42,7 @@ func NewAgentProvisioner(
41
42
  runitProvisioner RunitProvisioner,
42
43
  monitProvisioner MonitProvisioner,
43
44
  blobstoreConfig map[string]interface{},
44
- agentURL string,
45
+ agentProvisionerConfig bpvm.AgentProvisionerConfig,
45
46
  eventLog bpeventlog.Log,
46
47
  logger boshlog.Logger,
47
48
  ) AgentProvisioner {
@@ -53,43 +54,56 @@ func NewAgentProvisioner(
53
54
  runitProvisioner: runitProvisioner,
54
55
  monitProvisioner: monitProvisioner,
55
56
 
56
- blobstoreConfig: blobstoreConfig,
57
- agentURL: agentURL,
57
+ blobstoreConfig: blobstoreConfig,
58
+ agentProvisionerConfig: agentProvisionerConfig,
58
59
 
59
60
  eventLog: eventLog,
60
61
  logger: logger,
61
62
  }
62
63
  }
63
64
 
64
- func (p AgentProvisioner) Provision(instance bpdep.Instance) (bpagclient.Client, error) {
65
- stage := p.eventLog.BeginStage("Updating BOSH agent", 5)
65
+ func (p AgentProvisioner) Provision() error {
66
+ stage := p.eventLog.BeginStage("Updating BOSH agent", 4)
66
67
 
67
68
  task := stage.BeginTask("Placing binaries")
68
69
 
69
70
  err := task.End(p.placeBinaries())
70
71
  if err != nil {
71
- return nil, bosherr.WrapError(err, "Placing agent binaries")
72
+ return bosherr.WrapError(err, "Placing agent binaries")
72
73
  }
73
74
 
74
- task = stage.BeginTask("Configuring settings")
75
+ task = stage.BeginTask("Placing configuration files")
75
76
 
76
- err = task.End(p.configureSettings(instance))
77
+ err = task.End(p.placeConfFiles())
77
78
  if err != nil {
78
- return nil, bosherr.WrapError(err, "Configuring settings")
79
+ return bosherr.WrapError(err, "Configuring settings")
79
80
  }
80
81
 
81
- task = stage.BeginTask("Configuring monit")
82
+ task = stage.BeginTask("Registering monit service")
82
83
 
83
84
  err = task.End(p.monitProvisioner.Provision())
84
85
  if err != nil {
85
- return nil, bosherr.WrapError(err, "Provisioning monit")
86
+ return bosherr.WrapError(err, "Provisioning monit")
86
87
  }
87
88
 
88
- task = stage.BeginTask("Starting")
89
+ task = stage.BeginTask("Registering agent service")
89
90
 
90
91
  err = task.End(p.runitProvisioner.Provision("agent", 10*time.Second))
91
92
  if err != nil {
92
- return nil, bosherr.WrapError(err, "Provisioning agent with runit")
93
+ return bosherr.WrapError(err, "Provisioning agent with runit")
94
+ }
95
+
96
+ return nil
97
+ }
98
+
99
+ func (p AgentProvisioner) Configure(instance bpdep.Instance) (bpagclient.Client, error) {
100
+ stage := p.eventLog.BeginStage("Configuring BOSH agent", 1)
101
+
102
+ task := stage.BeginTask("Configuring infrastructure settings")
103
+
104
+ err := task.End(p.placeInfSettings(instance))
105
+ if err != nil {
106
+ return nil, bosherr.WrapError(err, "Placing infrastructure settings")
93
107
  }
94
108
 
95
109
  agentClient, err := p.buildAgentClient()
@@ -141,20 +155,53 @@ func (p AgentProvisioner) placeBinary(name, path string) error {
141
155
  return nil
142
156
  }
143
157
 
144
- func (p AgentProvisioner) configureSettings(instance bpdep.Instance) error {
158
+ func (p AgentProvisioner) placeConfFiles() error {
145
159
  err := p.setUpDataDir()
146
160
  if err != nil {
147
161
  return bosherr.WrapError(err, "Setting up data dir")
148
162
  }
149
163
 
150
- err = p.placeConfFiles()
164
+ fileNames := map[string]string{
165
+ "agent/agent.cert": "agent.cert", // Needed by agent HTTP handler
166
+ "agent/agent.key": "agent.key",
167
+ }
168
+
169
+ for assetName, fileName := range fileNames {
170
+ err := p.assetManager.Place(assetName, filepath.Join("/var/vcap/bosh/", fileName))
171
+ if err != nil {
172
+ return bosherr.WrapError(err, "Placing %s", fileName)
173
+ }
174
+ }
175
+
176
+ err = p.placeAgentConf()
151
177
  if err != nil {
152
- return bosherr.WrapError(err, "Placing conf files")
178
+ return bosherr.WrapError(err, "Placing agent configuration")
153
179
  }
154
180
 
155
- err = p.placeInfSettings(instance)
181
+ return nil
182
+ }
183
+
184
+ func (p AgentProvisioner) placeAgentConf() error {
185
+ // etc/infrastructure and etc/plaform is loaded by BOSH Agent runit script
186
+ err := p.fs.WriteFileString("/var/vcap/bosh/etc/infrastructure", p.agentProvisionerConfig.Infrastructure)
156
187
  if err != nil {
157
- return bosherr.WrapError(err, "Placing infrastructure settings")
188
+ return bosherr.WrapError(err, "Writing agent infrastructure")
189
+ }
190
+
191
+ err = p.fs.WriteFileString("/var/vcap/bosh/etc/platform", p.agentProvisionerConfig.Platform)
192
+ if err != nil {
193
+ return bosherr.WrapError(err, "Writing agent platform")
194
+ }
195
+
196
+ // Go Agent will can unmarshal 'null' into an empty config
197
+ bytes, err := json.Marshal(p.agentProvisionerConfig.Configuration)
198
+ if err != nil {
199
+ return bosherr.WrapError(err, "Marshalling agent configuration")
200
+ }
201
+
202
+ err = p.fs.WriteFile("/var/vcap/bosh/agent.json", bytes)
203
+ if err != nil {
204
+ return bosherr.WrapError(err, "Writing agent configuration")
158
205
  }
159
206
 
160
207
  return nil
@@ -180,23 +227,6 @@ func (p AgentProvisioner) setUpDataDir() error {
180
227
  return nil
181
228
  }
182
229
 
183
- func (p AgentProvisioner) placeConfFiles() error {
184
- fileNames := map[string]string{
185
- "agent/agent.cert": "agent.cert", // Needed by agent HTTP handler
186
- "agent/agent.key": "agent.key",
187
- "agent/agent.json": "agent.json",
188
- }
189
-
190
- for assetName, fileName := range fileNames {
191
- err := p.assetManager.Place(assetName, filepath.Join("/var/vcap/bosh/", fileName))
192
- if err != nil {
193
- return bosherr.WrapError(err, "Placing %s", fileName)
194
- }
195
- }
196
-
197
- return nil
198
- }
199
-
200
230
  func (p AgentProvisioner) placeInfSettings(instance bpdep.Instance) error {
201
231
  type h map[string]interface{}
202
232
 
@@ -228,7 +258,7 @@ func (p AgentProvisioner) placeInfSettings(instance bpdep.Instance) error {
228
258
  "disks": h{"persistent": h{}},
229
259
 
230
260
  "blobstore": p.blobstoreConfig,
231
- "mbus": p.agentURL, // todo port can conflict with jobs
261
+ "mbus": p.agentProvisionerConfig.Mbus, // todo port can conflict with jobs
232
262
 
233
263
  "env": h{},
234
264
  "ntp": []string{},
@@ -248,7 +278,7 @@ func (p AgentProvisioner) placeInfSettings(instance bpdep.Instance) error {
248
278
  }
249
279
 
250
280
  func (p AgentProvisioner) buildAgentClient() (bpagclient.Client, error) {
251
- agentClient, err := bpagclient.NewInsecureHTTPClientWithURI(p.agentURL, p.logger)
281
+ agentClient, err := bpagclient.NewInsecureHTTPClientWithURI(p.agentProvisionerConfig.Mbus, p.logger)
252
282
  if err != nil {
253
283
  return nil, bosherr.WrapError(err, "Building agent client")
254
284
  }
@@ -1,4 +1,4 @@
1
- package vm
1
+ package vagrant
2
2
 
3
3
  import (
4
4
  "fmt"
@@ -0,0 +1,29 @@
1
+ package vagrant
2
+
3
+ import (
4
+ bpagclient "boshprovisioner/agent/client"
5
+ )
6
+
7
+ // ConfiguredVM represents provisioned Vagrant machine
8
+ // that can be communicated with via an AgentClient.
9
+ type ConfiguredVM struct {
10
+ vmProvisioner *VMProvisioner
11
+ agentClient bpagclient.Client
12
+ }
13
+
14
+ func NewConfiguredVM(vmProvisioner *VMProvisioner, agentClient bpagclient.Client) ConfiguredVM {
15
+ return ConfiguredVM{
16
+ vmProvisioner: vmProvisioner,
17
+ agentClient: agentClient,
18
+ }
19
+ }
20
+
21
+ func (vm ConfiguredVM) AgentClient() bpagclient.Client {
22
+ return vm.agentClient
23
+ }
24
+
25
+ func (vm ConfiguredVM) Deprovision() error {
26
+ return vm.vmProvisioner.deprovision(vm)
27
+ }
28
+
29
+ func (vm ConfiguredVM) vagrantVM() {}
@@ -1,8 +1,9 @@
1
- package vm
1
+ package vagrant
2
2
 
3
3
  import (
4
4
  "fmt"
5
5
  "strings"
6
+ "time"
6
7
 
7
8
  bosherr "bosh/errors"
8
9
  boshlog "bosh/logger"
@@ -52,7 +53,7 @@ func (p DepsProvisioner) Provision() error {
52
53
 
53
54
  stage := p.eventLog.BeginStage("Installing dependencies", len(pkgNames))
54
55
 
55
- installedPkgs, err := p.listInstalledPkgs()
56
+ installedPkgNames, err := p.listInstalledPkgNames()
56
57
  if err != nil {
57
58
  return bosherr.WrapError(err, "Listing installed packages")
58
59
  }
@@ -60,7 +61,7 @@ func (p DepsProvisioner) Provision() error {
60
61
  for _, pkgName := range pkgNames {
61
62
  task := stage.BeginTask(fmt.Sprintf("Package %s", pkgName))
62
63
 
63
- if p.isPkgInstalled(pkgName, installedPkgs) {
64
+ if p.isPkgInstalled(pkgName, installedPkgNames) {
64
65
  p.logger.Debug(depsProvisionerLogTag, "Package %s is already installed", pkgName)
65
66
  task.End(nil)
66
67
  continue
@@ -90,39 +91,50 @@ func (p DepsProvisioner) installPkg(name string) error {
90
91
  return bosherr.WrapError(err, "Updating sources")
91
92
  }
92
93
 
93
- // Try second time after updating
94
- _, _, _, err = p.runner.RunCommand("apt-get", "-y", "install", name)
95
- if err != nil {
96
- return bosherr.WrapError(err, "Installing %s after updating", name)
94
+ var lastInstallErr error
95
+
96
+ // For some reason libssl-dev was really hard to install on the first try
97
+ for i := 0; i < 3; i++ {
98
+ _, _, _, lastInstallErr = p.runner.RunCommand("apt-get", "-y", "install", name)
99
+ if lastInstallErr == nil {
100
+ return nil
101
+ }
102
+
103
+ time.Sleep(1 * time.Second)
97
104
  }
105
+
106
+ return bosherr.WrapError(lastInstallErr, "Installing %s after updating", name)
98
107
  }
99
108
 
100
- return nil
109
+ return err
101
110
  }
102
111
 
103
- func (p DepsProvisioner) listInstalledPkgs() ([]string, error) {
104
- var installedPkgs []string
112
+ func (p DepsProvisioner) listInstalledPkgNames() ([]string, error) {
113
+ var installedPkgNames []string
105
114
 
106
115
  installedPkgStdout, _, _, err := p.runner.RunCommand("dpkg", "--get-selections")
107
116
  if err != nil {
108
- return installedPkgs, bosherr.WrapError(err, "dkpg query")
117
+ return nil, bosherr.WrapError(err, "dkpg query")
109
118
  }
110
119
 
120
+ // e.g. 'zlib1g:amd64 install'
121
+ // 'util-linux install'
111
122
  for _, line := range strings.Split(installedPkgStdout, "\n") {
112
123
  pieces := strings.Fields(line)
113
124
 
114
125
  // Last line is empty
115
126
  if len(pieces) == 2 && pieces[1] == "install" {
116
- installedPkgs = append(installedPkgs, pieces[0])
127
+ pkgName := strings.Split(pieces[0], ":")[0]
128
+ installedPkgNames = append(installedPkgNames, pkgName)
117
129
  }
118
130
  }
119
131
 
120
- return installedPkgs, nil
132
+ return installedPkgNames, nil
121
133
  }
122
134
 
123
135
  func (p DepsProvisioner) isPkgInstalled(pkgName string, installedPkgs []string) bool {
124
136
  for _, installedPkgName := range installedPkgs {
125
- if pkgName == installedPkgName {
137
+ if installedPkgName == pkgName {
126
138
  return true
127
139
  }
128
140
  }
@@ -131,12 +143,12 @@ func (p DepsProvisioner) isPkgInstalled(pkgName string, installedPkgs []string)
131
143
  }
132
144
 
133
145
  var depsProvisionerPkgsForMinimumStemcellCompatibility = []string{
134
- // For packaging scripts in BOSH releases
146
+ // Most BOSH releases require it for packaging
135
147
  "build-essential", // 16sec
136
148
  "cmake", // 6sec
137
149
 
138
150
  "libcap2-bin",
139
- "libcap2-dev",
151
+ "libcap-dev",
140
152
 
141
153
  "libbz2-1.0", // noop on precise64 Vagrant box
142
154
  "libbz2-dev", // 2sec
@@ -148,6 +160,16 @@ var depsProvisionerPkgsForMinimumStemcellCompatibility = []string{
148
160
 
149
161
  // For warden
150
162
  "quota", // 1sec
163
+
164
+ // Started needing that in saucy for building BOSH
165
+ "libssl-dev",
166
+
167
+ "bison",
168
+ "flex",
169
+
170
+ "gettext",
171
+ "libreadline6-dev",
172
+ "libncurses5-dev",
151
173
  }
152
174
 
153
175
  // Taken from base_apt stemcell builder stage
@@ -159,11 +181,6 @@ var depsProvisionerPkgsForFullStemcellCompatibility = []string{
159
181
  "apparmor-utils",
160
182
  "openssh-server",
161
183
 
162
- "gettext",
163
- "libreadline6-dev",
164
- "libncurses5-dev",
165
-
166
- "libssl-dev",
167
184
  "libgcrypt-dev",
168
185
  "ca-certificates",
169
186
 
@@ -177,9 +194,6 @@ var depsProvisionerPkgsForFullStemcellCompatibility = []string{
177
194
  "libxslt1.1",
178
195
  "libxslt1-dev",
179
196
 
180
- "bison",
181
- "flex",
182
-
183
197
  // Utils
184
198
  "bind9-host",
185
199
  "dnsutils",
@@ -1,4 +1,4 @@
1
- package vm
1
+ package vagrant
2
2
 
3
3
  import (
4
4
  "time"
@@ -0,0 +1,26 @@
1
+ package vagrant
2
+
3
+ import (
4
+ bpagclient "boshprovisioner/agent/client"
5
+ )
6
+
7
+ // NonConfiguredVM represents provisioned Vagrant machine
8
+ // that CANNOT be communicated with via an AgentClient.
9
+ type NonConfiguredVM struct {
10
+ vmProvisioner *VMProvisioner
11
+ }
12
+
13
+ func NewNonConfiguredVM(vmProvisioner *VMProvisioner) NonConfiguredVM {
14
+ return NonConfiguredVM{vmProvisioner: vmProvisioner}
15
+ }
16
+
17
+ func (vm NonConfiguredVM) AgentClient() bpagclient.Client {
18
+ // Programmer error
19
+ panic("Must not ask for AgentClient from a non-configured VM")
20
+ }
21
+
22
+ func (vm NonConfiguredVM) Deprovision() error {
23
+ return vm.vmProvisioner.deprovision(vm)
24
+ }
25
+
26
+ func (vm NonConfiguredVM) vagrantVM() {}
@@ -1,4 +1,4 @@
1
- package vm
1
+ package vagrant
2
2
 
3
3
  import (
4
4
  "fmt"
@@ -1,4 +1,4 @@
1
- package vm
1
+ package vagrant
2
2
 
3
3
  import (
4
4
  boshlog "bosh/logger"