Commit Graph

11461 Commits

Author SHA1 Message Date
James Nugent 57cf9fd295 Merge pull request #7082 from hashicorp/b-empty-map-types
core: Make lists and maps distinguishable in state
2016-06-09 12:36:24 +02:00
James Nugent 9554d54116 core: Add test for V2->V3 state upgrade 2016-06-09 11:16:34 +01:00
James Nugent 706ccb7dfe core: Introduce state v3 and upgrade process
This commit makes the current Terraform state version 3 (previously 2),
and a migration process as part of reading v2 state. For the most part
this is unnecessary: helper/schema will deal with upgrading state for
providers written with that framework. However, for providers which
implemented the resource model directly, this gives a best-efforts
attempt at lossless upgrade.

The heuristics used to change the count of a map from the .# key to the
.% key are as follows:

    - if the flat map contains any non-numeric keys, we treat it as a
      map
    - if the map is empty it must be computed or optional, so we remove
      it from state

There is a known edge condition: maps with all-numeric keys are
indistinguishable from sets without access to the schema. They will need
manual conversion or may result in spurious diffs.
2016-06-09 10:49:49 +01:00
James Nugent 75ef7ab636 provider/test: Add more variants of maps
This commit adds a binary for the test provider, and adds a variety of
different types of map to the schema.
2016-06-09 10:49:49 +01:00
James Nugent 074545e536 core: Use .% instead of .# for maps in state
The flatmapped representation of state prior to this commit encoded maps
and lists (and therefore by extension, sets) with a key corresponding to
the number of elements, or the unknown variable indicator under a .# key
and then individual items. For example, the list ["a", "b", "c"] would
have been encoded as:

    listname.# = 3
    listname.0 = "a"
    listname.1 = "b"
    listname.2 = "c"

And the map {"key1": "value1", "key2", "value2"} would have been encoded
as:

    mapname.# = 2
    mapname.key1 = "value1"
    mapname.key2 = "value2"

Sets use the hash code as the key - for example a set with a (fictional)
hashcode calculation may look like:

    setname.# = 2
    setname.12312512 = "value1"
    setname.56345233 = "value2"

Prior to the work done to extend the type system, this was sufficient
since the internal representation of these was effectively the same.
However, following the separation of maps and lists into distinct
first-class types, this encoding presents a problem: given a state file,
it is impossible to tell the encoding of an empty list and an empty map
apart. This presents problems for the type checker during interpolation,
as many interpolation functions will operate on only one of these two
structures.

This commit therefore changes the representation in state of maps to use
a "%" as the key for the number of elements. Consequently the map above
will now be encoded as:

    mapname.% = 2
    mapname.key1 = "value1"
    mapname.key2 = "value2"

This has the effect of an empty list (or set) now being encoded as:

    listname.# = 0

And an empty map now being encoded as:

    mapname.% = 0

Therefore we can eliminate some nasty guessing logic from the resource
variable supplier for interpolation, at the cost of having to migrate
state up front (to follow in a subsequent commit).

