Skip to main content

Gruntwork release 2016-08

Guides / Update Guides / Releases / 2016-08

This page is lists all the updates to the Gruntwork Infrastructure as Code Library that were released in 2016-08. For instructions on how to use these updates in your code, check out the updating documentation.

Here are the repos that were updated:



Published: 8/26/2016 | Release notes

  • Add support for a new option called --missing-key-action that defines what to do when a template looks up a variable that is not defined


Published: 8/22/2016 | Release notes

  • Update the in the _docs folder rather than the auto-generated one in the root folder


Published: 8/8/2016 | Release notes

  • Add a bunch of new template helpers to make it easier to manipulate strings and numbers: downcase, upcase, capitalize, replace, replaceAll, trim, round, ceil, floor, dasherize, snakeCase, camelCase, camelCaseLower.



Published: 8/5/2016 | Release notes

  • The script configure-environment-for-gruntwork-module now optionally installs Terragrunt. In addition, terraform, terragrunt, packer, and glide are now automatically placed in the system PATH.



Published: 8/13/2016 | Release notes

  • Add a syslog module that allows you to configure rate limiting and log rotation settings syslog.



Published: 8/23/2016 | Release notes

  • Add a new module called ssh-iam that allows your developers to upload their public SSH keys to IAM and use those to SSH to servers.


Published: 8/15/2016 | Release notes

  • Add auto-update module to configure Amazon Linux or Ubuntu to automatically download and install the latest security updates.


Published: 8/11/2016 | Release notes

This release is used for internal testing only! Do not use it in production!



Published: 8/31/2016 | Release notes

BREAKING CHANGE: Upgrade module parameters to take advantage of the new data types introduced in Terraform 0.7.x: list and map. As a result of this change, this release is NOT backwards-compatible with Terraform 0.6.x.

  • All VPC output variables that used to return comma-separated strings now return proper lists (e.g. public_subnet_cidr_blocks, private_app_subnet_ids, private_persistence_route_table_ids, etc).
  • Similarly, all VPC input variables that used to look for a comma-separated string now look for a proper list as well (e.g. public_subnet_ids, private_app_subnet_cidr_blocks).
  • The VPC modules no longer take aws_availability_zones as an input variable. They now determine this using the aws_availability_zones data source instead. Unfortunately, due to a limitation in Terraform, we cannot automatically tell how many AZs are available, so you must specify the number using the num_availability_zones variable.
  • The Availability Zones output is now called availability_zones instead of aws_ availability_zones.
    • Example diff and
    • Remove the aws_availability_zones variable.
    • Add a variable called num_availability_zones. This represents the number of availability zones usable by this AWS account for the current AWS region. Set its default value to 2, 3, or 4, depending on your region.
    • Example diff (ignore the user_data stuff)
    • Update the ref of the vpc-mgmt and vpc-mgmt-network-acls URLs to 0.1.0.
    • In the mgmt_vpc module, instead of setting aws_availability_zones = "${var.aws_availability_zones}", set num_availability_zones = "${var.num_availability_zones}".
    • In the mgmt_vpc_network_acls module, instead of setting num_subnets = "${length(split(",", var.aws_availability_zones))}", set num_subnets = "${var.num_availability_zones}".
    • In the mgmt_vpc_network_acls module, if you don't have it already, set a new parameter: vpc_ready = "${module.mgmt_vpc.vpc_ready}".
  • Deploy:
    • Run terragrunt get -update
    • Run terragrunt plan
    • You may see a few Network ACLs being created and destroyed. That's OK.
    • You should NOT see the VPC, any route tables, or any subnets being created or destroyed. If you do, let us know (!
    • If everything looks OK, run terragrunt apply.

These use the exact same upgrade process as the mgmt VPC, except there are some additional steps for the peering connection:

    • Example diff (ignore the user_data stuff)
    • Update the ref of the vpc-peering URL to 0.1.0.
    • Instead of manually concatenating values in a string for the origin_vpc_route_table_ids and destination_vpc_route_table_ids parameters, use the concat and list functions. You should get something like origin_vpc_route_table_ids = "${concat(data.terraform_remote_state.mgmt_vpc.private_subnet_route_table_ids, list(data.terraform_remote_state.mgmt_vpc.public_subnet_route_table_id))}".
    • Replace length(split(",", var.aws_availability_zones)) in the calculation of the num_origin_vpc_route_tables and num_destination_vpc_route_tables parameters with var.num_availability_zones. The other parts of the calculation (e.g. the +1 and the *2) stay the same.
  • Deploy:
    • Same process as the mgmt VPC above.
    • Other than minor Network ACL changes, you should not see anything being destroyed. If you do, this could lead to outage, so please notify us (!

You can update other variables and outputs to lists (e.g. var.aws_account_ids), get rid of unnecessary split and join usage, and upgrade terraform_remote_state usage to data sources. See the Terraform 0.7 upgrade guide for details.

Finally, when using other modules that depend on outputs from your VPC, note that the outputs are now lists rather than strings, so you may want to update those other modules to the 0.7 versions (see their release notes) or you may need to add or remove some calls to split and join.

ENHANCEMENT: vpc-app and vpc-mgmt now allow for specifying the exact CIDR blocks to be used for all subnets.