{"componentChunkName":"component---node-modules-gatsby-theme-medium-to-own-blog-src-templates-blog-post-js","path":"/how-we-stay-on-top-of-terraform-versions/","result":{"data":{"site":{"siteMetadata":{"siteUrl":"https://javame.netlify.app","githubUrl":"https://github.com/aterreno/blog"}},"mdx":{"fields":{"slug":"/how-we-stay-on-top-of-terraform-versions/"},"excerpt":"At  Labrador  we have all our infrastructure in code, we use  AWS  and love  Terraform . In my previous gig I’ve been trough the pains of…","timeToRead":1,"frontmatter":{"title":"How we stay on top of Terraform versions","description":"At Labrador we have all our infrastructure in code, we use AWS and love Terraform.","categories":[],"date":"December 01, 2017","canonical_link":"https://javame.netlify.app//how-we-stay-on-top-of-terraform-versions-4987ef4abae7"},"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"How we stay on top of Terraform versions\",\n  \"description\": \"At Labrador we have all our infrastructure in code, we use AWS and love Terraform.\",\n  \"date\": \"2017-12-01T17:55:04.524Z\",\n  \"categories\": [],\n  \"published\": true,\n  \"canonical_link\": \"https://javame.netlify.app//how-we-stay-on-top-of-terraform-versions-4987ef4abae7\",\n  \"redirect_from\": [\"/how-we-stay-on-top-of-Terraform-versions-4987ef4abae7\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"At \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://www.thelabrador.co.uk/\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"Labrador\"), \" we have all our infrastructure in code, we use \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://aws.amazon.com/\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"AWS\"), \" and love \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://www.terraform.io/\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"Terraform\"), \".\"), mdx(\"p\", null, \"In my previous gig I\\u2019ve been trough the pains of upgrading Terraform and here I\\u2019ve (almost accidentally) found a way to stay on top of the versions.\"), mdx(\"p\", null, \"We run our plan and apply continuously (git push on master) on \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://concourse.ci/\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"Concourse CI\"), \": we love this CI/CD tool, it\\u2019s so command line, API, configuration, container driven, it enables us to do the right thing, by default.\"), mdx(\"p\", null, \"On Concourse we always pull the latest \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://hub.docker.com/r/hashicorp/terraform/\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"hashicorp/terraform\"), \" image from docker hub to run the plan/apply: that way we will fail fast the build if the new version introduces some regression bugs on our infrastructure code.\"), mdx(\"p\", null, \"On local development we use \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"http://brewformulas.org/Tfenv\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"tfenv\"), \", and we have a\\xA0\", mdx(\"em\", {\n    parentName: \"p\"\n  }, \".terraform-version\"), \" file on git, if you try to plan after the CI applied with a higher version of terraform you will get an error, that way it\\u2019s easy to keep that file and the terraform version locally up to date.\"), mdx(\"p\", null, \"I\\u2019ve updated today my terraform to 0.11.1, what\\u2019s your version?\\xA0;)\"));\n}\n;\nMDXContent.isMDXComponent = true;"},"allWebMentionEntry":{"nodes":[]}},"pageContext":{"id":"e00cb488-47a0-5aa7-80a9-e101b6b5b555","previous":{"id":"6e5a2a14-47f8-5e27-9045-200fd6145c05","fields":{"slug":"/walking-away-from-twitter/","published":true},"frontmatter":{"redirect_from":["/walking-off-from-twitter-6df6322ff5e4"],"redirect_to":null,"title":"Walking away from Twitter"}},"next":{"id":"65f63e69-c853-5e3a-a7f1-d0d52de6ba1a","fields":{"slug":"/dynamodb-replica-to-mysql/","published":true},"frontmatter":{"redirect_from":["/dynamodb-replica-to-mysql-8563cd2ac6b8"],"redirect_to":null,"title":"DynamoDB replica to MySQL"}},"permalink":"https://javame.netlify.app/how-we-stay-on-top-of-terraform-versions/","themeOptions":{"plugins":[],"config":{"title":"Antonio Terreno","description":"Antonio Terreno's blog archive","shortBio":"","bio":"Principal Consultant at Equal Experts","author":"Antonio Terreno","githubUrl":"https://github.com/aterreno/blog","siteUrl":"https://javame.netlify.app/","social":{"twitter":"javame","medium":"","facebook":"","github":"aterreno","linkedin":"antonioterreno","instagram":"tritonitri"},"goatCounterCode":null}}}},"staticQueryHashes":["4131332129","645483741"]}