Files
inecs 6033967e6a Initial commit: stateful OpenStack API laboratory simulator.
Ship Keystone auth, multi-service handlers (Yoga→Dalmatian), Compose/Helm
packaging, API contract packs, and pytest/Pulumi coverage labs.
2026-07-18 04:26:48 +03:00

71 lines
2.8 KiB
Bash

#!/usr/bin/env bash
# Run Python + Ansible + Terraform + Pulumi cookbooks against local simulator.
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
# Prefer CLT/system python (user site-packages) over Homebrew for cookbooks.
export PATH="${HOME}/.local/bin:${HOME}/Library/Python/3.9/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/homebrew/bin:${PATH}"
# Local lab must not go through IDE/sandbox HTTP proxies (breaks multi-port discovery).
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY http_proxy https_proxy all_proxy
export NO_PROXY="*"
export no_proxy="*"
export OS_AUTH_URL="${OS_AUTH_URL:-http://127.0.0.1:5000/v3}"
export OS_USERNAME="${OS_USERNAME:-admin}"
export OS_PASSWORD="${OS_PASSWORD:-secret}"
export OS_PROJECT_NAME="${OS_PROJECT_NAME:-demo}"
export OS_USER_DOMAIN_NAME="${OS_USER_DOMAIN_NAME:-Default}"
export OS_PROJECT_DOMAIN_NAME="${OS_PROJECT_DOMAIN_NAME:-Default}"
export OS_IDENTITY_API_VERSION=3
export OS_REGION_NAME="${OS_REGION_NAME:-RegionOne}"
PYTHON="${PYTHON:-/usr/bin/python3}"
if ! command -v "$PYTHON" >/dev/null 2>&1; then
PYTHON=python3
fi
cd "$ROOT"
echo "== health =="
curl -sf "$OS_AUTH_URL/../health/ready" >/dev/null || curl -sf "http://127.0.0.1:5000/health/ready"
echo "== ensure demo seed (networks/images) =="
docker compose exec -T simulator python -m app.openstack.seed_cli --profile demo >/dev/null
echo "== 1) Python openstacksdk =="
"$PYTHON" -m pip install -q --user openstacksdk >/dev/null 2>&1 || true
"$PYTHON" examples/python/openstacksdk_cookbook.py
echo "== 2) Ansible =="
ansible-playbook -i examples/ansible/inventory.ini examples/ansible/playbook.yml
if command -v terraform >/dev/null 2>&1; then
echo "== 3) Terraform =="
cd examples/terraform
terraform init -input=false
terraform apply -auto-approve -input=false
terraform destroy -auto-approve -input=false
cd "$ROOT"
else
echo "== 3) Terraform SKIPPED (terraform not installed) =="
fi
if command -v pulumi >/dev/null 2>&1; then
echo "== 4) Pulumi =="
cd examples/pulumi
"$PYTHON" -m pip install -q --user -r requirements.txt >/dev/null 2>&1 || "$PYTHON" -m pip install -q -r requirements.txt
pulumi stack select dev --create 2>/dev/null || true
pulumi config set openstack:authUrl "$OS_AUTH_URL"
pulumi config set openstack:userName "$OS_USERNAME"
pulumi config set --secret openstack:password "$OS_PASSWORD"
pulumi config set openstack:tenantName "$OS_PROJECT_NAME"
pulumi config set openstack:domainName "$OS_USER_DOMAIN_NAME"
pulumi config set openstack:region "$OS_REGION_NAME"
# Pulumi Python programs should use the same interpreter
export PULUMI_PYTHON_CMD="$PYTHON"
pulumi up --yes
pulumi destroy --yes
cd "$ROOT"
else
echo "== 4) Pulumi SKIPPED (pulumi CLI not installed; SDK cookbook covered by Python) =="
echo " Install: brew install pulumi/tap/pulumi then re-run this script"
fi
echo "IAC_STACK_DONE"