1package installation 2 3import ( 4 biinstallmanifest "github.com/cloudfoundry/bosh-cli/installation/manifest" 5 biregistry "github.com/cloudfoundry/bosh-cli/registry" 6 biui "github.com/cloudfoundry/bosh-cli/ui" 7 bosherr "github.com/cloudfoundry/bosh-utils/errors" 8 boshlog "github.com/cloudfoundry/bosh-utils/logger" 9) 10 11type Installation interface { 12 Target() Target 13 Job() InstalledJob 14 WithRunningRegistry(boshlog.Logger, biui.Stage, func() error) error 15 StartRegistry() error 16 StopRegistry() error 17} 18 19type installation struct { 20 target Target 21 job InstalledJob 22 manifest biinstallmanifest.Manifest 23 registryServerManager biregistry.ServerManager 24 25 registryServer biregistry.Server 26} 27 28func NewInstallation( 29 target Target, 30 job InstalledJob, 31 manifest biinstallmanifest.Manifest, 32 registryServerManager biregistry.ServerManager, 33) Installation { 34 return &installation{ 35 target: target, 36 job: job, 37 manifest: manifest, 38 registryServerManager: registryServerManager, 39 } 40} 41 42func (i *installation) Target() Target { 43 return i.target 44} 45 46func (i *installation) Job() InstalledJob { 47 return i.job 48} 49 50func (i *installation) WithRunningRegistry(logger boshlog.Logger, stage biui.Stage, fn func() error) error { 51 err := stage.Perform("Starting registry", func() error { 52 return i.StartRegistry() 53 }) 54 if err != nil { 55 return err 56 } 57 defer i.stopRegistryNice(logger, stage) 58 return fn() 59} 60 61func (i *installation) stopRegistryNice(logger boshlog.Logger, stage biui.Stage) { 62 err := stage.Perform("Stopping registry", func() error { 63 return i.StopRegistry() 64 }) 65 if err != nil { 66 logger.Warn("installation", "Registry failed to stop: %s", err) 67 } 68} 69 70func (i *installation) StartRegistry() error { 71 if !i.manifest.Registry.IsEmpty() { 72 if i.registryServer != nil { 73 return bosherr.Error("Registry already started") 74 } 75 config := i.manifest.Registry 76 registryServer, err := i.registryServerManager.Start(config.Username, config.Password, config.Host, config.Port) 77 if err != nil { 78 return bosherr.WrapError(err, "Starting registry") 79 } 80 i.registryServer = registryServer 81 } 82 return nil 83} 84 85func (i *installation) StopRegistry() error { 86 if !i.manifest.Registry.IsEmpty() { 87 if i.registryServer == nil { 88 return bosherr.Error("Registry must be started before it can be stopped") 89 } 90 err := i.registryServer.Stop() 91 if err != nil { 92 return bosherr.WrapError(err, "Stopping registry") 93 } 94 i.registryServer = nil 95 } 96 return nil 97} 98