Skip to content

Commit

Permalink
Merge pull request #173 from formalco/farid/add-pull-request-check
Browse files Browse the repository at this point in the history
Add pull requests test
  • Loading branch information
ahmb84 authored Nov 1, 2023
2 parents 7879a08 + b097806 commit 3b51d9c
Show file tree
Hide file tree
Showing 2 changed files with 217 additions and 0 deletions.
51 changes: 51 additions & 0 deletions .github/workflows/integration-test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Test Terraform Functionality
on:
pull_request:

jobs:
test-terraform:
name: Test Postgres Sidecar
runs-on: ubuntu-latest
steps:
- name: Check out repository code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.19'
id: go
- name: 'Terraform Setup'
id: terraform-setup
uses: hashicorp/setup-terraform@v2
- name: Build Terraform Provider
run: |
go build -o ${BINARY}
mkdir -p ~/.terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAME}/${VERSION}/${OS_ARCH}
mv ${BINARY} ~/.terraform.d/plugins/${HOSTNAME}/${NAMESPACE}/${NAME}/${VERSION}/${OS_ARCH}
env:
HOSTNAME: joinformal.com
NAMESPACE: local
NAME: formal
OS_ARCH: linux_amd64
VERSION: 1.0.0
BINARY: terraform-provider-formal # last word comes from NAME env
- name: Terraform Init
run: |
cd tests
terraform init
env:
FORMAL_API_KEY: ${{ secrets.TEST_DEV_API_KEY }}
- name: Terraform Apply
id: terraform-apply
run: |
cd tests
terraform apply -auto-approve
env:
FORMAL_API_KEY: ${{ secrets.TEST_DEV_API_KEY }}
- name: Terraform Destroy
if: ${{ !cancelled() && (steps.terraform-apply.outcome == 'success' || steps.terraform-apply.outcome == 'failure') }}
run: |
cd tests
terraform destroy -auto-approve
env:
FORMAL_API_KEY: ${{ secrets.TEST_DEV_API_KEY }}
166 changes: 166 additions & 0 deletions tests/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
terraform {
required_providers {
formal = {
version = "~> 1.0.0"
source = "joinformal.com/local/formal"
}
}
}

provider "formal" {}

# Deprecated
# resource "formal_cloud_account" "name" {
# }

# Deprecated
# resource "formal_dataplane" "name" {
# }

# Deprecated
# resource "formal_dataplane_routes" "name" {
# }

resource "formal_datastore" "postgres1" {
hostname = "terraform-test-postgres1"
name = "terraform-test-postgres1"
technology = "postgres"
db_discovery_job_wait_time = "1m"
environment = "DEV"
port = 5432
timeouts {
create = "1m"
}
}

# Deprecated
# resource "formal_default_field_encryption" "name" {
# data_key_storage = "control_plane_only"
# encryption_alg = "aes_deterministic"
# kms_key_id = formal_encryption_key.name.id
# }

# resource "formal_encryption_key" "name" {
# cloud_region = "us-west-1"
# key_id = "terraform-test-encryption-key-id"
# key_name = "terraform-test-encryption-key-local"
# }

# resource "formal_field_encryption" "name" {
# alg = "aes_deterministic"
# datastore_id = formal_datastore.postgres1.id
# key_id = formal_encryption_key.name.id
# key_storage = "control_plane_only"
# path = "postgres.public.users.id"
# }

resource "formal_group" "name" {
description = "terraform-test-group"
name = "terraform-test-group"
}

resource "formal_group_link_role" "name" {
group_id = formal_group.name.id
role_id = formal_user.name.id
}

resource "formal_integration_app" "name" {
name = "terraform-test-integration-app"
type = "metabase"
linked_db_user_id = "postgres"
metabase_hostname = "https://metabase.com"
metabase_password = "metabasepassword"
metabase_username = "metabaseusername"
}

# resource "formal_integration_datahub" "name" {
# active = true
# api_key = "api_key_datahub_placeholder"
# generalized_metadata_service_url = "https://datahub.com"
# sync_direction = "bidirectional"
# synced_entities = ["tags"]
# }

resource "formal_integration_external_api" "name" {
auth_type = "basic"
name = "terraform-test-integration-external-api"
type = "custom"
url = "https://zendesk.com"
}

resource "formal_integration_log" "name" {
name = "terraform-test-integration-log"
type = "splunk"
splunk_api_key = "aaaaa"
splunk_url = "https://splunk.com"
}

resource "formal_integration_log_link" "name" {
integration_id = formal_integration_log.name.id
datastore_id = formal_datastore.postgres1.id
}

# resource "formal_key" "name" {
# cloud_region = "eu-west-1"
# key_type = "aws_kms"
# managed_by = "customer_managed"
# name = "terraform-test-key-aws-kms"
# key_id = formal_encryption_key.name.id
# }

resource "formal_native_role" "name" {
datastore_id = formal_datastore.postgres1.id
native_role_id = "postgres1"
native_role_secret = "postgres1"
}

resource "formal_user" "name" {
type = "machine"
name = "terraform-test-user"
}

resource "formal_native_role_link" "name" {
datastore_id = formal_datastore.postgres1.id
formal_identity_id = formal_user.name.id
formal_identity_type = "user"
native_role_id = formal_native_role.name.native_role_id
}

resource "formal_policy" "name" {
active = false
description = "terraform-test-policy"
module = <<EOT
package formal.v2
import future.keywords.if
pre_request := {
"action": "block",
"type": "block_with_formal_message"
} if {
input.datastore.id == "${formal_datastore.postgres1.id}"
}
EOT
name = "terraform-test-policy"
notification = "none"
owners = ["farid@joinformal.com"]
status = "draft"
}

resource "formal_satellite" "name" {
name = "terraform-test-satellite"
}

resource "formal_sidecar" "name" {
deployment_type = "onprem"
global_kms_decrypt = false
name = "terraform-test-sidecar"
technology = "postgres"
network_type = "internal"
}

resource "formal_sidecar_datastore_link" "name" {
datastore_id = formal_datastore.postgres1.id
port = 5432
sidecar_id = formal_sidecar.name.id
}

0 comments on commit 3b51d9c

Please sign in to comment.