Skip to content

Commit

Permalink
Add option to disable source creation
Browse files Browse the repository at this point in the history
  • Loading branch information
Dominik Rosiek committed Oct 21, 2020
1 parent 9bb63aa commit 0e6ebaa
Show file tree
Hide file tree
Showing 6 changed files with 243 additions and 1 deletion.
2 changes: 2 additions & 0 deletions deploy/helm/sumologic/conf/setup/locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ locals {
{{- range $type, $sources := .Values.sumologic.sources }}
{{- if eq (include "terraform.sources.component_enabled" (dict "Context" $ctx "Type" $type)) "true" }}
{{- range $key, $source := $sources }}
{{- if eq (include "terraform.sources.to_create" (dict "Context" $ctx "Type" $type "Name" $key)) "true" }}
{{ template "terraform.sources.local" (dict "Name" (include "terraform.sources.name" (dict "Name" $key "Type" $type)) "Value" $source.name) }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}
}
4 changes: 4 additions & 0 deletions deploy/helm/sumologic/conf/setup/resources.tf
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@ resource "sumologic_collector" "collector" {
{{- range $type, $sources := .Values.sumologic.sources }}
{{- if eq (include "terraform.sources.component_enabled" (dict "Context" $ctx "Type" $type)) "true" }}
{{- range $key, $source := $sources }}
{{- if eq (include "terraform.sources.to_create" (dict "Context" $ctx "Type" $type "Name" $key)) "true" }}
{{ include "terraform.sources.resource" (dict "Name" (include "terraform.sources.name" (dict "Name" $key "Type" $type)) "Source" $source "Context" $ctx) | nindent 2 }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}

resource "kubernetes_secret" "sumologic_collection_secret" {
metadata {
Expand All @@ -29,10 +31,12 @@ resource "kubernetes_secret" "sumologic_collection_secret" {
{{- range $type, $sources := .Values.sumologic.sources }}
{{- if eq (include "terraform.sources.component_enabled" (dict "Context" $ctx "Type" $type)) "true" }}
{{- range $key, $source := $sources }}
{{- if eq (include "terraform.sources.to_create" (dict "Context" $ctx "Type" $type "Name" $key)) "true" }}
{{ include "terraform.sources.data" (dict "Endpoint" (include "terraform.sources.config-map-variable" (dict "Type" $type "Context" $ctx "Name" $key)) "Name" (include "terraform.sources.name" (dict "Name" $key "Type" $type))) }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}
}

type = "Opaque"
Expand Down
4 changes: 3 additions & 1 deletion deploy/helm/sumologic/conf/setup/setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,14 @@ terraform init
terraform import sumologic_collector.collector "$COLLECTOR_NAME"
{{- $ctx := .Values -}}
{{- range $type, $sources := .Values.sumologic.sources }}
{{- range $key, $source := $sources }}
{{- if eq (include "terraform.sources.component_enabled" (dict "Context" $ctx "Type" $type)) "true" }}
{{- range $key, $source := $sources }}
{{- if eq (include "terraform.sources.to_create" (dict "Context" $ctx "Type" $type "Name" $key)) "true" }}
terraform import sumologic_http_source.{{ template "terraform.sources.name" (dict "Name" $key "Type" $type) }} "$COLLECTOR_NAME/{{ $source.name }}"
{{- end }}
{{- end }}
{{- end }}
{{- end }}

# Kubernetes Secret
terraform import kubernetes_secret.sumologic_collection_secret {{ .Release.Namespace }}/sumologic
Expand Down
20 changes: 20 additions & 0 deletions deploy/helm/sumologic/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -736,6 +736,26 @@ Example Usage:
{{ $value }}
{{- end -}}

{{/*
Check if particular source is enabled or not
Example Usage:
{{- if eq (include "terraform.sources.to_create" (dict "Context" .Values "Type" "metrics" .Name "default" )) "true" }}

*/}}
{{- define "terraform.sources.to_create" -}}
{{- $type := .Type -}}
{{- $ctx := .Context -}}
{{- $name := .Name -}}
{{- $value := true -}}
{{- if and (hasKey $ctx.sumologic.sources $type) (hasKey (index $ctx.sumologic.sources $type) $name) (hasKey (index $ctx.sumologic.sources $type $name) "create") -}}
{{- if not (index $ctx.sumologic.sources $type $name "create") -}}
{{- $value = false -}}
{{- end -}}
{{- end -}}
{{ $value }}
{{- end -}}

{{/*
Generate fluentd envs for given source type:
Expand Down
5 changes: 5 additions & 0 deletions tests/terraform/static/disable_default_metrics.input.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
sumologic:
sources:
metrics:
default:
create: false
209 changes: 209 additions & 0 deletions tests/terraform/static/disable_default_metrics.output.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,209 @@
---
# Source: sumologic/templates/setup/setup-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: RELEASE-NAME-sumologic-setup
annotations:
helm.sh/hook: pre-install,pre-upgrade
helm.sh/hook-weight: "2"
helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded
labels:
app: RELEASE-NAME-sumologic
chart: "sumologic-%CURRENT_CHART_VERSION%"
release: "RELEASE-NAME"
heritage: "Helm"
data:
custom.sh: |
#!/bin/bash
#
# This script copies files from /customer-scripts to /scripts/<dirname> basing on the filename
#
# Example file structure:
#
# /customer-scripts
# ├── dir1_main.tf
# ├── dir1_setup.sh
# ├── dir2_list.txt
# └── dir2_setup.sh
#
# Expected structure:
#
# /scripts
# ├── dir1
# │ ├── main.tf
# │ └── setup.sh
# └── dir2
# ├── list.txt
# └── setup.sh
#
# shellcheck disable=SC2010
# extract target directory names from the file names using _ as separator
for dir in $(ls -1 /customer-scripts | grep _ | grep -oE '^.*?_' | sed 's/_//g' | sort | uniq); do
target="/scripts/${dir}"
mkdir "${target}"
# shellcheck disable=SC2010
# Get files for given directory and take only filename part (after first _)
for file in $(ls -1 "/customer-scripts/${dir}_"* | grep -oE '_.*' | sed 's/_//g'); do
cp "/customer-scripts/${dir}_${file}" "${target}/${file}"
done
cd "${target}" && bash setup.sh
done
locals.tf: |
locals {
default_events_source = "events"
default_logs_source = "logs"
apiserver_metrics_source = "apiserver-metrics"
control_plane_metrics_source = "control-plane-metrics"
controller_metrics_source = "kube-controller-manager-metrics"
kubelet_metrics_source = "kubelet-metrics"
node_metrics_source = "node-exporter-metrics"
scheduler_metrics_source = "kube-scheduler-metrics"
state_metrics_source = "kube-state-metrics"
}
main.tf: |
terraform {
required_providers {
sumologic = "~> 2.3.0"
kubernetes = "~> 1.11.3"
}
}
providers.tf: |-
provider "sumologic" {}
provider "kubernetes" {
cluster_ca_certificate = file("/var/run/secrets/kubernetes.io/serviceaccount/ca.crt")
host = "https://kubernetes.default.svc"
load_config_file = "false"
token = file("/var/run/secrets/kubernetes.io/serviceaccount/token")
}
resources.tf: |
resource "sumologic_collector" "collector" {
name = var.collector_name
fields = {
cluster = var.cluster_name
}
}
resource "sumologic_http_source" "default_events_source" {
name = local.default_events_source
collector_id = sumologic_collector.collector.id
category = "${var.cluster_name}/${local.default_events_source}"
}
resource "sumologic_http_source" "default_logs_source" {
name = local.default_logs_source
collector_id = sumologic_collector.collector.id
}
resource "sumologic_http_source" "apiserver_metrics_source" {
name = local.apiserver_metrics_source
collector_id = sumologic_collector.collector.id
}
resource "sumologic_http_source" "control_plane_metrics_source" {
name = local.control_plane_metrics_source
collector_id = sumologic_collector.collector.id
}
resource "sumologic_http_source" "controller_metrics_source" {
name = local.controller_metrics_source
collector_id = sumologic_collector.collector.id
}
resource "sumologic_http_source" "kubelet_metrics_source" {
name = local.kubelet_metrics_source
collector_id = sumologic_collector.collector.id
}
resource "sumologic_http_source" "node_metrics_source" {
name = local.node_metrics_source
collector_id = sumologic_collector.collector.id
}
resource "sumologic_http_source" "scheduler_metrics_source" {
name = local.scheduler_metrics_source
collector_id = sumologic_collector.collector.id
}
resource "sumologic_http_source" "state_metrics_source" {
name = local.state_metrics_source
collector_id = sumologic_collector.collector.id
}
resource "kubernetes_secret" "sumologic_collection_secret" {
metadata {
name = "sumologic"
namespace = var.namespace_name
}
data = {
endpoint-events = sumologic_http_source.default_events_source.url
endpoint-logs = sumologic_http_source.default_logs_source.url
endpoint-metrics-apiserver = sumologic_http_source.apiserver_metrics_source.url
endpoint-control_plane_metrics_source = sumologic_http_source.control_plane_metrics_source.url
endpoint-metrics-kube-controller-manager = sumologic_http_source.controller_metrics_source.url
endpoint-metrics-kubelet = sumologic_http_source.kubelet_metrics_source.url
endpoint-metrics-node-exporter = sumologic_http_source.node_metrics_source.url
endpoint-metrics-kube-scheduler = sumologic_http_source.scheduler_metrics_source.url
endpoint-metrics-kube-state = sumologic_http_source.state_metrics_source.url
}
type = "Opaque"
}
setup.sh: |
#!/bin/bash
cp /etc/terraform/{locals,main,providers,resources,variables}.tf /terraform
cd /terraform
# Fix URL to remove "v1" or "v1/"
export SUMOLOGIC_BASE_URL=${SUMOLOGIC_BASE_URL%v1*}
# Support proxy for terraform
export HTTP_PROXY=${HTTP_PROXY:=""}
export HTTPS_PROXY=${HTTPS_PROXY:=""}
export NO_PROXY=${NO_PROXY:=""}
COLLECTOR_NAME="kubernetes"
terraform init
# Sumo Collector and HTTP sources
terraform import sumologic_collector.collector "$COLLECTOR_NAME"
terraform import sumologic_http_source.default_events_source "$COLLECTOR_NAME/events"
terraform import sumologic_http_source.default_logs_source "$COLLECTOR_NAME/logs"
terraform import sumologic_http_source.apiserver_metrics_source "$COLLECTOR_NAME/apiserver-metrics"
terraform import sumologic_http_source.control_plane_metrics_source "$COLLECTOR_NAME/control-plane-metrics"
terraform import sumologic_http_source.controller_metrics_source "$COLLECTOR_NAME/kube-controller-manager-metrics"
terraform import sumologic_http_source.kubelet_metrics_source "$COLLECTOR_NAME/kubelet-metrics"
terraform import sumologic_http_source.node_metrics_source "$COLLECTOR_NAME/node-exporter-metrics"
terraform import sumologic_http_source.scheduler_metrics_source "$COLLECTOR_NAME/kube-scheduler-metrics"
terraform import sumologic_http_source.state_metrics_source "$COLLECTOR_NAME/kube-state-metrics"
# Kubernetes Secret
terraform import kubernetes_secret.sumologic_collection_secret sumologic/sumologic
terraform apply -auto-approve
# Cleanup env variables
export SUMOLOGIC_BASE_URL=
export SUMOLOGIC_ACCESSKEY=
export SUMOLOGIC_ACCESSID=
bash /etc/terraform/custom.sh
variables.tf: |-
variable "cluster_name" {
type = string
default = "kubernetes"
}
variable "collector_name" {
type = string
default = "kubernetes"
}
variable "namespace_name" {
type = string
default = "sumologic"
}

0 comments on commit 0e6ebaa

Please sign in to comment.