diff --git a/README.md b/README.md index 78a327c..e3daec7 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ |------|--------|---------| | [cert\_manager](#module\_cert\_manager) | ./modules/cert-manager | n/a | | [cert\_manager\_lets\_encrypt\_issuer](#module\_cert\_manager\_lets\_encrypt\_issuer) | ./modules/cert-manager-issuer-lets-encrypt | n/a | +| [envoy\_gateway](#module\_envoy\_gateway) | ./modules/envoy-gateway | n/a | | [grafana\_loki\_datasource](#module\_grafana\_loki\_datasource) | ./modules/monitoring-grafana-loki-datasource | n/a | | [grafana\_tempo\_datasource](#module\_grafana\_tempo\_datasource) | ./modules/monitoring-grafana-tempo-datasource | n/a | | [ingress\_controller\_apisix](#module\_ingress\_controller\_apisix) | ./modules/ingress-controller-apisix | n/a | @@ -49,6 +50,7 @@ | [opentelemetry\_operator](#module\_opentelemetry\_operator) | ./modules/monitoring-opentelemetry-operator | n/a | | [prometheus\_stack](#module\_prometheus\_stack) | ./modules/monitoring-prometheus-stack | n/a | | [pulsar\_kaap](#module\_pulsar\_kaap) | ./modules/pulsar-kaap | n/a | +| [pulsar\_resources\_operator](#module\_pulsar\_resources\_operator) | ./modules/pulsar-resources-operator | n/a | | [streamx\_dashboards](#module\_streamx\_dashboards) | ./modules/monitoring-streamx-grafana-dashboards | n/a | | [streamx\_operator](#module\_streamx\_operator) | ./modules/streamx-operator | n/a | | [streamx\_operator\_image\_pull\_secret](#module\_streamx\_operator\_image\_pull\_secret) | ./modules/docker-config-secret | n/a | @@ -90,11 +92,21 @@ | [cert\_manager\_settings](#input\_cert\_manager\_settings) | Additional key value settings which will be passed to the Helm chart values, e.g. { "namespace" = "kube-system" }. | `map(any)` | `null` | no | | [cert\_manager\_timeout](#input\_cert\_manager\_timeout) | Time in seconds to wait for any individual kubernetes operation | `number` | `null` | no | | [cert\_manager\_values](#input\_cert\_manager\_values) | A list of values in raw YAML to be applied to the helm release. Overrides default values from [default-configs](./default-configs). Merges with the settings input, can also be used with the `file()` function, i.e. `file("my/values.yaml")`. | `list(string)` | `null` | no | +| [envoy\_gateway\_chart\_name](#input\_envoy\_gateway\_chart\_name) | The name of the Helm chart to install | `string` | `null` | no | +| [envoy\_gateway\_chart\_repository](#input\_envoy\_gateway\_chart\_repository) | The repository containing the Helm chart to install. | `string` | `null` | no | +| [envoy\_gateway\_chart\_version](#input\_envoy\_gateway\_chart\_version) | The version of the Helm chart to install. | `string` | `null` | no | +| [envoy\_gateway\_create\_namespace](#input\_envoy\_gateway\_create\_namespace) | Create a namespace for the deployment. | `bool` | `null` | no | +| [envoy\_gateway\_enabled](#input\_envoy\_gateway\_enabled) | Enables Envoy Gateway. | `bool` | `false` | no | +| [envoy\_gateway\_namespace](#input\_envoy\_gateway\_namespace) | The namespace used for the deployment | `string` | `null` | no | +| [envoy\_gateway\_release\_name](#input\_envoy\_gateway\_release\_name) | The name of the helm release. | `string` | `null` | no | +| [envoy\_gateway\_settings](#input\_envoy\_gateway\_settings) | Additional key value settings which will be passed to the Helm chart values, e.g. { "namespace" = "kube-system" }. | `map(any)` | `null` | no | +| [envoy\_gateway\_timeout](#input\_envoy\_gateway\_timeout) | Time in seconds to wait for any individual kubernetes operation | `number` | `null` | no | +| [envoy\_gateway\_values](#input\_envoy\_gateway\_values) | A list of values in raw YAML to be applied to the helm release. Overrides default values from [default-configs](./default-configs). Merges with the settings input, can also be used with the `file()` function, i.e. `file("my/values.yaml")`. | `list(string)` | `null` | no | | [ingress\_controller\_apisix\_chart\_name](#input\_ingress\_controller\_apisix\_chart\_name) | The name of the Helm chart to install | `string` | `null` | no | | [ingress\_controller\_apisix\_chart\_repository](#input\_ingress\_controller\_apisix\_chart\_repository) | The repository containing the Helm chart to install. | `string` | `null` | no | | [ingress\_controller\_apisix\_chart\_version](#input\_ingress\_controller\_apisix\_chart\_version) | The version of the Helm chart to install. | `string` | `null` | no | | [ingress\_controller\_apisix\_create\_namespace](#input\_ingress\_controller\_apisix\_create\_namespace) | Create a namespace for the deployment. | `bool` | `null` | no | -| [ingress\_controller\_apisix\_enabled](#input\_ingress\_controller\_apisix\_enabled) | Enables APISIX Ingress Controller. | `bool` | `true` | no | +| [ingress\_controller\_apisix\_enabled](#input\_ingress\_controller\_apisix\_enabled) | Enables APISIX Ingress Controller. | `bool` | `false` | no | | [ingress\_controller\_apisix\_namespace](#input\_ingress\_controller\_apisix\_namespace) | The namespace used for the deployment | `string` | `null` | no | | [ingress\_controller\_apisix\_release\_name](#input\_ingress\_controller\_apisix\_release\_name) | The name of the helm release. | `string` | `null` | no | | [ingress\_controller\_apisix\_settings](#input\_ingress\_controller\_apisix\_settings) | Additional key value settings which will be passed to the Helm chart values, e.g. { "namespace" = "kube-system" }. | `map(any)` | `null` | no | @@ -184,12 +196,27 @@ | [pulsar\_kaap\_settings](#input\_pulsar\_kaap\_settings) | Additional key value settings which will be passed to the Helm chart values, e.g. { "namespace" = "kube-system" }. | `map(any)` | `null` | no | | [pulsar\_kaap\_timeout](#input\_pulsar\_kaap\_timeout) | Time in seconds to wait for any individual kubernetes operation | `number` | `null` | no | | [pulsar\_kaap\_values](#input\_pulsar\_kaap\_values) | A list of values in raw YAML to be applied to the helm release. Overrides default values from [default-configs](./default-configs). Merges with the settings input, can also be used with the `file()` function, i.e. `file("my/values.yaml")`. | `list(string)` | `null` | no | +| [pulsar\_resources\_operator\_chart\_name](#input\_pulsar\_resources\_operator\_chart\_name) | The name of the Helm chart to install | `string` | `null` | no | +| [pulsar\_resources\_operator\_chart\_repository](#input\_pulsar\_resources\_operator\_chart\_repository) | The repository containing the Helm chart to install. | `string` | `null` | no | +| [pulsar\_resources\_operator\_chart\_repository\_password](#input\_pulsar\_resources\_operator\_chart\_repository\_password) | The password used for the repository authentication. | `string` | `null` | no | +| [pulsar\_resources\_operator\_chart\_repository\_username](#input\_pulsar\_resources\_operator\_chart\_repository\_username) | The username used for the repository authentication. | `string` | `null` | no | +| [pulsar\_resources\_operator\_chart\_version](#input\_pulsar\_resources\_operator\_chart\_version) | The version of the Helm chart to install. | `string` | `null` | no | +| [pulsar\_resources\_operator\_create\_namespace](#input\_pulsar\_resources\_operator\_create\_namespace) | Create a namespace for the deployment. | `bool` | `true` | no | +| [pulsar\_resources\_operator\_enabled](#input\_pulsar\_resources\_operator\_enabled) | Enables Pulsar Resources Operator. | `bool` | `true` | no | +| [pulsar\_resources\_operator\_namespace](#input\_pulsar\_resources\_operator\_namespace) | The namespace used for the deployment | `string` | `"pulsar-resources-operator"` | no | +| [pulsar\_resources\_operator\_release\_name](#input\_pulsar\_resources\_operator\_release\_name) | The name of the helm release. | `string` | `null` | no | +| [pulsar\_resources\_operator\_settings](#input\_pulsar\_resources\_operator\_settings) | Additional key value settings which will be passed to the Helm chart values, e.g. { "namespace" = "kube-system" }. | `map(any)` | `null` | no | +| [pulsar\_resources\_operator\_timeout](#input\_pulsar\_resources\_operator\_timeout) | Time in seconds to wait for any individual kubernetes operation. | `number` | `null` | no | +| [pulsar\_resources\_operator\_values](#input\_pulsar\_resources\_operator\_values) | A list of values in raw YAML to be applied to the helm release. Overrides default composed values. Merges with the settings input, can also be used with the `file()` function, i.e. `file("my/values.yaml")`. | `list(string)` | `null` | no | | [streamx\_operator\_chart\_name](#input\_streamx\_operator\_chart\_name) | The name of the Helm chart to install | `string` | `null` | no | | [streamx\_operator\_chart\_repository](#input\_streamx\_operator\_chart\_repository) | The repository containing the Helm chart to install. | `string` | `null` | no | | [streamx\_operator\_chart\_repository\_password](#input\_streamx\_operator\_chart\_repository\_password) | The password used for the repository authentication. | `string` | `null` | no | | [streamx\_operator\_chart\_repository\_username](#input\_streamx\_operator\_chart\_repository\_username) | The username used for the repository authentication. | `string` | `null` | no | | [streamx\_operator\_chart\_version](#input\_streamx\_operator\_chart\_version) | The version of the Helm chart to install. | `string` | `null` | no | | [streamx\_operator\_create\_namespace](#input\_streamx\_operator\_create\_namespace) | Create a namespace for the deployment. | `bool` | `true` | no | +| [streamx\_operator\_default\_gateway\_certificate\_ref](#input\_streamx\_operator\_default\_gateway\_certificate\_ref) | n/a | `string` | `null` | no | +| [streamx\_operator\_default\_gateway\_class\_name](#input\_streamx\_operator\_default\_gateway\_class\_name) | n/a | `string` | `null` | no | +| [streamx\_operator\_default\_gateway\_domain](#input\_streamx\_operator\_default\_gateway\_domain) | n/a | `string` | `null` | no | | [streamx\_operator\_enabled](#input\_streamx\_operator\_enabled) | Enables StreamX Operator. | `bool` | `true` | no | | [streamx\_operator\_image\_pull\_secret\_enabled](#input\_streamx\_operator\_image\_pull\_secret\_enabled) | Enables StreamX Operator Image Pull Secret. | `bool` | `true` | no | | [streamx\_operator\_image\_pull\_secret\_name](#input\_streamx\_operator\_image\_pull\_secret\_name) | StreamX Operator image pull secret name. | `string` | `"sx-operator-image-pull-secret"` | no | @@ -201,7 +228,7 @@ | [streamx\_operator\_messaging\_pulsar\_client\_service\_url](#input\_streamx\_operator\_messaging\_pulsar\_client\_service\_url) | Pulsar client service URL passed to StreamX Operator. If null and KAAP enabled then KAAP default URL is used. | `string` | `null` | no | | [streamx\_operator\_monitoring\_traces\_endpoint](#input\_streamx\_operator\_monitoring\_traces\_endpoint) | Traces collector URL | `string` | `null` | no | | [streamx\_operator\_monitoring\_traces\_mode](#input\_streamx\_operator\_monitoring\_traces\_mode) | Traces monitoring mode for StreamX Meshes deployed by StreamX Operator | `string` | `null` | no | -| [streamx\_operator\_namespace](#input\_streamx\_operator\_namespace) | The namespace used for the deployment | `string` | `"streamx-operator"` | no | +| [streamx\_operator\_namespace](#input\_streamx\_operator\_namespace) | The namespace used for the deployment | `string` | `"streamx-system"` | no | | [streamx\_operator\_release\_name](#input\_streamx\_operator\_release\_name) | The name of the helm release. | `string` | `null` | no | | [streamx\_operator\_settings](#input\_streamx\_operator\_settings) | Additional key value settings which will be passed to the Helm chart values, e.g. { "namespace" = "kube-system" }. | `map(any)` | `null` | no | | [streamx\_operator\_timeout](#input\_streamx\_operator\_timeout) | Time in seconds to wait for any individual kubernetes operation. | `number` | `null` | no | @@ -222,5 +249,5 @@ | Name | Description | |------|-------------| | [cert\_manager\_lets\_encrypt\_issuer\_ingress\_annotations](#output\_cert\_manager\_lets\_encrypt\_issuer\_ingress\_annotations) | Ingress annotations with Cert Manager Let's Encrypt issuer configuration | -| [loadbalancer\_ip](#output\_loadbalancer\_ip) | K8s cluster Load Balancer IP | +| [load\_balancer\_ip](#output\_load\_balancer\_ip) | K8s cluster Load Balancer IP | diff --git a/main.tf b/main.tf index 333db2f..8c9b5f8 100644 --- a/main.tf +++ b/main.tf @@ -47,6 +47,21 @@ module "ingress_controller_nginx" { ]) } +module "envoy_gateway" { + count = var.envoy_gateway_enabled ? 1 : 0 + source = "./modules/envoy-gateway" + + chart_name = var.envoy_gateway_chart_name + chart_repository = var.envoy_gateway_chart_repository + chart_version = var.envoy_gateway_chart_version + create_namespace = var.envoy_gateway_create_namespace + namespace = var.envoy_gateway_namespace + release_name = var.envoy_gateway_release_name + settings = var.envoy_gateway_settings + timeout = var.envoy_gateway_timeout + values = var.envoy_gateway_values +} + module "cert_manager" { count = var.cert_manager_enabled ? 1 : 0 source = "./modules/cert-manager" @@ -438,6 +453,9 @@ module "streamx_operator" { imagePullSecrets = local.streamx_operator_image_pull_secret_name == null ? [] : [ { name = local.streamx_operator_image_pull_secret_name } ] + image = { + tag = "2.0.3-jvm" + } } mesh = { monitoring = { @@ -446,6 +464,11 @@ module "streamx_operator" { endpoint = var.streamx_operator_monitoring_traces_endpoint } } + defaultGateway = { + className = var.streamx_operator_default_gateway_class_name + domain = var.streamx_operator_default_gateway_domain + certificateRef = var.streamx_operator_default_gateway_certificate_ref + } } federation = { # Disable Mesh Federation by default diff --git a/modules/envoy-gateway/README.md b/modules/envoy-gateway/README.md new file mode 100644 index 0000000..e59790d --- /dev/null +++ b/modules/envoy-gateway/README.md @@ -0,0 +1,52 @@ + +## Requirements + +| Name | Version | +|------|---------| +| [terraform](#requirement\_terraform) | >= 1.0.0 | +| [helm](#requirement\_helm) | >= 2.17.0, < 3.0.0 | +| [kubectl](#requirement\_kubectl) | >= 1.14.0 | + +## Providers + +| Name | Version | +|------|---------| +| [helm](#provider\_helm) | >= 2.17.0, < 3.0.0 | +| [kubectl](#provider\_kubectl) | >= 1.14.0 | +| [kubernetes](#provider\_kubernetes) | n/a | + +## Modules + +No modules. + +## Resources + +| Name | Type | +|------|------| +| [helm_release.this](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource | +| [kubectl_manifest.gateway_class](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource | +| [kubernetes_service_v1.gateway](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/data-sources/service_v1) | data source | + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| [atomic](#input\_atomic) | Purge the chart on a failed installation. | `bool` | `true` | no | +| [chart\_name](#input\_chart\_name) | The name of the Helm chart to install | `string` | `"oci://docker.io/envoyproxy/gateway-helm"` | no | +| [chart\_repository](#input\_chart\_repository) | The repository containing the Helm chart to install | `string` | `null` | no | +| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"v1.6.1"` | no | +| [cleanup\_on\_fail](#input\_cleanup\_on\_fail) | Allow deletion of new resources created in this upgrade when upgrade fails | `bool` | `true` | no | +| [create\_namespace](#input\_create\_namespace) | Create a namespace for the deployment. Defaults to "true". | `bool` | `true` | no | +| [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no | +| [namespace](#input\_namespace) | The namespace used for the deployment | `string` | `"envoy-gateway-system"` | no | +| [release\_name](#input\_release\_name) | The name of the helm release | `string` | `"envoy-gateway"` | no | +| [settings](#input\_settings) | Settings which will be passed to the Helm chart values | `map(any)` | `{}` | no | +| [timeout](#input\_timeout) | Time in seconds to wait for any individual kubernetes operation | `number` | `300` | no | +| [values](#input\_values) | A list of values in raw YAML to be applied to the helm release. Merges with the settings input, can also be used with the `file()` function, i.e. `file("my/values.yaml")`. | `list` | `[]` | no | + +## Outputs + +| Name | Description | +|------|-------------| +| [load\_balancer\_ip](#output\_load\_balancer\_ip) | IP of the Load Balancer | + \ No newline at end of file diff --git a/modules/envoy-gateway/gateway-class.yaml b/modules/envoy-gateway/gateway-class.yaml new file mode 100644 index 0000000..21ad2ef --- /dev/null +++ b/modules/envoy-gateway/gateway-class.yaml @@ -0,0 +1,6 @@ +apiVersion: gateway.networking.k8s.io/v1 +kind: GatewayClass +metadata: + name: envoy +spec: + controllerName: gateway.envoyproxy.io/gatewayclass-controller \ No newline at end of file diff --git a/modules/envoy-gateway/main.tf b/modules/envoy-gateway/main.tf new file mode 100644 index 0000000..138d74a --- /dev/null +++ b/modules/envoy-gateway/main.tf @@ -0,0 +1,79 @@ +# Copyright 2025 Dynamic Solutions Sp. z o.o. sp.k. + +# Licensed 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 +# +# http://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. +# + +locals { + default_atomic = true + default_chart_name = "oci://docker.io/envoyproxy/gateway-helm" + default_chart_repository = null + default_chart_version = "v1.6.1" + default_cleanup_on_fail = true + default_create_namespace = true + default_namespace = "envoy-gateway-system" + default_release_name = "envoy-gateway" + default_settings = {} + default_timeout = 300 + default_values = [] + + atomic = var.force_defaults_for_null_variables && var.atomic == null ? local.default_atomic : var.atomic + chart_name = var.force_defaults_for_null_variables && var.chart_name == null ? local.default_chart_name : var.chart_name + chart_repository = var.force_defaults_for_null_variables && var.chart_repository == null ? local.default_chart_repository : var.chart_repository + chart_version = var.force_defaults_for_null_variables && var.chart_version == null ? local.default_chart_version : var.chart_version + cleanup_on_fail = var.force_defaults_for_null_variables && var.cleanup_on_fail == null ? local.default_cleanup_on_fail : var.cleanup_on_fail + create_namespace = var.force_defaults_for_null_variables && var.create_namespace == null ? local.default_create_namespace : var.create_namespace + namespace = var.force_defaults_for_null_variables && var.namespace == null ? local.default_namespace : var.namespace + release_name = var.force_defaults_for_null_variables && var.release_name == null ? local.default_release_name : var.release_name + settings = var.force_defaults_for_null_variables && var.settings == null ? local.default_settings : var.settings + timeout = var.force_defaults_for_null_variables && var.timeout == null ? local.default_timeout : var.timeout + values = var.force_defaults_for_null_variables && var.values == null ? local.default_values : var.values +} + +resource "helm_release" "this" { + atomic = local.atomic + chart = local.chart_name + cleanup_on_fail = local.cleanup_on_fail + create_namespace = local.create_namespace + name = local.release_name + namespace = local.namespace + repository = local.chart_repository + timeout = local.timeout + version = local.chart_version + values = local.values + + dynamic "set" { + for_each = local.settings + content { + name = set.key + value = set.value + } + } +} + +resource "kubectl_manifest" "gateway_class" { + yaml_body = file("${path.module}/gateway-class.yaml") + override_namespace = local.namespace + + depends_on = [helm_release.this] +} + +data "kubernetes_service_v1" "gateway" { + metadata { + name = "envoy-gateway" + namespace = local.namespace + } + + depends_on = [ + helm_release.this + ] +} diff --git a/modules/envoy-gateway/outputs.tf b/modules/envoy-gateway/outputs.tf new file mode 100644 index 0000000..fc6d23f --- /dev/null +++ b/modules/envoy-gateway/outputs.tf @@ -0,0 +1,23 @@ +# Copyright 2025 Dynamic Solutions Sp. z o.o. sp.k. + +# Licensed 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 +# +# http://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. +# + +locals { + load_balancer_ip = data.kubernetes_service_v1.gateway.status.0.load_balancer.0.ingress.0.ip +} + +output "load_balancer_ip" { + description = "IP of the Load Balancer" + value = local.load_balancer_ip +} diff --git a/modules/envoy-gateway/variables.tf b/modules/envoy-gateway/variables.tf new file mode 100644 index 0000000..23dca87 --- /dev/null +++ b/modules/envoy-gateway/variables.tf @@ -0,0 +1,85 @@ +# Copyright 2025 Dynamic Solutions Sp. z o.o. sp.k. + +# Licensed 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 +# +# http://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. +# + +variable "force_defaults_for_null_variables" { + default = true + description = "Enables forcing default variable values when the variable value passed to the module is null." + type = bool +} + +variable "atomic" { + default = true + description = "Purge the chart on a failed installation." + type = bool +} + +variable "chart_name" { + default = "oci://docker.io/envoyproxy/gateway-helm" + description = "The name of the Helm chart to install" + type = string +} + +variable "chart_repository" { + default = null + description = "The repository containing the Helm chart to install" + type = string +} + +variable "chart_version" { + default = "v1.6.1" + description = "The version of the Helm chart to install" + type = string +} + +variable "cleanup_on_fail" { + default = true + description = "Allow deletion of new resources created in this upgrade when upgrade fails" + type = bool +} + +variable "create_namespace" { + default = true + description = "Create a namespace for the deployment. Defaults to \"true\"." + type = bool +} + +variable "namespace" { + default = "envoy-gateway-system" + description = "The namespace used for the deployment" + type = string +} + +variable "release_name" { + default = "envoy-gateway" + description = "The name of the helm release" + type = string +} + +variable "settings" { + default = {} + description = "Settings which will be passed to the Helm chart values" + type = map(any) +} + +variable "timeout" { + default = 300 + description = "Time in seconds to wait for any individual kubernetes operation" + type = number +} + +variable "values" { + default = [] + description = "A list of values in raw YAML to be applied to the helm release. Merges with the settings input, can also be used with the `file()` function, i.e. `file(\"my/values.yaml\")`." +} diff --git a/modules/envoy-gateway/versions.tf b/modules/envoy-gateway/versions.tf new file mode 100644 index 0000000..aa2e27e --- /dev/null +++ b/modules/envoy-gateway/versions.tf @@ -0,0 +1,28 @@ +# Copyright 2025 Dynamic Solutions Sp. z o.o. sp.k. + +# Licensed 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 +# +# http://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. +# + +terraform { + required_version = ">= 1.0.0" + required_providers { + helm = { + source = "hashicorp/helm" + version = ">= 2.17.0, < 3.0.0" + } + kubectl = { + source = "gavinbunney/kubectl" + version = ">= 1.14.0" + } + } +} diff --git a/modules/monitoring-kaap-pod-monitor/README.md b/modules/monitoring-kaap-pod-monitor/README.md index ae38cfc..211117e 100644 --- a/modules/monitoring-kaap-pod-monitor/README.md +++ b/modules/monitoring-kaap-pod-monitor/README.md @@ -23,6 +23,7 @@ No modules. | [kubectl_manifest.kaap_bookkeeper_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource | | [kubectl_manifest.kaap_broker_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource | | [kubectl_manifest.kaap_operator_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource | +| [kubectl_manifest.kaap_proxy_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource | | [kubectl_manifest.kaap_zookeeper_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource | ## Inputs diff --git a/modules/monitoring-loki-grafana-dashboards/README.md b/modules/monitoring-loki-grafana-dashboards/README.md index 11f1cce..346bd53 100644 --- a/modules/monitoring-loki-grafana-dashboards/README.md +++ b/modules/monitoring-loki-grafana-dashboards/README.md @@ -27,6 +27,7 @@ No modules. | Name | Description | Type | Default | Required | |------|-------------|------|---------|:--------:| | [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no | +| [multicluster](#input\_multicluster) | If false Cluster variable in dashboards is hidden | `bool` | `false` | no | | [namespace](#input\_namespace) | The namespace used for Grafana deployment | `string` | `"prometheus-stack"` | no | ## Outputs diff --git a/modules/monitoring-opentelemetry-collector/README.md b/modules/monitoring-opentelemetry-collector/README.md index 8f71457..3f1126b 100644 --- a/modules/monitoring-opentelemetry-collector/README.md +++ b/modules/monitoring-opentelemetry-collector/README.md @@ -29,7 +29,7 @@ No modules. | [atomic](#input\_atomic) | Purge the chart on a failed installation. Default's to "true". | `bool` | `true` | no | | [chart\_name](#input\_chart\_name) | The name of the Helm chart to install | `string` | `"opentelemetry-collector"` | no | | [chart\_repository](#input\_chart\_repository) | The repository containing the Helm chart to install | `string` | `"https://open-telemetry.github.io/opentelemetry-helm-charts"` | no | -| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"0.117.0"` | no | +| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"0.139.0"` | no | | [cleanup\_on\_fail](#input\_cleanup\_on\_fail) | Allow deletion of new resources created in this upgrade when upgrade fails | `bool` | `true` | no | | [create\_namespace](#input\_create\_namespace) | Create a namespace for the deployment. Defaults to "true". | `bool` | `true` | no | | [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no | diff --git a/modules/monitoring-opentelemetry-operator/README.md b/modules/monitoring-opentelemetry-operator/README.md index 89b0935..7280552 100644 --- a/modules/monitoring-opentelemetry-operator/README.md +++ b/modules/monitoring-opentelemetry-operator/README.md @@ -29,7 +29,7 @@ No modules. | [atomic](#input\_atomic) | Purge the chart on a failed installation. Default's to "true". | `bool` | `true` | no | | [chart\_name](#input\_chart\_name) | The name of the Helm chart to install | `string` | `"opentelemetry-operator"` | no | | [chart\_repository](#input\_chart\_repository) | The repository containing the Helm chart to install | `string` | `"https://open-telemetry.github.io/opentelemetry-helm-charts"` | no | -| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"0.80.2"` | no | +| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"0.99.0"` | no | | [cleanup\_on\_fail](#input\_cleanup\_on\_fail) | Allow deletion of new resources created in this upgrade when upgrade fails | `bool` | `true` | no | | [create\_namespace](#input\_create\_namespace) | Create a namespace for the deployment. Defaults to "true". | `bool` | `true` | no | | [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no | diff --git a/modules/monitoring-streamx-grafana-dashboards/README.md b/modules/monitoring-streamx-grafana-dashboards/README.md index b67026b..496f061 100644 --- a/modules/monitoring-streamx-grafana-dashboards/README.md +++ b/modules/monitoring-streamx-grafana-dashboards/README.md @@ -27,6 +27,7 @@ No modules. | Name | Description | Type | Default | Required | |------|-------------|------|---------|:--------:| | [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no | +| [multicluster](#input\_multicluster) | If false Cluster variable in dashboards is hidden | `bool` | `false` | no | | [namespace](#input\_namespace) | The namespace used for the deployment | `string` | `"prometheus-stack"` | no | ## Outputs diff --git a/modules/monitoring-streamx-pod-monitor/README.md b/modules/monitoring-streamx-pod-monitor/README.md index 3c9e82f..9b04b10 100644 --- a/modules/monitoring-streamx-pod-monitor/README.md +++ b/modules/monitoring-streamx-pod-monitor/README.md @@ -20,6 +20,7 @@ No modules. | Name | Type | |------|------| +| [kubectl_manifest.streamx_operator_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource | | [kubectl_manifest.streamx_pod_monitor](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource | ## Inputs diff --git a/modules/pulsar-resources-operator/README.md b/modules/pulsar-resources-operator/README.md new file mode 100644 index 0000000..63c5168 --- /dev/null +++ b/modules/pulsar-resources-operator/README.md @@ -0,0 +1,47 @@ + +## Requirements + +| Name | Version | +|------|---------| +| [terraform](#requirement\_terraform) | >= 1.0.0 | +| [helm](#requirement\_helm) | >= 2.17.0, < 3.0.0 | + +## Providers + +| Name | Version | +|------|---------| +| [helm](#provider\_helm) | >= 2.17.0, < 3.0.0 | + +## Modules + +No modules. + +## Resources + +| Name | Type | +|------|------| +| [helm_release.pulsar_resources_operator](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource | + +## Inputs + +| Name | Description | Type | Default | Required | +|------|-------------|------|---------|:--------:| +| [atomic](#input\_atomic) | Purge the chart on a failed installation. Default's to "true". | `bool` | `true` | no | +| [chart\_name](#input\_chart\_name) | The name of the Helm chart to install | `string` | `"pulsar-resources-operator"` | no | +| [chart\_repository](#input\_chart\_repository) | The repository containing the Helm chart to install | `string` | `"https://charts.streamnative.io"` | no | +| [chart\_repository\_password](#input\_chart\_repository\_password) | The password used for the repository authentication | `string` | `null` | no | +| [chart\_repository\_username](#input\_chart\_repository\_username) | The username used for the repository authentication | `string` | `null` | no | +| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"0.12.0"` | no | +| [cleanup\_on\_fail](#input\_cleanup\_on\_fail) | Allow deletion of new resources created in this upgrade when upgrade fails | `bool` | `true` | no | +| [create\_namespace](#input\_create\_namespace) | Create a namespace for the deployment. Defaults to "true". | `bool` | `true` | no | +| [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no | +| [namespace](#input\_namespace) | The namespace used for the deployment | `string` | `"pulsar-resources-operator"` | no | +| [release\_name](#input\_release\_name) | The name of the helm release | `string` | `"pulsar-resources-operator"` | no | +| [settings](#input\_settings) | Settings which will be passed to the Helm chart values | `map(any)` | `{}` | no | +| [timeout](#input\_timeout) | Time in seconds to wait for any individual kubernetes operation | `number` | `300` | no | +| [values](#input\_values) | A list of values in raw YAML to be applied to the helm release. Merges with the settings input, can also be used with the `file()` function, i.e. `file("my/values.yaml")`. | `list` | `[]` | no | + +## Outputs + +No outputs. + \ No newline at end of file diff --git a/modules/streamx-operator/README.md b/modules/streamx-operator/README.md index 7db1217..d527cdd 100644 --- a/modules/streamx-operator/README.md +++ b/modules/streamx-operator/README.md @@ -20,13 +20,14 @@ |------|---------| | [terraform](#requirement\_terraform) | >= 1.0.0 | | [helm](#requirement\_helm) | >= 2.17.0, < 3.0.0 | +| [kubectl](#requirement\_kubectl) | >= 1.14.0 | ## Providers | Name | Version | |------|---------| | [helm](#provider\_helm) | 2.17.0 | -| [kubectl](#provider\_kubectl) | n/a | +| [kubectl](#provider\_kubectl) | >= 1.14.0 | ## Modules @@ -37,7 +38,7 @@ No modules. | Name | Type | |------|------| | [helm_release.streamx_operator](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource | -| [kubectl_manifest.pulsar_messaging_config](https://registry.terraform.io/providers/hashicorp/kubectl/latest/docs/resources/manifest) | resource | +| [kubectl_manifest.pulsar_messaging_config](https://registry.terraform.io/providers/gavinbunney/kubectl/latest/docs/resources/manifest) | resource | ## Inputs @@ -48,12 +49,12 @@ No modules. | [chart\_repository](#input\_chart\_repository) | The repository containing the Helm chart to install | `string` | `"oci://europe-west1-docker.pkg.dev/streamx-releases/streamx-helm-charts"` | no | | [chart\_repository\_password](#input\_chart\_repository\_password) | The password used for the repository authentication | `string` | `null` | no | | [chart\_repository\_username](#input\_chart\_repository\_username) | The username used for the repository authentication | `string` | `null` | no | -| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"0.0.7"` | no | +| [chart\_version](#input\_chart\_version) | The version of the Helm chart to install | `string` | `"2.0.4"` | no | | [cleanup\_on\_fail](#input\_cleanup\_on\_fail) | Allow deletion of new resources created in this upgrade when upgrade fails | `bool` | `true` | no | | [create\_namespace](#input\_create\_namespace) | Create a namespace for the deployment. Defaults to "true". | `bool` | `true` | no | | [force\_defaults\_for\_null\_variables](#input\_force\_defaults\_for\_null\_variables) | Enables forcing default variable values when the variable value passed to the module is null. | `bool` | `true` | no | -| [namespace](#input\_namespace) | The namespace used for the deployment | `string` | `"streamx-operator"` | no | -| [pulsar\_messaging\_config\_admin\_service\_url](#input\_pulsar\_messaging\_config\_admin\_service\_url) | Pulsar admin service URL passed to StreamX Operator. If null then default MessagingConfig is not created. | `string` | `null` | no | +| [namespace](#input\_namespace) | The namespace used for the deployment | `string` | `"streamx-system"` | no | +| [pulsar\_messaging\_config\_admin\_service\_url](#input\_pulsar\_messaging\_config\_admin\_service\_url) | Pulsar admin service URL passed to default MessagingConfig resource. If null then default MessagingConfig is not created. | `string` | `null` | no | | [pulsar\_messaging\_config\_client\_service\_url](#input\_pulsar\_messaging\_config\_client\_service\_url) | Pulsar client service URL passed to default MessagingConfig resource. If null then default MessagingConfig is not created. | `string` | `null` | no | | [release\_name](#input\_release\_name) | The name of the helm release | `string` | `"streamx-operator"` | no | | [settings](#input\_settings) | Settings which will be passed to the Helm chart values | `map(any)` | `{}` | no | diff --git a/modules/streamx-operator/config/pulsar-messaging-config.yaml b/modules/streamx-operator/config/pulsar-messaging-config.yaml index eaa32ad..2b781f1 100644 --- a/modules/streamx-operator/config/pulsar-messaging-config.yaml +++ b/modules/streamx-operator/config/pulsar-messaging-config.yaml @@ -1,4 +1,4 @@ -apiVersion: "streamx.dev/v1alpha1" +apiVersion: "streamx.com/v1alpha1" kind: MessagingClass metadata: name: default diff --git a/modules/streamx-operator/main.tf b/modules/streamx-operator/main.tf index 59a4fb1..1b0ec97 100644 --- a/modules/streamx-operator/main.tf +++ b/modules/streamx-operator/main.tf @@ -17,7 +17,7 @@ locals { default_atomic = true default_chart_name = "streamx-operator" default_chart_repository = "oci://europe-west1-docker.pkg.dev/streamx-releases/streamx-helm-charts" - default_chart_version = "0.1.1" + default_chart_version = "2.0.4" default_cleanup_on_fail = true default_create_namespace = true default_namespace = "streamx-system" diff --git a/modules/streamx-operator/variables.tf b/modules/streamx-operator/variables.tf index 78aa777..8f17764 100644 --- a/modules/streamx-operator/variables.tf +++ b/modules/streamx-operator/variables.tf @@ -51,7 +51,7 @@ variable "chart_repository_password" { } variable "chart_version" { - default = "0.0.8" + default = "2.0.4" description = "The version of the Helm chart to install" type = string } diff --git a/outputs.tf b/outputs.tf index 9c44cb0..7fb9be8 100644 --- a/outputs.tf +++ b/outputs.tf @@ -13,9 +13,9 @@ # limitations under the License. # -output "loadbalancer_ip" { +output "load_balancer_ip" { description = "K8s cluster Load Balancer IP" - value = length(module.ingress_controller_nginx) > 0 ? module.ingress_controller_nginx.0.ingress_ip : length(module.ingress_controller_apisix) > 0 ? module.ingress_controller_apisix.0.ingress_ip : null + value = try(coalesce(try(module.ingress_controller_nginx.0.ingress_ip, null), try(module.ingress_controller_apisix.0.ingress_ip, null), try(module.envoy_gateway.0.load_balancer_ip, null)), null) } output "cert_manager_lets_encrypt_issuer_ingress_annotations" { diff --git a/variables.tf b/variables.tf index 7322791..fbcd4af 100644 --- a/variables.tf +++ b/variables.tf @@ -15,7 +15,7 @@ ### Enable/Disable sub-modules variable "ingress_controller_apisix_enabled" { - default = true + default = false description = "Enables APISIX Ingress Controller." type = bool } @@ -26,6 +26,12 @@ variable "ingress_controller_nginx_enabled" { type = bool } +variable "envoy_gateway_enabled" { + default = false + description = "Enables Envoy Gateway." + type = bool +} + variable "cert_manager_enabled" { default = true description = "Enables Cert Manager." @@ -130,6 +136,19 @@ variable "ingress_controller_apisix_namespace" { type = string } +### Envoy Gateway +variable "envoy_gateway_create_namespace" { + default = null + description = "Create a namespace for the deployment." + type = bool +} + +variable "envoy_gateway_namespace" { + default = null + description = "The namespace used for the deployment" + type = string +} + ### Cert Manager variable "cert_manager_create_namespace" { default = null @@ -376,6 +395,51 @@ variable "ingress_controller_nginx_values" { type = list(string) } +####### +### Envoy Gateway +####### +variable "envoy_gateway_chart_name" { + default = null + description = "The name of the Helm chart to install" + type = string +} + +variable "envoy_gateway_chart_repository" { + default = null + description = "The repository containing the Helm chart to install." + type = string +} + +variable "envoy_gateway_chart_version" { + default = null + description = "The version of the Helm chart to install." + type = string +} + +variable "envoy_gateway_release_name" { + default = null + description = "The name of the helm release." + type = string +} + +variable "envoy_gateway_settings" { + default = null + description = "Additional key value settings which will be passed to the Helm chart values, e.g. { \"namespace\" = \"kube-system\" }." + type = map(any) +} + +variable "envoy_gateway_timeout" { + default = null + description = "Time in seconds to wait for any individual kubernetes operation" + type = number +} + +variable "envoy_gateway_values" { + default = null + description = "A list of values in raw YAML to be applied to the helm release. Overrides default values from [default-configs](./default-configs). Merges with the settings input, can also be used with the `file()` function, i.e. `file(\"my/values.yaml\")`." + type = list(string) +} + ####### ### Cert manager ####### @@ -979,6 +1043,21 @@ variable "streamx_operator_monitoring_traces_endpoint" { type = string } +variable "streamx_operator_default_gateway_class_name" { + default = null + type = string +} + +variable "streamx_operator_default_gateway_domain" { + default = null + type = string +} + +variable "streamx_operator_default_gateway_certificate_ref" { + default = null + type = string +} + ####### ### StreamX Operator image pull secret #######