package awsec2


// Props for a PlacementGroup.
//
// Example:
//   var instanceType instanceType
//
//
//   pg := ec2.NewPlacementGroup(this, jsii.String("test-pg"), &PlacementGroupProps{
//   	Strategy: ec2.PlacementGroupStrategy_SPREAD,
//   })
//
//   ec2.NewInstance(this, jsii.String("Instance"), &InstanceProps{
//   	Vpc: Vpc,
//   	InstanceType: InstanceType,
//   	MachineImage: ec2.MachineImage_LatestAmazonLinux2023(),
//   	PlacementGroup: pg,
//   })
//
type PlacementGroupProps struct {
	// The number of partitions.
	//
	// Valid only when Strategy is set to partition.
	// Default: 0.
	//
	Partitions *float64 `field:"optional" json:"partitions" yaml:"partitions"`
	// the name of this placement group.
	// Default: - generated by CFN.
	//
	PlacementGroupName *string `field:"optional" json:"placementGroupName" yaml:"placementGroupName"`
	// Places instances on distinct hardware.
	//
	// Spread placement groups are recommended for applications
	// that have a small number of critical instances that should be kept separate from each other.
	// Launching instances in a spread level placement group reduces the risk of simultaneous failures
	// that might occur when instances share the same equipment.
	// Spread level placement groups provide access to distinct hardware,
	// and are therefore suitable for mixing instance types or launching instances over time.
	// If you start or launch an instance in a spread placement group and there is insufficient
	// unique hardware to fulfill the request, the request fails. Amazon EC2 makes more distinct hardware
	// available over time, so you can try your request again later.
	// Placement groups can spread instances across racks or hosts.
	// You can use host level spread placement groups only with AWS Outposts.
	// Default: - no spread level.
	//
	SpreadLevel PlacementGroupSpreadLevel `field:"optional" json:"spreadLevel" yaml:"spreadLevel"`
	// Which strategy to use when launching instances.
	// Default: - `PlacementGroupStrategy.PARTITION` if `partitions` is defined, `CLUSTER` otherwise
	//
	Strategy PlacementGroupStrategy `field:"optional" json:"strategy" yaml:"strategy"`
}

