func NewLatticeServiceStackDeploy()

in pkg/deploy/stack_deployer.go [66:107]


func NewLatticeServiceStackDeploy(
	log gwlog.Logger,
	cloud pkg_aws.Cloud,
	k8sClient client.Client,
) *latticeServiceStackDeployer {
	brTgBuilder := gateway.NewBackendRefTargetGroupBuilder(log, k8sClient)

	tgMgr := lattice.NewTargetGroupManager(log, cloud)
	tgSvcExpBuilder := gateway.NewSvcExportTargetGroupBuilder(log, k8sClient)
	svcBuilder := gateway.NewLatticeServiceBuilder(log, k8sClient, brTgBuilder)

	tgGcOnce.Do(func() {
		// TODO: need to refactor TG synthesizer. Remove stack from constructor
		// arguments and use it as Synth argument. That will help with Synth
		// reuse for GC purposes
		tgGcSynth := lattice.NewTargetGroupSynthesizer(log, cloud, k8sClient, tgMgr, tgSvcExpBuilder, svcBuilder, nil)
		tgGcFn := NewTgGcFn(tgGcSynth)
		tgGc = &TgGc{
			lock:    sync.RWMutex{},
			log:     log.Named("tg-gc"),
			ctx:     context.TODO(),
			isDone:  atomic.Bool{},
			ivl:     TG_GC_IVL,
			cycleFn: tgGcFn,
		}
		tgGc.start()
	})

	return &latticeServiceStackDeployer{
		log:                   log,
		cloud:                 cloud,
		k8sClient:             k8sClient,
		latticeServiceManager: lattice.NewServiceManager(log, cloud),
		targetGroupManager:    tgMgr,
		targetsManager:        lattice.NewTargetsManager(log, cloud),
		listenerManager:       lattice.NewListenerManager(log, cloud),
		ruleManager:           lattice.NewRuleManager(log, cloud),
		dnsEndpointManager:    externaldns.NewDnsEndpointManager(log, k8sClient),
		svcExportTgBuilder:    tgSvcExpBuilder,
		svcBuilder:            svcBuilder,
	}
}