From 5591200d0fbabf88356ab66c6a33a06352d16ca7 Mon Sep 17 00:00:00 2001 From: allanice001 Date: Sun, 2 Nov 2025 23:12:55 +0000 Subject: [PATCH] chore: create README.md --- README.md | 162 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 145 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index e3aa244..cb74716 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,154 @@ # Autoglue -## Before modifying anything -this repo uses git subtree -Subtree is like “vendor the files” with the option to push/pull history, but it behaves like normal files in the parent—no detached HEADs, no separate checkout. +## Setup Env +create .env file: +``` +DB_USER=autoglue +DB_PASSWORD=autoglue +DB_NAME=autoglue -- Main repo: github.com/glueops/autoglue -- SDK repo: github.com/glueops/autoglue-sdk-go -- SDK Path in main: sdk/go/ -```bash - # one-time: add the external repo as a subtree living at sdk/go/ -git remote add sdk-origin git@github.com:glueops/autoglue-sdk-go.git -git subtree add --prefix=sdk/go sdk-origin main --squash +BIND_ADDRESS=127.0.0.1 +BIND_PORT=8080 + +DATABASE_URL=postgres://autoglue:autoglue@localhost:5432/autoglue + +# Used to switch between dev proxy and spa handler +# dev proxy - proxy binds port 5173 (vite) to BIND_PORT at / +# spa handler - requires ui build and serves embedded from build result +UI_DEV=true + +# in development - removes hsts in security middleware, any other value - hsts gets enabled +ENV=development + +# Enables or disables /debug/pprof +DEBUG=true + +# Enables or disables embedded swagger ui +SWAGGER=true + +JWT_ISSUER=http://localhost:8080 +JWT_AUDIENCE=autoglue-ui +# optional - 32 bytes base64url (no padding); use only if you want to encrypt private PEM in DB +# openssl rand -base64 32 | tr '+/' '-_' | tr -d '=' +JWT_PRIVATE_ENC_KEY=IQp53NFkJvbfgLgZc-wo1CNLYRndJA-g5u13HFAn4rI + +OAUTH_REDIRECT_BASE=http://localhost:8080 +GOOGLE_CLIENT_ID=742299367132-na2i6spu7doukkqtk52vcqd6p94ijupi.apps.googleusercontent.com +GOOGLE_CLIENT_SECRET=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 +#GITHUB_CLIENT_ID=... +#GITHUB_CLIENT_SECRET=... ``` -After changes in the API: +## Bring up Database: +```bash +docker compose up -d +``` + +## Generate JWT tokens used for auth in the DB +Private Key is encrypted by `JWT_PRIVATE_ENC_KEY` +If this is not set, the private key is stored in plain text in the DB - its never exposed at any rate + +```bash +go run . keys generate +``` + +## Generate master encryption key +The master encryption key is used to generate the org encryption keys - without it there will be failures +```bash +go run . encrypt create-master +``` + +## Ensure your swagger and SDKs are up to date with the api spec ```bash -# Regenerate Swagger make swagger - -# Regenerate all SDKs - this includes the go and typescript SDKs, as well as the vendored TS SDK consumed by UI make sdk-all +``` + +## Build terraform provider +Currently, the terraform provider consumes the go sdk through an alias +Once the SDK is published to its own repo, the alias can be removed. but this is why its imperative to ensure the SDK is up to date + +The command below builds the provider binary, and installs it where terraform expects it to be placed if it were downloaded from a registry +```bash +cd terraform-provider-autoglue +make dev +``` + +## See UI & terraform in action +From the project root +## UI & API - required for the terraform +Start the API & UI (the env embeds it with a dev proxy) + +if you witness a failure here, run `make ui` + +This is most likely the SPA handler trying to embed ui files that dont exist +```bash +go run . +``` + +From your GLUEOPS profiled browser - http://localhost:8080 +Login - this is restricted to glueops.dev at the minute (in google workspace settings - outside of the API) + +Create your org (http://localhost:8080/me) - you should be redirected here after initial login + +Once you have an org - create a set of api keys for your org: +They will be in the format of: +```text +Org Key: org_lnJwmyyWH7JC-JgZo5v3Kw +Org Secret: fqd9yebGMfK6h5HSgWn4sXrwr9xlFbvbIYtNylRElMQ +``` + +use them in terraform/envs/dev/terraform.tfvars + +in my example here, i also create ssh keys in my example: +```terraform +org_key = "org_lnJwmyyWH7JC-JgZo5v3Kw" +org_secret = "fqd9yebGMfK6h5HSgWn4sXrwr9xlFbvbIYtNylRElMQ" + +ssh_keys = { + bastionKey = { + name = "Bastion Key" + comment = "deploy@autoglue" + type = "rsa" + bits = 4096 + enable_download = true + download_part = "both" + download_dir = "out/bastionKey" + } + clusterKey = { + name = "Cluster Key" + comment = "bastion@autoglue" + type = "ed25519" # bits ignored + enable_download = true + download_part = "both" + download_dir = "out/clusterKey" + } +} + +``` + +explore `main.tf` for how the module ssh-keys module is used +also you will see there how to create servers using the servers module + +in `terraform/envs/dev` +```bash +rm -rf .terraform* +tofu init -upgrade + +tofu plan + +tofu apply -auto-approve +``` + +If everything went to plan, you'll have an `out` directory containting 2 zip file - one for each of the ssh keys + +In the UI you will also see the SSH Keys on its page, +you will also see the servers created on its page. + +## WARNING +!!!!Terraform destroy deletes the keys from the api as well as deletes the local files!!!! +```bash +tofu destroy -auto-approve +``` + -# update SDK repo from main (after regeneration) -git subtree push --prefix=sdk/go sdk-origin main -``` \ No newline at end of file