diff --git a/docker/demo/db-1/datas/compute_resource.json b/docker/demo/db-1/datas/compute_resource.json index d3f34ff..79aa630 100644 --- a/docker/demo/db-1/datas/compute_resource.json +++ b/docker/demo/db-1/datas/compute_resource.json @@ -14,7 +14,7 @@ "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 1 }, - "logo": "https://localhost:8000/static/images/Mundi datacenter.png", + "logo": "http://localhost:8000/static/images/Mundi datacenter.png", "description": "Toulouse-based GPU cluster operated by IRT Saint-Exupéry under the Mundi Opencloud programme. Node spec: 1× Intel Core i7-14700KF (3.6 GHz base, 5.6 GHz boost, 20 cores / 28 threads, Intel 7 process), 16 GB DDR5-6000, 8× NVIDIA RTX 3090 FE (24 GB GDDR6X, 10 496 CUDA cores, 328 3rd-gen tensor cores each). Total GPU VRAM per node: 192 GB. Specialised for GPU-accelerated computer-vision workloads: image batch processing, ONNX/TensorRT neural-network inference, satellite raster analytics (GDAL 3.8 stack). Connected to IRT local storage (/mnt/vol) via 10 GbE with direct NFS mount. Power mix: ~60% solar / ~40% coal. Annual CO₂ footprint: ~1 000 kg eqCO₂.", "short_description": "IRT Saint-Exupéry GPU cluster — i7-14700KF + 8× RTX 3090 FE per node (peer-1)", "owners": [{"name": "IRT Saint Exupery"}], @@ -62,7 +62,7 @@ "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 1 }, - "logo": "https://localhost:8000/static/images/vm_logo.png", + "logo": "http://localhost:8000/static/images/vm_logo.png", "description": "x86_64 virtual machine (KVM) running on the opencloud-demo-2 (peer-2) Proxmox VE 8 hypervisor cluster at IP 172.16.0.181. Host hardware: Intel Core Ultra 9 285K (3.6 GHz, 32 cores Arrow Lake-S, Intel 3 process), 16 GB DDR5-6400 ECC. Exposed to peer-1 for cross-peer workflow scheduling via Admiralty multi-cluster federation; scheduling happens transparently through the OpenCloud workflow engine without explicit SSH or kubectl access from peer-1. Handles CPU-bound processing steps (Python analysis, ALPR recognition) that benefit from low-latency access to peer-2-hosted MinIO storage. Inter-peer data traffic encrypted in transit (mTLS). Power: 100% alternating-current reclaimed energy. Annual CO₂: ~1 000 kg eqCO₂.", "short_description": "Peer-2 KVM VM — cross-peer execution target owned by opencloud-demo-2", "owners": [{"name": "IRT Saint Exupery"}] @@ -99,7 +99,7 @@ "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 1 }, - "logo": "https://localhost:8000/static/images/Meteo France datacenter.png", + "logo": "http://localhost:8000/static/images/Meteo France datacenter.png", "description": "HPC node operated by Météo-France at their Toulouse facility. Node spec: Intel Core i7-14700KF (3.6 GHz, 20 cores), 32 GB DDR5-6000, 8× NVIDIA RTX 3090 FE GPU. SecNumCloud-compliant (ANSSI qualification): data at rest AES-256, inter-node TLS 1.3, access governed by RBAC with attribute-based policy. Primarily reserved for numerical weather prediction (NWP) post-processing (AROME-France 1.3 km, ARPEGE global) and satellite raster ingestion (Sentinel-3 OLCI / SRAL, Copernicus Land Service). Available to OpenCloud federation workloads during off-peak hours (20:00–06:00 UTC). Power mix: solar + coal. Annual CO₂: ~1 000 kg eqCO₂.", "short_description": "Météo-France SecNumCloud HPC node — i7-14700KF + 8× RTX 3090 FE (peer-1)", "owners": [{"name": "Meteo France"}] @@ -122,6 +122,47 @@ "architecture": "x86", "infrastructure": 0 }, + { + "_id": "11110001-1111-4001-8001-111111111111", + "abstractinstanciatedresource": { + "abstractresource": { + "type": "compute", + "abstractobject": { + "id": "11110001-1111-4001-8001-111111111111", + "name": "Local K3s Peer-1", + "is_draft": false, + "creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", + "creation_date": "2021-09-30T14:00:00.000Z", + "update_date": "2026-04-13T00:00:00.000Z", + "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", + "access_mode": 1 + }, + "logo": "http://localhost:8000/static/images/vm_logo.png", + "description": "K3s single-node Kubernetes cluster running directly on the opencloud-demo-1 (peer-1) bare-metal host at IP 172.16.0.180. Host hardware: Intel Core Ultra 9 285K (3.6 GHz base, 5.6 GHz boost, 32 cores Arrow Lake-S, Intel 3 process), 16 GB DDR5-6400 ECC. Provides the local Kubernetes scheduling plane for peer-1 workloads orchestrated by Admiralty federation. Workloads scheduled here run natively on the host kernel without a hypervisor layer, giving lower overhead than the KVM VM targets. Storage accessible via NFS mount to /mnt/vol. Power: 100% reclaimed alternating-current energy. Annual CO₂: ~1 000 kg eqCO₂.", + "short_description": "Peer-1 local K3s cluster — bare-metal Kubernetes on Intel Core Ultra 9 285K (opencloud-demo-1)", + "owners": [{"name": "IRT Saint Exupery"}], + "allowed_booking_modes": { + "0": {"inflate": false, "percent": 0, "priority": 0}, + "1": {"inflate": false, "percent": 5, "priority": 1} + } + }, + "instances": [{ + "resourceinstance": { + "abstractobject": {"id": "11110001-1111-4001-8001-111111111111", "name": "Local K3s Peer-1 Toulouse", "is_draft": false, "access_mode": 0}, + "location": {"latitude": 43.6047, "longitude": 1.4442}, + "country": 250, + "partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}] + }, + "security_level": "private", + "annual_co2_emissions": 1000, + "power_sources": ["Larmes d'alternant"], + "cpus": {"Intel Core Ultra 9 285K": {"model": "Intel Core Ultra 9 285K", "frequency": 3.6, "cores": 32, "architecture": "x86"}}, + "nodes": [{"name": "default", "quantity": 1, "ram": {"size": 16384}, "cpus": {"Intel Core Ultra 9 285K": 1}}] + }] + }, + "architecture": "x86", + "infrastructure": 1 + }, { "_id": "979776c3-9ae7-4e02-9138-7b30b25f22cc", "abstractinstanciatedresource": { @@ -137,7 +178,7 @@ "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 1 }, - "logo": "https://localhost:8000/static/images/vm_logo.png", + "logo": "http://localhost:8000/static/images/vm_logo.png", "description": "x86_64 virtual machine (KVM) on the opencloud-demo-1 (peer-1) Proxmox VE 8 cluster at IP 172.16.0.180. Host: Intel Core Ultra 9 285K (3.6 GHz, 32 cores Arrow Lake-S), 16 GB DDR5-6400. Peer-1-only scope: not exposed to external peers. Used as an isolated sandbox for running workflow steps that must not leave peer-1 infrastructure, and as a failover execution target when the Mundi datacenter GPU cluster is unavailable or saturated. VLAN-isolated from the federation DMZ; storage accessible via NFS mount to /mnt/vol. Power: 100% reclaimed alternating-current energy. Annual CO₂: ~1 000 kg eqCO₂.", "short_description": "Peer-1 KVM VM — isolated local execution target owned by opencloud-demo-1", "owners": [{"name": "IRT Saint Exupery"}] @@ -174,7 +215,7 @@ "updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "access_mode": 1 }, - "logo": "https://localhost:8000/static/images/vm_logo.png", + "logo": "http://localhost:8000/static/images/vm_logo.png", "description": "High-density bare-metal server owned by opencloud-demo-2, hosted in a Tier-3 Paris data centre (PUE 1.3). 4 compute nodes, each: 2× AMD EPYC 9654 (2.4 GHz base, 3.7 GHz boost, 96 cores / 192 threads per socket, Zen 4, 5nm TSMC), 64 GB DDR5-4800 ECC registered, 2× NVIDIA RTX 4090 (24 GB GDDR6X, 16 384 CUDA cores, 512 4th-gen tensor cores). Total cluster: 768 CPU cores and 192 GB GPU VRAM across 4 nodes. Dedicated to containerised workloads requiring both high CPU parallelism (Redis, Nginx, Mosquitto pub/sub) and optional GPU acceleration (Stable Diffusion inference, large model fine-tuning). Exposed to partner peers via OpenCloud Federation manifest. Powered 100% by certified renewable (solar PPA). Annual CO₂: ~500 kg eqCO₂.", "short_description": "Peer-2 bare-metal cluster — 4 nodes × dual EPYC 9654 + 2× RTX 4090, solar-powered", "owners": [{"name": "opencloud-demo-2"}], diff --git a/docker/demo/db-1/datas/data_resource.json b/docker/demo/db-1/datas/data_resource.json index c2832cb..394d385 100644 --- a/docker/demo/db-1/datas/data_resource.json +++ b/docker/demo/db-1/datas/data_resource.json @@ -14,7 +14,7 @@ "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 1 }, - "logo": "https://images.wondershare.com/repairit/article/guide-on-jpeg-repair-online-01.png", + "logo": "http://images.wondershare.com/repairit/article/guide-on-jpeg-repair-online-01.png", "description": "Single-frame JPEG (h786poj.jpg, 590 KB, 2592×1944 px, sRGB) extracted from a French motorway speed-camera sequence. Depicts a red Peugeot 308 SW at an oblique 40° rear angle; licence plate FR-AA-000 fully unoccluded and in focus. Reference artefact for ALPR regression tests: standard 23° skew, 98 lx simulated ambient light, 35 km/h forward motion (motion-blur coefficient 0.18). Used as the canonical static input in the alpr and image-meta-extractor workflows to ensure reproducible plate-extraction benchmarks across peers. Served statically from the openalpr.com CDN evaluation dataset; SHA-1 checksum stable across CDN edge pops. Licence: OpenALPR evaluation — non-commercial use only.", "short_description": "OpenALPR benchmark JPEG — red Peugeot 308, unoccluded rear plate, 2592×1944 px", "owners": [{"name": "OpenALPR"}] @@ -52,8 +52,8 @@ "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 1 }, - "logo": "https://localhost:8000/static/images/alpine-logo.png", - "description": "Rolling series of JPEG snapshots (eu-001.jpg, avg 250 KB per frame, 1920×1080 px) captured at 0.2 Hz (one frame per 5 s) by a Hikvision DS-2CD2T43G2-2I bullet camera mounted 6 m above a Toulouse ring-road on-ramp. H.264-encoded video stream demuxed by an onboard RTSP gateway; individual frames exposed as a static HTTPS endpoint refreshed server-side every 5 seconds. Resolution sufficient for single-plate detection at vehicle distance 4–12 m with a 50 mm equivalent focal length. Frames are baseline JPEG (quality factor 85, no progressive encoding) and carry EXIF GPS tag matching the camera pole coordinates (43.6047°N, 1.4442°E). Classified as non-public operational data; OpenCloud federation partnerships restricted to default namespace. Source endpoint served from the openalpr CDN staging mirror; not archived.", + "logo": "http://localhost:8000/static/images/alpine-logo.png", + "description": "Rolling series of JPEG snapshots (eu-001.jpg, avg 250 KB per frame, 1920×1080 px) captured at 0.2 Hz (one frame per 5 s) by a Hikvision DS-2CD2T43G2-2I bullet camera mounted 6 m above a Toulouse ring-road on-ramp. H.264-encoded video stream demuxed by an onboard RTSP gateway; individual frames exposed as a static http endpoint refreshed server-side every 5 seconds. Resolution sufficient for single-plate detection at vehicle distance 4–12 m with a 50 mm equivalent focal length. Frames are baseline JPEG (quality factor 85, no progressive encoding) and carry EXIF GPS tag matching the camera pole coordinates (43.6047°N, 1.4442°E). Classified as non-public operational data; OpenCloud federation partnerships restricted to default namespace. Source endpoint served from the openalpr CDN staging mirror; not archived.", "short_description": "Toulouse ring-road live JPEG feed — 1920×1080, 0.2 Hz, Hikvision DS-2CD2T43G2-2I (peer-1)", "owners": [{"name": "IRT"}] }, @@ -90,8 +90,8 @@ "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 1 }, - "logo": "https://localhost:8000/static/images/Meteo France datacenter.png", - "description": "GRIB2-encoded short-range numerical weather prediction output from the Météo-France AROME-France 1.3 km model over metropolitan France (domain 37.5°N–55°N, 12°W–16°E). Issued 4× daily (00, 06, 12, 18 UTC runs); forecast horizon H+0 to H+48 at 1-hour steps. Fields per level: 2 m temperature (K), 10 m U/V wind components (m/s), total cloud cover fraction (0–1), convective available potential energy (J/kg), cumulative precipitation (kg/m²), surface pressure (Pa), relative humidity (%). Each full-run bundle: ~590 MB compressed (gzip level 6). Served from the Météo-France Données Publiques HTTPS API (token-free, rate-limit 500 req/day/IP). SHA-256 checksum file published alongside each bundle. Licence: Étalab Open Licence 2.0 — reuse and redistribution permitted with attribution.", + "logo": "http://localhost:8000/static/images/Meteo France datacenter.png", + "description": "GRIB2-encoded short-range numerical weather prediction output from the Météo-France AROME-France 1.3 km model over metropolitan France (domain 37.5°N–55°N, 12°W–16°E). Issued 4× daily (00, 06, 12, 18 UTC runs); forecast horizon H+0 to H+48 at 1-hour steps. Fields per level: 2 m temperature (K), 10 m U/V wind components (m/s), total cloud cover fraction (0–1), convective available potential energy (J/kg), cumulative precipitation (kg/m²), surface pressure (Pa), relative humidity (%). Each full-run bundle: ~590 MB compressed (gzip level 6). Served from the Météo-France Données Publiques http API (token-free, rate-limit 500 req/day/IP). SHA-256 checksum file published alongside each bundle. Licence: Étalab Open Licence 2.0 — reuse and redistribution permitted with attribution.", "short_description": "Météo-France AROME 1.3 km GRIB2 — H+48 NWP, 4× daily, Étalab open data (peer-1)", "owners": [{"name": "Meteo France"}] }, @@ -109,7 +109,7 @@ "open_data": true, "static": false, "size": 590, - "example": "https://donneespubliques.meteofrance.fr/" + "example": "http://donneespubliques.meteofrance.fr/" }, { "_id": "hh880008-hh88-4008-8008-hhhhhhhhhhhh", @@ -126,7 +126,7 @@ "updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "access_mode": 1 }, - "logo": "https://localhost:8000/static/images/alpine-logo.png", + "logo": "http://localhost:8000/static/images/alpine-logo.png", "description": "Structured NDJSON (newline-delimited JSON) HTTP access-log stream produced by the OpenCloud peer-2 API gateway (Nginx 1.25). Each record: {\"ts\":\"ISO-8601\",\"method\":\"HTTP verb\",\"path\":\"/endpoint\",\"status\":NNN,\"latency_ms\":N,\"peer\":\"opencloud-demo-2\",\"bytes_out\":N,\"upstream_ms\":N}. Rolling 24-h window; approximately 1.2 GB uncompressed per day at typical 300 req/min sustained load with bursts to 2 000 req/min. Flushed to the peer-2 MinIO bucket under /logs/api.log with a 1-minute write interval and gzip-compressed daily rotations retained for 30 days. Consumed by the api-monitoring-stack workflow: CURL fetches the current active chunk, Redis caches per-endpoint status-code distributions and p50/p95 latency percentiles under a 300-second TTL, Nginx serves the aggregated dashboard over HTTP/1.1. Data classification: internal peer-2 operational telemetry; partnerships restricted to default namespace.", "short_description": "Peer-2 API gateway NDJSON access logs — 1.2 GB/day, 300 req/min, 30-day MinIO retention", "owners": [{"name": "opencloud-demo-2"}] diff --git a/docker/demo/db-1/datas/processing_resource.json b/docker/demo/db-1/datas/processing_resource.json index 92291e6..c7d0072 100644 --- a/docker/demo/db-1/datas/processing_resource.json +++ b/docker/demo/db-1/datas/processing_resource.json @@ -15,7 +15,7 @@ "access_mode": 1 }, "logo": "http://localhost:8000/static/images/curl-logo.png", - "description": "Official curl Docker image (curlimages/curl:8.5.0) published by the curl project. Implements HTTP/1.1, HTTP/2, HTTPS (TLS 1.3), FTP, SFTP, SCP and 25+ other protocols. Supports cookies, redirect chains, proxy authentication, rate limiting, resumable transfers and parallel downloads (-Z flag). Typical workflow use: first-stage ingestion step that pulls remote datasets — camera snapshots, API log files, GeoTIFF archives, JSON feeds — into a shared storage volume before downstream processing nodes consume them. Single static binary; 12 MB compressed Alpine-based image; no shell dependency.", + "description": "Official curl Docker image (curlimages/curl:8.5.0) published by the curl project. Implements HTTP/1.1, HTTP/2, http (TLS 1.3), FTP, SFTP, SCP and 25+ other protocols. Supports cookies, redirect chains, proxy authentication, rate limiting, resumable transfers and parallel downloads (-Z flag). Typical workflow use: first-stage ingestion step that pulls remote datasets — camera snapshots, API log files, GeoTIFF archives, JSON feeds — into a shared storage volume before downstream processing nodes consume them. Single static binary; 12 MB compressed Alpine-based image; no shell dependency.", "short_description": "Official curl image — multi-protocol data fetcher for workflow ingestion stages", "owners": [{"name": "IRT"}] }, diff --git a/docker/demo/db-1/datas/storage_resource.json b/docker/demo/db-1/datas/storage_resource.json index 79b421f..7b494d6 100644 --- a/docker/demo/db-1/datas/storage_resource.json +++ b/docker/demo/db-1/datas/storage_resource.json @@ -102,7 +102,7 @@ "updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "access_mode": 1 }, - "logo": "https://min.io/resources/img/logo/ORIGINAL/vertical/dark/minioVerticalLogo-Dark.png", + "logo": "http://min.io/resources/img/logo/ORIGINAL/vertical/dark/minioVerticalLogo-Dark.png", "description": "MinIO Community Edition S3-compatible object store hosted on opencloud-demo-2 infrastructure, Paris Tier-3 data centre. Mount point: /mnt/minio. Capacity: 1 TB, NVMe RAID-6 array (6 drives, 2 parity), sustained throughput read 500 MB/s / write 400 MB/s, random IOPS 350 k. AES-256 encryption at rest; TLS 1.3 for all S3 API calls; server-side object integrity checksums (SHA-256). Bucket lifecycle policies: /logs prefix auto-archived to Glacier-class tier after 30 days; /tmp prefix purged after 24 h. Accessible to partner peers via S3 presigned URLs (1 h TTL) issued within the OpenCloud Federation default namespace. MinIO Console on :9001 restricted to peer-2 operators. Acts as the primary sink for peer-2 workflows: CURL log dumps, Redis snapshot exports and Mosquitto payload archives.", "short_description": "Peer-2 MinIO NVMe RAID-6 — 1 TB, 500/400 MB/s, AES-256, presigned S3 access", "owners": [{"name": "opencloud-demo-2"}], diff --git a/docker/demo/db-1/datas/workflow.json b/docker/demo/db-1/datas/workflow.json index 9166d97..dd6d155 100644 --- a/docker/demo/db-1/datas/workflow.json +++ b/docker/demo/db-1/datas/workflow.json @@ -92,7 +92,7 @@ "position": {"id": "", "x": 435.83, "y": 77.63}, "itemresource": {"data": {"type": "data", "quality": "low", "open_data": false, "static": true, "size": 0.59, "example": "tutut", "abstractinstanciatedresource": {"abstractresource": {"allowed_booking_modes": null, "purchaseinfo": null, - "logo": "https://images.wondershare.com/repairit/article/guide-on-jpeg-repair-online-01.png", + "logo": "http://images.wondershare.com/repairit/article/guide-on-jpeg-repair-online-01.png", "description": "Sample JPEG image of a red car with a visible license plate.", "short_description": "A casual red car", "owners": [{"name": "Red Car"}], "abstractobject": {"name": "Red Car", "is_draft": false, "creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", @@ -109,7 +109,7 @@ "position": {"id": "", "x": 638.33, "y": 295.86}, "itemresource": {"compute": {"architecture": "x86", "infrastructure": 0, "abstractinstanciatedresource": {"abstractresource": {"type": "compute", "purchaseinfo": null, - "logo": "https://cloud.o-forge.io/core/deprecated-oc-catalog/raw/branch/main/scripts/local_imgs/vm_logo.png", + "logo": "http://localhost:8000/static/images/vm_logo.png", "description": "VM hosted on opencloud-demo-2, shared with peer-1.", "short_description": "VM hosted on opencloud-demo-2 — peer-2 owned", "owners": [{"name": "IRT Saint Exupery"}], "allowed_booking_modes": null, "abstractobject": {"id": "0bb77206-371a-428e-8ae3-ff11575071e2", "not_in_catalog": false, "name": "VM Target 2", @@ -118,7 +118,7 @@ "instances": [{"resourceinstance": {"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 48.8566, "longitude": 2.3522}, "abstractobject": {"access_mode": 0, "id": "0bb77206-371a-428e-8ae3-ff11575071e2", "not_in_catalog": false, "name": "VM Proxmox Pierre 2", "is_draft": false}}, - "security_level": "private", "power_sources": ["Larmes d'alternant"]}]}}} + "security_level": "private", "power_sources": ["solar"]}]}}} }, "775c5cb3-5dc0-46ae-949c-1c5911b2ca4c": { "id": "775c5cb3-5dc0-46ae-949c-1c5911b2ca4c", "width": 100, "height": 100, @@ -242,7 +242,7 @@ "position": {"id": "", "x": 430, "y": 60}, "itemresource": {"data": {"type": "data", "quality": "low", "open_data": false, "static": true, "size": 0.59, "example": "http://plates.openalpr.com/h786poj.jpg", "abstractinstanciatedresource": {"abstractresource": {"allowed_booking_modes": null, "purchaseinfo": null, - "logo": "https://images.wondershare.com/repairit/article/guide-on-jpeg-repair-online-01.png", + "logo": "http://images.wondershare.com/repairit/article/guide-on-jpeg-repair-online-01.png", "description": "Sample JPEG image of a red car with a visible license plate.", "short_description": "Sample image of a red car with license plate", "owners": [{"name": "OpenALPR"}], @@ -331,7 +331,7 @@ "position": {"id": "", "x": 640, "y": 330}, "itemresource": {"compute": {"architecture": "x86", "infrastructure": 0, "abstractinstanciatedresource": {"abstractresource": {"type": "compute", "purchaseinfo": null, - "logo": "https://cloud.o-forge.io/core/deprecated-oc-catalog/raw/branch/main/scripts/local_imgs/vm_logo.png", + "logo": "http://localhost:8000/static/images/vm_logo.png", "description": "VM hosted on opencloud-demo-2, peer-2 owned. Executes the Python analysis step.", "short_description": "VM hosted on opencloud-demo-2 — peer-2 owned", "owners": [{"name": "IRT Saint Exupery"}], "allowed_booking_modes": null, @@ -340,7 +340,7 @@ "update_date": {"$date": "2021-09-30T14:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 0, "not_in_catalog": false}}, "instances": [{"resourceinstance": {"abstractobject": {"id": "0bb77206-371a-428e-8ae3-ff11575071e2", "name": "VM Proxmox Pierre 2", "is_draft": false, "access_mode": 0}, "origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 48.8566, "longitude": 2.3522}}, - "security_level": "private", "power_sources": ["Larmes d'alternant"]}]}}} + "security_level": "private", "power_sources": ["solar"]}]}}} } }, "links": [ @@ -483,7 +483,7 @@ "position": {"id": "", "x": 210, "y": 340}, "itemresource": {"storage": {"storage_type": 5, "acronym": "DC_myDC", "abstractinstanciatedresource": {"abstractresource": {"type": "storage", "purchaseinfo": null, - "logo": "https://min.io/resources/img/logo/ORIGINAL/vertical/dark/minioVerticalLogo-Dark.png", + "logo": "http://min.io/resources/img/logo/ORIGINAL/vertical/dark/minioVerticalLogo-Dark.png", "description": "MinIO NVMe RAID-6 1 TB object store, peer-2 owned. Primary sink for CURL log dumps and Redis snapshot exports.", "short_description": "Peer-2 MinIO NVMe RAID-6 — 1 TB, AES-256, S3-compatible", "owners": [{"name": "opencloud-demo-2"}], "allowed_booking_modes": null, @@ -501,7 +501,7 @@ "position": {"id": "", "x": 640, "y": 380}, "itemresource": {"compute": {"architecture": "x86", "infrastructure": 0, "abstractinstanciatedresource": {"abstractresource": {"type": "compute", "purchaseinfo": null, - "logo": "https://cloud.o-forge.io/core/deprecated-oc-catalog/raw/branch/main/scripts/local_imgs/vm_logo.png", + "logo": "http://localhost:8000/static/images/vm_logo.png", "description": "Peer-2 bare-metal cluster, 4 nodes × dual EPYC 9654 + 2× RTX 4090. Executes Redis and Nginx steps.", "short_description": "Peer-2 bare-metal cluster — dual EPYC 9654 + 2× RTX 4090, peer-2 owned", "owners": [{"name": "opencloud-demo-2"}], "allowed_booking_modes": null, @@ -696,7 +696,7 @@ "position": {"id": "", "x": 640, "y": 330}, "itemresource": {"compute": {"architecture": "x86", "infrastructure": 0, "abstractinstanciatedresource": {"abstractresource": {"type": "compute", "purchaseinfo": null, - "logo": "https://cloud.o-forge.io/core/deprecated-oc-catalog/raw/branch/main/scripts/local_imgs/vm_logo.png", + "logo": "http://localhost:8000/static/images/vm_logo.png", "description": "Peer-2 bare-metal cluster, 4 nodes × dual EPYC 9654 + 2× RTX 4090, peer-2 owned. Executes Python vehicle-detection step cross-peer.", "short_description": "Peer-2 bare-metal cluster — dual EPYC 9654 + 2× RTX 4090, peer-2 owned", "owners": [{"name": "opencloud-demo-2"}], "allowed_booking_modes": null, diff --git a/docker/demo/db-2/datas/compute_resource.json b/docker/demo/db-2/datas/compute_resource.json index a7b412b..fb8bf0d 100644 --- a/docker/demo/db-2/datas/compute_resource.json +++ b/docker/demo/db-2/datas/compute_resource.json @@ -39,6 +39,47 @@ "architecture": "x86", "infrastructure": 0 }, + { + "_id": "22220002-2222-4002-8002-222222222222", + "abstractinstanciatedresource": { + "abstractresource": { + "type": "compute", + "abstractobject": { + "id": "22220002-2222-4002-8002-222222222222", + "name": "Local K3s Peer-2", + "is_draft": false, + "creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", + "creation_date": "2021-09-30T14:00:00.000Z", + "update_date": "2026-04-13T00:00:00.000Z", + "updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", + "access_mode": 1 + }, + "logo": "http://localhost:9000/static/images/vm_logo.png", + "description": "K3s single-node Kubernetes cluster running directly on the opencloud-demo-2 (peer-2) bare-metal host at IP 172.16.0.181. Host hardware: Intel Core Ultra 9 285K (3.6 GHz base, 5.6 GHz boost, 32 cores Arrow Lake-S, Intel 3 process), 16 GB DDR5-6400 ECC. Provides the local Kubernetes scheduling plane for peer-2 workloads orchestrated by Admiralty federation. Workloads scheduled here run natively on the host kernel without a hypervisor layer, giving lower overhead than the KVM VM targets. Connected to peer-2-hosted MinIO storage. Inter-peer data traffic encrypted in transit (mTLS). Power: 100% alternating-current reclaimed energy. Annual CO₂: ~1 000 kg eqCO₂.", + "short_description": "Peer-2 local K3s cluster — bare-metal Kubernetes on Intel Core Ultra 9 285K (opencloud-demo-2)", + "owners": [{"name": "opencloud-demo-2"}], + "allowed_booking_modes": { + "0": {"inflate": false, "percent": 0, "priority": 0}, + "1": {"inflate": false, "percent": 5, "priority": 1} + } + }, + "instances": [{ + "resourceinstance": { + "abstractobject": {"id": "22220002-2222-4002-8002-222222222222", "name": "Local K3s Peer-2 Paris", "is_draft": false, "access_mode": 0}, + "location": {"latitude": 48.8566, "longitude": 2.3522}, + "country": 250, + "partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}] + }, + "security_level": "private", + "annual_co2_emissions": 1000, + "power_sources": ["Larmes d'alternant"], + "cpus": {"Intel Core Ultra 9 285K": {"model": "Intel Core Ultra 9 285K", "frequency": 3.6, "cores": 32, "architecture": "x86"}}, + "nodes": [{"name": "default", "quantity": 1, "ram": {"size": 16384}, "cpus": {"Intel Core Ultra 9 285K": 1}}] + }] + }, + "architecture": "x86", + "infrastructure": 1 + }, { "_id": "0bb77206-371a-428e-8ae3-ff11575071e2", "abstractinstanciatedresource": { diff --git a/docker/demo/db-2/datas/data_resource.json b/docker/demo/db-2/datas/data_resource.json index bf1ece0..4c35149 100644 --- a/docker/demo/db-2/datas/data_resource.json +++ b/docker/demo/db-2/datas/data_resource.json @@ -92,7 +92,7 @@ "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 1 }, - "logo": "https://images.wondershare.com/repairit/article/guide-on-jpeg-repair-online-01.png", + "logo": "http://images.wondershare.com/repairit/article/guide-on-jpeg-repair-online-01.png", "description": "Sample JPEG image of a red car with a visible license plate. Shared by peer-1.", "short_description": "Sample image of a red car with license plate", "owners": [{"name": "OpenALPR"}] diff --git a/docker/demo/db-2/datas/peer.json b/docker/demo/db-2/datas/peer.json index 59a7113..2d57d00 100644 --- a/docker/demo/db-2/datas/peer.json +++ b/docker/demo/db-2/datas/peer.json @@ -52,7 +52,7 @@ "wallet_address": "my-wallet", "public_key": "MCowBQYDK2VwAyEA/ymOIb0sJ0qCWrf3mKz7ACCvsMXLog/EK533JfNXZTM=", "peer_id": "12D4KooWSzQtBux5GkpdqK8MA9Rmo5W1vTVZhWCbut2k99Ge45GN", - "relation": 1, + "relation": 0, "abstractobject": { "id": "b97318c9-f5f8-44bb-8d48-913f4ddd6c31", "name": "opencloud-demo-3", diff --git a/docker/demo/db-2/datas/processing_resource.json b/docker/demo/db-2/datas/processing_resource.json index f42e015..caed892 100644 --- a/docker/demo/db-2/datas/processing_resource.json +++ b/docker/demo/db-2/datas/processing_resource.json @@ -15,7 +15,7 @@ "access_mode": 1 }, "logo": "http://localhost:8000/static/images/curl-logo.png", - "description": "Official curl Docker image (curlimages/curl:8.5.0) published by the curl project. Implements HTTP/1.1, HTTP/2, HTTPS (TLS 1.3), FTP, SFTP, SCP and 25+ other protocols. Supports cookies, redirect chains, proxy authentication, rate limiting, resumable transfers and parallel downloads (-Z flag). Typical workflow use: first-stage ingestion step that pulls remote datasets — camera snapshots, API log files, GeoTIFF archives, JSON feeds — into a shared storage volume before downstream processing nodes consume them. Single static binary; 12 MB compressed Alpine-based image; no shell dependency.", + "description": "Official curl Docker image (curlimages/curl:8.5.0) published by the curl project. Implements HTTP/1.1, HTTP/2, http (TLS 1.3), FTP, SFTP, SCP and 25+ other protocols. Supports cookies, redirect chains, proxy authentication, rate limiting, resumable transfers and parallel downloads (-Z flag). Typical workflow use: first-stage ingestion step that pulls remote datasets — camera snapshots, API log files, GeoTIFF archives, JSON feeds — into a shared storage volume before downstream processing nodes consume them. Single static binary; 12 MB compressed Alpine-based image; no shell dependency.", "short_description": "Official curl image — multi-protocol data fetcher for workflow ingestion stages", "owners": [{"name": "IRT"}] }, diff --git a/docker/demo/db-2/datas/storage_resource.json b/docker/demo/db-2/datas/storage_resource.json index 9c31d0b..2a0b333 100644 --- a/docker/demo/db-2/datas/storage_resource.json +++ b/docker/demo/db-2/datas/storage_resource.json @@ -14,7 +14,7 @@ "updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "access_mode": 1 }, - "logo": "https://min.io/resources/img/logo/ORIGINAL/vertical/dark/minioVerticalLogo-Dark.png", + "logo": "http://min.io/resources/img/logo/ORIGINAL/vertical/dark/minioVerticalLogo-Dark.png", "description": "MinIO Community Edition S3-compatible object store hosted on opencloud-demo-2 infrastructure, Paris Tier-3 data centre. Mount point: /mnt/minio. Capacity: 1 TB, NVMe RAID-6 array (6 drives, 2 parity), sustained throughput read 500 MB/s / write 400 MB/s, random IOPS 350 k. AES-256 encryption at rest; TLS 1.3 for all S3 API calls; server-side object integrity checksums (SHA-256). Bucket lifecycle policies: /logs prefix auto-archived to Glacier-class tier after 30 days; /tmp prefix purged after 24 h. Accessible to partner peers via S3 presigned URLs (1 h TTL) issued within the OpenCloud Federation default namespace. MinIO Console on :9001 restricted to peer-2 operators. Acts as the primary sink for peer-2 workflows: CURL log dumps, Redis snapshot exports and Mosquitto payload archives.", "short_description": "Peer-2 MinIO NVMe RAID-6 — 1 TB, 500/400 MB/s, AES-256, presigned S3 access", "owners": [{"name": "opencloud-demo-2"}] diff --git a/docker/demo/demo.sh b/docker/demo/demo.sh index a60df24..0e1a1dc 100755 --- a/docker/demo/demo.sh +++ b/docker/demo/demo.sh @@ -73,7 +73,7 @@ helm install admiralty oci://public.ecr.aws/admiralty/admiralty \ --wait echo "🌐 Configuring /etc/hosts..." -CLUSTER_IP=$(kubectl get svc kubernetes -o jsonpath='{.spec.clusterIP}') +CLUSTER_IP=$(ip -4 addr show $(ip route | awk '/default/ {print $5}') | awk '/inet / {print $2}' | cut -d/ -f1) if grep -q "kubernetes.default.svc.cluster.local" /etc/hosts; then sudo sed -i "s/^.*kubernetes.default.svc.cluster.local/$CLUSTER_IP kubernetes.default.svc.cluster.local/" /etc/hosts @@ -85,6 +85,9 @@ ca=$(kubectl config view --raw --minify -o jsonpath='{.clusters[0].cluster.certi cert=$(kubectl config view --raw --minify -o jsonpath='{.users[0].user.client-certificate-data}') key=$(kubectl config view --raw --minify -o jsonpath='{.users[0].user.client-key-data}') +docker network create \ + --subnet=172.40.0.0/24 \ + discovery || true REPOS=( "mongo" @@ -120,7 +123,7 @@ do docker rm $i || true done -REGISTRY= KUBE_CA=$ca KUBE_CERT=$cert KUBE_DATA=$key docker compose -f ./docker-compose.dev.yml up -d || true +KUBE_CA=$ca KUBE_CERT=$cert KUBE_DATA=$key docker compose -f ./docker-compose.dev.yml up -d || true cd ./db-1 && ./add.sh && cd .. # MISSING ADD DATAS @@ -156,7 +159,7 @@ do docker rm "$i" || true done -REGISTRY= KUBE_CA=$ca KUBE_CERT=$cert KUBE_DATA=$key docker compose -f ./docker-compose.dev2.yml up -d || true +KUBE_CA=$ca KUBE_CERT=$cert KUBE_DATA=$key docker compose -f ./docker-compose.dev2.yml up -d || true # MISSING ADD DATAS cd ./db-2 && ./add.sh && cd .. diff --git a/docker/demo/docker-compose.dev.yml b/docker/demo/docker-compose.dev.yml index 13023af..179e5fe 100644 --- a/docker/demo/docker-compose.dev.yml +++ b/docker/demo/docker-compose.dev.yml @@ -341,21 +341,27 @@ services: - 4001:4001 container_name: oc-discovery_1 networks: - - oc + discovery: + ipv4_address: 172.40.0.1 + oc: oc-discovery_2: image: '${REGISTRY:-opencloudregistry/}oc-discovery_2:latest' ports: - 4002:4002 container_name: oc-discovery_2 networks: - - oc + discovery: + ipv4_address: 172.40.0.2 + oc: oc-discovery_3: image: '${REGISTRY:-opencloudregistry/}oc-discovery_3:latest' ports: - 4003:4003 container_name: oc-discovery_3 networks: - - oc + discovery: + ipv4_address: 172.40.0.3 + oc: oc-schedulerd: image: '${REGISTRY:-opencloudregistry/}oc-schedulerd:latest' ports: @@ -392,6 +398,8 @@ services: - "traefik.enable=true" - "traefik.http.routers.static.entrypoints=web" - "traefik.http.routers.static.rule=PathPrefix(`/static`)" + - "traefik.http.routers.static.middlewares=static-stripprefix" + - "traefik.http.middlewares.static-stripprefix.stripprefix.prefixes=/static" - "traefik.http.services.static.loadbalancer.server.port=80" container_name: oc-static networks: @@ -403,4 +411,6 @@ volumes: networks: oc: external: true + discovery: + external: true diff --git a/docker/demo/docker-compose.dev2.yml b/docker/demo/docker-compose.dev2.yml index fae7939..9f2cd98 100644 --- a/docker/demo/docker-compose.dev2.yml +++ b/docker/demo/docker-compose.dev2.yml @@ -25,6 +25,7 @@ services: environment: - ME_CONFIG_BASICAUTH_USERNAME=test - ME_CONFIG_BASICAUTH_PASSWORD=test + - ME_CONFIG_MONGODB_SERVER=mongo2 nats2: image: 'nats:latest' container_name: nats2 @@ -142,14 +143,14 @@ services: volumes: - /var/run/docker.sock:/var/run/docker.sock:ro oc-datacenter2: - env_file: - - path: ./env.env - required: false environment: - - MONGO_DATABASE=DC_myDC - - KUBE_CA=${KUBE_CA:-} - - KUBE_CERT=${KUBE_CERT:-} - - KUBE_DATA=${KUBE_DATA:-} + - OC_MONGO_DATABASE=DC_myDC + - OC_MONGO_URL=mongodb://mongo2:27017/ + - OC_NATS_URL=nats://nats2:4222 + - OC_LOKI_URL=http://loki2:3100 + - OC_KUBE_CA=${KUBE_CA:-} + - OC_KUBE_CERT=${KUBE_CERT:-} + - OC_KUBE_DATA=${KUBE_DATA:-} image: '${REGISTRY:-opencloudregistry/}oc-datacenter:latest' ports: - 9092:8080 @@ -171,10 +172,13 @@ services: - oc2 oc-scheduler2: environment: - - MONGO_DATABASE=DC_myDC - - KUBE_CA=${KUBE_CA:-} - - KUBE_CERT=${KUBE_CERT:-} - - KUBE_DATA=${KUBE_DATA:-} + - OC_MONGO_DATABASE=DC_myDC + - OC_MONGO_URL=mongodb://mongo2:27017/ + - OC_LOKI_URL=http://loki2:3100 + - OC_NATS_URL=nats://nats2:4222 + - OC_KUBE_CA=${KUBE_CA:-} + - OC_KUBE_CERT=${KUBE_CERT:-} + - OC_KUBE_DATA=${KUBE_DATA:-} image: '${REGISTRY:-opencloudregistry/}oc-scheduler:latest' labels: - "traefik.stack=peer2" @@ -196,7 +200,10 @@ services: - oc2 oc-catalog2: environment: - - MONGO_DATABASE=DC_myDC + - OC_MONGO_DATABASE=DC_myDC + - OC_LOKI_URL=http://loki2:3100 + - OC_MONGO_URL=mongodb://mongo2:27017/ + - OC_NATS_URL=nats://nats2:4222 image: '${REGISTRY:-opencloudregistry/}oc-catalog:latest' ports: - 9087:8080 @@ -218,7 +225,10 @@ services: - "traefik.http.middlewares.auth-catalog2.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email" oc-workspace2: environment: - - MONGO_DATABASE=DC_myDC + - OC_MONGO_DATABASE=DC_myDC + - OC_LOKI_URL=http://loki2:3100 + - OC_MONGO_URL=mongodb://mongo2:27017/ + - OC_NATS_URL=nats://nats2:4222 image: '${REGISTRY:-opencloudregistry/}oc-workspace:latest' ports: - 9089:8080 @@ -240,7 +250,10 @@ services: - oc2 oc-peer2: environment: - - MONGO_DATABASE=DC_myDC + - OC_MONGO_DATABASE=DC_myDC + - OC_LOKI_URL=http://loki2:3100 + - OC_MONGO_URL=mongodb://mongo2:27017/ + - OC_NATS_URL=nats://nats2:4222 image: '${REGISTRY:-opencloudregistry/}oc-peer:latest' labels: - "traefik.stack=peer2" @@ -278,14 +291,17 @@ services: - "traefik.http.middlewares.auth-auth-sec2.forwardauth.trustForwardHeader=true" - "traefik.http.middlewares.auth-auth-sec2.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email" environment: - LDAP_ENDPOINTS: ldap2:389 - LDAP_BINDDN: cn=admin,dc=example,dc=com - LDAP_BINDPW: password - LDAP_BASEDN: "dc=example,dc=com" - LDAP_USER_BASEDN: "ou=users,dc=example,dc=com" - LDAP_ROLE_BASEDN: "ou=AppRoles,dc=example,dc=com" - ADMIN_ORIGIN: "http://localhost:9000" - OAUTH_REDIRECT_URI: "http://localhost:9000" + OC_MONGO_URL : mongodb://mongo2:27017/ + OC_NATS_URL: nats://nats2:4222 + OC_LDAP_ENDPOINTS: ldap2:389 + OC_LOKI_UR : http://loki2:3100 + OC_LDAP_BINDDN: cn=admin,dc=example,dc=com + OC_LDAP_BINDPW: password + OC_LDAP_BASEDN: "dc=example,dc=com" + OC_LDAP_USER_BASEDN: "ou=users,dc=example,dc=com" + OC_LDAP_ROLE_BASEDN: "ou=AppRoles,dc=example,dc=com" + OC_ADMIN_ORIGIN: "http://localhost:9000" + OC_OAUTH_REDIRECT_URI: "http://localhost:9000" networks: - oc2 volumes: @@ -293,7 +309,9 @@ services: - ./pem/public4.pem:/keys/public/public.pem oc-shared2: environment: - - MONGO_DATABASE=DC_myDC + - OC_MONGO_DATABASE=DC_myDC + - OC_MONGO_URL=mongodb://mongo2:27017/ + - OC_NATS_URL=nats://nats2:4222 image: '${REGISTRY:-opencloudregistry/}oc-shared:latest' ports: - 9091:8080 @@ -312,9 +330,9 @@ services: - oc2 oc-workflow2: environment: - - _OCWORKFLOW_MONGO_DATABASE=DC_myDC - - _OCWORKFLOW_MONGO_URL=mongodb://mongo2:27017 - - _OCWORKFLOW_NATS_URL=nats://nats2:4222 + - OC_MONGO_URL=mongodb://mongo2:27017/ + - OC_NATS_URL=nats://nats2:4222 + - OC_LOKI_URL=http://loki2:3100 image: '${REGISTRY:-opencloudregistry/}oc-workflow:latest' ports: - 9088:8080 @@ -336,16 +354,21 @@ services: - 4004:4004 container_name: oc-discovery_4 networks: - - oc2 + discovery: + ipv4_address: 172.40.0.4 + oc2: + oc: oc-schedulerd2: image: '${REGISTRY:-opencloudregistry/}oc-schedulerd:latest' ports: - 10006:8080 environment: - - MONGO_DATABASE=DC_myDC - - KUBE_CA=${KUBE_CA:-} - - KUBE_CERT=${KUBE_CERT:-} - - KUBE_DATA=${KUBE_DATA:-} + - OC_LOKI_URL=http://loki2:3100 + - OC_MONGO_DATABASE=DC_myDC + - OC_MONGO_URL=mongodb://mongo2:27017/ + - OC_KUBE_CA=${KUBE_CA:-} + - OC_KUBE_CERT=${KUBE_CERT:-} + - OC_KUBE_DATA=${KUBE_DATA:-} container_name: oc-schedulerd2 networks: - oc2 @@ -367,5 +390,9 @@ volumes: oc-data2: networks: + oc: + external: true oc2: external: true + discovery: + external: true