The Numbers
What Bob Built
Project Atlas is a multi-cloud automation platform that orchestrates HashiCorp Vault, Terraform, and Ansible into a seamless deployment pipeline. Bob didn't just write scripts — Bob designed an entire automation architecture where each tool plays its precise role, and the whole system is held together by a single intelligent wrapper.
atlas deploy
# Bob orchestrates:
# ✓ Vault authentication + dynamic credential retrieval
# ✓ Terraform provisions VMs across AWS + Azure + vCenter
# ✓ Ansible inventory auto-generated from Terraform outputs
# ✓ Ansible playbooks configure all systems
# ✓ Application deployed and running — 5–10 minutesHow Bob Designed the Architecture
The Vault Integration — Zero Secrets in Code
The core challenge: deploying to three cloud providers means managing AWS access keys, Azure credentials, and vCenter passwords. The naive approach puts them in environment variables or config files. Bob rejected that entirely.
Every single credential is retrieved dynamically from Vault at runtime. Terraform pulls secrets at plan/apply time — no secrets in Git, no secrets in env vars, full audit trail through Vault's access logs.
data "vault_generic_secret" "aws_creds" {
path = "aec-credentials/aws/aec-admin"
}
provider "aws" {
access_key = data.vault_generic_secret.aws_creds.data["access_key"]
secret_key = data.vault_generic_secret.aws_creds.data["secret_key"]
# Credentials never touch disk or version controlThe Multi-Cloud Terraform — One Config, Three Providers
Each cloud has different APIs, resource types, and networking models. Bob designed unified Terraform modules that abstract away provider differences while preserving cloud-specific optimizations — same user, same SSH key, consistent configuration everywhere.
locals {
common_user = "fwelder"
ssh_key = data.vault_generic_secret.ssh_keys.data["public_key"]
}
# AWS EC2 · Azure VM · vCenter VM — same locals, three providers
resource "aws_instance" "atlas" { user_data = local.cloud_init_config }
resource "azurerm_virtual_machine" "atlas" { custom_data = local.cloud_init_config }
resource "vsphere_virtual_machine" "atlas" { # same pattern }The Ansible Automation — Inventory Generated, Not Managed
After Terraform provisions infrastructure, the IPs are unknown until runtime. Manual Ansible inventory management is error-prone and breaks repeatability. Bob's solution: Terraform generates the Ansible inventory automatically as part of its apply output.
resource "local_file" "ansible_inventory" {
content = templatefile("inventory.tpl", {
aws_ip = aws_instance.atlas.public_ip
azure_ip = azurerm_public_ip.atlas.ip_address
vcenter_ip = vsphere_virtual_machine.atlas.default_ip_address
})
filename = "../ansible/inventory/hosts.yml"
}
# Ansible always has exactly the right inventory — zero manual stepsThe Wrapper Script — One Command, Full Lifecycle
Even with all three tools automated, running them in the right order with the right error handling requires orchestration. Bob created manage-atlas.sh — an intelligent wrapper that handles authentication, deployment, configuration, verification, and cleanup with built-in error recovery.
./manage-atlas.sh deploy
# 1. Verify Vault authentication
# 2. terraform plan (preview changes)
# 3. terraform apply (provision infrastructure)
# 4. Generate Ansible inventory from outputs
# 5. Run Ansible playbooks (configure all systems)
# 6. Display connection endpoints
# Built-in state lock detection and recoveryProgressive Demo Suite
Bob designed Atlas as a progression — three demo versions for different audiences and engagement depths, each building on the same Vault-first foundation.
Three identical static websites across AWS, Azure, and vCenter. Perfect for demonstrating the pattern without complexity overhead.
Real e-commerce app — web tier (AWS), API tier (Azure), database tier (vCenter). All talking across clouds. Production-realistic.
Traditional VMs + Red Hat OpenShift on IBM Fusion HCI. Demonstrates the migration path from legacy to cloud-native.
5+ containerized microservices, API gateway, service mesh, message queues. Cloud-native architecture for advanced audiences.