// Code generated by smithy-go-codegen DO NOT EDIT.

package types

import (
	smithydocument "github.com/aws/smithy-go/document"
	"time"
)

// Describes an action. For more information, see FIS actions
// (https://docs.aws.amazon.com/fis/latest/userguide/fis-actions-reference.html) in
// the Fault Injection Simulator User Guide.
type Action struct {

	// The description for the action.
	Description *string

	// The ID of the action.
	Id *string

	// The action parameters, if applicable.
	Parameters map[string]ActionParameter

	// The tags for the action.
	Tags map[string]string

	// The supported targets for the action.
	Targets map[string]ActionTarget

	noSmithyDocumentSerde
}

// Describes a parameter for an action.
type ActionParameter struct {

	// The parameter description.
	Description *string

	// Indicates whether the parameter is required.
	Required bool

	noSmithyDocumentSerde
}

// Provides a summary of an action.
type ActionSummary struct {

	// The description for the action.
	Description *string

	// The ID of the action.
	Id *string

	// The tags for the action.
	Tags map[string]string

	// The targets for the action.
	Targets map[string]ActionTarget

	noSmithyDocumentSerde
}

// Describes a target for an action.
type ActionTarget struct {

	// The resource type of the target.
	ResourceType *string

	noSmithyDocumentSerde
}

// Specifies an action for an experiment template. For more information, see
// Actions (https://docs.aws.amazon.com/fis/latest/userguide/actions.html) in the
// Fault Injection Simulator User Guide.
type CreateExperimentTemplateActionInput struct {

	// The ID of the action. The format of the action ID is:
	// aws:service-name:action-type.
	//
	// This member is required.
	ActionId *string

	// A description for the action.
	Description *string

	// The parameters for the action, if applicable.
	Parameters map[string]string

	// The name of the action that must be completed before the current action starts.
	// Omit this parameter to run the action at the start of the experiment.
	StartAfter []string

	// The targets for the action.
	Targets map[string]string

	noSmithyDocumentSerde
}

// Specifies the configuration for experiment logging.
type CreateExperimentTemplateLogConfigurationInput struct {

	// The schema version.
	//
	// This member is required.
	LogSchemaVersion *int32

	// The configuration for experiment logging to Amazon CloudWatch Logs.
	CloudWatchLogsConfiguration *ExperimentTemplateCloudWatchLogsLogConfigurationInput

	// The configuration for experiment logging to Amazon S3.
	S3Configuration *ExperimentTemplateS3LogConfigurationInput

	noSmithyDocumentSerde
}

// Specifies a stop condition for an experiment template.
type CreateExperimentTemplateStopConditionInput struct {

	// The source for the stop condition. Specify aws:cloudwatch:alarm if the stop
	// condition is defined by a CloudWatch alarm. Specify none if there is no stop
	// condition.
	//
	// This member is required.
	Source *string

	// The Amazon Resource Name (ARN) of the CloudWatch alarm. This is required if the
	// source is a CloudWatch alarm.
	Value *string

	noSmithyDocumentSerde
}

// Specifies a target for an experiment. You must specify at least one Amazon
// Resource Name (ARN) or at least one resource tag. You cannot specify both ARNs
// and tags. For more information, see Targets
// (https://docs.aws.amazon.com/fis/latest/userguide/targets.html) in the Fault
// Injection Simulator User Guide.
type CreateExperimentTemplateTargetInput struct {

	// The resource type. The resource type must be supported for the specified action.
	//
	// This member is required.
	ResourceType *string

	// Scopes the identified resources to a specific count of the resources at random,
	// or a percentage of the resources. All identified resources are included in the
	// target.
	//
	// * ALL - Run the action on all identified targets. This is the
	// default.
	//
	// * COUNT(n) - Run the action on the specified number of targets, chosen
	// from the identified targets at random. For example, COUNT(1) selects one of the
	// targets.
	//
	// * PERCENT(n) - Run the action on the specified percentage of targets,
	// chosen from the identified targets at random. For example, PERCENT(25) selects
	// 25% of the targets.
	//
	// This member is required.
	SelectionMode *string

	// The filters to apply to identify target resources using specific attributes.
	Filters []ExperimentTemplateTargetInputFilter

	// The resource type parameters.
	Parameters map[string]string

	// The Amazon Resource Names (ARNs) of the resources.
	ResourceArns []string

	// The tags for the target resources.
	ResourceTags map[string]string

	noSmithyDocumentSerde
}

