vagrant-bosh 0.0.3 → 0.0.4

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