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