This is a DBaaC (Database as a Code) using Kubernetes Operator pattern.
There will be some CRDs
- Database
- Table
- check if table exists
- create table with defined columns
- alter existing columns
- add new columns
- remove old columns (is it safe?)
- use connection parameters from Database
- refator everything :-)
Sample Database:
apiVersion: db.pedag.io/v1
kind: Database
metadata:
name: adventureworks
spec:
name: AdventureWorks
server: localhost
port: 1433
user: sa
password: itssecret
Sample Table:
apiVersion: db.pedag.io/v1
kind: Table
metadata:
name: users-table
spec:
name: Users
databaseRef:
name: adventureworks
kind: Database
columns:
- name: Id
type: int not null identity(1,1)
- name: Name
type: varchar(50) not null
- name: Email
type: varchar(255) not null
- name: Active
type: bit not null default(0)
- name: Blocked
type: bit not null default(0)
Every Table must have a Database reference.
Database will be something like SQLDatabase, PostgresDatabase, MySQLDatabase, etc.
Not sure if we will use any orm (like xorm.io) or pure SQL.
2020-08-06T15:48:53.625-0300 INFO controller-runtime.metrics metrics server is starting to listen {"addr": ":8080"}
2020-08-06T15:48:53.626-0300 INFO setup starting manager
2020-08-06T15:48:53.626-0300 INFO controller-runtime.manager starting metrics server {"path": "/metrics"}
2020-08-06T15:48:53.626-0300 INFO controller-runtime.controller Starting EventSource {"controller": "table", "source": "kind source: /, Kind="}
2020-08-06T15:48:53.626-0300 INFO controller-runtime.controller Starting EventSource {"controller": "database", "source": "kind source: /, Kind="}
2020-08-06T15:48:53.727-0300 INFO controller-runtime.controller Starting Controller {"controller": "database"}
2020-08-06T15:48:53.727-0300 INFO controller-runtime.controller Starting workers {"controller": "database", "worker count": 1}
2020-08-06T15:48:53.727-0300 INFO controller-runtime.controller Starting Controller {"controller": "table"}
2020-08-06T15:48:53.727-0300 INFO controller-runtime.controller Starting workers {"controller": "table", "worker count": 1}
2020-08-06T15:48:53.739-0300 DEBUG controller-runtime.controller Successfully Reconciled {"controller": "database", "request": "default/adventureworks"}
2020-08-06T15:48:53.781-0300 INFO controllers.Table Creating table [Addresses] on database. {"table": "default/addresses-table"}
2020/08/06 15:48:53 create table [Addresses] ([Street] varchar(50),[Number] varchar(50),[UserId] int,)
2020-08-06T15:48:53.810-0300 DEBUG controller-runtime.controller Successfully Reconciled {"controller": "table", "request": "default/addresses-table"}
2020-08-06T15:48:53.853-0300 INFO controllers.Table Creating table [Users] on database. {"table": "default/users-table"}
2020/08/06 15:48:53 create table [Users] ([Id] int not null identity(1,1),[Name] varchar(50) not null,[Email] varchar(255) not null,[Active] bit not null default(0),[Blocked] bit not null default(0),)
2020-08-06T15:48:53.876-0300 DEBUG controller-runtime.controller Successfully Reconciled {"controller": "table", "request": "default/users-table"}