Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions tutorials/0-provider.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
terraform {
required_providers {
bytebase = {
version = "3.8.2"
# For local development, please use "terraform.local/bytebase/bytebase" instead
source = "registry.terraform.io/bytebase/bytebase"
}
}
}

provider "bytebase" {
service_account = "[email protected]"
service_key = "bbs_xxxx"
url = "https://xxx.xxx.xxx"
}
13 changes: 13 additions & 0 deletions tutorials/1-0-list-env-instance.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# List all environments using settings
data "bytebase_setting" "environments" {
name = "settings/ENVIRONMENT"
}
output "all_environments" {
value = data.bytebase_setting.environments
}

# List all instances
data "bytebase_instance_list" "all" {}
output "all_instances" {
value = data.bytebase_instance_list.all
}
17 changes: 17 additions & 0 deletions tutorials/1-1-env-alt.tf.alt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
resource "bytebase_environment" "test" {
resource_id = "test"
title = "Test"
order = 0
protected = false
}

# Create Production environment
# depends_on ensures environments are created in sequence
# This prevents API conflicts when updating the environment list
resource "bytebase_environment" "prod" {
depends_on = [bytebase_environment.test]
resource_id = "prod"
title = "Prod"
order = 1
protected = true
}
17 changes: 17 additions & 0 deletions tutorials/1-1-env.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Environment Settings
resource "bytebase_setting" "environments" {
name = "settings/ENVIRONMENT"

environment_setting {
environment {
id = "test"
title = "Test"
protected = false
}
environment {
id = "prod"
title = "Prod"
protected = true
}
}
}
37 changes: 37 additions & 0 deletions tutorials/1-instances-alt.tf.alt
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Built-in Test Instance
resource "bytebase_instance" "test" {
depends_on = [bytebase_environment.test]
resource_id = "test-sample-instance"
environment = bytebase_environment.test.name
title = "Test Sample Instance"
engine = "POSTGRES"
activation = true

data_sources {
id = "admin data source test-sample-instance"
type = "ADMIN"
host = "/tmp"
port = "8083"
username = "bbsample"
password = ""
}
}

# Built-in Prod Instance
resource "bytebase_instance" "prod" {
depends_on = [bytebase_environment.prod]
resource_id = "prod-sample-instance"
environment = bytebase_environment.prod.name
title = "Prod Sample Instance"
engine = "POSTGRES"
activation = true

data_sources {
id = "admin data source prod-sample-instance"
type = "ADMIN"
host = "/tmp"
port = "8084"
username = "bbsample"
password = ""
}
}
37 changes: 37 additions & 0 deletions tutorials/1-instances.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Built-in Test Instance
resource "bytebase_instance" "test" {
depends_on = [bytebase_setting.environments]
resource_id = "test-sample-instance"
environment = "environments/test"
title = "Test Sample Instance"
engine = "POSTGRES"
activation = true

data_sources {
id = "admin data source test-sample-instance"
type = "ADMIN"
host = "/tmp"
port = "8083"
username = "bbsample"
password = ""
}
}

# Built-in Prod Instance
resource "bytebase_instance" "prod" {
depends_on = [bytebase_setting.environments]
resource_id = "prod-sample-instance"
environment = "environments/prod"
title = "Prod Sample Instance"
engine = "POSTGRES"
activation = true

data_sources {
id = "admin data source prod-sample-instance"
type = "ADMIN"
host = "/tmp"
port = "8084"
username = "bbsample"
password = ""
}
}
23 changes: 23 additions & 0 deletions tutorials/2-projects.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Project One
resource "bytebase_project" "project-one" {
depends_on = [
bytebase_instance.test
]
resource_id = "project-one"
title = "Project One"

databases = bytebase_instance.test.databases
}

