provider/aws: Update aws_ebs_volume when attached (#14005)
Fixes: #12496 When an EBS volume was attached to an instance and the user tried to resize, they would get an error as follows: ``` * aws_ebs_volume.ebs_data_volume: Error waiting for Volume (vol-027e83f7) to become available: unexpected state 'in-use', wanted target 'available'. last error: %!s(<nil>) ``` `available` is a state *only* when creating an EBS volume that is not attached. When an instance is attached, it will go into the state `in-use`. Therefore `in-use` is a valid state when modifying an EBS volume that is attached: ``` % make testacc TEST=./builtin/providers/aws TESTARGS='-run=TestAccAWSEBSVolume_' ✹ ✭ ==> Checking that code complies with gofmt requirements... go generate $(go list ./... | grep -v /terraform/vendor/) 2017/04/27 07:08:18 Generated command/internal_plugin_list.go TF_ACC=1 go test ./builtin/providers/aws -v -run=TestAccAWSEBSVolume_ -timeout 120m === RUN TestAccAWSEBSVolume_importBasic --- PASS: TestAccAWSEBSVolume_importBasic (41.10s) === RUN TestAccAWSEBSVolume_basic --- PASS: TestAccAWSEBSVolume_basic (38.22s) === RUN TestAccAWSEBSVolume_updateAttachedEbsVolume --- PASS: TestAccAWSEBSVolume_updateAttachedEbsVolume (199.11s) === RUN TestAccAWSEBSVolume_updateSize --- PASS: TestAccAWSEBSVolume_updateSize (70.53s) === RUN TestAccAWSEBSVolume_updateType --- PASS: TestAccAWSEBSVolume_updateType (69.75s) === RUN TestAccAWSEBSVolume_updateIops --- PASS: TestAccAWSEBSVolume_updateIops (70.38s) === RUN TestAccAWSEBSVolume_kmsKey --- PASS: TestAccAWSEBSVolume_kmsKey (76.64s) === RUN TestAccAWSEBSVolume_NoIops --- PASS: TestAccAWSEBSVolume_NoIops (39.80s) === RUN TestAccAWSEBSVolume_withTags --- PASS: TestAccAWSEBSVolume_withTags (38.04s) PASS ok github.com/hashicorp/terraform/builtin/providers/aws 643.609s ```
This commit is contained in:
parent
0ffb5aa1d6
commit
f9ba882f73
|
@ -179,7 +179,7 @@ func resourceAWSEbsVolumeUpdate(d *schema.ResourceData, meta interface{}) error
|
|||
|
||||
stateConf := &resource.StateChangeConf{
|
||||
Pending: []string{"creating", "modifying"},
|
||||
Target: []string{"available"},
|
||||
Target: []string{"available", "in-use"},
|
||||
Refresh: volumeStateRefreshFunc(conn, *result.VolumeModification.VolumeId),
|
||||
Timeout: 5 * time.Minute,
|
||||
Delay: 10 * time.Second,
|
||||
|
|
|
@ -30,6 +30,31 @@ func TestAccAWSEBSVolume_basic(t *testing.T) {
|
|||
})
|
||||
}
|
||||
|
||||
func TestAccAWSEBSVolume_updateAttachedEbsVolume(t *testing.T) {
|
||||
var v ec2.Volume
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
IDRefreshName: "aws_ebs_volume.test",
|
||||
Providers: testAccProviders,
|
||||
Steps: []resource.TestStep{
|
||||
{
|
||||
Config: testAccAwsEbsAttachedVolumeConfig,
|
||||
Check: resource.ComposeTestCheckFunc(
|
||||
testAccCheckVolumeExists("aws_ebs_volume.test", &v),
|
||||
resource.TestCheckResourceAttr("aws_ebs_volume.test", "size", "10"),
|
||||
),
|
||||
},
|
||||
{
|
||||
Config: testAccAwsEbsAttachedVolumeConfigUpdateSize,
|
||||
Check: resource.ComposeTestCheckFunc(
|
||||
testAccCheckVolumeExists("aws_ebs_volume.test", &v),
|
||||
resource.TestCheckResourceAttr("aws_ebs_volume.test", "size", "20"),
|
||||
),
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func TestAccAWSEBSVolume_updateSize(t *testing.T) {
|
||||
var v ec2.Volume
|
||||
resource.Test(t, resource.TestCase{
|
||||
|
@ -200,6 +225,124 @@ resource "aws_ebs_volume" "test" {
|
|||
}
|
||||
`
|
||||
|
||||
const testAccAwsEbsAttachedVolumeConfig = `
|
||||
data "aws_ami" "debian_jessie_latest" {
|
||||
most_recent = true
|
||||
|
||||
filter {
|
||||
name = "name"
|
||||
values = ["debian-jessie-*"]
|
||||
}
|
||||
|
||||
filter {
|
||||
name = "virtualization-type"
|
||||
values = ["hvm"]
|
||||
}
|
||||
|
||||
filter {
|
||||
name = "architecture"
|
||||
values = ["x86_64"]
|
||||
}
|
||||
|
||||
filter {
|
||||
name = "root-device-type"
|
||||
values = ["ebs"]
|
||||
}
|
||||
|
||||
owners = ["379101102735"] # Debian
|
||||
}
|
||||
|
||||
resource "aws_instance" "test" {
|
||||
ami = "${data.aws_ami.debian_jessie_latest.id}"
|
||||
associate_public_ip_address = true
|
||||
count = 1
|
||||
instance_type = "t2.medium"
|
||||
|
||||
root_block_device {
|
||||
volume_size = "10"
|
||||
volume_type = "standard"
|
||||
delete_on_termination = true
|
||||
}
|
||||
|
||||
tags {
|
||||
Name = "test-terraform"
|
||||
}
|
||||
}
|
||||
|
||||
resource "aws_ebs_volume" "test" {
|
||||
depends_on = ["aws_instance.test"]
|
||||
availability_zone = "${aws_instance.test.availability_zone}"
|
||||
type = "gp2"
|
||||
size = "10"
|
||||
}
|
||||
|
||||
resource "aws_volume_attachment" "test" {
|
||||
depends_on = ["aws_ebs_volume.test"]
|
||||
device_name = "/dev/xvdg"
|
||||
volume_id = "${aws_ebs_volume.test.id}"
|
||||
instance_id = "${aws_instance.test.id}"
|
||||
}
|
||||
`
|
||||
|
||||
const testAccAwsEbsAttachedVolumeConfigUpdateSize = `
|
||||
data "aws_ami" "debian_jessie_latest" {
|
||||
most_recent = true
|
||||
|
||||
filter {
|
||||
name = "name"
|
||||
values = ["debian-jessie-*"]
|
||||
}
|
||||
|
||||
filter {
|
||||
name = "virtualization-type"
|
||||
values = ["hvm"]
|
||||
}
|
||||
|
||||
filter {
|
||||
name = "architecture"
|
||||
values = ["x86_64"]
|
||||
}
|
||||
|
||||
filter {
|
||||
name = "root-device-type"
|
||||
values = ["ebs"]
|
||||
}
|
||||
|
||||
owners = ["379101102735"] # Debian
|
||||
}
|
||||
|
||||
resource "aws_instance" "test" {
|
||||
ami = "${data.aws_ami.debian_jessie_latest.id}"
|
||||
associate_public_ip_address = true
|
||||
count = 1
|
||||
instance_type = "t2.medium"
|
||||
|
||||
root_block_device {
|
||||
volume_size = "10"
|
||||
volume_type = "standard"
|
||||
delete_on_termination = true
|
||||
}
|
||||
|
||||
tags {
|
||||
Name = "test-terraform"
|
||||
}
|
||||
}
|
||||
|
||||
resource "aws_ebs_volume" "test" {
|
||||
depends_on = ["aws_instance.test"]
|
||||
availability_zone = "${aws_instance.test.availability_zone}"
|
||||
type = "gp2"
|
||||
size = "20"
|
||||
}
|
||||
|
||||
resource "aws_volume_attachment" "test" {
|
||||
depends_on = ["aws_ebs_volume.test"]
|
||||
device_name = "/dev/xvdg"
|
||||
volume_id = "${aws_ebs_volume.test.id}"
|
||||
instance_id = "${aws_instance.test.id}"
|
||||
}
|
||||
`
|
||||
|
||||
const testAccAwsEbsVolumeConfigUpdateSize = `
|
||||
resource "aws_ebs_volume" "test" {
|
||||
availability_zone = "us-west-2a"
|
||||
|
|
Loading…
Reference in New Issue