From d7b57edc447dc2b9463920875f22bb90da5dd91e Mon Sep 17 00:00:00 2001 From: Vadim Hleif Date: Thu, 5 Jul 2018 15:46:32 +0300 Subject: [PATCH] Migrate to README.yaml format, add travis (#13) --- .gitignore | 3 + .travis.yml | 16 ++++ Makefile | 10 ++ README.md | 228 ++++++++++++++++++++++++++++++++++++++-------- README.yaml | 81 ++++++++++++++++ docs/targets.md | 9 ++ docs/terraform.md | 39 ++++++++ output.tf | 12 ++- variables.tf | 83 +++++++++++------ 9 files changed, 409 insertions(+), 72 deletions(-) create mode 100644 .travis.yml create mode 100644 Makefile create mode 100644 README.yaml create mode 100644 docs/targets.md create mode 100644 docs/terraform.md diff --git a/.gitignore b/.gitignore index a0dd221..8a1a883 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ .terraform .idea *.iml + +**/.build-harness +**/build-harness \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..0bca29a --- /dev/null +++ b/.travis.yml @@ -0,0 +1,16 @@ +addons: + apt: + packages: + - git + - make + - curl + +install: + - make init + +script: + - make terraform:install + - make terraform:get-plugins + - make terraform:get-modules + - make terraform:lint + - make terraform:validate diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..655f630 --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +SHELL := /bin/bash + +# List of targets the `readme` target should call before generating the readme +export README_DEPS ?= docs/targets.md docs/terraform.md + +-include $(shell curl -sSL -o .build-harness "https://git.io/build-harness"; echo .build-harness) + +## Lint terraform code +lint: + $(SELF) terraform/install terraform/get-modules terraform/get-plugins terraform/lint terraform/validate \ No newline at end of file diff --git a/README.md b/README.md index c4ba838..3308406 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,23 @@ -# terraform-aws-elasticache-redis + + +[![Cloud Posse](https://cloudposse.com/logo-300x69.png)](https://cloudposse.com) + +# terraform-aws-elasticache-redis [![Build Status](https://travis-ci.org/cloudposse/terraform-aws-elasticache-redis.svg?branch=master)](https://travis-ci.org/cloudposse/terraform-aws-elasticache-redis) [![Latest Release](https://img.shields.io/github/release/cloudposse/terraform-aws-elasticache-redis.svg)](https://travis-ci.org/cloudposse/terraform-aws-elasticache-redis/releases) [![Slack Community](https://slack.cloudposse.com/badge.svg)](https://slack.cloudposse.com) + Terraform module to provision an [`ElastiCache`](https://aws.amazon.com/elasticache/) Redis Cluster +--- + +This project is part of our comprehensive ["SweetOps"](https://docs.cloudposse.com) approach towards DevOps. + + +It's 100% Open Source and licensed under the [APACHE2](LICENSE). + + + + ## Usage Include this repository as a module in your existing terraform code: @@ -32,46 +47,179 @@ module "example_redis" { ``` -## Input - -| Name | Default | Description | -|:-----------------------------|:-------------------:|:----------------------------------------------------------------| -| enabled | true | Set to false to prevent the module from creating any resources | -| namespace | global | Namespace | -| stage | default | Stage | -| name | redis | Name | -| security_groups | [] | AWS security group ids | -| vpc_id | __REQUIRED__ | AWS VPC id | -| subnets | [] | AWS subnet ids | -| cluster_size | 1 | Count of nodes in cluster | -| instance_type | cache.t2.micro | Elastic cache instance type | -| family | redis3.2 | Redis family | -| engine_version | 3.2.4 | Redis engine version | -| port | 6379 | Redis port | -| maintenance_window | wed:03:00-wed:04:00 | Maintenance window | -| notification_topic_arn | | Notification topic arn | -| alarm_cpu_threshold_percent | 75 | CPU threshold alarm level | -| alarm_memory_threshold_bytes | 10000000 | Ram threshold alarm level | -| alarm_actions | [] | Alarm action list | -| apply_immediately | true | Apply changes immediately | -| automatic_failover | false | Automatic failover (Not available for T1/T2 instances) | -| availability_zones | [] | Availability zone ids | -| zone_id | false | Route53 DNS Zone id | -| attributes | [] | Additional attributes (_e.g._ "1") | -| tags | {} | Additional tags (_e.g._ map("BusinessUnit","ABC") | -| delimiter | - | Delimiter between `name`, `namespace`, `stage` and `attributes` | - - -## Output - -| Name | Description | -|:------------------|:------------------| -| id | Redis cluster id | + + + + +## Makefile Targets +``` +Available targets: + + help This help screen + help/all Display help for all targets + lint Lint terraform code + +``` + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|:----:|:-----:|:-----:| +| alarm_actions | Alarm action list | list | `` | no | +| alarm_cpu_threshold_percent | CPU threshold alarm level | string | `75` | no | +| alarm_memory_threshold_bytes | Ram threshold alarm level | string | `10000000` | no | +| apply_immediately | Apply changes immediately | string | `true` | no | +| attributes | Additional attributes (_e.g._ "1") | list | `` | no | +| automatic_failover | Automatic failover (Not available for T1/T2 instances) | string | `false` | no | +| availability_zones | Availability zone ids | list | `Availability zone ids` | no | +| cluster_size | Count of nodes in cluster | string | `1` | no | +| delimiter | Delimiter between `name`, `namespace`, `stage` and `attributes` | string | `-` | no | +| enabled | Set to false to prevent the module from creating any resources | string | `true` | no | +| engine_version | Redis engine version | string | `4.0.10` | no | +| family | Redis family | string | `redis4.0` | no | +| instance_type | Elastic cache instance type | string | `cache.t2.micro` | no | +| maintenance_window | Maintenance window | string | `wed:03:00-wed:04:00` | no | +| name | Name | string | `redis` | no | +| namespace | Namespace | string | `global` | no | +| notification_topic_arn | Notification topic arn | string | `10000000` | no | +| port | Redis port | string | `6379` | no | +| security_groups | AWS security group ids | list | `` | no | +| stage | Stage | string | `default` | no | +| subnets | AWS subnet ids | list | `` | no | +| tags | Additional tags (_e.g._ map("BusinessUnit","ABC") | map | `` | no | +| vpc_id | AWS VPC id | string | `REQUIRED` | no | +| zone_id | Route53 DNS Zone id | string | `false` | no | + +## Outputs + +| Name | Description | +|------|-------------| +| host | Redis host | +| id | Redis cluster id | +| port | Redis port | | security_group_id | Security group id | -| host | Redis host | -| port | Redis port | -## License -Apache 2 License. See [`LICENSE`](LICENSE) for full details. +## Help + +**Got a question?** + +File a GitHub [issue](https://github.com/cloudposse/terraform-aws-elasticache-redis/issues), send us an [email][email] or join our [Slack Community][slack]. + +## Commerical Support + +Work directly with our team of DevOps experts via email, slack, and video conferencing. + +We provide *commercial support* for all of our [Open Source][github] projects. As a *Dedicated Support* customer, you have access to our team of subject matter experts at a fraction of the cost of a fulltime engineer. + +[![E-Mail](https://img.shields.io/badge/email-hello@cloudposse.com-blue.svg)](mailto:hello@cloudposse.com) + +- **Questions.** We'll use a Shared Slack channel between your team and ours. +- **Troubleshooting.** We'll help you triage why things aren't working. +- **Code Reviews.** We'll review your Pull Requests and provide constructive feedback. +- **Bug Fixes.** We'll rapidly work to fix any bugs in our projects. +- **Build New Terraform Modules.** We'll develop original modules to provision infrastructure. +- **Cloud Architecture.** We'll assist with your cloud strategy and design. +- **Implementation.** We'll provide hands on support to implement our reference architectures. + + +## Community Forum + +Get access to our [Open Source Community Forum][slack] on Slack. It's **FREE** to join for everyone! Our "SweetOps" community is where you get to talk with others who share a similar vision for how to rollout and manage infrastructure. This is the best place to talk shop, ask questions, solicit feedback, and work together as a community to build *sweet* infrastructure. + +## Contributing + +### Bug Reports & Feature Requests + +Please use the [issue tracker](https://github.com/cloudposse/terraform-aws-elasticache-redis/issues) to report any bugs or file feature requests. + +### Developing + +If you are interested in being a contributor and want to get involved in developing this project or [help out](https://github.com/orgs/cloudposse/projects/3) with our other projects, we would love to hear from you! Shoot us an [email](mailto:hello@cloudposse.com). + +In general, PRs are welcome. We follow the typical "fork-and-pull" Git workflow. + + 1. **Fork** the repo on GitHub + 2. **Clone** the project to your own machine + 3. **Commit** changes to your own branch + 4. **Push** your work back up to your fork + 5. Submit a **Pull Request** so that we can review your changes + +**NOTE:** Be sure to merge the latest changes from "upstream" before making a pull request! + +## Copyright + +Copyright © 2017-2018 [Cloud Posse, LLC](https://cloudposse.com) + + +## License + +[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) + +See [LICENSE](LICENSE) for full details. + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. + + +## Trademarks + +All other trademarks referenced herein are the property of their respective owners. + +## About + +This project is maintained and funded by [Cloud Posse, LLC][website]. Like it? Please let us know at + +[![Cloud Posse](https://cloudposse.com/logo-300x69.png)](https://cloudposse.com) + +We're a [DevOps Professional Services][hire] company based in Los Angeles, CA. We love [Open Source Software](https://github.com/cloudposse/)! + +We offer paid support on all of our projects. + +Check out [our other projects][github], [apply for a job][jobs], or [hire us][hire] to help with your cloud strategy and implementation. + + [docs]: https://docs.cloudposse.com/ + [website]: https://cloudposse.com/ + [github]: https://github.com/cloudposse/ + [jobs]: https://cloudposse.com/jobs/ + [hire]: https://cloudposse.com/contact/ + [slack]: https://slack.cloudposse.com/ + [linkedin]: https://www.linkedin.com/company/cloudposse + [twitter]: https://twitter.com/cloudposse/ + [email]: mailto:hello@cloudposse.com + + +### Contributors + +| [![Erik Osterman][osterman_avatar]](osterman_homepage)
[Erik Osterman][osterman_homepage] | [![Igor Rodionov][goruha_avatar]](goruha_homepage)
[Igor Rodionov][goruha_homepage] | [![Andriy Knysh][aknysh_avatar]](aknysh_homepage)
[Andriy Knysh][aknysh_homepage] | [![Daren Desjardins][darend_avatar]](darend_homepage)
[Daren Desjardins][darend_homepage] | [![Max Moon][MoonMoon1919_avatar]](MoonMoon1919_homepage)
[Max Moon][MoonMoon1919_homepage] | [![Christopher Riley][christopherriley_avatar]](christopherriley_homepage)
[Christopher Riley][christopherriley_homepage] | +|---|---|---|---|---|---| + + [osterman_homepage]: https://github.com/osterman + [osterman_avatar]: https://github.com/osterman.png?size=150 + [goruha_homepage]: https://github.com/goruha + [goruha_avatar]: https://github.com/goruha.png?size=150 + [aknysh_homepage]: https://github.com/aknysh + [aknysh_avatar]: https://github.com/aknysh.png?size=150 + [darend_homepage]: https://github.com/darend + [darend_avatar]: https://github.com/darend.png?size=150 + [MoonMoon1919_homepage]: https://github.com/MoonMoon1919 + [MoonMoon1919_avatar]: https://github.com/MoonMoon1919.png?size=150 + [christopherriley_homepage]: https://github.com/christopherriley + [christopherriley_avatar]: https://github.com/christopherriley.png?size=150 + + diff --git a/README.yaml b/README.yaml new file mode 100644 index 0000000..0e36f9e --- /dev/null +++ b/README.yaml @@ -0,0 +1,81 @@ +--- +# +# This is the canonical configuration for the `README.md` +# Run `make readme` to rebuild the `README.md` +# + +# Name of this project +name: terraform-aws-elasticache-redis + +# Logo for this project +#logo: docs/logo.png + +# License of this project +license: "APACHE2" + +# Canonical GitHub repo +github_repo: cloudposse/terraform-aws-elasticache-redis + +# Badges to display +badges: + - name: "Build Status" + image: "https://travis-ci.org/cloudposse/terraform-aws-elasticache-redis.svg?branch=master" + url: "https://travis-ci.org/cloudposse/terraform-aws-elasticache-redis" + - name: "Latest Release" + image: "https://img.shields.io/github/release/cloudposse/terraform-aws-elasticache-redis.svg" + url: "https://travis-ci.org/cloudposse/terraform-aws-elasticache-redis/releases" + - name: "Slack Community" + image: "https://slack.cloudposse.com/badge.svg" + url: "https://slack.cloudposse.com" + +# Short description of this project +description: |- + Terraform module to provision an [`ElastiCache`](https://aws.amazon.com/elasticache/) Redis Cluster + +# How to use this project +usage: |- + Include this repository as a module in your existing terraform code: + + ```hcl + module "example_redis" { + source = "git::https://github.com/cloudposse/terraform-aws-elasticache-redis.git?ref=master" + namespace = "general" + name = "redis" + stage = "prod" + zone_id = "${var.route53_zone_id}" + security_groups = ["${var.security_group_id}"] + + vpc_id = "${var.vpc_id}" + subnets = "${var.private_subnets}" + maintenance_window = "wed:03:00-wed:04:00" + cluster_size = "2" + instance_type = "cache.t2.micro" + engine_version = "3.2.4" + alarm_cpu_threshold_percent = "${var.cache_alarm_cpu_threshold_percent}" + alarm_memory_threshold_bytes = "${var.cache_alarm_memory_threshold_bytes}" + apply_immediately = "true" + availability_zones = "${var.availability_zones}" + + automatic_failover = "false" + } + ``` + + +include: + - "docs/targets.md" + - "docs/terraform.md" + +# Contributors to this project +contributors: + - name: "Erik Osterman" + github: "osterman" + - name: "Igor Rodionov" + github: "goruha" + - name: "Andriy Knysh" + github: "aknysh" + - name: "Daren Desjardins" + github: "darend" + - name: "Max Moon" + github: "MoonMoon1919" + - name: "Christopher Riley" + github: "christopherriley" \ No newline at end of file diff --git a/docs/targets.md b/docs/targets.md new file mode 100644 index 0000000..09c39cd --- /dev/null +++ b/docs/targets.md @@ -0,0 +1,9 @@ +## Makefile Targets +``` +Available targets: + + help This help screen + help/all Display help for all targets + lint Lint terraform code + +``` diff --git a/docs/terraform.md b/docs/terraform.md new file mode 100644 index 0000000..8acdc0c --- /dev/null +++ b/docs/terraform.md @@ -0,0 +1,39 @@ + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|:----:|:-----:|:-----:| +| alarm_actions | Alarm action list | list | `` | no | +| alarm_cpu_threshold_percent | CPU threshold alarm level | string | `75` | no | +| alarm_memory_threshold_bytes | Ram threshold alarm level | string | `10000000` | no | +| apply_immediately | Apply changes immediately | string | `true` | no | +| attributes | Additional attributes (_e.g._ "1") | list | `` | no | +| automatic_failover | Automatic failover (Not available for T1/T2 instances) | string | `false` | no | +| availability_zones | Availability zone ids | list | `Availability zone ids` | no | +| cluster_size | Count of nodes in cluster | string | `1` | no | +| delimiter | Delimiter between `name`, `namespace`, `stage` and `attributes` | string | `-` | no | +| enabled | Set to false to prevent the module from creating any resources | string | `true` | no | +| engine_version | Redis engine version | string | `4.0.10` | no | +| family | Redis family | string | `redis4.0` | no | +| instance_type | Elastic cache instance type | string | `cache.t2.micro` | no | +| maintenance_window | Maintenance window | string | `wed:03:00-wed:04:00` | no | +| name | Name | string | `redis` | no | +| namespace | Namespace | string | `global` | no | +| notification_topic_arn | Notification topic arn | string | `10000000` | no | +| port | Redis port | string | `6379` | no | +| security_groups | AWS security group ids | list | `` | no | +| stage | Stage | string | `default` | no | +| subnets | AWS subnet ids | list | `` | no | +| tags | Additional tags (_e.g._ map("BusinessUnit","ABC") | map | `` | no | +| vpc_id | AWS VPC id | string | `REQUIRED` | no | +| zone_id | Route53 DNS Zone id | string | `false` | no | + +## Outputs + +| Name | Description | +|------|-------------| +| host | Redis host | +| id | Redis cluster id | +| port | Redis port | +| security_group_id | Security group id | + diff --git a/output.tf b/output.tf index 5c2ec68..e291f99 100644 --- a/output.tf +++ b/output.tf @@ -1,15 +1,19 @@ output "id" { - value = "${join("", aws_elasticache_replication_group.default.*.id)}" + value = "${join("", aws_elasticache_replication_group.default.*.id)}" + description = "Redis cluster id" } output "security_group_id" { - value = "${join("", aws_security_group.default.*.id)}" + value = "${join("", aws_security_group.default.*.id)}" + description = "Security group id" } output "port" { - value = "${var.port}" + value = "${var.port}" + description = "Redis port" } output "host" { - value = "${module.dns.hostname}" + value = "${module.dns.hostname}" + description = "Redis host" } diff --git a/variables.tf b/variables.tf index b695bff..fdcbc90 100644 --- a/variables.tf +++ b/variables.tf @@ -1,5 +1,6 @@ variable "namespace" { - default = "global" + default = "global" + description = "Namespace" } variable "enabled" { @@ -8,93 +9,119 @@ variable "enabled" { } variable "stage" { - default = "default" + default = "default" + description = "Stage" } variable "name" { - default = "redis" + default = "redis" + description = "Name" } variable "security_groups" { - type = "list" + type = "list" + default = [] + description = "AWS security group ids" } variable "vpc_id" { - default = "" + default = "REQUIRED" + description = "AWS VPC id" } variable "subnets" { - type = "list" - default = [] + type = "list" + description = "AWS subnet ids" + default = [] } variable "maintenance_window" { - default = "wed:03:00-wed:04:00" + default = "wed:03:00-wed:04:00" + description = "Maintenance window" } variable "cluster_size" { - default = "1" + default = "1" + description = "Count of nodes in cluster" } variable "port" { - default = "6379" + default = "6379" + description = "Redis port" } variable "instance_type" { - default = "cache.t2.micro" + default = "cache.t2.micro" + description = "Elastic cache instance type" } variable "family" { - default = "redis4.0" + default = "redis4.0" + description = "Redis family " } variable "engine_version" { - default = "4.0.10" + default = "4.0.10" + description = "Redis engine version" } variable "notification_topic_arn" { - default = "" + default = "10000000" + description = "Notification topic arn" } variable "alarm_cpu_threshold_percent" { - default = "75" + default = "75" + description = "CPU threshold alarm level" } variable "alarm_memory_threshold_bytes" { # 10MB - default = "10000000" + default = "10000000" + description = "Ram threshold alarm level" } variable "alarm_actions" { - type = "list" - default = [] + type = "list" + description = "Alarm action list" + default = [] } variable "apply_immediately" { - default = "true" + default = "true" + description = "Apply changes immediately" } variable "automatic_failover" { - default = "false" + default = "false" + description = "Automatic failover (Not available for T1/T2 instances)" } variable "availability_zones" { - type = "list" + type = "list" + description = "Availability zone ids" + default = "Availability zone ids" } -variable "zone_id" {} +variable "zone_id" { + default = "false" + description = "Route53 DNS Zone id" +} variable "delimiter" { - type = "string" - default = "-" + type = "string" + default = "-" + description = "Delimiter between `name`, `namespace`, `stage` and `attributes`" } variable "attributes" { - type = "list" - default = [] + type = "list" + description = "Additional attributes (_e.g._ \"1\")" + default = [] } variable "tags" { - type = "map" - default = {} + type = "map" + description = "Additional tags (_e.g._ map(\"BusinessUnit\",\"ABC\")" + default = {} }