Commit Graph

19 Commits

Author SHA1 Message Date
Paul Hinze 2b23c402ee providers/aws: rework instance block devices
Instance block devices are now managed by three distinct sub-resources:

 * `root_block_device` - introduced previously
 * `ebs_block_device` - all additional ebs-backed volumes
 * `ephemeral_block_device` - instance store / ephemeral devices

The AWS API support around BlockDeviceMapping is pretty confusing. It's
a single collection type that supports these three members each of which
has different fields and different behavior.

My biggest hiccup came from the fact that Instance Store volumes do not
show up in any response BlockDeviceMapping for any EC2 `Describe*` API
calls. They're only available from the instance meta-data service as
queried from inside the node.

This removes `block_device` altogether for a clean break from old
configs. New configs will need to sort their `block_device`
declarations into the three new types. The field has been marked
`Removed` to indicate this to users.

With the new block device format being introduced, we need to ensure
Terraform is able to properly read statefiles written in the old format.
So we use the new `helper/schema` facility of "state migrations" to
transform statefiles in the old format to something that the current
version of the schema can use.

Fixes #858
2015-03-19 09:03:41 -05:00
Suguru Namura 68efa3fc21 providers/aws: add iops to block devices 2015-03-03 15:57:08 +09:00
Paul Hinze 73d20b4c58 providers/aws: add root_block_device to aws_instance
AWS provides a single `BlockDeviceMapping` to manage three different
kinds of block devices:

 (a) The root volume
 (b) Ephemeral storage
 (c) Additional EBS volumes

Each of these types has slightly different semantics [1].

(a) The root volume is defined by the AMI; it can only be customized
with `volume_size`, `volume_type`, and `delete_on_termination`.

(b) Ephemeral storage is made available based on instance type [2]. It's
attached automatically if _no_ block device mappings are specified, and
must otherwise be defined with block device mapping entries that contain
only DeviceName set to a device like "/dev/sdX" and VirtualName set to
"ephemeralN".

(c) Additional EBS volumes are controlled by mappings that omit
`virtual_name` and can specify `volume_size`, `volume_type`,
`delete_on_termination`, `snapshot_id`, and `encryption`.

After deciding to ignore root block devices to fix #859, we had users
with configurations that were attempting to manage the root block device chime
in on #913.

Terraform does not have the primitives to be able to properly handle a
single collection of resources that is partially managed and partially
computed, so our strategy here is to break out logical sub-resources for
Terraform and hide the BlockDeviceMapping inside the provider
implementation.

Now (a) is supported by the `root_block_device` sub-resource, and (b)
and (c) are still both merged together under `block_device`, though I
have yet to see ephemeral block devices working properly.

Looking into possibly separating out `ephemeral_block_device` and
`ebs_block_device` sub-resources as well, which seem like the logical
next step. We'll wait until the next big release for this, though, since
it will break backcompat.

[1] http://bit.ly/ec2bdmap
[2] http://bit.ly/instancestorebytype

Fixes #913
Refs #858
2015-02-18 13:15:11 -06:00
Mitchell Hashimoto 577e2420b0 Revert "docs: consistent use of array configuration syntax"
This reverts commit 4893eb8b55.
2015-01-14 09:28:25 -08:00
Emil Hessman 4893eb8b55 docs: consistent use of array configuration syntax
The Terraform configuration syntax defines what arrays are.
Use the word array consistently throughout the documentation
instead of list.

The corresponding JSON datatype is called array as well, and
since the Terraform configuration syntax is interoperable with
JSON it makes sense to use the term array to describe them.
2015-01-13 06:59:12 +01:00
Sören Blom efca6b0e8a only non-default VPC security groups are referenced by ID. 2015-01-07 12:52:20 +01:00
Daniel Malon 1e3065ae11 allow setting the block device virtual_name 2014-11-22 09:50:22 +00:00
Armon Dadgar 38aec9f20b provide/aws: Document the block device 2014-11-19 15:59:29 -08:00
Seth Vargo 073a0f76c5 Add meta descriptions to all pages 2014-10-21 23:21:56 -04:00
Paul Lewis 3f5a9b70d8 Removing duplicate example and unclosed code block 2014-10-14 17:47:23 -04:00
Sean Herron 3e16190e69 Expands AWS tagging to cover EC2 instances 2014-10-13 16:55:59 -04:00
Ian Delahorne 9f91c4e8c3 Add IAM Instance profile support to AWS instance provider 2014-09-23 13:06:30 -05:00
James Martelletti 78e072e0b6 source_dest_check defaults to true in the code 2014-09-16 21:40:16 +10:00
Mitchell Hashimoto b3c5b848f9 website: update docs for GH-260] 2014-09-07 16:03:48 -07:00
James Martelletti 821a0a6dc6 Fix typo, proviate_ip -> private_ip 2014-09-01 18:06:39 +10:00
Mitchell Hashimoto a292625846 website: private IP docs 2014-08-21 17:17:50 -07:00
Luke Chadwick 8d2e232602 Update documentation to reflect the addition of associate_public_ip_address to the aws_instance resource 2014-07-29 22:12:43 +10:00
Jack Pearkes 1d06ecb7a9 website: add note about security group names/ids on instances 2014-07-24 18:57:26 -04:00
Armon Dadgar 6f8732d01f website: more docs 2014-07-23 17:41:48 -04:00