func NewStepDefaultTimeout(name string, w *Workflow) *Step {
	return NewStep(name, w, 0)
}
NewStepDefaultTimeout creates a Step with given name using default timeout from the workflow
package daisy
import (
	"context"
	"fmt"
	"reflect"
	"strings"
	"time"
)
type stepImpl interface {
	populate(ctx context.Context, s *Step) DError
	validate(ctx context.Context, s *Step) DError
	run(ctx context.Context, s *Step) DError
}
type Step struct {
	name string
	w    *Workflow
	TimeoutDescription string `json:",omitempty"`
	Timeout string `json:",omitempty"`
	timeout time.Duration
	AttachDisks               *AttachDisks               `json:",omitempty"`
	DetachDisks               *DetachDisks               `json:",omitempty"`
	CreateDisks               *CreateDisks               `json:",omitempty"`
	CreateForwardingRules     *CreateForwardingRules     `json:",omitempty"`
	CreateFirewallRules       *CreateFirewallRules       `json:",omitempty"`
	CreateImages              *CreateImages              `json:",omitempty"`
	CreateMachineImages       *CreateMachineImages       `json:",omitempty"`
	CreateInstances           *CreateInstances           `json:",omitempty"`
	CreateNetworks            *CreateNetworks            `json:",omitempty"`
	CreateSnapshots           *CreateSnapshots           `json:",omitempty"`
	CreateSubnetworks         *CreateSubnetworks         `json:",omitempty"`
	CreateTargetInstances     *CreateTargetInstances     `json:",omitempty"`
	CopyGCSObjects            *CopyGCSObjects            `json:",omitempty"`
	ResizeDisks               *ResizeDisks               `json:",omitempty"`
	StartInstances            *StartInstances            `json:",omitempty"`
	StopInstances             *StopInstances             `json:",omitempty"`
	DeleteResources           *DeleteResources           `json:",omitempty"`
	DeprecateImages           *DeprecateImages           `json:",omitempty"`
	IncludeWorkflow           *IncludeWorkflow           `json:",omitempty"`
	SubWorkflow               *SubWorkflow               `json:",omitempty"`
	WaitForInstancesSignal    *WaitForInstancesSignal    `json:",omitempty"`
	WaitForAnyInstancesSignal *WaitForAnyInstancesSignal `json:",omitempty"`
	UpdateInstancesMetadata   *UpdateInstancesMetadata   `json:",omitempty"`
	testType stepImpl
}
func NewStep(name string, w *Workflow, timeout time.Duration) *Step {
	if timeout <= 0 {
		return &Step{name: name, w: w, Timeout: w.DefaultTimeout}
	}
	return &Step{name: name, w: w, timeout: timeout}
}