Skip to content

Commit f721fd4

Browse files
authored
Merge pull request #3 from ShibraAmin18/azure-dev
added support for azure
2 parents d5e9c0b + 9a9bcfb commit f721fd4

File tree

15 files changed

+505
-5
lines changed

15 files changed

+505
-5
lines changed

backup/templates/fullbackup-cronjob.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ spec:
1717
serviceAccountName: sa-mongo-backup
1818
containers:
1919
- name: backup-mongodb
20-
image: squareops/mongodb-backup:v3
20+
image: squareops/mongodb-backup:v5
2121
env:
2222
- name: MONGODB_URI
2323
value: mongodb://{{ .Values.auth.rootUser }}:{{ .Values.auth.rootPassword }}@mongodb-0.mongodb-headless.{{ .Release.Namespace }}.svc.cluster.local:27017

example/complete/azure/README.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
## Mongodb Example
2+
![squareops_avatar]
3+
4+
[squareops_avatar]: https://squareops.com/wp-content/uploads/2022/12/squareops-logo.png
5+
6+
### [SquareOps Technologies](https://squareops.com/) Your DevOps Partner for Accelerating cloud journey.
7+
<br>
8+
This example will be very useful for users who are new to a module and want to quickly learn how to use it. By reviewing the examples, users can gain a better understanding of how the module works, what features it supports, and how to customize it to their specific needs.
9+
10+
## Requirements
11+
12+
No requirements.
13+
14+
## Providers
15+
16+
| Name | Version |
17+
|------|---------|
18+
| <a name="provider_azurerm"></a> [azurerm](#provider\_azurerm) | 3.70.0 |
19+
20+
## Modules
21+
22+
| Name | Source | Version |
23+
|------|--------|---------|
24+
| <a name="module_azure"></a> [azure](#module\_azure) | squareops/mongodb/kubernetes//provider/azure | n/a |
25+
| <a name="module_mongodb"></a> [mongodb](#module\_mongodb) | squareops/mongodb/kubernetes | n/a |
26+
27+
## Resources
28+
29+
| Name | Type |
30+
|------|------|
31+
| [azurerm_kubernetes_cluster.primary](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/kubernetes_cluster) | data source |
32+
33+
## Inputs
34+
35+
No inputs.
36+
37+
## Outputs
38+
39+
| Name | Description |
40+
|------|-------------|
41+
| <a name="output_mongodb_credential"></a> [mongodb\_credential](#output\_mongodb\_credential) | MongoDB credentials used for accessing the MongoDB database. |
42+
| <a name="output_mongodb_endpoints"></a> [mongodb\_endpoints](#output\_mongodb\_endpoints) | MongoDB endpoints in the Kubernetes cluster. |
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
affinity:
2+
nodeAffinity:
3+
requiredDuringSchedulingIgnoredDuringExecution:
4+
nodeSelectorTerms:
5+
- matchExpressions:
6+
- key: "Addons-Services"
7+
operator: In
8+
values:
9+
- "true"

example/complete/azure/main.tf

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
locals {
2+
name = "mongo"
3+
region = "eastus"
4+
environment = "prod"
5+
additional_tags = {
6+
Owner = "organization_name"
7+
Expires = "Never"
8+
Department = "Engineering"
9+
}
10+
store_password_to_secret_manager = true
11+
mongodb_custom_credentials_enabled = true
12+
mongodb_custom_credentials_config = {
13+
root_user = "root"
14+
root_password = "NCPFUKEMd7rrWuvMAa73"
15+
metric_exporter_user = "mongodb_exporter"
16+
metric_exporter_password = "nvAHhm1uGQNYWVw6ZyAH"
17+
}
18+
19+
azure_storage_account_name = ""
20+
azure_container_name = ""
21+
}
22+
23+
module "azure" {
24+
source = "squareops/mongodb/kubernetes//provider/azure"
25+
resource_group_name = ""
26+
resource_group_location = ""
27+
name = local.name
28+
environment = local.environment
29+
mongodb_custom_credentials_enabled = local.mongodb_custom_credentials_enabled
30+
mongodb_custom_credentials_config = local.mongodb_custom_credentials_config
31+
store_password_to_secret_manager = local.store_password_to_secret_manager
32+
storage_account_name = local.azure_storage_account_name
33+
}
34+
35+
module "mongodb" {
36+
source = "squareops/mongodb/kubernetes"
37+
cluster_name = ""
38+
resource_group_name = ""
39+
resource_group_location = ""
40+
mongodb_config = {
41+
name = local.name
42+
values_yaml = file("./helm/values.yaml")
43+
volume_size = "10Gi"
44+
architecture = "replicaset"
45+
replica_count = 1
46+
environment = local.environment
47+
storage_class_name = "infra-service-sc"
48+
store_password_to_secret_manager = local.store_password_to_secret_manager
49+
}
50+
mongodb_custom_credentials_enabled = local.mongodb_custom_credentials_enabled
51+
mongodb_custom_credentials_config = local.mongodb_custom_credentials_config
52+
root_password = local.mongodb_custom_credentials_enabled ? "" : module.azure.root_password
53+
metric_exporter_pasword = local.mongodb_custom_credentials_enabled ? "" : module.azure.metric_exporter_pasword
54+
bucket_provider_type = "azure"
55+
mongodb_backup_enabled = false
56+
mongodb_backup_config = {
57+
bucket_uri = "https://${local.azure_storage_account_name}.blob.core.windows.net/${local.azure_container_name}"
58+
azure_storage_account_name = local.azure_storage_account_name
59+
azure_container_name = local.azure_container_name
60+
cron_for_full_backup = "* * 1 * *"
61+
}
62+
mongodb_restore_enabled = false
63+
mongodb_restore_config = {
64+
bucket_uri = "https://${local.azure_storage_account_name}.blob.core.windows.net/${local.azure_container_name}"
65+
azure_storage_account_name = local.azure_storage_account_name
66+
azure_container_name = local.azure_container_name
67+
file_name = "mongodumpfull_20230710_132301.gz"
68+
}
69+
mongodb_exporter_enabled = true
70+
}

example/complete/azure/output.tf

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
output "mongodb_endpoints" {
2+
value = module.mongodb.mongodb_endpoints
3+
description = "MongoDB endpoints in the Kubernetes cluster."
4+
}
5+
6+
output "mongodb_credential" {
7+
value = local.store_password_to_secret_manager ? null : module.mongodb.mongodb_credential
8+
description = "MongoDB credentials used for accessing the MongoDB database."
9+
}

example/complete/azure/provider.tf

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
provider "azurerm" {
2+
features {}
3+
}
4+
5+
data "azurerm_kubernetes_cluster" "primary" {
6+
name = ""
7+
resource_group_name = ""
8+
}
9+
10+
provider "kubernetes" {
11+
host = data.azurerm_kubernetes_cluster.primary.kube_config.0.host
12+
username = data.azurerm_kubernetes_cluster.primary.kube_config.0.username
13+
password = data.azurerm_kubernetes_cluster.primary.kube_config.0.password
14+
client_certificate = base64decode(data.azurerm_kubernetes_cluster.primary.kube_config.0.client_certificate)
15+
client_key = base64decode(data.azurerm_kubernetes_cluster.primary.kube_config.0.client_key)
16+
cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.primary.kube_config.0.cluster_ca_certificate)
17+
}
18+
19+
provider "helm" {
20+
kubernetes {
21+
host = data.azurerm_kubernetes_cluster.primary.kube_config.0.host
22+
client_key = base64decode(data.azurerm_kubernetes_cluster.primary.kube_config.0.client_key)
23+
client_certificate = base64decode(data.azurerm_kubernetes_cluster.primary.kube_config.0.client_certificate)
24+
cluster_ca_certificate = base64decode(data.azurerm_kubernetes_cluster.primary.kube_config.0.cluster_ca_certificate)
25+
}
26+
}

helm/values/backup/values.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@ auth:
66
backup:
77
bucket_uri: ${bucket_uri}
88
aws_default_region: ${s3_bucket_region}
9+
azure_storage_account_name: ${azure_storage_account_name}
10+
azure_storage_account_key: ${azure_storage_account_key}
11+
azure_container_name: ${azure_container_name}
912
cron_for_full_backup: "${cron_for_full_backup}"
1013

1114
annotations:
1215
${annotations}
1316

14-
bucket_provider_type: ${bucket_provider_type}
17+
bucket_provider_type: ${bucket_provider_type}

helm/values/restore/values.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ restore:
77
bucket_uri: ${bucket_uri}
88
file_name: ${file_name}
99
aws_default_region: ${s3_bucket_region}
10+
azure_storage_account_name: ${azure_storage_account_name}
11+
azure_storage_account_key: ${azure_storage_account_key}
12+
azure_container_name: ${azure_container_name}
1013

1114
annotations:
1215
${annotations}

main.tf

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,10 @@ resource "helm_release" "mongodb_backup" {
6060
s3_bucket_region = var.bucket_provider_type == "s3" ? var.mongodb_backup_config.s3_bucket_region : "",
6161
cron_for_full_backup = var.mongodb_backup_config.cron_for_full_backup,
6262
bucket_provider_type = var.bucket_provider_type,
63-
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}"
63+
azure_storage_account_name = var.bucket_provider_type == "azure" ? var.azure_storage_account_name : ""
64+
azure_storage_account_key = var.bucket_provider_type == "azure" ? var.azure_storage_account_key : ""
65+
azure_container_name = var.bucket_provider_type == "azure" ? var.azure_container_name : ""
66+
annotations = var.bucket_provider_type == "s3" ? "eks.amazonaws.com/role-arn : ${var.iam_role_arn_backup}" : var.bucket_provider_type == "gcs" ? "iam.gke.io/gcp-service-account: ${var.service_account_backup}" : var.bucket_provider_type == "azure" ? "azure.workload.identity/client-id: ${var.az_account_backup}" : ""
6467
})
6568
]
6669
}
@@ -80,7 +83,10 @@ resource "helm_release" "mongodb_restore" {
8083
file_name = var.mongodb_restore_config.file_name,
8184
s3_bucket_region = var.bucket_provider_type == "s3" ? var.mongodb_restore_config.s3_bucket_region : "",
8285
bucket_provider_type = var.bucket_provider_type,
83-
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}"
86+
azure_storage_account_name = var.bucket_provider_type == "azure" ? var.azure_storage_account_name : ""
87+
azure_storage_account_key = var.bucket_provider_type == "azure" ? var.azure_storage_account_key : ""
88+
azure_container_name = var.bucket_provider_type == "azure" ? var.azure_container_name : ""
89+
annotations = var.bucket_provider_type == "s3" ? "eks.amazonaws.com/role-arn : ${var.iam_role_arn_restore}" : var.bucket_provider_type == "gcs" ? "iam.gke.io/gcp-service-account: ${var.service_account_restore}" : var.bucket_provider_type == "azure" ? "azure.workload.identity/client-id: ${var.az_account_restore}" : ""
8490
})
8591
]
8692
}

