Commit Graph

27 Commits

Author SHA1 Message Date
Paul Hinze 473b03ccae providers/aws: fix source_dest_check on instance creation
The `SourceDestCheck` attribute can only be changed via
`ModifyInstance`, so the AWS instance resource's `Create` function calls
out to `Update` before it returns to take care of applying
`source_dest_check` properly.

The `Update` function originally guarded against unnecessary API calls
with `GetOk`, which worked fine until #993 when we changed the `GetOk`
semantics to no longer distinguish between "configured and zero-value"
and "not configured".

I attempted in #1003 to fix this by switching to `HasChange` for the
guard, but this does not work in the `Create` case.

I played around with a few different ideas, none of which worked:

(a) Setting `Default: true` on `source_dest_check' has no effect

(b) Setting `Computed: true` on `source_dest_check' and adding a `d.Set`
    call in the `Read` function (which will initially set the value to `true`
    after instance creation). I really thought I could get this to work,
    but it results in the following:

```go
d.Get('source_dest_check')       // true
d.HasChange('source_dest_check') // false
d.GetChange('source_dest_check') // old: false, new: false
```

I couldn't figure out a way of coherently dealing with that result, so I
ended up throwing up my hands and giving up on the guard altogether.
We'll call `ModifyInstance` more than we have to, but this at least
yields expected behavior for both Creates and Updates.

Fixes #1020
2015-02-21 14:26:46 -06:00
Paul Hinze 434a9759a0 providers/aws: enhance root_block_device acceptance test
So that we have a test that will fail in case the flubbery of #1000
returns.
2015-02-18 17:28:28 -06: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
Paul Hinze 219aa3e788 helper/schema: fix DiffFieldReader map handling
An `InstanceDiff` will include `ResourceAttrDiff` entries for the
"length" / `#` field of maps. This makes sense, since for something like
`terraform plan` it's useful to see when counts are changing.

The `DiffFieldReader` was not taking these entries into account when
reading maps out, and was therefore incorrectly returning maps that
included an extra `'#'` field, which was causing all sorts of havoc
for providers (extra tags on AWS instances, broken google compute
instance launch, possibly others).

 * fixes #914 - extra tags on AWS instances
 * fixes #883 - general core issue sprouted from #757
 * removes the hack+TODO from #757
2015-02-03 20:17:57 -06:00
Paul Hinze 3cb5ba01a7 whitespace: fix mixed case indent 2015-01-28 05:16:04 -06:00
Paul Hinze c88c4a33e1 providers/aws: ignore ec2 root devices
fixes #859

EC2 root block devices are attached automatically at launch [1] and show
up in DescribeInstances responses from then on. By skipping these when
recording state, Terraform can avoid thinking there should be block
device changes when there are none.

Note this requires that https://github.com/mitchellh/goamz/pull/214 land
first so the proper field is exposed.

[1] http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/RootDeviceStorage.html
2015-01-28 05:14:21 -06:00
Emil Hessman 13f1f1f9ad builtin/providers/aws: acceptance tests for assigning private IPs on AWS instance 2014-12-20 20:48:07 +01:00
Sneha Somwanshi 86aafdb839 test for tenancy schema 2014-12-03 15:58:51 +05:30
Sneha Somwanshi f63e032c23 Merge remote-tracking branch 'upstream/master' 2014-11-26 17:06:42 +05:30
Sander van Harmelen d3e1a6678d Making some last tweaks and fixing some acc tests 2014-11-24 21:22:18 +01:00
Sander van Harmelen eccd5ad308 Refactored about 90%
Still need to update 2 resources and check the acceptance tests, but
overall we’re nearly there 😃
2014-11-21 17:58:34 +01:00
sneha somwanshi 750a36c51e AWS instance resource now supports tenancy 2014-11-04 16:38:30 +05:30
Eric Buth 9fa25c40b2 tests for aws instance block_device 2014-10-31 16:25:16 -04:00
Mitchell Hashimoto 895d978065 fmt 2014-10-18 10:59:23 -07:00
Mitchell Hashimoto e59e4a6bd9 providers/aws: fix compile error 2014-10-14 12:20:39 -07:00
Mitchell Hashimoto ce997a9a33 providers/aws: fix test 2014-10-14 12:15:46 -07:00
Sean Herron 3e16190e69 Expands AWS tagging to cover EC2 instances 2014-10-13 16:55:59 -04:00
Mitchell Hashimoto c5d6df692d providers/aws: tests passing, compiles 2014-09-16 17:49:24 -07:00
Jack Pearkes c6741cf1b5 providers/aws: add tests for instance availability zone
cc/ @dcosson here we go!
2014-07-31 20:35:31 -04:00
Luke Chadwick 974074fee9 Add associate_public_ip_address as an attribute of the aws_instance resource 2014-07-29 22:06:53 +10:00
Mitchell Hashimoto 0d8f6645fa providers/aws/aws_instance: user_data diffs properly 2014-07-16 16:41:20 -07:00
Mitchell Hashimoto 082790c4c1 providers/aws: basic user data, doesn't fully work yet because diffs are broke 2014-07-16 09:01:56 -07:00
Mitchell Hashimoto 16c99e78b3 providers/aws: security_groups support 2014-07-14 21:56:37 -07:00
Mitchell Hashimoto 735c909264 providers/aws/aws_instance: test modifying source_dest_check 2014-07-14 17:38:56 -07:00
Mitchell Hashimoto 2fa6ca1c4e providers/aws/aws_instance: source_dest_check support 2014-07-14 14:16:59 -07:00
Mitchell Hashimoto 88dd1baafe providers/aws/aws_instance: can bring up in VPC 2014-07-14 13:46:32 -07:00
Mitchell Hashimoto 9f96fb4aac providers/aws: basic aws_instance test 2014-07-14 13:28:00 -07:00