On the 14th of April Terraform passed another milestone and released to General Availability their 0.15 version of the product. This is a very powerful release but not for the additional features that have been added but for a change in messaging surrounding the release. This is taken directly from the product release announcement.
The Terraform 0.15 release marks the beginning of the pre-release period leading up to Terraform 1.0. Terraform 0.15 includes a number of improvements that solidify Terraform workflows and ensure the stability of Terraform’s feature set for the long term.
This marks a turning point from feature additions to a focus on stability. Stability is a key identifier in a products lifecycle preparation for a 1.0 release.
This has been highlighted in the features that have been released in this release. Some of which have even been backported to earlier editions, thereby increasing compatibility between versions.
What’s new in 0.15
The first feature we will be looking at is “Remote State Data Source Compatibility”, prior to the release of 0.15. one of the major barriers to upgrading adoption is that your upgrade will automatically change your state file preventing the ability to use an earlier version of Terraform code or binary. The thing that I personally like is that this feature has been backported to the 0.12.30 and the 0.13.6 and 0.14.0 releases of Terraform. HashiCorp has also stated that the compatibility will span a full major release cycle at GA time, so 0.12.30, 0.13.6, 0.14.0 and 0,15.x will be able to read and write against 1.x terraform state files. This is a massive move forward in product stability as it now allows for a more managed upgrade, rather than a big bang migration.
The next feature is dovetailed with the above but is related to local state files rather than remote. It was announced as a part of 0.14, but was actually backported from their work on 0.15 to provide a terraform state file that is cross-compatible between versions from 0.14 to 1.0. this too is a powerful stabilising feature. It will help drive product upgrades by not forcing instance upgrades. The only issue I can see is when developers use features that pertain to a particular version. However, this would be captured during a terraform plan.
The next is a change in how the console is experienced across platforms, it will now offer a consistent UTF-8 experience and includes a move to virtual terminal sequences, this may sound a little opaque if you are not a developer or a Linux guy.
UTF-8 is a common variable width character encoding mechanism that is backwards compatible with ASSCII, it is commonly used in programme languages is is the most common encoding used in the Web with 97% of web pages being compliant, what is interesting is that it has taken until now to standardize on this. Virtual Terminal Sequences are control character sequences that can control things like cursor movement, colour and font modes, and other operations when written to the output stream and can also be written to the input stream in response to output. This will lead to a change in behaviours on Windows terminals as shown below.
Next up is an enhancement to the sensitivity functions, HashiCorp have extended the scope of this feature to allow for provider attribute protection. By using the sensitive function you can now manage the way that terraform handles sensitive values like passwords.
The final feature an improvement to terraform logging with the introduction of structured logging levels, allowing a more granular approach when troubleshooting and dealing with HashiCorp support. For greater details have a read of the HashiCorp troubleshooting guide
Finally, as a part of their driver to stabilize the code base prior to their 1.0 release a number of deprecated features have been removed and will no longer work with 0.15 for a full understanding of what has gone read the upgrade guide and the Changelog.
It may actually come as a bit of a surprise to many that Terraform is not actually a 1.0 released product, especially considering that it powers the deployment of a significant number of enterprises. Large and small. But the fact is it is not. This does not detract from the functionality of the product, nor does it detract from the support that their enterprise customers can receive. That all said, there comes a time when a product must cross the Rubicon and grow up and as we are now a 0.15 it is time that this product considers is adult life. Now whether Terraform leaves school at 16, 18 or carries on until 21, is a matter for HashiCorp, but they are starting the work to a release date. The work that they have done on standardization in the console and the backwards compatibility they have written into the state files is a vast improvement and will drive the upgrade path. The removal of depreciated features for example the syntax of map and list functions is another sign of maturity and trust in their product. The coming of age party will be epic.