// Describes an experiment.
type Experiment struct {

	// The actions for the experiment.
	Actions map[string]ExperimentAction

	// The time that the experiment was created.
	CreationTime *time.Time

	// The time that the experiment ended.
	EndTime *time.Time

	// The ID of the experiment template.
	ExperimentTemplateId *string

	// The ID of the experiment.
	Id *string

	// The configuration for experiment logging.
	LogConfiguration *ExperimentLogConfiguration

	// The Amazon Resource Name (ARN) of an IAM role that grants the FIS service
	// permission to perform service actions on your behalf.
	RoleArn *string

	// The time that the experiment started.
	StartTime *time.Time

	// The state of the experiment.
	State *ExperimentState

	// The stop conditions for the experiment.
	StopConditions []ExperimentStopCondition

	// The tags for the experiment.
	Tags map[string]string

	// The targets for the experiment.
	Targets map[string]ExperimentTarget

	noSmithyDocumentSerde
}

// Describes the action for an experiment.
type ExperimentAction struct {

	// The ID of the action.
	ActionId *string

	// The description for the action.
	Description *string

	// The time that the action ended.
	EndTime *time.Time

	// The parameters for the action.
	Parameters map[string]string

	// The name of the action that must be completed before this action starts.
	StartAfter []string

	// The time that the action started.
	StartTime *time.Time

	// The state of the action.
	State *ExperimentActionState

	// The targets for the action.
	Targets map[string]string

	noSmithyDocumentSerde
}

// Describes the state of an action.
type ExperimentActionState struct {

	// The reason for the state.
	Reason *string

	// The state of the action.
	Status ExperimentActionStatus

	noSmithyDocumentSerde
}

// Describes the configuration for experiment logging to Amazon CloudWatch Logs.
type ExperimentCloudWatchLogsLogConfiguration struct {

	// The Amazon Resource Name (ARN) of the destination Amazon CloudWatch Logs log
	// group.
	LogGroupArn *string

	noSmithyDocumentSerde
}

// Describes the configuration for experiment logging.
type ExperimentLogConfiguration struct {

	// The configuration for experiment logging to Amazon CloudWatch Logs.
	CloudWatchLogsConfiguration *ExperimentCloudWatchLogsLogConfiguration

	// The schema version.
	LogSchemaVersion *int32

	// The configuration for experiment logging to Amazon S3.
	S3Configuration *ExperimentS3LogConfiguration

	noSmithyDocumentSerde
}

// Describes the configuration for experiment logging to Amazon S3.
type ExperimentS3LogConfiguration struct {

	// The name of the destination bucket.
	BucketName *string

	// The bucket prefix.
	Prefix *string

	noSmithyDocumentSerde
}

// Describes the state of an experiment.
type ExperimentState struct {

	// The reason for the state.
	Reason *string

	// The state of the experiment.
	Status ExperimentStatus

	noSmithyDocumentSerde
}

// Describes the stop condition for an experiment.
type ExperimentStopCondition struct {

	// The source for the stop condition.
	Source *string

	// The Amazon Resource Name (ARN) of the CloudWatch alarm, if applicable.
	Value *string

	noSmithyDocumentSerde
}

// Provides a summary of an experiment.
type ExperimentSummary struct {

	// The time that the experiment was created.
	CreationTime *time.Time

	// The ID of the experiment template.
	ExperimentTemplateId *string

	// The ID of the experiment.
	Id *string

	// The state of the experiment.
	State *ExperimentState

	// The tags for the experiment.
	Tags map[string]string

	noSmithyDocumentSerde
}

// Describes a target for an experiment.
type ExperimentTarget struct {

	// The filters to apply to identify target resources using specific attributes.
	Filters []ExperimentTargetFilter

	// The resource type parameters.
	Parameters map[string]string

	// The Amazon Resource Names (ARNs) of the resources.
	ResourceArns []string

	// The tags for the target resources.
	ResourceTags map[string]string

	// The resource type.
	ResourceType *string

	// Scopes the identified resources to a specific count or percentage.
	SelectionMode *string

	noSmithyDocumentSerde
}