provider/azure/README.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# Azure Mongodb Kubernetes Module
2+
## Requirements
3+
4+
No requirements.
5+
6+
## Providers
7+
8+
| Name | Version |
9+
|------|---------|
10+
| <a name="provider_azurerm"></a> [azurerm](#provider\_azurerm) | n/a |
11+
| <a name="provider_random"></a> [random](#provider\_random) | n/a |
12+
13+
## Modules
14+
15+
No modules.
16+
17+
## Resources
18+
19+
| Name | Type |
20+
|------|------|
21+
| [azurerm_key_vault.mongo-secret](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/key_vault) | resource |
22+
| [azurerm_key_vault_secret.mongo-secret](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/key_vault_secret) | resource |
23+
| [azurerm_role_assignment.pod_identity_assignment_backup](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/role_assignment) | resource |
24+
| [azurerm_role_assignment.secretadmin_backup](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/role_assignment) | resource |
25+
| [azurerm_role_assignment.secretadmin_restore](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/role_assignment) | resource |
26+
| [azurerm_role_assignment.service_account_token_creator_backup](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/role_assignment) | resource |
27+
| [azurerm_role_assignment.service_account_token_creator_restore](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/role_assignment) | resource |
28+
| [azurerm_user_assigned_identity.mongo_backup_identity](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/user_assigned_identity) | resource |
29+
| [azurerm_user_assigned_identity.mongo_restore_identity](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/user_assigned_identity) | resource |
30+
| [azurerm_user_assigned_identity.pod_identity_backup](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/user_assigned_identity) | resource |
31+
| [random_password.mongodb_exporter_password](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password) | resource |
32+
| [random_password.mongodb_root_password](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/password) | resource |
33+
| [azurerm_client_config.current](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/client_config) | data source |
34+
| [azurerm_subscription.current](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/subscription) | data source |
35+
| [azurerm_subscription.primary](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/subscription) | data source |
36+
37+
## Inputs
38+
39+
| Name | Description | Type | Default | Required |
40+
|------|-------------|------|---------|:--------:|
41+
| <a name="input_azure_uai_backup_name"></a> [azure\_uai\_backup\_name](#input\_azure\_uai\_backup\_name) | Azure User Assigned Identity name for backup | `string` | `"mongo-backup"` | no |
42+
| <a name="input_azure_uai_pod_identity_backup_name"></a> [azure\_uai\_pod\_identity\_backup\_name](#input\_azure\_uai\_pod\_identity\_backup\_name) | Azure User Assigned Identity name for pod identity backup | `string` | `"pod-identity-backup"` | no |
43+
| <a name="input_azure_uai_pod_identity_restore_name"></a> [azure\_uai\_pod\_identity\_restore\_name](#input\_azure\_uai\_pod\_identity\_restore\_name) | Azure User Assigned Identity name for pod identity restore | `string` | `"pod-identity-restore"` | no |
44+
| <a name="input_azure_uai_restore_name"></a> [azure\_uai\_restore\_name](#input\_azure\_uai\_restore\_name) | Azure User Assigned Identity name for restore | `string` | `"mongo-restore"` | no |
45+
| <a name="input_environment"></a> [environment](#input\_environment) | Environment in which the infrastructure is being deployed (e.g., production, staging, development) | `string` | `"test"` | no |
46+
| <a name="input_mongodb_config"></a> [mongodb\_config](#input\_mongodb\_config) | Specify the configuration settings for Mongodb, including the name, environment, storage options, replication settings, and custom YAML values. | `any` | <pre>{<br> "architecture": "",<br> "environment": "",<br> "name": "",<br> "replica_count": 2,<br> "storage_class_name": "",<br> "store_password_to_secret_manager": true,<br> "values_yaml": "",<br> "volume_size": ""<br>}</pre> | no |
47+
| <a name="input_mongodb_custom_credentials_config"></a> [mongodb\_custom\_credentials\_config](#input\_mongodb\_custom\_credentials\_config) | Specify the configuration settings for Mongodb to pass custom credentials during creation. | `any` | <pre>{<br> "metric_exporter_password": "",<br> "metric_exporter_user": "",<br> "root_password": "",<br> "root_user": ""<br>}</pre> | no |
48+
| <a name="input_mongodb_custom_credentials_enabled"></a> [mongodb\_custom\_credentials\_enabled](#input\_mongodb\_custom\_credentials\_enabled) | Specifies whether to enable custom credentials for MongoDB database. | `bool` | `false` | no |
49+
| <a name="input_name"></a> [name](#input\_name) | Name of all the resources | `string` | `""` | no |
50+
| <a name="input_resource_group_location"></a> [resource\_group\_location](#input\_resource\_group\_location) | Azure region | `string` | `"East US"` | no |
51+
| <a name="input_resource_group_name"></a> [resource\_group\_name](#input\_resource\_group\_name) | Azure Resource Group name | `string` | `""` | no |
52+
| <a name="input_storage_account_name"></a> [storage\_account\_name](#input\_storage\_account\_name) | Azure storage account name | `string` | `""` | no |
53+
| <a name="input_store_password_to_secret_manager"></a> [store\_password\_to\_secret\_manager](#input\_store\_password\_to\_secret\_manager) | Specifies whether to store the credentials in GCP secret manager. | `bool` | `false` | no |
54+
55+
## Outputs
56+
57+
| Name | Description |
58+
|------|-------------|
59+
| <a name="output_az_account_backup"></a> [az\_account\_backup](#output\_az\_account\_backup) | Azure User Assigned Identity for backup |
60+
| <a name="output_az_account_restore"></a> [az\_account\_restore](#output\_az\_account\_restore) | Azure User Assigned Identity for restore |
61+
| <a name="output_metric_exporter_pasword"></a> [metric\_exporter\_pasword](#output\_metric\_exporter\_pasword) | mongodb\_exporter user's password of MongoDB |
62+
| <a name="output_root_password"></a> [root\_password](#output\_root\_password) | Root user's password of MongoDB |

0 commit comments

Comments
 (0)