github.com/jgadling/terraform@v0.3.8-0.20150227214559-abd68c2c87bc/CHANGELOG.md (about) 1 ## 0.4.0 (unreleased) 2 3 FEATURES: 4 5 * **New provider: `dme` (DNSMadeEasy)** [GH-855] 6 * **New command: `taint`** - Manually mark a resource as tainted, causing 7 a destroy and recreate on the next plan/apply. 8 * **Self-variables** can be used to reference the current resource's 9 attributes within a provisioner. Ex. `${self.private_ip_address}` [GH-1033] 10 * **Continous state** saving during `terraform apply`. The state file is 11 continously updated as apply is running, meaning that the state is 12 less likely to become corrupt in a catastrophic case: terraform panic 13 or system killing Terraform. 14 * **Math operations** in interpolations. You can now do things like 15 `${count.index+1}`. [GH-1068] 16 17 IMPROVEMENTS: 18 19 * **New config function: `split`** - Split a value based on a delimiter. 20 This is useful for faking lists as parameters to modules. 21 * core: The serial of the state is only updated if there is an actual 22 change. This will lower the amount of state changing on things 23 like refresh. 24 25 BUG FIXES: 26 27 * core: module outputs can be used as inputs to other modules [GH-822] 28 * core: Self-referencing splat variables are no longer allowed in 29 provisioners. [GH-795][GH-868] 30 * core: Validate that `depends_on` doesn't contain interpolations. [GH-1015] 31 * core: Module inputs can be non-strings. [GH-819] 32 * providers/aws: manually deleted VPC removes it from the state 33 * providers/aws: `source_dest_check` regression fixed (now works). [GH-1020] 34 * providers/digitalocean: Waits until droplet is ready to be destroyed [GH-1057] 35 * providers/digitalocean: More lenient about 404's while waiting [GH-1062] 36 * providers/aws: Longer wait times for DB instances 37 38 ## 0.3.7 (February 19, 2015) 39 40 IMPROVEMENTS: 41 42 * **New resources: `google_compute_forwarding_rule`, `google_compute_http_health_check`, 43 and `google_compute_target_pool`** - Together these provide network-level 44 load balancing. [GH-588] 45 * **New resource: `aws_main_route_table_association`** - Manage the main routing table 46 of a VPC. [GH-918] 47 * **New resource: `aws_vpc_peering_connection`** [GH-963] 48 * core: Formalized the syntax of interpolations and documented it 49 very heavily. 50 * core: Strings in interpolations can now contain further interpolations, 51 e.g.: `foo ${bar("${baz}")}`. 52 * provider/aws: Internet gateway supports tags [GH-720] 53 * provider/aws: Support the more standard environmental variable names 54 for access key and secret keys. [GH-851] 55 * provider/aws: The `aws_db_instance` resource no longer requires both 56 `final_snapshot_identifier` and `skip_final_snapshot`; the presence or 57 absence of the former now implies the latter. [GH-874] 58 * provider/aws: Avoid unecessary update of `aws_subnet` when 59 `map_public_ip_on_launch` is not specified in config. [GH-898] 60 * provider/aws: Add `apply_method` to `aws_db_parameter_group` [GH-897] 61 * provider/aws: Add `storage_type` to `aws_db_instance` [GH-896] 62 * provider/aws: ELB can update listeners without requiring new. [GH-721] 63 * provider/aws: Security group support egress rules. [GH-856] 64 * provider/aws: Route table supports VPC peering connection on route. [GH-963] 65 * provider/aws: Add `root_block_device` to `aws_db_instance` [GH-998] 66 * provider/google: Remove "client secrets file", as it's no longer necessary 67 for API authentication [GH-884]. 68 * provider/google: Expose `self_link` on `google_compute_instance` [GH-906] 69 70 BUG FIXES: 71 72 * core: Fixing use of remote state with plan files. [GH-741] 73 * core: Fix a panic case when certain invalid types were used in 74 the configuration. [GH-691] 75 * core: Escape characters `\"`, `\n`, and `\\` now work in interpolations. 76 * core: Fix crash that could occur when there are exactly zero providers 77 installed on a system. [GH-786] 78 * core: JSON TF configurations can configure provisioners. [GH-807] 79 * core: Sort `depends_on` in state to prevent unnecessary file changes. [GH-928] 80 * core: State containing the zero value won't cause a diff with the 81 lack of a value. [GH-952] 82 * core: If a set type becomes empty, the state will be properly updated 83 to remove it. [GH-952] 84 * core: Bare "splat" variables are not allowed in provisioners. [GH-636] 85 * core: Invalid configuration keys to sub-resources are now errors. [GH-740] 86 * command/apply: Won't try to initialize modules in some cases when 87 no arguments are given. [GH-780] 88 * command/apply: Fix regression where user variables weren't asked [GH-736] 89 * helper/hashcode: Update `hash.String()` to always return a positive index. 90 Fixes issue where specific strings would convert to a negative index 91 and be ommited when creating Route53 records. [GH-967] 92 * provider/aws: Automatically suffix the Route53 zone name on record names. [GH-312] 93 * provider/aws: Instance should ignore root EBS devices. [GH-877] 94 * provider/aws: Fix `aws_db_instance` to not recreate each time. [GH-874] 95 * provider/aws: ASG termination policies are synced with remote state. [GH-923] 96 * provider/aws: ASG launch configuration setting can now be updated in-place. [GH-904] 97 * provider/aws: No read error when subnet is manually deleted. [GH-889] 98 * provider/aws: Tags with empty values (empty string) are properly 99 managed. [GH-968] 100 * provider/aws: Fix case where route table would delete its routes 101 on an unrelated change. [GH-990] 102 * provider/google: Fix bug preventing instances with metadata from being 103 created [GH-884]. 104 105 PLUGIN CHANGES: 106 107 * New `helper/schema` type: `TypeFloat` [GH-594] 108 * New `helper/schema` field for resources: `Exists` must point to a function 109 to check for the existence of a resource. This is used to properly 110 handle the case where the resource was manually deleted. [GH-766] 111 * There is a semantic change in `GetOk` where it will return `true` if 112 there is any value in the diff that is _non-zero_. Before, it would 113 return true only if there was a value in the diff. 114 115 ## 0.3.6 (January 6, 2015) 116 117 FEATURES: 118 119 * **New provider: `cloudstack`** 120 121 IMPROVEMENTS: 122 123 * **New resource: `aws_key_pair`** - Import a public key into AWS. [GH-695] 124 * **New resource: `heroku_cert`** - Manage Heroku app certs. 125 * provider/aws: Support `eu-central-1`, `cn-north-1`, and GovCloud. [GH-525] 126 * provider/aws: `route_table` can have tags. [GH-648] 127 * provider/google: Support Ubuntu images. [GH-724] 128 * provider/google: Support for service accounts. [GH-725] 129 130 BUG FIXES: 131 132 * core: temporary/hidden files that look like Terraform configurations 133 are no longer loaded. [GH-548] 134 * core: Set types in resources now result in deterministic states, 135 resulting in cleaner plans. [GH-663] 136 * core: fix issue where "diff was not the same" would come up with 137 diffing lists. [GH-661] 138 * core: fix crash where module inputs weren't strings, and add more 139 validation around invalid types here. [GH-624] 140 * core: fix error when using a computed module output as an input to 141 another module. [GH-659] 142 * core: map overrides in "terraform.tfvars" no longer result in a syntax 143 error. [GH-647] 144 * core: Colon character works in interpolation [GH-700] 145 * provider/aws: Fix crash case when internet gateway is not attached 146 to any VPC. [GH-664] 147 * provider/aws: `vpc_id` is no longer required. [GH-667] 148 * provider/aws: `availability_zones` on ELB will contain more than one 149 AZ if it is set as such. [GH-682] 150 * provider/aws: More fields are marked as "computed" properly, resulting 151 in more accurate diffs for AWS instances. [GH-712] 152 * provider/aws: Fix panic case by using the wrong type when setting 153 volume size for AWS instances. [GH-712] 154 * provider/aws: route table ignores routes with 'EnableVgwRoutePropagation' 155 origin since those come from gateways. [GH-722] 156 * provider/aws: Default network ACL ID and default security group ID 157 support for `aws_vpc`. [GH-704] 158 * provider/aws: Tags are not marked as computed. This introduces another 159 issue with not detecting external tags, but this will be fixed in 160 the future. [GH-730] 161 162 ## 0.3.5 (December 9, 2014) 163 164 FEATURES: 165 166 * **Remote State**: State files can now be stored remotely via HTTP, 167 Consul, or HashiCorp's Atlas. 168 * **New Provider: `atlas`**: Retrieve artifacts for deployment from 169 HashiCorp's Atlas service. 170 * New `element()` function to index into arrays 171 172 IMPROVEMENTS: 173 174 * provider/aws: Support tenancy for aws\_instance 175 * provider/aws: Support block devices for aws\_instance 176 * provider/aws: Support virtual\_name on block device 177 * provider/aws: Improve RDS reliability (more grace time) 178 * provider/aws: Added aws\_db\_parameter\_group resource 179 * provider/aws: Added tag support to aws\_subnet 180 * provider/aws: Routes in RouteTable are optional 181 * provider/aws: associate\_public\_ip\_address on aws\_launch\_configuration 182 * provider/aws: Added aws\_network\_acl 183 * provider/aws: Ingress rules in security groups are optional 184 * provider/aws: Support termination policy for ASG 185 * provider/digitalocean: Improved droplet size compatibility 186 187 BUG FIXES: 188 189 * core: Fixed issue causing double delete. [GH-555] 190 * core: Fixed issue with create-before-destroy not being respected in 191 some circumstances. 192 * core: Fixing issue with count expansion with non-homogenous instance 193 plans. 194 * core: Fix issue with referencing resource variables from resources 195 that don't exist yet within resources that do exist, or modules. 196 * core: Fixing depedency handling for modules 197 * core: Fixing output handling [GH-474] 198 * core: Fixing count interpolation in modules 199 * core: Fixing multi-var without module state 200 * core: Fixing HCL variable declaration 201 * core: Fixing resource interpolation for without state 202 * core: Fixing handling of computed maps 203 * command/init: Fixing recursion issue [GH-518] 204 * command: Validate config before requesting input [GH-602] 205 * build: Fixing GOPATHs with spaces 206 207 MISC: 208 209 * provider/aws: Upgraded to helper.Schema 210 * provider/heroku: Upgraded to helper.Schema 211 * provider/mailgun: Upgraded to helper.Schema 212 * provider/dnsimple: Upgraded to helper.Schema 213 * provider/cloudflare: Upgraded to helper.Schema 214 * provider/digitalocean: Upgraded to helper.Schema 215 * provider/google: Upgraded to helper.Schema 216 217 ## 0.3.1 (October 21, 2014) 218 219 IMPROVEMENTS: 220 221 * providers/aws: Support tags for security groups. 222 * providers/google: Add "external\_address" to network attributes [GH-454] 223 * providers/google: External address is used as default connection host. [GH-454] 224 * providers/heroku: Support `locked` and `personal` booleans on organization 225 settings. [GH-406] 226 227 BUG FIXES: 228 229 * core: Remove panic case when applying with a plan that generates no 230 new state. [GH-403] 231 * core: Fix a hang that can occur with enough resources. [GH-410] 232 * core: Config validation will not error if the field is being 233 computed so the value is still unknown. 234 * core: If a resource fails to create and has provisioners, it is 235 marked as tainted. [GH-434] 236 * core: Set types are validated to be sets. [GH-413] 237 * core: String types are validated properly. [GH-460] 238 * core: Fix crash case when destroying with tainted resources. [GH-412] 239 * core: Don't execute provisioners in some cases on destroy. 240 * core: Inherited provider configurations will be properly interpolated. [GH-418] 241 * core: Refresh works properly if there are outputs that depend on resources 242 that aren't yet created. [GH-483] 243 * providers/aws: Refresh of launch configs and autoscale groups load 244 the correct data and don't incorrectly recreate themselves. [GH-425] 245 * providers/aws: Fix case where ELB would incorrectly plan to modify 246 listeners (with the same data) in some cases. 247 * providers/aws: Retry destroying internet gateway for some amount of time 248 if there is a dependency violation since it is probably just eventual 249 consistency (public facing resources being destroyed). [GH-447] 250 * providers/aws: Retry deleting security groups for some amount of time 251 if there is a dependency violation since it is probably just eventual 252 consistency. [GH-436] 253 * providers/aws: Retry deleting subnet for some amount of time if there is a 254 dependency violation since probably asynchronous destroy events take 255 place still. [GH-449] 256 * providers/aws: Drain autoscale groups before deleting. [GH-435] 257 * providers/aws: Fix crash case if launch config is manually deleted. [GH-421] 258 * providers/aws: Disassociate EIP before destroying. 259 * providers/aws: ELB treats subnets as a set. 260 * providers/aws: Fix case where in a destroy/create tags weren't reapplied. [GH-464] 261 * providers/aws: Fix incorrect/erroneous apply cases around security group 262 rules. [GH-457] 263 * providers/consul: Fix regression where `key` param changed to `keys. [GH-475] 264 265 ## 0.3.0 (October 14, 2014) 266 267 FEATURES: 268 269 * **Modules**: Configuration can now be modularized. Modules can live on 270 GitHub, BitBucket, Git/Hg repos, HTTP URLs, and file paths. Terraform 271 automatically downloads/updates modules for you on request. 272 * **New Command: `init`**. This command initializes a Terraform configuration 273 from an existing Terraform module (also new in 0.3). 274 * **New Command: `destroy`**. This command destroys infrastructure 275 created with `apply`. 276 * Terraform will ask for user input to fill in required variables and 277 provider configurations if they aren't set. 278 * `terraform apply MODULE` can be used as a shorthand to quickly build 279 infrastructure from a module. 280 * The state file format is now JSON rather than binary. This allows for 281 easier machine and human read/write. Old binary state files will be 282 automatically upgraded. 283 * You can now specify `create_before_destroy` as an option for replacement 284 so that new resources are created before the old ones are destroyed. 285 * The `count` metaparameter can now contain interpolations (such as 286 variables). 287 * The current index for a resource with a `count` set can be interpolated 288 using `${count.index}`. 289 * Various paths can be interpolated with the `path.X` variables. For example, 290 the path to the current module can be interpolated using `${path.module}`. 291 292 IMPROVEMENTS: 293 294 * config: Trailing commas are now allowed for the final elements of lists. 295 * core: Plugins are loaded from `~/.terraform.d/plugins` (Unix) or 296 `%USERDATA%/terraform.d/plugins` (Windows). 297 * command/show: With no arguments, it will show the default state. [GH-349] 298 * helper/schema: Can now have default values. [GH-245] 299 * providers/aws: Tag support for most resources. 300 * providers/aws: New resource `db_subnet_group`. [GH-295] 301 * providers/aws: Add `map_public_ip_on_launch` for subnets. [GH-285] 302 * providers/aws: Add `iam_instance_profile` for instances. [GH-319] 303 * providers/aws: Add `internal` option for ELBs. [GH-303] 304 * providers/aws: Add `ssl_certificate_id` for ELB listeners. [GH-350] 305 * providers/aws: Add `self` option for security groups for ingress 306 rules with self as source. [GH-303] 307 * providers/aws: Add `iam_instance_profile` option to 308 `aws_launch_configuration`. [GH-371] 309 * providers/aws: Non-destructive update of `desired_capacity` for 310 autoscale groups. 311 * providers/aws: Add `main_route_table_id` attribute to VPCs. [GH-193] 312 * providers/consul: Support tokens. [GH-396] 313 * providers/google: Support `target_tags` for firewalls. [GH-324] 314 * providers/google: `google_compute_instance` supports `can_ip_forward` [GH-375] 315 * providers/google: `google_compute_disk` supports `type` to support disks 316 such as SSDs. [GH-351] 317 * provisioners/local-exec: Output from command is shown in CLI output. [GH-311] 318 * provisioners/remote-exec: Output from command is shown in CLI output. [GH-311] 319 320 BUG FIXES: 321 322 * core: Providers are validated even without a `provider` block. [GH-284] 323 * core: In the case of error, walk all non-dependent trees. 324 * core: Plugin loading from CWD works properly. 325 * core: Fix many edge cases surrounding the `count` meta-parameter. 326 * core: Strings in the configuration can escape double-quotes with the 327 standard `\"` syntax. 328 * core: Error parsing CLI config will show properly. [GH-288] 329 * core: More than one Ctrl-C will exit immediately. 330 * providers/aws: autoscaling_group can be launched into a vpc [GH-259] 331 * providers/aws: not an error when RDS instance is deleted manually. [GH-307] 332 * providers/aws: Retry deleting subnet for some time while AWS eventually 333 destroys dependencies. [GH-357] 334 * providers/aws: More robust destroy for route53 records. [GH-342] 335 * providers/aws: ELB generates much more correct plans without extranneous 336 data. 337 * providers/aws: ELB works properly with dynamically changing 338 count of instances. 339 * providers/aws: Terraform can handle ELBs deleted manually. [GH-304] 340 * providers/aws: Report errors properly if RDS fails to delete. [GH-310] 341 * providers/aws: Wait for launch configuration to exist after creation 342 (AWS eventual consistency) [GH-302] 343 344 ## 0.2.2 (September 9, 2014) 345 346 IMPROVEMENTS: 347 348 * providers/amazon: Add `ebs_optimized` flag. [GH-260] 349 * providers/digitalocean: Handle 404 on delete 350 * providers/digitalocean: Add `user_data` argument for creating droplets 351 * providers/google: Disks can be marked `auto_delete`. [GH-254] 352 353 BUG FIXES: 354 355 * core: Fix certain syntax of configuration that could cause hang. [GH-261] 356 * core: `-no-color` flag properly disables color. [GH-250] 357 * core: "~" is expanded in `-var-file` flags. [GH-273] 358 * core: Errors with tfvars are shown in console. [GH-269] 359 * core: Interpolation function calls with more than two args parse. [GH-282] 360 * providers/aws: Refreshing EIP from pre-0.2 state file won't error. [GH-258] 361 * providers/aws: Creating EIP without an instance/network won't fail. 362 * providers/aws: Refreshing EIP manually deleted works. 363 * providers/aws: Retry EIP delete to allow AWS eventual consistency to 364 detect it isn't attached. [GH-276] 365 * providers/digitalocean: Handle situations when resource was destroyed 366 manually. [GH-279] 367 * providers/digitalocean: Fix a couple scenarios where the diff was 368 incorrect (and therefore the execution as well). 369 * providers/google: Attaching a disk source (not an image) works 370 properly. [GH-254] 371 372 ## 0.2.1 (August 31, 2014) 373 374 IMPROVEMENTS: 375 376 * core: Plugins are automatically discovered in the executable directory 377 or pwd if named properly. [GH-190] 378 * providers/mailgun: domain records are now saved to state 379 380 BUG FIXES: 381 382 * core: Configuration parses when identifier and '=' have no space. [GH-243] 383 * core: `depends_on` with `count` generates the proper graph. [GH-244] 384 * core: Depending on a computed variable of a list type generates a 385 plan without failure. i.e. `${type.name.foos.0.bar}` where `foos` 386 is computed. [GH-247] 387 * providers/aws: Route53 destroys in parallel work properly. [GH-183] 388 389 ## 0.2.0 (August 28, 2014) 390 391 BACKWARDS INCOMPATIBILITIES: 392 393 * We've replaced the configuration language in use from a C library to 394 a pure-Go reimplementation. In the process, we removed some features 395 of the language since it was too flexible: 396 * Semicolons are no longer valid at the end of lines 397 * Keys cannot be double-quoted strings: `"foo" = "bar"` is no longer 398 valid. 399 * JSON style maps `{ "foo": "bar" }` are no longer valid outside of JSON. 400 Maps must be in the format of `{ foo = "bar" }` (like other objects 401 in the config) 402 * Heroku apps now require (will not validate without) `region` and 403 `name` due to an upstream API change. [GH-239] 404 405 FEATURES: 406 407 * **New Provider: `google`**: Manage Google Compute instances, disks, 408 firewalls, and more. 409 * **New Provider: `mailgun`**: Manage mailgun domains. 410 * **New Function: `concat`**: Concatenate multiple strings together. 411 Example: `concat(var.region, "-", var.channel)`. 412 413 IMPROVEMENTS: 414 415 * core: "~/.terraformrc" (Unix) or "%APPDATA%/terraform.rc" (Windows) 416 can be used to configure custom providers and provisioners. [GH-192] 417 * providers/aws: EIPs now expose `allocation_id` and `public_ip` 418 attributes. 419 * providers/aws: Security group rules can be updated without a 420 destroy/create. 421 * providers/aws: You can enable and disable dns settings for VPCs. [GH-172] 422 * providers/aws: Can specify a private IP address for `aws_instance` [GH-217] 423 424 BUG FIXES: 425 426 * core: Variables are validated to not contain interpolations. [GH-180] 427 * core: Key files for provisioning can now contain `~` and will be expanded 428 to the user's home directory. [GH-179] 429 * core: The `file()` function can load files in sub-directories. [GH-213] 430 * core: Fix issue where some JSON structures didn't map properly into 431 Terraform structures. [GH-177] 432 * core: Resources with only `file()` calls will interpolate. [GH-159] 433 * core: Variables work in block names. [GH-234] 434 * core: Plugins are searched for in the same directory as the executable 435 before the PATH. [GH-157] 436 * command/apply: "tfvars" file no longer interferes with plan apply. [GH-153] 437 * providers/aws: Fix issues around failing to read EIPs. [GH-122] 438 * providers/aws: Autoscaling groups now register and export load 439 balancers. [GH-207] 440 * providers/aws: Ingress results are treated as a set, so order doesn't 441 matter anymore. [GH-87] 442 * providers/aws: Instance security groups treated as a set [GH-194] 443 * providers/aws: Retry Route53 requests if operation failed because another 444 operation is in progress [GH-183] 445 * providers/aws: Route53 records with multiple record values work. [GH-221] 446 * providers/aws: Changing AMI doesn't result in errors anymore. [GH-196] 447 * providers/heroku: If you delete the `config_vars` block, config vars 448 are properly nuked. 449 * providers/heroku: Domains and drains are deleted before the app. 450 * providers/heroku: Moved from the client library bgentry/heroku-go to 451 cyberdelia/heroku-go [GH-239]. 452 * providers/heroku: Plans without a specific plan name for 453 heroku\_addon work. [GH-198] 454 455 PLUGIN CHANGES: 456 457 * **New Package:** `helper/schema`. This introduces a high-level framework 458 for easily writing new providers and resources. The Heroku provider has 459 been converted to this as an example. 460 461 ## 0.1.1 (August 5, 2014) 462 463 FEATURES: 464 465 * providers/heroku: Now supports creating Heroku Drains [GH-97] 466 467 IMPROVEMENTS: 468 469 * providers/aws: Launch configurations accept user data [GH-94] 470 * providers/aws: Regions are now validated [GH-96] 471 * providers/aws: ELB now supports health check configurations [GH-109] 472 473 BUG FIXES: 474 475 * core: Default variable file "terraform.tfvars" is auto-loaded. [GH-59] 476 * core: Multi-variables (`foo.*.bar`) work even when `count = 1`. [GH-115] 477 * core: `file()` function can have string literal arg [GH-145] 478 * providers/cloudflare: Include the proper bins so the cloudflare 479 provider is compiled 480 * providers/aws: Engine version for RDS now properly set [GH-118] 481 * providers/aws: Security groups now depend on each other and 482 * providers/aws: DB instances now wait for destroys, have proper 483 dependencies and allow passing skip_final_snapshot 484 * providers/aws: Add associate_public_ip_address as an attribute on 485 the aws_instance resource [GH-85] 486 * providers/aws: Fix cidr blocks being updated [GH-65, GH-85] 487 * providers/aws: Description is now required for security groups 488 * providers/digitalocean: Private IP addresses are now a separate 489 attribute 490 * provisioner/all: If an SSH key is given with a password, a better 491 error message is shown. [GH-73] 492 493 ## 0.1.0 (July 28, 2014) 494 495 * Initial release 496