func New(name string, templateRenderer TemplateRenderer, cloudSetup CloudSetup, cloudSubscriber CloudSubscriber, terraformApplier TerraformApplier) *Stack {
	return &Stack{
		name:             name,
		templateRenderer: templateRenderer,
		cloudSetup:       cloudSetup,
		cloudSubscriber:  cloudSubscriber,
		terraformApplier: terraformApplier,
	}
}
New returns an initialized Stack that is ready for deployment
package stack
import (
	"context"
	log "github.com/sirupsen/logrus"
	"time"
)
const (
	DefaultDeployTimeout = time.Minute * 5
)
type TemplateRenderer interface {
	RenderAll() error
}
type CloudSetup interface {
	Setup(ctx context.Context) error
}
type CloudSubscriber interface {
	Subscribe(ctx context.Context) (bool, error)
}
type TerraformApplier interface {
	Apply(ctx context.Context) ([]byte, error)
}
type Stack struct {
	name             string
	templateRenderer TemplateRenderer
	cloudSetup       CloudSetup
	cloudSubscriber  CloudSubscriber
	terraformApplier TerraformApplier
}