@ -3,7 +3,6 @@ package aws
import (
"encoding/base64"
"fmt"
"regexp"
"testing"
"github.com/aws/aws-sdk-go/aws"
@ -12,7 +11,46 @@ import (
"github.com/hashicorp/terraform/terraform"
)
func TestAccAWSSpotFleetRequest_basic ( t * testing . T ) {
func TestAccAWSSpotFleetRequest_changePriceForcesNewRequest ( t * testing . T ) {
var before , after ec2 . SpotFleetRequestConfig
resource . Test ( t , resource . TestCase {
PreCheck : func ( ) { testAccPreCheck ( t ) } ,
Providers : testAccProviders ,
CheckDestroy : testAccCheckAWSSpotFleetRequestDestroy ,
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccAWSSpotFleetRequestConfig ,
Check : resource . ComposeAggregateTestCheckFunc (
testAccCheckAWSSpotFleetRequestExists (
"aws_spot_fleet_request.foo" , & before ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_request_state" , "active" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_price" , "0.005" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.#" , "1" ) ,
) ,
} ,
resource . TestStep {
Config : testAccAWSSpotFleetRequestConfigChangeSpotBidPrice ,
Check : resource . ComposeAggregateTestCheckFunc (
testAccCheckAWSSpotFleetRequestExists (
"aws_spot_fleet_request.foo" , & after ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_request_state" , "active" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.#" , "1" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_price" , "0.01" ) ,
testAccCheckAWSSpotFleetRequestConfigRecreated ( t , & before , & after ) ,
) ,
} ,
} ,
} )
}
func TestAccAWSSpotFleetRequest_lowestPriceAzOrSubnetInRegion ( t * testing . T ) {
var sfr ec2 . SpotFleetRequestConfig
resource . Test ( t , resource . TestCase {
@ -22,33 +60,182 @@ func TestAccAWSSpotFleetRequest_basic(t *testing.T) {
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccAWSSpotFleetRequestConfig ,
Check : resource . ComposeTestCheckFunc (
Check : resource . ComposeAggregateTestCheckFunc (
testAccCheckAWSSpotFleetRequestExists (
"aws_spot_fleet_request.foo" , & sfr ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_request_state" , "active" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.#" , "1" ) ,
) ,
} ,
} ,
} )
}
func TestAccAWSSpotFleetRequest_lowestPriceAzInGivenList ( t * testing . T ) {
var sfr ec2 . SpotFleetRequestConfig
resource . Test ( t , resource . TestCase {
PreCheck : func ( ) { testAccPreCheck ( t ) } ,
Providers : testAccProviders ,
CheckDestroy : testAccCheckAWSSpotFleetRequestDestroy ,
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccAWSSpotFleetRequestConfigWithAzs ,
Check : resource . ComposeAggregateTestCheckFunc (
testAccCheckAWSSpotFleetRequestExists (
"aws_spot_fleet_request.foo" , & sfr ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_request_state" , "active" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.#" , "2" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.1590006269.availability_zone" , "us-west-2a" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.3809475891.availability_zone" , "us-west-2b" ) ,
) ,
} ,
} ,
} )
}
func TestAccAWSSpotFleetRequest_lowestPriceSubnetInGivenList ( t * testing . T ) {
var sfr ec2 . SpotFleetRequestConfig
resource . Test ( t , resource . TestCase {
PreCheck : func ( ) { testAccPreCheck ( t ) } ,
Providers : testAccProviders ,
CheckDestroy : testAccCheckAWSSpotFleetRequestDestroy ,
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccAWSSpotFleetRequestConfigWithSubnet ,
Check : resource . ComposeAggregateTestCheckFunc (
testAccCheckAWSSpotFleetRequestExists (
"aws_spot_fleet_request.foo" , & sfr ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_request_state" , "active" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.#" , "2" ) ,
) ,
} ,
} ,
} )
}
func TestAccAWSSpotFleetRequest_multipleInstanceTypesInSameAz ( t * testing . T ) {
var sfr ec2 . SpotFleetRequestConfig
resource . Test ( t , resource . TestCase {
PreCheck : func ( ) { testAccPreCheck ( t ) } ,
Providers : testAccProviders ,
CheckDestroy : testAccCheckAWSSpotFleetRequestDestroy ,
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccAWSSpotFleetRequestConfigMultipleInstanceTypesinSameAz ,
Check : resource . ComposeAggregateTestCheckFunc (
testAccCheckAWSSpotFleetRequestExists (
"aws_spot_fleet_request.foo" , & sfr ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_request_state" , "active" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.#" , "2" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.1590006269.instance_type" , "m1.small" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.1590006269.availability_zone" , "us-west-2a" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.3079734941.instance_type" , "m3.large" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.3079734941.availability_zone" , "us-west-2a" ) ,
) ,
} ,
} ,
} )
}
func TestAccAWSSpotFleetRequest_multipleInstanceTypesInSameSubnet ( t * testing . T ) {
var sfr ec2 . SpotFleetRequestConfig
resource . Test ( t , resource . TestCase {
PreCheck : func ( ) { testAccPreCheck ( t ) } ,
Providers : testAccProviders ,
CheckDestroy : testAccCheckAWSSpotFleetRequestDestroy ,
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccAWSSpotFleetRequestConfigMultipleInstanceTypesinSameSubnet ,
Check : resource . ComposeAggregateTestCheckFunc (
testAccCheckAWSSpotFleetRequestExists (
"aws_spot_fleet_request.foo" , & sfr ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_request_state" , "active" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.#" , "2" ) ,
) ,
} ,
} ,
} )
}
func TestAccAWSSpotFleetRequest_overriddingSpotPrice ( t * testing . T ) {
var sfr ec2 . SpotFleetRequestConfig
resource . Test ( t , resource . TestCase {
PreCheck : func ( ) { testAccPreCheck ( t ) } ,
Providers : testAccProviders ,
CheckDestroy : testAccCheckAWSSpotFleetRequestDestroy ,
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccAWSSpotFleetRequestConfigOverridingSpotPrice ,
Check : resource . ComposeAggregateTestCheckFunc (
testAccCheckAWSSpotFleetRequestExists (
"aws_spot_fleet_request.foo" , & sfr ) ,
testAccCheckAWSSpotFleetRequestAttributes ( & sfr ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_request_state" , "active" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_price" , "0.005" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.#" , "2" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.522395050.spot_price" , "0.01" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.522395050.instance_type" , "m3.large" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.1590006269.spot_price" , "" ) , //there will not be a value here since it's not overriding
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.1590006269.instance_type" , "m1.small" ) ,
) ,
} ,
} ,
} )
}
func TestAccAWSSpotFleetRequest_brokenLaunchSpecification ( t * testing . T ) {
func TestAccAWSSpotFleetRequest_diversifiedAllocation ( t * testing . T ) {
var sfr ec2 . SpotFleetRequestConfig
resource . Test ( t , resource . TestCase {
PreCheck : func ( ) { testAccPreCheck ( t ) } ,
Providers : testAccProviders ,
CheckDestroy : testAccCheckAWSSpotFleetRequestDestroy ,
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccAWSSpotFleetRequestConfigBroken ,
ExpectError : regexp . MustCompile ( "LaunchSpecification must include a subnet_id or an availability_zone" ) ,
Config : testAccAWSSpotFleetRequestConfigDiversifiedAllocation ,
Check : resource . ComposeAggregateTestCheckFunc (
testAccCheckAWSSpotFleetRequestExists (
"aws_spot_fleet_request.foo" , & sfr ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_request_state" , "active" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.#" , "3" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "allocation_strategy" , "diversified" ) ,
) ,
} ,
} ,
} )
}
func TestAccAWSSpotFleetRequest_launchConfiguration ( t * testing . T ) {
func TestAccAWSSpotFleetRequest_ withWeightedCapacity ( t * testing . T ) {
var sfr ec2 . SpotFleetRequestConfig
resource . Test ( t , resource . TestCase {
@ -57,13 +244,22 @@ func TestAccAWSSpotFleetRequest_launchConfiguration(t *testing.T) {
CheckDestroy : testAccCheckAWSSpotFleetRequestDestroy ,
Steps : [ ] resource . TestStep {
resource . TestStep {
Config : testAccAWSSpotFleetRequest WithAdvancedLaunchSpecConfig ,
Check : resource . Compose TestCheckFunc(
Config : testAccAWSSpotFleetRequest ConfigWithWeightedCapacity ,
Check : resource . Compose Aggregate TestCheckFunc(
testAccCheckAWSSpotFleetRequestExists (
"aws_spot_fleet_request.foo" , & sfr ) ,
testAccCheckAWSSpotFleetRequest_LaunchSpecAttributes ( & sfr ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "spot_request_state" , "active" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.#" , "2" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.2325690000.weighted_capacity" , "3" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.2325690000.instance_type" , "r3.large" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.3079734941.weighted_capacity" , "6" ) ,
resource . TestCheckResourceAttr (
"aws_spot_fleet_request.foo" , "launch_specification.3079734941.instance_type" , "m3.large" ) ,
) ,
} ,
} ,
@ -77,6 +273,16 @@ func TestAccAWSSpotFleetRequest_CannotUseEmptyKeyName(t *testing.T) {
}
}
func testAccCheckAWSSpotFleetRequestConfigRecreated ( t * testing . T ,
before , after * ec2 . SpotFleetRequestConfig ) resource . TestCheckFunc {
return func ( s * terraform . State ) error {
if before . SpotFleetRequestId == after . SpotFleetRequestId {
t . Fatalf ( "Expected change of Spot Fleet Request IDs, but both were %v" , before . SpotFleetRequestId )
}
return nil
}
}
func testAccCheckAWSSpotFleetRequestExists (
n string , sfr * ec2 . SpotFleetRequestConfig ) resource . TestCheckFunc {
return func ( s * terraform . State ) error {
@ -110,19 +316,6 @@ func testAccCheckAWSSpotFleetRequestExists(
}
}
func testAccCheckAWSSpotFleetRequestAttributes (
sfr * ec2 . SpotFleetRequestConfig ) resource . TestCheckFunc {
return func ( s * terraform . State ) error {
if * sfr . SpotFleetRequestConfig . SpotPrice != "0.005" {
return fmt . Errorf ( "Unexpected spot price: %s" , * sfr . SpotFleetRequestConfig . SpotPrice )
}
if * sfr . SpotFleetRequestState != "active" {
return fmt . Errorf ( "Unexpected request state: %s" , * sfr . SpotFleetRequestState )
}
return nil
}
}
func testAccCheckAWSSpotFleetRequest_LaunchSpecAttributes (
sfr * ec2 . SpotFleetRequestConfig ) resource . TestCheckFunc {
return func ( s * terraform . State ) error {
@ -213,17 +406,63 @@ resource "aws_spot_fleet_request" "foo" {
spot_price = "0.005"
target_capacity = 2
valid_until = "2019-11-04T20:44:20Z"
terminate_instances_with_expiration = true
launch_specification {
instance_type = "m1.small"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
availability_zone = "us-west-2a"
}
depends_on = [ "aws_iam_policy_attachment.test-attach" ]
}
`
const testAccAWSSpotFleetRequestConfigBroken = `
const testAccAWSSpotFleetRequestConfigChangeSpotBidPrice = `
resource "aws_key_pair" "debugging" {
key_name = "tmp-key"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 phodgson@thoughtworks.com"
}
resource "aws_iam_policy_attachment" "test-attach" {
name = "test-attachment"
roles = [ "${aws_iam_role.test-role.name}" ]
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetRole"
}
resource "aws_iam_role" "test-role" {
name = "test-role"
assume_role_policy = << EOF
{
"Version" : "2012-10-17" ,
"Statement" : [
{
"Sid" : "" ,
"Effect" : "Allow" ,
"Principal" : {
"Service" : "spotfleet.amazonaws.com"
} ,
"Action" : "sts:AssumeRole"
}
]
}
EOF
}
resource "aws_spot_fleet_request" "foo" {
iam_fleet_role = "${aws_iam_role.test-role.arn}"
spot_price = "0.01"
target_capacity = 2
valid_until = "2019-11-04T20:44:20Z"
terminate_instances_with_expiration = true
launch_specification {
instance_type = "m1.small"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
}
depends_on = [ "aws_iam_policy_attachment.test-attach" ]
}
`
const testAccAWSSpotFleetRequestConfigWithAzs = `
resource "aws_key_pair" "debugging" {
key_name = "tmp-key"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 phodgson@thoughtworks.com"
@ -259,16 +498,24 @@ resource "aws_spot_fleet_request" "foo" {
spot_price = "0.005"
target_capacity = 2
valid_until = "2019-11-04T20:44:20Z"
terminate_instances_with_expiration = true
launch_specification {
instance_type = "m1.small"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
availability_zone = "us-west-2a"
}
launch_specification {
instance_type = "m1.small"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
availability_zone = "us-west-2b"
}
depends_on = [ "aws_iam_policy_attachment.test-attach" ]
}
`
const testAccAWSSpotFleetRequest WithAdvancedLaunchSpecConfig = `
const testAccAWSSpotFleetRequest ConfigWithSubnet = `
resource "aws_key_pair" "debugging" {
key_name = "tmp-key"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 phodgson@thoughtworks.com"
@ -299,24 +546,324 @@ resource "aws_iam_role" "test-role" {
EOF
}
resource "aws_vpc" "foo" {
cidr_block = "10.1.0.0/16"
}
resource "aws_subnet" "foo" {
cidr_block = "10.1.1.0/24"
vpc_id = "${aws_vpc.foo.id}"
availability_zone = "us-west-2a"
}
resource "aws_subnet" "bar" {
cidr_block = "10.1.20.0/24"
vpc_id = "${aws_vpc.foo.id}"
availability_zone = "us-west-2b"
}
resource "aws_spot_fleet_request" "foo" {
iam_fleet_role = "${aws_iam_role.test-role.arn}"
spot_price = "0.005"
target_capacity = 4
valid_until = "2019-11-04T20:44:20Z"
allocation_strategy = "diversified"
terminate_instances_with_expiration = true
launch_specification {
instance_type = "m3.large"
ami = "ami-d0f506b0"
key_name = "${aws_key_pair.debugging.key_name}"
subnet_id = "${aws_subnet.foo.id}"
}
launch_specification {
instance_type = "m3.large"
ami = "ami-d0f506b0"
key_name = "${aws_key_pair.debugging.key_name}"
subnet_id = "${aws_subnet.bar.id}"
}
depends_on = [ "aws_iam_policy_attachment.test-attach" ]
}
`
const testAccAWSSpotFleetRequestConfigMultipleInstanceTypesinSameAz = `
resource "aws_key_pair" "debugging" {
key_name = "tmp-key"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 phodgson@thoughtworks.com"
}
resource "aws_iam_policy_attachment" "test-attach" {
name = "test-attachment"
roles = [ "${aws_iam_role.test-role.name}" ]
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetRole"
}
resource "aws_iam_role" "test-role" {
name = "test-role"
assume_role_policy = << EOF
{
"Version" : "2012-10-17" ,
"Statement" : [
{
"Sid" : "" ,
"Effect" : "Allow" ,
"Principal" : {
"Service" : "spotfleet.amazonaws.com"
} ,
"Action" : "sts:AssumeRole"
}
]
}
EOF
}
resource "aws_spot_fleet_request" "foo" {
iam_fleet_role = "${aws_iam_role.test-role.arn}"
spot_price = "0.005"
target_capacity = 2
valid_until = "2019-11-04T20:44:20Z"
terminate_instances_with_expiration = true
launch_specification {
instance_type = "m1.small"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
availability_zone = "us-west-2a"
}
launch_specification {
instance_type = "m3.large"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
availability_zone = "us-west-2a"
}
depends_on = [ "aws_iam_policy_attachment.test-attach" ]
}
`
const testAccAWSSpotFleetRequestConfigMultipleInstanceTypesinSameSubnet = `
resource "aws_key_pair" "debugging" {
key_name = "tmp-key"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 phodgson@thoughtworks.com"
}
resource "aws_iam_policy_attachment" "test-attach" {
name = "test-attachment"
roles = [ "${aws_iam_role.test-role.name}" ]
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetRole"
}
resource "aws_iam_role" "test-role" {
name = "test-role"
assume_role_policy = << EOF
{
"Version" : "2012-10-17" ,
"Statement" : [
{
"Sid" : "" ,
"Effect" : "Allow" ,
"Principal" : {
"Service" : "spotfleet.amazonaws.com"
} ,
"Action" : "sts:AssumeRole"
}
]
}
EOF
}
resource "aws_vpc" "foo" {
cidr_block = "10.1.0.0/16"
}
resource "aws_subnet" "foo" {
cidr_block = "10.1.1.0/24"
vpc_id = "${aws_vpc.foo.id}"
availability_zone = "us-west-2a"
}
resource "aws_spot_fleet_request" "foo" {
iam_fleet_role = "${aws_iam_role.test-role.arn}"
spot_price = "0.005"
target_capacity = 4
valid_until = "2019-11-04T20:44:20Z"
terminate_instances_with_expiration = true
launch_specification {
instance_type = "m3.large"
ami = "ami-d0f506b0"
key_name = "${aws_key_pair.debugging.key_name}"
subnet_id = "${aws_subnet.foo.id}"
}
launch_specification {
instance_type = "r3.large"
ami = "ami-d0f506b0"
key_name = "${aws_key_pair.debugging.key_name}"
subnet_id = "${aws_subnet.foo.id}"
}
depends_on = [ "aws_iam_policy_attachment.test-attach" ]
}
`
const testAccAWSSpotFleetRequestConfigOverridingSpotPrice = `
resource "aws_key_pair" "debugging" {
key_name = "tmp-key"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 phodgson@thoughtworks.com"
}
resource "aws_iam_policy_attachment" "test-attach" {
name = "test-attachment"
roles = [ "${aws_iam_role.test-role.name}" ]
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetRole"
}
resource "aws_iam_role" "test-role" {
name = "test-role"
assume_role_policy = << EOF
{
"Version" : "2012-10-17" ,
"Statement" : [
{
"Sid" : "" ,
"Effect" : "Allow" ,
"Principal" : {
"Service" : "spotfleet.amazonaws.com"
} ,
"Action" : "sts:AssumeRole"
}
]
}
EOF
}
resource "aws_spot_fleet_request" "foo" {
iam_fleet_role = "${aws_iam_role.test-role.arn}"
spot_price = "0.005"
target_capacity = 2
valid_until = "2019-11-04T20:44:20Z"
terminate_instances_with_expiration = true
launch_specification {
instance_type = "m1.small"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
availability_zone = "us-west-2a"
}
launch_specification {
instance_type = "m3.large"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
availability_zone = "us-west-2a"
spot_price = "0.01"
weighted_capacity = 2
user_data = "hello-world"
root_block_device {
volume_size = "300"
volume_type = "gp2"
}
}
depends_on = [ "aws_iam_policy_attachment.test-attach" ]
}
`
const testAccAWSSpotFleetRequestConfigDiversifiedAllocation = `
resource "aws_key_pair" "debugging" {
key_name = "tmp-key"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 phodgson@thoughtworks.com"
}
resource "aws_iam_policy_attachment" "test-attach" {
name = "test-attachment"
roles = [ "${aws_iam_role.test-role.name}" ]
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetRole"
}
resource "aws_iam_role" "test-role" {
name = "test-role"
assume_role_policy = << EOF
{
"Version" : "2012-10-17" ,
"Statement" : [
{
"Sid" : "" ,
"Effect" : "Allow" ,
"Principal" : {
"Service" : "spotfleet.amazonaws.com"
} ,
"Action" : "sts:AssumeRole"
}
]
}
EOF
}
resource "aws_spot_fleet_request" "foo" {
iam_fleet_role = "${aws_iam_role.test-role.arn}"
spot_price = "0.7"
target_capacity = 30
valid_until = "2019-11-04T20:44:20Z"
allocation_strategy = "diversified"
terminate_instances_with_expiration = true
launch_specification {
instance_type = "m1.small"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
availability_zone = "us-west-2a"
}
launch_specification {
instance_type = "m3.large"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
availability_zone = "us-west-2a"
}
launch_specification {
instance_type = "r3.large"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
availability_zone = "us-west-2a"
}
depends_on = [ "aws_iam_policy_attachment.test-attach" ]
}
`
const testAccAWSSpotFleetRequestConfigWithWeightedCapacity = `
resource "aws_key_pair" "debugging" {
key_name = "tmp-key"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 phodgson@thoughtworks.com"
}
resource "aws_iam_policy_attachment" "test-attach" {
name = "test-attachment"
roles = [ "${aws_iam_role.test-role.name}" ]
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2SpotFleetRole"
}
resource "aws_iam_role" "test-role" {
name = "test-role"
assume_role_policy = << EOF
{
"Version" : "2012-10-17" ,
"Statement" : [
{
"Sid" : "" ,
"Effect" : "Allow" ,
"Principal" : {
"Service" : "spotfleet.amazonaws.com"
} ,
"Action" : "sts:AssumeRole"
}
]
}
EOF
}
resource "aws_spot_fleet_request" "foo" {
iam_fleet_role = "${aws_iam_role.test-role.arn}"
spot_price = "0.7"
target_capacity = 10
valid_until = "2019-11-04T20:44:20Z"
terminate_instances_with_expiration = true
launch_specification {
instance_type = "m3.large"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
availability_zone = "us-west-2a"
weighted_capacity = "6"
}
launch_specification {
instance_type = "r3.large"
ami = "ami-d06a90b0"
key_name = "${aws_key_pair.debugging.key_name}"
availability_zone = "us-west-2a"
weighted_capacity = "3"
}
depends_on = [ "aws_iam_policy_attachment.test-attach" ]
}