From 201c5a13587cf1a7e9b01a52f4a8a5ce5f5d9420 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miles=20St=C3=B6tzner?= Date: Tue, 3 Sep 2024 10:57:23 +0200 Subject: [PATCH] try terraform kubectl port forward --- .../mysql-dbms/kubernetes-cluster/index.ts | 2 + .../mysql-dbms/kubernetes-cluster/index.ts | 101 +++++++++++++++++- 2 files changed, 101 insertions(+), 2 deletions(-) diff --git a/src/technologies/plugins/rules/generators/mysql-database/ansible/mysql-dbms/kubernetes-cluster/index.ts b/src/technologies/plugins/rules/generators/mysql-database/ansible/mysql-dbms/kubernetes-cluster/index.ts index 30090714f..5e37d0a31 100644 --- a/src/technologies/plugins/rules/generators/mysql-database/ansible/mysql-dbms/kubernetes-cluster/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-database/ansible/mysql-dbms/kubernetes-cluster/index.ts @@ -6,6 +6,8 @@ import { MetadataUnfurl, } from '#technologies/plugins/rules/utils' +// TODO: use k8s auth + const generator: ImplementationGenerator = { component: 'mysql.database', technology: 'ansible', diff --git a/src/technologies/plugins/rules/generators/mysql-database/terraform/mysql-dbms/kubernetes-cluster/index.ts b/src/technologies/plugins/rules/generators/mysql-database/terraform/mysql-dbms/kubernetes-cluster/index.ts index 889cb9a25..75641390d 100644 --- a/src/technologies/plugins/rules/generators/mysql-database/terraform/mysql-dbms/kubernetes-cluster/index.ts +++ b/src/technologies/plugins/rules/generators/mysql-database/terraform/mysql-dbms/kubernetes-cluster/index.ts @@ -1,7 +1,14 @@ import {ImplementationGenerator} from '#technologies/plugins/rules/types' -import {KubernetesCredentials, MetadataGenerated, MetadataUnfurl} from '#technologies/plugins/rules/utils' +import { + KubernetesCredentials, + MetadataGenerated, + MetadataUnfurl, + TerraformStandardOperations, +} from '#technologies/plugins/rules/utils' -// TODO: next: implement this +// TODO: next: test this + +// TODO: use k8s auth /** * Official Kubernetes provider does not provide "kubectl exec", https://registry.terraform.io/providers/hashicorp/kubernetes @@ -35,6 +42,96 @@ const generator: ImplementationGenerator = { properties: { ...KubernetesCredentials(), }, + interfaces: { + ...TerraformStandardOperations(), + defaults: { + inputs: { + main: { + terraform: [ + { + required_providers: [ + { + mysql: { + source: 'petoju/mysql', + version: '3.0.48', + }, + }, + ], + }, + ], + provider: { + mysql: [ + { + endpoint: '${terraform_data.forward_port.endpoint}', + password: '{{ HOST.dbms_password }}', + username: 'root', + }, + ], + }, + resource: { + terraform_data: { + forward_port: [ + { + input: { + endpoint: '127.0.0.1:23306', + }, + provisioner: { + 'local-exec': { + command: [ + 'nohup kubectl port-forward service/{{ HOST.dbms_name }} 23306:3306 &', + 'sleep 5s', + ].join('\n'), + interpreter: ['/bin/bash', '-c'], + }, + }, + }, + ], + + unforward_port: [ + { + depends_on: ['mysql_grant.user'], + provisioner: { + 'local-exec': { + command: + 'pkill -f "kubectl port-forward service/{{ HOST.dbms_name }}"', + interpreter: ['/bin/bash', '-c'], + }, + }, + }, + ], + }, + mysql_database: { + database: [ + { + name: '{{ SELF.database_name }}', + }, + ], + }, + mysql_user: { + user: [ + { + host: '%', + plaintext_password: '{{ SELF.database_password }}', + user: '{{ SELF.database_user }}', + }, + ], + }, + mysql_grant: { + user: [ + { + database: '{{ SELF.database_name }}', + host: '%', + table: '*', + privileges: ['ALL'], + user: '${mysql_user.user.user}', + }, + ], + }, + }, + }, + }, + }, + }, } }, }