diff --git a/.vim/bundle/vim-terraform/.editorconfig b/.vim/bundle/vim-terraform/.editorconfig
new file mode 100644
index 0000000..beffa30
--- /dev/null
+++ b/.vim/bundle/vim-terraform/.editorconfig
@@ -0,0 +1,11 @@
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/.vim/bundle/vim-terraform/.gitignore b/.vim/bundle/vim-terraform/.gitignore
new file mode 100644
index 0000000..0a56e3f
--- /dev/null
+++ b/.vim/bundle/vim-terraform/.gitignore
@@ -0,0 +1 @@
+/doc/tags
diff --git a/.vim/bundle/vim-terraform/CHANGELOG.md b/.vim/bundle/vim-terraform/CHANGELOG.md
new file mode 100644
index 0000000..a7c9b56
--- /dev/null
+++ b/.vim/bundle/vim-terraform/CHANGELOG.md
@@ -0,0 +1,21 @@
+# vim-terraform CHANGELOG
+
+## Version 1.2.1 (February 5, 2015)
+
+- Block indentation fix (thanks imkira@github)
+
+## Version 1.2.0 (December 12, 2014)
+
+- Add Kevin Le's syntax highlighting
+
+## Version 1.1.0 (December 11, 2014)
+
+- Remove syntax highlighting; see README.md
+
+## Version 1.0.1 (December 10, 2014)
+
+- Make this work without the JSON plugin
+
+## Version 1.0.0 (December 10, 2014)
+
+- Initial release
diff --git a/.vim/bundle/vim-terraform/CODE_OF_CONDUCT.md b/.vim/bundle/vim-terraform/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..bc6ec6d
--- /dev/null
+++ b/.vim/bundle/vim-terraform/CODE_OF_CONDUCT.md
@@ -0,0 +1,45 @@
+# Contributor Code of Conduct
+
+As contributors and maintainers of this project, and in the interest of
+fostering an open and welcoming community, we pledge to respect all people who
+contribute through reporting issues, posting feature requests, updating
+documentation, submitting pull requests or patches, and other activities.
+
+We are committed to making participation in this project a harassment-free
+experience for everyone, regardless of level of experience, gender, gender
+identity and expression, sexual orientation, disability, personal appearance,
+body size, race, ethnicity, age, religion, or nationality.
+
+Examples of unacceptable behavior by participants include:
+
+- The use of sexualized language or imagery
+
+- Personal attacks
+
+- Trolling or insulting/derogatory comments
+
+- Public or private harassment
+
+- Publishing other's private information, such as physical or electronic
+ addresses, without explicit permission
+
+- Other unethical or unprofessional conduct.
+
+Project maintainers have the right and responsibility to remove, edit, or reject
+comments, commits, code, wiki edits, issues, and other contributions that are
+not aligned to this Code of Conduct. By adopting this Code of Conduct, project
+maintainers commit themselves to fairly and consistently applying these
+principles to every aspect of managing this project. Project maintainers who do
+not follow or enforce the Code of Conduct may be permanently removed from the
+project team.
+
+This code of conduct applies both within project spaces and in public spaces
+when an individual is representing the project or its community.
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be
+reported by opening an issue or contacting one or more of the project
+maintainers.
+
+This Code of Conduct is adapted from the [Contributor
+Covenant](http://contributor-covenant.org), version 1.2.0, available at
+
diff --git a/.vim/bundle/vim-terraform/CONTRIBUTING.md b/.vim/bundle/vim-terraform/CONTRIBUTING.md
new file mode 100644
index 0000000..d642088
--- /dev/null
+++ b/.vim/bundle/vim-terraform/CONTRIBUTING.md
@@ -0,0 +1,35 @@
+# Contributing To My Vim Plugins
+
+I'm not a Vim wizard by any means, nor am I too proud to accept
+contributions that improve my code, so if you think you have a problem,
+improvement, or other contribution towards the betterment of Vim-kind,
+please file an issue or, where appropriate, a pull request.
+
+Before filing an issue, please read this article by my friends and
+former colleagues at Viget:
+
+
+
+Keep in mind that I'm not paid to write Vim plugins, so I'm doing this
+in my spare time, which means it might take me a while to respond. If
+you're not satisfied with my response to your problem with my free (as
+in beer and in speech) software, I will give you triple your $0.00 back.
+
+When filing a pull request, please explain what you're changing and why.
+Please limit your changes to the specific thing you're fixing; it's
+probably easiest for both of us if you isolate your change in a topic
+branch that I can merge without pulling in other stuff. Please do not
+update CHANGELOG, versions, etc.; I'll take care of that. I'll also add
+you to the Credits list with my thanks.
+
+All of my Vim plugins use the ISC license. If you submit a pull request,
+I'll assume you are OK with any code you add being placed under that
+same ISC license. If this is not the case for any reason, please let me
+know why you can't tolerate the ISC license. I am 99.99% likely to
+reject your change in that case, but I'll let you have your say.
+
+This project is intended to be a safe, welcoming space for collaboration, and
+contributors are expected to adhere to the [Contributor
+Covenant](http://contributor-covenant.org) code of conduct.
+
+Thanks for contributing!
diff --git a/.vim/bundle/vim-terraform/LICENSE b/.vim/bundle/vim-terraform/LICENSE
new file mode 100644
index 0000000..9f7428e
--- /dev/null
+++ b/.vim/bundle/vim-terraform/LICENSE
@@ -0,0 +1,13 @@
+Copyright (c) 2014-2016 Mark Cornick
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED 'AS IS' AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
diff --git a/.vim/bundle/vim-terraform/README.md b/.vim/bundle/vim-terraform/README.md
new file mode 100644
index 0000000..458ee5c
--- /dev/null
+++ b/.vim/bundle/vim-terraform/README.md
@@ -0,0 +1,95 @@
+[](https://github.com/hashicorp/terraform/blob/v0.9.3/CHANGELOG.md)
+
+# Call For Maintainers
+
+This plugin, along with others like it, is now maintained by the
+[HashiVim](http://hashivim.github.io/) organization, which is looking for
+additional maintainers and contributors. See the HashiVim home page for
+further information.
+- - - -
+# Overview: vim-terraform
+
+This plugin adds a `:Terraform` command that runs terraform, with tab
+completion of subcommands. It also sets up `*.tf`, `*.tfvars`, and
+`*.tfstate` files to be highlighted as HCL, HCL, and JSON respectively.
+
+For Terraform 0.6.15 or greater, this plugin also adds a `:TerraformFmt`
+command that runs `terraform fmt` against the current buffer. Set
+`g:terraform_fmt_on_save` to 1 to run `terraform fmt` automatically when
+saving `*.tf` or `*.tfvars` files.
+
+- - - -
+# Installation
+
+With [pathogen.vim](https://github.com/tpope/vim-pathogen) just do:
+
+ cd ~/.vim/bundle
+ git clone https://github.com/hashivim/vim-terraform.git
+
+If you prefer to use something besides pathogen, go ahead.
+
+- - - -
+# Usage
+
+Allow vim-terraform to override your `.vimrc` indentation syntax for matching files. Defaults to 0 which is off.
+
+ let g:terraform_align=1
+
+If you use the [vim-commentary](https://github.com/tpope/vim-commentary) plugin, you should set the following option in your `~/.vimrc`. See [TOOLS-1](https://github.com/hashivim/vim-hashicorp-tools/pull/1) for more details.
+
+ autocmd FileType terraform setlocal commentstring=#%s
+
+- - - -
+# Updating vim-terraform
+Note, this is only for maintainers of the `vim-terraform` project.
+
+When a new version of Terraform drops, you can run the following where x.x.x is a version such as 0.8.7
+
+ ./update_automagic.sh x.x.x
+
+You will see the following truncated output
+
+ +) Extracting terraform-0.8.7.tar.gz
+ +) Running update_commands.rb
+ +) Running update_data_sources.rb
+ +) Running update_syntax.rb
+ +) Cleaning up after ourselves
+ On branch feature/run-helper-scripts-for-terraform-087/pgp
+ Changes not staged for commit:
+ (use "git add ..." to update what will be committed)
+ (use "git checkout -- ..." to discard changes in working directory)
+
+ modified: syntax/terraform.vim
+
+At this point, add the modified files to a git branch and open a pull request.
+
+ git checkout -b "feature/update-to-terraform-$VERSION"
+ git add $FILE
+ git commit -m "Message about update"
+ git push
+
+Add another maintainer to the pull request and await confirmation.
+
+- - - -
+# Credits
+
+Syntax highlighting and indentation by Kevin Le (@bkad) based on prior work by
+Larry Gilbert (@L2G). The rest originally written by Mark Cornick
+ and contributors listed below. Licensed under the
+ISC license.
+
+Thanks to the following contributors:
+
+- michael j talarczyk (@mijit)
+- Koji Nakayama (@knakayama)
+- Kris (@kostecky)
+- Okumura Takahiro (@hfm)
+- Paul Forman (@pforman)
+- Lowe Schmidt (@lsc)
+
+The `:TerraformFmt` command is adapted from
+[vim-hclfmt](https://github.com/fatih/vim-hclfmt/blob/master/autoload/fmt.vim).
+
+This project is intended to be a safe, welcoming space for collaboration, and
+contributors are expected to adhere to the [Contributor
+Covenant](http://contributor-covenant.org) code of conduct.
diff --git a/.vim/bundle/vim-terraform/after/ftplugin/terraform.vim b/.vim/bundle/vim-terraform/after/ftplugin/terraform.vim
new file mode 100644
index 0000000..dde6cad
--- /dev/null
+++ b/.vim/bundle/vim-terraform/after/ftplugin/terraform.vim
@@ -0,0 +1,57 @@
+if !exists('g:terraform_align')
+ let g:terraform_align = 0
+endif
+
+if g:terraform_align && exists(':Tabularize')
+ inoremap = =:call terraformalign()a
+ function! s:terraformalign()
+ let p = '^.*=[^>]*$'
+ if exists(':Tabularize') && getline('.') =~# '^.*=' && (getline(line('.')-1) =~# p || getline(line('.')+1) =~# p)
+ let column = strlen(substitute(getline('.')[0:col('.')],'[^=]','','g'))
+ let position = strlen(matchstr(getline('.')[0:col('.')],'.*=\s*\zs.*'))
+ Tabularize/=/l1
+ normal! 0
+ call search(repeat('[^=]*=',column).'\s\{-\}'.repeat('.',position),'ce',line('.'))
+ endif
+ endfunction
+endif
+
+
+function! TerraformFolds()
+ let thisline = getline(v:lnum)
+ if match(thisline, '^resource') >= 0
+ return ">1"
+ elseif match(thisline, '^provider') >= 0
+ return ">1"
+ elseif match(thisline, '^module') >= 0
+ return ">1"
+ elseif match(thisline, '^variable') >= 0
+ return ">1"
+ elseif match(thisline, '^output') >= 0
+ return ">1"
+ else
+ return "="
+ endif
+endfunction
+setlocal foldmethod=expr
+setlocal foldexpr=TerraformFolds()
+setlocal foldlevel=1
+
+function! TerraformFoldText()
+ let foldsize = (v:foldend-v:foldstart)
+ return getline(v:foldstart).' ('.foldsize.' lines)'
+endfunction
+setlocal foldtext=TerraformFoldText()
+
+"inoremap za
+nnoremap za
+onoremap za
+vnoremap zf
+
+" Match the identation put in place by Hashicorp and :TerraformFmt, https://github.com/hashivim/vim-terraform/issues/21
+if get(g:, "terraform_align", 1)
+ setlocal tabstop=2
+ setlocal softtabstop=2
+ setlocal shiftwidth=2
+endif
+
diff --git a/.vim/bundle/vim-terraform/doc/terraform.txt b/.vim/bundle/vim-terraform/doc/terraform.txt
new file mode 100644
index 0000000..503376c
--- /dev/null
+++ b/.vim/bundle/vim-terraform/doc/terraform.txt
@@ -0,0 +1,14 @@
+*terraform.txt* basic vim/terraform integration
+
+Author: HashiVim
+License: ISC license
+Repo: https://github.com/hashivim/vim-terraform
+
+COMMANDS *terraform*
+
+This command is only available if terraform is in your PATH.
+
+ *terraform-:terraform*
+:Terraform [args] Invoke an arbitrary terraform command.
+
+ vim:tw=78:et:ft=help:norl:
diff --git a/.vim/bundle/vim-terraform/ftdetect/terraform.vim b/.vim/bundle/vim-terraform/ftdetect/terraform.vim
new file mode 100644
index 0000000..c49b1d0
--- /dev/null
+++ b/.vim/bundle/vim-terraform/ftdetect/terraform.vim
@@ -0,0 +1,3 @@
+au BufRead,BufNewFile *.tf setlocal filetype=terraform
+au BufRead,BufNewFile *.tfvars setlocal filetype=terraform
+au BufRead,BufNewFile *.tfstate setlocal filetype=javascript
diff --git a/.vim/bundle/vim-terraform/indent/terraform.vim b/.vim/bundle/vim-terraform/indent/terraform.vim
new file mode 100644
index 0000000..fe3f769
--- /dev/null
+++ b/.vim/bundle/vim-terraform/indent/terraform.vim
@@ -0,0 +1,44 @@
+if exists("b:did_indent")
+ finish
+endif
+
+let b:did_indent = 1
+
+setlocal nolisp
+setlocal autoindent
+setlocal indentexpr=TerraformIndent(v:lnum)
+setlocal indentkeys+=<:>,0=},0=)
+
+if exists("*TerraformIndent")
+ finish
+endif
+
+function! TerraformIndent(lnum)
+ " previous non-blank line
+ let prevlnum = prevnonblank(a:lnum-1)
+
+ " beginning of file?
+ if prevlnum == 0
+ return 0
+ endif
+
+ " previous line without comments
+ let prevline = substitute(getline(prevlnum), '//.*$', '', '')
+ let previndent = indent(prevlnum)
+ let thisindent = previndent
+
+ " block open?
+ if prevline =~ '[\[{]\s*$'
+ let thisindent += &sw
+ endif
+
+ " current line without comments
+ let thisline = substitute(getline(a:lnum), '//.*$', '', '')
+
+ " block close?
+ if thisline =~ '^\s*[\]}]'
+ let thisindent -= &sw
+ endif
+
+ return thisindent
+endfunction
diff --git a/.vim/bundle/vim-terraform/plugin/terraform.vim b/.vim/bundle/vim-terraform/plugin/terraform.vim
new file mode 100644
index 0000000..b87e5d9
--- /dev/null
+++ b/.vim/bundle/vim-terraform/plugin/terraform.vim
@@ -0,0 +1,69 @@
+" terraform.vim - basic vim/terraform integration
+" Maintainer: HashiVim
+
+if exists("g:loaded_terraform") || v:version < 700 || &cp || !executable('terraform')
+ finish
+endif
+let g:loaded_terraform = 1
+
+if !exists("g:terraform_fmt_on_save")
+ let g:terraform_fmt_on_save = 0
+endif
+
+function! s:commands(A, L, P)
+ return join([
+ \ "apply",
+ \ "console",
+ \ "destroy",
+ \ "env",
+ \ "fmt",
+ \ "get",
+ \ "graph",
+ \ "import",
+ \ "init",
+ \ "output",
+ \ "plan",
+ \ "push",
+ \ "refresh",
+ \ "show",
+ \ "taint",
+ \ "untaint",
+ \ "validate",
+ \ "version",
+ \ "debug",
+ \ "force-unlock",
+ \ "state"
+ \ ], "\n")
+endfunction
+
+" Adapted from vim-hclfmt:
+" https://github.com/fatih/vim-hclfmt/blob/master/autoload/fmt.vim
+function! terraform#fmt()
+ let l:curw = winsaveview()
+ let l:tmpfile = tempname()
+ call writefile(getline(1, "$"), l:tmpfile)
+ let output = system("terraform fmt -write " . l:tmpfile)
+ if v:shell_error == 0
+ try | silent undojoin | catch | endtry
+ call rename(l:tmpfile, expand("%"))
+ silent edit!
+ let &syntax = &syntax
+ else
+ echo output
+ call delete(l:tmpfile)
+ endif
+ call winrestview(l:curw)
+endfunction
+
+augroup terraform
+ autocmd!
+ autocmd VimEnter *
+ \ command! -nargs=+ -complete=custom,s:commands Terraform execute '!terraform '.. ' -no-color'
+ autocmd VimEnter * command! -nargs=0 TerraformFmt call terraform#fmt()
+ if get(g:, "terraform_fmt_on_save", 1)
+ autocmd BufWritePre *.tf call terraform#fmt()
+ autocmd BufWritePre *.tfvars call terraform#fmt()
+ endif
+augroup END
+
+" vim:set et sw=2:
diff --git a/.vim/bundle/vim-terraform/syntax/terraform.vim b/.vim/bundle/vim-terraform/syntax/terraform.vim
new file mode 100644
index 0000000..f116c62
--- /dev/null
+++ b/.vim/bundle/vim-terraform/syntax/terraform.vim
@@ -0,0 +1,795 @@
+" Forked from Larry Gilbert's syntax file
+" github.com/L2G/vim-syntax-terraform
+
+if exists("b:current_syntax")
+ finish
+endif
+
+syn case match
+
+syn keyword terraSection connection output provider variable data terraform
+syn keyword terraValueBool true false on off yes no
+
+""" data
+syn keyword terraDataTypeBI
+ \ alicloud_images
+ \ alicloud_instance_types
+ \ alicloud_regions
+ \ alicloud_zones
+ \ archive_file
+ \ atlas_artifact
+ \ aws_acm_certificate
+ \ aws_alb
+ \ aws_alb_listener
+ \ aws_ami
+ \ aws_autoscaling_groups
+ \ aws_availability_zone
+ \ aws_availability_zones
+ \ aws_billing_service_account
+ \ aws_caller_identity
+ \ aws_canonical_user_id
+ \ aws_cloudformation_stack
+ \ aws_db_instance
+ \ aws_ebs_snapshot
+ \ aws_ebs_volume
+ \ aws_ecs_cluster
+ \ aws_ecs_container_definition
+ \ aws_ecs_task_definition
+ \ aws_eip
+ \ aws_elb_hosted_zone_id
+ \ aws_elb_service_account
+ \ aws_iam_account_alias
+ \ aws_iam_policy_document
+ \ aws_iam_role
+ \ aws_iam_server_certificate
+ \ aws_instance
+ \ aws_ip_ranges
+ \ aws_kms_secret
+ \ aws_partition
+ \ aws_prefix_list
+ \ aws_redshift_service_account
+ \ aws_region
+ \ aws_route53_zone
+ \ aws_route_table
+ \ aws_s3_bucket_object
+ \ aws_security_group
+ \ aws_sns_topic
+ \ aws_subnet
+ \ aws_subnet_ids
+ \ aws_vpc
+ \ aws_vpc_endpoint
+ \ aws_vpc_endpoint_service
+ \ aws_vpc_peering_connection
+ \ aws_vpn_gateway
+ \ azurerm_client_config
+ \ circonus_account
+ \ circonus_collector
+ \ consul_agent_self
+ \ consul_catalog_nodes
+ \ consul_catalog_service
+ \ consul_catalog_services
+ \ consul_keys
+ \ dns_a_record_set
+ \ dns_cname_record_set
+ \ dns_txt_record_set
+ \ docker_registry_image
+ \ external
+ \ fastly_ip_ranges
+ \ google_compute_zones
+ \ google_iam_policy
+ \ newrelic_application
+ \ ns1_datasource
+ \ null_data_source
+ \ openstack_images_image_v2
+ \ openstack_networking_network_v2
+ \ opsgenie_user
+ \ pagerduty_escalation_policy
+ \ pagerduty_schedule
+ \ pagerduty_user
+ \ pagerduty_vendor
+ \ profitbricks_datacenter
+ \ profitbricks_image
+ \ profitbricks_location
+ \ scaleway_bootscript
+ \ scaleway_image
+ \ template_cloudinit_config
+ \ template_file
+ \ terraform_remote_state
+""" end data sources
+
+""" resource
+syn keyword terraResourceTypeBI
+ \ alicloud_db_instance
+ \ alicloud_disk
+ \ alicloud_disk_attachment
+ \ alicloud_eip
+ \ alicloud_eip_association
+ \ alicloud_instance
+ \ alicloud_nat_gateway
+ \ alicloud_route_entry
+ \ alicloud_security_group
+ \ alicloud_security_group_rule
+ \ alicloud_slb
+ \ alicloud_slb_attachment
+ \ alicloud_subnet
+ \ alicloud_vpc
+ \ alicloud_vswitch
+ \ arukas_container
+ \ atlas_artifact
+ \ aws_alb
+ \ aws_alb_listener
+ \ aws_alb_listener_rule
+ \ aws_alb_target_group
+ \ aws_alb_target_group_attachment
+ \ aws_ami
+ \ aws_ami_copy
+ \ aws_ami_from_instance
+ \ aws_ami_launch_permission
+ \ aws_api_gateway_account
+ \ aws_api_gateway_api_key
+ \ aws_api_gateway_authorizer
+ \ aws_api_gateway_base_path_mapping
+ \ aws_api_gateway_client_certificate
+ \ aws_api_gateway_deployment
+ \ aws_api_gateway_domain_name
+ \ aws_api_gateway_integration
+ \ aws_api_gateway_integration_response
+ \ aws_api_gateway_method
+ \ aws_api_gateway_method_response
+ \ aws_api_gateway_method_settings
+ \ aws_api_gateway_model
+ \ aws_api_gateway_resource
+ \ aws_api_gateway_rest_api
+ \ aws_api_gateway_stage
+ \ aws_api_gateway_usage_plan
+ \ aws_api_gateway_usage_plan_key
+ \ aws_app_cookie_stickiness_policy
+ \ aws_appautoscaling_policy
+ \ aws_appautoscaling_target
+ \ aws_autoscaling_attachment
+ \ aws_autoscaling_group
+ \ aws_autoscaling_lifecycle_hook
+ \ aws_autoscaling_notification
+ \ aws_autoscaling_policy
+ \ aws_autoscaling_schedule
+ \ aws_cloudformation_stack
+ \ aws_cloudfront_distribution
+ \ aws_cloudfront_origin_access_identity
+ \ aws_cloudtrail
+ \ aws_cloudwatch_event_rule
+ \ aws_cloudwatch_event_target
+ \ aws_cloudwatch_log_destination
+ \ aws_cloudwatch_log_destination_policy
+ \ aws_cloudwatch_log_group
+ \ aws_cloudwatch_log_metric_filter
+ \ aws_cloudwatch_log_stream
+ \ aws_cloudwatch_log_subscription_filter
+ \ aws_cloudwatch_metric_alarm
+ \ aws_codebuild_project
+ \ aws_codecommit_repository
+ \ aws_codecommit_trigger
+ \ aws_codedeploy_app
+ \ aws_codedeploy_deployment_config
+ \ aws_codedeploy_deployment_group
+ \ aws_codepipeline
+ \ aws_config_config_rule
+ \ aws_config_configuration_recorder
+ \ aws_config_configuration_recorder_status
+ \ aws_config_delivery_channel
+ \ aws_customer_gateway
+ \ aws_db_event_subscription
+ \ aws_db_instance
+ \ aws_db_option_group
+ \ aws_db_parameter_group
+ \ aws_db_security_group
+ \ aws_db_subnet_group
+ \ aws_default_network_acl
+ \ aws_default_route_table
+ \ aws_default_security_group
+ \ aws_directory_service_directory
+ \ aws_dms_certificate
+ \ aws_dms_endpoint
+ \ aws_dms_replication_instance
+ \ aws_dms_replication_subnet_group
+ \ aws_dms_replication_task
+ \ aws_dynamodb_table
+ \ aws_ebs_snapshot
+ \ aws_ebs_volume
+ \ aws_ecr_repository
+ \ aws_ecr_repository_policy
+ \ aws_ecs_cluster
+ \ aws_ecs_service
+ \ aws_ecs_task_definition
+ \ aws_efs_file_system
+ \ aws_efs_mount_target
+ \ aws_egress_only_internet_gateway
+ \ aws_eip
+ \ aws_eip_association
+ \ aws_elastic_beanstalk_application
+ \ aws_elastic_beanstalk_application_version
+ \ aws_elastic_beanstalk_configuration_template
+ \ aws_elastic_beanstalk_environment
+ \ aws_elasticache_cluster
+ \ aws_elasticache_parameter_group
+ \ aws_elasticache_replication_group
+ \ aws_elasticache_security_group
+ \ aws_elasticache_subnet_group
+ \ aws_elasticsearch_domain
+ \ aws_elasticsearch_domain_policy
+ \ aws_elastictranscoder_pipeline
+ \ aws_elastictranscoder_preset
+ \ aws_elb
+ \ aws_elb_attachment
+ \ aws_emr_cluster
+ \ aws_emr_instance_group
+ \ aws_flow_log
+ \ aws_glacier_vault
+ \ aws_iam_access_key
+ \ aws_iam_account_alias
+ \ aws_iam_account_password_policy
+ \ aws_iam_group
+ \ aws_iam_group_membership
+ \ aws_iam_group_policy
+ \ aws_iam_group_policy_attachment
+ \ aws_iam_instance_profile
+ \ aws_iam_openid_connect_provider
+ \ aws_iam_policy
+ \ aws_iam_policy_attachment
+ \ aws_iam_role
+ \ aws_iam_role_policy
+ \ aws_iam_role_policy_attachment
+ \ aws_iam_saml_provider
+ \ aws_iam_server_certificate
+ \ aws_iam_user
+ \ aws_iam_user_login_profile
+ \ aws_iam_user_policy
+ \ aws_iam_user_policy_attachment
+ \ aws_iam_user_ssh_key
+ \ aws_inspector_assessment_target
+ \ aws_inspector_assessment_template
+ \ aws_inspector_resource_group
+ \ aws_instance
+ \ aws_internet_gateway
+ \ aws_key_pair
+ \ aws_kinesis_firehose_delivery_stream
+ \ aws_kinesis_stream
+ \ aws_kms_alias
+ \ aws_kms_key
+ \ aws_lambda_alias
+ \ aws_lambda_event_source_mapping
+ \ aws_lambda_function
+ \ aws_lambda_permission
+ \ aws_launch_configuration
+ \ aws_lb_cookie_stickiness_policy
+ \ aws_lb_ssl_negotiation_policy
+ \ aws_lightsail_domain
+ \ aws_lightsail_instance
+ \ aws_lightsail_key_pair
+ \ aws_lightsail_static_ip
+ \ aws_lightsail_static_ip_attachment
+ \ aws_load_balancer_backend_server_policy
+ \ aws_load_balancer_listener_policy
+ \ aws_load_balancer_policy
+ \ aws_main_route_table_association
+ \ aws_nat_gateway
+ \ aws_network_acl
+ \ aws_network_acl_rule
+ \ aws_network_interface
+ \ aws_opsworks_application
+ \ aws_opsworks_custom_layer
+ \ aws_opsworks_ganglia_layer
+ \ aws_opsworks_haproxy_layer
+ \ aws_opsworks_instance
+ \ aws_opsworks_java_app_layer
+ \ aws_opsworks_memcached_layer
+ \ aws_opsworks_mysql_layer
+ \ aws_opsworks_nodejs_app_layer
+ \ aws_opsworks_permission
+ \ aws_opsworks_php_app_layer
+ \ aws_opsworks_rails_app_layer
+ \ aws_opsworks_rds_db_instance
+ \ aws_opsworks_stack
+ \ aws_opsworks_static_web_layer
+ \ aws_opsworks_user_profile
+ \ aws_placement_group
+ \ aws_proxy_protocol_policy
+ \ aws_rds_cluster
+ \ aws_rds_cluster_instance
+ \ aws_rds_cluster_parameter_group
+ \ aws_redshift_cluster
+ \ aws_redshift_parameter_group
+ \ aws_redshift_security_group
+ \ aws_redshift_subnet_group
+ \ aws_route
+ \ aws_route53_delegation_set
+ \ aws_route53_health_check
+ \ aws_route53_record
+ \ aws_route53_zone
+ \ aws_route53_zone_association
+ \ aws_route_table
+ \ aws_route_table_association
+ \ aws_s3_bucket
+ \ aws_s3_bucket_notification
+ \ aws_s3_bucket_object
+ \ aws_s3_bucket_policy
+ \ aws_security_group
+ \ aws_security_group_rule
+ \ aws_ses_active_receipt_rule_set
+ \ aws_ses_configuration_set
+ \ aws_ses_domain_identity
+ \ aws_ses_event_destination
+ \ aws_ses_receipt_filter
+ \ aws_ses_receipt_rule
+ \ aws_ses_receipt_rule_set
+ \ aws_sfn_activity
+ \ aws_sfn_state_machine
+ \ aws_simpledb_domain
+ \ aws_snapshot_create_volume_permission
+ \ aws_sns_topic
+ \ aws_sns_topic_policy
+ \ aws_sns_topic_subscription
+ \ aws_spot_datafeed_subscription
+ \ aws_spot_fleet_request
+ \ aws_spot_instance_request
+ \ aws_sqs_queue
+ \ aws_sqs_queue_policy
+ \ aws_ssm_activation
+ \ aws_ssm_association
+ \ aws_ssm_document
+ \ aws_subnet
+ \ aws_volume_attachment
+ \ aws_vpc
+ \ aws_vpc_dhcp_options
+ \ aws_vpc_dhcp_options_association
+ \ aws_vpc_endpoint
+ \ aws_vpc_endpoint_route_table_association
+ \ aws_vpc_peering_connection
+ \ aws_vpc_peering_connection_accepter
+ \ aws_vpn_connection
+ \ aws_vpn_connection_route
+ \ aws_vpn_gateway
+ \ aws_vpn_gateway_attachment
+ \ aws_waf_byte_match_set
+ \ aws_waf_ipset
+ \ aws_waf_rule
+ \ aws_waf_size_constraint_set
+ \ aws_waf_sql_injection_match_set
+ \ aws_waf_web_acl
+ \ aws_waf_xss_match_set
+ \ azure_affinity_group
+ \ azure_data_disk
+ \ azure_dns_server
+ \ azure_hosted_service
+ \ azure_instance
+ \ azure_local_network_connection
+ \ azure_security_group
+ \ azure_security_group_rule
+ \ azure_sql_database_server
+ \ azure_sql_database_server_firewall_rule
+ \ azure_sql_database_service
+ \ azure_storage_blob
+ \ azure_storage_container
+ \ azure_storage_queue
+ \ azure_storage_service
+ \ azure_virtual_network
+ \ azurerm_availability_set
+ \ azurerm_cdn_endpoint
+ \ azurerm_cdn_profile
+ \ azurerm_container_registry
+ \ azurerm_container_service
+ \ azurerm_dns_a_record
+ \ azurerm_dns_aaaa_record
+ \ azurerm_dns_cname_record
+ \ azurerm_dns_mx_record
+ \ azurerm_dns_ns_record
+ \ azurerm_dns_srv_record
+ \ azurerm_dns_txt_record
+ \ azurerm_dns_zone
+ \ azurerm_eventhub
+ \ azurerm_eventhub_authorization_rule
+ \ azurerm_eventhub_consumer_group
+ \ azurerm_eventhub_namespace
+ \ azurerm_key_vault
+ \ azurerm_lb
+ \ azurerm_lb_backend_address_pool
+ \ azurerm_lb_nat_pool
+ \ azurerm_lb_nat_rule
+ \ azurerm_lb_probe
+ \ azurerm_lb_rule
+ \ azurerm_local_network_gateway
+ \ azurerm_managed_disk
+ \ azurerm_network_interface
+ \ azurerm_network_security_group
+ \ azurerm_network_security_rule
+ \ azurerm_public_ip
+ \ azurerm_redis_cache
+ \ azurerm_resource_group
+ \ azurerm_route
+ \ azurerm_route_table
+ \ azurerm_search_service
+ \ azurerm_servicebus_namespace
+ \ azurerm_servicebus_subscription
+ \ azurerm_servicebus_topic
+ \ azurerm_sql_database
+ \ azurerm_sql_firewall_rule
+ \ azurerm_sql_server
+ \ azurerm_storage_account
+ \ azurerm_storage_blob
+ \ azurerm_storage_container
+ \ azurerm_storage_queue
+ \ azurerm_storage_share
+ \ azurerm_storage_table
+ \ azurerm_subnet
+ \ azurerm_template_deployment
+ \ azurerm_traffic_manager_endpoint
+ \ azurerm_traffic_manager_profile
+ \ azurerm_virtual_machine
+ \ azurerm_virtual_machine_extension
+ \ azurerm_virtual_machine_scale_set
+ \ azurerm_virtual_network
+ \ azurerm_virtual_network_peering
+ \ bitbucket_default_reviewers
+ \ bitbucket_hook
+ \ bitbucket_repository
+ \ chef_acl
+ \ chef_client
+ \ chef_cookbook
+ \ chef_data_bag
+ \ chef_data_bag_item
+ \ chef_environment
+ \ chef_node
+ \ chef_role
+ \ circonus_check
+ \ circonus_contact_group
+ \ circonus_graph
+ \ circonus_metric
+ \ circonus_metric_cluster
+ \ circonus_rule_set
+ \ clc_group
+ \ clc_load_balancer
+ \ clc_load_balancer_pool
+ \ clc_public_ip
+ \ clc_server
+ \ cloudflare_record
+ \ cloudstack_affinity_group
+ \ cloudstack_disk
+ \ cloudstack_egress_firewall
+ \ cloudstack_firewall
+ \ cloudstack_instance
+ \ cloudstack_ipaddress
+ \ cloudstack_loadbalancer_rule
+ \ cloudstack_network
+ \ cloudstack_network_acl
+ \ cloudstack_network_acl_rule
+ \ cloudstack_nic
+ \ cloudstack_port_forward
+ \ cloudstack_private_gateway
+ \ cloudstack_secondary_ipaddress
+ \ cloudstack_security_group
+ \ cloudstack_security_group_rule
+ \ cloudstack_ssh_keypair
+ \ cloudstack_static_nat
+ \ cloudstack_static_route
+ \ cloudstack_template
+ \ cloudstack_vpc
+ \ cloudstack_vpn_connection
+ \ cloudstack_vpn_customer_gateway
+ \ cloudstack_vpn_gateway
+ \ cobbler_distro
+ \ cobbler_kickstart_file
+ \ cobbler_profile
+ \ cobbler_snippet
+ \ cobbler_system
+ \ consul_agent_service
+ \ consul_catalog_entry
+ \ consul_key_prefix
+ \ consul_keys
+ \ consul_node
+ \ consul_prepared_query
+ \ consul_service
+ \ datadog_downtime
+ \ datadog_monitor
+ \ datadog_timeboard
+ \ datadog_user
+ \ digitalocean_domain
+ \ digitalocean_droplet
+ \ digitalocean_floating_ip
+ \ digitalocean_loadbalancer
+ \ digitalocean_record
+ \ digitalocean_ssh_key
+ \ digitalocean_tag
+ \ digitalocean_volume
+ \ dme_record
+ \ dns_a_record_set
+ \ dns_aaaa_record_set
+ \ dns_cname_record
+ \ dns_ptr_record
+ \ dnsimple_record
+ \ docker_container
+ \ docker_image
+ \ docker_network
+ \ docker_volume
+ \ dyn_record
+ \ fastly_service_v1
+ \ github_issue_label
+ \ github_membership
+ \ github_organization_webhook
+ \ github_repository
+ \ github_repository_collaborator
+ \ github_repository_webhook
+ \ github_team
+ \ github_team_membership
+ \ github_team_repository
+ \ google_compute_address
+ \ google_compute_autoscaler
+ \ google_compute_backend_service
+ \ google_compute_disk
+ \ google_compute_firewall
+ \ google_compute_forwarding_rule
+ \ google_compute_global_address
+ \ google_compute_global_forwarding_rule
+ \ google_compute_health_check
+ \ google_compute_http_health_check
+ \ google_compute_https_health_check
+ \ google_compute_image
+ \ google_compute_instance
+ \ google_compute_instance_group
+ \ google_compute_instance_group_manager
+ \ google_compute_instance_template
+ \ google_compute_network
+ \ google_compute_project_metadata
+ \ google_compute_region_backend_service
+ \ google_compute_route
+ \ google_compute_ssl_certificate
+ \ google_compute_subnetwork
+ \ google_compute_target_http_proxy
+ \ google_compute_target_https_proxy
+ \ google_compute_target_pool
+ \ google_compute_url_map
+ \ google_compute_vpn_gateway
+ \ google_compute_vpn_tunnel
+ \ google_container_cluster
+ \ google_container_node_pool
+ \ google_dns_managed_zone
+ \ google_dns_record_set
+ \ google_project
+ \ google_project_iam_policy
+ \ google_project_services
+ \ google_pubsub_subscription
+ \ google_pubsub_topic
+ \ google_service_account
+ \ google_sql_database
+ \ google_sql_database_instance
+ \ google_sql_user
+ \ google_storage_bucket
+ \ google_storage_bucket_acl
+ \ google_storage_bucket_object
+ \ google_storage_object_acl
+ \ heroku_addon
+ \ heroku_app
+ \ heroku_cert
+ \ heroku_domain
+ \ heroku_drain
+ \ icinga2_checkcommand
+ \ icinga2_host
+ \ icinga2_hostgroup
+ \ icinga2_service
+ \ ignition_config
+ \ ignition_disk
+ \ ignition_file
+ \ ignition_filesystem
+ \ ignition_group
+ \ ignition_networkd_unit
+ \ ignition_raid
+ \ ignition_systemd_unit
+ \ ignition_user
+ \ influxdb_continuous_query
+ \ influxdb_database
+ \ influxdb_user
+ \ kubernetes_config_map
+ \ kubernetes_namespace
+ \ kubernetes_persistent_volume
+ \ kubernetes_persistent_volume_claim
+ \ kubernetes_secret
+ \ librato_alert
+ \ librato_service
+ \ librato_space
+ \ librato_space_chart
+ \ logentries_log
+ \ logentries_logset
+ \ mailgun_domain
+ \ mysql_database
+ \ mysql_grant
+ \ mysql_user
+ \ newrelic_alert_channel
+ \ newrelic_alert_condition
+ \ newrelic_alert_policy
+ \ newrelic_alert_policy_channel
+ \ nomad_job
+ \ null_resource
+ \ openstack_blockstorage_volume_attach_v2
+ \ openstack_blockstorage_volume_v1
+ \ openstack_blockstorage_volume_v2
+ \ openstack_compute_floatingip_associate_v2
+ \ openstack_compute_floatingip_v2
+ \ openstack_compute_instance_v2
+ \ openstack_compute_keypair_v2
+ \ openstack_compute_secgroup_v2
+ \ openstack_compute_servergroup_v2
+ \ openstack_compute_volume_attach_v2
+ \ openstack_fw_firewall_v1
+ \ openstack_fw_policy_v1
+ \ openstack_fw_rule_v1
+ \ openstack_images_image_v2
+ \ openstack_lb_listener_v2
+ \ openstack_lb_loadbalancer_v2
+ \ openstack_lb_member_v1
+ \ openstack_lb_member_v2
+ \ openstack_lb_monitor_v1
+ \ openstack_lb_monitor_v2
+ \ openstack_lb_pool_v1
+ \ openstack_lb_pool_v2
+ \ openstack_lb_vip_v1
+ \ openstack_networking_floatingip_v2
+ \ openstack_networking_network_v2
+ \ openstack_networking_port_v2
+ \ openstack_networking_router_interface_v2
+ \ openstack_networking_router_route_v2
+ \ openstack_networking_router_v2
+ \ openstack_networking_secgroup_rule_v2
+ \ openstack_networking_secgroup_v2
+ \ openstack_networking_subnet_v2
+ \ openstack_objectstorage_container_v1
+ \ opsgenie_team
+ \ opsgenie_user
+ \ packet_device
+ \ packet_project
+ \ packet_ssh_key
+ \ packet_volume
+ \ pagerduty_addon
+ \ pagerduty_escalation_policy
+ \ pagerduty_schedule
+ \ pagerduty_service
+ \ pagerduty_service_integration
+ \ pagerduty_team
+ \ pagerduty_user
+ \ postgresql_database
+ \ postgresql_extension
+ \ postgresql_role
+ \ postgresql_schema
+ \ powerdns_record
+ \ profitbricks_datacenter
+ \ profitbricks_firewall
+ \ profitbricks_ipblock
+ \ profitbricks_lan
+ \ profitbricks_loadbalancer
+ \ profitbricks_nic
+ \ profitbricks_server
+ \ profitbricks_volume
+ \ rabbitmq_binding
+ \ rabbitmq_exchange
+ \ rabbitmq_permissions
+ \ rabbitmq_policy
+ \ rabbitmq_queue
+ \ rabbitmq_user
+ \ rabbitmq_vhost
+ \ rancher_certificate
+ \ rancher_environment
+ \ rancher_host
+ \ rancher_registration_token
+ \ rancher_registry
+ \ rancher_registry_credential
+ \ rancher_stack
+ \ random_id
+ \ random_pet
+ \ random_shuffle
+ \ rundeck_job
+ \ rundeck_private_key
+ \ rundeck_project
+ \ rundeck_public_key
+ \ scaleway_ip
+ \ scaleway_security_group
+ \ scaleway_security_group_rule
+ \ scaleway_server
+ \ scaleway_volume
+ \ scaleway_volume_attachment
+ \ softlayer_ssh_key
+ \ softlayer_virtual_guest
+ \ spotinst_aws_group
+ \ spotinst_healthcheck
+ \ spotinst_subscription
+ \ statuscake_test
+ \ tls_cert_request
+ \ tls_locally_signed_cert
+ \ tls_private_key
+ \ tls_self_signed_cert
+ \ triton_fabric
+ \ triton_firewall_rule
+ \ triton_key
+ \ triton_machine
+ \ triton_vlan
+ \ ultradns_dirpool
+ \ ultradns_probe_http
+ \ ultradns_probe_ping
+ \ ultradns_record
+ \ ultradns_tcpool
+ \ vcd_dnat
+ \ vcd_firewall_rules
+ \ vcd_network
+ \ vcd_snat
+ \ vcd_vapp
+ \ vsphere_file
+ \ vsphere_folder
+ \ vsphere_virtual_disk
+ \ vsphere_virtual_machine
+""" end resources
+
+syn keyword terraTodo contained TODO FIXME XXX BUG
+syn cluster terraCommentGroup contains=terraTodo
+syn region terraComment start="/\*" end="\*/" contains=@terraCommentGroup,@Spell
+syn region terraComment start="#" end="$" contains=@terraCommentGroup,@Spell
+syn region terraComment start="//" end="$" contains=@terraCommentGroup,@Spell
+
+syn match terraResource /\/ nextgroup=terraResourceTypeStr skipwhite
+syn region terraResourceTypeStr start=/"/ end=/"/ contains=terraResourceTypeBI
+ \ nextgroup=terraResourceName skipwhite
+syn region terraResourceName start=/"/ end=/"/
+ \ nextgroup=terraResourceBlock skipwhite
+
+syn match terraData /\/ nextgroup=terraDataTypeStr skipwhite
+syn region terraDataTypeStr start=/"/ end=/"/ contains=terraDataTypeBI
+ \ nextgroup=terraDataName skipwhite
+syn region terraDataName start=/"/ end=/"/
+ \ nextgroup=terraDataBlock skipwhite
+
+""" provider
+syn match terraProvider /\/ nextgroup=terraProviderName skipwhite
+syn region terraProviderName start=/"/ end=/"/ nextgroup=terraProviderBlock skipwhite
+
+""" provisioner
+syn match terraProvisioner /\/ nextgroup=terraProvisionerName skipwhite
+syn region terraProvisionerName start=/"/ end=/"/ nextgroup=terraProvisionerBlock skipwhite
+
+""" module
+syn match terraModule /\/ nextgroup=terraModuleName skipwhite
+syn region terraModuleName start=/"/ end=/"/ nextgroup=terraModuleBlock skipwhite
+
+""" misc.
+syn match terraValueDec "\<[0-9]\+\([kKmMgG]b\?\)\?\>"
+syn match terraValueHexaDec "\<0x[0-9a-f]\+\([kKmMgG]b\?\)\?\>"
+syn match terraBraces "[{}\[\]]"
+
+""" skip \" in strings.
+""" we may also want to pass \\" into a function to escape quotes.
+syn region terraValueString start=/"/ skip=/\\\+"/ end=/"/ contains=terraStringInterp
+syn region terraStringInterp matchgroup=terraBrackets start=/\${/ end=/}/ contains=terraValueFunction contained
+"" TODO match keywords here, not a-z+
+syn region terraValueFunction matchgroup=terraBrackets start=/[0-9a-z]\+(/ end=/)/ contains=terraValueString,terraValueFunction contained
+
+hi def link terraComment Comment
+hi def link terraTodo Todo
+hi def link terraBrackets Operator
+hi def link terraProvider Structure
+hi def link terraBraces Delimiter
+hi def link terraProviderName String
+hi def link terraResource Structure
+hi def link terraResourceName String
+hi def link terraResourceTypeBI Tag
+hi def link terraResourceTypeStr String
+hi def link terraData Structure
+hi def link terraDataName String
+hi def link terraDataTypeBI Tag
+hi def link terraDataTypeStr String
+hi def link terraSection Structure
+hi def link terraStringInterp Identifier
+hi def link terraValueBool Boolean
+hi def link terraValueDec Number
+hi def link terraValueHexaDec Number
+hi def link terraValueString String
+hi def link terraProvisioner Structure
+hi def link terraProvisionerName String
+hi def link terraModule Structure
+hi def link terraModuleName String
+hi def link terraValueFunction Identifier
+
+let b:current_syntax = "terraform"
diff --git a/.vim/bundle/vim-terraform/update_automagic.sh b/.vim/bundle/vim-terraform/update_automagic.sh
new file mode 100755
index 0000000..23c1338
--- /dev/null
+++ b/.vim/bundle/vim-terraform/update_automagic.sh
@@ -0,0 +1,49 @@
+#!/bin/bash
+VERSION=$1
+
+function usage {
+ echo -e "
+ USAGE EXAMPLES:
+
+ ./$(basename $0) 0.8.7
+ ./$(basename $0) 0.9.2
+ "
+}
+
+if [ $# -ne 1 ]; then
+ usage
+ exit 1
+fi
+
+EXISTING_TF_VERSION=$(terraform version | head -n1 | sed -e 's/Terraform//gI' -e 's/v//gI' -e 's/[[:space:]]//g')
+
+if [ "${EXISTING_TF_VERSION}" != "${VERSION}" ]; then
+ echo "-) You are trying to update this script for terraform ${VERSION} while you have"
+ echo " terraform ${EXISTING_TF_VERSION} installed at $(which terraform)."
+ echo " Please update your local terraform before using this script."
+ exit 1
+fi
+
+echo "+) Acquiring terraform-${VERSION}"
+wget https://github.com/hashicorp/terraform/archive/v${VERSION}.tar.gz
+
+echo "+) Extracting terraform-${VERSION}.tar.gz"
+tar zxf v${VERSION}.tar.gz
+
+echo "+) Running update_commands.rb"
+./update_commands.rb
+
+echo "+) Running update_data_sources.rb"
+./update_data_sources.rb terraform-${VERSION}/
+
+echo "+) Running update_syntax.rb"
+./update_syntax.rb terraform-${VERSION}/
+
+echo "+) Updating the badge in the README.md"
+sed -i "/img.shields.io/c\[\](https://github.com/hashicorp/terraform/blob/v${VERSION}/CHANGELOG.md)" README.md
+
+echo "+) Cleaning up after ourselves"
+rm -f v${VERSION}.tar.gz
+rm -rf terraform-${VERSION}
+
+git status
diff --git a/.vim/bundle/vim-terraform/update_commands.rb b/.vim/bundle/vim-terraform/update_commands.rb
new file mode 100755
index 0000000..7116fd1
--- /dev/null
+++ b/.vim/bundle/vim-terraform/update_commands.rb
@@ -0,0 +1,36 @@
+#!/usr/bin/env ruby
+
+# Use this script to update the commands auto-completed in plugin/terraform.vim.
+
+require 'open3'
+
+command_re = /^\s\s\s\s(\S+)/
+plugin_file = 'plugin/terraform.vim'
+
+# Create the list of commands.
+stdout, stderr, _status = Open3.capture3('terraform list-commands')
+output = if stderr == ''
+ stdout.split("\n")
+ else
+ stderr.split("\n")
+ end
+commands = output.collect do |l|
+ match = command_re.match(l)
+ " \\ \"#{match[1]}\"" if match
+end.reject(&:nil?).join(",\n")
+
+# Read in the existing plugin file.
+plugin = File.open(plugin_file, 'r').readlines
+
+# Replace the terraResourceTypeBI lines with our new list.
+first = plugin.index { |l| /^ return join\(\[/.match(l) } + 1
+last = plugin.index { |l| /^ \\ \], "\\n"\)/.match(l) }
+plugin.slice!(first, last - first)
+commands.split("\n").reverse_each do |r|
+ plugin.insert(first, r)
+end
+
+# Write the plugin file back out.
+File.open(plugin_file, 'w') do |f|
+ f.puts plugin
+end
diff --git a/.vim/bundle/vim-terraform/update_data_sources.rb b/.vim/bundle/vim-terraform/update_data_sources.rb
new file mode 100755
index 0000000..8d0ea8d
--- /dev/null
+++ b/.vim/bundle/vim-terraform/update_data_sources.rb
@@ -0,0 +1,36 @@
+#!/usr/bin/env ruby
+
+# Use this script to update the resources recognized in syntax/terraform.vim.
+# You'll need a current checkout of the Terraform source.
+
+resource_declaration = /"(.*)":.*dataSource.*\(\),$/
+syntax_file = 'syntax/terraform.vim'
+
+# Specify the location of the Terraform source as the only argument to this
+# script.
+raise 'Please specify the location of the Terraform source.' if ARGV.empty?
+
+# Create the list of resources.
+provider_files = Dir.glob("#{ARGV[0]}/builtin/providers/*/*provider.go")
+resources = provider_files.collect do |f|
+ File.open(f, 'r').readlines.collect do |l|
+ match = resource_declaration.match(l)
+ " \\ #{match[1]}\n" if match
+ end.reject(&:nil?)
+end.flatten.sort.uniq
+
+# Read in the existing syntax file.
+syntax = File.open(syntax_file, 'r').readlines
+
+# Replace the terraResourceTypeBI lines with our new list.
+first = syntax.index { |l| /^syn keyword terraDataTypeBI/.match(l) } + 1
+last = syntax.index { |l| /^""" end data sources/.match(l) }
+syntax.slice!(first, last - first)
+resources.reverse_each do |r|
+ syntax.insert(first, r)
+end
+
+# Write the syntax file back out.
+File.open(syntax_file, 'w') do |f|
+ f.puts syntax
+end
diff --git a/.vim/bundle/vim-terraform/update_syntax.rb b/.vim/bundle/vim-terraform/update_syntax.rb
new file mode 100755
index 0000000..36ea411
--- /dev/null
+++ b/.vim/bundle/vim-terraform/update_syntax.rb
@@ -0,0 +1,36 @@
+#!/usr/bin/env ruby
+
+# Use this script to update the resources recognized in syntax/terraform.vim.
+# You'll need a current checkout of the Terraform source.
+
+resource_declaration = /"(.*)":.*resource.*\(\),$/
+syntax_file = 'syntax/terraform.vim'
+
+# Specify the location of the Terraform source as the only argument to this
+# script.
+raise 'Please specify the location of the Terraform source.' if ARGV.empty?
+
+# Create the list of resources.
+provider_files = Dir.glob("#{ARGV[0]}/builtin/providers/*/*provider.go")
+resources = provider_files.collect do |f|
+ File.open(f, 'r').readlines.collect do |l|
+ match = resource_declaration.match(l)
+ " \\ #{match[1]}\n" if match
+ end.reject(&:nil?)
+end.flatten.sort
+
+# Read in the existing syntax file.
+syntax = File.open(syntax_file, 'r').readlines
+
+# Replace the terraResourceTypeBI lines with our new list.
+first = syntax.index { |l| /^syn keyword terraResourceTypeBI/.match(l) } + 1
+last = syntax.index { |l| /^""" end resources/.match(l) }
+syntax.slice!(first, last - first)
+resources.reverse_each do |r|
+ syntax.insert(first, r)
+end
+
+# Write the syntax file back out.
+File.open(syntax_file, 'w') do |f|
+ f.puts syntax
+end
diff --git a/.vimrc b/.vimrc
index 9b25809..fb11ca1 100644
--- a/.vimrc
+++ b/.vimrc
@@ -274,3 +274,10 @@ let g:typescript_compiler_binary = 'tsc'
let g:typescript_compiler_options = ''
au FileType typescript :set makeprg=tsc
+
+" ======================
+" terraform
+" ======================
+let g:terraform_align=1
+
+au FileType terraform setlocal commentstring=#%s