Skip to content
This repository was archived by the owner on Jul 28, 2020. It is now read-only.

Commit 0c18add

Browse files
committed
Do privileged steps first
* No longer cleans unrecognized files out of cache
1 parent 1394329 commit 0c18add

File tree

7 files changed

+173
-54
lines changed

7 files changed

+173
-54
lines changed

src/code.cloudfoundry.org/cfdev/cmd/download/download.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
package download
22

33
import (
4-
"fmt"
54
"io"
65
"os"
76
"strings"
87
"time"
98

10-
"io/ioutil"
11-
"path/filepath"
12-
139
"net/http"
1410

1511
"code.cloudfoundry.org/cfdev/config"
@@ -53,7 +49,6 @@ func (d *Download) RunE(cmd *cobra.Command, args []string) error {
5349
}
5450

5551
func CacheSync(dependencies resource.Catalog, cacheDir string, writer io.Writer) error {
56-
logCatalog(dependencies, cacheDir)
5752
skipVerify := strings.ToLower(os.Getenv("CFDEV_SKIP_ASSET_CHECK"))
5853

5954
cache := resource.Cache{
@@ -70,7 +65,3 @@ func CacheSync(dependencies resource.Catalog, cacheDir string, writer io.Writer)
7065
}
7166
return nil
7267
}
73-
74-
func logCatalog(dependencies resource.Catalog, cacheDir string) {
75-
ioutil.WriteFile(filepath.Join(cacheDir, "catalog.txt"), []byte(fmt.Sprintf("%+v", dependencies.Items)), 0644)
76-
}

src/code.cloudfoundry.org/cfdev/cmd/start/start.go

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,6 @@ func (s *Start) Execute(args Args) error {
159159

160160
depsIsoName := "cf"
161161
depsIsoPath := filepath.Join(s.Config.CacheDir, "cf-deps.iso")
162-
depsToDownload := s.Config.Dependencies
163162
if args.DepsIsoPath != "" {
164163
depsIsoName = filepath.Base(args.DepsIsoPath)
165164
var err error
@@ -171,12 +170,7 @@ func (s *Start) Execute(args Args) error {
171170
return fmt.Errorf("no file found at: %s", depsIsoPath)
172171
}
173172

174-
depsToDownload = resource.Catalog{}
175-
for _, item := range s.Config.Dependencies.Items {
176-
if item.Name != "cf-deps.iso" {
177-
depsToDownload.Items = append(depsToDownload.Items, item)
178-
}
179-
}
173+
s.Config.Dependencies.Remove("cf-deps.iso")
180174
}
181175

182176
s.AnalyticsToggle.SetProp("type", depsIsoName)
@@ -197,13 +191,31 @@ func (s *Start) Execute(args Args) error {
197191
return errors.SafeWrap(err, "setting up cfdev home dir")
198192
}
199193

194+
if cfdevd := s.Config.Dependencies.Lookup("cfdevd"); cfdevd != nil {
195+
s.UI.Say("Downloading Network Helper...")
196+
if err := s.Cache.Sync(resource.Catalog{
197+
Items: []resource.Item{*cfdevd},
198+
}); err != nil {
199+
return errors.SafeWrap(err, "Unable to download network helper")
200+
}
201+
s.Config.Dependencies.Remove("cfdevd")
202+
}
203+
204+
if err := s.osSpecificSetup(); err != nil {
205+
return err
206+
}
207+
208+
if err := s.HostNet.AddLoopbackAliases(s.Config.BoshDirectorIP, s.Config.CFRouterIP); err != nil {
209+
return errors.SafeWrap(err, "adding aliases")
210+
}
211+
200212
registries, err := s.parseDockerRegistriesFlag(args.Registries)
201213
if err != nil {
202214
return errors.SafeWrap(err, "Unable to parse docker registries")
203215
}
204216

205217
s.UI.Say("Downloading Resources...")
206-
if err := s.Cache.Sync(depsToDownload); err != nil {
218+
if err := s.Cache.Sync(s.Config.Dependencies); err != nil {
207219
return errors.SafeWrap(err, "Unable to sync assets")
208220
}
209221

@@ -223,14 +235,6 @@ func (s *Start) Execute(args Args) error {
223235
}
224236
}
225237

226-
if err := s.osSpecificSetup(); err != nil {
227-
return err
228-
}
229-
230-
if err := s.HostNet.AddLoopbackAliases(s.Config.BoshDirectorIP, s.Config.CFRouterIP); err != nil {
231-
return errors.SafeWrap(err, "adding aliases")
232-
}
233-
234238
s.UI.Say("Creating the VM...")
235239
if err := s.Hypervisor.CreateVM(hypervisor.VM{
236240
Name: "cfdev",

src/code.cloudfoundry.org/cfdev/cmd/start/start_test.go

Lines changed: 91 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,7 @@ var _ = Describe("Start", func() {
137137
mockHost.EXPECT().CheckRequirements(),
138138
mockHypervisor.EXPECT().IsRunning("cfdev").Return(false, nil),
139139

140+
mockHostNet.EXPECT().AddLoopbackAliases("some-bosh-director-ip", "some-cf-router-ip"),
140141
mockUI.EXPECT().Say("Downloading Resources..."),
141142
mockCache.EXPECT().Sync(resource.Catalog{
142143
Items: []resource.Item{
@@ -145,7 +146,6 @@ var _ = Describe("Start", func() {
145146
},
146147
}),
147148
mockIsoReader.EXPECT().Read(depsIsoPath).Return(metadata, nil),
148-
mockHostNet.EXPECT().AddLoopbackAliases("some-bosh-director-ip", "some-cf-router-ip"),
149149
mockUI.EXPECT().Say("Creating the VM..."),
150150
mockHypervisor.EXPECT().CreateVM(hypervisor.VM{
151151
Name: "cfdev",
@@ -190,6 +190,87 @@ var _ = Describe("Start", func() {
190190
})).To(Succeed())
191191
})
192192

193+
Context("when catalog includes cfdevd", func(){
194+
BeforeEach(func(){
195+
startCmd.Config.Dependencies = resource.Catalog{
196+
Items: []resource.Item{
197+
{Name: "some-item"},
198+
{Name: "cfdevd"},
199+
{Name: "cf-deps.iso"},
200+
},
201+
}
202+
})
203+
It("downloads cfdevd first", func(){
204+
if runtime.GOOS == "darwin" {
205+
mockUI.EXPECT().Say("Installing cfdevd network helper...")
206+
mockCFDevD.EXPECT().Install()
207+
}
208+
209+
gomock.InOrder(
210+
mockToggle.EXPECT().SetProp("type", "cf"),
211+
mockAnalyticsClient.EXPECT().Event(cfanalytics.START_BEGIN),
212+
mockHost.EXPECT().CheckRequirements(),
213+
mockHypervisor.EXPECT().IsRunning("cfdev").Return(false, nil),
214+
mockUI.EXPECT().Say("Downloading Network Helper..."),
215+
mockCache.EXPECT().Sync(resource.Catalog{
216+
Items: []resource.Item{
217+
{Name: "cfdevd"},
218+
},
219+
}),
220+
mockHostNet.EXPECT().AddLoopbackAliases("some-bosh-director-ip", "some-cf-router-ip"),
221+
mockUI.EXPECT().Say("Downloading Resources..."),
222+
mockCache.EXPECT().Sync(resource.Catalog{
223+
Items: []resource.Item{
224+
{Name: "some-item"},
225+
{Name: "cf-deps.iso"},
226+
},
227+
}),
228+
mockIsoReader.EXPECT().Read(depsIsoPath).Return(metadata, nil),
229+
mockUI.EXPECT().Say("Creating the VM..."),
230+
mockHypervisor.EXPECT().CreateVM(hypervisor.VM{
231+
Name: "cfdev",
232+
CPUs: 7,
233+
MemoryMB: 8765,
234+
DepsIso: filepath.Join(cacheDir, "cf-deps.iso"),
235+
}),
236+
mockUI.EXPECT().Say("Starting VPNKit..."),
237+
mockVpnKit.EXPECT().Start(),
238+
mockVpnKit.EXPECT().Watch(localExitChan),
239+
mockUI.EXPECT().Say("Starting the VM..."),
240+
mockHypervisor.EXPECT().Start("cfdev"),
241+
mockUI.EXPECT().Say("Waiting for Garden..."),
242+
mockProvisioner.EXPECT().Ping(),
243+
mockUI.EXPECT().Say("Deploying the BOSH Director..."),
244+
mockProvisioner.EXPECT().DeployBosh(),
245+
mockUI.EXPECT().Say("Deploying CF..."),
246+
mockProvisioner.EXPECT().ReportProgress(mockUI, "cf"),
247+
mockProvisioner.EXPECT().DeployCloudFoundry(nil),
248+
mockProvisioner.EXPECT().DeployServices(mockUI, []provision.Service{
249+
{
250+
Name: "some-service",
251+
Handle: "some-handle",
252+
Script: "/path/to/some-script",
253+
Deployment: "some-deployment",
254+
},
255+
{
256+
Name: "some-other-service",
257+
Handle: "some-other-handle",
258+
Script: "/path/to/some-other-script",
259+
Deployment: "some-other-deployment",
260+
},
261+
}),
262+
263+
//welcome message
264+
mockAnalyticsClient.EXPECT().Event(cfanalytics.START_END),
265+
)
266+
267+
Expect(startCmd.Execute(start.Args{
268+
Cpus: 7,
269+
Mem: 0,
270+
})).To(Succeed())
271+
})
272+
})
273+
193274
Context("when no args are provided AND deps.iso does not have default memory", func() {
194275
It("starts the vm with a default memory setting", func() {
195276
metadata.DefaultMemory = 0
@@ -205,6 +286,7 @@ var _ = Describe("Start", func() {
205286
mockHost.EXPECT().CheckRequirements(),
206287
mockHypervisor.EXPECT().IsRunning("cfdev").Return(false, nil),
207288

289+
mockHostNet.EXPECT().AddLoopbackAliases("some-bosh-director-ip", "some-cf-router-ip"),
208290
mockUI.EXPECT().Say("Downloading Resources..."),
209291
mockCache.EXPECT().Sync(resource.Catalog{
210292
Items: []resource.Item{
@@ -214,8 +296,6 @@ var _ = Describe("Start", func() {
214296
}),
215297
mockIsoReader.EXPECT().Read(depsIsoPath).Return(metadata, nil),
216298

217-
mockHostNet.EXPECT().AddLoopbackAliases("some-bosh-director-ip", "some-cf-router-ip"),
218-
219299
mockUI.EXPECT().Say("Creating the VM..."),
220300
mockHypervisor.EXPECT().CreateVM(hypervisor.VM{
221301
Name: "cfdev",
@@ -274,6 +354,7 @@ var _ = Describe("Start", func() {
274354
mockAnalyticsClient.EXPECT().Event(cfanalytics.START_BEGIN),
275355
mockHost.EXPECT().CheckRequirements(),
276356
mockHypervisor.EXPECT().IsRunning("cfdev").Return(false, nil),
357+
mockHostNet.EXPECT().AddLoopbackAliases("some-bosh-director-ip", "some-cf-router-ip"),
277358
mockUI.EXPECT().Say("Downloading Resources..."),
278359
mockCache.EXPECT().Sync(resource.Catalog{
279360
Items: []resource.Item{
@@ -282,7 +363,6 @@ var _ = Describe("Start", func() {
282363
},
283364
}),
284365
mockIsoReader.EXPECT().Read(depsIsoPath).Return(metadata, nil),
285-
mockHostNet.EXPECT().AddLoopbackAliases("some-bosh-director-ip", "some-cf-router-ip"),
286366
mockUI.EXPECT().Say("Creating the VM..."),
287367
mockHypervisor.EXPECT().CreateVM(hypervisor.VM{
288368
Name: "cfdev",
@@ -326,11 +406,17 @@ var _ = Describe("Start", func() {
326406
ioutil.WriteFile(customIso, []byte{}, 0644)
327407
metadata.Version = "v100"
328408

409+
if runtime.GOOS == "darwin" {
410+
mockUI.EXPECT().Say("Installing cfdevd network helper...")
411+
mockCFDevD.EXPECT().Install()
412+
}
413+
329414
gomock.InOrder(
330415
mockToggle.EXPECT().SetProp("type", "custom.iso"),
331416
mockAnalyticsClient.EXPECT().Event(cfanalytics.START_BEGIN),
332417
mockHost.EXPECT().CheckRequirements(),
333418
mockHypervisor.EXPECT().IsRunning("cfdev").Return(false, nil),
419+
mockHostNet.EXPECT().AddLoopbackAliases("some-bosh-director-ip", "some-cf-router-ip"),
334420
mockUI.EXPECT().Say("Downloading Resources..."),
335421
// don't download cf-deps.iso that we won't use
336422
mockCache.EXPECT().Sync(resource.Catalog{
@@ -364,6 +450,7 @@ var _ = Describe("Start", func() {
364450
mockAnalyticsClient.EXPECT().Event(cfanalytics.START_BEGIN),
365451
mockHost.EXPECT().CheckRequirements(),
366452
mockHypervisor.EXPECT().IsRunning("cfdev").Return(false, nil),
453+
mockHostNet.EXPECT().AddLoopbackAliases("some-bosh-director-ip", "some-cf-router-ip"),
367454
mockUI.EXPECT().Say("Downloading Resources..."),
368455
// don't download cf-deps.iso that we won't use
369456
mockCache.EXPECT().Sync(resource.Catalog{
@@ -372,7 +459,6 @@ var _ = Describe("Start", func() {
372459
},
373460
}),
374461
mockIsoReader.EXPECT().Read(customIso).Return(metadata, nil),
375-
mockHostNet.EXPECT().AddLoopbackAliases("some-bosh-director-ip", "some-cf-router-ip"),
376462
mockUI.EXPECT().Say("Creating the VM..."),
377463
mockHypervisor.EXPECT().CreateVM(hypervisor.VM{
378464
Name: "cfdev",

src/code.cloudfoundry.org/cfdev/resource/cache.go

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"crypto/md5"
55
"fmt"
66
"io"
7-
"io/ioutil"
87
"net/http"
98
"os"
109
"path/filepath"
@@ -39,7 +38,7 @@ func (c *Cache) Sync(clog Catalog) error {
3938
}
4039
}
4140
c.Progress.End()
42-
return c.removeUnknown(clog)
41+
return nil
4342
}
4443

4544
func (c *Cache) total(clog Catalog) uint64 {
@@ -124,25 +123,6 @@ func (c *Cache) downloadHTTP(url, tmpPath string) error {
124123
return nil
125124
}
126125

127-
func (c *Cache) removeUnknown(clog Catalog) error {
128-
known := make(map[string]bool, 0)
129-
for _, item := range clog.Items {
130-
known[item.Name] = true
131-
}
132-
files, err := ioutil.ReadDir(c.Dir)
133-
if err != nil {
134-
return err
135-
}
136-
for _, fi := range files {
137-
if !known[fi.Name()] {
138-
if err := os.Remove(filepath.Join(c.Dir, fi.Name())); err != nil {
139-
return err
140-
}
141-
}
142-
}
143-
return nil
144-
}
145-
146126
func (c *Cache) checksumMatches(path, md5 string) (bool, error) {
147127
if c.SkipAssetVerification {
148128
return fileExists(path)

src/code.cloudfoundry.org/cfdev/resource/cache_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,11 @@ var _ = Describe("Cache Sync", func() {
193193
BeforeEach(func() {
194194
createFile(tmpDir, "unknown-resource", "unknown-content")
195195
})
196-
It("deletes the unknown file", func() {
196+
It("leaves the unknown file", func() {
197197
Expect(cache.Sync(catalog)).To(Succeed())
198198

199199
filename := filepath.Join(tmpDir, "unknown-resource")
200-
Expect(filename).ToNot(BeAnExistingFile())
200+
Expect(filename).To(BeAnExistingFile())
201201
})
202202
})
203203

src/code.cloudfoundry.org/cfdev/resource/catalog.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ type Item struct {
1212
InUse bool
1313
}
1414

15-
func (c Catalog) Lookup(name string) *Item {
15+
func (c *Catalog) Lookup(name string) *Item {
1616
for index := range c.Items {
1717
item := &c.Items[index]
1818
if item.Name == name {
@@ -21,3 +21,14 @@ func (c Catalog) Lookup(name string) *Item {
2121
}
2222
return nil
2323
}
24+
25+
26+
func (c *Catalog) Remove(name string) {
27+
newItems := make([]Item, 0, len(c.Items))
28+
for _, item := range c.Items {
29+
if item.Name != name {
30+
newItems = append(newItems, item)
31+
}
32+
}
33+
c.Items = newItems
34+
}

0 commit comments

Comments
 (0)