# Project Two
resource "bytebase_project" "project-two" {
depends_on = [
bytebase_instance.prod
]
resource_id = "project-two"
title = "Project Two"

databases = [
"instances/prod-sample-instance/databases/hr_prod"
]
}
10 changes: 10 additions & 0 deletions tutorials/3-1-workspace-profile.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
resource "bytebase_setting" "workspace_profile" {
name = "settings/WORKSPACE_PROFILE"

workspace_profile {
disallow_signup = true
domains = ["example.com"]
enforce_identity_domain = false
external_url = "https://valid-just-tadpole.ngrok-free.app"
}
}
53 changes: 53 additions & 0 deletions tutorials/3-2-env-setting.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
resource "bytebase_policy" "rollout_policy_test" {
depends_on = [bytebase_setting.environments]
parent = bytebase_setting.environments.environment_setting[0].environment[0].name
type = "ROLLOUT_POLICY"

rollout_policy {
automatic = true
roles = [
"roles/workspaceAdmin",
"roles/projectOwner",
"roles/LAST_APPROVER",
"roles/CREATOR"
]
}
}

resource "bytebase_policy" "rollout_policy_prod" {
depends_on = [bytebase_setting.environments]
parent = bytebase_setting.environments.environment_setting[0].environment[1].name
type = "ROLLOUT_POLICY"

rollout_policy {
automatic = false
roles = [
"roles/workspaceAdmin",
"roles/projectOwner",
"roles/LAST_APPROVER",
"roles/CREATOR"
]
}
}

resource "bytebase_policy" "disable_copy_data_policy_prod" {
depends_on = [bytebase_setting.environments]
parent = bytebase_setting.environments.environment_setting[0].environment[1].name
type = "DISABLE_COPY_DATA"

disable_copy_data_policy {
enable = true
}
}

resource "bytebase_policy" "data_source_query_policy_prod" {
depends_on = [bytebase_setting.environments]
parent = bytebase_setting.environments.environment_setting[0].environment[1].name
type = "DATA_SOURCE_QUERY"

data_source_query_policy {
restriction = "FALLBACK" # or DISALLOW or RESTRICTION_UNSPECIFIED
disallow_ddl = true
disallow_dml = true
}
}
15 changes: 15 additions & 0 deletions tutorials/3-3-risk.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
resource "bytebase_risk" "dml_moderate" {
title = "DML Moderate Risk"
source = "DML"
level = 200
active = true
condition = "environment_id == \"prod\" && affected_rows >= 100"
}

resource "bytebase_risk" "ddl_high" {
title = "DDL High Risk"
source = "DDL"
level = 300
active = true
condition = "environment_id == \"prod\""
}
24 changes: 24 additions & 0 deletions tutorials/3-4-approval-flow.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
resource "bytebase_setting" "approval_flow" {
name = "settings/WORKSPACE_APPROVAL"

approval_flow {
rules {
flow {
title = "Project Owner → DBA → Admin"
description = "Need DBA and workspace admin approval"

steps { role = "roles/projectOwner" }
steps { role = "roles/workspaceDBA" }
steps { role = "roles/workspaceAdmin" }
}
conditions {
source = "DML"
level = "MODERATE"
}
conditions {
source = "DDL"
level = "HIGH"
}
}
}
}
40 changes: 40 additions & 0 deletions tutorials/4-sql-review.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
resource "bytebase_review_config" "sample" {
depends_on = [
bytebase_setting.environments
]

resource_id = "review-config-sample"
title = "Sample SQL Review Config"
enabled = true
resources = toset([
bytebase_setting.environments.environment_setting[0].environment[1].name
])
rules {
type = "column.no-null"
engine = "POSTGRES"
level = "WARNING"
}
rules {
type = "column.required"
engine = "POSTGRES"
level = "ERROR"
payload = "{\"list\":[\"id\",\"created_ts\",\"updated_ts\",\"creator_id\",\"updater_id\"]}"
}
rules {
type = "table.require-pk"
engine = "POSTGRES"
level = "ERROR"
}
rules {
type = "naming.column"
engine = "POSTGRES"
level = "ERROR"
payload = "{\"format\":\"^[a-z]+(_[a-z]+)*$\",\"maxLength\":64}"
}
rules {
type = "statement.maximum-limit-value"
engine = "POSTGRES"
level = "ERROR"
payload = "{\"number\":1000}"
}
}
Loading