// Describes a filter used for the target resources in an experiment.
type ExperimentTargetFilter struct {

	// The attribute path for the filter.
	Path *string

	// The attribute values for the filter.
	Values []string

	noSmithyDocumentSerde
}

// Describes an experiment template.
type ExperimentTemplate struct {

	// The actions for the experiment.
	Actions map[string]ExperimentTemplateAction

	// The time the experiment template was created.
	CreationTime *time.Time

	// The description for the experiment template.
	Description *string

	// The ID of the experiment template.
	Id *string

	// The time the experiment template was last updated.
	LastUpdateTime *time.Time

	// The configuration for experiment logging.
	LogConfiguration *ExperimentTemplateLogConfiguration

	// The Amazon Resource Name (ARN) of an IAM role.
	RoleArn *string

	// The stop conditions for the experiment.
	StopConditions []ExperimentTemplateStopCondition

	// The tags for the experiment template.
	Tags map[string]string

	// The targets for the experiment.
	Targets map[string]ExperimentTemplateTarget

	noSmithyDocumentSerde
}

// Describes an action for an experiment template.
type ExperimentTemplateAction struct {

	// The ID of the action.
	ActionId *string

	// A description for the action.
	Description *string

	// The parameters for the action.
	Parameters map[string]string

	// The name of the action that must be completed before the current action starts.
	StartAfter []string

	// The targets for the action.
	Targets map[string]string

	noSmithyDocumentSerde
}

// Describes the configuration for experiment logging to Amazon CloudWatch Logs.
type ExperimentTemplateCloudWatchLogsLogConfiguration struct {

	// The Amazon Resource Name (ARN) of the destination Amazon CloudWatch Logs log
	// group.
	LogGroupArn *string

	noSmithyDocumentSerde
}

// Specifies the configuration for experiment logging to Amazon CloudWatch Logs.
type ExperimentTemplateCloudWatchLogsLogConfigurationInput struct {

	// The Amazon Resource Name (ARN) of the destination Amazon CloudWatch Logs log
	// group.
	//
	// This member is required.
	LogGroupArn *string

	noSmithyDocumentSerde
}

// Describes the configuration for experiment logging.
type ExperimentTemplateLogConfiguration struct {

	// The configuration for experiment logging to Amazon CloudWatch Logs.
	CloudWatchLogsConfiguration *ExperimentTemplateCloudWatchLogsLogConfiguration

	// The schema version.
	LogSchemaVersion *int32

	// The configuration for experiment logging to Amazon S3.
	S3Configuration *ExperimentTemplateS3LogConfiguration

	noSmithyDocumentSerde
}

// Describes the configuration for experiment logging to Amazon S3.
type ExperimentTemplateS3LogConfiguration struct {

	// The name of the destination bucket.
	BucketName *string

	// The bucket prefix.
	Prefix *string

	noSmithyDocumentSerde
}

// Specifies the configuration for experiment logging to Amazon S3.
type ExperimentTemplateS3LogConfigurationInput struct {

	// The name of the destination bucket.
	//
	// This member is required.
	BucketName *string

	// The bucket prefix.
	Prefix *string

	noSmithyDocumentSerde
}

// Describes a stop condition for an experiment template.
type ExperimentTemplateStopCondition struct {

	// The source for the stop condition.
	Source *string

	// The Amazon Resource Name (ARN) of the CloudWatch alarm, if applicable.
	Value *string

	noSmithyDocumentSerde
}

// Provides a summary of an experiment template.
type ExperimentTemplateSummary struct {

	// The time that the experiment template was created.
	CreationTime *time.Time

	// The description of the experiment template.
	Description *string

	// The ID of the experiment template.
	Id *string

	// The time that the experiment template was last updated.
	LastUpdateTime *time.Time

	// The tags for the experiment template.
	Tags map[string]string

	noSmithyDocumentSerde
}

