Skip to content

Commit 08188b1

Browse files
authored
Merge pull request #8 from Ad-squareops/gcp
added app version, custom db, namespace enable/disable param
2 parents b0b322a + db53c1a commit 08188b1

File tree

15 files changed

+96
-54
lines changed

15 files changed

+96
-54
lines changed

IAM.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,4 @@ permissions = [
8282
"resourcemanager.projects.getIamPolicy",
8383
"resourcemanager.projects.setIamPolicy"
8484
]
85-
```
85+
```

README.md

Lines changed: 47 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,32 @@ This module allows you to easily deploy a MySQL database on Kubernetes using Hel
1717
## Usage Example
1818

1919
```hcl
20+
locals {
21+
name = "mysql"
22+
region = "us-east-2"
23+
environment = "prod"
24+
additional_tags = {
25+
Owner = "organization_name"
26+
Expires = "Never"
27+
Department = "Engineering"
28+
}
29+
create_namespace = true
30+
namespace = "mysql"
31+
store_password_to_secret_manager = false
32+
mysqldb_custom_credentials_enabled = true
33+
mysqldb_custom_credentials_config = {
34+
root_user = "root"
35+
root_password = "RJDRIFsYC8ZS1WQuV0ps"
36+
custom_username = "admin"
37+
custom_user_password = "NCPFUKEMd7rrWuvMAa73"
38+
replication_user = "replicator"
39+
replication_password = "nvAHhm1uGQNYWVw6ZyAH"
40+
exporter_user = "mysqld_exporter"
41+
exporter_password = "ZawhvpueAehRdKFlbjaq"
42+
}
43+
custom_user_username = "custom"
44+
}
45+
2046
module "aws" {
2147
source = "squareops/mysql/kubernetes//modules/resources/aws"
2248
cluster_name = "prod-eks"
@@ -38,52 +64,48 @@ module "aws" {
3864
}
3965
4066
module "mysql" {
41-
source = "squareops/mysql/kubernetes"
67+
source = "squareops/mysql/kubernetes"
68+
create_namespace = local.create_namespace
69+
namespace = local.namespace
4270
mysqldb_config = {
4371
name = "mysql"
44-
values_yaml = ""
72+
app_version = "8.0.29-debian-11-r9"
4573
environment = "prod"
74+
values_yaml = ""
4675
architecture = "replication"
47-
storage_class_name = "gp3"
48-
custom_user_username = "admin"
76+
custom_database = "test_db"
77+
storage_class_name = "gp2"
78+
custom_user_username = local.mysqldb_custom_credentials_enabled ? "" : local.custom_user_username
4979
primary_db_volume_size = "10Gi"
5080
secondary_db_volume_size = "10Gi"
5181
secondary_db_replica_count = 2
5282
store_password_to_secret_manager = true
5383
}
54-
mysqldb_custom_credentials_enabled = true
55-
mysqldb_custom_credentials_config = {
56-
root_user = "root"
57-
root_password = "RJDRIFsYC8ZS1WQuV0ps"
58-
custom_username = "admin"
59-
custom_user_password = "NCPFUKEMd7rrWuvMAa73"
60-
replication_user = "replicator"
61-
replication_password = "nvAHhm1uGQNYWVw6ZyAH"
62-
exporter_user = "mysqld_exporter"
63-
exporter_password = "ZawhvpueAehRdKFlbjaq"
64-
}
65-
root_password = mysqldb_custom_credentials_enabled ? "" : module.aws.root_password
66-
metric_exporter_pasword = mysqldb_custom_credentials_enabled ? "" : module.aws.metric_exporter_pasword
67-
mysqldb_replication_user_password = mysqldb_custom_credentials_enabled ? "" : module.aws.mysqldb_replication_user_password
68-
custom_user_password = mysqldb_custom_credentials_enabled ? "" : module.aws.custom_user_password
84+
mysqldb_custom_credentials_enabled = local.mysqldb_custom_credentials_enabled
85+
mysqldb_custom_credentials_config = local.mysqldb_custom_credentials_config
86+
root_password = local.mysqldb_custom_credentials_enabled ? "" : module.aws.root_password
87+
metric_exporter_pasword = local.mysqldb_custom_credentials_enabled ? "" : module.aws.metric_exporter_pasword
88+
mysqldb_replication_user_password = local.mysqldb_custom_credentials_enabled ? "" : module.aws.mysqldb_replication_user_password
89+
custom_user_password = local.mysqldb_custom_credentials_enabled ? "" : module.aws.custom_user_password
6990
bucket_provider_type = "s3"
7091
iam_role_arn_backup = module.aws.iam_role_arn_backup
7192
mysqldb_backup_enabled = true
7293
mysqldb_backup_config = {
73-
bucket_uri = "backup-bucket-uri"
74-
s3_bucket_region = "backup-bucket-region"
75-
cron_for_full_backup = "* */12 * * *"
94+
bucket_uri = "s3://bucket_name"
95+
s3_bucket_region = ""
96+
cron_for_full_backup = "*/5 * * * *"
7697
}
7798
mysqldb_restore_enabled = true
7899
iam_role_arn_restore = module.aws.iam_role_arn_restore
79100
mysqldb_restore_config = {
80-
bucket_uri = "restore-bucket-uri/restore-file-name"
81-
file_name = "restore-file-name"
82-
s3_bucket_region = "restore-bucket-region"
101+
bucket_uri = "s3://bucket_name/mysqldump_20230710_120501.zip"
102+
file_name = "mysqldump_20230710_120501.zip"
103+
s3_bucket_region = ""
83104
}
84105
mysqldb_exporter_enabled = true
85106
}
86107
108+
87109
```
88110
- Refer [AWS examples](https://github.com/squareops/terraform-kubernetes-mysql/tree/main/examples/complete/aws) for more details.
89111
- Refer [Azure examples](https://github.com/squareops/terraform-kubernetes-mysql/tree/main/examples/complete/azure) for more details.

examples/complete/aws/main.tf

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ locals {
77
Expires = "Never"
88
Department = "Engineering"
99
}
10-
store_password_to_secret_manager = true
11-
mysqldb_custom_credentials_enabled = false
10+
create_namespace = false
11+
namespace = "mysql"
12+
store_password_to_secret_manager = false
13+
mysqldb_custom_credentials_enabled = true
1214
mysqldb_custom_credentials_config = {
1315
root_user = "root"
1416
root_password = "RJDRIFsYC8ZS1WQuV0ps"
@@ -24,7 +26,7 @@ locals {
2426

2527
module "aws" {
2628
source = "squareops/mysql/kubernetes//modules/resources/aws"
27-
cluster_name = ""
29+
cluster_name = "cluster-name"
2830
environment = local.environment
2931
name = local.name
3032
store_password_to_secret_manager = local.store_password_to_secret_manager
@@ -34,13 +36,17 @@ module "aws" {
3436
}
3537

3638
module "mysql" {
37-
source = "squareops/mysql/kubernetes"
39+
source = "squareops/mysql/kubernetes"
40+
create_namespace = local.create_namespace
41+
namespace = local.namespace
3842
mysqldb_config = {
3943
name = local.name
4044
values_yaml = file("./helm/values.yaml")
45+
app_version = "8.0.29-debian-11-r9"
4146
environment = local.environment
4247
architecture = "replication"
43-
storage_class_name = "gp3"
48+
custom_database = "test_db"
49+
storage_class_name = "gp2"
4450
custom_user_username = local.mysqldb_custom_credentials_enabled ? "" : local.custom_user_username
4551
primary_db_volume_size = "10Gi"
4652
secondary_db_volume_size = "10Gi"

examples/complete/azure/helm/values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,4 @@ secondary:
1818
- key: "Addons-Services"
1919
operator: In
2020
values:
21-
- "true"
21+
- "true"

examples/complete/azure/main.tf

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ locals {
77
Expires = "Never"
88
Department = "Engineering"
99
}
10+
create_namespace = true
11+
namespace = "mysql"
1012
store_password_to_secret_manager = true
1113
mysqldb_custom_credentials_enabled = false
1214
mysqldb_custom_credentials_config = {
@@ -40,12 +42,16 @@ module "azure" {
4042
}
4143

4244
module "mysql" {
43-
source = "squareops/mysql/kubernetes"
45+
source = "squareops/mysql/kubernetes"
46+
create_namespace = local.create_namespace
47+
namespace = local.namespace
4448
mysqldb_config = {
4549
name = local.name
4650
values_yaml = file("./helm/values.yaml")
4751
environment = local.environment
52+
app_version = "8.0.29-debian-11-r9"
4853
architecture = "replication"
54+
custom_database = "test_db"
4955
storage_class_name = "infra-service-sc"
5056
custom_user_username = local.mysqldb_custom_credentials_enabled ? "" : local.custom_user_username
5157
primary_db_volume_size = "10Gi"

examples/complete/azure/outputs.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ output "mysql_endpoints" {
66
output "mysql_credential" {
77
value = local.store_password_to_secret_manager ? null : module.mysql.mysqldb_credential
88
description = "MySQL credentials used for accessing the MySQL database."
9-
}
9+
}

examples/complete/gcp/main.tf

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ locals {
77
Expires = "Never"
88
Department = "Engineering"
99
}
10+
create_namespace = true
11+
namespace = "mysql"
1012
store_password_to_secret_manager = true
1113
mysqldb_custom_credentials_enabled = false
1214
mysqldb_custom_credentials_config = {
@@ -34,12 +36,16 @@ module "gcp" {
3436
}
3537

3638
module "mysql" {
37-
source = "squareops/mysql/kubernetes"
39+
source = "squareops/mysql/kubernetes"
40+
create_namespace = local.create_namespace
41+
namespace = local.namespace
3842
mysqldb_config = {
3943
name = local.name
4044
values_yaml = file("./helm/values.yaml")
4145
environment = local.environment
46+
app_version = "8.0.29-debian-11-r9"
4247
architecture = "replication"
48+
custom_database = "test_db"
4349
storage_class_name = "standard"
4450
custom_user_username = local.mysqldb_custom_credentials_enabled ? "" : local.custom_user_username
4551
primary_db_volume_size = "10Gi"

helm/values/mysqldb/values.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ auth:
112112
## @param auth.database Name for a custom database to create
113113
## ref: https://github.com/bitnami/bitnami-docker-mysql/blob/master/README.md#creating-a-database-on-first-run
114114
##
115-
database: "my_database"
115+
database: ${custom_database}
116116
## @param auth.username Name for a custom user to create
117117
## ref: https://github.com/bitnami/bitnami-docker-mysql/blob/master/README.md#creating-a-database-user-on-first-run
118118
##

main.tf

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ resource "helm_release" "mysqldb" {
1818
templatefile("${path.module}/helm/values/mysqldb/values.yaml", {
1919
app_version = var.app_version,
2020
architecture = var.mysqldb_config.architecture,
21+
custom_database = var.mysqldb_config.custom_database,
2122
primary_pod_size = var.mysqldb_config.primary_db_volume_size,
2223
secondary_pod_size = var.mysqldb_config.secondary_db_volume_size,
2324
storage_class_name = var.mysqldb_config.storage_class_name,
@@ -26,7 +27,7 @@ resource "helm_release" "mysqldb" {
2627
replication_password = var.mysqldb_custom_credentials_enabled ? var.mysqldb_custom_credentials_config.replication_password : var.mysqldb_replication_user_password,
2728
mysqldb_root_password = var.mysqldb_custom_credentials_enabled ? var.mysqldb_custom_credentials_config.root_password : var.root_password,
2829
mysqldb_exporter_enabled = var.mysqldb_exporter_enabled,
29-
service_monitor_namespace = var.namespace
30+
service_monitor_namespace = var.namespace,
3031
metrics_exporter_password = var.mysqldb_custom_credentials_enabled ? var.mysqldb_custom_credentials_config.exporter_password : var.metric_exporter_pasword,
3132
secondary_pod_replica_count = var.mysqldb_config.secondary_db_replica_count
3233
}),
@@ -43,15 +44,15 @@ resource "helm_release" "mysqldb_backup" {
4344
namespace = var.namespace
4445
values = [
4546
templatefile("${path.module}/helm/values/backup/values.yaml", {
46-
bucket_uri = var.mysqldb_backup_config.bucket_uri,
47-
s3_bucket_region = var.bucket_provider_type == "s3" ? var.mysqldb_backup_config.s3_bucket_region : "",
48-
cron_for_full_backup = var.mysqldb_backup_config.cron_for_full_backup,
49-
custom_user_username = "root",
50-
bucket_provider_type = var.bucket_provider_type,
47+
bucket_uri = var.mysqldb_backup_config.bucket_uri,
48+
s3_bucket_region = var.bucket_provider_type == "s3" ? var.mysqldb_backup_config.s3_bucket_region : "",
49+
cron_for_full_backup = var.mysqldb_backup_config.cron_for_full_backup,
50+
custom_user_username = "root",
51+
bucket_provider_type = var.bucket_provider_type,
5152
azure_storage_account_name = var.bucket_provider_type == "azure" ? var.azure_storage_account_name : ""
5253
azure_storage_account_key = var.bucket_provider_type == "azure" ? var.azure_storage_account_key : ""
5354
azure_container_name = var.bucket_provider_type == "azure" ? var.azure_container_name : ""
54-
annotations = var.bucket_provider_type == "s3" ? "eks.amazonaws.com/role-arn: ${var.iam_role_arn_backup}" : "iam.gke.io/gcp-service-account: ${var.service_account_backup}"
55+
annotations = var.bucket_provider_type == "s3" ? "eks.amazonaws.com/role-arn: ${var.iam_role_arn_backup}" : "iam.gke.io/gcp-service-account: ${var.service_account_backup}"
5556
})
5657
]
5758
}
@@ -67,15 +68,15 @@ resource "helm_release" "mysqldb_restore" {
6768
namespace = var.namespace
6869
values = [
6970
templatefile("${path.module}/helm/values/restore/values.yaml", {
70-
bucket_uri = var.mysqldb_restore_config.bucket_uri,
71-
file_name = var.mysqldb_restore_config.file_name,
72-
s3_bucket_region = var.bucket_provider_type == "s3" ? var.mysqldb_restore_config.s3_bucket_region : "",
73-
custom_user_username = "root",
74-
bucket_provider_type = var.bucket_provider_type,
71+
bucket_uri = var.mysqldb_restore_config.bucket_uri,
72+
file_name = var.mysqldb_restore_config.file_name,
73+
s3_bucket_region = var.bucket_provider_type == "s3" ? var.mysqldb_restore_config.s3_bucket_region : "",
74+
custom_user_username = "root",
75+
bucket_provider_type = var.bucket_provider_type,
7576
azure_storage_account_name = var.bucket_provider_type == "azure" ? var.azure_storage_account_name : ""
7677
azure_storage_account_key = var.bucket_provider_type == "azure" ? var.azure_storage_account_key : ""
7778
azure_container_name = var.bucket_provider_type == "azure" ? var.azure_container_name : ""
78-
annotations = var.bucket_provider_type == "s3" ? "eks.amazonaws.com/role-arn: ${var.iam_role_arn_restore}" : "iam.gke.io/gcp-service-account: ${var.service_account_restore}"
79+
annotations = var.bucket_provider_type == "s3" ? "eks.amazonaws.com/role-arn: ${var.iam_role_arn_restore}" : "iam.gke.io/gcp-service-account: ${var.service_account_restore}"
7980
})
8081
]
8182
}

modules/backup/templates/service_account.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ apiVersion: v1
22
kind: ServiceAccount
33
metadata:
44
name: sa-mysql-backup
5-
namespace: mysqldb
5+
namespace: {{ .Release.Namespace }}
66
annotations:
77
{{ toYaml .Values.annotations | indent 4 }}

0 commit comments

Comments
 (0)