1package vm
2
3import (
4	"code.cloudfoundry.org/clock"
5	biagentclient "github.com/cloudfoundry/bosh-agent/agentclient"
6	bicloud "github.com/cloudfoundry/bosh-cli/cloud"
7	biconfig "github.com/cloudfoundry/bosh-cli/config"
8	boshlog "github.com/cloudfoundry/bosh-utils/logger"
9	boshsys "github.com/cloudfoundry/bosh-utils/system"
10	boshuuid "github.com/cloudfoundry/bosh-utils/uuid"
11)
12
13type ManagerFactory interface {
14	NewManager(cloud bicloud.Cloud, agentClient biagentclient.AgentClient) Manager
15}
16
17type managerFactory struct {
18	vmRepo        biconfig.VMRepo
19	stemcellRepo  biconfig.StemcellRepo
20	diskDeployer  DiskDeployer
21	uuidGenerator boshuuid.Generator
22	fs            boshsys.FileSystem
23	logger        boshlog.Logger
24}
25
26func NewManagerFactory(
27	vmRepo biconfig.VMRepo,
28	stemcellRepo biconfig.StemcellRepo,
29	diskDeployer DiskDeployer,
30	uuidGenerator boshuuid.Generator,
31	fs boshsys.FileSystem,
32	logger boshlog.Logger,
33) ManagerFactory {
34	return &managerFactory{
35		vmRepo:        vmRepo,
36		stemcellRepo:  stemcellRepo,
37		diskDeployer:  diskDeployer,
38		uuidGenerator: uuidGenerator,
39		fs:            fs,
40		logger:        logger,
41	}
42}
43
44func (f *managerFactory) NewManager(cloud bicloud.Cloud, agentClient biagentclient.AgentClient) Manager {
45	return NewManager(
46		f.vmRepo,
47		f.stemcellRepo,
48		f.diskDeployer,
49		agentClient,
50		cloud,
51		f.uuidGenerator,
52		f.fs,
53		f.logger,
54		clock.NewClock(),
55	)
56}
57