In order to reduce the number of potential situations in which resources
would be "forced new", we continue to accept "#" as the count key when
reading maps via helper/schema. There is no situation under which we can
allow "#" as an actual map key in any case, as it would not be
distinguishable from a list or set in state.
2016-06-09 10:49:42 +01:00
Paul Stack 57dda90177 Update CHANGELOG.md 2016-06-09 10:25:07 +02:00
Benjamin Chelli cc22cef085 DigitalOcean - droplet always being recreated (#7044)
The region returned by the API is always lowercase therefore when you specify a region uppercase in your config file it forces the droplet to be regenerated on every ```terraform apply``` (even when it is not needed).
2016-06-09 10:23:44 +02:00
Paul Stack 7b273bcd01 Update CHANGELOG.md 2016-06-09 10:20:24 +02:00
dkalleg fb6f2bc750 provider/vSphere - Add DiskEnableUUID option (#7088)
Since the custom_configuration_parameters can't take dots, we cannot
set 'disk.EnableUUID'.  This adds a parameter for this options that gets
added to a configSpec. This option causes the vm to mount disks by uuid
on the guest OS.
2016-06-09 10:19:10 +02:00
David Glasser 533a644ad0 Mention in CHANGELOG that var.map.key doesn't work 2016-06-08 16:15:10 -07:00
Clint 946cbafb75 Update CHANGELOG.md 2016-06-08 15:57:11 -05:00
Paul Forman 391a7f85b0 provider/aws: Fix issue with Root Block Devices and encrypted flag in Launch Configurations [GH-6512]
Fixed the problem where the root_block_device could cause an apply error
by reading back an "encrypted" parameter that was meant for an
ebs_block_device.  "encrypted" is not part of the root_block_device
schema, since it can't be set explicitly.

Added a check in Create to fail when the root device is incorrectly
specified as an ebs_block_device, as this causes continual refreshing
due to mismatched state between root_block_device and ebs_block_device.

"encrypted" and "snapshot_id" should be guarded with ConflictsWith, but
that doesn't appear to work on nested resources despite #1926.
2016-06-08 15:56:27 -05:00
clint shryock c667b2d8cd Merge branch 'pr-7075'
* pr-7075:
  provider/aws: Log ElasticCache subnet removal
  provider/aws: Update state on `aws_elasticache_subnet_group` not found exception
2016-06-08 13:42:08 -05:00
clint shryock 1624c7e27f provider/aws: Log ElasticCache subnet removal 2016-06-08 13:35:49 -05:00
James Nugent cb9ef298f3 core: Defeat backward compatibilty in mapstructure
The mapstructure library has a regrettable backward compatibility
concern whereby a WeakDecode of []interface{}{} into a target of
map[string]interface{} yields an empty map rather than an error. One
possibility is to switch to using Decode instead of WeakDecode, but this
loses the nice handling of type conversion, requiring a large volume of
code to be added to Terraform or HIL in order to retain that behaviour.

Instead we add a DecodeHook to our usage of the mapstructure library
which checks for decoding []interface{}{} or []string{} into a map and
returns an error instead.

This has the effect of defeating the code added to retain backwards
compatibility in mapstructure, giving us the correct (for our
circumstances) behaviour of Decode for empty structures and the type
conversion of WeakDecode.

The code is identical to that in the HIL library, and packaged into a
helper.
2016-06-08 18:38:41 +01:00
James Nugent 819bd3fba3 deps: Update github.com/hashicorp/hil/... 2016-06-08 18:38:41 +01:00
James Nugent 49995428fd core: Remove support for V0 state
This removes support for the V0 binary state format which was present in
Terraform prior to 0.3. We still check for the file type and present an
error message explaining to the user that they can upgrade it using a
prior version of Terraform.
2016-06-08 18:38:41 +01:00
James Nugent 91587a49f3 core: Remove unnecessary debug logging
Some unnecessary debug logging was introduced in 7b6df27e4, this commit
removes it so as not to clutter logs.
2016-06-08 18:38:41 +01:00
James Nugent a31cb5087e Merge pull request #7073 from ottenhoff/bgp-private-range
BGP AS 60000 is assigned to EQUINIX-CLOUD-EXCHANGE-AMSTERDAM-ASN.
2016-06-08 16:04:13 +02:00
stack72 2a09941f76 provider/aws: Update state on `aws_elasticache_subnet_group` not found exception
Fixes #7062

make testacc TEST=./builtin/providers/aws TESTARGS='-run=TestAccAWSElasticacheSubnetGroup'
==> Checking that code complies with gofmt requirements...
go generate $(go list ./... | grep -v /vendor/)
TF_ACC=1 go test ./builtin/providers/aws -v -run=TestAccAWSElasticacheSubnetGroup -timeout 120m
=== RUN   TestAccAWSElasticacheSubnetGroup_basic
--- PASS: TestAccAWSElasticacheSubnetGroup_basic (44.62s)
=== RUN   TestAccAWSElasticacheSubnetGroup_update
--- PASS: TestAccAWSElasticacheSubnetGroup_update (73.74s)
PASS
ok  	github.com/hashicorp/terraform/builtin/providers/aws	118.379s
2016-06-08 16:00:13 +02:00
Sam Ottenhoff bd36bc60aa BGP AS 60000 is assigned to EQUINIX-CLOUD-EXCHANGE-AMSTERDAM-ASN.
AS65000 is reserved for private use. https://en.wikipedia.org/wiki/Autonomous_system_\(Internet\)
2016-06-08 13:46:56 +00:00
Joakim Sernbrant dd5f121494 provider/cloudstack: add root_disk_size 2016-06-08 10:23:14 +02:00
James Bardin ac2d195cc5 Update CHANGELOG.md
add Elastic Transcoder resources
2016-06-07 17:31:02 -04:00
James Bardin cd160d3f3f Merge pull request #6965 from hashicorp/jbardin/GH-3968
Add support for Amazon Elastic Transcoder
2016-06-07 17:28:55 -04:00
James Bardin 45c88bf229 s/ForceNew/Forces new resource/ 2016-06-07 17:19:16 -04:00
James Bardin 5b5641208e remove extra "=" from test config 2016-06-07 17:06:25 -04:00
James Bardin 950950ff4b doc improvements 2016-06-07 16:57:34 -04:00
James Bardin 8eb4858c26 Add Elastic Transcoder docs 2016-06-07 16:29:14 -04:00
James Bardin 3ec1c61865 vendor aws/aws-sdk-go/service/elastictranscoder 2016-06-07 16:07:08 -04:00
James Bardin 5c1b625c84 Add support for Amazon Elastic Transcoder
- Add resources for elastic transcoder pipelines and presets
2016-06-07 16:07:08 -04:00
Paul Hinze ee0dfba565 Merge pull request #7048 from hashicorp/b-update-hcl
Update HCL to latest version
2016-06-07 14:36:55 -05:00
Clint a72847298e Update CHANGELOG.md 2016-06-07 14:30:37 -05:00
Clint 7d23570e2d provider/cloudflare: Add migration for v1 to v4 API libraries (#6969)
* provider/cloudflare: Add migration for v1 to v4 API libraries

- mock out api calls
2016-06-07 14:29:25 -05:00
James Bardin b0bc6718a1 Merge pull request #7051 from hashicorp/jbardin/GH-3999
add sidebar link for elb_attachment
2016-06-07 13:33:21 -04:00
James Bardin e6481ccc74 add sidebar link for elb_attachment 2016-06-07 11:44:37 -04:00
Paul Stack cc51dd8472 Update CHANGELOG.md 2016-06-07 17:19:16 +02:00
Mark Peek 74d5db4f3e Don't require vsphere debug paths to be set (#7027)
The change to add govmomi debug paths (#6893) required user input even
when the env was not set. This change defaults those values appropriately.
2016-06-07 16:16:04 +01:00
Paul Stack 72bba5f308 Update CHANGELOG.md 2016-06-07 17:15:38 +02:00
Mark Peek 57e935755e Add vsphere virtual machine migration (Fixes #7008) (#7023)
Fixes vsphere virtual machine migration issues with
disk controller_type and skip_customization.
2016-06-07 16:11:35 +01:00
Radek Simko be53bdf09f Update CHANGELOG.md 2016-06-07 15:51:53 +01:00
Paul Hinze 029c79e677
Update HCL to latest version
Pulls in https://github.com/hashicorp/hcl/pull/125

Which fixes #6359
2016-06-07 09:21:10 -05:00
James Bardin 4c7a31d72a Merge pull request #6879 from hashicorp/jbardin/GH-3999
Add top-level ELB Attachment resource
2016-06-07 10:19:07 -04:00
James Bardin e4d8c6929f Add top-level ELB Attachment resource
Add an aws_elb_attachment resource so that the attment of instances to
an ELB can be managed separately from an aws_elb and prevent dependency
cycles.
2016-06-07 09:46:39 -04:00
John Ritsema c668c31203 updated 'Module Sources' website documentation to be more clear about how 'HTTP URL' module sources work 2016-06-06 17:04:47 -04:00
Clint 3d4bc56d97 Merge pull request #7037 from hashicorp/b-cloudflare-lib-upgrade
provider/cloudflare: Upgrade library to github.com/cloudflare/cloudflare-go
2016-06-06 15:29:39 -05:00
clint shryock 943583925d provider/cloudfront: Minor adjustments for new cloudflare-go lib 2016-06-06 14:57:26 -05:00
clint shryock d70d7aba57 provider/cloudflare: Swap out mitchellh fork for upstream cloudflare-go
TODO noted that this should be done when a PR was merged, and it has so
2016-06-06 14:48:05 -05:00
Clint 8c3ff93395 Update CHANGELOG.md 2016-06-06 11:31:38 -05:00
Clint d8ab30ca02 Merge pull request #6987 from modax/bug/vpngw-vpc-reattach
provider/aws: Fix reattachment of VPC to VPN gateway.
2016-06-06 11:30:44 -05:00
clint shryock b9f512e0cf provider/aws: Bump ElasticSearch domain delete time to match create time. Should help test pass 2016-06-06 11:13:48 -05:00