1package instance
2
3import (
4	biblobstore "github.com/cloudfoundry/bosh-cli/blobstore"
5	biinstancestate "github.com/cloudfoundry/bosh-cli/deployment/instance/state"
6	bisshtunnel "github.com/cloudfoundry/bosh-cli/deployment/sshtunnel"
7	bivm "github.com/cloudfoundry/bosh-cli/deployment/vm"
8	boshlog "github.com/cloudfoundry/bosh-utils/logger"
9)
10
11type Factory interface {
12	NewInstance(
13		jobName string,
14		id int,
15		vm bivm.VM,
16		vmManager bivm.Manager,
17		sshTunnelFactory bisshtunnel.Factory,
18		blobstore biblobstore.Blobstore,
19		logger boshlog.Logger,
20	) Instance
21}
22
23type factory struct {
24	stateBuilderFactory biinstancestate.BuilderFactory
25}
26
27func NewFactory(
28	stateBuilderFactory biinstancestate.BuilderFactory,
29) Factory {
30	return &factory{
31		stateBuilderFactory: stateBuilderFactory,
32	}
33}
34
35func (f *factory) NewInstance(
36	jobName string,
37	id int,
38	vm bivm.VM,
39	vmManager bivm.Manager,
40	sshTunnelFactory bisshtunnel.Factory,
41	blobstore biblobstore.Blobstore,
42	logger boshlog.Logger,
43) Instance {
44	stateBuilder := f.stateBuilderFactory.NewBuilder(blobstore, vm.AgentClient())
45
46	return NewInstance(
47		jobName,
48		id,
49		vm,
50		vmManager,
51		sshTunnelFactory,
52		stateBuilder,
53		logger,
54	)
55}
56