Skip to content

Commit 0d080c7

Browse files
committed
updated custom credentials
2 parents 0219076 + 4402cb8 commit 0d080c7

File tree

15 files changed

+279
-154
lines changed

15 files changed

+279
-154
lines changed

README.md

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ This module allows you to easily deploy a MySQL database on Kubernetes using Hel
1111

1212
| MysqlDB Helm Chart Version | K8s supported version |
1313
| :-----: | :--- |
14-
| **9.2.0** | **1.23,1.24,1.25** |
14+
| **9.2.0** | **1.23,1.24,1.25,1.26,1.27** |
1515

1616

1717
## Usage Example
@@ -21,15 +21,27 @@ module "mysql" {
2121
source = "squareops/mysql/kubernetes"
2222
cluster_name = "dev-cluster"
2323
mysqldb_config = {
24-
name = "mysql"
25-
values_yaml = ""
26-
environment = "prod"
27-
architecture = "replication"
28-
storage_class_name = "gp3"
29-
custom_user_username = "admin"
30-
primary_db_volume_size = "10Gi"
31-
secondary_db_volume_size = "10Gi"
32-
secondary_db_replica_count = 2
24+
name = "mysql"
25+
values_yaml = ""
26+
environment = "prod"
27+
architecture = "replication"
28+
storage_class_name = "gp3"
29+
custom_user_username = "admin"
30+
primary_db_volume_size = "10Gi"
31+
secondary_db_volume_size = "10Gi"
32+
secondary_db_replica_count = 2
33+
store_password_to_secret_manager = true
34+
}
35+
mysqldb_custom_credentials_enabled = true
36+
mysqldb_custom_credentials_config = {
37+
root_user = "root"
38+
root_password = "RJDRIFsYC8ZS1WQuV0ps"
39+
custom_username = "admin"
40+
custom_user_password = "NCPFUKEMd7rrWuvMAa73"
41+
replication_user = "replicator"
42+
replication_password = "nvAHhm1uGQNYWVw6ZyAH"
43+
exporter_user = "mysqld_exporter"
44+
exporter_password = "ZawhvpueAehRdKFlbjaq"
3345
}
3446
mysqldb_backup_enabled = true
3547
mysqldb_backup_config = {
@@ -61,7 +73,7 @@ The required IAM permissions to create resources from this module can be found [
6173
5. To deploy Prometheus/Grafana, please follow the installation instructions for each tool in their respective documentation.
6274
6. Once Prometheus and Grafana are deployed, the exporter can be configured to scrape metrics data from your application or system and send it to Prometheus.
6375
7. Finally, you can use Grafana to create custom dashboards and visualize the metrics data collected by Prometheus.
64-
8. This module is compatible with EKS version 1.23, which is great news for users deploying the module on an EKS cluster running that version. Review the module's documentation, meet specific configuration requirements, and test thoroughly after deployment to ensure everything works as expected.
76+
8. This module is compatible with EKS version 1.23,1.24,1.25,1.26 and 1.27, which is great news for users deploying the module on an EKS cluster running that version. Review the module's documentation, meet specific configuration requirements, and test thoroughly after deployment to ensure everything works as expected.
6577
<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
6678
## Requirements
6779

@@ -71,6 +83,7 @@ No requirements.
7183

7284
| Name | Version |
7385
|------|---------|
86+
| <a name="provider_aws"></a> [aws](#provider\_aws) | n/a |
7487
| <a name="provider_helm"></a> [helm](#provider\_helm) | n/a |
7588
| <a name="provider_kubernetes"></a> [kubernetes](#provider\_kubernetes) | n/a |
7689
| <a name="provider_random"></a> [random](#provider\_random) | n/a |
@@ -86,6 +99,8 @@ No requirements.
8699

87100
| Name | Type |
88101
|------|------|
102+
| [aws_secretsmanager_secret.mysql_user_password](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/secretsmanager_secret) | resource |
103+
| [aws_secretsmanager_secret_version.mysql_user_password](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/secretsmanager_secret_version) | resource |
89104
| [helm_release.mysqldb](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
90105
| [helm_release.mysqldb_backup](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
91106
| [helm_release.mysqldb_restore](https://registry.terraform.io/providers/hashicorp/helm/latest/docs/resources/release) | resource |
@@ -106,7 +121,9 @@ No requirements.
106121
| <a name="input_create_namespace"></a> [create\_namespace](#input\_create\_namespace) | Specify whether or not to create the namespace if it does not already exist. Set it to true to create the namespace. | `string` | `true` | no |
107122
| <a name="input_mysqldb_backup_config"></a> [mysqldb\_backup\_config](#input\_mysqldb\_backup\_config) | configuration options for MySQL database backups. It includes properties such as the S3 bucket URI, the S3 bucket region, and the cron expression for full backups. | `any` | <pre>{<br> "bucket_uri": "",<br> "cron_for_full_backup": "",<br> "s3_bucket_region": ""<br>}</pre> | no |
108123
| <a name="input_mysqldb_backup_enabled"></a> [mysqldb\_backup\_enabled](#input\_mysqldb\_backup\_enabled) | Specifies whether to enable backups for MySQL database. | `bool` | `false` | no |
109-
| <a name="input_mysqldb_config"></a> [mysqldb\_config](#input\_mysqldb\_config) | Specify the configuration settings for MySQL, including the name, environment, storage options, replication settings, and custom YAML values. | `any` | <pre>{<br> "architecture": "",<br> "custom_user_username": "",<br> "environment": "",<br> "name": "",<br> "primary_db_volume_size": "",<br> "secondary_db_replica_count": 1,<br> "secondary_db_volume_size": "",<br> "storage_class_name": "",<br> "values_yaml": ""<br>}</pre> | no |
124+
| <a name="input_mysqldb_config"></a> [mysqldb\_config](#input\_mysqldb\_config) | Specify the configuration settings for MySQL, including the name, environment, storage options, replication settings, and custom YAML values. | `any` | <pre>{<br> "architecture": "",<br> "custom_user_username": "",<br> "environment": "",<br> "name": "",<br> "primary_db_volume_size": "",<br> "secondary_db_replica_count": 1,<br> "secondary_db_volume_size": "",<br> "storage_class_name": "",<br> "store_password_to_secret_manager": true,<br> "values_yaml": ""<br>}</pre> | no |
125+
| <a name="input_mysqldb_custom_credentials_config"></a> [mysqldb\_custom\_credentials\_config](#input\_mysqldb\_custom\_credentials\_config) | Specify the configuration settings for MySQL to pass custom credentials during creation | `any` | <pre>{<br> "custom_user_password": "",<br> "custom_username": "",<br> "exporter_password": "",<br> "exporter_user": "",<br> "replication_password": "",<br> "replication_user": "",<br> "root_password": "",<br> "root_user": ""<br>}</pre> | no |
126+
| <a name="input_mysqldb_custom_credentials_enabled"></a> [mysqldb\_custom\_credentials\_enabled](#input\_mysqldb\_custom\_credentials\_enabled) | Specifies whether to enable custom credentials for MySQL database. | `bool` | `false` | no |
110127
| <a name="input_mysqldb_exporter_enabled"></a> [mysqldb\_exporter\_enabled](#input\_mysqldb\_exporter\_enabled) | Specify whether or not to deploy Mysql exporter to collect Mysql metrics for monitoring in Grafana. | `bool` | `false` | no |
111128
| <a name="input_mysqldb_restore_config"></a> [mysqldb\_restore\_config](#input\_mysqldb\_restore\_config) | Configuration options for restoring dump to the MySQL database. | `any` | <pre>{<br> "bucket_uri": "",<br> "file_name": "",<br> "s3_bucket_region": ""<br>}</pre> | no |
112129
| <a name="input_mysqldb_restore_enabled"></a> [mysqldb\_restore\_enabled](#input\_mysqldb\_restore\_enabled) | Specifies whether to enable restoring dump to the MySQL database. | `bool` | `false` | no |
@@ -118,7 +135,8 @@ No requirements.
118135

119136
| Name | Description |
120137
|------|-------------|
121-
| <a name="output_mysqldb"></a> [mysqldb](#output\_mysqldb) | Mysql\_Info |
138+
| <a name="output_mysqldb_credential"></a> [mysqldb\_credential](#output\_mysqldb\_credential) | MySQL credentials used for accessing the MySQL database. |
139+
| <a name="output_mysqldb_endpoints"></a> [mysqldb\_endpoints](#output\_mysqldb\_endpoints) | MySQL endpoints in the Kubernetes cluster. |
122140
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
123141

124142
## Contribution & Issue Reporting

examples/complete/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,5 +47,6 @@ No inputs.
4747

4848
| Name | Description |
4949
|------|-------------|
50-
| <a name="output_mysql_configuration"></a> [mysql\_configuration](#output\_mysql\_configuration) | Mysql\_Info |
50+
| <a name="output_mysql_credential"></a> [mysql\_credential](#output\_mysql\_credential) | MySQL credentials used for accessing the MySQL database. |
51+
| <a name="output_mysql_endpoints"></a> [mysql\_endpoints](#output\_mysql\_endpoints) | MySQL endpoints in the Kubernetes cluster. |
5152
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->

examples/complete/main.tf

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,35 @@ locals {
77
Expires = "Never"
88
Department = "Engineering"
99
}
10+
store_password_to_secret_manager = true
1011
}
1112

1213
module "mysql" {
1314
source = "squareops/mysql/kubernetes"
1415
cluster_name = ""
1516
project_id = "" #for gcp
1617
mysqldb_config = {
17-
name = local.name
18-
values_yaml = file("./helm/values.yaml")
19-
environment = local.environment
20-
architecture = "replication"
21-
storage_class_name = "standard"
22-
custom_user_username = "admin"
23-
primary_db_volume_size = "10Gi"
24-
secondary_db_volume_size = "10Gi"
25-
secondary_db_replica_count = 2
18+
name = local.name
19+
values_yaml = file("./helm/values.yaml")
20+
environment = local.environment
21+
architecture = "replication"
22+
storage_class_name = "gp3"
23+
custom_user_username = "admin"
24+
primary_db_volume_size = "10Gi"
25+
secondary_db_volume_size = "10Gi"
26+
secondary_db_replica_count = 2
27+
store_password_to_secret_manager = local.store_password_to_secret_manager
28+
}
29+
mysqldb_custom_credentials_enabled = true
30+
mysqldb_custom_credentials_config = {
31+
root_user = "root"
32+
root_password = "RJDRIFsYC8ZS1WQuV0ps"
33+
custom_username = "admin"
34+
custom_user_password = "NCPFUKEMd7rrWuvMAa73"
35+
replication_user = "replicator"
36+
replication_password = "nvAHhm1uGQNYWVw6ZyAH"
37+
exporter_user = "mysqld_exporter"
38+
exporter_password = "ZawhvpueAehRdKFlbjaq"
2639
}
2740
bucket_provider_type = "gcs"
2841
mysqldb_backup_enabled = true

examples/complete/output.tf

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
output "mysql_configuration" {
2-
value = module.mysql.mysqldb
3-
description = "Mysql_Info"
1+
output "mysql_endpoints" {
2+
value = module.mysql.mysqldb_endpoints
3+
description = "MySQL endpoints in the Kubernetes cluster."
4+
}
5+
6+
output "mysql_credential" {
7+
value = local.store_password_to_secret_manager ? null : module.mysql.mysqldb_credential
8+
description = "MySQL credentials used for accessing the MySQL database."
49
}

examples/complete/provider-aws.tf

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ provider "s3" {
55
}
66
}
77

8-
98
data "aws_eks_cluster" "cluster" {
109
name = ""
1110
}
@@ -14,19 +13,16 @@ data "aws_eks_cluster_auth" "cluster" {
1413
name = ""
1514
}
1615

17-
1816
provider "kubernetes" {
1917
host = data.aws_eks_cluster.cluster.endpoint
2018
cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority.0.data)
2119
token = data.aws_eks_cluster_auth.cluster.token
22-
2320
}
2421

2522
provider "helm" {
2623
kubernetes {
2724
host = data.aws_eks_cluster.cluster.endpoint
2825
cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority.0.data)
2926
token = data.aws_eks_cluster_auth.cluster.token
30-
3127
}
3228
}

examples/complete/provider-gcp.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ provider "helm" {
1818
token = data.google_client_config.default.access_token
1919
cluster_ca_certificate = base64decode(data.google_container_cluster.primary.master_auth.0.cluster_ca_certificate)
2020
}
21-
}
21+
}

main.tf

Lines changed: 56 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,60 @@
11

22

33
resource "random_password" "mysqldb_root_password" {
4+
count = var.mysqldb_custom_credentials_enabled ? 0 : 1
45
length = 20
56
special = false
67
}
78

89
resource "random_password" "mysqldb_custom_user_password" {
10+
count = var.mysqldb_custom_credentials_enabled ? 0 : 1
911
length = 20
1012
special = false
1113
}
1214

1315
resource "random_password" "mysqldb_replication_user_password" {
16+
count = var.mysqldb_custom_credentials_enabled ? 0 : 1
1417
length = 20
1518
special = false
1619
}
1720

1821
resource "random_password" "mysqldb_exporter_user_password" {
22+
count = var.mysqldb_custom_credentials_enabled ? 0 : 1
1923
length = 20
2024
special = false
2125
}
2226

27+
resource "aws_secretsmanager_secret" "mysql_user_password" {
28+
count = var.mysqldb_config.store_password_to_secret_manager ? 1 : 0
29+
name = format("%s/%s/%s", var.mysqldb_config.environment, var.mysqldb_config.name, "mysql")
30+
recovery_window_in_days = var.recovery_window_aws_secret
31+
}
32+
33+
resource "aws_secretsmanager_secret_version" "mysql_user_password" {
34+
count = var.mysqldb_config.store_password_to_secret_manager ? 1 : 0
35+
secret_id = aws_secretsmanager_secret.mysql_user_password[0].id
36+
secret_string = var.mysqldb_custom_credentials_enabled ? jsonencode(
37+
{
38+
"root_user" : "${var.mysqldb_custom_credentials_config.root_user}",
39+
"root_password" : "${var.mysqldb_custom_credentials_config.root_password}",
40+
"custom_username" : "${var.mysqldb_custom_credentials_config.custom_username}",
41+
"custom_user_password" : "${var.mysqldb_custom_credentials_config.custom_user_password}",
42+
"replication_user" : "${var.mysqldb_custom_credentials_config.replication_user}",
43+
"replication_password" : "${var.mysqldb_custom_credentials_config.replication_password}",
44+
"exporter_user" : "${var.mysqldb_custom_credentials_config.exporter_user}",
45+
"exporter_password" : "${var.mysqldb_custom_credentials_config.exporter_password}"
46+
}) : jsonencode(
47+
{
48+
"root_user" : "root",
49+
"root_password" : "${random_password.mysqldb_root_password[0].result}",
50+
"custom_username" : "${var.mysqldb_config.custom_user_username}",
51+
"custom_user_password" : "${random_password.mysqldb_custom_user_password[0].result}",
52+
"replication_user" : "replicator",
53+
"replication_password" : "${random_password.mysqldb_replication_user_password[0].result}",
54+
"exporter_user" : "mysqld_exporter",
55+
"exporter_password" : "${random_password.mysqldb_exporter_user_password[0].result}"
56+
})
57+
}
2358

2459
resource "kubernetes_namespace" "mysqldb" {
2560
count = var.create_namespace ? 1 : 0
@@ -44,41 +79,39 @@ resource "helm_release" "mysqldb" {
4479
primary_pod_size = var.mysqldb_config.primary_db_volume_size,
4580
secondary_pod_size = var.mysqldb_config.secondary_db_volume_size,
4681
storage_class_name = var.mysqldb_config.storage_class_name,
47-
custom_user_username = var.mysqldb_config.custom_user_username,
48-
custom_user_password = random_password.mysqldb_custom_user_password.result,
49-
replication_password = random_password.mysqldb_replication_user_password.result,
50-
mysqldb_root_password = random_password.mysqldb_root_password.result,
82+
custom_user_username = var.mysqldb_custom_credentials_enabled ? var.mysqldb_custom_credentials_config.custom_username : var.mysqldb_config.custom_user_username,
83+
custom_user_password = var.mysqldb_custom_credentials_enabled ? var.mysqldb_custom_credentials_config.custom_user_password : random_password.mysqldb_custom_user_password[0].result,
84+
replication_password = var.mysqldb_custom_credentials_enabled ? var.mysqldb_custom_credentials_config.replication_password : random_password.mysqldb_replication_user_password[0].result,
85+
mysqldb_root_password = var.mysqldb_custom_credentials_enabled ? var.mysqldb_custom_credentials_config.root_password : random_password.mysqldb_root_password[0].result,
5186
mysqldb_exporter_enabled = var.mysqldb_exporter_enabled,
5287
service_monitor_namespace = var.namespace
53-
metrics_exporter_password = random_password.mysqldb_exporter_user_password.result,
88+
metrics_exporter_password = var.mysqldb_custom_credentials_enabled ? var.mysqldb_custom_credentials_config.exporter_password : random_password.mysqldb_exporter_user_password[0].result,
5489
secondary_pod_replica_count = var.mysqldb_config.secondary_db_replica_count
5590
}),
5691
var.mysqldb_config.values_yaml
5792
]
5893
}
5994

6095
module "aws" {
61-
source = "./provider/aws"
62-
count = var.bucket_provider_type == "s3" ? 1 : 0
63-
mysqldb_config = var.mysqldb_config
64-
recovery_window_aws_secret = var.recovery_window_aws_secret
65-
cluster_name = var.cluster_name
66-
root_password = random_password.mysqldb_root_password.result
67-
custom_user_password = random_password.mysqldb_custom_user_password.result
68-
replication_password = random_password.mysqldb_replication_user_password.result
69-
exporter_password = random_password.mysqldb_exporter_user_password.result
96+
source = "./provider/aws"
97+
count = var.bucket_provider_type == "s3" ? 1 : 0
98+
mysqldb_config = var.mysqldb_config
99+
recovery_window_aws_secret = var.recovery_window_aws_secret
100+
cluster_name = var.cluster_name
101+
store_password_to_secret_manager = var.store_password_to_secret_manager
102+
mysqldb_custom_credentials_enabled = var.mysqldb_custom_credentials_enabled
103+
mysqldb_custom_credentials_config = var.mysqldb_custom_credentials_config
70104
}
71105

72106
module "gcp" {
73-
source = "./provider/gcp"
74-
count = var.bucket_provider_type == "gcs" ? 1 : 0
75-
project_id = var.project_id
76-
environment = var.mysqldb_config.environment
77-
mysqldb_config = var.mysqldb_config
78-
root_password = random_password.mysqldb_root_password.result
79-
custom_user_password = random_password.mysqldb_custom_user_password.result
80-
replication_password = random_password.mysqldb_replication_user_password.result
81-
exporter_password = random_password.mysqldb_exporter_user_password.result
107+
source = "./provider/gcp"
108+
count = var.bucket_provider_type == "gcs" ? 1 : 0
109+
project_id = var.project_id
110+
environment = var.mysqldb_config.environment
111+
mysqldb_config = var.mysqldb_config
112+
store_password_to_secret_manager = var.store_password_to_secret_manager
113+
mysqldb_custom_credentials_enabled = var.mysqldb_custom_credentials_enabled
114+
mysqldb_custom_credentials_config = var.mysqldb_custom_credentials_config
82115
}
83116

84117
resource "helm_release" "mysqldb_backup" {

0 commit comments

Comments
 (0)