528 lines
20 KiB
Markdown
528 lines
20 KiB
Markdown
# OCI DEAL ACCELERATOR — Architecture Center Catalog Builder
|
|
|
|
## CRITICAL: Git Branching Rule
|
|
|
|
```bash
|
|
git checkout main && git pull origin main && git checkout -b feature/architecture-center-catalog
|
|
```
|
|
|
|
---
|
|
|
|
## Objective
|
|
|
|
Build a comprehensive catalog of Oracle Architecture Center content (reference architectures, solution playbooks, built & deployed) from the last 2 years. Each entry has ONLY: title, URL, type, date, tags, and a 2-3 sentence summary focused on Architecture Recommendations and Considerations.
|
|
|
|
This catalog enables the Deal Accelerator to say: "Your architecture matches this Oracle reference architecture: [title] — [url]" when composing a proposal.
|
|
|
|
---
|
|
|
|
## Step 1: Fetch the What's New Pages
|
|
|
|
These pages list ALL published/updated content by date:
|
|
|
|
```
|
|
https://docs.oracle.com/en/solutions/oracle-architecture-center/whats-new-20251.html
|
|
https://docs.oracle.com/en/solutions/oracle-architecture-center/whats-new-2024.html
|
|
```
|
|
|
|
From each page, extract every entry title and its link. These are the master lists.
|
|
|
|
Also fetch the filtered views to catch anything missed:
|
|
|
|
```
|
|
https://docs.oracle.com/solutions/?q=&cType=reference-architectures&sort=date-desc&lang=en
|
|
https://docs.oracle.com/solutions/?q=&cType=built-deployed&sort=date-desc&lang=en
|
|
https://docs.oracle.com/solutions/?q=&cType=solution-playbook&sort=date-desc&lang=en
|
|
```
|
|
|
|
If the filtered views are JavaScript-rendered and don't return content via fetch, rely on the What's New pages as the master source.
|
|
|
|
---
|
|
|
|
## Step 2: For Each Entry, Fetch the Detail Page
|
|
|
|
Each reference architecture has a URL like:
|
|
```
|
|
https://docs.oracle.com/en/solutions/{slug}/index.html
|
|
```
|
|
|
|
Fetch each page and extract:
|
|
- **Title**: the H1
|
|
- **Summary**: the first 2-3 sentences of the description (before the diagram)
|
|
- **Architecture Recommendations**: from the "Recommendations" or "Considerations" section — summarize in 2-3 sentences MAX
|
|
- **Services used**: list the OCI services mentioned (ADB-S, ExaCS, OKE, VCN, etc.)
|
|
- **Tags**: auto-generate from services and topic (database, networking, security, migration, ha-dr, multicloud, etc.)
|
|
- **Date**: from the What's New page or the page footer copyright
|
|
- **Terraform/GitHub link**: if present
|
|
|
|
---
|
|
|
|
## Step 3: Write the Catalog File
|
|
|
|
### Output format: `kb/architecture-center/catalog.yaml`
|
|
|
|
```yaml
|
|
# =============================================================================
|
|
# ORACLE ARCHITECTURE CENTER — REFERENCE CATALOG
|
|
# =============================================================================
|
|
#
|
|
# Auto-generated index of Oracle Architecture Center content.
|
|
# Used by the Deal Accelerator to match customer architectures with
|
|
# official Oracle reference architectures and solution playbooks.
|
|
#
|
|
# Entry format is intentionally minimal — title, summary, tags, URL.
|
|
# The skill references the URL; the architect reads the full doc.
|
|
#
|
|
# To refresh: python tools/refresh_arch_catalog.py
|
|
# =============================================================================
|
|
|
|
---
|
|
last_refreshed: "2026-03-16"
|
|
source: "https://docs.oracle.com/en/solutions/oracle-architecture-center/"
|
|
entry_count: 0 # UPDATE with actual count
|
|
---
|
|
|
|
entries:
|
|
|
|
# ===== DATABASE =====
|
|
|
|
- title: "Deploy Oracle Autonomous Database on Oracle Database@Azure"
|
|
url: "https://docs.oracle.com/en/solutions/deploy-autonomous-database-db-at-azure/index.html"
|
|
type: reference-architecture
|
|
date: "2024-10"
|
|
services: [adb-s, adg, azure]
|
|
tags: [database, multicloud, azure, ha-dr, autonomous]
|
|
summary: >
|
|
Multi-AZ deployment of ADB-S on Database@Azure with Autonomous Data Guard.
|
|
Recommends VNet peering between app and DB VNets, TAC for availability,
|
|
and ADG standby in a different AZ for automatic failover.
|
|
terraform: null
|
|
|
|
- title: "Oracle MAA for Oracle Database@Azure"
|
|
url: "https://docs.oracle.com/en/solutions/oracle-maa-db-at-azure/index.html"
|
|
type: reference-architecture
|
|
date: "2025-05"
|
|
services: [exacs, adg, vault, azure]
|
|
tags: [database, multicloud, azure, ha-dr, maa, exadata]
|
|
summary: >
|
|
Cross-AZ Data Guard on ExaCS in Database@Azure. Active Data Guard
|
|
recommended for cross-AZ replication (block repair, app continuity,
|
|
read offload). Backups to Autonomous Recovery Service.
|
|
terraform: null
|
|
|
|
- title: "Deploy Oracle Autonomous Database on Oracle Database@Google Cloud"
|
|
url: "https://docs.oracle.com/en/solutions/deploy-adb-db-at-google-cloud/index.html"
|
|
type: reference-architecture
|
|
date: "2025-03"
|
|
services: [adb-s, adg, google-cloud]
|
|
tags: [database, multicloud, google, ha-dr, autonomous]
|
|
summary: >
|
|
ADB-S on Database@Google Cloud with cross-region ADG. Non-overlapping
|
|
CIDR between VPC and VCN required. App tier should span 2+ AZs with
|
|
Google Global Load Balancer for failover.
|
|
terraform: null
|
|
|
|
- title: "Deploy Oracle Database@Google Cloud"
|
|
url: "https://docs.oracle.com/en/solutions/deploy-oracle-database-at-google-cloud/index.html"
|
|
type: reference-architecture
|
|
date: "2025-10"
|
|
services: [exacs, adb-d, google-cloud]
|
|
tags: [database, multicloud, google, exadata, autonomous-dedicated]
|
|
summary: >
|
|
ExaCS and ADB-D on Database@Google Cloud. RAC for active-active HA,
|
|
ASM for storage redundancy. Backups to OCI Object Storage via
|
|
Autonomous Recovery Service.
|
|
terraform: null
|
|
|
|
- title: "Deploy Oracle Database@AWS"
|
|
url: "https://docs.oracle.com/en/solutions/deploy-oracle-db-aws/index.html"
|
|
type: reference-architecture
|
|
date: "2025-07"
|
|
services: [exacs, adb-d, aws]
|
|
tags: [database, multicloud, aws, exadata, autonomous-dedicated]
|
|
summary: >
|
|
ExaCS and ADB-D colocated in AWS data centers. ODB peering between
|
|
VPC and ODB network in same AZ. Default limit of 2 DB servers and
|
|
3 storage servers — request increase early.
|
|
terraform: null
|
|
|
|
- title: "Migrate on-premises Oracle Database to Autonomous Database"
|
|
url: "https://docs.oracle.com/en/solutions/migrate-to-atp/index.html"
|
|
type: reference-architecture
|
|
date: "2024-01"
|
|
services: [adb-s, object-storage, compute, vpn]
|
|
tags: [database, migration, autonomous, data-pump]
|
|
summary: >
|
|
MV2ADB tool for on-prem EE to ADB-S migration using Data Pump.
|
|
Requires HTTP to Object Storage + SQL*Net to ADB. Terraform code
|
|
available on GitHub for networking + compute + ADB provisioning.
|
|
terraform: "https://github.com/oracle-quickstart/oci-arch-atp"
|
|
|
|
- title: "Migrate Oracle RAC Databases to OCI"
|
|
url: "https://docs.oracle.com/en/solutions/ensure-ha-migrate-vmware-workloads-to-oci/migrate-oracle-rac-databases1.html"
|
|
type: reference-architecture
|
|
date: "2025-01"
|
|
services: [exacs, exascale, adb-d, base-db]
|
|
tags: [database, migration, rac, exadata, ha-dr]
|
|
summary: >
|
|
Compares 4 RAC migration targets: ExaCS Dedicated, Exascale, ADB-D,
|
|
and 2-node RAC on Base DB. ExaCS recommended for full RAC feature
|
|
parity. Exascale for 23ai-only without dedicated infra commitment.
|
|
terraform: null
|
|
|
|
- title: "Deploy ORDS with High Availability on OCI"
|
|
url: "https://docs.oracle.com/en/solutions/deploy-ords-ha-oci/index.html"
|
|
type: reference-architecture
|
|
date: "2025-06"
|
|
services: [compute, load-balancer, adb-s, bastion]
|
|
tags: [database, application, ords, ha-dr, rest-api]
|
|
summary: >
|
|
Multi-instance ORDS behind OCI Load Balancer for HA REST access to
|
|
Oracle DB. Works with ADB-S, DBCS, or ExaCS. Recommends DB in
|
|
private subnet, ORDS in public with granular NSG rules.
|
|
terraform: null
|
|
|
|
- title: "Deploy secure ADB and APEX application"
|
|
url: "https://docs.oracle.com/en/solutions/deploy-autonomous-database-and-app/index.html"
|
|
type: reference-architecture
|
|
date: "2024-06"
|
|
services: [adb-s, apex, load-balancer, bastion, cloud-guard]
|
|
tags: [database, application, apex, security, autonomous]
|
|
summary: >
|
|
APEX on ADB-S with private endpoint behind Load Balancer. OCI
|
|
Landing Zone via Terraform provisions in minutes. Recommends NSGs
|
|
over Security Lists, Cloud Guard with custom detector recipes.
|
|
terraform: "https://github.com/oracle-quickstart/oci-arch-apex-atp"
|
|
|
|
# ===== NETWORKING & INTEGRATION =====
|
|
|
|
- title: "Design network architecture for data and application integration"
|
|
url: "https://docs.oracle.com/en/solutions/data-application-integration-workloads/index.html"
|
|
type: reference-architecture
|
|
date: "2025-11"
|
|
services: [vcn, drg, fastconnect, oic, data-integration, adb]
|
|
tags: [networking, integration, multicloud, data-integration]
|
|
summary: >
|
|
4 integration patterns: single VCN, cross-VCN, cross-region, and
|
|
multicloud. FastConnect+DRG for on-prem, RPC for cross-region.
|
|
Multicloud via FastConnect+ExpressRoute/DirectConnect/PartnerInterconnect.
|
|
terraform: null
|
|
|
|
# ===== DATA PLATFORM =====
|
|
|
|
- title: "Data platform - decentralized data platform"
|
|
url: "https://docs.oracle.com/en/solutions/data-platform-decentralized/index.html"
|
|
type: reference-architecture
|
|
date: "2025-03"
|
|
services: [adw, data-catalog, data-integration, object-storage]
|
|
tags: [data-platform, data-lake, data-sharing, autonomous]
|
|
summary: >
|
|
Decentralized data lakehouse with domain-level ADB-S instances
|
|
sharing data via Cloud Links or Delta Sharing. Centralized catalog,
|
|
IaC onboarding per domain. Hub-spoke model with OCI backbone routing.
|
|
terraform: null
|
|
|
|
- title: "Cloud data lake house - process enterprise and streaming data"
|
|
url: "https://docs.oracle.com/en/solutions/oci-curated-analysis/index.html"
|
|
type: reference-architecture
|
|
date: "2024-02"
|
|
services: [adw, streaming, goldengate-stream-analytics, data-integration, object-storage]
|
|
tags: [data-platform, data-lake, streaming, analytics, machine-learning]
|
|
summary: >
|
|
Full data lakehouse with batch and streaming ingestion. ADW with
|
|
auto-scaling for curated layer. Hybrid partitioned tables to move
|
|
cold data to Object Storage transparently. GoldenGate Stream Analytics
|
|
for real-time event processing.
|
|
terraform: null
|
|
|
|
- title: "Multicloud data lake integration"
|
|
url: "https://docs.oracle.com/en/solutions/oci-multicloud-datalake/index.html"
|
|
type: reference-architecture
|
|
date: "2024-03"
|
|
services: [data-integration, oic, object-storage, adw, streaming]
|
|
tags: [data-platform, multicloud, integration, data-lake]
|
|
summary: >
|
|
Bring data from AWS/Azure/on-prem into OCI data lake. OCI Data
|
|
Integration for batch ETL, OIC for app integration with pre-built
|
|
adapters. Read-only credentials for source systems recommended.
|
|
terraform: null
|
|
|
|
# ===================================================================
|
|
# CONTINUE ADDING ALL REMAINING ENTRIES FROM THE WHAT'S NEW PAGES
|
|
# Follow the same format: title, url, type, date, services, tags, summary
|
|
#
|
|
# Fetch and process ALL entries from:
|
|
# - whats-new-20251.html (2025 entries)
|
|
# - whats-new-2024.html (2024 entries)
|
|
#
|
|
# For each entry:
|
|
# 1. Fetch the detail page
|
|
# 2. Extract the summary (first 2-3 sentences)
|
|
# 3. Extract Architecture Recommendations (summarize in 2-3 sentences)
|
|
# 4. Combine into the summary field
|
|
# 5. Auto-tag based on services and topic
|
|
# ===================================================================
|
|
```
|
|
|
|
---
|
|
|
|
## Step 4: Build the Refresh Script
|
|
|
|
### `tools/refresh_arch_catalog.py`
|
|
|
|
```python
|
|
#!/usr/bin/env python3
|
|
"""
|
|
Refresh the Architecture Center catalog from Oracle docs.
|
|
|
|
Usage:
|
|
python tools/refresh_arch_catalog.py
|
|
python tools/refresh_arch_catalog.py --url https://docs.oracle.com/en/solutions/{slug}/index.html
|
|
python tools/refresh_arch_catalog.py --whats-new
|
|
|
|
This script:
|
|
1. Fetches the What's New pages for 2024 and 2025
|
|
2. Extracts all reference architecture links
|
|
3. For each link, fetches the detail page
|
|
4. Extracts title, summary, services, recommendations
|
|
5. Writes/updates kb/architecture-center/catalog.yaml
|
|
|
|
IMPORTANT: This is a semi-automated tool. It generates DRAFT entries
|
|
that should be reviewed by a human before committing. The auto-generated
|
|
summaries may miss nuance or include irrelevant detail.
|
|
"""
|
|
|
|
import requests
|
|
import yaml
|
|
import re
|
|
import argparse
|
|
from bs4 import BeautifulSoup
|
|
from datetime import datetime
|
|
import os
|
|
import time
|
|
|
|
# Service name detection patterns
|
|
SERVICE_PATTERNS = {
|
|
"adb-s": r"Autonomous\s+(Database|Transaction|Data\s+Warehouse)(?!.*Dedicated)",
|
|
"adb-d": r"Autonomous\s+Database\s+on\s+Dedicated|ADB-D",
|
|
"exacs": r"Exadata\s+(Cloud|Database)\s+Service|ExaCS|ExaDB",
|
|
"exascale": r"Exascale",
|
|
"base-db": r"Base\s+Database|VM\s+DB|DB\s+System",
|
|
"oke": r"Kubernetes\s+Engine|OKE|Container\s+Engine",
|
|
"compute": r"Compute\s+(Instance|VM)|Virtual\s+Machine",
|
|
"functions": r"OCI\s+Functions|Functions\s+Service",
|
|
"vcn": r"Virtual\s+Cloud\s+Network|VCN",
|
|
"load-balancer": r"Load\s+Balanc",
|
|
"waf": r"Web\s+Application\s+Firewall|WAF",
|
|
"fastconnect": r"FastConnect",
|
|
"drg": r"Dynamic\s+Routing\s+Gateway|DRG",
|
|
"object-storage": r"Object\s+Storage",
|
|
"data-safe": r"Data\s+Safe",
|
|
"vault": r"OCI\s+Vault|Key\s+Management",
|
|
"cloud-guard": r"Cloud\s+Guard",
|
|
"goldengate": r"GoldenGate",
|
|
"oic": r"Oracle\s+Integration|OIC",
|
|
"data-integration": r"Data\s+Integration",
|
|
"streaming": r"OCI\s+Streaming|Streaming\s+Service",
|
|
"monitoring": r"OCI\s+Monitoring",
|
|
"logging": r"Logging\s+Analytics",
|
|
"bastion": r"Bastion",
|
|
"apex": r"Oracle\s+APEX|APEX\s+application",
|
|
"mysql": r"MySQL\s+(Database\s+)?Service|MySQL\s+HeatWave",
|
|
"nosql": r"NoSQL\s+Database",
|
|
"adw": r"Autonomous\s+Data\s+Warehouse|ADW",
|
|
"azure": r"Database@Azure|Azure",
|
|
"aws": r"Database@AWS|AWS",
|
|
"google-cloud": r"Database@Google|Google\s+Cloud",
|
|
}
|
|
|
|
TAG_PATTERNS = {
|
|
"database": r"database|autonomous|exadata|rac|mysql|nosql",
|
|
"migration": r"migrat|move\s+to|zero\s+downtime",
|
|
"ha-dr": r"high\s+availability|disaster\s+recovery|data\s+guard|failover|MAA",
|
|
"security": r"secur|encrypt|vault|data\s+safe|cloud\s+guard|compliance",
|
|
"networking": r"network|vcn|subnet|fastconnect|vpn|drg|load\s+balanc",
|
|
"multicloud": r"multicloud|multi-cloud|azure|aws|google\s+cloud|database@",
|
|
"integration": r"integrat|oic|streaming|goldengate|data\s+flow",
|
|
"data-platform": r"data\s+lake|data\s+warehouse|analytics|data\s+platform",
|
|
"application": r"apex|ords|kubernetes|container|weblogic|tomcat",
|
|
"ai-ml": r"machine\s+learning|ai\s+|generative|vector|select\s+ai",
|
|
"autonomous": r"autonomous\s+database|adb|auto-scal",
|
|
}
|
|
|
|
|
|
def detect_services(text):
|
|
"""Auto-detect OCI services mentioned in text."""
|
|
found = []
|
|
for svc, pattern in SERVICE_PATTERNS.items():
|
|
if re.search(pattern, text, re.IGNORECASE):
|
|
found.append(svc)
|
|
return sorted(set(found))
|
|
|
|
|
|
def detect_tags(text):
|
|
"""Auto-detect topic tags from text."""
|
|
found = []
|
|
for tag, pattern in TAG_PATTERNS.items():
|
|
if re.search(pattern, text, re.IGNORECASE):
|
|
found.append(tag)
|
|
return sorted(set(found))
|
|
|
|
|
|
def fetch_page(url, delay=1.0):
|
|
"""Fetch a page with rate limiting."""
|
|
time.sleep(delay)
|
|
headers = {"User-Agent": "OCI-Deal-Accelerator-CatalogBuilder/1.0"}
|
|
resp = requests.get(url, headers=headers, timeout=30)
|
|
resp.raise_for_status()
|
|
return BeautifulSoup(resp.text, "html.parser")
|
|
|
|
|
|
def extract_entry(url):
|
|
"""Extract catalog entry from a reference architecture page."""
|
|
try:
|
|
soup = fetch_page(url)
|
|
|
|
title = soup.find("h1")
|
|
title_text = title.get_text(strip=True) if title else "Unknown"
|
|
|
|
# Get all text for service/tag detection
|
|
body = soup.get_text(" ", strip=True)
|
|
|
|
# Extract first 2-3 sentences as summary
|
|
paragraphs = soup.find_all("p")
|
|
summary_parts = []
|
|
for p in paragraphs[:5]:
|
|
text = p.get_text(strip=True)
|
|
if len(text) > 50 and "Copyright" not in text:
|
|
summary_parts.append(text)
|
|
if len(" ".join(summary_parts)) > 300:
|
|
break
|
|
|
|
summary = " ".join(summary_parts)[:500]
|
|
|
|
# Detect services and tags
|
|
services = detect_services(body)
|
|
tags = detect_tags(body)
|
|
|
|
# Detect type
|
|
entry_type = "reference-architecture"
|
|
if "playbook" in body.lower():
|
|
entry_type = "solution-playbook"
|
|
elif "built and deployed" in body.lower() or "customer" in title_text.lower():
|
|
entry_type = "built-deployed"
|
|
|
|
# Find terraform/github links
|
|
terraform = None
|
|
for a in soup.find_all("a", href=True):
|
|
if "github" in a["href"].lower():
|
|
terraform = a["href"]
|
|
break
|
|
|
|
return {
|
|
"title": title_text,
|
|
"url": url,
|
|
"type": entry_type,
|
|
"services": services,
|
|
"tags": tags,
|
|
"summary": summary,
|
|
"terraform": terraform,
|
|
}
|
|
except Exception as e:
|
|
print(f" ERROR fetching {url}: {e}")
|
|
return None
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--url", help="Fetch a single URL")
|
|
parser.add_argument("--whats-new", action="store_true", help="Fetch from What's New pages")
|
|
parser.add_argument("--output", default="kb/architecture-center/catalog.yaml")
|
|
args = parser.parse_args()
|
|
|
|
if args.url:
|
|
entry = extract_entry(args.url)
|
|
if entry:
|
|
print(yaml.dump([entry], default_flow_style=False))
|
|
elif args.whats_new:
|
|
# Fetch What's New pages and extract all links
|
|
# ... implement the full crawl
|
|
pass
|
|
else:
|
|
print("Usage: --url <url> or --whats-new")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
```
|
|
|
|
**Requirements:** `pip install requests beautifulsoup4`
|
|
|
|
---
|
|
|
|
## Step 5: Integration with the Skill
|
|
|
|
### Update `kb/INDEX.yaml`
|
|
|
|
Add:
|
|
|
|
```yaml
|
|
architecture_center:
|
|
catalog:
|
|
path: "kb/architecture-center/catalog.yaml"
|
|
keywords: ["reference architecture", "oracle architecture center", "solution playbook", "built deployed"]
|
|
load_when: "composing architecture or generating ADRs — match customer workload against known Oracle patterns"
|
|
```
|
|
|
|
### How the Skill Uses It
|
|
|
|
During Phase 2 (Architecture Composition), after selecting services and patterns, the skill scans the catalog for matching entries:
|
|
|
|
```
|
|
Matching logic:
|
|
1. Compare selected services against entry.services
|
|
2. Compare workload tags against entry.tags
|
|
3. If ≥2 service matches + ≥1 tag match → STRONG MATCH
|
|
4. If ≥1 service match + ≥2 tag matches → MODERATE MATCH
|
|
|
|
Output in the deck:
|
|
- Architecture Decisions slide: "Based on Oracle Reference Architecture: [title] ([url])"
|
|
- Technical document: Full reference with link
|
|
- Risk register: Note any deviations from the reference architecture
|
|
```
|
|
|
|
Example match for the Laboratorios Farma case:
|
|
```
|
|
Customer: ADB-S + ADG + VPN + private subnet + APEX
|
|
Matches:
|
|
✅ STRONG: "Deploy secure ADB and APEX application" (adb-s, apex, load-balancer)
|
|
✅ MODERATE: "Deploy ORDS with High Availability on OCI" (adb-s, load-balancer)
|
|
✅ MODERATE: "Migrate on-premises Oracle Database to ADB" (adb-s, migration)
|
|
```
|
|
|
|
---
|
|
|
|
## Build Order
|
|
|
|
1. Create `kb/architecture-center/` directory
|
|
2. Run the refresh script to generate `catalog.yaml` (or build manually from What's New pages)
|
|
3. Review and curate the auto-generated entries (fix summaries, verify tags)
|
|
4. Update `kb/INDEX.yaml` with the architecture-center reference
|
|
5. Update `SKILL.md` / `SKILL_COMPACT.md` with matching logic instructions
|
|
6. Add `tools/refresh_arch_catalog.py` to the repo
|
|
7. Add tests: verify catalog loads, entries have required fields, no broken URLs
|
|
|
|
## Refresh Cadence
|
|
|
|
- **Monthly**: Run `python tools/refresh_arch_catalog.py --whats-new` to pick up new entries
|
|
- **On Oracle release**: Check for new reference architectures related to new features
|
|
- **Manual add**: For entries the scraper misses, add manually following the format
|
|
|
|
## When Done
|
|
|
|
```bash
|
|
git add .
|
|
git commit -m "feat: Architecture Center catalog — reference architectures index"
|
|
git push -u origin feature/architecture-center-catalog
|
|
```
|