# asbedb/proxaform architecture

> Architecture diagram of the GitHub repository asbedb/proxaform, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/asbedb/proxaform
- Repository: https://github.com/asbedb/proxaform

## Overview

Proxaform is a Bash/Terraform/Ansible tool for provisioning, configuring, and tearing down Proxmox LXC containers. Its primary workflow starts with environment setup, gathers a reusable container configuration, provisions infrastructure, generates inventory, then runs a selected Ansible playbook after SSH is available. The README documents these orchestration steps and capabilities; source excerpts were unavailable, so links below reflect documented relationships only.

Main entry points: [`playbooks`](https://github.com/asbedb/proxaform/tree/main/playbooks) (Ansible playbooks), [`deploy.sh`](https://github.com/asbedb/proxaform/blob/main/deploy.sh) (Deploy orchestration), [`terraform/main.tf`](https://github.com/asbedb/proxaform/blob/main/terraform/main.tf) (Container provisioning), [`destroy.sh`](https://github.com/asbedb/proxaform/blob/main/destroy.sh) (Teardown orchestration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_lifecycle["Lifecycle scripts"]
  node_setup["Environment setup<br/>[setup.sh]"]
  node_deploy["Deploy orchestration<br/>[deploy.sh]"]
  node_destroy["Teardown orchestration<br/>[destroy.sh]"]
  node_playbook_choice["Playbook selection<br/>[deploy.sh]"]
end

subgraph group_infrastructure["Infrastructure"]
  node_tfvars["Container config"]
  node_terraform["Container provisioning<br/>[main.tf]"]
  node_tfvars_schema["Terraform variables<br/>[vars.tf]"]
  node_tf_outputs["Terraform outputs<br/>[outputs.tf]"]
  node_ssh_key["SSH public key"]
end

subgraph group_configuration["Ansible configuration"]
  node_inventory["Generated inventory"]
  node_common_role["Common role<br/>[main.yml]"]
  node_docker_role["Docker host role<br/>[main.yml]"]
  node_nodejs_role["Node.js role<br/>[main.yml]"]
  node_crontab_role["Crontab UI role<br/>[main.yml]"]
  node_rundeck_role["Rundeck role<br/>[main.yml]"]
  node_technitium_role["Technitium role<br/>[main.yml]"]
end

subgraph group_playbooks["Playbook catalog"]
  node_playbooks["Ansible playbooks"]
end

node_operator(("Operator"))
node_proxmox["Proxmox VE"]
node_container["LXC container"]

node_operator -->|"starts setup"| node_setup
node_operator -->|"starts deployment"| node_deploy
node_operator -->|"starts teardown"| node_destroy
node_setup -->|"installs dependencies"| node_operator
node_deploy -->|"creates or selects"| node_tfvars
node_deploy -->|"injects key"| node_ssh_key
node_deploy -->|"runs provisioning"| node_terraform
node_terraform -->|"uses variables"| node_tfvars_schema
node_terraform -->|"provisions on"| node_proxmox
node_proxmox -->|"hosts"| node_container
node_terraform -->|"produces outputs"| node_tf_outputs
node_deploy -->|"generates inventory"| node_inventory
node_deploy -->|"waits for SSH"| node_container
node_deploy -->|"offers selection"| node_playbook_choice
node_playbook_choice -->|"selects playbook"| node_playbooks
node_deploy -->|"runs with Ansible"| node_playbooks
node_playbooks -->|"targets hosts"| node_inventory
node_playbooks -->|"uses role"| node_common_role
node_playbooks -->|"uses role"| node_docker_role
node_playbooks -->|"uses role"| node_nodejs_role
node_playbooks -->|"uses role"| node_crontab_role
node_playbooks -->|"uses role"| node_rundeck_role
node_playbooks -->|"uses role"| node_technitium_role
node_destroy -->|"tears down"| node_terraform
node_destroy -->|"cleans up"| node_inventory

click node_setup "https://github.com/asbedb/proxaform/blob/main/setup.sh"
click node_deploy "https://github.com/asbedb/proxaform/blob/main/deploy.sh"
click node_destroy "https://github.com/asbedb/proxaform/blob/main/destroy.sh"
click node_tfvars "https://github.com/asbedb/proxaform/blob/main/terraform/terraform.tfvars.example"
click node_terraform "https://github.com/asbedb/proxaform/blob/main/terraform/main.tf"
click node_tfvars_schema "https://github.com/asbedb/proxaform/blob/main/terraform/vars.tf"
click node_tf_outputs "https://github.com/asbedb/proxaform/blob/main/terraform/outputs.tf"
click node_playbook_choice "https://github.com/asbedb/proxaform/blob/main/deploy.sh"
click node_playbooks "https://github.com/asbedb/proxaform/tree/main/playbooks"
click node_common_role "https://github.com/asbedb/proxaform/blob/main/roles/common/tasks/main.yml"
click node_docker_role "https://github.com/asbedb/proxaform/blob/main/roles/docker_host/tasks/main.yml"
click node_nodejs_role "https://github.com/asbedb/proxaform/blob/main/roles/nodejs/tasks/main.yml"
click node_crontab_role "https://github.com/asbedb/proxaform/blob/main/roles/crontab-ui/tasks/main.yml"
click node_rundeck_role "https://github.com/asbedb/proxaform/blob/main/roles/rundeck_server/tasks/main.yml"
click node_technitium_role "https://github.com/asbedb/proxaform/blob/main/roles/technitium/tasks/main.yml"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_setup,node_deploy,node_destroy,node_playbook_choice toneBlue
class node_tfvars,node_terraform,node_tfvars_schema,node_tf_outputs,node_ssh_key toneAmber
class node_inventory,node_common_role,node_docker_role,node_nodejs_role,node_crontab_role,node_rundeck_role,node_technitium_role toneMint
class node_playbooks toneRose
class node_operator,node_proxmox,node_container toneIndigo
```

## Components

### Lifecycle scripts

- [Environment setup](https://github.com/asbedb/proxaform/blob/main/setup.sh): `setup.sh`
- [Deploy orchestration](https://github.com/asbedb/proxaform/blob/main/deploy.sh): `deploy.sh`
- [Teardown orchestration](https://github.com/asbedb/proxaform/blob/main/destroy.sh): `destroy.sh`
- [Playbook selection](https://github.com/asbedb/proxaform/blob/main/deploy.sh): `deploy.sh`

### Infrastructure

- [Container config](https://github.com/asbedb/proxaform/blob/main/terraform/terraform.tfvars.example): `terraform/terraform.tfvars.example`
- [Container provisioning](https://github.com/asbedb/proxaform/blob/main/terraform/main.tf): `terraform/main.tf`
- [Terraform variables](https://github.com/asbedb/proxaform/blob/main/terraform/vars.tf): `terraform/vars.tf`
- [Terraform outputs](https://github.com/asbedb/proxaform/blob/main/terraform/outputs.tf): `terraform/outputs.tf`
- **SSH public key**

### Ansible configuration

- **Generated inventory**
- [Common role](https://github.com/asbedb/proxaform/blob/main/roles/common/tasks/main.yml): `roles/common/tasks/main.yml`
- [Docker host role](https://github.com/asbedb/proxaform/blob/main/roles/docker_host/tasks/main.yml): `roles/docker_host/tasks/main.yml`
- [Node.js role](https://github.com/asbedb/proxaform/blob/main/roles/nodejs/tasks/main.yml): `roles/nodejs/tasks/main.yml`
- [Crontab UI role](https://github.com/asbedb/proxaform/blob/main/roles/crontab-ui/tasks/main.yml): `roles/crontab-ui/tasks/main.yml`
- [Rundeck role](https://github.com/asbedb/proxaform/blob/main/roles/rundeck_server/tasks/main.yml): `roles/rundeck_server/tasks/main.yml`
- [Technitium role](https://github.com/asbedb/proxaform/blob/main/roles/technitium/tasks/main.yml): `roles/technitium/tasks/main.yml`

### Playbook catalog

- [Ansible playbooks](https://github.com/asbedb/proxaform/tree/main/playbooks): `playbooks`

### Other components

- **Operator**
- **Proxmox VE**
- **LXC container**

## Connections

- Operator → Environment setup: starts setup
- Operator → Deploy orchestration: starts deployment
- Operator → Teardown orchestration: starts teardown
- Environment setup → Operator: installs dependencies
- Deploy orchestration → Container config: creates or selects
- Deploy orchestration → SSH public key: injects key
- Deploy orchestration → Container provisioning: runs provisioning
- Container provisioning → Terraform variables: uses variables
- Container provisioning → Proxmox VE: provisions on
- Proxmox VE → LXC container: hosts
- Container provisioning → Terraform outputs: produces outputs
- Deploy orchestration → Generated inventory: generates inventory
- Deploy orchestration → LXC container: waits for SSH
- Deploy orchestration → Playbook selection: offers selection
- Playbook selection → Ansible playbooks: selects playbook
- Deploy orchestration → Ansible playbooks: runs with Ansible
- Ansible playbooks → Generated inventory: targets hosts
- Ansible playbooks → Common role: uses role
- Ansible playbooks → Docker host role: uses role
- Ansible playbooks → Node.js role: uses role
- Ansible playbooks → Crontab UI role: uses role
- Ansible playbooks → Rundeck role: uses role
- Ansible playbooks → Technitium role: uses role
- Teardown orchestration → Container provisioning: tears down
- Teardown orchestration → Generated inventory: cleans up
