Skip to content
This repository has been archived by the owner on Aug 25, 2023. It is now read-only.

Commit

Permalink
Refactor ESM deployment as a separate module (#14)
Browse files Browse the repository at this point in the history
* Refactor ESM deployment as a separate module

* Minor formatting fixes

* Bump
  • Loading branch information
lawliet89 authored Oct 4, 2021
1 parent 0d2ffb1 commit 889bab2
Show file tree
Hide file tree
Showing 10 changed files with 481 additions and 79 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# CHANGELOG

## 0.7.0

### Breaking Changes

- Minimum supported Terraform version is now 0.15
- Refactor ESM deployment to be a separate sub-module
34 changes: 18 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ You can do so by running `kubectl get configmap/coredns -n kube-system -o yaml`.

| Name | Version |
|------|---------|
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.14 |
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.15 |
| <a name="requirement_helm"></a> [helm](#requirement\_helm) | >= 2.0 |

## Providers
Expand All @@ -106,14 +106,15 @@ You can do so by running `kubectl get configmap/coredns -n kube-system -o yaml`.

## Modules

No modules.
| Name | Source | Version |
|------|--------|---------|
| <a name="module_esm"></a> [esm](#module\_esm) | ./modules/esm | |

## Resources

| Name | Type |
|------|------|
| [helm_release.consul](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
| [helm_release.consul_esm](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
| [helm_release.consul_exporter](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
| [kubernetes_config_map.consul_core_dns](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/config_map) | resource |
| [kubernetes_config_map.consul_kube_dns](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/config_map) | resource |
Expand Down Expand Up @@ -202,32 +203,33 @@ No modules.
| <a name="input_enable_sync_catalog"></a> [enable\_sync\_catalog](#input\_enable\_sync\_catalog) | Enable Service catalog sync: https://www.consul.io/docs/platform/k8s/service-sync.html | `bool` | `true` | no |
| <a name="input_enable_ui"></a> [enable\_ui](#input\_enable\_ui) | Enable Consul UI | `bool` | `false` | no |
| <a name="input_envoy_extra_args"></a> [envoy\_extra\_args](#input\_envoy\_extra\_args) | Pass arguments to the injected envoy sidecar. Valid arguments to pass to envoy can be found here: https://www.envoyproxy.io/docs/envoy/latest/operations/cli | `any` | `null` | no |
| <a name="input_esm_affinity"></a> [esm\_affinity](#input\_esm\_affinity) | Affinity for ESM | `map` | `{}` | no |
| <a name="input_esm_affinity"></a> [esm\_affinity](#input\_esm\_affinity) | Affinity for ESM | `any` | `{}` | no |
| <a name="input_esm_chart_name"></a> [esm\_chart\_name](#input\_esm\_chart\_name) | Name of the ESM Chart name | `string` | `"consul-esm"` | no |
| <a name="input_esm_chart_repository"></a> [esm\_chart\_repository](#input\_esm\_chart\_repository) | ESM Chart repository | `string` | `"https://basisai.github.io/charts/"` | no |
| <a name="input_esm_chart_version"></a> [esm\_chart\_version](#input\_esm\_chart\_version) | ESM Chart version | `string` | `"0.3.0"` | no |
| <a name="input_esm_container_security_context"></a> [esm\_container\_security\_context](#input\_esm\_container\_security\_context) | securityContext for ESM containers | `map` | `{}` | no |
| <a name="input_esm_env"></a> [esm\_env](#input\_esm\_env) | Environment variables for Consul ESM | `list` | `[]` | no |
| <a name="input_esm_external_node_meta"></a> [esm\_external\_node\_meta](#input\_esm\_external\_node\_meta) | The node metadata values used for the ESM to qualify a node in the catalog as an "external node". | `map` | <pre>{<br> "external-node": "true"<br>}</pre> | no |
| <a name="input_esm_chart_version"></a> [esm\_chart\_version](#input\_esm\_chart\_version) | ESM Chart version | `string` | `"0.3.1"` | no |
| <a name="input_esm_container_security_context"></a> [esm\_container\_security\_context](#input\_esm\_container\_security\_context) | securityContext for ESM containers | `any` | `{}` | no |
| <a name="input_esm_env"></a> [esm\_env](#input\_esm\_env) | Environment variables for Consul ESM | `any` | `[]` | no |
| <a name="input_esm_external_node_meta"></a> [esm\_external\_node\_meta](#input\_esm\_external\_node\_meta) | The node metadata values used for the ESM to qualify a node in the catalog as an "external node". | `map(string)` | <pre>{<br> "external-node": "true"<br>}</pre> | no |
| <a name="input_esm_http_addr"></a> [esm\_http\_addr](#input\_esm\_http\_addr) | HTTP address of the local Consul agent | `string` | `""` | no |
| <a name="input_esm_image"></a> [esm\_image](#input\_esm\_image) | Docker image for ESM | `string` | `"basisai/consul-esm"` | no |
| <a name="input_esm_image"></a> [esm\_image](#input\_esm\_image) | Docker image for ESM | `string` | `"hashicorp/consul-esm"` | no |
| <a name="input_esm_init_container_set_sysctl"></a> [esm\_init\_container\_set\_sysctl](#input\_esm\_init\_container\_set\_sysctl) | Enable setting sysctl settings via a privileged container to allow pings | `bool` | `false` | no |
| <a name="input_esm_kv_path"></a> [esm\_kv\_path](#input\_esm\_kv\_path) | The directory in the Consul KV store to use for storing ESM runtime data. | `string` | `"consul-esm/"` | no |
| <a name="input_esm_log_level"></a> [esm\_log\_level](#input\_esm\_log\_level) | Log level for ESM | `string` | `"INFO"` | no |
| <a name="input_esm_node_agent_port"></a> [esm\_node\_agent\_port](#input\_esm\_node\_agent\_port) | Override port for Consul agent Daemonset | `any` | `null` | no |
| <a name="input_esm_node_agent_port"></a> [esm\_node\_agent\_port](#input\_esm\_node\_agent\_port) | Override port for Consul agent Daemonset | `number` | `null` | no |
| <a name="input_esm_node_probe_interval"></a> [esm\_node\_probe\_interval](#input\_esm\_node\_probe\_interval) | The interval to ping and update coordinates for external nodes that have 'external-probe' set to true. By default, ESM will attempt to ping and update the coordinates for all nodes it is watching every 10 seconds. | `string` | `"10s"` | no |
| <a name="input_esm_node_reconnect_timeout"></a> [esm\_node\_reconnect\_timeout](#input\_esm\_node\_reconnect\_timeout) | The length of time to wait before reaping an external node due to failed pings. | `string` | `"72h"` | no |
| <a name="input_esm_ping_type"></a> [esm\_ping\_type](#input\_esm\_ping\_type) | The method to use for pinging external nodes. | `string` | `"udp"` | no |
| <a name="input_esm_pod_security_context"></a> [esm\_pod\_security\_context](#input\_esm\_pod\_security\_context) | securityContext for ESM pods | `map` | `{}` | no |
| <a name="input_esm_pod_annotations"></a> [esm\_pod\_annotations](#input\_esm\_pod\_annotations) | Annotations for Consul ESM Pods | `map(string)` | `{}` | no |
| <a name="input_esm_pod_security_context"></a> [esm\_pod\_security\_context](#input\_esm\_pod\_security\_context) | securityContext for ESM pods | `any` | `{}` | no |
| <a name="input_esm_release_name"></a> [esm\_release\_name](#input\_esm\_release\_name) | Name of the ESM Chart Release | `string` | `"consul-esm"` | no |
| <a name="input_esm_replica"></a> [esm\_replica](#input\_esm\_replica) | Number of ESM replica | `number` | `3` | no |
| <a name="input_esm_resources"></a> [esm\_resources](#input\_esm\_resources) | Resources for ESM | `map` | <pre>{<br> "limits": {<br> "memory": "256Mi"<br> },<br> "requests": {<br> "cpu": "200m"<br> }<br>}</pre> | no |
| <a name="input_esm_server_address"></a> [esm\_server\_address](#input\_esm\_server\_address) | Override Consul Server address for TLS when using Auto Encrypt | `any` | `null` | no |
| <a name="input_esm_server_port"></a> [esm\_server\_port](#input\_esm\_server\_port) | Override Consul Server port for TLS when using Auto Encrypt | `any` | `null` | no |
| <a name="input_esm_resources"></a> [esm\_resources](#input\_esm\_resources) | Resources for ESM | `any` | <pre>{<br> "limits": {<br> "memory": "256Mi"<br> },<br> "requests": {<br> "cpu": "200m"<br> }<br>}</pre> | no |
| <a name="input_esm_server_address"></a> [esm\_server\_address](#input\_esm\_server\_address) | Override Consul Server address for TLS when using Auto Encrypt | `string` | `null` | no |
| <a name="input_esm_server_port"></a> [esm\_server\_port](#input\_esm\_server\_port) | Override Consul Server port for TLS when using Auto Encrypt | `number` | `null` | no |
| <a name="input_esm_service_name"></a> [esm\_service\_name](#input\_esm\_service\_name) | ESM service name in Consul | `string` | `"consul-esm"` | no |
| <a name="input_esm_service_tag"></a> [esm\_service\_tag](#input\_esm\_service\_tag) | Service tag for ESM | `string` | `""` | no |
| <a name="input_esm_tag"></a> [esm\_tag](#input\_esm\_tag) | Docker Image tag for ESM | `string` | `"0.4.0"` | no |
| <a name="input_esm_tolerations"></a> [esm\_tolerations](#input\_esm\_tolerations) | Toleration for ESM | `list` | `[]` | no |
| <a name="input_esm_tag"></a> [esm\_tag](#input\_esm\_tag) | Docker Image tag for ESM | `string` | `"0.6.0"` | no |
| <a name="input_esm_tolerations"></a> [esm\_tolerations](#input\_esm\_tolerations) | Toleration for ESM | `any` | `[]` | no |
| <a name="input_esm_use_node_agent"></a> [esm\_use\_node\_agent](#input\_esm\_use\_node\_agent) | Use Consul agent Daemonset | `bool` | `true` | no |
| <a name="input_exporter_affinity"></a> [exporter\_affinity](#input\_exporter\_affinity) | Affinity for Consul Exporter | `map` | `{}` | no |
| <a name="input_exporter_chart_name"></a> [exporter\_chart\_name](#input\_exporter\_chart\_name) | Name of the Consul Exporter Chart name | `string` | `"prometheus-consul-exporter"` | no |
Expand Down
102 changes: 45 additions & 57 deletions esm.tf
Original file line number Diff line number Diff line change
@@ -1,60 +1,48 @@
# Deploy Consul ESM
resource "helm_release" "consul_esm" {
count = var.enable_esm ? 1 : 0

name = var.esm_release_name
chart = var.esm_chart_name
repository = var.esm_chart_repository
version = var.esm_chart_version
namespace = var.chart_namespace

max_history = var.max_history

values = [
templatefile("${path.module}/templates/esm-values.yaml", local.esm_values),
]
}

locals {
esm_values = {
replica = var.esm_replica
image = var.esm_image
tag = var.esm_tag

resources = jsonencode(var.esm_resources)
affinity = jsonencode(var.esm_affinity)
tolerations = jsonencode(var.esm_tolerations)

pod_security_context = jsonencode(var.esm_pod_security_context)
container_security_context = jsonencode(var.esm_container_security_context)
module "esm" {
source = "./modules/esm"

env = jsonencode(var.esm_env)
log_level = var.esm_log_level

service_name = var.esm_service_name
service_tag = var.esm_service_tag

kv_path = var.esm_kv_path

external_node_meta = jsonencode(var.esm_external_node_meta)

node_reconnect_timeout = var.esm_node_reconnect_timeout
node_probe_interval = var.esm_node_probe_interval
http_addr = var.esm_http_addr
ping_type = var.esm_ping_type

use_node_agent = var.esm_use_node_agent
node_agent_port = coalesce(var.esm_node_agent_port, var.tls_enabled ? 8501 : 8500)

tls_enabled = var.tls_enabled
tls_cacert = var.tls_ca != null ? jsonencode(var.tls_ca.cert) : "null"

tls_enable_auto_encrypt = var.tls_enable_auto_encrypt
consul_k8s_image = "${var.consul_k8s_image}:${var.consul_k8s_tag}"
consul_template_image = var.consul_template_image
server_address = coalesce(var.esm_server_address, "${coalesce(var.name, var.release_name)}-server.${var.chart_namespace}.svc")
server_port = coalesce(8501, var.esm_server_port)
count = var.enable_esm ? 1 : 0

init_container_set_sysctl = var.esm_init_container_set_sysctl
}
esm_release_name = var.esm_release_name
esm_chart_name = var.esm_chart_name
esm_chart_repository = var.esm_chart_repository
esm_chart_version = var.esm_chart_version
chart_namespace = var.chart_namespace
max_history = var.max_history

esm_replica = var.esm_replica
esm_image = var.esm_image
esm_tag = var.esm_tag

esm_resources = var.esm_resources
esm_affinity = var.esm_affinity
esm_tolerations = var.esm_tolerations
esm_pod_security_context = var.esm_pod_security_context
esm_container_security_context = var.esm_container_security_context
esm_pod_annotations = var.esm_pod_annotations
esm_env = var.esm_env

esm_init_container_set_sysctl = var.esm_init_container_set_sysctl

esm_server_address = coalesce(var.esm_server_address, "${coalesce(var.name, var.release_name)}-server.${var.chart_namespace}.svc")
esm_server_port = var.esm_server_port
tls_enabled = var.tls_enabled
tls_ca = var.tls_ca
tls_enable_auto_encrypt = var.tls_enable_auto_encrypt
consul_k8s_image = var.consul_k8s_image

esm_log_level = var.esm_log_level
esm_service_name = var.esm_service_name
esm_service_tag = var.esm_service_tag
esm_kv_path = var.esm_kv_path
esm_external_node_meta = var.esm_external_node_meta
esm_node_reconnect_timeout = var.esm_node_reconnect_timeout
esm_node_probe_interval = var.esm_node_probe_interval
esm_http_addr = var.esm_http_addr
esm_ping_type = var.esm_ping_type

esm_use_node_agent = var.esm_use_node_agent
esm_node_agent_port = var.esm_node_agent_port

consul_template_image = var.consul_template_image
}
Loading

0 comments on commit 889bab2

Please sign in to comment.