// Describes a target for an experiment template.
type ExperimentTemplateTarget struct {

	// The filters to apply to identify target resources using specific attributes.
	Filters []ExperimentTemplateTargetFilter

	// The resource type parameters.
	Parameters map[string]string

	// The Amazon Resource Names (ARNs) of the targets.
	ResourceArns []string

	// The tags for the target resources.
	ResourceTags map[string]string

	// The resource type.
	ResourceType *string

	// Scopes the identified resources to a specific count or percentage.
	SelectionMode *string

	noSmithyDocumentSerde
}

// Describes a filter used for the target resources in an experiment template.
type ExperimentTemplateTargetFilter struct {

	// The attribute path for the filter.
	Path *string

	// The attribute values for the filter.
	Values []string

	noSmithyDocumentSerde
}

// Specifies a filter used for the target resource input in an experiment template.
// For more information, see Resource filters
// (https://docs.aws.amazon.com/fis/latest/userguide/targets.html#target-filters)
// in the Fault Injection Simulator User Guide.
type ExperimentTemplateTargetInputFilter struct {

	// The attribute path for the filter.
	//
	// This member is required.
	Path *string

	// The attribute values for the filter.
	//
	// This member is required.
	Values []string

	noSmithyDocumentSerde
}

// Describes a resource type.
type TargetResourceType struct {

	// A description of the resource type.
	Description *string

	// The parameters for the resource type.
	Parameters map[string]TargetResourceTypeParameter

	// The resource type.
	ResourceType *string

	noSmithyDocumentSerde
}

// Describes the parameters for a resource type. Use parameters to determine which
// tasks are identified during target resolution.
type TargetResourceTypeParameter struct {

	// A description of the parameter.
	Description *string

	// Indicates whether the parameter is required.
	Required bool

	noSmithyDocumentSerde
}

// Describes a resource type.
type TargetResourceTypeSummary struct {

	// A description of the resource type.
	Description *string

	// The resource type.
	ResourceType *string

	noSmithyDocumentSerde
}

// Specifies an action for an experiment template.
type UpdateExperimentTemplateActionInputItem struct {

	// The ID of the action.
	ActionId *string

	// A description for the action.
	Description *string

	// The parameters for the action, if applicable.
	Parameters map[string]string

	// The name of the action that must be completed before the current action starts.
	// Omit this parameter to run the action at the start of the experiment.
	StartAfter []string

	// The targets for the action.
	Targets map[string]string

	noSmithyDocumentSerde
}

// Specifies the configuration for experiment logging.
type UpdateExperimentTemplateLogConfigurationInput struct {

	// The configuration for experiment logging to Amazon CloudWatch Logs.
	CloudWatchLogsConfiguration *ExperimentTemplateCloudWatchLogsLogConfigurationInput

	// The schema version.
	LogSchemaVersion *int32

	// The configuration for experiment logging to Amazon S3.
	S3Configuration *ExperimentTemplateS3LogConfigurationInput

	noSmithyDocumentSerde
}

// Specifies a stop condition for an experiment. You can define a stop condition as
// a CloudWatch alarm.
type UpdateExperimentTemplateStopConditionInput struct {

	// The source for the stop condition. Specify aws:cloudwatch:alarm if the stop
	// condition is defined by a CloudWatch alarm. Specify none if there is no stop
	// condition.
	//
	// This member is required.
	Source *string

	// The Amazon Resource Name (ARN) of the CloudWatch alarm.
	Value *string

	noSmithyDocumentSerde
}

// Specifies a target for an experiment. You must specify at least one Amazon
// Resource Name (ARN) or at least one resource tag. You cannot specify both.
type UpdateExperimentTemplateTargetInput struct {

	// The resource type. The resource type must be supported for the specified action.
	//
	// This member is required.
	ResourceType *string

	// Scopes the identified resources to a specific count or percentage.
	//
	// This member is required.
	SelectionMode *string

	// The filters to apply to identify target resources using specific attributes.
	Filters []ExperimentTemplateTargetInputFilter

	// The resource type parameters.
	Parameters map[string]string

	// The Amazon Resource Names (ARNs) of the targets.
	ResourceArns []string

	// The tags for the target resources.
	ResourceTags map[string]string

	noSmithyDocumentSerde
}

type noSmithyDocumentSerde = smithydocument.NoSerde
