func buildFactory() ( deps concreteFactoryDependencies, factory Factory) { deps.settings = &fakesettings.FakeSettingsService{} deps.platform = fakeplatform.NewFakePlatform() deps.blobstore = &fakeblobstore.FakeBlobstore{} deps.taskService = &faketask.FakeService{} deps.notifier = fakenotif.NewFakeNotifier() deps.applier = fakeappl.NewFakeApplier() deps.compiler = fakecomp.NewFakeCompiler() deps.monitor = fakemon.NewFakeMonitor() deps.specService = fakeas.NewFakeV1Service() deps.dirProvider = boshdirs.NewDirectoriesProvider("/foo") deps.drainScriptProvider = boshdrain.NewDrainScriptProvider(nil, nil, deps.dirProvider) factory = NewFactory( deps.settings, deps.platform, deps.blobstore, deps.taskService, deps.notifier, deps.applier, deps.compiler, deps.monitor, deps.specService, deps.dirProvider, deps.drainScriptProvider, ) return }
func buildDrain() ( cmdRunner *fakesys.FakeCmdRunner, fs *fakesys.FakeFileSystem, notifier *fakenotif.FakeNotifier, specService *fakeas.FakeV1Service, action drainAction, ) { cmdRunner = fakesys.NewFakeCmdRunner() fs = fakesys.NewFakeFileSystem() notifier = fakenotif.NewFakeNotifier() specService = fakeas.NewFakeV1Service() dirProvider := boshdirs.NewDirectoriesProvider("/fake-dir") drainScriptProvider := boshdrain.NewDrainScriptProvider(cmdRunner, fs, dirProvider) action = newDrain(notifier, specService, drainScriptProvider) return }
func (app app) Run(args []string) (err error) { opts, err := parseOptions(args) if err != nil { err = bosherr.WrapError(err, "Parsing options") return } dirProvider := boshdirs.NewDirectoriesProvider("/var/vcap") infProvider := boshinf.NewProvider(app.logger) infrastructure, err := infProvider.Get(opts.InfrastructureName) if err != nil { err = bosherr.WrapError(err, "Getting infrastructure") return } platformProvider := boshplatform.NewProvider(app.logger, dirProvider) platform, err := platformProvider.Get(opts.PlatformName) if err != nil { err = bosherr.WrapError(err, "Getting platform") return } boot := boshboot.New(infrastructure, platform) settingsService, err := boot.Run() if err != nil { err = bosherr.WrapError(err, "Running bootstrap") return } mbusHandlerProvider := boshmbus.NewHandlerProvider(settingsService, app.logger) mbusHandler, err := mbusHandlerProvider.Get() if err != nil { err = bosherr.WrapError(err, "Getting mbus handler") return } blobstoreProvider := boshblob.NewProvider(platform) blobstore, err := blobstoreProvider.Get(settingsService.GetBlobstore()) if err != nil { err = bosherr.WrapError(err, "Getting blobstore") return } monitClientProvider := boshmonit.NewProvider(platform) monitClient, err := monitClientProvider.Get() if err != nil { err = bosherr.WrapError(err, "Getting monit client") return } monitor := boshmon.NewMonit(platform.GetFs(), platform.GetRunner(), monitClient, app.logger) notifier := boshnotif.NewNotifier(mbusHandler) applier := boshappl.NewApplierProvider(platform, blobstore, monitor, dirProvider).Get() compiler := boshcomp.NewCompilerProvider(platform, blobstore, dirProvider).Get() taskService := boshtask.NewAsyncTaskService(app.logger) specFilePath := filepath.Join(dirProvider.BaseDir(), "bosh", "spec.json") specService := boshas.NewConcreteV1Service(platform.GetFs(), specFilePath) drainScriptProvider := boshdrain.NewDrainScriptProvider(platform.GetRunner(), platform.GetFs(), dirProvider) actionFactory := boshaction.NewFactory( settingsService, platform, blobstore, taskService, notifier, applier, compiler, monitor, specService, dirProvider, drainScriptProvider, ) actionRunner := boshaction.NewRunner() actionDispatcher := boshagent.NewActionDispatcher(app.logger, taskService, actionFactory, actionRunner) agent := boshagent.New(settingsService, app.logger, mbusHandler, platform, actionDispatcher) err = agent.Run() if err != nil { err = bosherr.WrapError(err, "Running agent") } return }