Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ede262abe |
32
README.md
32
README.md
@@ -1,35 +1,3 @@
|
||||
# RUN DOCKER DEMO
|
||||
http://localhost:8000/hydra/oauth2/auth?client_id=2171304d-d15e-45b7-8cc0-1f8e18235ccb&scope=openid offline profile email&response_type=code&redirect_uri=http://localhost:8094/swagger&state=xyz
|
||||
|
||||
ADD a clean argo
|
||||
```
|
||||
./run_argo.sh
|
||||
```
|
||||
Verify with `kubectl get pods -n argo -w` -> all server are running and 1/1
|
||||
Any problem with this, can be a top problem from your k3s or k8s (FIX IT BEFORE)
|
||||
|
||||
```
|
||||
sudo ./clone_opencloud_microservices.sh demo-alpr
|
||||
cd ./docker
|
||||
./start-demo.sh
|
||||
```
|
||||
|
||||
GO on localhost:8000, prefer a "chromium-browser --disable-web-security" chrome no CORS session to reach img.
|
||||
|
||||
Before launch or to stop properly
|
||||
|
||||
```
|
||||
cd ./docker
|
||||
./stop.sh
|
||||
```
|
||||
|
||||
if you want a linux app :
|
||||
|
||||
```
|
||||
cd ../oc-front
|
||||
./local_run_traefik.sh
|
||||
```
|
||||
|
||||
# Purpose of this component
|
||||
|
||||
The purpose of oc-deploy, is to deploy all the OC components over a Kubernetes cluster.
|
||||
|
||||
6
ansible/.gitignore
vendored
Normal file
6
ansible/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
create_kvm/
|
||||
alpr_with_argo.yml
|
||||
*.qcow*
|
||||
OpenPGP*
|
||||
my_hosts.yaml
|
||||
Admiraltyworker_kubeconfig/*
|
||||
95
ansible/Admiralty/README.md
Normal file
95
ansible/Admiralty/README.md
Normal file
@@ -0,0 +1,95 @@
|
||||
# README
|
||||
|
||||
## Ansible Playbooks for Admiralty Worker Setup with Argo Workflows
|
||||
|
||||
These Ansible playbooks help configure an existing Kubernetes (K8s) cluster as an Admiralty worker for Argo Workflows. The process consists of two main steps:
|
||||
|
||||
1. **Setting up a worker node**: This playbook prepares the worker cluster and generates the necessary kubeconfig.
|
||||
2. **Adding the worker to the source cluster**: This playbook registers the worker cluster with the source Kubernetes cluster.
|
||||
|
||||
---
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Ansible installed on the control machine.
|
||||
- Kubernetes cluster(s) with `kubectl` and `kubernetes.core` collection installed.
|
||||
- Necessary permissions to create ServiceAccounts, Roles, RoleBindings, Secrets, and Custom Resources.
|
||||
- `jq` installed on worker nodes.
|
||||
|
||||
---
|
||||
|
||||
## Playbook 1: Setting Up a Worker Node
|
||||
|
||||
This playbook configures a Kubernetes cluster to become an Admiralty worker for Argo Workflows.
|
||||
|
||||
### Variables (Pass through `--extra-vars`)
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `user_prompt` | The user running the Ansible playbook |
|
||||
| `namespace_prompt` | Kubernetes namespace where resources are created |
|
||||
| `source_prompt` | The name of the source cluster |
|
||||
|
||||
### Actions Performed
|
||||
|
||||
1. Installs required dependencies (`python3`, `python3-yaml`, `python3-kubernetes`, `jq`).
|
||||
2. Creates a service account for the source cluster.
|
||||
3. Grants patch permissions for pods to the `argo-role`.
|
||||
4. Adds the service account to `argo-rolebinding`.
|
||||
5. Creates a token for the service account.
|
||||
6. Creates a `Source` resource for Admiralty.
|
||||
7. Retrieves the worker cluster's kubeconfig and modifies it.
|
||||
8. Stores the kubeconfig locally.
|
||||
9. Displays the command needed to register this worker in the source cluster.
|
||||
|
||||
### Running the Playbook
|
||||
|
||||
```sh
|
||||
ansible-playbook setup_worker.yml -i <WORKER_HOST_IP>, --extra-vars "user_prompt=<YOUR_USER> namespace_prompt=<NAMESPACE> source_prompt=<SOURCE_NAME>"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Playbook 2: Adding Worker to Source Cluster
|
||||
|
||||
This playbook registers the configured worker cluster as an Admiralty target in the source Kubernetes cluster.
|
||||
|
||||
### Variables (Pass through `--extra-vars`)
|
||||
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `user_prompt` | The user running the Ansible playbook |
|
||||
| `target_name` | The name of the worker cluster in the source setup |
|
||||
| `target_ip` | IP of the worker cluster |
|
||||
| `namespace_source` | Namespace where the target is registered |
|
||||
| `serviceaccount_prompt` | The service account used in the worker |
|
||||
|
||||
### Actions Performed
|
||||
|
||||
1. Retrieves the stored kubeconfig from the worker setup.
|
||||
2. Creates a ServiceAccount in the target namespace.
|
||||
3. Stores the kubeconfig in a Kubernetes Secret.
|
||||
4. Creates an Admiralty `Target` resource in the source cluster.
|
||||
|
||||
### Running the Playbook
|
||||
|
||||
```sh
|
||||
ansible-playbook add_admiralty_target.yml -i <SOURCE_HOST_IP>, --extra-vars "user_prompt=<YOUR_USER> target_name=<TARGET_NAME_IN_KUBE> target_ip=<WORKER_IP> namespace_source=<NAMESPACE> serviceaccount_prompt=<SERVICE_ACCOUNT_NAME>"
|
||||
```
|
||||
|
||||
# Post Playbook
|
||||
|
||||
Don't forget to give the patching rights to the `serviceAccount` on the control node :
|
||||
|
||||
```bash
|
||||
kubectl patch role argo-role -n argo --type='json' -p '[{"op": "add", "path": "/rules/-", "value": {"apiGroups":[""],"resources":["pods"],"verbs":["patch"]}}]'
|
||||
```
|
||||
|
||||
Add the name of the `serviceAccount` in the following command
|
||||
|
||||
```bash
|
||||
kubectl patch rolebinding argo-binding -n argo --type='json' -p '[{"op": "add", "path": "/subjects/-", "value": {"kind": "ServiceAccount", "name": "<NAME OF THE USER ACCOUNT>", "namespace": "argo"}}]'
|
||||
```
|
||||
|
||||
Maybe we could add a play/playbook to sync the roles and rolesbinding between all nodes.
|
||||
|
||||
49
ansible/Admiralty/add_admiralty_target.yml
Normal file
49
ansible/Admiralty/add_admiralty_target.yml
Normal file
@@ -0,0 +1,49 @@
|
||||
- name: Setup an exsiting k8s cluster to become an admiralty worker for Argo Workflows
|
||||
hosts: all:!localhost
|
||||
user: "{{ user_prompt }}"
|
||||
vars:
|
||||
- service_account_name: "{{ serviceaccount_prompt }}"
|
||||
- namespace: "{{ namespace_source }}"
|
||||
|
||||
|
||||
tasks:
|
||||
|
||||
- name: Store kubeconfig value
|
||||
ansible.builtin.set_fact:
|
||||
kubeconfig: "{{ lookup('file','worker_kubeconfig/{{ target_ip }}_kubeconfig.json') | trim }}"
|
||||
|
||||
- name: Create the serviceAccount that will execute in the target
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: '{{ service_account_name }}'
|
||||
namespace: '{{ namespace }}'
|
||||
|
||||
- name: Create the token to authentify source
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
type: Opaque
|
||||
metadata:
|
||||
name: admiralty-secret-{{ target_name }}
|
||||
namespace: "{{ namespace_source }}"
|
||||
data:
|
||||
config: "{{ kubeconfig | tojson | b64encode }}"
|
||||
|
||||
- name: Create the target ressource
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
definition:
|
||||
apiVersion: multicluster.admiralty.io/v1alpha1
|
||||
kind: Target
|
||||
metadata:
|
||||
name: target-{{ target_name }}
|
||||
namespace: '{{ namespace_source }}'
|
||||
spec:
|
||||
kubeconfigSecret:
|
||||
name: admiralty-secret-{{ target_name }}
|
||||
2
ansible/Admiralty/ansible.cfg
Normal file
2
ansible/Admiralty/ansible.cfg
Normal file
@@ -0,0 +1,2 @@
|
||||
[defaults]
|
||||
result_format=default
|
||||
75
ansible/Admiralty/deploy_admiralty.yml
Normal file
75
ansible/Admiralty/deploy_admiralty.yml
Normal file
@@ -0,0 +1,75 @@
|
||||
- name: Install Helm
|
||||
hosts: all:!localhost
|
||||
user: "{{ user_prompt }}"
|
||||
become: true
|
||||
# become_method: su
|
||||
vars:
|
||||
arch_mapping: # Map ansible architecture {{ ansible_architecture }} names to Docker's architecture names
|
||||
x86_64: amd64
|
||||
aarch64: arm64
|
||||
|
||||
|
||||
tasks:
|
||||
- name: Check if Helm does exist
|
||||
ansible.builtin.command:
|
||||
cmd: which helm
|
||||
register: result_which
|
||||
failed_when: result_which.rc not in [ 0, 1 ]
|
||||
|
||||
- name: Install helm
|
||||
when: result_which.rc == 1
|
||||
block:
|
||||
- name: download helm from source
|
||||
ansible.builtin.get_url:
|
||||
url: https://get.helm.sh/helm-v3.15.0-linux-amd64.tar.gz
|
||||
dest: ./
|
||||
|
||||
- name: unpack helm
|
||||
ansible.builtin.unarchive:
|
||||
remote_src: true
|
||||
src: helm-v3.15.0-linux-amd64.tar.gz
|
||||
dest: ./
|
||||
|
||||
- name: copy helm to path
|
||||
ansible.builtin.command:
|
||||
cmd: mv linux-amd64/helm /usr/local/bin/helm
|
||||
|
||||
- name: Install admiralty
|
||||
hosts: all:!localhost
|
||||
user: "{{ user_prompt }}"
|
||||
|
||||
tasks:
|
||||
- name: Install required python libraries
|
||||
become: true
|
||||
# become_method: su
|
||||
package:
|
||||
name:
|
||||
- python3
|
||||
- python3-yaml
|
||||
state: present
|
||||
|
||||
- name: Add jetstack repo
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
helm repo add jetstack https://charts.jetstack.io && \
|
||||
helm repo update
|
||||
|
||||
- name: Install cert-manager
|
||||
kubernetes.core.helm:
|
||||
chart_ref: jetstack/cert-manager
|
||||
release_name: cert-manager
|
||||
context: default
|
||||
namespace: cert-manager
|
||||
create_namespace: true
|
||||
wait: true
|
||||
set_values:
|
||||
- value: installCRDs=true
|
||||
|
||||
- name: Install admiralty
|
||||
kubernetes.core.helm:
|
||||
name: admiralty
|
||||
chart_ref: oci://public.ecr.aws/admiralty/admiralty
|
||||
namespace: admiralty
|
||||
create_namespace: true
|
||||
chart_version: 0.16.0
|
||||
wait: true
|
||||
21
ansible/Admiralty/notes_admiralty.md
Normal file
21
ansible/Admiralty/notes_admiralty.md
Normal file
@@ -0,0 +1,21 @@
|
||||
Target
|
||||
---
|
||||
- Creer service account
|
||||
- Creer token pour service account (sa sur control == sa sur target, montre nom du sa + token pour accéder à target)
|
||||
- Créer fichier kubeconfig avec token et @IP (visible pour le controler/publique) et le récupérer pour le passer au controler
|
||||
- Créer une ressource source sur la target : dire qui va nous contacter
|
||||
- Rajouter les mêmes roles/droits que le sa "argo" au sa du controler
|
||||
- Dans authorization rajouter le verbe Patch sur la ressource pods
|
||||
- Rajouter le sa controler dans le rolebinding
|
||||
|
||||
Controler
|
||||
---
|
||||
- Créer le serviceAccount avec le même nom que sur la target
|
||||
- Récuperer le kubeconfig de la target
|
||||
- Creer un secret à partir du kubeconfig target
|
||||
- Creer la resource target à laquelle on associe le secret
|
||||
|
||||
Schema
|
||||
---
|
||||
Lorsqu'un ressource tagguée avec admiralty est exécutée sur le controller il va voir les targets en s'authentifiant avec le secret pour créer des pods avec le service account commun.
|
||||
|
||||
8
ansible/Admiralty/old/admiralty_inventory.yml
Normal file
8
ansible/Admiralty/old/admiralty_inventory.yml
Normal file
@@ -0,0 +1,8 @@
|
||||
myhosts:
|
||||
hosts:
|
||||
control:
|
||||
ansible_host: 172.16.0.184
|
||||
dc01: #oc-dev
|
||||
ansible_host: 172.16.0.187
|
||||
dc02:
|
||||
ansible_host:
|
||||
115
ansible/Admiralty/old/create_secrets.yml
Normal file
115
ansible/Admiralty/old/create_secrets.yml
Normal file
@@ -0,0 +1,115 @@
|
||||
- name: Create secret from Workload
|
||||
hosts: "{{ host_prompt }}"
|
||||
user: "{{ user_prompt }}"
|
||||
vars:
|
||||
secret_exists: false
|
||||
control_ip: 192.168.122.70
|
||||
user_prompt: admrescue
|
||||
|
||||
tasks:
|
||||
- name: Can management cluster be reached
|
||||
ansible.builtin.command:
|
||||
cmd: ping -c 5 "{{ control_ip }}"
|
||||
|
||||
- name: Install needed packages
|
||||
become: true
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- jq
|
||||
- python3-yaml
|
||||
- python3-kubernetes
|
||||
state: present
|
||||
|
||||
- name: Get the list of existing secrets
|
||||
kubernetes.core.k8s_info:
|
||||
api_version: v1
|
||||
kind: Secret
|
||||
name: "{{ inventory_hostname | lower }}"
|
||||
namespace: default
|
||||
register: list_secrets
|
||||
failed_when: false
|
||||
|
||||
- name: Create token
|
||||
ansible.builtin.command:
|
||||
cmd: kubectl create token admiralty-control
|
||||
register: cd_token
|
||||
|
||||
- name: Retrieve config
|
||||
ansible.builtin.command:
|
||||
cmd: kubectl config view --minify --raw --output json
|
||||
register: config_info
|
||||
|
||||
- name: Display config
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
echo > config_info.json
|
||||
|
||||
- name: Edit the config json with jq
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
CD_TOKEN="{{ cd_token.stdout }}" && \
|
||||
CD_IP="{{ control_ip }}" && \
|
||||
kubectl config view --minify --raw --output json | jq '.users[0].user={token:"'$CD_TOKEN'"} | .clusters[0].cluster.server="https://'$CD_IP':6443"'
|
||||
register: edited_config
|
||||
# failed_when: edited_config.skipped == true
|
||||
|
||||
- name: Set fact for secret
|
||||
set_fact:
|
||||
secret: "{{ edited_config.stdout }}"
|
||||
cacheable: true
|
||||
|
||||
- name: Create the source for controller
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
definition:
|
||||
apiVersion: multicluster.admiralty.io/v1alpha1
|
||||
kind: Source
|
||||
metadata:
|
||||
name: admiralty-control
|
||||
namespace: default
|
||||
spec:
|
||||
serviceAccountName: admiralty-control
|
||||
|
||||
|
||||
- name: Create secret from Workload
|
||||
hosts: "{{ control_host }}"
|
||||
user: "{{ user_prompt }}"
|
||||
gather_facts: true
|
||||
vars:
|
||||
secret: "{{ hostvars[host_prompt]['secret'] }}"
|
||||
user_prompt: admrescue
|
||||
|
||||
tasks:
|
||||
|
||||
- name: Get the list of existing secrets
|
||||
kubernetes.core.k8s_info:
|
||||
api_version: v1
|
||||
kind: Secret
|
||||
name: "{{ host_prompt | lower }}-secret"
|
||||
namespace: default
|
||||
register: list_secrets
|
||||
failed_when: false
|
||||
|
||||
- name: Test wether secret exists
|
||||
failed_when: secret == ''
|
||||
debug:
|
||||
msg: "Secret '{{ secret }}' "
|
||||
|
||||
- name: Create secret with new config
|
||||
ansible.builtin.command:
|
||||
cmd: kubectl create secret generic "{{ host_prompt | lower }}"-secret --from-literal=config='{{ secret }}'
|
||||
when: list_secrets.resources | length == 0
|
||||
|
||||
- name: Create target for the workload cluster
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
definition:
|
||||
apiVersion: multicluster.admiralty.io/v1alpha1
|
||||
kind: Target
|
||||
metadata:
|
||||
name: '{{ host_prompt | lower }}'
|
||||
namespace: default
|
||||
spec:
|
||||
kubeconfigSecret:
|
||||
name: $'{{ host_prompt | lower }}'-secret
|
||||
|
||||
33
ansible/Admiralty/sequence_diagram.puml
Normal file
33
ansible/Admiralty/sequence_diagram.puml
Normal file
@@ -0,0 +1,33 @@
|
||||
@startuml
|
||||
|
||||
actor User
|
||||
participant "Ansible Playbook" as Playbook
|
||||
participant "Target Node" as K8s
|
||||
participant "Control Node" as ControlNode
|
||||
|
||||
User -> Playbook: Start Playbook Execution
|
||||
Playbook -> Playbook: Save Target IP
|
||||
Playbook -> K8s: Install Required Packages
|
||||
Playbook -> K8s: Create Service Account
|
||||
Playbook -> K8s: Patch Role argo-role (Add pod patch permission)
|
||||
Playbook -> K8s: Patch RoleBinding argo-binding (Add service account)
|
||||
Playbook -> K8s: Create Token for Service Account
|
||||
Playbook -> K8s: Create Source Resource
|
||||
Playbook -> K8s: Retrieve Current Kubeconfig
|
||||
Playbook -> K8s: Convert Kubeconfig to JSON
|
||||
Playbook -> User: Display Worker Kubeconfig
|
||||
Playbook -> Playbook: Save Temporary Kubeconfig File
|
||||
Playbook -> Playbook: Modify Kubeconfig JSON (Replace user token, set server IP)
|
||||
Playbook -> User: Save Updated Kubeconfig File
|
||||
Playbook -> User: Display Instructions for Adding Target
|
||||
|
||||
User -> Playbook: Start Additional Playbook Execution
|
||||
Playbook -> Playbook: Store Kubeconfig Value
|
||||
Playbook -> User: Display Kubeconfig
|
||||
Playbook -> ControlNode : Copy Kubeconfig
|
||||
Playbook -> ControlNode: Create Service Account on Target
|
||||
Playbook -> ControlNode: Create Authentication Token for Source
|
||||
Playbook -> ControlNode: Create Target Resource
|
||||
|
||||
@enduml
|
||||
|
||||
110
ansible/Admiralty/setup_admiralty_target.yml
Normal file
110
ansible/Admiralty/setup_admiralty_target.yml
Normal file
@@ -0,0 +1,110 @@
|
||||
- name: Setup an exsiting k8s cluster to become an admiralty worker for Argo Workflows
|
||||
hosts: all:!localhost
|
||||
user: "{{ user_prompt }}"
|
||||
# Pass these through --extr-vars
|
||||
vars:
|
||||
- namespace: "{{ namespace_prompt }}"
|
||||
- source_name: "{{ source_prompt }}"
|
||||
- service_account_name : "admiralty-{{ source_prompt }}"
|
||||
environment:
|
||||
KUBECONFIG: /home/{{ user_prompt }}/.kube/config
|
||||
|
||||
tasks:
|
||||
- name: Save target IP
|
||||
set_fact:
|
||||
target_ip : "{{ ansible_host }}"
|
||||
|
||||
- name: Install the appropriates packages
|
||||
become: true
|
||||
become_method: sudo
|
||||
package:
|
||||
name:
|
||||
- python3
|
||||
- python3-yaml
|
||||
- python3-kubernetes
|
||||
- jq
|
||||
state: present
|
||||
|
||||
# We need to provide the source name in the command line through --extr-vars
|
||||
- name: Create a service account for the source
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: '{{ service_account_name }}'
|
||||
namespace: '{{ namespace }}'
|
||||
|
||||
- name: Add patch permission for pods to argo-role
|
||||
command: >
|
||||
kubectl patch role argo-role -n {{ namespace }} --type='json'
|
||||
-p '[{"op": "add", "path": "/rules/-", "value": {"apiGroups":[""],"resources":["pods"],"verbs":["patch"]}}]'
|
||||
register: patch_result
|
||||
changed_when: "'patched' in patch_result.stdout"
|
||||
|
||||
- name: Add service account to argo-rolebinding
|
||||
ansible.builtin.command: >
|
||||
kubectl patch rolebinding argo-role-binding -n {{ namespace }} --type='json'
|
||||
-p '[{"op": "add", "path": "/subjects/-", "value": {"kind": "ServiceAccount", "name": "{{ service_account_name }}", "namespace": "{{ namespace }}"}}]'
|
||||
register: patch_result
|
||||
changed_when: "'patched' in patch_result.stdout"
|
||||
|
||||
- name: Create a token for the created serivce account
|
||||
ansible.builtin.command:
|
||||
cmd: |
|
||||
kubectl create token '{{ service_account_name }}' -n {{ namespace }}
|
||||
register: token_source
|
||||
|
||||
- name: Create the source ressource
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
definition:
|
||||
apiVersion: multicluster.admiralty.io/v1alpha1
|
||||
kind: Source
|
||||
metadata:
|
||||
name: source-{{ source_name }}
|
||||
namespace: '{{ namespace }}'
|
||||
spec:
|
||||
serviceAccountName: "{{ service_account_name }}"
|
||||
|
||||
- name: Retrieve the current kubeconfig as json
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl config view --minify --raw --output json
|
||||
register: worker_kubeconfig
|
||||
|
||||
|
||||
- name: Convert kubeconfig to JSON
|
||||
set_fact:
|
||||
kubeconfig_json: "{{ worker_kubeconfig.stdout | trim | from_json }}"
|
||||
|
||||
- name: View worker kubeconfig
|
||||
ansible.builtin.debug:
|
||||
msg: '{{ kubeconfig_json }}'
|
||||
|
||||
- name: Temporary kubeconfig file
|
||||
ansible.builtin.copy:
|
||||
content: "{{ kubeconfig_json }}"
|
||||
dest: "{{ target_ip }}_kubeconfig.json"
|
||||
|
||||
- name: Modify kubeconfig JSON
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
jq '.users[0].user={token:"'{{ token_source.stdout }}'"} | .clusters[0].cluster.server="https://'{{ target_ip }}':6443"' {{ target_ip }}_kubeconfig.json
|
||||
register: kubeconfig_json
|
||||
|
||||
|
||||
|
||||
- name: Save updated kubeconfig
|
||||
ansible.builtin.copy:
|
||||
content: "{{ kubeconfig_json.stdout | trim | from_json | to_nice_json }}"
|
||||
dest: ./worker_kubeconfig/{{ target_ip }}_kubeconfig.json
|
||||
delegate_to: localhost
|
||||
|
||||
- name: Display informations for the creation of the target on the source host
|
||||
ansible.builtin.debug:
|
||||
msg: >
|
||||
- To add this host as a target in an Admiralty network use the following command line :
|
||||
- ansible-playbook add_admiralty_target.yml -i <SOURCE HOST IP>, --extra-vars "user_prompt=<YOUR USER> target_name=<TARGET NAME IN KUBE> target_ip={{ ansible_host }} namespace_source={{ namespace }} serviceaccount_prompt={{ service_account_name }}"
|
||||
- Don't forget to give {{ service_account_name }} the appropriate role in namespace {{ namespace }}
|
||||
121
ansible/Admiralty/setup_minio_argo_admiralty.yml
Normal file
121
ansible/Admiralty/setup_minio_argo_admiralty.yml
Normal file
@@ -0,0 +1,121 @@
|
||||
- name: Setup MinIO ressources for argo workflows/admiralty
|
||||
hosts: all:!localhost
|
||||
user: "{{ user_prompt }}"
|
||||
gather_facts: true
|
||||
become_method: sudo
|
||||
vars:
|
||||
- argo_namespace: "argo"
|
||||
- uuid: "{{ uuid_prompt }}"
|
||||
tasks:
|
||||
|
||||
- name: Install necessary packages
|
||||
become: true
|
||||
package:
|
||||
name:
|
||||
- python3-kubernetes
|
||||
state: present
|
||||
|
||||
- name: Create destination directory
|
||||
file:
|
||||
path: $HOME/minio-binaries
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: Install mc
|
||||
ansible.builtin.get_url:
|
||||
url: "https://dl.min.io/client/mc/release/linux-amd64/mc"
|
||||
dest: $HOME/minio-binaries/
|
||||
mode: +x
|
||||
headers:
|
||||
Content-Type: "application/json"
|
||||
|
||||
- name: Add mc to path
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
grep -qxF 'export PATH=$PATH:$HOME/minio-binaries' $HOME/.bashrc || echo 'export PATH=$PATH:$HOME/minio-binaries' >> $HOME/.bashrc
|
||||
|
||||
- name: Test bashrc
|
||||
ansible.builtin.shell:
|
||||
cmd : |
|
||||
tail -n 5 $HOME/.bashrc
|
||||
|
||||
- name: Retrieve root user
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl get secrets argo-artifacts -o jsonpath="{.data.rootUser}" | base64 -d -
|
||||
register: user
|
||||
|
||||
- name: Retrieve root password
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl get secret argo-artifacts --namespace default -o jsonpath="{.data.rootPassword}" | base64 -d -
|
||||
register : password
|
||||
|
||||
- name: Set up MinIO host in mc
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
$HOME/minio-binaries/mc alias set my-minio http://127.0.0.1:9000 '{{ user.stdout }}' '{{ password.stdout }}'
|
||||
|
||||
- name: Create oc-bucket
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
$HOME/minio-binaries/mc mb oc-bucket
|
||||
|
||||
- name: Run mc admin accesskey create command
|
||||
command: $HOME/minio-binaries/mc admin accesskey create --json my-minio
|
||||
register: minio_output
|
||||
changed_when: false # Avoid marking the task as changed every time
|
||||
|
||||
- name: Parse JSON output
|
||||
set_fact:
|
||||
access_key: "{{ minio_output.stdout | from_json | json_query('accessKey') }}"
|
||||
secret_key: "{{ minio_output.stdout | from_json | json_query('secretKey') }}"
|
||||
|
||||
- name: Retrieve cluster IP for minio API
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl get service argo-artifacts -o jsonpath="{.spec.clusterIP}"
|
||||
register: minio_cluster_ip
|
||||
|
||||
- name: Create the minio secret in argo namespace
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
namespace: '{{ argo_namespace }}'
|
||||
name: "{{ uuuid }}-argo-artifact-secret"
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
type: Opaque
|
||||
stringData:
|
||||
access-key: '{{ access_key}}'
|
||||
secret-key: '{{ secret_key }}'
|
||||
|
||||
|
||||
- name: Create the minio secret in argo namespace
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
namespace: '{{ argo_namespace }}'
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: artifact-repositories
|
||||
data:
|
||||
oc-s3-artifact-repository: |
|
||||
s3:
|
||||
bucket: oc-bucket
|
||||
endpoint: {{ minio_cluster_ip.stdout }}:9000
|
||||
insecure: true
|
||||
accessKeySecret:
|
||||
name: "{{ uuuid }}-argo-artifact-secret"
|
||||
key: access-key
|
||||
secretKeySecret:
|
||||
name: "{{ uuuid }}-argo-artifact-secret"
|
||||
key: secret-key
|
||||
|
||||
|
||||
# ansible.builtin.shell:
|
||||
# cmd: |
|
||||
# kubectl create secret -n '{{ argo_namespace }}' generic argo-artifact-secret \
|
||||
# --from-literal=access-key='{{ access_key }}' \
|
||||
# --from-literal=secret-key='{{ secret_key }}'
|
||||
149
ansible/Admiralty/weather_test_admiralty.yml
Normal file
149
ansible/Admiralty/weather_test_admiralty.yml
Normal file
@@ -0,0 +1,149 @@
|
||||
|
||||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Workflow
|
||||
metadata:
|
||||
generateName: harvesting-
|
||||
labels:
|
||||
example: 'true'
|
||||
workflows.argoproj.io/creator: 0d47b046-a09e-4bed-b10a-ec26783d4fe7
|
||||
workflows.argoproj.io/creator-email: pierre.bayle.at.irt-stexupery.com
|
||||
workflows.argoproj.io/creator-preferred-username: pbayle
|
||||
spec:
|
||||
templates:
|
||||
- name: busybox
|
||||
inputs:
|
||||
parameters:
|
||||
- name: model
|
||||
- name: output-dir
|
||||
- name: output-file
|
||||
- name: clustername
|
||||
outputs:
|
||||
parameters:
|
||||
- name: outfile
|
||||
value: '{{inputs.parameters.output-file}}.tgz'
|
||||
artifacts:
|
||||
- name: outputs
|
||||
path: '{{inputs.parameters.output-dir}}/{{inputs.parameters.output-file}}.tgz'
|
||||
s3:
|
||||
key: '{{workflow.name}}/{{inputs.parameters.output-file}}.tgz'
|
||||
container:
|
||||
image: busybox
|
||||
command: ["/bin/sh", "-c"]
|
||||
args:
|
||||
- |
|
||||
echo "Creating tarball for model: {{inputs.parameters.model}}";
|
||||
mkdir -p {{inputs.parameters.output-dir}};
|
||||
echo $(ping 8.8.8.8 -c 4) > $(date +%Y-%m-%d__%H-%M-%S)_{{inputs.parameters.output-file}}.txt
|
||||
tar -czf {{inputs.parameters.output-dir}}/{{inputs.parameters.output-file}}.tgz *_{{inputs.parameters.output-file}}.txt;
|
||||
metadata:
|
||||
annotations:
|
||||
multicluster.admiralty.io/elect: ""
|
||||
multicluster.admiralty.io/clustername: "{{inputs.parameters.clustername}}"
|
||||
|
||||
- name: weather-container
|
||||
inputs:
|
||||
parameters:
|
||||
- name: output-dir
|
||||
- name: output-file
|
||||
- name: clustername
|
||||
outputs:
|
||||
parameters:
|
||||
- name: outfile
|
||||
value: '{{inputs.parameters.output-file}}.tgz'
|
||||
artifacts:
|
||||
- name: outputs
|
||||
path: '{{inputs.parameters.output-dir}}/{{inputs.parameters.output-file}}.tgz'
|
||||
s3:
|
||||
insecure: true
|
||||
key: '{{workflow.name}}/{{inputs.parameters.output-file}}'
|
||||
container:
|
||||
name: weather-container
|
||||
image: pierrebirt/weather_container:latest
|
||||
#imagePullPolicy: IfNotPresent
|
||||
env:
|
||||
- name: API_KEY
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: cnes-secrets
|
||||
key: weather-api
|
||||
args:
|
||||
- '--key'
|
||||
- "$(API_KEY)"
|
||||
- '--dir'
|
||||
- '{{inputs.parameters.output-dir}}'
|
||||
- '--file'
|
||||
- '{{inputs.parameters.output-file}}'
|
||||
metadata:
|
||||
annotations:
|
||||
multicluster.admiralty.io/elect: ""
|
||||
multicluster.admiralty.io/clustername: "{{inputs.parameters.clustername}}"
|
||||
|
||||
- name: bucket-reader
|
||||
inputs:
|
||||
parameters:
|
||||
- name: bucket-path
|
||||
- name: logs-path
|
||||
artifacts:
|
||||
- name: retrieved-logs
|
||||
path: '{{inputs.parameters.logs-path}}'
|
||||
s3:
|
||||
key: '{{inputs.parameters.bucket-path}}'
|
||||
outputs:
|
||||
artifacts:
|
||||
- name: logs_for_test
|
||||
path: /tmp/empty_log_for_test.log
|
||||
s3:
|
||||
key: '{{workflow.name}}/log_test.log'
|
||||
container:
|
||||
image: busybox
|
||||
command: ["/bin/sh", "-c"]
|
||||
args:
|
||||
- |
|
||||
tar -xvf '{{inputs.parameters.logs-path}}'
|
||||
ls -la
|
||||
cat *.txt
|
||||
touch /tmp/empty_log_for_test.log
|
||||
|
||||
- name: harvesting-test
|
||||
inputs: {}
|
||||
outputs: {}
|
||||
metadata: {}
|
||||
dag:
|
||||
tasks:
|
||||
- name: busybox-dc02
|
||||
template: busybox
|
||||
arguments:
|
||||
parameters:
|
||||
- name: model
|
||||
value: era-pressure-levels
|
||||
- name: output-dir
|
||||
value: /app/data/output
|
||||
- name: output-file
|
||||
value: fake_logs
|
||||
- name: clustername
|
||||
value: target-dc02
|
||||
- name: weather-container-dc03
|
||||
template: weather-container
|
||||
arguments:
|
||||
parameters:
|
||||
- name: output-dir
|
||||
value: /app/results
|
||||
- name: output-file
|
||||
value: weather_results_23_01
|
||||
- name: clustername
|
||||
value: target-dc03
|
||||
- name: bucket-reader
|
||||
template: bucket-reader
|
||||
dependencies: [busybox-dc02,weather-container-dc03]
|
||||
arguments:
|
||||
parameters:
|
||||
- name: bucket-path
|
||||
value: '{{workflow.name}}/fake_logs.tgz'
|
||||
- name: logs-path
|
||||
value: /tmp/logs.tgz
|
||||
|
||||
entrypoint: harvesting-test
|
||||
serviceAccountName: argo-agregateur-workflow-controller
|
||||
artifactRepositoryRef: # https://argo-workflows.readthedocs.io/en/latest/fields/#s3artifactrepository
|
||||
key: admiralty-s3-artifact-repository # Choose the artifact repository with the public IP/url
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"apiVersion": "v1",
|
||||
"clusters": [
|
||||
{
|
||||
"cluster": {
|
||||
"certificate-authority-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTXpneE5EVTNNekl3SGhjTk1qVXdNVEk1TVRBeE5UTXlXaGNOTXpVd01USTNNVEF4TlRNeQpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTXpneE5EVTNNekl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFSWHFiRHBmcUtwWVAzaTFObVpCdEZ3RzNCZCtOY0RwenJKS01qOWFETlUKTUVYZmpRM3VrbzVISDVHdTFzNDRZY0p6Y29rVEFmb090QVhWS1pNMUs3YWVvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWM5MW5TYi9kaU1pbHVqR3RENjFRClc0djVKVmN3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnV05uSzlsU1lDY044VEFFODcwUnNOMEgwWFR6UndMNlAKOEF4Q0xwa3pDYkFDSVFDRW1LSkhveXFZRW5iZWZFU3VOYkthTHdtRkMrTE5lUHloOWxQUmhCVHdsQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
|
||||
"server": "https://172.16.0.181:6443"
|
||||
},
|
||||
"name": "default"
|
||||
}
|
||||
],
|
||||
"contexts": [
|
||||
{
|
||||
"context": {
|
||||
"cluster": "default",
|
||||
"user": "default"
|
||||
},
|
||||
"name": "default"
|
||||
}
|
||||
],
|
||||
"current-context": "default",
|
||||
"kind": "Config",
|
||||
"preferences": {},
|
||||
"users": [
|
||||
{
|
||||
"name": "default",
|
||||
"user": {
|
||||
"token": "eyJhbGciOiJSUzI1NiIsImtpZCI6Ik5nT1p0NVVMUVllYko1MVhLdVIyMW01MzJjY25NdTluZ3VNQ1RmMnNTUHcifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiLCJrM3MiXSwiZXhwIjoxNzM4Njg1NzM2LCJpYXQiOjE3Mzg2ODIxMzYsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiNTNkNzU4YmMtMGUwMC00YTU5LTgzZTUtYjkyYjZmODg2NWE2Iiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJhcmdvIiwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImFkbWlyYWx0eS1jb250cm9sIiwidWlkIjoiMWQ1NmEzMzktMTM0MC00NDY0LTg3OGYtMmIxY2ZiZDU1ZGJhIn19LCJuYmYiOjE3Mzg2ODIxMzYsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDphcmdvOmFkbWlyYWx0eS1jb250cm9sIn0.WMqmDvp8WZHEiupJewo2BplD0xu6yWhlgZkG4q_PpVCbHKd7cKYWnpTi_Ojmabvvw-VC5sZFZAaxZUnqdZNGf_RMrJ5pJ9B5cYtD_gsa7AGhrSz03nd5zPKvujT7-gzWmfHTpZOvWky00A2ykKLflibhJgft4FmFMxQ6rR3MWmtqeAo82wevF47ggdOiJz3kksFJPfEpk1bflumbUCk-fv76k6EljPEcFijsRur-CI4uuXdmTKb7G2TDmTMcFs9X4eGbBO2ZYOAVEw_Xafru6D-V8hWBTm-NWQiyyhdxlVdQg7BNnXJ_26GsJg4ql4Rg-Q-tXB5nGvd68g2MnGTWwg"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"apiVersion": "v1",
|
||||
"clusters": [
|
||||
{
|
||||
"cluster": {
|
||||
"certificate-authority-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTXpnd09ESTVNRFF3SGhjTk1qVXdNVEk0TVRZME9ESTBXaGNOTXpVd01USTJNVFkwT0RJMApXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTXpnd09ESTVNRFF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFSdUV0Y2lRS3VaZUpEV214TlJBUzM3TlFib3czSkpxMWJQSjdsdTN2eEgKR2czS1hGdFVHZWNGUjQzL1Rjd0pmanQ3WFpsVm9PUldtOFozYWp3OEJPS0ZvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTB3NG1uSlUrbkU3SnpxOHExRWdWCmFUNU1mMmd3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQU9JTUtsZHk0Y044a3JmVnQyUFpLQi80eXhpOGRzM0wKaHR0b2ZrSEZtRnlsQWlCMWUraE5BamVUdVNCQjBDLzZvQnA2c21xUDBOaytrdGFtOW9EM3pvSSs0Zz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
|
||||
"server": "https://172.16.0.184:6443"
|
||||
},
|
||||
"name": "default"
|
||||
}
|
||||
],
|
||||
"contexts": [
|
||||
{
|
||||
"context": {
|
||||
"cluster": "default",
|
||||
"user": "default"
|
||||
},
|
||||
"name": "default"
|
||||
}
|
||||
],
|
||||
"current-context": "default",
|
||||
"kind": "Config",
|
||||
"preferences": {},
|
||||
"users": [
|
||||
{
|
||||
"name": "default",
|
||||
"user": {
|
||||
"token": "eyJhbGciOiJSUzI1NiIsImtpZCI6InUzaGF0T1RuSkdHck1sbURrQm0waDdDeDFSS3pxZ3FVQ25aX1VrOEkzdFkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiLCJrM3MiXSwiZXhwIjoxNzM4Njg1NzM2LCJpYXQiOjE3Mzg2ODIxMzYsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiZDFmNzQ2NmQtN2MyOS00MGNkLTg1ZTgtMjZmMzFkYWU5Nzg4Iiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJhcmdvIiwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImFkbWlyYWx0eS1jb250cm9sIiwidWlkIjoiNTc0Y2E1OTQtY2IxZi00N2FiLTkxZGEtMDI0NDEwNjhjZjQwIn19LCJuYmYiOjE3Mzg2ODIxMzYsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDphcmdvOmFkbWlyYWx0eS1jb250cm9sIn0.ZJvTJawg73k5SEOG6357iYq_-w-7V4BqciURYJao_dtP_zDpcXyZ1Xw-sxNKITgLjByTkGaCJRjDtR2QdZumKtb8cl6ayv0UZMHHnFft4gtQi-ttjj69rQ5RTNA3dviPaQOQgWNAwPkUPryAM0Sjsd5pRWzXXe-NVpWQZ6ooNZeRBHyjT1Km1JoprB7i55vRJEbBnoK0laJUtHCNmLoxK5kJYQqeAtA-_ugdSJbnyTFQAG14vonZSyLWAQR-Hzw9QiqIkSEW1-fcvrrZbrVUZsl_i7tkrXSSY9EYwjrZlqIu79uToEa1oWvulGFEN6u6YGUydj9nXQJX_eDpaWvuOA"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"apiVersion": "v1",
|
||||
"clusters": [
|
||||
{
|
||||
"cluster": {
|
||||
"certificate-authority-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTXpnd09ESTVNRFF3SGhjTk1qVXdNVEk0TVRZME9ESTBXaGNOTXpVd01USTJNVFkwT0RJMApXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTXpnd09ESTVNRFF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFSdUV0Y2lRS3VaZUpEV214TlJBUzM3TlFib3czSkpxMWJQSjdsdTN2eEgKR2czS1hGdFVHZWNGUjQzL1Rjd0pmanQ3WFpsVm9PUldtOFozYWp3OEJPS0ZvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTB3NG1uSlUrbkU3SnpxOHExRWdWCmFUNU1mMmd3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQU9JTUtsZHk0Y044a3JmVnQyUFpLQi80eXhpOGRzM0wKaHR0b2ZrSEZtRnlsQWlCMWUraE5BamVUdVNCQjBDLzZvQnA2c21xUDBOaytrdGFtOW9EM3pvSSs0Zz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
|
||||
"server": "https://172.16.0.185:6443"
|
||||
},
|
||||
"name": "default"
|
||||
}
|
||||
],
|
||||
"contexts": [
|
||||
{
|
||||
"context": {
|
||||
"cluster": "default",
|
||||
"user": "default"
|
||||
},
|
||||
"name": "default"
|
||||
}
|
||||
],
|
||||
"current-context": "default",
|
||||
"kind": "Config",
|
||||
"preferences": {},
|
||||
"users": [
|
||||
{
|
||||
"name": "default",
|
||||
"user": {
|
||||
"token": "eyJhbGciOiJSUzI1NiIsImtpZCI6InUzaGF0T1RuSkdHck1sbURrQm0waDdDeDFSS3pxZ3FVQ25aX1VrOEkzdFkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiLCJrM3MiXSwiZXhwIjoxNzM4Njg1NzM2LCJpYXQiOjE3Mzg2ODIxMzYsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiODdlYjVkYTYtYWNlMi00YzFhLTg1YjctYWY1NDI2MjA1ZWY1Iiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJhcmdvIiwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImFkbWlyYWx0eS1jb250cm9sIiwidWlkIjoiZjFjNjViNDQtYmZmMC00Y2NlLTk4ZGQtMTU0YTFiYTk0YTU2In19LCJuYmYiOjE3Mzg2ODIxMzYsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDphcmdvOmFkbWlyYWx0eS1jb250cm9sIn0.SkpDamOWdyvTUk8MIMDMhuKD8qvJPpX-tjXPWX9XsfpMyjcB02kI-Cn9b8w1TnYpGJ_u3qyLzO7RlXOgSHtm7TKHOCoYudj4jNwRWqIcThxzAeTm53nlZirUU0E0eJU8cnWHGO3McAGOgkStpfVwHaTQHq2oMZ6jayQU_HuButGEvpFt2FMFEwY9pOjabYHPPOkY9ruswzNhGBRShxWxfOgCWIt8UmbrryrNeNd_kZlB0_vahuQkAskeJZd3f_hp7qnSyLd-YZa5hUrruLJBPQZRw2sPrZe0ukvdpuz7MCfE-CQzUDn6i3G6FCKzYfd-gHFIYNUowS0APHLcC-yWSQ"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"apiVersion": "v1",
|
||||
"clusters": [
|
||||
{
|
||||
"cluster": {
|
||||
"certificate-authority-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTlRJM05EVTROVE13SGhjTk1qVXdOekUzTURrMU1EVXpXaGNOTXpVd056RTFNRGsxTURVegpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTlRJM05EVTROVE13V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUTzJzVWE4MTVDTmVxWUNPdCthREoreG5hWHRZNng3R096a0c1U1U0TEEKRE1talExRVQwZi96OG9oVU55L1JneUt0bmtqb2JnZVJhOExTdDAwc3NrMDNvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVW1zeUVyWkQvbmxtNVJReUUwR0NICk1FWlU0ZWd3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnVXJsR3ZGZy9FVzhXdU1Nc3JmZkZTTHdmYm1saFI5MDYKYjdHaWhUNHdFRzBDSUVsb2FvWGdwNnM5c055eE1iSUwxKzNlVUtFc0k2Y2dDdldFVEZmRWtQTUIKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
|
||||
"server": "https://172.16.0.191:6443"
|
||||
},
|
||||
"name": "default"
|
||||
}
|
||||
],
|
||||
"contexts": [
|
||||
{
|
||||
"context": {
|
||||
"cluster": "default",
|
||||
"user": "default"
|
||||
},
|
||||
"name": "default"
|
||||
}
|
||||
],
|
||||
"current-context": "default",
|
||||
"kind": "Config",
|
||||
"preferences": {},
|
||||
"users": [
|
||||
{
|
||||
"name": "default",
|
||||
"user": {
|
||||
"token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IlZCTkEyUVJKeE9XblNpeUI1QUlMdWtLZmVpbGQ1LUpRTExvNWhkVjlEV2MifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiLCJrM3MiXSwiZXhwIjoxNzUzMTk0MjMxLCJpYXQiOjE3NTMxOTA2MzEsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiYTMyOTY0OTktNzhiZS00MzE0LTkyYjctMDQ1NTBkY2JjMGUyIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJ0ZXN0LWFkbWlyYWx0eS1hbnNpYmxlIiwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImFkbWlyYWx0eS1zb3VyY2UiLCJ1aWQiOiI4YmJhMTA3Mi0wYjZiLTQwYjUtYWI4Mi04OWQ1MTkyOGIwOTIifX0sIm5iZiI6MTc1MzE5MDYzMSwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50OnRlc3QtYWRtaXJhbHR5LWFuc2libGU6YWRtaXJhbHR5LXNvdXJjZSJ9.A0UJLoui_SX4dCgUZIo4kprZ3kb2WBkigvyy1e55qQMFZxRoAed6ZvR95XbHYNUoiHR-HZE04QO0QcOnFaaQDTA6fS9HHtjfPKAoqbXrpShyoHNciiQnhkwYvtEpG4bvDf0JMB9qbWGMrBoouHwx-JoQG0JeoQq-idMGiDeHhqVc86-Uy_angvRoAZGF5xmYgMPcw5-vZPGfgk1mHYx5vXNofCcmF4OqMvQaWyYmH82L5SYAYLTV39Z1aCKkDGGHt5y9dVJ0udA4E5Cx3gO2cLLLWxf8n7uFSUx8sHgFtZOGgXwN8DIrTe3Y95p09f3H7nTxjnmQ-Nce2hofLC2_ng"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
32
ansible/Admiralty/worker_kubeconfig/target01_kubeconfig.json
Normal file
32
ansible/Admiralty/worker_kubeconfig/target01_kubeconfig.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"apiVersion": "v1",
|
||||
"clusters": [
|
||||
{
|
||||
"cluster": {
|
||||
"certificate-authority-data": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTXpnNU1Ua3pPRFF3SGhjTk1qVXdNakEzTURrd09UUTBXaGNOTXpVd01qQTFNRGt3T1RRMApXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTXpnNU1Ua3pPRFF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFTYWsySHRMQVFUclVBSUF3ckUraDBJZ0QyS2dUcWxkNmorQlczcXRUSmcKOW9GR2FRb1lnUERvaGJtT29ueHRTeDlCSlc3elkrZEM2T3J5ekhkYzUzOGRvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVXd5UE1iOFAwaC9IR2szZ0dianozClFvOVVoQ293Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQUlBVE1ETGFpeWlwaUNuQjF1QWtYMkxiRXdrYk93QlcKb1U2eDluZnRMTThQQWlFQTUza0hZYU05ZVZVdThld3REa0M3TEs3RTlkSGczQ3pSNlBxSHJjUHJTeDA9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
|
||||
"server": "https://target01:6443"
|
||||
},
|
||||
"name": "default"
|
||||
}
|
||||
],
|
||||
"contexts": [
|
||||
{
|
||||
"context": {
|
||||
"cluster": "default",
|
||||
"user": "default"
|
||||
},
|
||||
"name": "default"
|
||||
}
|
||||
],
|
||||
"current-context": "default",
|
||||
"kind": "Config",
|
||||
"preferences": {},
|
||||
"users": [
|
||||
{
|
||||
"name": "default",
|
||||
"user": {
|
||||
"token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IlJwbHhUQ2ppREt3SmtHTWs4Z2cwdXBuWGtjTUluMVB0dFdGbUhEUVY2Y2MifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiLCJrM3MiXSwiZXhwIjoxNzQwMDUzODAyLCJpYXQiOjE3NDAwNTAyMDIsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiMThkNzdjMzctZjgyNC00MGVmLWExMDUtMzcxMzJkNjUxNzgzIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJhcmdvIiwic2VydmljZWFjY291bnQiOnsibmFtZSI6ImFkbWlyYWx0eS1jb250cm9sIiwidWlkIjoiNmExM2M4YTgtZmE0NC00NmJlLWI3ZWItYTQ0OWY3ZTMwZGM1In19LCJuYmYiOjE3NDAwNTAyMDIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDphcmdvOmFkbWlyYWx0eS1jb250cm9sIn0.DtKkkCEWLPp-9bmSbrqxvxO2kXfOW2cHlmxs5xPzTtn3DcNZ-yfUxJHxEv9Hz6-h732iljRKiWx3SrEN2ZjGq555xoOHV202NkyUqU3EWmBwmVQgvUKOZSn1tesAfI7fQp7sERa7oKz7ZZNHJ7x-nw0YBoxYa4ECRPkJKDR3uEyRsyFMaZJELi-wIUSZkeGxNR7PdQWoYPoJipnwXoyAFbT42r-pSR7nqzy0-Lx1il82klkZshPEj_CqycqJg1djoNoe4ekS7En1iljz03YqOqm1sFSOdvDRS8VGM_6Zm6e3PVwXQZVBgFy_ET1RqtxPsLyYmaPoIfPMq2xeRLoGIg"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
70
ansible/Argo/README.md
Normal file
70
ansible/Argo/README.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# Prerequisites
|
||||
Ensure that you have the following installed on your local machine:
|
||||
- Ansible
|
||||
- SSH access to the target host
|
||||
- Required dependencies for Kubernetes
|
||||
|
||||
Two passwords are required via the prompt:
|
||||
1. The username used to connect to the host via SSH.
|
||||
2. The root password for privilege escalation.
|
||||
|
||||
- You can use a user on the name with `NOPASSWD` permissions and not use `--ask-become-pass`
|
||||
|
||||
- You can use `ssh-copy-id` on the remote host on the user that you will provide and not use `--ask-pass`
|
||||
|
||||
|
||||
# Deployment Instructions
|
||||
|
||||
## Deploying K3s
|
||||
Replace `HOST_NAME` with the IP address or hostname of the target machine in `my_hosts.yaml`, then run:
|
||||
|
||||
```sh
|
||||
ansible-playbook -i <YOUR_HOST_IP>, deploy_k3s.yml --extra-vars "user_prompt=YOUR_USER" --ask-pass --ask-become-pass
|
||||
```
|
||||
|
||||
This playbook:
|
||||
- Updates package repositories.
|
||||
- Installs necessary dependencies.
|
||||
- Ensures the user has `sudo` privileges.
|
||||
- Downloads and installs K3s.
|
||||
- Configures permissions for Kubernetes operations.
|
||||
- Enables auto-completion for `kubectl`.
|
||||
- Reboots the machine to apply changes.
|
||||
|
||||
## Deploying Argo Workflows
|
||||
Replace `HOST_NAME` with the IP address or hostname of the target machine in `my_hosts.yaml`, then run:
|
||||
|
||||
```sh
|
||||
ansible-playbook -i <YOUR_HOST_IP>, deploy_argo.yml --extra-vars "user_prompt=<YOUR_USER>" --ask-pass --ask-become-pass
|
||||
```
|
||||
|
||||
This playbook:
|
||||
- Ensures the `argo` namespace exists in Kubernetes.
|
||||
- Deploys Argo Workflows using the official manifest.
|
||||
- Waits for the `argo-server` pod to be running.
|
||||
- Patches the deployment for first-time connection issues.
|
||||
- Applies a service configuration to expose Argo Workflows via NodePort.
|
||||
- Installs the Argo CLI.
|
||||
- Enables CLI autocompletion.
|
||||
- Configures `kubectl` for Argo access.
|
||||
|
||||
# Additional Notes
|
||||
- The service account used by default is `argo:default`, which may not have sufficient permissions. Use `argo:argo` instead:
|
||||
```sh
|
||||
argo submit -f workflow.yaml --serviceaccount=argo
|
||||
```
|
||||
- The Argo CLI is installed in `/usr/local/bin/argo`.
|
||||
- The Kubernetes configuration file is copied to `~/.kube/config`.
|
||||
|
||||
# Troubleshooting
|
||||
- If the deployment fails due to permissions, ensure the user has `sudo` privileges.
|
||||
- Check the status of Argo pods using:
|
||||
```sh
|
||||
kubectl get pods -n argo
|
||||
```
|
||||
- If Argo Workflows is not accessible, verify that the NodePort service is correctly configured.
|
||||
|
||||
# References
|
||||
- [K3s Official Documentation](https://k3s.io/)
|
||||
- [Argo Workflows Documentation](https://argoproj.github.io/argo-workflows/)
|
||||
|
||||
14
ansible/Argo/argo-service.yml
Normal file
14
ansible/Argo/argo-service.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
# Needed by deploy-argo.yml to change argo to a NodePort service
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: argo-server
|
||||
namespace: argo
|
||||
spec:
|
||||
type: NodePort
|
||||
selector:
|
||||
app: argo-server
|
||||
ports:
|
||||
- port: 2746
|
||||
targetPort: 2746
|
||||
nodePort: 32746
|
||||
95
ansible/Argo/deploy_argo.yml
Normal file
95
ansible/Argo/deploy_argo.yml
Normal file
@@ -0,0 +1,95 @@
|
||||
# ansible-playbook -i my_hosts.yaml deploy_argo.yml --ask-pass --ask-become-pass
|
||||
|
||||
# Need to think about which serviceaccount will be used to launch the workflow, by default
|
||||
# uses argo:default but it doesn't have enough rights, need to use argo:argo
|
||||
# like '$ argo submit -f .... --serviceaccount=argo'
|
||||
|
||||
|
||||
- name: Installation de Argo
|
||||
hosts: all
|
||||
user: "{{ user_prompt }}"
|
||||
vars:
|
||||
ARGO_VERSION: "3.5.2"
|
||||
environment:
|
||||
KUBECONFIG: /home/{{ user_prompt }}/.kube/config
|
||||
|
||||
tasks:
|
||||
- name: Create argo namespace
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
labels:
|
||||
kubernetes.io/metadata.name: argo
|
||||
name: argo
|
||||
|
||||
- name: Verifier si argo est déjà entrain de tourner
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl get -n argo pods | grep -q argo-server
|
||||
register: argo_server_pod
|
||||
failed_when: argo_server_pod.rc not in [ 0, 1 ]
|
||||
|
||||
- name: Installing argo services
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl apply -n argo -f https://github.com/argoproj/argo-workflows/releases/download/v{{ ARGO_VERSION }}/install.yaml
|
||||
when: argo_server_pod.rc == 1
|
||||
|
||||
|
||||
- name: Vérifier l'état du pod argo-server
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
argo_server_name=$(kubectl get -n argo pods | grep argo-server | cut -d ' ' -f 1)
|
||||
kubectl get -n argo pods $argo_server_name --output=jsonpath='{.status.phase}'
|
||||
register: pod_status
|
||||
retries: 30
|
||||
delay: 10
|
||||
until: pod_status.stdout == "Running"
|
||||
|
||||
- name: Patch first connection bug
|
||||
ansible.builtin.shell: |
|
||||
kubectl patch deployment \
|
||||
argo-server \
|
||||
--namespace argo \
|
||||
--type='json' \
|
||||
-p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args", "value": [
|
||||
"server",
|
||||
"--auth-mode=server"
|
||||
]}]'
|
||||
|
||||
- name: Copying the configuration file to new host
|
||||
copy: src=argo-service.yml dest=$HOME mode=0755
|
||||
|
||||
- name: Applying the conf file to make the service a NodePort typ
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl apply -f argo-service.yml
|
||||
|
||||
- name: download argo CLI
|
||||
become: true
|
||||
ansible.builtin.uri:
|
||||
url: " https://github.com/argoproj/argo-workflows/releases/download/v{{ ARGO_VERSION }}/argo-linux-amd64.gz"
|
||||
method: GET
|
||||
dest: /var
|
||||
status_code: 200
|
||||
headers:
|
||||
Content-Type: "application/json"
|
||||
|
||||
- name: Install argo CLI
|
||||
become: true
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
gunzip argo-linux-amd64.gz
|
||||
chmod +x argo-linux-amd64
|
||||
mv ./argo-linux-amd64 /usr/local/bin/argo
|
||||
args:
|
||||
chdir: /var
|
||||
|
||||
- name: Enable argo CLI autocomplete
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
grep 'argo completion bash' $HOME/.bashrc || echo 'source <(argo completion bash)' >> $HOME/.bashrc
|
||||
|
||||
116
ansible/Argo/deploy_k3s.yml
Normal file
116
ansible/Argo/deploy_k3s.yml
Normal file
@@ -0,0 +1,116 @@
|
||||
- name: Installation k3s
|
||||
hosts: all:!localhost
|
||||
user: "{{ user_prompt }}"
|
||||
gather_facts: true
|
||||
|
||||
tasks:
|
||||
- name: Update apt
|
||||
become: true
|
||||
# become_method: su
|
||||
ansible.builtin.shell:
|
||||
cmd:
|
||||
apt update -y
|
||||
|
||||
- name: Install necessary packages
|
||||
become: true
|
||||
# become_method: su
|
||||
package:
|
||||
name:
|
||||
- sudo
|
||||
- curl
|
||||
- grep
|
||||
- expect
|
||||
- adduser
|
||||
state: present
|
||||
|
||||
- name: Test if the current user is a sudoer
|
||||
ansible.builtin.shell:
|
||||
cmd:
|
||||
groups {{ ansible_user_id }} | grep -q 'sudo'
|
||||
register: sudoer
|
||||
failed_when: sudoer.rc not in [ 0, 1 ]
|
||||
|
||||
- name: Adding user to sudoers
|
||||
become: true
|
||||
# become_method: su
|
||||
user:
|
||||
name: "{{ ansible_user_id }}"
|
||||
append: true
|
||||
groups: sudo
|
||||
when: sudoer.rc == 1
|
||||
|
||||
- name: Reset ssh connection to allow user changes to affect ansible user
|
||||
ansible.builtin.meta:
|
||||
reset_connection
|
||||
when: sudoer.rc == 1
|
||||
|
||||
- name: Attendre que la déconnexion soit effective
|
||||
wait_for:
|
||||
port: 22
|
||||
delay: 10
|
||||
timeout: 120
|
||||
when: sudoer.rc == 1
|
||||
|
||||
- name: Download k3s
|
||||
ansible.builtin.uri:
|
||||
url: "https://get.k3s.io"
|
||||
method: GET
|
||||
dest: ./install_k3s.sh
|
||||
status_code: 200
|
||||
headers:
|
||||
Content-Type: "application/json"
|
||||
|
||||
- name: Install k3s
|
||||
become: true
|
||||
# become_method: su
|
||||
ansible.builtin.shell:
|
||||
cmd : sh install_k3s.sh
|
||||
|
||||
- name: Add k3s group
|
||||
become: true
|
||||
# become_method: su
|
||||
group:
|
||||
name: k3s
|
||||
state: present
|
||||
|
||||
- name: Add user to k3s group
|
||||
become: true
|
||||
# become_method: su
|
||||
user:
|
||||
name: "{{ ansible_user_id }}"
|
||||
append: true
|
||||
groups: k3s
|
||||
|
||||
- name: Ensure .kube directory exists
|
||||
ansible.builtin.file:
|
||||
path: ~/.kube
|
||||
state: directory
|
||||
mode: '0700'
|
||||
|
||||
- name: Copy kubeconfig file
|
||||
become: true
|
||||
ansible.builtin.copy:
|
||||
src: /etc/rancher/k3s/k3s.yaml
|
||||
dest: /home/{{ user_prompt }}/.kube/config
|
||||
remote_src: true
|
||||
mode: '0600'
|
||||
owner: "{{ ansible_user_id }}"
|
||||
group: "{{ ansible_user_gid }}"
|
||||
|
||||
- name: Set KUBECONFIG environment variable in .bashrc
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/.bashrc
|
||||
line: 'export KUBECONFIG=$HOME/.kube/config'
|
||||
|
||||
- name: Ensure kubectl autocompletion is enabled
|
||||
ansible.builtin.lineinfile:
|
||||
path: ~/.bashrc
|
||||
line: 'source <(kubectl completion bash)'
|
||||
|
||||
|
||||
- name: Unconditionally reboot the machine with all defaults
|
||||
become: true
|
||||
# become_method: su
|
||||
ansible.builtin.reboot:
|
||||
|
||||
|
||||
59
ansible/MISC/deploy_admiralty_environment.yml
Normal file
59
ansible/MISC/deploy_admiralty_environment.yml
Normal file
@@ -0,0 +1,59 @@
|
||||
- name: Deploys VM based on local debian image
|
||||
hosts: localhost
|
||||
gather_facts: true
|
||||
become: true
|
||||
vars:
|
||||
# debian_image: "/var/lib/libvirt/images"
|
||||
# vm: "{{ item }}"
|
||||
ssh_pub_key: "/home/pierre/.ssh/id_rsa.pub"
|
||||
root: root
|
||||
os: https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-generic-amd64.qcow2
|
||||
checksum: ""
|
||||
xml_template: debian_template
|
||||
machines:
|
||||
- name: control_test
|
||||
ip: 192.168.122.80
|
||||
# - name: DC01_test
|
||||
# ip: 192.168.122.81
|
||||
# - name: DC02_test
|
||||
# ip: 192.168.122.82
|
||||
|
||||
tasks:
|
||||
- name: Is os image present
|
||||
ansible.builtin.fail:
|
||||
msg: You did not provide an image to build from
|
||||
when:
|
||||
os == ""
|
||||
- name: Is XML template present
|
||||
ansible.builtin.stat:
|
||||
path: "create_kvm/templates/{{ xml_template }}.xml.j2"
|
||||
register: xml_present
|
||||
|
||||
- name: XML not present
|
||||
ansible.builtin.fail:
|
||||
msg: You did not provide a valid xml template
|
||||
when: not (xml_present.stat.exists)
|
||||
|
||||
- name: KVM Provision role
|
||||
ansible.builtin.include_role:
|
||||
name: create_kvm
|
||||
vars:
|
||||
# libvirt_pool_dir: "{{ pool_dir }}"
|
||||
os_image: "{{ os }}"
|
||||
template_file: "{{ xml_template }}.xml.j2"
|
||||
vm_name: "{{ item.name }}"
|
||||
ssh_key: "{{ ssh_pub_key }}"
|
||||
root_pwd: "{{ root }}"
|
||||
loop:
|
||||
"{{ machines }}"
|
||||
|
||||
- name: Set up the wanted IP
|
||||
ansible.builtin.include_tasks:
|
||||
file: setup_vm_ip.yml
|
||||
loop:
|
||||
"{{ machines }}"
|
||||
|
||||
|
||||
# for control,dc01,dc02
|
||||
# 192.168.122.70 + 1
|
||||
# /var/lib/libvirt/images/debian11-2-1-clone.qcow2
|
||||
32
ansible/MISC/deploy_mosquitto.yml
Normal file
32
ansible/MISC/deploy_mosquitto.yml
Normal file
@@ -0,0 +1,32 @@
|
||||
- name: Installation k3s
|
||||
hosts: "{{ host_prompt }}"
|
||||
user: "{{ user_prompt }}"
|
||||
|
||||
tasks:
|
||||
- name: install package
|
||||
become: true
|
||||
ansible.builtin.package:
|
||||
name:
|
||||
- mosquitto
|
||||
- mosquitto-clients
|
||||
state: present
|
||||
|
||||
- name: configure mosquitto conf
|
||||
become: true
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/mosquitto/conf.d/mosquitto.conf
|
||||
line: allow_anonymous true
|
||||
create: true
|
||||
|
||||
- name: configure mosquitto conf
|
||||
become: true
|
||||
ansible.builtin.lineinfile:
|
||||
path: /etc/mosquitto/conf.d/mosquitto.conf
|
||||
line: listener 1883 0.0.0.0
|
||||
|
||||
- name: restart mosquitto
|
||||
become: true
|
||||
ansible.builtin.service:
|
||||
name: mosquitto
|
||||
state: restarted
|
||||
|
||||
15
ansible/MISC/setup_vm_ip.yml
Normal file
15
ansible/MISC/setup_vm_ip.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
|
||||
- name: Retrieve network info
|
||||
ansible.builtin.command:
|
||||
cmd: virsh domifaddr "{{ item.name }}"
|
||||
register: output_domifaddr
|
||||
|
||||
- name: Extract vm's current ip
|
||||
vars:
|
||||
pattern: '(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'
|
||||
ansible.builtin.set_fact:
|
||||
current_ip: "{{ output_domifaddr.stdout | regex_search(pattern, '\\1') }}"
|
||||
|
||||
- name: Show ip
|
||||
ansible.builtin.debug:
|
||||
msg: "{{ current_ip.0 }}"
|
||||
111
ansible/Minio/README.md
Normal file
111
ansible/Minio/README.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# MinIO
|
||||
|
||||
## Deploy Minio
|
||||
|
||||
This playbook installs MinIO on a Kubernetes cluster using Helm and retrieves necessary credentials and access information.
|
||||
|
||||
### Variables
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `user_prompt` | SSH user to execute commands |
|
||||
| `host_name_prompt` | Hostname of the target machine |
|
||||
| `memory_req` | Memory allocation for MinIO (`2Gi` by default) |
|
||||
| `storage_req` | Storage allocation for MinIO (`20Gi` by default) |
|
||||
|
||||
### Steps Executed
|
||||
1. Install necessary Python libraries.
|
||||
2. Check if Helm is installed and install it if not present.
|
||||
3. Add and update the MinIO Helm repository.
|
||||
4. Deploy MinIO using Helm if it is not already running.
|
||||
5. Retrieve the MinIO credentials (root user and password).
|
||||
6. Retrieve the MinIO UI console external IP and API internal IP.
|
||||
7. Display login credentials and connection details.
|
||||
|
||||
### Running the Playbook
|
||||
```sh
|
||||
ansible-playbook -i inventory deploy_minio.yml --extra-vars "user_prompt=your-user host_name_prompt=your-host"
|
||||
```
|
||||
|
||||
## Setting up MinIO access
|
||||
|
||||
/!\ This part can be automated with this **[ansible playbook](https://github.com/pi-B/ansible-oc/blob/main/setup_minio_admiralty.yml)** which is designed to create ressources in a Argo-Workflows/Admiralty combo.
|
||||
|
||||
/!\ If you still want to setup the host manually **and** aim to use admiralty, give the ressources an **unique name** and be sure to make this uniqueness accessible (in an environment variable, in a conf file...)
|
||||
|
||||
- With the output of the last tasks, create a secret in argo namespace to give access to the minio API. We need to use the `create` verb because apply creates a non-functionning secret
|
||||
|
||||
```bash
|
||||
kubectl create secret -n <name of your argo namespace> generic argo-artifact-secret \
|
||||
--from-literal=access-key=<your access key> \
|
||||
--from-literal=secret-key=<your secret key>
|
||||
```
|
||||
|
||||
- Create a ConfigMap, which will be used by argo to create the S3 artifact, the content must match the one from the previously created secret
|
||||
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
# If you want to use this config map by default, name it "artifact-repositories".
|
||||
name: artifact-repositories
|
||||
# annotations:
|
||||
# # v3.0 and after - if you want to use a specific key, put that key into this annotation.
|
||||
# workflows.argoproj.io/default-artifact-repository: oc-s3-artifact-repository
|
||||
data:
|
||||
oc-s3-artifact-repository: |
|
||||
s3:
|
||||
bucket: oc-bucket
|
||||
endpoint: [ retrieve cluster with kubectl get service argo-artifacts -o jsonpath="{.spec.clusterIP}" ]:9000
|
||||
insecure: true
|
||||
accessKeySecret:
|
||||
name: argo-artifact-secret
|
||||
key: access-key
|
||||
secretKeySecret:
|
||||
name: argo-artifact-secret
|
||||
key: secret-key
|
||||
|
||||
```
|
||||
|
||||
## Ansible Playbook setup MinIO
|
||||
|
||||
### Purpose
|
||||
This playbook sets up MinIO to work with Argo Workflows, including creating the required buckets and secrets.
|
||||
|
||||
### Variables
|
||||
| Variable | Description |
|
||||
|----------|-------------|
|
||||
| `user_prompt` | SSH user to execute commands |
|
||||
| `uuid_prompt` | Unique identifier for the Argo secret |
|
||||
| `argo_namespace` | Kubernetes namespace for Argo (`argo` by default) |
|
||||
|
||||
### Steps Executed
|
||||
1. Install necessary dependencies.
|
||||
2. Download and configure MinIO Client (`mc`).
|
||||
3. Retrieve MinIO credentials (root user and password).
|
||||
4. Configure `mc` to connect to MinIO.
|
||||
5. Create a new S3 bucket (`oc-bucket`).
|
||||
6. Generate a new access key and secret key for MinIO.
|
||||
7. Retrieve the MinIO API cluster IP.
|
||||
8. Create a Kubernetes Secret to store MinIO credentials.
|
||||
9. Create a Kubernetes ConfigMap for MinIO artifact repository configuration.
|
||||
|
||||
### Running the Playbook
|
||||
```sh
|
||||
ansible-playbook -i inventory setup_minio_resources.yml --extra-vars "user_prompt=your-user uuid_prompt=unique-id"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Expected Output
|
||||
Upon successful execution, you should see:
|
||||
- MinIO deployed and accessible.
|
||||
- MinIO UI console credentials displayed.
|
||||
- MinIO bucket (`oc-bucket`) created.
|
||||
- Secrets and ConfigMaps properly configured in Kubernetes.
|
||||
|
||||
For any issues, check Ansible logs and validate configurations manually using:
|
||||
```sh
|
||||
kubectl get pods -n default
|
||||
kubectl get secrets -n argo
|
||||
kubectl get configmaps -n argo
|
||||
```
|
||||
134
ansible/Minio/deploy_minio.yml
Normal file
134
ansible/Minio/deploy_minio.yml
Normal file
@@ -0,0 +1,134 @@
|
||||
- name: Deploy MinIO
|
||||
hosts: all:!localhost
|
||||
user: "{{ user_prompt }}"
|
||||
vars:
|
||||
host_name: "{{ host_name_prompt }}"
|
||||
memory_req: "2Gi"
|
||||
storage_req: "20Gi"
|
||||
environment:
|
||||
KUBECONFIG: /home/{{ user_prompt }}/.kube/config
|
||||
|
||||
tasks:
|
||||
- name: Install yaml library for python
|
||||
become: true
|
||||
ansible.builtin.package:
|
||||
name: ansible
|
||||
state: present
|
||||
|
||||
- name: Check if Helm does exist
|
||||
ansible.builtin.command:
|
||||
cmd: which helm
|
||||
register: result_which
|
||||
failed_when: result_which.rc not in [ 0, 1 ]
|
||||
|
||||
- name: Install helm
|
||||
when: result_which.rc == 1
|
||||
block:
|
||||
- name: Download helm from source
|
||||
ansible.builtin.get_url:
|
||||
url: https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
|
||||
dest: ./get_helm.sh
|
||||
mode: 0700
|
||||
|
||||
- name: Launch helm install script
|
||||
become: true
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
./get_helm.sh
|
||||
|
||||
- name: Test if MinIO is already installed
|
||||
ansible.builtin.shell:
|
||||
cmd : helm repo list | grep 'https://charts.min.io/'
|
||||
register: minio_charts
|
||||
failed_when: minio_charts.rc not in [0,1]
|
||||
|
||||
- name: Add helm repo MinIO
|
||||
kubernetes.core.helm_repository:
|
||||
repo_url: https://charts.min.io/
|
||||
repo_state: present
|
||||
repo_name: minio
|
||||
when: minio_charts.rc == 1
|
||||
|
||||
- name: Update helm repo
|
||||
ansible.builtin.command:
|
||||
cmd : |
|
||||
helm repo update
|
||||
when: minio_charts.rc == 1
|
||||
|
||||
- name: Test is argo-artifact is already running
|
||||
ansible.builtin.shell:
|
||||
helm list | grep -w "argo-artifacts" | wc -l
|
||||
register: argo_artifact_deployed
|
||||
failed_when: argo_artifact_deployed.rc not in [ 0, 1 ]
|
||||
|
||||
- name: Initialize MinIO
|
||||
when: argo_artifact_deployed.stdout == "0"
|
||||
kubernetes.core.helm:
|
||||
name: argo-artifacts
|
||||
chart_ref: minio/minio
|
||||
release_namespace: default
|
||||
values:
|
||||
service:
|
||||
type: LoadBalancer
|
||||
fullnameOverride: argo-artifacts
|
||||
resources:
|
||||
requests:
|
||||
memory: "{{ memory_req }}"
|
||||
replicas: 2
|
||||
volumeClaimTemplates:
|
||||
spec:
|
||||
resources:
|
||||
requests: "{{ storage_req }}"
|
||||
consoleService:
|
||||
type: LoadBalancer
|
||||
# port: 9001
|
||||
state: present
|
||||
|
||||
- name: Retrieve root user
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl get secret argo-artifacts --namespace default -o jsonpath="{.data.rootUser}"
|
||||
register : user_encoded
|
||||
|
||||
- name: Decode root user
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
echo {{ user_encoded.stdout }} | base64 -d
|
||||
register: user
|
||||
|
||||
- name: Retrieve root password
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl get secret argo-artifacts --namespace default -o jsonpath="{.data.rootPassword}"
|
||||
register : password_encoded
|
||||
|
||||
|
||||
- name: Decode root password
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
echo {{ password_encoded.stdout }} | base64 -d
|
||||
register: password
|
||||
|
||||
- name: Retrieve console ip
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl get service argo-artifacts-console -o jsonpath="{.status.loadBalancer.ingress[0].ip}"
|
||||
register : ip_console
|
||||
|
||||
- name: Retrieve API internal ip
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl get service argo-artifacts -o jsonpath="{.spec.clusterIP}"
|
||||
register : ip_api
|
||||
|
||||
- name: Display info
|
||||
debug:
|
||||
msg :
|
||||
"
|
||||
MinIO UI console info
|
||||
external IP GUI : {{ ip_console.stdout }}
|
||||
user : {{ user.stdout }}
|
||||
password : {{ password.stdout }}
|
||||
|
||||
IP API : {{ ip_api.stdout }}
|
||||
"
|
||||
8
ansible/Minio/secret-cnes.yaml
Normal file
8
ansible/Minio/secret-cnes.yaml
Normal file
@@ -0,0 +1,8 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: cnes-secrets
|
||||
type: Opaque
|
||||
stringData:
|
||||
weather-api: 1d2b4ad68a4375388e64f5353d33186c
|
||||
era-5: 3e8457b6-f5eb-4405-a09c-78403a14c4d1
|
||||
142
ansible/Minio/setup_minio_oc_bucket.yml
Normal file
142
ansible/Minio/setup_minio_oc_bucket.yml
Normal file
@@ -0,0 +1,142 @@
|
||||
- name: Installation k3s
|
||||
hosts: all:!localhost
|
||||
user: "{{ user_prompt }}"
|
||||
gather_facts: true
|
||||
become_method: sudo
|
||||
vars:
|
||||
- argo_namespace: argo
|
||||
- MC_PATH: $HOME/minio-binaries
|
||||
- MINIO_NAME: my-minio
|
||||
- UUID: "{{ uuid_prompt }}"
|
||||
environment:
|
||||
- KUBECONFIG: /home/{{ user_prompt }}/.kube/config
|
||||
tasks:
|
||||
|
||||
- name: Install necessary packages
|
||||
become: true
|
||||
package:
|
||||
name:
|
||||
- python3-kubernetes
|
||||
- python3-jmespath
|
||||
state: present
|
||||
|
||||
- name: Create destination directory
|
||||
file:
|
||||
path: $HOME/minio-binaries
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: Install mc
|
||||
ansible.builtin.get_url:
|
||||
url: "https://dl.min.io/client/mc/release/linux-amd64/mc"
|
||||
dest: $HOME/minio-binaries/mc
|
||||
mode: +x
|
||||
headers:
|
||||
Content-Type: "application/json"
|
||||
|
||||
- name: Add mc to path
|
||||
ansible.builtin.lineinfile:
|
||||
path: $HOME/.bashrc
|
||||
line: export PATH=$PATH:$HOME/minio-binaries
|
||||
|
||||
- name: Is mc already set up for the local minio
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
"{{ MC_PATH }}"/mc admin info {{ MINIO_NAME }}
|
||||
register: minio_info
|
||||
failed_when: minio_info.rc not in [0,1]
|
||||
|
||||
- name: Retrieve root user
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl get secrets argo-artifacts -o jsonpath="{.data.rootUser}" | base64 -d -
|
||||
register: user
|
||||
when: minio_info.rc == 1
|
||||
|
||||
- name: Retrieve root password
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl get secret argo-artifacts --namespace default -o jsonpath="{.data.rootPassword}" | base64 -d -
|
||||
register : password
|
||||
when: minio_info.rc == 1
|
||||
|
||||
- name: Set up MinIO host in mc
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
"{{ MC_PATH }}"/mc alias set {{ MINIO_NAME }} http://127.0.0.1:9000 '{{ user.stdout }}' '{{ password.stdout }}'
|
||||
failed_when: user.stdout == "" or password.stdout == ""
|
||||
when: minio_info.rc == 1
|
||||
|
||||
- name: Does oc-bucket already exist
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
"{{ MC_PATH }}"/mc ls my-minio | grep -q oc-bucket
|
||||
register: bucket_exists
|
||||
failed_when: bucket_exists.rc not in [0,1]
|
||||
|
||||
- name: Create oc-bucket
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
"{{ MC_PATH }}"/mc mb {{ MINIO_NAME }}/oc-bucket
|
||||
when: bucket_exists.rc == 1
|
||||
|
||||
- name: Run mc admin accesskey create command
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
{{ MC_PATH }}/mc admin accesskey create --json {{ MINIO_NAME }}
|
||||
register: minio_output
|
||||
changed_when: false # Avoid marking the task as changed every time
|
||||
|
||||
|
||||
- name: Parse JSON output
|
||||
set_fact:
|
||||
access_key: "{{ minio_output.stdout | from_json | json_query('accessKey') }}"
|
||||
secret_key: "{{ minio_output.stdout | from_json | json_query('secretKey') }}"
|
||||
|
||||
- name: Retrieve cluster IP for minio API
|
||||
ansible.builtin.shell:
|
||||
cmd: |
|
||||
kubectl get service argo-artifacts -o jsonpath="{.spec.clusterIP}"
|
||||
register: minio_cluster_ip
|
||||
|
||||
- name: Create the minio secret in argo namespace
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
namespace: '{{ argo_namespace }}'
|
||||
name: "{{ UUID }}-argo-artifact-secret"
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
type: Opaque
|
||||
stringData:
|
||||
access-key: '{{ access_key }}'
|
||||
secret-key: '{{ secret_key }}'
|
||||
|
||||
|
||||
- name: Create the minio secret in argo namespace
|
||||
kubernetes.core.k8s:
|
||||
state: present
|
||||
namespace: '{{ argo_namespace }}'
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: artifact-repositories
|
||||
data:
|
||||
oc-s3-artifact-repository: |
|
||||
s3:
|
||||
bucket: oc-bucket
|
||||
endpoint: {{ minio_cluster_ip.stdout }}:9000
|
||||
insecure: true
|
||||
accessKeySecret:
|
||||
name: "{{ UUID }}-argo-artifact-secret"
|
||||
key: access-key
|
||||
secretKeySecret:
|
||||
name: "{{ UUID }}-argo-artifact-secret"
|
||||
key: secret-key
|
||||
|
||||
# ansible.builtin.shell:
|
||||
# cmd: |
|
||||
# kubectl create secret -n '{{ argo_namespace }}' generic argo-artifact-secret \
|
||||
# --from-literal=access-key='{{ access_key }}' \
|
||||
# --from-literal=secret-key='{{ secret_key }}'
|
||||
86
ansible/README.md
Normal file
86
ansible/README.md
Normal file
@@ -0,0 +1,86 @@
|
||||
Login : admrescue/admrescue
|
||||
|
||||
# Requirement
|
||||
|
||||
**Ansible** (+ pip):
|
||||
|
||||
If you don't have `pip` yet
|
||||
|
||||
```
|
||||
curl https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py
|
||||
python3 /tmp/get-pip.py --user
|
||||
```
|
||||
|
||||
```
|
||||
python3 -m pip install --user ansible
|
||||
pip install -r requirement.txt
|
||||
```
|
||||
|
||||
**Ansible collections**:
|
||||
|
||||
```
|
||||
ansible-galaxy collection install kubernetes.core
|
||||
```
|
||||
|
||||
|
||||
# Mosquitto
|
||||
|
||||
`sudo apt update && apt install -y mosquitto mosquitto-clients`
|
||||
|
||||
need to add a conf file in `/etc/mosquitto/conf.d/mosquitto.conf` containing :
|
||||
|
||||
```
|
||||
allow_anonymous true
|
||||
listener 1883 0.0.0.0
|
||||
```
|
||||
|
||||
`sudo systemctl restart mosquitto`
|
||||
|
||||
Launch the mosquitto client to receive message on the machine that hosts the mosquitto server : `sudo mosquitto_sub -h 127.0.0.1 -t argo/alpr`
|
||||
|
||||
# Argo
|
||||
|
||||
## Execute/submite a workflow
|
||||
|
||||
```
|
||||
argo submit PATH_TO_YAML --watch --serviceaccount=argo -n argo
|
||||
```
|
||||
|
||||
# Troubleshoot
|
||||
|
||||
## k3s bind to local port
|
||||
|
||||
On certain distro you might already have an other mini k8s. A sign of this is k3s being able to install, start but never being stable, restarting non stop.
|
||||
|
||||
You should try to see if the port used by k3s are arlready binded :
|
||||
|
||||
> sudo netstat -tuln | grep -E '6443|10250'
|
||||
|
||||
If those ports are already in use then you should identify which service run behidn them and then stop them and preferably uninstall them.
|
||||
|
||||
We have already encountered an instance of `Ubuntu Server` with minikube already installed.
|
||||
|
||||
### Remove minikube
|
||||
|
||||
```bash
|
||||
sudo systemctl stop snap.microk8s.daemon-kubelite
|
||||
sudo systemctl disable snap.microk8s.daemon-kubelite
|
||||
sudo systemctl restart k3s
|
||||
```
|
||||
|
||||
## Use local container images
|
||||
|
||||
We have encountered difficulties declaring container images that correspond to local images (stored in docker.io/library/)
|
||||
|
||||
We used a docker hub repository to pull our customized image. For this we need to create a secret holding the login informations to a docker account that has access to this repository, which we then link to the serviceAccount running the workflow :
|
||||
|
||||
Create the secret in the argo namespace
|
||||
|
||||
```
|
||||
kubectl create secret docker-registry regcred --docker-username=[DOCKER HUB USERNAME] --docker-password=[DOCKER HUB PASSWORD] -n argo
|
||||
```
|
||||
Patch the `argo` serviceAccount to use the secret when pulling image
|
||||
|
||||
```
|
||||
kubectl patch serviceaccount argo -n argo -p '{"imagePullSecrets": [{"name": "regcred"}]}'
|
||||
```
|
||||
3
ansible/ansible.cfg
Normal file
3
ansible/ansible.cfg
Normal file
@@ -0,0 +1,3 @@
|
||||
[defaults]
|
||||
stdout_callback = yaml
|
||||
stderr_callback = yaml
|
||||
154
ansible/notes.md
Normal file
154
ansible/notes.md
Normal file
@@ -0,0 +1,154 @@
|
||||
Login : admrescue/admrescue
|
||||
|
||||
# Deploy VM with ansible
|
||||
|
||||
TODO : check with yves or benjamin how to create a qcow2 image with azerty layout and ssh ready
|
||||
|
||||
# Deploy k3s
|
||||
|
||||
Two password are asked via the prompt :
|
||||
- First the user that you are connecting to on the host via ssh
|
||||
- Second the root password
|
||||
|
||||
|
||||
`ansible-playbook -i my_hosts.yaml deploy_k3s.yml --extra-vars " user_prompt=<YOUR_USER>" --ask-pass --ask-become-pass`
|
||||
|
||||
# Deploy Argo
|
||||
|
||||
|
||||
password to provide is the one to the user you are connecting to on the host via ssh
|
||||
|
||||
`ansible-playbook -i my_hosts.yaml deploy_argo.yml --extra-vars " user_prompt=<YOUR_USER>" --ask-pass --ask-become-pass`
|
||||
|
||||
# Deploy Admirality
|
||||
|
||||
Install the kubernetes.core collection : `ansible-galaxy collection install kubernetes.core` for ansible to be able to use some kubectl tools.
|
||||
|
||||
## Install and prepare Admiralty
|
||||
|
||||
This play prepare your machine to use Admiralty in kubernetes. It installs helm, cert-manager and admiralty, then configure your clusters to be an admiralty source or target.
|
||||
|
||||
/!\ TODO : declare the list of target and source in a play's vars
|
||||
|
||||
`ansible-playbook -i my_hosts.yaml deploy_admiralty.yml --extra-vars "host_prompt=HOSTNAME user_prompt=<YOUR_USER>" --ask-pass --ask-become-pass`
|
||||
|
||||
## Share kubeconfig for the control cluster
|
||||
|
||||
`ansible-playbook -i ../my_hosts.yaml create_secrets.yml --extra-vars "host_prompt=WORKLOAD_HOST user_prompt=<YOUR_USER> control_host=CONTROL_HOST" --ask-pass --ask-become-pass`
|
||||
|
||||
# MinIO
|
||||
|
||||
- Limit the Memory
|
||||
- Limit the replica
|
||||
- Limit volumeClaimTemplates.spec.resources.requests
|
||||
- Add LoadBalancer for WebUI
|
||||
- Corrected command :
|
||||
> kubectl get secret argo-artifacts --namespace default -o jsonpath="{.data.rootUser}" | base64 --decode
|
||||
|
||||
> kubectl get secret argo-artifacts --namespace default -o jsonpath="{.data.rootPassword}" | base64 --decode
|
||||
|
||||
- With the output of the last tasks, create a secret in argo namespace to give access to the minio API
|
||||
|
||||
```
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: argo-minio-secret
|
||||
type: Opaque
|
||||
data:
|
||||
accessKeySecret: [base64 ENCODED VALUE]
|
||||
secretKeySecret: [base64 ENCODED VALUE]
|
||||
```
|
||||
|
||||
- Create a ConfigMap, which will be used by argo to create the S3 artifact, the content can match the one from the previously created secret
|
||||
|
||||
```
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
# If you want to use this config map by default, name it "artifact-repositories". Otherwise, you can provide a reference to a
|
||||
# different config map in `artifactRepositoryRef.configMap`.
|
||||
name: artifact-repositories
|
||||
# annotations:
|
||||
# # v3.0 and after - if you want to use a specific key, put that key into this annotation.
|
||||
# workflows.argoproj.io/default-artifact-repository: oc-s3-artifact-repository
|
||||
data:
|
||||
oc-s3-artifact-repository: |
|
||||
s3:
|
||||
bucket: oc-bucket
|
||||
endpoint: [ retrieve cluster with kubectl get service argo-artifacts -o jsonpath="{.spec.clusterIP}" ]:9000
|
||||
insecure: true
|
||||
accessKeySecret:
|
||||
name: argo-minio-secret
|
||||
key: accessKeySecret
|
||||
secretKeySecret:
|
||||
name: argo-minio-secret
|
||||
key: secretKeySecret
|
||||
|
||||
```
|
||||
|
||||
# Use custom container image : local registry
|
||||
|
||||
|
||||
|
||||
# Mosquitto
|
||||
|
||||
`sudo apt update && apt install -y mosquitto mosquitto-clients`
|
||||
|
||||
need to add a conf file in `/etc/mosquitto/conf.d/mosquitto.conf` containing :
|
||||
|
||||
```
|
||||
allow_anonymous true
|
||||
listener 1883 0.0.0.0
|
||||
```
|
||||
|
||||
`sudo systemctl restart mosquitto`
|
||||
|
||||
Launch the mosquitto client to receive message on the machine that hosts the mosquitto server : `sudo mosquitto_sub -h 127.0.0.1 -t argo/alpr`
|
||||
|
||||
# Argo
|
||||
|
||||
## Execute/submite a workflow
|
||||
|
||||
```
|
||||
argo submit PATH_TO_YAML --watch --serviceaccount=argo -n argo
|
||||
```
|
||||
|
||||
# Troubleshoot
|
||||
|
||||
## k3s bind to local port
|
||||
|
||||
On certain distro you might already have an other mini k8s. A sign of this is k3s being able to install, start but never being stable, restarting non stop.
|
||||
|
||||
You should try to see if the port used by k3s are arlready binded :
|
||||
|
||||
> sudo netstat -tuln | grep -E '6443|10250'
|
||||
|
||||
If those ports are already in use then you should identify which service run behidn them and then stop them and preferably uninstall them.
|
||||
|
||||
We have already encountered an instance of `Ubuntu Server` with minikube already installed.
|
||||
|
||||
### Remove minikube
|
||||
|
||||
```bash
|
||||
sudo systemctl stop snap.microk8s.daemon-kubelite
|
||||
sudo systemctl disable snap.microk8s.daemon-kubelite
|
||||
sudo systemctl restart k3s
|
||||
```
|
||||
|
||||
## Use local container images
|
||||
|
||||
We have encountered difficulties declaring container images that correspond to local images (stored in docker.io/library/)
|
||||
|
||||
We used a docker hub repository to pull our customized image. For this we need to create a secret holding the login informations to a docker account that has access to this repository, which we then link to the serviceAccount running the workflow :
|
||||
|
||||
Create the secret in the argo namespace
|
||||
|
||||
```
|
||||
kubectl create secret docker-registry regcred --docker-username=[DOCKER HUB USERNAME] --docker-password=[DOCKER HUB PASSWORD] -n argo
|
||||
```
|
||||
Patch the `argo` serviceAccount to use the secret when pulling image
|
||||
|
||||
```
|
||||
kubectl patch serviceaccount argo -n argo -p '{"imagePullSecrets": [{"name": "regcred"}]}'
|
||||
```
|
||||
36
ansible/requirements.txt
Normal file
36
ansible/requirements.txt
Normal file
@@ -0,0 +1,36 @@
|
||||
ansible-compat==24.6.0
|
||||
ansible-core==2.17.0
|
||||
ansible-creator==24.5.0
|
||||
ansible-lint==24.5.0
|
||||
attrs==23.2.0
|
||||
black==24.4.2
|
||||
bracex==2.4
|
||||
cffi==1.16.0
|
||||
click==8.1.7
|
||||
cryptography==42.0.7
|
||||
filelock==3.14.0
|
||||
importlib_metadata==7.1.0
|
||||
Jinja2==3.1.4
|
||||
jmespath==1.0.1
|
||||
jsonschema==4.22.0
|
||||
jsonschema-specifications==2023.12.1
|
||||
markdown-it-py==3.0.0
|
||||
MarkupSafe==2.1.5
|
||||
mdurl==0.1.2
|
||||
mypy-extensions==1.0.0
|
||||
packaging==24.0
|
||||
pathspec==0.12.1
|
||||
platformdirs==4.2.2
|
||||
pycparser==2.22
|
||||
Pygments==2.18.0
|
||||
PyYAML==6.0.1
|
||||
referencing==0.35.1
|
||||
resolvelib==1.0.1
|
||||
rich==13.7.1
|
||||
rpds-py==0.18.1
|
||||
ruamel.yaml==0.18.6
|
||||
ruamel.yaml.clib==0.2.8
|
||||
subprocess-tee==0.4.1
|
||||
wcmatch==8.5.2
|
||||
yamllint==1.35.1
|
||||
zipp==3.19.0
|
||||
48
clone_opencloud_microservices.sh
Executable file
48
clone_opencloud_microservices.sh
Executable file
@@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
|
||||
REPOS=(
|
||||
"oc-auth"
|
||||
"oc-catalog"
|
||||
"oc-datacenter"
|
||||
"oc-front"
|
||||
"oc-monitord"
|
||||
"oc-peer"
|
||||
"oc-shared"
|
||||
"oc-scheduler"
|
||||
"oc-schedulerd"
|
||||
"oc-workflow"
|
||||
"oc-workspace"
|
||||
)
|
||||
|
||||
# Function to clone repositories
|
||||
clone_repo() {
|
||||
local repo_url="https://cloud.o-forge.io/core/$1.git"
|
||||
local repo_name=$(basename "$repo_url" .git)
|
||||
local branche=$2
|
||||
echo "Processing repository: $repo_name"
|
||||
|
||||
if [ ! -d "$repo_name" ]; then
|
||||
echo "Cloning repository: $repo_name"
|
||||
git clone "$repo_url"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error cloning $repo_url"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
echo "Check in $branche & pull"
|
||||
ls
|
||||
echo "Repository '$repo_name' already exists. Pulling latest changes..."
|
||||
cd "$repo_name" && git checkout $branche && git pull
|
||||
cd ..
|
||||
}
|
||||
|
||||
cd ..
|
||||
# Iterate through each repository in the list
|
||||
for repo in "${REPOS[@]}"; do
|
||||
clone_repo $repo ${1:-main}
|
||||
done
|
||||
|
||||
echo "All repositories processed successfully."
|
||||
|
||||
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
apiVersion: v1
|
||||
clusters:
|
||||
- cluster:
|
||||
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURCVENDQWUyZ0F3SUJBZ0lJT0lhTzFqdnRET0F3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TlRFeE1UTXhNVFU0TVRaYUZ3MHpOVEV4TVRFeE1qQXpNVFphTUJVeApFekFSQmdOVkJBTVRDbXQxWW1WeWJtVjBaWE13Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLCkFvSUJBUUNsVGxkUEozTkpON0wyblVtbDFLM3pNL21PV3VLN0FKZzBjNktJY01nZFhoaEF3Z0FPRzFuUnZhRG8KL3N3ODBweUFjbEJSbzg2bnlyM1d6UUVYa1hTTDY2bFV6LzJzaHh5QlliejJXTDlZeUZGVmxwSzlPY3BRQjVIegpURUNrNStIY28rK1NJVndXUHc0dCtQZXhsb2VpaHZhUUJvUE54d2lxWjhhWG50NUljd0lXU1ZqMVVsT1p1NmhwCnA3VUVuS0dhTWl3Zm5Zb2o4MmNvUVFEdFlEWi9MQS80L3V1UzVlUFZKaTBpb1dXMGduTWdzUm1IUzltY3cvZzkKK1hYVm5vN1lLekYvRjEyeTZPQ0YrOUpGd2JqWmFiVlJhc21rQjZyTFZ1N2FsMi9TQ3VyaitEWk5Mcys5WHVTYgpFb2I2UE8rQlhlNmJDdGp5aWZvZmJ2TExXREc5QWdNQkFBR2pXVEJYTUE0R0ExVWREd0VCL3dRRUF3SUNwREFQCkJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXQkJTd2oyczRpUG9rV0FnSFlNQ1czZ2NxMEEzNlZ6QVYKQmdOVkhSRUVEakFNZ2dwcmRXSmxjbTVsZEdWek1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQWc3ZW9BTWRlZgpwN21IYVFnR1F2YnRQRHVQY2REa2J1NjVKWDI2ZzhNMy9WMlovaEp4MlpqVE0wdTZmNExuOUFnc1p0R3dhL1RRClp0aGRpQWdWdDRuNjZBZ1lLQS8yYlNBbVNWZ1R0cngyd29xN2VzbnJjc1VUcm5ISXptVS9TR01CVzNtTlZnd0sKWnpLN3ZuTm9jaHAzYzNDa0xmbWFXeWpMUjljVXVWejB0T3psa0p5SDB6OUNrQVVXdmVJZ3VTR2Y2WWtManRPZQpvdld3ZHJUcTlLaGQ2SEVXa0lIM241QjNDbTF0aXE0bGFuaVJERkhheWk1enRBSDBYME1UOUhaNGszR0ErdXA4CkZJZXdubDJXTmJoVGxraXdhMzRRTUhDelhpUXdGTThjODUwTnJGNXFOSEVTbUMzeWtGdjk3VlNqOW8wb3pPS3YKSWlERkRVSTZybG0rCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||
server: https://127.0.0.1:36289
|
||||
name: kind-opencloud
|
||||
contexts:
|
||||
- context:
|
||||
cluster: kind-opencloud
|
||||
user: kind-opencloud
|
||||
name: kind-opencloud
|
||||
current-context: kind-opencloud
|
||||
kind: Config
|
||||
users:
|
||||
- name: kind-opencloud
|
||||
user:
|
||||
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURLVENDQWhHZ0F3SUJBZ0lJVnpzcEVlN3Z2eFF3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TlRFeE1UTXhNVFU0TVRaYUZ3MHlOakV4TVRNeE1qQXpNVFphTUR3eApIekFkQmdOVkJBb1RGbXQxWW1WaFpHMDZZMngxYzNSbGNpMWhaRzFwYm5NeEdUQVhCZ05WQkFNVEVHdDFZbVZ5CmJtVjBaWE10WVdSdGFXNHdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEV2s3YlkKYWVYQjJGaUczSjc1Zk5iaGkxQkhkTTdrNk8yQ0p1WkJydzE0UldSNWZ2YnZUNHVBRm1LZ0VFWHk0angvaWdwOQpFUm9QUmFxUFoxQSs0N21HRUl0bjdSdFFuY0k2N3FMSUxnUUU4ZkhWTE9GU0hVRmV0S05tbGxZNEErWDVRejZmCjBHdExBZzNoMlc4bmtibGtzakNVQjR3SEF5ZnMrM1dtZmJRb0YzcmU5NUlKMDZCY2NtOTgyZTFVUUpsZ1YzaW4KN0pQdlRDYmp0bkR1UmV4VXpyazJsK1JHWjVHYitaZEs3Z1QvS2MvdFhONjVIYTRiTHc2aFR4RzdxZlB5dnlSdAphblVYcHQ5SVNSd3BPc2R6YjF1RkZTYUN6V1FBWUNJc3RpeWs1bkszVWJwL1ZLS2trTFlub2NVbjdKNUtOdDJFCjhTcTZ1N2RjRWNqZFBaUWhBZ01CQUFHalZqQlVNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUsKQmdnckJnRUZCUWNEQWpBTUJnTlZIUk1CQWY4RUFqQUFNQjhHQTFVZEl3UVlNQmFBRkxDUGF6aUkraVJZQ0FkZwp3SmJlQnlyUURmcFhNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUJjSUEyeE9rYXk4aTlLS3pRWUh5bmM5a2xyCmU4ZEN1aHpEUWhGbVhYK3pmeTk3dnRaSnlEWFp4TlN0MlRoS24xeE5KckNKVkxPWTAxV0FDU2JNZm5wRGdxVjgKUWZjRXVFUHdYSithMUV0ZmpsajZPTU41Q0RvYWJnRUllSkhxVkhrZkJzdE5icXFrTEppUThvZmh2VDc4TE1Bcwp2emJNTnd5L0ZXOVBVK0YvUGJkOEdEZkVPWHU3UFJzbmV5Q0JHVXhoNThOM2lmNFhnOXh6L3hwM2EvNE1hK28vClc2RklOUUNkNjVzcVFSWEx1U3VpRjlTTG9peUtYdmJUb1UxNU9YZTNOWFNWTjNOdUdRWmlZWDU4OTFyZGtpZFIKL1NuN3VTTzJDWXNPK3l4QWlqbUZhQmZIeWpNUlZKak51WnpSbStwTDdoODFmNFQ5dDJ1MWpQeVpPbGRiCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||
client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBMXBPMjJHbmx3ZGhZaHR5ZStYelc0WXRRUjNUTzVPanRnaWJtUWE4TmVFVmtlWDcyCjcwK0xnQlppb0JCRjh1SThmNG9LZlJFYUQwV3FqMmRRUHVPNWhoQ0xaKzBiVUozQ091Nml5QzRFQlBIeDFTemgKVWgxQlhyU2pacFpXT0FQbCtVTStuOUJyU3dJTjRkbHZKNUc1WkxJd2xBZU1Cd01uN1B0MXBuMjBLQmQ2M3ZlUwpDZE9nWEhKdmZObnRWRUNaWUZkNHAreVQ3MHdtNDdadzdrWHNWTTY1TnBma1JtZVJtL21YU3U0RS95blA3VnplCnVSMnVHeThPb1U4UnU2bno4cjhrYldwMUY2YmZTRWtjS1RySGMyOWJoUlVtZ3Mxa0FHQWlMTFlzcE9aeXQxRzYKZjFTaXBKQzJKNkhGSit5ZVNqYmRoUEVxdXJ1M1hCSEkzVDJVSVFJREFRQUJBb0lCQUFkSElhWldkU29DMEt5RwpVc2dMTEJpZ245dVo3U013enFRaG9LRllDQ0RDV0hBOGdRWHpPenZnRzlQcVZBMElaUWZvWW9jRkZrNnY5Mk1xCkhHWjlxbjhQRkVOZjlKTmlrOElVUjZZbGdCSm1NdzhldzJldkZxd0QwWFQ3SXJmVXFLOWJKZ1p5b2I1U0RBUW8KaFU5MkdhL1RmQTFSUjR1OHJOVXFDWlFEamN3OFFSQTQ4SDBzOTJkU252QkN1SmJrQ0VIYXVtQTYwQVlsNHNMOApzS0o0NytFc29WTWZhK1dCOCsybnRYMHFqQlhLM1Yvc1UyZWJTN0tYTGZhVkg5Z21oU01LMFd2dG9peDRRQzlEClViV3RaTCtoSGN6WWxmcjZaYWQxeEFsaHRXYnNDS3p3ZWdjOGxQbVBqSUJmMUU0bjRDQW1OMmJ5R00wUlRrT1QKWHdvdWdEOENnWUVBNGVISWQ0Zy9FV3k0dmx0NGxUN2FnOFJKaVhxMHBOQXVDdTRBL25tVWpnTVVVcFFPbmd6cAora3d6ZjFNSUJnVGR0ejlHNU1zNmd6UHgxaTlYblVOZ1hEUlRuWTRSZkZ3Q256NXVNcW5LZDd3Njhwem9acUxGCjJpSVZ6SmtGUmVoaTNVbXVLWnJmRnJKekYrOFArMGtmZmpjNjcvZkF1c2pnellFbWl5dGxmQnNDZ1lFQTh6QU0KdUh3VG1WMC9aRFlyUUYxLzA2R1ZqbzRtT2Z4S0loUVBxdDZleVNuWElySGlBbUVnTjFOWTc1UHRtMGVVdXF0bApDanU4dmp4aHd0UUF6NnUwNEptTldpTzdZL0ZiYlVKNnAxcHJYaURVWXYvUkRwK3FHa1I1SExsd0gvWENrYzIxCnpnREhJMlVXMzZCUk4wMFhydjdGWThxaHNqU0dlZU1Gei9pNXZITUNnWUVBcDhJSklZVmwyYW9XZHdIMlIxbWIKN2xxOGhzZEVIRmVrcW1kakE1d0dVWVpGOUtLVFRKeW90VVVjeGdaRG9qekE4ZFNqOFU1aVVZa2xwZjRaSXVvawpTYlp2RjBlcEF1Uk82amZ5bmR2dVRBalcrdEsvNDJJbWNULzVVcStlOC9HSVkzTFNUNEgvQjV0VzBVS3lhdDArCjczMVRYMTl3bXdpUHRQQ2pVSjdWUzFzQ2dZRUF3NWthSWlocCt5aXRIQVVWdEtkL2NOQytZZktqZkhBWGtHRmkKV0tUR1FqYU0rekxuL2RIdy80N2lNWkJoeEV0R3JQMitQd1RkUW9WK2ZCM1lxVEFLUTd3OW5RcXdaaXB5eHVaNQprTEdCT2l4ZHAyTHEyMEJBcU8vNkdjaHREc2UwdjJFZG9adXVrQ0YyekZjOSs2VGVMN3ByT1dCNXZjUFJoYWU3CnZSTHBFVkVDZ1lFQXAyREYyWlJFRlZmZ3ZGc2dtdHRwVjFMemd2Qi9Fb0lFMTFpMmFPelZGTzRLb3pabWpHVlAKaTB6T3VlaVBsZmNCYU5ZanRIbkxrRUpYeGVwYm9sSnlvQUdWV0o2b2grcFhON2I5TURJVUhVV0E3ZFArc1NlMwpvS29adS9TVGdJa1VQb2xwa2lJNjJrRXBFdXE4bjRYOFVhUWV5M1E4c1VWNHpYM0dSa3d2QkFZPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
|
||||
|
||||
1
docker/db/datas/collaborative_area.json
Normal file
1
docker/db/datas/collaborative_area.json
Normal file
@@ -0,0 +1 @@
|
||||
[{"_id":"0b6a375f-be3e-49a9-9827-3c2d5eddb057","abstractobject":{"id":"0b6a375f-be3e-49a9-9827-3c2d5eddb057","name":"test","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":{"$date":"2025-01-27T10:41:47.741Z"},"update_date":{"$date":"2025-01-27T10:41:47.741Z"},"updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":0},"description":"Proto Collaborative area example","collaborative_area":{},"workflows":["58314c99-c595-4ca2-8b5e-822a6774efed"],"allowed_peers_group":{"c0cece97-7730-4c2a-8c20-a30944564106":["*"]},"workspaces":[]}]
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,2 +1 @@
|
||||
[{"_id":"c0cece97-7730-4c2a-8c20-a30944564106","failed_execution":null,"api_url":"http://beta.opencloud.com:9600","nats_address":"nats://nats:4222","stream_address":"/ip4/172.40.0.3/tcp/4003/p2p/12D3KooWBh9kZrekBAE5G33q4jCLNRAzygem3gP1mMdK8mhoCTaw","wallet_address":"my-wallet","public_key":"MCowBQYDK2VwAyEAG95Ettl3jTi41HM8le1A9WDmOEq0ANEqpLF7zTZrfXA=","peer_id":"12D3KooWBh9kZrekBAE5G33q4jCLNRAzygem3gP1mMdK8mhoCTaw","relation":1,"abstractobject":{"id":"c0cece97-7730-4c2a-8c20-a30944564106","name":"opencloud-demo-1","is_draft":false,"creation_date":{"$date":"2025-03-27T09:13:13.230Z"},"update_date":{"$date":"2026-03-31T12:48:11.704Z"},"access_mode":0},"trust_score":0,"verify":false},
|
||||
{"_id":"b87318c9-f5f8-44bb-8d48-913f4ddd6c31","failed_execution":null,"abstractobject":{"update_date":{"$date":"2026-04-07T09:56:35.247Z"},"access_mode":0,"id":"b87318c9-f5f8-44bb-8d48-913f4ddd6c31","not_in_catalog":false,"name":"opencloud-demo-2","is_draft":false,"creation_date":{"$date":"2025-03-27T09:13:13.230Z"}},"api_url":"http://localhost:8000","nats_address":"nats://nats:4222","stream_address":"/ip4/172.40.0.4/tcp/4004/p2p/12D3KooWSzQtBux5GkpdqK8MA9Rmo5W1vTVZhWCbut2k99Ge45GN","peer_id":"12D3KooWSzQtBux5GkpdqK8MA9Rmo5W1vTVZhWCbut2k99Ge45GN","wallet_address":"my-wallet","public_key":"MCowBQYDK2VwAyEA/ymOIb0sJ0qCWrf3mKz7ACCvsMXLog/EK533JfNXZTM=","relation":2,"organization_id":"","trust_score":0,"verify":false}]
|
||||
[{"_id":"c0cece97-7730-4c2a-8c20-a30944564106","failed_execution":null,"abstractobject":{"update_date":{"$date":"2025-03-27T09:13:13.230Z"},"access_mode":0,"id":"c0cece97-7730-4c2a-8c20-a30944564106","name":"local","is_draft":false,"creation_date":{"$date":"2025-03-27T09:13:13.230Z"}},"url":"http://localhost:8000","wallet_address":"my-wallet","public_key":"-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAw2pdG6wMtuLcP0+k1LFvIb0DQo/oHW2uNJaEJK74plXqp4ztz2dR\nb+RQHFLeLuqk4i/zc3b4K3fKPXSlwnVPJCwzPrnyT8jYGOZVlWlETiV9xeJhu6s/\nBh6g1PWz75XjjwV50iv/CEiLNBT23f/3J44wrQzygqNQCiQSALdxWLAEl4l5kHSa\n9oMyV70/Uql94/ayMARZsHgp9ZvqQKbkZPw6yzVMfCBxQozlNlo315OHevudhnhp\nDRjN5I7zWmqYt6rbXJJC7Y3Izdvzn7QI88RqjSRST5I/7Kz3ndCqrOnI+OQUE5NT\nREyQebphvQfTDTKlRPXkdyktdK2DH28Zj6ZF3yjQvN35Q4zhOzlq77dO5IhhopI7\nct8dZH1T1nYkvdyCA/EVMtQsASmBOitH0Y0ACoXQK5Kb6nm/TcM/9ZSJUNiEMuy5\ngBZ3YKE9oa4cpTpPXwcA+S/cU7HPNnQAsvD3iJi8GTW9uJs84pn4/WhpQqmXd4rv\nhKWECCN3fHy01fUs/U0PaSj2jDY/kQVeXoikNMzPUjdZd9m816TIBh3v3aVXCH/0\niTHHAxctvDgMRb2fpvRJ/wwnYjFG9RpamVFDMvC9NffuYzWAA9IRIY4cqgerfHrV\nZ2HHiPTDDvDAIsvImXZc/h7mXN6m3RCQ4Qywy993wd9gUdgg/qnynHcCAwEAAQ==\n-----END RSA PUBLIC KEY-----\n","state":1}]
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
[{"_id":"ed30526a-b6be-4c3e-8451-418ec90008f8","abstractobject":{"id":"ed30526a-b6be-4c3e-8451-418ec90008f8","not_in_catalog":false,"name":"IRT local file storage purchase 2026-04-09 08:39","is_draft":false,"update_date":{"$date":"2026-04-09T08:37:21.749Z"},"access_mode":0},"dest_peer_id":"c0cece97-7730-4c2a-8c20-a30944564106","execution_id":"4305cac5-b669-46fd-a2b8-5c98e0177d8e","executions_id":"f1ebffed-4985-4109-9acd-a6bd0892092b","end_buying_date":{"$date":"2026-04-09T08:59:21.587Z"},"instance_id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","priced_item":{"peer_id":"c0cece97-7730-4c2a-8c20-a30944564106","quantity":1,"selected_pricing":{"default_refund":0,"exceeding":false,"exceeding_ratio":0,"pricing":{"override_strategy":0,"price":0,"time_pricing_strategy":0,"buying_strategy":0,"currency":""},"refund_ratio":0,"refund_types":null},"pricing_variations":[],"resource_type":3,"instance_id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","resource_id":"e726020a-b68e-4abc-ab36-c3640ea3f557","name":"IRT local file storage","instances_refs":{"7fdccb9c-7090-40a5-bacd-7435bc56c90d":"IRT local file storage Marseille"},"booking_configuration":{"end":"2026-04-09T08:59:21.587972898Z","start":"2026-04-09T08:39:21.587972898Z"}},"resource_id":"e726020a-b68e-4abc-ab36-c3640ea3f557","resource_type":3,"scheduler_peer_id":"12D3KooWBh9kZrekBAE5G33q4jCLNRAzygem3gP1mMdK8mhoCTaw"}]
|
||||
@@ -1,3 +1 @@
|
||||
[{"_id":"04bc70b5-8d7b-44e6-9015-fadfa0fb102d","abstractinstanciatedresource":{"abstractresource":{"type":"storage","abstractobject":{"id":"04bc70b5-8d7b-44e6-9015-fadfa0fb102d","name":"IRT risk database","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/IRT risk database.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"S3 compliant IRT file storage","owners":[{"name":"IRT"}]},"instances":[{"env":[{"attr":"source","readonly":true}],"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"IRT local file storage Marseille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]},"source":"/mnt/vol","local":false,"security_level":"public","size":50,"size_type":3,"redundancy":"RAID5","throughput":"r:200,w:150"}]},"storage_type":5,"acronym":"DC_myDC"},{"_id":"e726020a-b68e-4abc-ab36-c3640ea3f557","abstractinstanciatedresource":{"abstractresource":{"type":"storage","abstractobject":{"id":"e726020a-b68e-4abc-ab36-c3640ea3f557","name":"IRT local file storage","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/IRT local file storage.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"S3 compliant IRT file storage","owners":[{"name":"IRT"}]},"instances":[{"resourceinstance":{"env":[{"attr":"source","readonly":true}],"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"IRT local file storage Marseille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]},"source":"/mnt/vol","local":true,"security_level":"public","size":500,"size_type":0,"encryption":true,"redundancy":"RAID5S","throughput":"r:300,w:350"}]},"storage_type":5,"acronym":"DC_myDC"}]
|
||||
[{"_id":"04bc70b5-8d7b-44e6-9015-fadfa0fb102d","abstractinstanciatedresource":{"abstractresource":{"type":"storage","abstractobject":{"id":"04bc70b5-8d7b-44e6-9015-fadfa0fb102d","name":"IRT risk database","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/IRT risk database.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"S3 compliant IRT file storage","owners":[{"name":"IRT"}]},"instances":[{"env":[{"attr":"source","readonly":true}],"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"IRT local file storage Marseille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,"partnerships":[{"resourcepartnership":{"namespace":"default","peer_groups":{"c0cece97-7730-4c2a-8c20-a30944564106":["*"]},"pricing_profiles":[{"pricing":{"price":50,"currency":"EUR","buying_strategy":0,"time_pricing_strategy":0}}]}}]},"source":"/mnt/vol","local":false,"security_level":"public","size":50,"size_type":3,"redundancy":"RAID5","throughput":"r:200,w:150"}]},"storage_type":5,"acronym":"DC_myDC"},{"_id":"e726020a-b68e-4abc-ab36-c3640ea3f557","abstractinstanciatedresource":{"abstractresource":{"type":"storage","abstractobject":{"id":"e726020a-b68e-4abc-ab36-c3640ea3f557","name":"IRT local file storage","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/IRT local file storage.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"S3 compliant IRT file storage","owners":[{"name":"IRT"}]},"instances":[{"resourceinstance":{"env":[{"attr":"source","readonly":true}],"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"IRT local file storage Marseille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,"partnerships":[{"resourcepartnership":{"namespace":"default","peer_groups":{"c0cece97-7730-4c2a-8c20-a30944564106":["*"]},"pricing_profiles":[{"pricing":{"price":50,"currency":"EUR","buying_strategy":0,"time_pricing_strategy":0}}]}}]},"source":"/mnt/vol","local":true,"security_level":"public","size":500,"size_type":0,"encryption":true,"redundancy":"RAID5S","throughput":"r:300,w:350"}]},"storage_type":5,"acronym":"DC_myDC"}]
|
||||
File diff suppressed because one or more lines are too long
@@ -1,23 +0,0 @@
|
||||
[
|
||||
{
|
||||
"client_id": "oc-auth",
|
||||
"client_secret": "oc-auth-got-secret",
|
||||
"client_name": "oc-auth",
|
||||
"grant_types": [
|
||||
"implicit",
|
||||
"refresh_token",
|
||||
"authorization_code",
|
||||
"client_credentials"
|
||||
],
|
||||
"response_types": [
|
||||
"id_token",
|
||||
"token",
|
||||
"code"
|
||||
],
|
||||
"scope": "openid profile email roles",
|
||||
"redirect_uris": [
|
||||
"http://localhost:8000"
|
||||
],
|
||||
"token_endpoint_auth_method": "client_secret_post"
|
||||
}
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
apiVersion: v1
|
||||
clusters:
|
||||
- cluster:
|
||||
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTnpReU56STVNVEF3SGhjTk1qWXdNekl6TVRNek5URXdXaGNOTXpZd016SXdNVE16TlRFdwpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTnpReU56STVNVEF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFSSGpYRDVpbnRIYWZWSk5VaDFlRnIxcXBKdFlkUmc5NStKVENEa0tadTIKYjUxRXlKaG1zanRIY3BDUndGL1VGMzlvdzY4TFBUcjBxaUorUHlhQTBLZUtvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTdWQkNzZVN3ajJ2cmczMFE5UG8vCnV6ZzAvMjR3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQUlEOVY2aFlUSS83ZW1hRzU0dDdDWVU3TXFSdDdESUkKNlgvSUwrQ0RLbzlNQWlCdlFEMGJmT0tVWDc4UmRGdUplcEhEdWFUMUExaGkxcWdIUGduM1dZdDBxUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||
server: https://127.0.0.1:6443
|
||||
name: default
|
||||
contexts:
|
||||
- context:
|
||||
cluster: default
|
||||
user: default
|
||||
name: default
|
||||
current-context: default
|
||||
kind: Config
|
||||
users:
|
||||
- name: default
|
||||
user:
|
||||
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJUU5KbFNJQUJPMDR3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOemMwTWpjeU9URXdNQjRYRFRJMk1ETXlNekV6TXpVeE1Gb1hEVEkzTURNeQpNekV6TXpVeE1Gb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJMY3Uwb2pUbVg4RFhTQkYKSHZwZDZNVEoyTHdXc1lRTmdZVURXRDhTVERIUWlCczlMZ0x5ZTdOMEFvZk85RkNZVW1HamhiaVd3WFVHR3dGTgpUdlRMU2lXalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCUlJhRW9wQzc5NGJyTHlnR0g5SVhvbDZTSmlFREFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQWhaRUlrSWV3Y1loL1NmTFVCVjE5MW1CYTNRK0J5S2J5eTVlQmpwL3kzeWtDSUIxWTJicTVOZTNLUUU4RAprNnNzeFJrbjJmN0VoWWVRQU1pUlJ2MjIweDNLCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzTnpReU56STVNVEF3SGhjTk1qWXdNekl6TVRNek5URXdXaGNOTXpZd016SXdNVE16TlRFdwpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzTnpReU56STVNVEF3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFTcTdVTC85MEc1ZmVTaE95NjI3eGFZWlM5dHhFdWFoWFQ3Vk5wZkpQSnMKaEdXd2UxOXdtbXZzdlp6dlNPUWFRSzJaMmttN0hSb1IrNlA1YjIyamczbHVvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVVXaEtLUXUvZUc2eThvQmgvU0Y2Ckpla2lZaEF3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQUk3cGxHczFtV20ySDErbjRobDBNTk13RmZzd0o5ZXIKTzRGVkM0QzhwRG44QWlCN3NZMVFwd2M5VkRUeGNZaGxuZzZNUzRXai85K0lHWjJxcy94UStrMjdTQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||
client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUROZDRnWXd6aVRhK1hwNnFtNVc3SHFzc1JJNkREaUJTbUV2ZHoxZzk3VGxvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFdHk3U2lOT1pmd05kSUVVZStsM294TW5ZdkJheGhBMkJoUU5ZUHhKTU1kQ0lHejB1QXZKNwpzM1FDaDg3MFVKaFNZYU9GdUpiQmRRWWJBVTFPOU10S0pRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Load data into node 1's MongoDB (container: mongo, port 27017)
|
||||
MONGO_CONTAINER=${1:-mongo}
|
||||
|
||||
docker cp ./datas $MONGO_CONTAINER:.
|
||||
|
||||
for i in $(ls ./datas); do
|
||||
echo "ADD file $i in collection ${i/.json/}"
|
||||
docker exec -it $MONGO_CONTAINER sh -c "mongoimport --jsonArray --db DC_myDC --collection ${i/.json/} --file ./datas/$i"
|
||||
done
|
||||
@@ -1,81 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "ca000001-ca00-4001-8001-ca0000000001",
|
||||
"abstractobject": {
|
||||
"id": "ca000001-ca00-4001-8001-ca0000000001",
|
||||
"name": "Cross-Peer Environmental Monitoring",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"version": "1.2.0",
|
||||
"description": "Bi-peer collaborative zone for real-time road traffic monitoring and environmental sensor collection. Peer-1 (IRT Saint-Exupéry, Toulouse) contributes GPU compute (Mundi datacenter — RTX 3090 FE cluster), the IRT RAID-5S scratch store (/mnt/vol) and the Toulouse ring-road camera feed (eu-001.jpg, 0.2 Hz). Peer-2 (opencloud-demo-2, Paris) contributes the bare-metal EPYC 9654 cluster for CPU-bound Python vehicle detection and provides the Mosquitto MQTT broker for downstream edge consumers. Covers the full sensor-data-collector pipeline: Alpine frame acquisition → Python OpenCV vehicle analysis → Mosquitto sensors/camera/vehicle publication. The ALPR workflow is also shared for licence-plate extraction cross-runs. Access to workflow scheduling is restricted by the sensor-data-access-policy rule; MQTT subscription is open to all default-namespace peers.",
|
||||
"collaborative_area": {
|
||||
"share_mode": "shared",
|
||||
"created_at": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"creator": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"exploited_by": "collaborators only"
|
||||
},
|
||||
"attributes": {
|
||||
"domain": "environmental-monitoring",
|
||||
"data_classification": "restricted",
|
||||
"sla_uptime_pct": 99.5,
|
||||
"contact": "irt-opencloud@irt-saintexupery.com"
|
||||
},
|
||||
"workspaces": [],
|
||||
"workflows": [
|
||||
"33333333-3333-4333-8333-333333333333",
|
||||
"58314c99-c595-4ca2-8b5e-822a6774efed"
|
||||
],
|
||||
"allowed_peers_group": {
|
||||
"c0cece97-7730-4c2a-8c20-a30944564106": ["*"],
|
||||
"b87318c9-f5f8-44bb-8d48-913f4ddd6c31": ["sensor-operators", "analysts"]
|
||||
},
|
||||
"rules": [
|
||||
"rule0001-0000-4000-8000-r00000000001",
|
||||
"rule0003-0000-4000-8000-r00000000003"
|
||||
]
|
||||
},
|
||||
{
|
||||
"_id": "ca000002-ca00-4002-8002-ca0000000002",
|
||||
"abstractobject": {
|
||||
"id": "ca000002-ca00-4002-8002-ca0000000002",
|
||||
"name": "API Health Observatory",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": {"$date": "2026-04-10T06:00:00.000Z"},
|
||||
"update_date": {"$date": "2026-04-10T06:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"version": "1.0.1",
|
||||
"description": "Cross-peer operational monitoring zone for the OpenCloud federation API gateway. Peer-2 (opencloud-demo-2, Paris) owns the primary infrastructure: Peer2 MinIO RAID-6 NVMe bucket (1 TB, /mnt/minio) acts as the log sink, Redis 7-alpine caches per-endpoint p50/p95 latency distributions under a 300-second TTL, and Nginx 1.25-alpine serves the aggregated status dashboard on port 80. Peer-1 (IRT Saint-Exupéry, Toulouse) schedules the CURL ingestion step via the Mundi datacenter GPU cluster and consumes the Nginx endpoint for its operator dashboards. The image-meta-extractor workflow is also registered to validate image pipeline health metrics. Data governance: API log read access is open to all zone members; write access and scheduling are restricted to peer-1 principals via the api-logs-read-only rule. Cross-peer data retention policy (rule 3) governs MinIO /logs lifecycle (30-day auto-purge, 90-day for .gz rotations).",
|
||||
"collaborative_area": {
|
||||
"share_mode": "shared",
|
||||
"created_at": {"$date": "2026-04-10T06:00:00.000Z"},
|
||||
"creator": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"exploited_by": "all members"
|
||||
},
|
||||
"attributes": {
|
||||
"domain": "api-observability",
|
||||
"data_classification": "internal",
|
||||
"dashboard_url": "http://localhost:9000/status",
|
||||
"alert_channel": "nats://nats:4222/alerts.api",
|
||||
"contact": "ops-opencloud@irt-saintexupery.com"
|
||||
},
|
||||
"workspaces": [],
|
||||
"workflows": [
|
||||
"22222222-2222-4222-8222-222222222222",
|
||||
"11111111-1111-4111-8111-111111111111"
|
||||
],
|
||||
"allowed_peers_group": {
|
||||
"c0cece97-7730-4c2a-8c20-a30944564106": ["*"],
|
||||
"b87318c9-f5f8-44bb-8d48-913f4ddd6c31": ["*"]
|
||||
},
|
||||
"rules": [
|
||||
"rule0002-0000-4000-8000-r00000000002",
|
||||
"rule0003-0000-4000-8000-r00000000003"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -1,324 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "compute",
|
||||
"abstractobject": {
|
||||
"id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5",
|
||||
"name": "Mundi datacenter",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}],
|
||||
"allowed_booking_modes": {
|
||||
"0": {"inflate": false, "percent": 0, "priority": 0},
|
||||
"1": {"inflate": false, "percent": 8, "priority": 1}
|
||||
}
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5", "name": "Mundi datacenter Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}, "pricing_profiles": {
|
||||
"0": {"3": {"exploitpricingprofile": {"privilege_strategy": 0, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0, "accesspricingprofile" : { "pricing": {"price": 3.5, "currency": "EUR", "buying_strategy": 0, "time_pricing_strategy": 3, "override_strategy": 0}, "allowed_payment_type": [0, 1, 2], "default_refund": 0, "refund_ratio": 0}}}},
|
||||
"2": {"0": {"exploitpricingprofile": {"privilege_strategy": 2, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0, "accesspricingprofile" : { "pricing": {"price": 250.0, "currency": "EUR", "buying_strategy": 2, "time_pricing_strategy": 0, "override_strategy": 0}, "allowed_payment_type": [0], "default_refund": 0, "refund_ratio": 0}}}}
|
||||
}}]
|
||||
},
|
||||
"security_level": "public",
|
||||
"annual_co2_emissions": 1000,
|
||||
"power_sources": ["solaire", "charbon"],
|
||||
"cpus": {"Intel Core i7-14700KF": {"model": "Intel Core i7-14700KF", "frequency": 3.6, "cores": 20, "architecture": "x86"}},
|
||||
"gpus": {"RTX 3090 FE": {"cores": {"cuda": 10496, "tensor": 328}, "model": "RTX 3090 FE", "memory": 24000}},
|
||||
"nodes": [
|
||||
{"name": "default", "quantity": 1, "ram": {"size": 16384}, "cpus": {"Intel Core i7-14700KF": 1}, "gpus": {"RTX 3090 FE": 8}},
|
||||
{"name": "special", "quantity": 2, "ram": {"size": 16384}, "cpus": {"Intel Core i7-14700KF": 10}, "gpus": {"RTX 3090 FE": 10}}
|
||||
]
|
||||
}]
|
||||
},
|
||||
"architecture": "x86",
|
||||
"infrastructure": 0
|
||||
},
|
||||
{
|
||||
"_id": "0bb77206-371a-428e-8ae3-ff11575071e2",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "compute",
|
||||
"abstractobject": {
|
||||
"id": "0bb77206-371a-428e-8ae3-ff11575071e2",
|
||||
"name": "VM Target 2",
|
||||
"is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}]
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "0bb77206-371a-428e-8ae3-ff11575071e2", "name": "VM Proxmox Pierre 2", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{
|
||||
"resourcepartnership": {
|
||||
"namespace": "default",
|
||||
"peer_groups": {"*": ["*"]},
|
||||
"pricing_profiles": {
|
||||
"0": {"3": {"exploitpricingprofile": { "privilege_strategy": 0, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0,"accesspricingprofile" : { "pricing": {"price": 3.5, "currency": "EUR", "buying_strategy": 0, "time_pricing_strategy": 3, "override_strategy": 0}, "allowed_payment_type": [0, 1, 2], "default_refund": 0, "refund_ratio": 0}}}},
|
||||
"2": {"0": { "exploitpricingprofile": {"privilege_strategy": 2, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0,"accesspricingprofile" : { "pricing": {"price": 250.0, "currency": "EUR", "buying_strategy": 2, "time_pricing_strategy": 0, "override_strategy": 0}, "allowed_payment_type": [0], "default_refund": 0, "refund_ratio": 0}}}}
|
||||
}
|
||||
}}]
|
||||
},
|
||||
"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": 0
|
||||
},
|
||||
{
|
||||
"_id": "7fdccb9c-7090-40a5-bacd-7435bc56c90d",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "compute",
|
||||
"abstractobject": {
|
||||
"id": "7fdccb9c-7090-40a5-bacd-7435bc56c90d",
|
||||
"name": "Meteo France datacenter",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}],
|
||||
"allowed_booking_modes": {
|
||||
"0": {"inflate": false, "percent": 0, "priority": 0},
|
||||
"1": {"inflate": false, "percent": 6, "priority": 1}
|
||||
}
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "7fdccb9c-7090-40a5-bacd-7435bc56c90d", "name": "Meteo France datacenter Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{
|
||||
"resourcepartnership": {
|
||||
"namespace": "default", "peer_groups": {"*": ["*"]}, "pricing_profiles": {
|
||||
"0": {"3": { "exploitpricingprofile": { "privilege_strategy": 0, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0, "accesspricingprofile" : {"pricing": {"price": 5.0, "currency": "EUR", "buying_strategy": 0, "time_pricing_strategy": 3, "override_strategy": 0}, "allowed_payment_type": [0, 1, 2], "default_refund": 0, "refund_ratio": 0}}}},
|
||||
"2": {"0": { "exploitpricingprofile": { "privilege_strategy": 2, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0,"accesspricingprofile" : { "pricing": {"price": 400.0, "currency": "EUR", "buying_strategy": 2, "time_pricing_strategy": 0, "override_strategy": 0}, "allowed_payment_type": [0], "default_refund": 0, "refund_ratio": 0}}}}
|
||||
}}}]
|
||||
},
|
||||
"security_level": "sec num cloud",
|
||||
"annual_co2_emissions": 1000,
|
||||
"power_sources": ["solaire", "charbon"],
|
||||
"cpus": {"Intel Core i7-14700KF": {"model": "Intel Core i7-14700KF", "frequency": 3.6, "cores": 20, "architecture": "x86"}},
|
||||
"gpus": {"RTX 3090 FE": {"cores": {"cuda": 10496, "tensor": 328}, "model": "RTX 3090 FE", "memory": 24000}},
|
||||
"nodes": [{"name": "default", "quantity": 1, "ram": {"size": 32786}, "cpus": {"Intel Core i7-14700KF": 1}, "gpus": {"RTX 3090 FE": 8}}]
|
||||
}]
|
||||
},
|
||||
"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": [{
|
||||
"resourcepartnership": {
|
||||
"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": {
|
||||
"abstractresource": {
|
||||
"type": "compute",
|
||||
"abstractobject": {
|
||||
"id": "979776c3-9ae7-4e02-9138-7b30b25f22cc",
|
||||
"name": "VM Target 1",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}],
|
||||
"allowed_booking_modes": {
|
||||
"0": {"inflate": false, "percent": 0, "priority": 0},
|
||||
"1": {"inflate": false, "percent": 3, "priority": 1}
|
||||
}
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "979776c3-9ae7-4e02-9138-7b30b25f22cc", "name": "VM Proxmox Pierre 1", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"resourcepartnership": {"namespace": "default", "peer_groups": {"*": ["*"]}, "pricing_profiles": {
|
||||
"0": {"3": {"exploitpricingprofile": {"privilege_strategy": 0, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0, "accesspricingprofile" : {"pricing": {"price": 1.0, "currency": "EUR", "buying_strategy": 0, "time_pricing_strategy": 3, "override_strategy": 0}, "allowed_payment_type": [0, 1, 2], "default_refund": 0, "refund_ratio": 0}}}},
|
||||
"2": {"0": {"exploitpricingprofile": {"privilege_strategy": 2, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0, "accesspricingprofile" : {"pricing": {"price": 80.0, "currency": "EUR", "buying_strategy": 2, "time_pricing_strategy": 0, "override_strategy": 0}, "allowed_payment_type": [0], "default_refund": 0, "refund_ratio": 0}}}}
|
||||
}}}]
|
||||
},
|
||||
"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": 0
|
||||
},
|
||||
{
|
||||
"_id": "aa110011-aa11-4011-8011-aaaaaaaaaaa1",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "compute",
|
||||
"abstractobject": {
|
||||
"id": "aa110011-aa11-4011-8011-aaaaaaaaaaa1",
|
||||
"name": "Mundi datacenter Live",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2026-04-14T00:00:00.000Z",
|
||||
"update_date": "2026-04-14T00:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/Mundi datacenter.png",
|
||||
"description": "Live-streaming variant of the Mundi datacenter GPU cluster (IRT Saint-Exupéry, Toulouse). Same hardware as Mundi datacenter: Intel Core i7-14700KF (3.6 GHz, 20 cores), 16 GB DDR5-6000, 8× NVIDIA RTX 3090 FE (24 GB GDDR6X). Dedicated GPU partition optimised for continuous inference workloads: low-latency real-time video frame processing, live ONNX/TensorRT model serving and streaming satellite raster analytics. Billed per-minute to match streaming job lifecycles. Pre-emption disabled on this partition; jobs run to completion without resource rebalancing. Power mix: ~60% solar / ~40% coal. Annual CO₂ footprint: ~1 000 kg eqCO₂.",
|
||||
"short_description": "IRT Saint-Exupéry live GPU cluster — i7-14700KF + 8× RTX 3090 FE, per-minute billing (peer-1)",
|
||||
"owners": [{"name": "IRT Saint Exupery"}],
|
||||
"allowed_booking_modes": {
|
||||
"0": {"inflate": false, "percent": 0, "priority": 0},
|
||||
"1": {"inflate": false, "percent": 8, "priority": 1}
|
||||
}
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "aa110011-aa11-4011-8011-aaaaaaaaaaa1", "name": "Mundi datacenter Live Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"resourcepartnership": {"namespace": "default", "peer_groups": {"*": ["*"]}, "pricing_profiles": {
|
||||
"0": {"1": {"exploitpricingprofile": {"privilege_strategy": 0, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0, "accesspricingprofile" : {"pricing": {"price": 0.07, "currency": "EUR", "buying_strategy": 0, "time_pricing_strategy": 1, "override_strategy": 0}, "allowed_payment_type": [0, 1, 2], "default_refund": 0, "refund_ratio": 0}}}},
|
||||
"2": {"0": {"exploitpricingprofile": {"privilege_strategy": 2, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0, "accesspricingprofile" : {"pricing": {"price": 280.0, "currency": "EUR", "buying_strategy": 2, "time_pricing_strategy": 0, "override_strategy": 0}, "allowed_payment_type": [0], "default_refund": 0, "refund_ratio": 0}}}}
|
||||
}}}]
|
||||
},
|
||||
"security_level": "public",
|
||||
"annual_co2_emissions": 1000,
|
||||
"power_sources": ["solaire", "charbon"],
|
||||
"cpus": {"Intel Core i7-14700KF": {"model": "Intel Core i7-14700KF", "frequency": 3.6, "cores": 20, "architecture": "x86"}},
|
||||
"gpus": {"RTX 3090 FE": {"cores": {"cuda": 10496, "tensor": 328}, "model": "RTX 3090 FE", "memory": 24000}},
|
||||
"nodes": [
|
||||
{"name": "default", "quantity": 1, "ram": {"size": 16384}, "cpus": {"Intel Core i7-14700KF": 1}, "gpus": {"RTX 3090 FE": 8}}
|
||||
]
|
||||
}]
|
||||
},
|
||||
"live": true,
|
||||
"architecture": "x86",
|
||||
"infrastructure": 0
|
||||
},
|
||||
{
|
||||
"_id": "ee550005-ee55-4005-8005-eeeeeeeeeeee",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "compute",
|
||||
"abstractobject": {
|
||||
"id": "ee550005-ee55-4005-8005-eeeeeeeeeeee",
|
||||
"name": "Demo Peer2 Server",
|
||||
"is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}],
|
||||
"allowed_booking_modes": {
|
||||
"0": {"inflate": false, "percent": 0, "priority": 0},
|
||||
"1": {"inflate": false, "percent": 10, "priority": 1}
|
||||
}
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "ee550005-ee55-4005-8005-eeeeeeeeeeee", "name": "Demo Peer2 Server Paris", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"resourcepartnership": {"namespace": "default", "peer_groups": {"*": ["*"]}, "pricing_profiles": {
|
||||
"0": {"3": { "exploitpricingprofile": { "privilege_strategy": 0, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0, "accesspricingprofile" : {"pricing": {"price": 6.0, "currency": "EUR", "buying_strategy": 0, "time_pricing_strategy": 3, "override_strategy": 0}, "allowed_payment_type": [0, 1, 2], "default_refund": 0, "refund_ratio": 0}}}},
|
||||
"2": {"0": { "exploitpricingprofile": {"privilege_strategy": 2, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0, "accesspricingprofile" : {"pricing": {"price": 500.0, "currency": "EUR", "buying_strategy": 2, "time_pricing_strategy": 0, "override_strategy": 0}, "allowed_payment_type": [0], "default_refund": 0, "refund_ratio": 0}}}}
|
||||
}}}]
|
||||
},
|
||||
"security_level": "public",
|
||||
"annual_co2_emissions": 500,
|
||||
"power_sources": ["solaire"],
|
||||
"cpus": {"AMD EPYC 9654": {"model": "AMD EPYC 9654", "frequency": 2.4, "cores": 96, "architecture": "x86"}},
|
||||
"gpus": {"RTX 4090": {"cores": {"cuda": 16384, "tensor": 512}, "model": "RTX 4090", "memory": 24000}},
|
||||
"nodes": [
|
||||
{"name": "default", "quantity": 4, "ram": {"size": 65536}, "cpus": {"AMD EPYC 9654": 2}, "gpus": {"RTX 4090": 2}}
|
||||
]
|
||||
}]
|
||||
},
|
||||
"architecture": "x86",
|
||||
"infrastructure": 0
|
||||
}
|
||||
]
|
||||
@@ -1,152 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "d573dc63-4de0-4e29-8a4e-c15cbb3aed06",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "data",
|
||||
"abstractobject": {
|
||||
"id": "d573dc63-4de0-4e29-8a4e-c15cbb3aed06",
|
||||
"name": "Red Car",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}]
|
||||
},
|
||||
"instances": [{
|
||||
"source": "http://plates.openalpr.com/h786poj.jpg",
|
||||
"resourceinstance": {
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "d573dc63-4de0-4e29-8a4e-c15cbb3aed06", "name": "Red Car", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"resourcepartnership": {"namespace": "default", "peer_groups": {"*": ["*"]}}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"quality": "low",
|
||||
"open_data": false,
|
||||
"static": true,
|
||||
"size": 0.59,
|
||||
"example": "http://plates.openalpr.com/h786poj.jpg"
|
||||
},
|
||||
{
|
||||
"_id": "gg770007-gg77-4007-8007-gggggggggggg",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "data",
|
||||
"abstractobject": {
|
||||
"id": "gg770007-gg77-4007-8007-gggggggggggg",
|
||||
"name": "Traffic Camera Feed",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}]
|
||||
},
|
||||
"instances": [{
|
||||
"source": "http://plates.openalpr.com/eu-001.jpg",
|
||||
"resourceinstance": {
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "gg770007-gg77-4007-8007-gggggggggggg", "name": "Traffic Camera Feed Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"resourcepartnership": {"namespace": "default", "peer_groups": {"*": ["*"]}}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"quality": "medium",
|
||||
"open_data": false,
|
||||
"static": false,
|
||||
"size": 0.25,
|
||||
"example": "http://plates.openalpr.com/eu-001.jpg"
|
||||
},
|
||||
{
|
||||
"_id": "811d4b6d-0170-400f-b4a5-9e1597dc7620",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "data",
|
||||
"abstractobject": {
|
||||
"id": "811d4b6d-0170-400f-b4a5-9e1597dc7620",
|
||||
"name": "Meteo-France forecasts",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}]
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "811d4b6d-0170-400f-b4a5-9e1597dc7620", "name": "Meteo-France forecasts Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"resourcepartnership": {"namespace": "default", "peer_groups": {"*": ["*"]}}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"quality": "medium",
|
||||
"open_data": true,
|
||||
"static": false,
|
||||
"size": 590,
|
||||
"example": "http://donneespubliques.meteofrance.fr/"
|
||||
},
|
||||
{
|
||||
"_id": "hh880008-hh88-4008-8008-hhhhhhhhhhhh",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "data",
|
||||
"abstractobject": {
|
||||
"id": "hh880008-hh88-4008-8008-hhhhhhhhhhhh",
|
||||
"name": "Web API Logs",
|
||||
"is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}]
|
||||
},
|
||||
"instances": [{
|
||||
"source": "http://localhost:9000/logs/api.log",
|
||||
"resourceinstance": {
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "hh880008-hh88-4008-8008-hhhhhhhhhhhh", "name": "Web API Logs Paris", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"resourcepartnership": {"namespace": "default", "peer_groups": {"*": ["*"]}}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"quality": "high",
|
||||
"open_data": false,
|
||||
"static": false,
|
||||
"size": 1200,
|
||||
"example": "{\"ts\":\"2026-04-10T08:00:00Z\",\"method\":\"GET\",\"path\":\"/workflow\",\"status\":200,\"latency_ms\":45,\"bytes_out\":1024,\"upstream_ms\":38}"
|
||||
}
|
||||
]
|
||||
@@ -1,175 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "ld000001-ld00-4001-8001-ld0000000001",
|
||||
"abstractlive": {
|
||||
"abstractobject" : {
|
||||
"id": "ld000001-ld00-4001-8001-ld0000000001",
|
||||
"name": "Live Mundi datacenter",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2026-04-14T00:00:00.000Z",
|
||||
"update_date": "2026-04-14T00:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"certs": {
|
||||
"host": "172.16.0.180",
|
||||
"port": "6443"
|
||||
},
|
||||
"monitor_path": "/metrics",
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"access_protocol": "kubernetes",
|
||||
"resources_id": ["7b989e97-c3e7-49d2-a3a7-f959da4870b5"]
|
||||
},
|
||||
"storage_type": -1,
|
||||
"acronym": "DC_myDC",
|
||||
"architecture": "x86",
|
||||
"infrastructure": 0,
|
||||
"security_level": "public",
|
||||
"power_sources": ["solaire", "charbon"],
|
||||
"annual_co2_emissions": 1000,
|
||||
"cpus": {"Intel Core i7-14700KF": {"model": "Intel Core i7-14700KF", "frequency": 3.6, "cores": 20, "architecture": "x86"}},
|
||||
"gpus": {"RTX 3090 FE": {"cores": {"cuda": 10496, "tensor": 328}, "model": "RTX 3090 FE", "memory": 24000}},
|
||||
"nodes": [
|
||||
{"name": "default", "quantity": 1, "ram": {"size": 16384}, "cpus": {"Intel Core i7-14700KF": 1}, "gpus": {"RTX 3090 FE": 8}},
|
||||
{"name": "special", "quantity": 2, "ram": {"size": 16384}, "cpus": {"Intel Core i7-14700KF": 10}, "gpus": {"RTX 3090 FE": 10}}
|
||||
]
|
||||
},
|
||||
{
|
||||
"_id": "ld000002-ld00-4002-8002-ld0000000002",
|
||||
"abstractlive": {
|
||||
"abstractobject" : {
|
||||
"id": "ld000002-ld00-4002-8002-ld0000000002",
|
||||
"name": "Live Meteo France datacenter",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2026-04-14T00:00:00.000Z",
|
||||
"update_date": "2026-04-14T00:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"certs": {
|
||||
"host": "172.16.0.182",
|
||||
"port": "6443"
|
||||
},
|
||||
"monitor_path": "/metrics",
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"access_protocol": "kubernetes",
|
||||
"resources_id": ["7fdccb9c-7090-40a5-bacd-7435bc56c90d"]
|
||||
},
|
||||
"storage_type": -1,
|
||||
"acronym": "DC_myDC",
|
||||
"architecture": "x86",
|
||||
"infrastructure": 0,
|
||||
"security_level": "sec num cloud",
|
||||
"power_sources": ["solaire", "charbon"],
|
||||
"annual_co2_emissions": 1000,
|
||||
"cpus": {"Intel Core i7-14700KF": {"model": "Intel Core i7-14700KF", "frequency": 3.6, "cores": 20, "architecture": "x86"}},
|
||||
"gpus": {"RTX 3090 FE": {"cores": {"cuda": 10496, "tensor": 328}, "model": "RTX 3090 FE", "memory": 24000}},
|
||||
"nodes": [{"name": "default", "quantity": 1, "ram": {"size": 32786}, "cpus": {"Intel Core i7-14700KF": 1}, "gpus": {"RTX 3090 FE": 8}}]
|
||||
},
|
||||
{
|
||||
"_id": "ld000003-ld00-4003-8003-ld0000000003",
|
||||
"abstractlive": {
|
||||
"abstractobject" : {
|
||||
"id": "ld000003-ld00-4003-8003-ld0000000003",
|
||||
"name": "Live Local K3s Peer-1",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2026-04-14T00:00:00.000Z",
|
||||
"update_date": "2026-04-14T00:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"certs": {
|
||||
"host": "172.16.0.180",
|
||||
"port": "6443"
|
||||
},
|
||||
"monitor_path": "/metrics",
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"access_protocol": "kubernetes",
|
||||
"resources_id": ["11110001-1111-4001-8001-111111111111"]
|
||||
},
|
||||
"storage_type": -1,
|
||||
"acronym": "DC_myDC",
|
||||
"architecture": "x86",
|
||||
"infrastructure": 1,
|
||||
"security_level": "private",
|
||||
"power_sources": ["Larmes d'alternant"],
|
||||
"annual_co2_emissions": 1000,
|
||||
"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}}]
|
||||
},
|
||||
{
|
||||
"_id": "ld000004-ld00-4004-8004-ld0000000004",
|
||||
"abstractlive": {
|
||||
"abstractobject" : {
|
||||
"id": "ld000004-ld00-4004-8004-ld0000000004",
|
||||
"name": "Live VM Target 1",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2026-04-14T00:00:00.000Z",
|
||||
"update_date": "2026-04-14T00:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"certs": {
|
||||
"host": "172.16.0.180",
|
||||
"port": "6443"
|
||||
},
|
||||
"monitor_path": "/metrics",
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"access_protocol": "kubernetes",
|
||||
"resources_id": ["979776c3-9ae7-4e02-9138-7b30b25f22cc"]
|
||||
},
|
||||
"storage_type": -1,
|
||||
"acronym": "DC_myDC",
|
||||
"architecture": "x86",
|
||||
"infrastructure": 0,
|
||||
"security_level": "private",
|
||||
"power_sources": ["Larmes d'alternant"],
|
||||
"annual_co2_emissions": 1000,
|
||||
"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}}]
|
||||
},
|
||||
{
|
||||
"_id": "ld000005-ld00-4005-8005-ld0000000005",
|
||||
"abstractlive": {
|
||||
"abstractobject" : {
|
||||
"id": "ld000005-ld00-4005-8005-ld0000000005",
|
||||
"name": "Live Mundi datacenter Live",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2026-04-14T00:00:00.000Z",
|
||||
"update_date": "2026-04-14T00:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"certs": {
|
||||
"host": "172.16.0.180",
|
||||
"port": "6443"
|
||||
},
|
||||
"monitor_path": "/metrics",
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"access_protocol": "kubernetes",
|
||||
"resources_id": ["aa110011-aa11-4011-8011-aaaaaaaaaaa1"]
|
||||
},
|
||||
"storage_type": -1,
|
||||
"acronym": "DC_myDC",
|
||||
"architecture": "x86",
|
||||
"infrastructure": 0,
|
||||
"security_level": "public",
|
||||
"power_sources": ["solaire", "charbon"],
|
||||
"annual_co2_emissions": 1000,
|
||||
"cpus": {"Intel Core i7-14700KF": {"model": "Intel Core i7-14700KF", "frequency": 3.6, "cores": 20, "architecture": "x86"}},
|
||||
"gpus": {"RTX 3090 FE": {"cores": {"cuda": 10496, "tensor": 328}, "model": "RTX 3090 FE", "memory": 24000}},
|
||||
"nodes": [
|
||||
{"name": "default", "quantity": 1, "ram": {"size": 16384}, "cpus": {"Intel Core i7-14700KF": 1}, "gpus": {"RTX 3090 FE": 8}}
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -1,46 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"failed_execution": null,
|
||||
"api_url": "http://localhost:8000",
|
||||
"nats_address": "nats://nats:4222",
|
||||
"stream_address": "/ip4/172.40.0.3/tcp/4003/p2p/12D3KooWBh9kZrekBAE5G33q4jCLNRAzygem3gP1mMdK8mhoCTaw",
|
||||
"wallet_address": "my-wallet",
|
||||
"public_key": "MCowBQYDK2VwAyEAG95Ettl3jTi41HM8le1A9WDmOEq0ANEqpLF7zTZrfXA=",
|
||||
"peer_id": "12D3KooWBh9kZrekBAE5G33q4jCLNRAzygem3gP1mMdK8mhoCTaw",
|
||||
"relation": 1,
|
||||
"abstractobject": {
|
||||
"id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"name": "opencloud-demo-1",
|
||||
"is_draft": false,
|
||||
"not_in_catalog": false,
|
||||
"creation_date": {"$date": "2025-03-27T09:13:13.230Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"trust_score": 0,
|
||||
"verify": false
|
||||
},
|
||||
{
|
||||
"_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"failed_execution": null,
|
||||
"api_url": "http://localhost:9000",
|
||||
"nats_address": "nats://nats:4222",
|
||||
"stream_address": "/ip4/172.40.0.4/tcp/4004/p2p/12D3KooWSzQtBux5GkpdqK8MA9Rmo5W1vTVZhWCbut2k99Ge45GN",
|
||||
"wallet_address": "my-wallet",
|
||||
"public_key": "MCowBQYDK2VwAyEA/ymOIb0sJ0qCWrf3mKz7ACCvsMXLog/EK533JfNXZTM=",
|
||||
"peer_id": "12D3KooWSzQtBux5GkpdqK8MA9Rmo5W1vTVZhWCbut2k99Ge45GN",
|
||||
"relation": 2,
|
||||
"abstractobject": {
|
||||
"id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"name": "opencloud-demo-2",
|
||||
"is_draft": false,
|
||||
"not_in_catalog": false,
|
||||
"creation_date": {"$date": "2025-03-27T09:13:13.230Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"trust_score": 0,
|
||||
"verify": false
|
||||
}
|
||||
]
|
||||
@@ -1,290 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "0d565c87-50ae-4a73-843d-f8b2d4047772",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "0d565c87-50ae-4a73-843d-f8b2d4047772",
|
||||
"name": "CURL",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"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, 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"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "curlimages/curl:8.5.0", "command": "curl"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "0d565c87-50ae-4a73-843d-f8b2d4047772", "name": "CURL Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "MIT",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
},
|
||||
{
|
||||
"_id": "f3c8346b-3536-4c99-8b11-1be9c01697de",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "f3c8346b-3536-4c99-8b11-1be9c01697de",
|
||||
"name": "imagemagic",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/imagemagic-logo.png",
|
||||
"description": "dpokidov/imagemagick:7.1.0-62-2 — community-maintained ImageMagick® 7 build. Covers the full ImageMagick® feature surface: format conversion (JPEG ↔ PNG ↔ TIFF ↔ WebP ↔ AVIF), geometric transforms (resize, crop, rotate, shear, perspective distortion), colour-space conversion (sRGB ↔ Lab ↔ CMYK ↔ HSL), compositing, annotation, histogram normalisation, Fourier transforms and ICC/ICM profile embedding. In the ALPR pipeline it pre-processes downloaded vehicle images — CLAHE contrast enhancement, 3×3 Gaussian blur for noise reduction, gamma correction — before the plate-recognition stage, improving OpenALPR recognition confidence by 10–15% on low-quality frames.",
|
||||
"short_description": "ImageMagick® 7 — image format conversion, enhancement and compositing",
|
||||
"owners": [{"name": "IRT"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "dpokidov/imagemagick:7.1.0-62-2", "command": "magick"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "f3c8346b-3536-4c99-8b11-1be9c01697de", "name": "imagemagic Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
},
|
||||
{
|
||||
"_id": "3041990c-5c5d-40c4-8329-c1df1b812dc3",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "3041990c-5c5d-40c4-8329-c1df1b812dc3",
|
||||
"name": "alpr",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/alpr-logo.png",
|
||||
"description": "openalpr/openalpr — OpenALPR open-source Automatic License Plate Recognition library. Combines OpenCV 4 object detection (SSD-MobileNet) with a Tesseract-derived OCR engine for character segmentation. Supports EU, US/CA, BR, AU and Middle-Eastern plate formats via configurable country files. Accepts JPEG/PNG/BMP input; outputs a structured JSON payload per frame: bounding-box coordinates, plate string, per-character confidence score, country code, processing time. --json flag enables machine-readable output suitable for downstream pipeline stages. Recognition latency: ~120 ms/frame on x86 CPU, ~18 ms with GPU acceleration (CUDA 11+). Used in the alpr workflow as the core recognition step after ImageMagick pre-processing.",
|
||||
"short_description": "OpenALPR — automatic license plate recognition with JSON output",
|
||||
"owners": [{"name": "IRT"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "openalpr/openalpr", "command": "alpr"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "3041990c-5c5d-40c4-8329-c1df1b812dc3", "name": "alpr Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "GPLv3",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
},
|
||||
{
|
||||
"_id": "2ce0323f-a85d-4b8b-a783-5280f48d634a",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "2ce0323f-a85d-4b8b-a783-5280f48d634a",
|
||||
"name": "alpine",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Alpine Linux 3.18 Docker image (5.3 MB compressed). musl-libc + BusyBox base exposing: wget, curl, awk, sed, grep, tar, gzip, openssl, jq (via apk). Zero extraneous packages; deterministic sha256 digest per tag. Used in workflows as a lightweight sidecar for tasks that do not justify a heavier runtime: downloading camera frames via wget, renaming and archiving intermediary files, running one-shot POSIX shell scripts (--command 'sh -c'), performing pre-run health-check assertions, or post-processing step cleanup. Starts in under 80 ms; memory footprint < 4 MB at idle.",
|
||||
"short_description": "Official Alpine 3.18 — minimal shell environment for scripting sidecars",
|
||||
"owners": [{"name": "IRT"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "alpine:3.18", "command": "sh"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "2ce0323f-a85d-4b8b-a783-5280f48d634a", "name": "alpine Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "MIT",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
},
|
||||
{
|
||||
"_id": "e518d7a4-426a-4900-94e5-300767b1bb31",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "e518d7a4-426a-4900-94e5-300767b1bb31",
|
||||
"name": "Mosquitto server",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/mosquitto-logo.png",
|
||||
"description": "Official Eclipse Mosquitto 2.0.18 Docker image — reference MQTT broker from the Eclipse Foundation. Implements MQTT v5.0, v3.1.1 and v3.1 over TCP (port 1883), WebSocket (port 9001), and optional TLS (port 8883) with X.509 mutual auth. Supports password-file authentication, ACL-based topic access control, QoS 0/1/2 delivery guarantees, persistent sessions, retained messages, shared subscriptions (MQTT 5) and bridge mode for multi-broker topologies. Used as the terminal publish step in the sensor-data-collector workflow: reads vehicle-metadata JSON produced by the upstream Python analysis stage from shared storage and fans it out to subscribed edge consumers on the sensors/camera/vehicle topic.",
|
||||
"short_description": "Official Eclipse Mosquitto 2.0 — MQTT v5/v3 broker with QoS and ACL support",
|
||||
"owners": [{"name": "IRT"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "eclipse-mosquitto:2.0.18", "command": "mosquitto"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "e518d7a4-426a-4900-94e5-300767b1bb31", "name": "Mosquitto server Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "EPL-2.0",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
},
|
||||
{
|
||||
"_id": "aa110001-aa11-4001-8001-aaaaaaaaaaaa",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "aa110001-aa11-4001-8001-aaaaaaaaaaaa",
|
||||
"name": "Python Data Processor",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Python 3.11-slim Docker image (Debian Bookworm base, 45 MB compressed). Provides CPython 3.11 runtime with pip; scientific stack installable at launch: NumPy 1.26, Pillow 10, OpenCV-headless 4.9, scikit-learn 1.4, pandas 2.2, requests 2.31. Two workflow roles: (1) image-meta-extractor — EXIF/IPTC tag parsing, colour histogram extraction (256-bin per channel), resolution fingerprinting, output serialised as JSON to shared storage; (2) sensor-data-collector — vehicle object count and bounding-box extraction from camera frames via OpenCV contour detection, plate candidate generation, result published as a structured JSON record. Entry-point script path passed via OUTPUT_FILENAME env var; storage mount path via IRT_LOCAL_FILE_STORAGE_SOURCE.",
|
||||
"short_description": "Official Python 3.11-slim — image analysis and sensor data processing runtime",
|
||||
"owners": [{"name": "Python Software Foundation"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "python:3.11-slim", "command": "python"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "aa110001-aa11-4001-8001-aaaaaaaaaaaa", "name": "Python Data Processor Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "PSF-2.0",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
},
|
||||
{
|
||||
"_id": "cc330003-cc33-4003-8003-cccccccccccc",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "cc330003-cc33-4003-8003-cccccccccccc",
|
||||
"name": "Nginx Gateway",
|
||||
"is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Nginx 1.25-alpine Docker image (9 MB compressed) — high-performance asynchronous HTTP/1.1 and HTTP/2 server and reverse proxy. Event-driven architecture handles 50 000+ concurrent connections per worker process. In the api-monitoring-stack workflow it acts as the terminal presentation layer: reads Redis-cached API status JSON objects from MinIO storage and serves them on port 80 as a structured HTTP endpoint consumed by the OpenCloud operator dashboard. Configuration injected via envsubst at container startup. Features: gzip compression (level 6), custom JSON access logging, CORS headers, configurable cache-control directives, graceful hot-reload via SIGHUP without dropping connections. Owned by opencloud-demo-2.",
|
||||
"short_description": "Official Nginx 1.25-alpine — HTTP frontend and static result endpoint (peer-2)",
|
||||
"owners": [{"name": "nginx"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "nginx:1.25-alpine", "command": "nginx"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "cc330003-cc33-4003-8003-cccccccccccc", "name": "Nginx Gateway Paris", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "BSD-2-Clause",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
},
|
||||
{
|
||||
"_id": "dd440004-dd44-4004-8004-dddddddddddd",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "dd440004-dd44-4004-8004-dddddddddddd",
|
||||
"name": "Redis Cache",
|
||||
"is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Redis 7-alpine Docker image (14 MB compressed) — in-memory key-value store with sub-millisecond read latency. Supports strings, hashes, lists, sorted sets and streams natively. In the api-monitoring-stack workflow, ingests structured API-status objects (status-code distribution per endpoint, p50/p95 latency percentiles) produced by the CURL fetch step, stores them under a configurable CACHE_KEY with a TTL_CACHE_TTL-second TTL (default 300 s) to decouple the slow log-fetching stage from the fast Nginx serving stage. Configured in ephemeral mode (--save '' --appendonly no) to eliminate disk I/O and maximise throughput. Pub/Sub channel api_status_updates can be subscribed to by external consumers for real-time event streaming. Owned by opencloud-demo-2.",
|
||||
"short_description": "Official Redis 7-alpine — TTL-based API status cache with pub/sub support (peer-2)",
|
||||
"owners": [{"name": "Redis Ltd"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "redis:7-alpine", "command": "redis-server"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "dd440004-dd44-4004-8004-dddddddddddd", "name": "Redis Cache Paris", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "BSD-3-Clause",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
}
|
||||
]
|
||||
@@ -1,202 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "aa000001-aaaa-4001-8001-purchase00001",
|
||||
"abstractobject": {
|
||||
"id": "aa000001-aaaa-4001-8001-purchase00001",
|
||||
"not_in_catalog": false,
|
||||
"name": "Mundi datacenter purchase 2026-04-10 08:00",
|
||||
"is_draft": false,
|
||||
"update_date": {"$date": "2026-04-10T08:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"dest_peer_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"execution_id": "b1000001-b100-4001-8001-b10000000001",
|
||||
"executions_id": "c1000001-c100-4001-8001-c10000000001",
|
||||
"end_buying_date": {"$date": "2026-04-10T12:00:00.000Z"},
|
||||
"instance_id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5",
|
||||
"priced_item": {
|
||||
"peer_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"quantity": 1,
|
||||
"selected_pricing": {
|
||||
"privilege_strategy": 0,
|
||||
"garanted_delay_second": 0,
|
||||
"refund_types": [],
|
||||
"exceeding": false,
|
||||
"exceeding_ratio": 0,
|
||||
"pricing": {
|
||||
"price": 3.5,
|
||||
"currency": "EUR",
|
||||
"buying_strategy": 0,
|
||||
"time_pricing_strategy": 3,
|
||||
"override_strategy": 0
|
||||
},
|
||||
"allowed_payment_type": [0, 1, 2],
|
||||
"default_refund": 0,
|
||||
"refund_ratio": 0
|
||||
},
|
||||
"pricing_variations": [],
|
||||
"resource_type": 4,
|
||||
"instance_id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5",
|
||||
"resource_id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5",
|
||||
"name": "Mundi datacenter",
|
||||
"instances_refs": {"7b989e97-c3e7-49d2-a3a7-f959da4870b5": "Mundi datacenter Toulouse"},
|
||||
"booking_configuration": {
|
||||
"start": "2026-04-10T08:00:00.000000000Z",
|
||||
"end": "2026-04-10T12:00:00.000000000Z"
|
||||
}
|
||||
},
|
||||
"resource_id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5",
|
||||
"resource_type": 4,
|
||||
"scheduler_peer_id": "c0cece97-7730-4c2a-8c20-a30944564106"
|
||||
},
|
||||
{
|
||||
"_id": "aa000002-aaaa-4002-8002-purchase00002",
|
||||
"abstractobject": {
|
||||
"id": "aa000002-aaaa-4002-8002-purchase00002",
|
||||
"not_in_catalog": false,
|
||||
"name": "Demo Peer2 Server purchase 2026-04-11 10:00",
|
||||
"is_draft": false,
|
||||
"update_date": {"$date": "2026-04-11T10:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"dest_peer_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"execution_id": "b1000002-b100-4002-8002-b10000000002",
|
||||
"executions_id": "c1000002-c100-4002-8002-c10000000002",
|
||||
"end_buying_date": {"$date": "2026-04-11T12:00:00.000Z"},
|
||||
"instance_id": "ee550005-ee55-4005-8005-eeeeeeeeeeee",
|
||||
"priced_item": {
|
||||
"peer_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"quantity": 1,
|
||||
"selected_pricing": {
|
||||
"privilege_strategy": 1,
|
||||
"garanted_delay_second": 300,
|
||||
"refund_types": [],
|
||||
"exceeding": false,
|
||||
"exceeding_ratio": 0,
|
||||
"pricing": {
|
||||
"price": 6.0,
|
||||
"currency": "EUR",
|
||||
"buying_strategy": 0,
|
||||
"time_pricing_strategy": 3,
|
||||
"override_strategy": 0
|
||||
},
|
||||
"allowed_payment_type": [0, 1, 2],
|
||||
"default_refund": 0,
|
||||
"refund_ratio": 0
|
||||
},
|
||||
"pricing_variations": [{"inflate": false, "percent": 10, "priority": 1}],
|
||||
"resource_type": 4,
|
||||
"instance_id": "ee550005-ee55-4005-8005-eeeeeeeeeeee",
|
||||
"resource_id": "ee550005-ee55-4005-8005-eeeeeeeeeeee",
|
||||
"name": "Demo Peer2 Server",
|
||||
"instances_refs": {"ee550005-ee55-4005-8005-eeeeeeeeeeee": "Demo Peer2 Server Paris"},
|
||||
"booking_configuration": {
|
||||
"start": "2026-04-11T10:00:00.000000000Z",
|
||||
"end": "2026-04-11T12:00:00.000000000Z"
|
||||
}
|
||||
},
|
||||
"resource_id": "ee550005-ee55-4005-8005-eeeeeeeeeeee",
|
||||
"resource_type": 4,
|
||||
"scheduler_peer_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31"
|
||||
},
|
||||
{
|
||||
"_id": "aa000003-aaaa-4003-8003-purchase00003",
|
||||
"abstractobject": {
|
||||
"id": "aa000003-aaaa-4003-8003-purchase00003",
|
||||
"not_in_catalog": false,
|
||||
"name": "Peer2 MinIO Storage purchase 2026-04-12 00:00",
|
||||
"is_draft": false,
|
||||
"update_date": {"$date": "2026-04-12T00:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"dest_peer_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"execution_id": "b1000003-b100-4003-8003-b10000000003",
|
||||
"executions_id": "c1000003-c100-4003-8003-c10000000003",
|
||||
"end_buying_date": {"$date": "2026-04-13T00:00:00.000Z"},
|
||||
"instance_id": "ff660006-ff66-4006-8006-ffffffffffff",
|
||||
"priced_item": {
|
||||
"peer_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"quantity": 1,
|
||||
"selected_pricing": {
|
||||
"privilege_strategy": 0,
|
||||
"garanted_delay_second": 0,
|
||||
"refund_types": [],
|
||||
"exceeding": false,
|
||||
"exceeding_ratio": 0,
|
||||
"pricing": {
|
||||
"price": 0.12,
|
||||
"currency": "EUR",
|
||||
"buying_strategy": 0,
|
||||
"time_pricing_strategy": 3,
|
||||
"override_strategy": 0
|
||||
},
|
||||
"allowed_payment_type": [0, 1, 2],
|
||||
"default_refund": 0,
|
||||
"refund_ratio": 0
|
||||
},
|
||||
"pricing_variations": [{"inflate": false, "percent": 12, "priority": 1}],
|
||||
"resource_type": 3,
|
||||
"instance_id": "ff660006-ff66-4006-8006-ffffffffffff",
|
||||
"resource_id": "ff660006-ff66-4006-8006-ffffffffffff",
|
||||
"name": "Peer2 MinIO Storage",
|
||||
"instances_refs": {"ff660006-ff66-4006-8006-ffffffffffff": "Peer2 MinIO Storage Paris"},
|
||||
"booking_configuration": {
|
||||
"start": "2026-04-12T00:00:00.000000000Z",
|
||||
"end": "2026-04-13T00:00:00.000000000Z"
|
||||
}
|
||||
},
|
||||
"resource_id": "ff660006-ff66-4006-8006-ffffffffffff",
|
||||
"resource_type": 3,
|
||||
"scheduler_peer_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31"
|
||||
},
|
||||
{
|
||||
"_id": "aa000004-aaaa-4004-8004-purchase00004",
|
||||
"abstractobject": {
|
||||
"id": "aa000004-aaaa-4004-8004-purchase00004",
|
||||
"not_in_catalog": false,
|
||||
"name": "IRT local file storage purchase 2026-04-10 00:00",
|
||||
"is_draft": false,
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"dest_peer_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"execution_id": "b1000004-b100-4004-8004-b10000000004",
|
||||
"executions_id": "c1000004-c100-4004-8004-c10000000004",
|
||||
"end_buying_date": {"$date": "2026-04-12T00:00:00.000Z"},
|
||||
"instance_id": "e726020a-b68e-4abc-ab36-c3640ea3f557",
|
||||
"priced_item": {
|
||||
"peer_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"quantity": 1,
|
||||
"selected_pricing": {
|
||||
"privilege_strategy": 0,
|
||||
"garanted_delay_second": 0,
|
||||
"refund_types": [],
|
||||
"exceeding": false,
|
||||
"exceeding_ratio": 0,
|
||||
"pricing": {
|
||||
"price": 0.08,
|
||||
"currency": "EUR",
|
||||
"buying_strategy": 0,
|
||||
"time_pricing_strategy": 3,
|
||||
"override_strategy": 0
|
||||
},
|
||||
"allowed_payment_type": [0, 1, 2],
|
||||
"default_refund": 0,
|
||||
"refund_ratio": 0
|
||||
},
|
||||
"pricing_variations": [],
|
||||
"resource_type": 3,
|
||||
"instance_id": "e726020a-b68e-4abc-ab36-c3640ea3f557",
|
||||
"resource_id": "e726020a-b68e-4abc-ab36-c3640ea3f557",
|
||||
"name": "IRT local file storage",
|
||||
"instances_refs": {"e726020a-b68e-4abc-ab36-c3640ea3f557": "IRT local file storage Toulouse"},
|
||||
"booking_configuration": {
|
||||
"start": "2026-04-10T00:00:00.000000000Z",
|
||||
"end": "2026-04-12T00:00:00.000000000Z"
|
||||
}
|
||||
},
|
||||
"resource_id": "e726020a-b68e-4abc-ab36-c3640ea3f557",
|
||||
"resource_type": 3,
|
||||
"scheduler_peer_id": "c0cece97-7730-4c2a-8c20-a30944564106"
|
||||
}
|
||||
]
|
||||
@@ -1,64 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "rule0001-0000-4000-8000-r00000000001",
|
||||
"abstractobject": {
|
||||
"id": "rule0001-0000-4000-8000-r00000000001",
|
||||
"name": "Sensor data access policy",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"description": "Governs access to the road-traffic sensor pipeline. Only members of the sensor-operators or analysts group may schedule or cancel executions of the sensor-data-collector workflow. MQTT topic sensors/camera/vehicle is readable by all default-namespace peers; write access restricted to the Mosquitto processing step running on authorised compute nodes. Violations trigger an audit log entry forwarded to the OpenCloud rule engine.",
|
||||
"condition": "request.group IN ['sensor-operators', 'analysts'] OR request.resource.type == 'mqtt.subscribe'",
|
||||
"actions": [
|
||||
"ALLOW schedule:sensor-data-collector IF group IN [sensor-operators, analysts]",
|
||||
"ALLOW subscribe:sensors/camera/vehicle FOR *",
|
||||
"DENY publish:sensors/camera/vehicle UNLESS processing_id == e518d7a4-426a-4900-94e5-300767b1bb31",
|
||||
"AUDIT ON DENY"
|
||||
]
|
||||
},
|
||||
{
|
||||
"_id": "rule0002-0000-4000-8000-r00000000002",
|
||||
"abstractobject": {
|
||||
"id": "rule0002-0000-4000-8000-r00000000002",
|
||||
"name": "API logs read-only",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"description": "Controls access to the API monitoring pipeline. All collaborative-area members may query the Nginx dashboard endpoint (GET /status) and read Redis-cached API metrics. Triggering a new CURL ingestion run is restricted to peer-1 scheduler principals (peer_id == c0cece97). Direct writes to the Peer2 MinIO /logs bucket are denied to all external actors; only the CURL processing step running on Mundi datacenter is authorised to PUT objects. Ensures observability without allowing log tampering.",
|
||||
"condition": "request.method == 'GET' OR (request.peer_id == 'c0cece97-7730-4c2a-8c20-a30944564106' AND request.action == 'schedule')",
|
||||
"actions": [
|
||||
"ALLOW GET:/status FOR *",
|
||||
"ALLOW GET:redis.key.api_status FOR *",
|
||||
"ALLOW schedule:api-monitoring-stack IF peer_id == c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"ALLOW PUT:minio:/logs/* IF processing_id == 0d565c87-50ae-4a73-843d-f8b2d4047772",
|
||||
"DENY PUT:minio:/logs/* FOR *",
|
||||
"AUDIT ON DENY"
|
||||
]
|
||||
},
|
||||
{
|
||||
"_id": "rule0003-0000-4000-8000-r00000000003",
|
||||
"abstractobject": {
|
||||
"id": "rule0003-0000-4000-8000-r00000000003",
|
||||
"name": "Cross-peer data retention",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"description": "Enforces lifecycle policies for cross-peer shared storage. Objects written to the Peer2 MinIO bucket (ff660006) under the /logs prefix are subject to a 30-day auto-expiry; a daily cron on peer-2 scans for objects older than 30 days and schedules deletion. Objects written to the IRT local file storage (e726020a) under the /tmp prefix expire after 7 days via a nightly cron on peer-1. Compressed daily rotations (.gz) under /logs are exempt from the 7-day rule and follow a 90-day archive policy. This rule is evaluated at write-time to tag objects with the appropriate TTL metadata header (X-Amz-Meta-Expires-At).",
|
||||
"condition": "resource.path STARTSWITH '/logs' OR resource.path STARTSWITH '/tmp'",
|
||||
"actions": [
|
||||
"TAG X-Amz-Meta-Expires-At:+30d IF storage_id == ff660006-ff66-4006-8006-ffffffffffff AND path STARTSWITH /logs AND NOT path ENDSWITH .gz",
|
||||
"TAG X-Amz-Meta-Expires-At:+90d IF storage_id == ff660006-ff66-4006-8006-ffffffffffff AND path ENDSWITH .gz",
|
||||
"TAG X-Amz-Meta-Expires-At:+7d IF storage_id == e726020a-b68e-4abc-ab36-c3640ea3f557 AND path STARTSWITH /tmp",
|
||||
"SCHEDULE purge:expired CRON 0 2 * * *"
|
||||
]
|
||||
}
|
||||
]
|
||||
@@ -1,138 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "e726020a-b68e-4abc-ab36-c3640ea3f557",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "storage",
|
||||
"abstractobject": {
|
||||
"id": "e726020a-b68e-4abc-ab36-c3640ea3f557",
|
||||
"name": "IRT local file storage",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/IRT local file storage.png",
|
||||
"description": "S3-compatible POSIX file storage deployed on peer-1 infrastructure (IRT Saint-Exupéry, Toulouse). Mount point: /mnt/vol. Capacity: 500 GB, SSD RAID-5S array (5 drives + 1 hot spare), sustained throughput read 300 MB/s / write 350 MB/s, IOPS peak 120 k random 4K. AES-256 encryption at rest; TLS 1.3 in transit. Exposed via MinIO S3 gateway: any peer holding a valid default-namespace credential can GET/PUT objects. Acts as the primary shared scratch space across all peer-1 workflows: CURL download outputs, ImageMagick processed intermediates, Python analysis results and ALPR JSON payloads all land here between pipeline stages. Auto-purge policy: objects older than 7 days under the /tmp prefix are deleted by a nightly cron.",
|
||||
"short_description": "IRT RAID-5S SSD scratch store — 500 GB, 300/350 MB/s, AES-256, S3-compatible (peer-1)",
|
||||
"owners": [{"name": "IRT"}],
|
||||
"allowed_booking_modes": {
|
||||
"0": {"inflate": false, "percent": 0, "priority": 0},
|
||||
"1": {"inflate": false, "percent": 5, "priority": 1}
|
||||
}
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "e726020a-b68e-4abc-ab36-c3640ea3f557", "name": "IRT local file storage Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"resourcepartnership": {"namespace": "default", "peer_groups": {"*": ["*"]}, "pricing_profiles": {
|
||||
"0": {"3": { "exploitpricingprofile": {"privilege_strategy": 0, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0, "accesspricingprofile" : {"pricing": {"price": 0.08, "currency": "EUR", "buying_strategy": 0, "time_pricing_strategy": 3, "override_strategy": 0}, "allowed_payment_type": [0, 1, 2], "default_refund": 0, "refund_ratio": 0}}}},
|
||||
"1": {"4": { "exploitpricingprofile": {"privilege_strategy": 0, "garanted_delay_second": 0, "refund_types": [], "exceeding": true, "exceeding_ratio": 15, "accesspricingprofile" : {"pricing": {"price": 1.5, "currency": "EUR", "buying_strategy": 1, "time_pricing_strategy": 4, "override_strategy": 0}, "allowed_payment_type": [1, 2, 3], "default_refund": 1, "refund_ratio": 20}}}}
|
||||
}}}]
|
||||
},
|
||||
"source": "/mnt/vol",
|
||||
"local": true,
|
||||
"security_level": "public",
|
||||
"size": 500,
|
||||
"size_type": 0,
|
||||
"encryption": true,
|
||||
"redundancy": "RAID5S",
|
||||
"throughput": "r:300,w:350"
|
||||
}]
|
||||
},
|
||||
"storage_type": 5,
|
||||
"acronym": "DC_myDC"
|
||||
},
|
||||
{
|
||||
"_id": "04bc70b5-8d7b-44e6-9015-fadfa0fb102d",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "storage",
|
||||
"abstractobject": {
|
||||
"id": "04bc70b5-8d7b-44e6-9015-fadfa0fb102d",
|
||||
"name": "IRT risk database",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/IRT risk database.png",
|
||||
"description": "S3-compatible network object store dedicated to long-lived risk-analysis artefacts produced by environmental monitoring workflows (fire propagation maps, flood risk rasters, atmospheric dispersion outputs). Mount point: /mnt/riskdb. Capacity: 50 GB, NAS RAID-5 (4 drives + 1 parity), sustained throughput read 200 MB/s / write 150 MB/s. Remote (non-local) store; data persists indefinitely across workflow runs and is consumed by downstream analytics dashboards, OpenCloud workspace layers and long-term archive pipelines. No encryption at rest — data classified as public environmental open data under Licence Ouverte Etalab 2.0. Daily differential backup to CNES datacenter S3 (retention: 90 days).",
|
||||
"short_description": "IRT RAID-5 NAS — 50 GB persistent risk-analysis store, open-data, S3-compatible (peer-1)",
|
||||
"owners": [{"name": "IRT"}]
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "04bc70b5-8d7b-44e6-9015-fadfa0fb102d", "name": "IRT risk database Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"resourcepartnership": {"namespace": "default", "peer_groups": {"*": ["*"]}}}]
|
||||
},
|
||||
"source": "/mnt/riskdb",
|
||||
"local": false,
|
||||
"security_level": "public",
|
||||
"size": 50,
|
||||
"size_type": 3,
|
||||
"redundancy": "RAID5",
|
||||
"throughput": "r:200,w:150"
|
||||
}]
|
||||
},
|
||||
"storage_type": 5,
|
||||
"acronym": "DC_myDC"
|
||||
},
|
||||
{
|
||||
"_id": "ff660006-ff66-4006-8006-ffffffffffff",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "storage",
|
||||
"abstractobject": {
|
||||
"id": "ff660006-ff66-4006-8006-ffffffffffff",
|
||||
"name": "Peer2 MinIO Storage",
|
||||
"is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}],
|
||||
"allowed_booking_modes": {
|
||||
"0": {"inflate": false, "percent": 0, "priority": 0},
|
||||
"1": {"inflate": false, "percent": 12, "priority": 1}
|
||||
}
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "ff660006-ff66-4006-8006-ffffffffffff", "name": "Peer2 MinIO Storage Paris", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"resourcepartnership": {"namespace": "default", "peer_groups": {"*": ["*"]}, "pricing_profiles": {
|
||||
"0": {"3": { "exploitpricingprofile": { "privilege_strategy": 0, "garanted_delay_second": 0, "refund_types": [], "exceeding": false, "exceeding_ratio": 0, "accesspricingprofile" : {"pricing": {"price": 0.12, "currency": "EUR", "buying_strategy": 0, "time_pricing_strategy": 3, "override_strategy": 0}, "allowed_payment_type": [0, 1, 2], "default_refund": 0, "refund_ratio": 0 }}}},
|
||||
"1": {"4": { "exploitpricingprofile": {"privilege_strategy": 0, "garanted_delay_second": 0, "refund_types": [], "exceeding": true, "exceeding_ratio": 20, "accesspricingprofile" : {"pricing": {"price": 2.5, "currency": "EUR", "buying_strategy": 1, "time_pricing_strategy": 4, "override_strategy": 0}, "allowed_payment_type": [1, 2, 3], "default_refund": 1, "refund_ratio": 15 }}}}
|
||||
}}}]
|
||||
},
|
||||
"source": "/mnt/minio",
|
||||
"local": true,
|
||||
"security_level": "public",
|
||||
"size": 1000,
|
||||
"size_type": 0,
|
||||
"encryption": true,
|
||||
"redundancy": "RAID6",
|
||||
"throughput": "r:500,w:400"
|
||||
}]
|
||||
},
|
||||
"storage_type": 5,
|
||||
"acronym": "DC_myDC"
|
||||
}
|
||||
]
|
||||
@@ -1,772 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "58314c99-c595-4ca2-8b5e-822a6774efed",
|
||||
"abstractobject": {
|
||||
"id": "58314c99-c595-4ca2-8b5e-822a6774efed",
|
||||
"not_in_catalog": false,
|
||||
"name": "alpr",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"update_date": {"$date": "2026-04-10T07:47:52.875Z"},
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"user_updater_id": "admin",
|
||||
"access_mode": 0
|
||||
},
|
||||
"resourceset": {
|
||||
"storages": ["e726020a-b68e-4abc-ab36-c3640ea3f557"],
|
||||
"processings": ["0d565c87-50ae-4a73-843d-f8b2d4047772","f3c8346b-3536-4c99-8b11-1be9c01697de","2ce0323f-a85d-4b8b-a783-5280f48d634a","3041990c-5c5d-40c4-8329-c1df1b812dc3"],
|
||||
"computes": ["0bb77206-371a-428e-8ae3-ff11575071e2","7b989e97-c3e7-49d2-a3a7-f959da4870b5"],
|
||||
"datas": ["d573dc63-4de0-4e29-8a4e-c15cbb3aed06"]
|
||||
},
|
||||
"schedule_active": false,
|
||||
"graph": {
|
||||
"partial": false,
|
||||
"zoom": 1,
|
||||
"items": {
|
||||
"c30100a7-1162-4c6b-a8dd-e42fd4d352a2": {
|
||||
"id": "c30100a7-1162-4c6b-a8dd-e42fd4d352a2", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 351.45, "y": 563.55},
|
||||
"itemresource": {"processing": {"license": "GPLv2", "open_source": false, "infrastructure": 0, "usage": {"scaling_model": "2"},
|
||||
"abstractinstanciatedresource": {"abstractresource": {"purchaseinfo": null, "type": "processing",
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Alpine Linux minimal Docker image.", "short_description": "A minimal Docker image",
|
||||
"owners": [{"name": "IRT"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "2ce0323f-a85d-4b8b-a783-5280f48d634a", "not_in_catalog": false, "is_draft": false,
|
||||
"creation_date": {"$date": "2021-09-30T14:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 0, "name": "alpine", "creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "update_date": {"$date": "2021-09-30T14:00:00Z"}}},
|
||||
"instances": [{"resourceinstance": {"abstractobject": {"access_mode": 0, "id": "2ce0323f-a85d-4b8b-a783-5280f48d634a", "not_in_catalog": false, "name": "alpine Toulouse", "is_draft": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"peer_groups": {"*": ["*"]}, "namespace": "default"}]},
|
||||
"access": {"container": {"image": "alpine:3.18", "command": "cat"}}}]}}}
|
||||
},
|
||||
"fd831155-e6d1-4f24-83aa-bb9af0a3c264": {
|
||||
"id": "fd831155-e6d1-4f24-83aa-bb9af0a3c264", "width": 100, "height": 42,
|
||||
"position": {"id": "", "x": 438.53, "y": 429.41},
|
||||
"itemresource": {"processing": {"infrastructure": 0, "usage": {"scaling_model": "2"}, "open_source": false, "license": "GPLv3",
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "processing",
|
||||
"logo": "http://localhost:8000/static/images/alpr-logo.png",
|
||||
"description": "Open source Automatic License Plate Recognition library.", "short_description": "Open source Automatic License Plate Recognition library.",
|
||||
"owners": [{"name": "IRT"}], "allowed_booking_modes": null, "purchaseinfo": null,
|
||||
"abstractobject": {"name": "alpr", "is_draft": false, "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"access_mode": 0, "id": "3041990c-5c5d-40c4-8329-c1df1b812dc3", "not_in_catalog": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "update_date": {"$date": "2021-09-30T14:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106"}},
|
||||
"instances": [{"resourceinstance": {"abstractobject": {"id": "3041990c-5c5d-40c4-8329-c1df1b812dc3", "not_in_catalog": false, "name": "alpr Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"access": {"container": {"image": "openalpr/openalpr", "command": "alpr"}}}]}}}
|
||||
},
|
||||
"0c5ffc8c-c7db-471d-a45f-65a14b6a93e9": {
|
||||
"id": "0c5ffc8c-c7db-471d-a45f-65a14b6a93e9", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 220.18, "y": 296.47},
|
||||
"itemresource": {"storage": {"storage_type": 0, "acronym": "DC_myDC",
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "storage", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/IRT local file storage.png",
|
||||
"description": "S3-compliant IRT local file storage.", "short_description": "S3 compliant IRT file storage",
|
||||
"owners": [{"name": "IRT"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"not_in_catalog": false, "name": "IRT local file storage", "update_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"id": "e726020a-b68e-4abc-ab36-c3640ea3f557", "is_draft": false, "creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": {"$date": "2021-09-30T14:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 0}},
|
||||
"instances": [{"resourceinstance": {"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"access_mode": 0, "id": "e726020a-b68e-4abc-ab36-c3640ea3f557", "not_in_catalog": false, "name": "IRT local file storage Toulouse", "is_draft": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"source": "/mnt/vol", "security_level": "public", "size_type": 0, "local": true, "size": 500, "encryption": true, "redundancy": "RAID5S", "throughput": "r:300,w:350"}]}}}
|
||||
},
|
||||
"0e4ffccd-f0fb-478b-b3b4-173e7f7cc741": {
|
||||
"id": "0e4ffccd-f0fb-478b-b3b4-173e7f7cc741", "width": 100, "height": 46,
|
||||
"position": {"id": "", "x": 436.64, "y": 186.08},
|
||||
"itemresource": {"processing": {"infrastructure": 0, "usage": {"scaling_model": "2"}, "open_source": false, "license": "MIT",
|
||||
"abstractinstanciatedresource": {"abstractresource": {"owners": [{"name": "IRT"}], "allowed_booking_modes": null, "purchaseinfo": null, "type": "processing",
|
||||
"logo": "http://localhost:8000/static/images/curl-logo.png",
|
||||
"description": "Official curl Docker image. Transfers data from or to a server.", "short_description": "Transfer or retrieve information from or to a server",
|
||||
"abstractobject": {"name": "CURL", "creation_date": {"$date": "2021-09-30T14:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 0, "id": "0d565c87-50ae-4a73-843d-f8b2d4047772", "not_in_catalog": false, "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "update_date": {"$date": "2021-09-30T14:00:00Z"}}},
|
||||
"instances": [{"resourceinstance": {"abstractobject": {"access_mode": 0, "id": "0d565c87-50ae-4a73-843d-f8b2d4047772", "not_in_catalog": false, "name": "CURL Toulouse", "is_draft": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"access": {"container": {"image": "curlimages/curl:8.5.0", "command": "curl"}}}]}}}
|
||||
},
|
||||
"3968d439-f294-4607-95f0-3afb61b87f9a": {
|
||||
"id": "3968d439-f294-4607-95f0-3afb61b87f9a", "width": 100, "height": 80,
|
||||
"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": "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",
|
||||
"creation_date": {"$date": "2021-09-30T14:00:00Z"}, "access_mode": 0, "id": "d573dc63-4de0-4e29-8a4e-c15cbb3aed06",
|
||||
"not_in_catalog": false, "update_date": {"$date": "2021-09-30T14:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106"}},
|
||||
"instances": [{"source": "http://plates.openalpr.com/h786poj.jpg",
|
||||
"resourceinstance": {"location": {"longitude": 1.4442, "latitude": 43.6047},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}],
|
||||
"abstractobject": {"is_draft": false, "access_mode": 0, "id": "d573dc63-4de0-4e29-8a4e-c15cbb3aed06", "not_in_catalog": false, "name": "Red Car"},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}}}]}}}
|
||||
},
|
||||
"425a4a07-9d7b-423f-9e97-0ce408279e7f": {
|
||||
"id": "425a4a07-9d7b-423f-9e97-0ce408279e7f", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 638.33, "y": 295.86},
|
||||
"itemresource": {"compute": {"architecture": "x86", "infrastructure": 0,
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "compute", "purchaseinfo": null,
|
||||
"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",
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"update_date": {"$date": "2021-09-30T14:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 0, "is_draft": false}},
|
||||
"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": ["solar"]}]}}}
|
||||
},
|
||||
"775c5cb3-5dc0-46ae-949c-1c5911b2ca4c": {
|
||||
"id": "775c5cb3-5dc0-46ae-949c-1c5911b2ca4c", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 643.35, "y": 429.86},
|
||||
"itemresource": {"compute": {"architecture": "x86", "infrastructure": 0,
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "compute", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/Mundi datacenter.png",
|
||||
"description": "Mundi cloud computing node operated by IRT Saint-Exupéry.", "short_description": "Mundi Opencloud GPU instance — peer-1 owned",
|
||||
"owners": [{"name": "IRT Saint Exupery"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"not_in_catalog": false, "name": "Mundi datacenter", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "update_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 0}},
|
||||
"instances": [{"resourceinstance": {"abstractobject": {"not_in_catalog": false, "name": "Mundi datacenter Toulouse", "is_draft": false, "access_mode": 0, "id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5"},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"allowed_gpus": {"RTX 3090 FE": 4}, "allowed_ram": 20000, "namespace": "default", "peer_groups": {"*": ["*"]}, "allowed_cpus": {"Intel Core i7-14700KF": 1}}]},
|
||||
"security_level": "public", "power_sources": ["solaire", "charbon"]}]}}}
|
||||
},
|
||||
"aec3a3af-2b3c-4c4c-a849-af2a9bb554f3": {
|
||||
"id": "aec3a3af-2b3c-4c4c-a849-af2a9bb554f3", "width": 100, "height": 112,
|
||||
"position": {"id": "", "x": 438.03, "y": 295.96},
|
||||
"itemresource": {"processing": {"license": "Apache-2.0", "open_source": true, "infrastructure": 0, "usage": {"scaling_model": "2"},
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "processing", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/imagemagic-logo.png",
|
||||
"description": "ImageMagick® image manipulation suite.", "short_description": "ImageMagick® image manipulation suite",
|
||||
"owners": [{"name": "IRT"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"not_in_catalog": false, "name": "imagemagic", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"update_date": {"$date": "2021-09-30T14:00:00Z"}, "id": "f3c8346b-3536-4c99-8b11-1be9c01697de",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 0}},
|
||||
"instances": [{"resourceinstance": {"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}],
|
||||
"abstractobject": {"is_draft": false, "access_mode": 0, "id": "f3c8346b-3536-4c99-8b11-1be9c01697de", "not_in_catalog": false, "name": "imagemagic Toulouse"}},
|
||||
"access": {"container": {"image": "dpokidov/imagemagick:7.1.0-62-2", "command": "magick"}}}]}}}
|
||||
}
|
||||
},
|
||||
"links": [
|
||||
{"env": [], "source": {"id": "0c5ffc8c-c7db-471d-a45f-65a14b6a93e9", "x": 319.68, "y": 345.97}, "destination": {"id": "aec3a3af-2b3c-4c4c-a849-af2a9bb554f3", "x": 436.53, "y": 351.32}, "style": {"head_radius": 6, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "color": 4294472049, "stroke": 1.7, "tension": 1, "dash_width": 2, "dash_space": 2, "end_arrow": {"id": "", "x": -1, "y": 0}, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "0c5ffc8c-c7db-471d-a45f-65a14b6a93e9", "x": 319.68, "y": 345.97}, "destination": {"id": "fd831155-e6d1-4f24-83aa-bb9af0a3c264", "x": 437.03, "y": 449.99}, "style": {"head_radius": 6, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "color": 4294472049, "stroke": 1.7, "tension": 1, "dash_width": 2, "dash_space": 2, "end_arrow": {"id": "", "x": -1, "y": 0}, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "0c5ffc8c-c7db-471d-a45f-65a14b6a93e9", "x": 269.68, "y": 395.97}, "destination": {"id": "c30100a7-1162-4c6b-a8dd-e42fd4d352a2", "x": 349.95, "y": 613.05}, "style": {"color": 4294472049, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_space": 2, "end_arrow": {"id": "", "x": -1, "y": 0}, "start_arrow": {"id": "", "x": 0, "y": 1}, "arrow_style": 0, "dash_width": 2, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "0e4ffccd-f0fb-478b-b3b4-173e7f7cc741", "x": 436.14, "y": 208.63}, "destination": {"id": "0c5ffc8c-c7db-471d-a45f-65a14b6a93e9", "x": 268.68, "y": 295.97}, "style": {"color": 4294472049, "stroke": 1.7, "head_radius": 6, "end_arrow": {"id": "", "x": 0, "y": -1}, "arrow_style": 0, "end_arrow_width": 10, "tension": 1, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": -1, "y": 0}, "arrow_direction": 0, "start_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "0e4ffccd-f0fb-478b-b3b4-173e7f7cc741", "x": 536.14, "y": 208.63}, "destination": {"id": "425a4a07-9d7b-423f-9e97-0ce408279e7f", "x": 636.83, "y": 295.36}, "style": {"end_arrow": {"id": "", "x": 0, "y": -1}, "start_arrow": {"x": 1, "y": 0, "id": ""}, "color": 4294940672, "stroke": 1.7, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2}},
|
||||
{"env": [], "source": {"id": "0e4ffccd-f0fb-478b-b3b4-173e7f7cc741", "x": 486.14, "y": 231.68}, "destination": {"id": "aec3a3af-2b3c-4c4c-a849-af2a9bb554f3", "x": 486.53, "y": 295.46}, "style": {"dash_space": 0, "end_arrow": {"id": "", "x": 0, "y": -1}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "tension": 1, "dash_width": 0, "start_arrow": {"id": "", "x": 0, "y": 1}, "end_arrow_width": 10, "color": 4278190080, "stroke": 1.7, "head_radius": 6}},
|
||||
{"env": [], "source": {"id": "3968d439-f294-4607-95f0-3afb61b87f9a", "x": 485.33, "y": 157.15}, "destination": {"id": "0e4ffccd-f0fb-478b-b3b4-173e7f7cc741", "x": 485.14, "y": 185.58}, "style": {"start_arrow": {"id": "", "x": 0, "y": 1}, "arrow_style": 0, "arrow_direction": 0, "color": 4280391411, "stroke": 1.7, "head_radius": 6, "dash_width": 2, "end_arrow": {"id": "", "x": 0, "y": -1}, "start_arrow_width": 10, "end_arrow_width": 10, "tension": 1, "dash_space": 2}},
|
||||
{"env": [], "source": {"id": "aec3a3af-2b3c-4c4c-a849-af2a9bb554f3", "x": 537.53, "y": 351.32}, "destination": {"id": "425a4a07-9d7b-423f-9e97-0ce408279e7f", "x": 636.83, "y": 345.36}, "style": {"dash_width": 2, "dash_space": 2, "start_arrow_width": 10, "end_arrow_width": 10, "end_arrow": {"x": -1, "y": 0, "id": ""}, "start_arrow": {"id": "", "x": 1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "color": 4294940672, "stroke": 1.7, "tension": 1, "head_radius": 6}},
|
||||
{"env": [], "source": {"id": "aec3a3af-2b3c-4c4c-a849-af2a9bb554f3", "x": 487.53, "y": 407.18}, "destination": {"id": "fd831155-e6d1-4f24-83aa-bb9af0a3c264", "x": 487.28, "y": 428.91}, "style": {"tension": 1, "end_arrow": {"id": "", "x": 0, "y": -1}, "start_arrow": {"id": "", "x": 0, "y": 1}, "arrow_style": 0, "arrow_direction": 0, "stroke": 1.7, "head_radius": 6, "dash_width": 0, "dash_space": 0, "start_arrow_width": 10, "end_arrow_width": 10, "color": 4278190080}},
|
||||
{"env": [], "source": {"id": "c30100a7-1162-4c6b-a8dd-e42fd4d352a2", "x": 450.95, "y": 613.05}, "destination": {"id": "775c5cb3-5dc0-46ae-949c-1c5911b2ca4c", "x": 691.85, "y": 529.36}, "style": {"color": 4294940672, "stroke": 1.7, "head_radius": 6, "dash_width": 2, "dash_space": 2, "end_arrow": {"x": 0, "y": 1, "id": ""}, "start_arrow": {"id": "", "x": 1, "y": 0}, "arrow_direction": 0, "tension": 1, "arrow_style": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "fd831155-e6d1-4f24-83aa-bb9af0a3c264", "x": 538.52, "y": 449.99}, "destination": {"id": "775c5cb3-5dc0-46ae-949c-1c5911b2ca4c", "x": 641.85, "y": 479.36}, "style": {"tension": 1, "dash_space": 2, "start_arrow_width": 10, "stroke": 1.7, "head_radius": 6, "dash_width": 2, "end_arrow": {"x": -1, "y": 0, "id": ""}, "start_arrow": {"id": "", "x": 1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "end_arrow_width": 10, "color": 4294940672}},
|
||||
{"env": [], "source": {"id": "fd831155-e6d1-4f24-83aa-bb9af0a3c264", "x": 488.28, "y": 471.08}, "destination": {"id": "c30100a7-1162-4c6b-a8dd-e42fd4d352a2", "x": 449.95, "y": 613.05}, "style": {"start_arrow_width": 10, "end_arrow_width": 10, "color": 4278190080, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_space": 0, "end_arrow": {"y": 0, "id": "", "x": 1}, "start_arrow": {"id": "", "x": 0, "y": 1}, "dash_width": 0, "arrow_style": 0, "arrow_direction": 0}}
|
||||
]
|
||||
},
|
||||
"shared": [],
|
||||
"exposes": {},
|
||||
"outputs": {
|
||||
"0c5ffc8c-c7db-471d-a45f-65a14b6a93e9": [{"name": "SOURCE", "value": "/mnt/vol", "readonly": false, "optionnal": false}],
|
||||
"0e4ffccd-f0fb-478b-b3b4-173e7f7cc741": [{"name": "FILENAME", "value": "image.jpg", "readonly": false, "optionnal": false}],
|
||||
"3968d439-f294-4607-95f0-3afb61b87f9a": [{"readonly": false, "optionnal": false, "name": "SOURCE", "value": "http://plates.openalpr.com/h786poj.jpg"}],
|
||||
"aec3a3af-2b3c-4c4c-a849-af2a9bb554f3": [{"optionnal": false, "name": "OUTPUT_FILENAME", "value": "treated_image.jpg", "readonly": false}],
|
||||
"fd831155-e6d1-4f24-83aa-bb9af0a3c264": [{"name": "OUTPUT_FILENAME", "value": "alpr.json", "readonly": false, "optionnal": false}]
|
||||
},
|
||||
"env": {
|
||||
"0c5ffc8c-c7db-471d-a45f-65a14b6a93e9": [{"optionnal": false, "name": "SOURCE", "value": "/mnt/vol", "readonly": false}],
|
||||
"0e4ffccd-f0fb-478b-b3b4-173e7f7cc741": [{"value": "image.jpg", "readonly": false, "optionnal": false, "name": "FILENAME"}],
|
||||
"aec3a3af-2b3c-4c4c-a849-af2a9bb554f3": [{"readonly": false, "optionnal": false, "name": "OUTPUT_FILENAME", "value": "treated_image.jpg"}],
|
||||
"c30100a7-1162-4c6b-a8dd-e42fd4d352a2": [{"readonly": true, "optionnal": false, "name": "ALPR_OUTPUT_FILENAME", "value": "alpr.json", "origin": "fd831155-e6d1-4f24-83aa-bb9af0a3c264"}],
|
||||
"fd831155-e6d1-4f24-83aa-bb9af0a3c264": [{"optionnal": false, "name": "OUTPUT_FILENAME", "value": "alpr.json", "readonly": false}]
|
||||
},
|
||||
"inputs": {
|
||||
"0e4ffccd-f0fb-478b-b3b4-173e7f7cc741": [
|
||||
{"name": "IRT_LOCAL_FILE_STORAGE_SOURCE", "value": "/mnt/vol", "origin": "0c5ffc8c-c7db-471d-a45f-65a14b6a93e9", "readonly": true, "optionnal": false},
|
||||
{"name": "RED_CAR_SOURCE", "value": "http://plates.openalpr.com/h786poj.jpg", "origin": "3968d439-f294-4607-95f0-3afb61b87f9a", "readonly": true, "optionnal": false}
|
||||
],
|
||||
"aec3a3af-2b3c-4c4c-a849-af2a9bb554f3": [
|
||||
{"readonly": true, "optionnal": false, "name": "IRT_LOCAL_FILE_STORAGE_SOURCE", "value": "/mnt/vol", "origin": "0c5ffc8c-c7db-471d-a45f-65a14b6a93e9"},
|
||||
{"value": "image.jpg", "origin": "0e4ffccd-f0fb-478b-b3b4-173e7f7cc741", "readonly": true, "optionnal": false, "name": "CURL_FILENAME"}
|
||||
],
|
||||
"fd831155-e6d1-4f24-83aa-bb9af0a3c264": [
|
||||
{"name": "IRT_LOCAL_FILE_STORAGE_SOURCE", "value": "/mnt/vol", "origin": "0c5ffc8c-c7db-471d-a45f-65a14b6a93e9", "readonly": true, "optionnal": false},
|
||||
{"name": "IMAGEMAGIC_OUTPUT_FILENAME", "value": "treated_image.jpg", "origin": "aec3a3af-2b3c-4c4c-a849-af2a9bb554f3", "readonly": true, "optionnal": false}
|
||||
],
|
||||
"c30100a7-1162-4c6b-a8dd-e42fd4d352a2": [
|
||||
{"value": "/mnt/vol", "origin": "0c5ffc8c-c7db-471d-a45f-65a14b6a93e9", "readonly": true, "optionnal": false, "name": "IRT_LOCAL_FILE_STORAGE_SOURCE"},
|
||||
{"readonly": true, "optionnal": false, "name": "ALPR_OUTPUT_FILENAME", "value": "alpr.json", "origin": "fd831155-e6d1-4f24-83aa-bb9af0a3c264"}
|
||||
]
|
||||
},
|
||||
"args": {
|
||||
"0e4ffccd-f0fb-478b-b3b4-173e7f7cc741": ["-SL", "$RED_CAR_SOURCE", "-o", "$IRT_LOCAL_FILE_STORAGE_SOURCE/$FILENAME"],
|
||||
"aec3a3af-2b3c-4c4c-a849-af2a9bb554f3": ["$IRT_LOCAL_FILE_STORAGE_SOURCE/$CURL_FILENAME", "$IRT_LOCAL_FILE_STORAGE_SOURCE/$OUTPUT_FILENAME"],
|
||||
"fd831155-e6d1-4f24-83aa-bb9af0a3c264": ["--country", "eu", "--json", "$IRT_LOCAL_FILE_STORAGE_SOURCE/$IMAGEMAGIC_OUTPUT_FILENAME", ">", "$IRT_LOCAL_FILE_STORAGE_SOURCE/$OUTPUT_FILENAME"],
|
||||
"c30100a7-1162-4c6b-a8dd-e42fd4d352a2": ["$IRT_LOCAL_FILE_STORAGE_SOURCE/$ALPR_OUTPUT_FILENAME"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id": "11111111-1111-4111-8111-111111111111",
|
||||
"abstractobject": {
|
||||
"id": "11111111-1111-4111-8111-111111111111",
|
||||
"not_in_catalog": false,
|
||||
"name": "image-meta-extractor",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"user_updater_id": "admin",
|
||||
"access_mode": 0
|
||||
},
|
||||
"resourceset": {
|
||||
"storages": ["e726020a-b68e-4abc-ab36-c3640ea3f557"],
|
||||
"processings": ["0d565c87-50ae-4a73-843d-f8b2d4047772", "aa110001-aa11-4001-8001-aaaaaaaaaaaa"],
|
||||
"computes": ["7b989e97-c3e7-49d2-a3a7-f959da4870b5", "0bb77206-371a-428e-8ae3-ff11575071e2"],
|
||||
"datas": ["d573dc63-4de0-4e29-8a4e-c15cbb3aed06"]
|
||||
},
|
||||
"schedule_active": false,
|
||||
"graph": {
|
||||
"partial": false,
|
||||
"zoom": 1,
|
||||
"items": {
|
||||
"a1000001-0000-4000-8000-000000000001": {
|
||||
"id": "a1000001-0000-4000-8000-000000000001", "width": 100, "height": 80,
|
||||
"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": "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"}],
|
||||
"abstractobject": {"name": "Red Car", "is_draft": false, "creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": {"$date": "2021-09-30T14:00:00Z"}, "access_mode": 0,
|
||||
"id": "d573dc63-4de0-4e29-8a4e-c15cbb3aed06", "not_in_catalog": false,
|
||||
"update_date": {"$date": "2021-09-30T14:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106"}},
|
||||
"instances": [{"source": "http://plates.openalpr.com/h786poj.jpg",
|
||||
"resourceinstance": {"location": {"longitude": 1.4442, "latitude": 43.6047},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}],
|
||||
"abstractobject": {"is_draft": false, "access_mode": 0, "id": "d573dc63-4de0-4e29-8a4e-c15cbb3aed06", "not_in_catalog": false, "name": "Red Car"},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}}}]}}}
|
||||
},
|
||||
"a1000002-0000-4000-8000-000000000002": {
|
||||
"id": "a1000002-0000-4000-8000-000000000002", "width": 100, "height": 46,
|
||||
"position": {"id": "", "x": 430, "y": 200},
|
||||
"itemresource": {"processing": {"license": "MIT", "open_source": true, "infrastructure": 0, "usage": {"scaling_model": "2"},
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "processing", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/curl-logo.png",
|
||||
"description": "Official curl Docker image. Transfers data from or to a server.",
|
||||
"short_description": "Transfer data from/to a server — official curl image",
|
||||
"owners": [{"name": "IRT"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "0d565c87-50ae-4a73-843d-f8b2d4047772", "name": "CURL", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"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": "0d565c87-50ae-4a73-843d-f8b2d4047772", "name": "CURL Toulouse", "is_draft": false, "access_mode": 0, "not_in_catalog": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"access": {"container": {"image": "curlimages/curl:8.5.0", "command": "curl"}}}]}}}
|
||||
},
|
||||
"a1000003-0000-4000-8000-000000000003": {
|
||||
"id": "a1000003-0000-4000-8000-000000000003", "width": 100, "height": 46,
|
||||
"position": {"id": "", "x": 430, "y": 340},
|
||||
"itemresource": {"processing": {"license": "PSF-2.0", "open_source": true, "infrastructure": 0, "usage": {"scaling_model": "2"},
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "processing", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Python 3.11 slim Docker image for data processing scripts.",
|
||||
"short_description": "Official Python 3.11 runtime for data processing",
|
||||
"owners": [{"name": "Python Software Foundation"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "aa110001-aa11-4001-8001-aaaaaaaaaaaa", "name": "Python Data Processor", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 0, "not_in_catalog": false}},
|
||||
"instances": [{"resourceinstance": {"abstractobject": {"id": "aa110001-aa11-4001-8001-aaaaaaaaaaaa", "name": "Python Data Processor Toulouse", "is_draft": false, "access_mode": 0, "not_in_catalog": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"access": {"container": {"image": "python:3.11-slim", "command": "python"}}}]}}}
|
||||
},
|
||||
"a1000004-0000-4000-8000-000000000004": {
|
||||
"id": "a1000004-0000-4000-8000-000000000004", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 210, "y": 270},
|
||||
"itemresource": {"storage": {"storage_type": 5, "acronym": "DC_myDC",
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "storage", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/IRT local file storage.png",
|
||||
"description": "S3-compliant IRT local file storage.", "short_description": "S3-compliant local file storage (peer-1)",
|
||||
"owners": [{"name": "IRT"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "e726020a-b68e-4abc-ab36-c3640ea3f557", "name": "IRT local file storage", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"update_date": {"$date": "2021-09-30T14:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 0, "not_in_catalog": false}},
|
||||
"instances": [{"resourceinstance": {"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "e726020a-b68e-4abc-ab36-c3640ea3f557", "name": "IRT local file storage Toulouse", "is_draft": false, "access_mode": 0, "not_in_catalog": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"source": "/mnt/vol", "security_level": "public", "size_type": 0, "local": true, "size": 500, "encryption": true, "redundancy": "RAID5S", "throughput": "r:300,w:350"}]}}}
|
||||
},
|
||||
"a1000005-0000-4000-8000-000000000005": {
|
||||
"id": "a1000005-0000-4000-8000-000000000005", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 640, "y": 190},
|
||||
"itemresource": {"compute": {"architecture": "x86", "infrastructure": 0,
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "compute", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/Mundi datacenter.png",
|
||||
"description": "Mundi cloud computing node, peer-1 owned. Executes the CURL download step.",
|
||||
"short_description": "Mundi Opencloud GPU instance — peer-1 owned",
|
||||
"owners": [{"name": "IRT Saint Exupery"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5", "name": "Mundi datacenter", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"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": "7b989e97-c3e7-49d2-a3a7-f959da4870b5", "name": "Mundi datacenter Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"allowed_gpus": {"RTX 3090 FE": 4}, "allowed_ram": 20000, "namespace": "default", "peer_groups": {"*": ["*"]}, "allowed_cpus": {"Intel Core i7-14700KF": 1}}]},
|
||||
"security_level": "public", "power_sources": ["solaire", "charbon"]}]}}}
|
||||
},
|
||||
"a1000006-0000-4000-8000-000000000006": {
|
||||
"id": "a1000006-0000-4000-8000-000000000006", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 640, "y": 330},
|
||||
"itemresource": {"compute": {"architecture": "x86", "infrastructure": 0,
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "compute", "purchaseinfo": null,
|
||||
"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,
|
||||
"abstractobject": {"id": "0bb77206-371a-428e-8ae3-ff11575071e2", "name": "VM Target 2", "is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"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": ["solar"]}]}}}
|
||||
}
|
||||
},
|
||||
"links": [
|
||||
{"env": [], "source": {"id": "a1000001-0000-4000-8000-000000000001", "x": 480, "y": 140}, "destination": {"id": "a1000002-0000-4000-8000-000000000002", "x": 480, "y": 200}, "style": {"color": 4280391411, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 0, "y": 1}, "end_arrow": {"id": "", "x": 0, "y": -1}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "a1000002-0000-4000-8000-000000000002", "x": 430, "y": 223}, "destination": {"id": "a1000004-0000-4000-8000-000000000004", "x": 310, "y": 320}, "style": {"color": 4294472049, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": -1, "y": 0}, "end_arrow": {"id": "", "x": 1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "a1000004-0000-4000-8000-000000000004", "x": 310, "y": 320}, "destination": {"id": "a1000003-0000-4000-8000-000000000003", "x": 430, "y": 363}, "style": {"color": 4294472049, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow": {"id": "", "x": -1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "a1000002-0000-4000-8000-000000000002", "x": 530, "y": 223}, "destination": {"id": "a1000005-0000-4000-8000-000000000005", "x": 640, "y": 240}, "style": {"color": 4294940672, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow": {"id": "", "x": -1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "a1000003-0000-4000-8000-000000000003", "x": 530, "y": 363}, "destination": {"id": "a1000006-0000-4000-8000-000000000006", "x": 640, "y": 380}, "style": {"color": 4294940672, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow": {"id": "", "x": -1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}}
|
||||
]
|
||||
},
|
||||
"shared": [],
|
||||
"exposes": {},
|
||||
"outputs": {
|
||||
"a1000001-0000-4000-8000-000000000001": [{"name": "SOURCE", "value": "http://plates.openalpr.com/h786poj.jpg", "readonly": false, "optionnal": false}],
|
||||
"a1000004-0000-4000-8000-000000000004": [{"name": "SOURCE", "value": "/mnt/vol", "readonly": false, "optionnal": false}],
|
||||
"a1000002-0000-4000-8000-000000000002": [{"name": "FILENAME", "value": "image.jpg", "readonly": false, "optionnal": false}],
|
||||
"a1000003-0000-4000-8000-000000000003": [{"name": "OUTPUT_FILENAME", "value": "metadata.json", "readonly": false, "optionnal": false}]
|
||||
},
|
||||
"env": {
|
||||
"a1000002-0000-4000-8000-000000000002": [{"name": "FILENAME", "value": "image.jpg", "readonly": false, "optionnal": false}],
|
||||
"a1000003-0000-4000-8000-000000000003": [{"name": "OUTPUT_FILENAME", "value": "metadata.json", "readonly": false, "optionnal": false}]
|
||||
},
|
||||
"inputs": {
|
||||
"a1000002-0000-4000-8000-000000000002": [
|
||||
{"name": "RED_CAR_SOURCE", "value": "http://plates.openalpr.com/h786poj.jpg", "origin": "a1000001-0000-4000-8000-000000000001", "readonly": true, "optionnal": false},
|
||||
{"name": "IRT_LOCAL_FILE_STORAGE_SOURCE", "value": "/mnt/vol", "origin": "a1000004-0000-4000-8000-000000000004", "readonly": true, "optionnal": false}
|
||||
],
|
||||
"a1000003-0000-4000-8000-000000000003": [
|
||||
{"name": "IRT_LOCAL_FILE_STORAGE_SOURCE", "value": "/mnt/vol", "origin": "a1000004-0000-4000-8000-000000000004", "readonly": true, "optionnal": false},
|
||||
{"name": "CURL_FILENAME", "value": "image.jpg", "origin": "a1000002-0000-4000-8000-000000000002", "readonly": true, "optionnal": false}
|
||||
]
|
||||
},
|
||||
"args": {
|
||||
"a1000002-0000-4000-8000-000000000002": ["-SL", "$RED_CAR_SOURCE", "-o", "$IRT_LOCAL_FILE_STORAGE_SOURCE/$FILENAME"],
|
||||
"a1000003-0000-4000-8000-000000000003": ["analyze_image.py", "--input", "$IRT_LOCAL_FILE_STORAGE_SOURCE/$CURL_FILENAME", "--output", "$IRT_LOCAL_FILE_STORAGE_SOURCE/$OUTPUT_FILENAME"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id": "22222222-2222-4222-8222-222222222222",
|
||||
"abstractobject": {
|
||||
"id": "22222222-2222-4222-8222-222222222222",
|
||||
"not_in_catalog": false,
|
||||
"name": "api-monitoring-stack",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"user_updater_id": "admin",
|
||||
"access_mode": 0
|
||||
},
|
||||
"resourceset": {
|
||||
"storages": ["ff660006-ff66-4006-8006-ffffffffffff"],
|
||||
"processings": ["0d565c87-50ae-4a73-843d-f8b2d4047772", "dd440004-dd44-4004-8004-dddddddddddd", "cc330003-cc33-4003-8003-cccccccccccc"],
|
||||
"computes": ["7b989e97-c3e7-49d2-a3a7-f959da4870b5", "ee550005-ee55-4005-8005-eeeeeeeeeeee"],
|
||||
"datas": ["hh880008-hh88-4008-8008-hhhhhhhhhhhh"]
|
||||
},
|
||||
"schedule_active": false,
|
||||
"graph": {
|
||||
"partial": false,
|
||||
"zoom": 1,
|
||||
"items": {
|
||||
"b2000001-0000-4000-8000-000000000001": {
|
||||
"id": "b2000001-0000-4000-8000-000000000001", "width": 100, "height": 80,
|
||||
"position": {"id": "", "x": 430, "y": 60},
|
||||
"itemresource": {"data": {"type": "data", "quality": "high", "open_data": false, "static": false, "size": 1200,
|
||||
"example": "{\"ts\":\"2026-04-10T08:00:00Z\",\"method\":\"GET\",\"path\":\"/workflow\",\"status\":200,\"latency_ms\":45}",
|
||||
"abstractinstanciatedresource": {"abstractresource": {"allowed_booking_modes": null, "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Structured NDJSON HTTP access-log stream from the peer-2 API gateway. ~1.2 GB/day at 300 req/min.",
|
||||
"short_description": "Peer-2 API gateway NDJSON access logs",
|
||||
"owners": [{"name": "opencloud-demo-2"}],
|
||||
"abstractobject": {"name": "Web API Logs", "is_draft": false, "creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": {"$date": "2021-09-30T14:00:00Z"}, "access_mode": 0,
|
||||
"id": "hh880008-hh88-4008-8008-hhhhhhhhhhhh", "not_in_catalog": false,
|
||||
"update_date": {"$date": "2026-04-10T00:00:00Z"}, "updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31"}},
|
||||
"instances": [{"source": "http://localhost:9000/logs/api.log",
|
||||
"resourceinstance": {"location": {"longitude": 2.3522, "latitude": 48.8566},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}],
|
||||
"abstractobject": {"is_draft": false, "access_mode": 0, "id": "hh880008-hh88-4008-8008-hhhhhhhhhhhh", "not_in_catalog": false, "name": "Web API Logs Paris"},
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"origin": {"origin_type": 0, "origin_verified": false}}}]}}}
|
||||
},
|
||||
"b2000002-0000-4000-8000-000000000002": {
|
||||
"id": "b2000002-0000-4000-8000-000000000002", "width": 100, "height": 46,
|
||||
"position": {"id": "", "x": 430, "y": 200},
|
||||
"itemresource": {"processing": {"license": "MIT", "open_source": true, "infrastructure": 0, "usage": {"scaling_model": "2"},
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "processing", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/curl-logo.png",
|
||||
"description": "Official curl Docker image. Fetches the API log file from the peer-2 gateway endpoint and writes it to MinIO storage.",
|
||||
"short_description": "Official curl image — multi-protocol data fetcher",
|
||||
"owners": [{"name": "IRT"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "0d565c87-50ae-4a73-843d-f8b2d4047772", "name": "CURL", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"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": "0d565c87-50ae-4a73-843d-f8b2d4047772", "name": "CURL Paris", "is_draft": false, "access_mode": 0, "not_in_catalog": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"access": {"container": {"image": "curlimages/curl:8.5.0", "command": "curl"}}}]}}}
|
||||
},
|
||||
"b2000003-0000-4000-8000-000000000003": {
|
||||
"id": "b2000003-0000-4000-8000-000000000003", "width": 100, "height": 46,
|
||||
"position": {"id": "", "x": 430, "y": 340},
|
||||
"itemresource": {"processing": {"license": "BSD-3-Clause", "open_source": true, "infrastructure": 0, "usage": {"scaling_model": "2"},
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "processing", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Redis 7-alpine image. Ingests structured API-status objects from storage and caches them with a 300-second TTL.",
|
||||
"short_description": "Official Redis 7-alpine — TTL cache with pub/sub support",
|
||||
"owners": [{"name": "Redis Ltd"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "dd440004-dd44-4004-8004-dddddddddddd", "name": "Redis Cache", "is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00Z"}, "updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 0, "not_in_catalog": false}},
|
||||
"instances": [{"resourceinstance": {"abstractobject": {"id": "dd440004-dd44-4004-8004-dddddddddddd", "name": "Redis Cache Paris", "is_draft": false, "access_mode": 0, "not_in_catalog": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"access": {"container": {"image": "redis:7-alpine", "command": "redis-server"}}}]}}}
|
||||
},
|
||||
"b2000004-0000-4000-8000-000000000004": {
|
||||
"id": "b2000004-0000-4000-8000-000000000004", "width": 100, "height": 46,
|
||||
"position": {"id": "", "x": 430, "y": 480},
|
||||
"itemresource": {"processing": {"license": "BSD-2-Clause", "open_source": true, "infrastructure": 0, "usage": {"scaling_model": "2"},
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "processing", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Nginx 1.25-alpine image. Serves Redis-cached API status JSON as an HTTP endpoint on port 80 for the OpenCloud operator dashboard.",
|
||||
"short_description": "Official Nginx 1.25-alpine — HTTP frontend and static result endpoint",
|
||||
"owners": [{"name": "nginx"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "cc330003-cc33-4003-8003-cccccccccccc", "name": "Nginx Gateway", "is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00Z"}, "updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 0, "not_in_catalog": false}},
|
||||
"instances": [{"resourceinstance": {"abstractobject": {"id": "cc330003-cc33-4003-8003-cccccccccccc", "name": "Nginx Gateway Paris", "is_draft": false, "access_mode": 0, "not_in_catalog": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"access": {"container": {"image": "nginx:1.25-alpine", "command": "nginx"}}}]}}}
|
||||
},
|
||||
"b2000005-0000-4000-8000-000000000005": {
|
||||
"id": "b2000005-0000-4000-8000-000000000005", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 210, "y": 340},
|
||||
"itemresource": {"storage": {"storage_type": 5, "acronym": "DC_myDC",
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "storage", "purchaseinfo": null,
|
||||
"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,
|
||||
"abstractobject": {"id": "ff660006-ff66-4006-8006-ffffffffffff", "name": "Peer2 MinIO Storage", "is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00Z"}, "updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "access_mode": 0, "not_in_catalog": false}},
|
||||
"instances": [{"resourceinstance": {"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "ff660006-ff66-4006-8006-ffffffffffff", "name": "Peer2 MinIO Storage Paris", "is_draft": false, "access_mode": 0, "not_in_catalog": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"source": "/mnt/minio", "security_level": "public", "size_type": 0, "local": true, "size": 1000, "encryption": true, "redundancy": "RAID6", "throughput": "r:500,w:400"}]}}}
|
||||
},
|
||||
"b2000006-0000-4000-8000-000000000006": {
|
||||
"id": "b2000006-0000-4000-8000-000000000006", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 640, "y": 380},
|
||||
"itemresource": {"compute": {"architecture": "x86", "infrastructure": 0,
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "compute", "purchaseinfo": null,
|
||||
"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,
|
||||
"abstractobject": {"id": "ee550005-ee55-4005-8005-eeeeeeeeeeee", "name": "Demo Peer2 Server", "is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00Z"}, "updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "access_mode": 0, "not_in_catalog": false}},
|
||||
"instances": [{"resourceinstance": {"abstractobject": {"id": "ee550005-ee55-4005-8005-eeeeeeeeeeee", "name": "Demo Peer2 Server Paris", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"security_level": "public", "power_sources": ["solaire"]}]}}}
|
||||
},
|
||||
"b2000007-0000-4000-8000-000000000007": {
|
||||
"id": "b2000007-0000-4000-8000-000000000007", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 640, "y": 190},
|
||||
"itemresource": {"compute": {"architecture": "x86", "infrastructure": 0,
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "compute", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/Mundi datacenter.png",
|
||||
"description": "IRT Saint-Exupéry GPU cluster, peer-1 owned. Executes the CURL ingestion step for the api-monitoring workflow.",
|
||||
"short_description": "IRT Saint-Exupéry GPU cluster — peer-1 owned",
|
||||
"owners": [{"name": "IRT Saint Exupery"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5", "name": "Mundi datacenter", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"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": "7b989e97-c3e7-49d2-a3a7-f959da4870b5", "name": "Mundi datacenter Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"security_level": "public", "power_sources": ["solaire", "charbon"]}]}}}
|
||||
}
|
||||
},
|
||||
"links": [
|
||||
{"env": [], "source": {"id": "b2000001-0000-4000-8000-000000000001", "x": 480, "y": 140}, "destination": {"id": "b2000002-0000-4000-8000-000000000002", "x": 480, "y": 200}, "style": {"color": 4280391411, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 0, "y": 1}, "end_arrow": {"id": "", "x": 0, "y": -1}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "b2000002-0000-4000-8000-000000000002", "x": 430, "y": 223}, "destination": {"id": "b2000005-0000-4000-8000-000000000005", "x": 310, "y": 390}, "style": {"color": 4294472049, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": -1, "y": 0}, "end_arrow": {"id": "", "x": 1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "b2000005-0000-4000-8000-000000000005", "x": 310, "y": 390}, "destination": {"id": "b2000003-0000-4000-8000-000000000003", "x": 430, "y": 363}, "style": {"color": 4294472049, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow": {"id": "", "x": -1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "b2000003-0000-4000-8000-000000000003", "x": 430, "y": 386}, "destination": {"id": "b2000004-0000-4000-8000-000000000004", "x": 430, "y": 480}, "style": {"color": 4278190080, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 0, "y": 1}, "end_arrow": {"id": "", "x": 0, "y": -1}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "b2000002-0000-4000-8000-000000000002", "x": 530, "y": 223}, "destination": {"id": "b2000007-0000-4000-8000-000000000007", "x": 640, "y": 240}, "style": {"color": 4294940672, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow": {"id": "", "x": -1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "b2000003-0000-4000-8000-000000000003", "x": 530, "y": 363}, "destination": {"id": "b2000006-0000-4000-8000-000000000006", "x": 640, "y": 430}, "style": {"color": 4294940672, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow": {"id": "", "x": -1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "b2000004-0000-4000-8000-000000000004", "x": 530, "y": 503}, "destination": {"id": "b2000006-0000-4000-8000-000000000006", "x": 640, "y": 480}, "style": {"color": 4294940672, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow": {"id": "", "x": -1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}}
|
||||
]
|
||||
},
|
||||
"shared": [],
|
||||
"exposes": {},
|
||||
"outputs": {
|
||||
"b2000001-0000-4000-8000-000000000001": [{"name": "SOURCE", "value": "http://localhost:9000/logs/api.log", "readonly": false, "optionnal": false}],
|
||||
"b2000005-0000-4000-8000-000000000005": [{"name": "SOURCE", "value": "/mnt/minio", "readonly": false, "optionnal": false}],
|
||||
"b2000002-0000-4000-8000-000000000002": [{"name": "LOGFILE", "value": "api.log", "readonly": false, "optionnal": false}],
|
||||
"b2000003-0000-4000-8000-000000000003": [{"name": "CACHE_KEY", "value": "api_status", "readonly": false, "optionnal": false}]
|
||||
},
|
||||
"env": {
|
||||
"b2000002-0000-4000-8000-000000000002": [{"name": "LOGFILE", "value": "api.log", "readonly": false, "optionnal": false}],
|
||||
"b2000003-0000-4000-8000-000000000003": [{"name": "CACHE_KEY", "value": "api_status", "readonly": false, "optionnal": false}, {"name": "CACHE_TTL", "value": "300", "readonly": false, "optionnal": false}]
|
||||
},
|
||||
"inputs": {
|
||||
"b2000002-0000-4000-8000-000000000002": [
|
||||
{"name": "WEB_API_LOGS_SOURCE", "value": "http://localhost:9000/logs/api.log", "origin": "b2000001-0000-4000-8000-000000000001", "readonly": true, "optionnal": false},
|
||||
{"name": "PEER2_MINIO_STORAGE_SOURCE", "value": "/mnt/minio", "origin": "b2000005-0000-4000-8000-000000000005", "readonly": true, "optionnal": false}
|
||||
],
|
||||
"b2000003-0000-4000-8000-000000000003": [
|
||||
{"name": "PEER2_MINIO_STORAGE_SOURCE", "value": "/mnt/minio", "origin": "b2000005-0000-4000-8000-000000000005", "readonly": true, "optionnal": false},
|
||||
{"name": "CURL_LOGFILE", "value": "api.log", "origin": "b2000002-0000-4000-8000-000000000002", "readonly": true, "optionnal": false}
|
||||
],
|
||||
"b2000004-0000-4000-8000-000000000004": [
|
||||
{"name": "PEER2_MINIO_STORAGE_SOURCE", "value": "/mnt/minio", "origin": "b2000005-0000-4000-8000-000000000005", "readonly": true, "optionnal": false},
|
||||
{"name": "REDIS_CACHE_KEY", "value": "api_status", "origin": "b2000003-0000-4000-8000-000000000003", "readonly": true, "optionnal": false}
|
||||
]
|
||||
},
|
||||
"args": {
|
||||
"b2000002-0000-4000-8000-000000000002": ["-SL", "$WEB_API_LOGS_SOURCE", "-o", "$PEER2_MINIO_STORAGE_SOURCE/$LOGFILE"],
|
||||
"b2000003-0000-4000-8000-000000000003": ["redis-server", "--save", "", "--appendonly", "no"],
|
||||
"b2000004-0000-4000-8000-000000000004": ["nginx", "-g", "daemon off;"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"_id": "33333333-3333-4333-8333-333333333333",
|
||||
"abstractobject": {
|
||||
"id": "33333333-3333-4333-8333-333333333333",
|
||||
"not_in_catalog": false,
|
||||
"name": "sensor-data-collector",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"user_updater_id": "admin",
|
||||
"access_mode": 0
|
||||
},
|
||||
"resourceset": {
|
||||
"storages": ["e726020a-b68e-4abc-ab36-c3640ea3f557"],
|
||||
"processings": ["2ce0323f-a85d-4b8b-a783-5280f48d634a", "aa110001-aa11-4001-8001-aaaaaaaaaaaa", "e518d7a4-426a-4900-94e5-300767b1bb31"],
|
||||
"computes": ["7b989e97-c3e7-49d2-a3a7-f959da4870b5", "ee550005-ee55-4005-8005-eeeeeeeeeeee"],
|
||||
"datas": ["gg770007-gg77-4007-8007-gggggggggggg"]
|
||||
},
|
||||
"schedule_active": false,
|
||||
"graph": {
|
||||
"partial": false,
|
||||
"zoom": 1,
|
||||
"items": {
|
||||
"c3000001-0000-4000-8000-000000000001": {
|
||||
"id": "c3000001-0000-4000-8000-000000000001", "width": 100, "height": 80,
|
||||
"position": {"id": "", "x": 430, "y": 60},
|
||||
"itemresource": {"data": {"type": "data", "quality": "medium", "open_data": false, "static": false, "size": 0.25,
|
||||
"example": "http://plates.openalpr.com/eu-001.jpg",
|
||||
"abstractinstanciatedresource": {"abstractresource": {"allowed_booking_modes": null, "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Rolling JPEG snapshots from a Toulouse ring-road traffic camera, 0.2 Hz, 1920×1080 px.",
|
||||
"short_description": "Toulouse ring-road live JPEG feed — 1920×1080, 0.2 Hz",
|
||||
"owners": [{"name": "IRT"}],
|
||||
"abstractobject": {"name": "Traffic Camera Feed", "is_draft": false, "creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": {"$date": "2021-09-30T14:00:00Z"}, "access_mode": 0,
|
||||
"id": "gg770007-gg77-4007-8007-gggggggggggg", "not_in_catalog": false,
|
||||
"update_date": {"$date": "2026-04-10T00:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106"}},
|
||||
"instances": [{"source": "http://plates.openalpr.com/eu-001.jpg",
|
||||
"resourceinstance": {"location": {"longitude": 1.4442, "latitude": 43.6047},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}],
|
||||
"abstractobject": {"is_draft": false, "access_mode": 0, "id": "gg770007-gg77-4007-8007-gggggggggggg", "not_in_catalog": false, "name": "Traffic Camera Feed Toulouse"},
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"origin": {"origin_type": 0, "origin_verified": false}}}]}}}
|
||||
},
|
||||
"c3000002-0000-4000-8000-000000000002": {
|
||||
"id": "c3000002-0000-4000-8000-000000000002", "width": 100, "height": 46,
|
||||
"position": {"id": "", "x": 430, "y": 200},
|
||||
"itemresource": {"processing": {"license": "MIT", "open_source": true, "infrastructure": 0, "usage": {"scaling_model": "2"},
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "processing", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Alpine 3.18 image. Downloads the camera frame via wget and saves it to IRT shared storage.",
|
||||
"short_description": "Official Alpine 3.18 — minimal shell environment for scripting sidecars",
|
||||
"owners": [{"name": "IRT"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "2ce0323f-a85d-4b8b-a783-5280f48d634a", "name": "alpine", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"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": "2ce0323f-a85d-4b8b-a783-5280f48d634a", "name": "alpine Toulouse", "is_draft": false, "access_mode": 0, "not_in_catalog": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"access": {"container": {"image": "alpine:3.18", "command": "sh"}}}]}}}
|
||||
},
|
||||
"c3000003-0000-4000-8000-000000000003": {
|
||||
"id": "c3000003-0000-4000-8000-000000000003", "width": 100, "height": 46,
|
||||
"position": {"id": "", "x": 430, "y": 340},
|
||||
"itemresource": {"processing": {"license": "PSF-2.0", "open_source": true, "infrastructure": 0, "usage": {"scaling_model": "2"},
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "processing", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Python 3.11-slim image. Reads the camera frame from IRT storage, runs vehicle detection with OpenCV, and writes vehicle_meta.json.",
|
||||
"short_description": "Official Python 3.11-slim — frame analysis and vehicle detection runtime",
|
||||
"owners": [{"name": "Python Software Foundation"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "aa110001-aa11-4001-8001-aaaaaaaaaaaa", "name": "Python Data Processor", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 0, "not_in_catalog": false}},
|
||||
"instances": [{"resourceinstance": {"abstractobject": {"id": "aa110001-aa11-4001-8001-aaaaaaaaaaaa", "name": "Python Data Processor Paris", "is_draft": false, "access_mode": 0, "not_in_catalog": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"access": {"container": {"image": "python:3.11-slim", "command": "python"}}}]}}}
|
||||
},
|
||||
"c3000004-0000-4000-8000-000000000004": {
|
||||
"id": "c3000004-0000-4000-8000-000000000004", "width": 100, "height": 46,
|
||||
"position": {"id": "", "x": 430, "y": 480},
|
||||
"itemresource": {"processing": {"license": "EPL-2.0", "open_source": true, "infrastructure": 0, "usage": {"scaling_model": "2"},
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "processing", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/mosquitto-logo.png",
|
||||
"description": "Official Eclipse Mosquitto 2.0.18 MQTT broker. Reads vehicle_meta.json from IRT storage and publishes it to sensors/camera/vehicle topic.",
|
||||
"short_description": "Official Eclipse Mosquitto 2.0 — MQTT v5/v3 broker with QoS and ACL support",
|
||||
"owners": [{"name": "IRT"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "e518d7a4-426a-4900-94e5-300767b1bb31", "name": "Mosquitto server", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"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": "e518d7a4-426a-4900-94e5-300767b1bb31", "name": "Mosquitto server Toulouse", "is_draft": false, "access_mode": 0, "not_in_catalog": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"access": {"container": {"image": "eclipse-mosquitto:2.0.18", "command": "mosquitto"}}}]}}}
|
||||
},
|
||||
"c3000005-0000-4000-8000-000000000005": {
|
||||
"id": "c3000005-0000-4000-8000-000000000005", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 210, "y": 340},
|
||||
"itemresource": {"storage": {"storage_type": 5, "acronym": "DC_myDC",
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "storage", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/IRT local file storage.png",
|
||||
"description": "IRT SSD RAID-5S scratch store, peer-1 owned. Shared intermediary for all sensor-collector pipeline stages.",
|
||||
"short_description": "IRT RAID-5S SSD scratch store — 500 GB, AES-256, S3-compatible (peer-1)",
|
||||
"owners": [{"name": "IRT"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "e726020a-b68e-4abc-ab36-c3640ea3f557", "name": "IRT local file storage", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"update_date": {"$date": "2021-09-30T14:00:00Z"}, "updater_id": "c0cece97-7730-4c2a-8c20-a30944564106", "access_mode": 0, "not_in_catalog": false}},
|
||||
"instances": [{"resourceinstance": {"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "e726020a-b68e-4abc-ab36-c3640ea3f557", "name": "IRT local file storage Toulouse", "is_draft": false, "access_mode": 0, "not_in_catalog": false},
|
||||
"origin": {"origin_type": 0, "origin_verified": false}, "location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"source": "/mnt/vol", "security_level": "public", "size_type": 0, "local": true, "size": 500, "encryption": true, "redundancy": "RAID5S", "throughput": "r:300,w:350"}]}}}
|
||||
},
|
||||
"c3000006-0000-4000-8000-000000000006": {
|
||||
"id": "c3000006-0000-4000-8000-000000000006", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 640, "y": 330},
|
||||
"itemresource": {"compute": {"architecture": "x86", "infrastructure": 0,
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "compute", "purchaseinfo": null,
|
||||
"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,
|
||||
"abstractobject": {"id": "ee550005-ee55-4005-8005-eeeeeeeeeeee", "name": "Demo Peer2 Server", "is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00Z"}, "updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31", "access_mode": 0, "not_in_catalog": false}},
|
||||
"instances": [{"resourceinstance": {"abstractobject": {"id": "ee550005-ee55-4005-8005-eeeeeeeeeeee", "name": "Demo Peer2 Server Paris", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"security_level": "public", "power_sources": ["solaire"]}]}}}
|
||||
},
|
||||
"c3000007-0000-4000-8000-000000000007": {
|
||||
"id": "c3000007-0000-4000-8000-000000000007", "width": 100, "height": 100,
|
||||
"position": {"id": "", "x": 640, "y": 190},
|
||||
"itemresource": {"compute": {"architecture": "x86", "infrastructure": 0,
|
||||
"abstractinstanciatedresource": {"abstractresource": {"type": "compute", "purchaseinfo": null,
|
||||
"logo": "http://localhost:8000/static/images/Mundi datacenter.png",
|
||||
"description": "IRT Saint-Exupéry GPU cluster, peer-1 owned. Executes the Alpine frame-download and Mosquitto publish steps.",
|
||||
"short_description": "IRT Saint-Exupéry GPU cluster — peer-1 owned",
|
||||
"owners": [{"name": "IRT Saint Exupery"}], "allowed_booking_modes": null,
|
||||
"abstractobject": {"id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5", "name": "Mundi datacenter", "is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106", "creation_date": {"$date": "2021-09-30T14:00:00Z"},
|
||||
"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": "7b989e97-c3e7-49d2-a3a7-f959da4870b5", "name": "Mundi datacenter Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]},
|
||||
"security_level": "public", "power_sources": ["solaire", "charbon"]}]}}}
|
||||
}
|
||||
},
|
||||
"links": [
|
||||
{"env": [], "source": {"id": "c3000001-0000-4000-8000-000000000001", "x": 480, "y": 140}, "destination": {"id": "c3000002-0000-4000-8000-000000000002", "x": 480, "y": 200}, "style": {"color": 4280391411, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 0, "y": 1}, "end_arrow": {"id": "", "x": 0, "y": -1}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "c3000002-0000-4000-8000-000000000002", "x": 430, "y": 223}, "destination": {"id": "c3000005-0000-4000-8000-000000000005", "x": 310, "y": 390}, "style": {"color": 4294472049, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": -1, "y": 0}, "end_arrow": {"id": "", "x": 1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "c3000005-0000-4000-8000-000000000005", "x": 310, "y": 390}, "destination": {"id": "c3000003-0000-4000-8000-000000000003", "x": 430, "y": 363}, "style": {"color": 4294472049, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow": {"id": "", "x": -1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "c3000003-0000-4000-8000-000000000003", "x": 430, "y": 386}, "destination": {"id": "c3000005-0000-4000-8000-000000000005", "x": 310, "y": 440}, "style": {"color": 4294472049, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": -1, "y": 0}, "end_arrow": {"id": "", "x": 1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "c3000005-0000-4000-8000-000000000005", "x": 310, "y": 440}, "destination": {"id": "c3000004-0000-4000-8000-000000000004", "x": 430, "y": 503}, "style": {"color": 4294472049, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow": {"id": "", "x": -1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "c3000002-0000-4000-8000-000000000002", "x": 530, "y": 223}, "destination": {"id": "c3000007-0000-4000-8000-000000000007", "x": 640, "y": 240}, "style": {"color": 4294940672, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow": {"id": "", "x": -1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "c3000003-0000-4000-8000-000000000003", "x": 530, "y": 363}, "destination": {"id": "c3000006-0000-4000-8000-000000000006", "x": 640, "y": 380}, "style": {"color": 4294940672, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow": {"id": "", "x": -1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}},
|
||||
{"env": [], "source": {"id": "c3000004-0000-4000-8000-000000000004", "x": 530, "y": 503}, "destination": {"id": "c3000007-0000-4000-8000-000000000007", "x": 640, "y": 290}, "style": {"color": 4294940672, "stroke": 1.7, "tension": 1, "head_radius": 6, "dash_width": 2, "dash_space": 2, "start_arrow": {"id": "", "x": 1, "y": 0}, "end_arrow": {"id": "", "x": -1, "y": 0}, "arrow_style": 0, "arrow_direction": 0, "start_arrow_width": 10, "end_arrow_width": 10}}
|
||||
]
|
||||
},
|
||||
"shared": [],
|
||||
"exposes": {},
|
||||
"outputs": {
|
||||
"c3000001-0000-4000-8000-000000000001": [{"name": "SOURCE", "value": "http://plates.openalpr.com/eu-001.jpg", "readonly": false, "optionnal": false}],
|
||||
"c3000005-0000-4000-8000-000000000005": [{"name": "SOURCE", "value": "/mnt/vol", "readonly": false, "optionnal": false}],
|
||||
"c3000002-0000-4000-8000-000000000002": [{"name": "FRAME_FILENAME", "value": "frame.jpg", "readonly": false, "optionnal": false}],
|
||||
"c3000003-0000-4000-8000-000000000003": [{"name": "ANALYSIS_FILENAME", "value": "vehicle_meta.json", "readonly": false, "optionnal": false}]
|
||||
},
|
||||
"env": {
|
||||
"c3000002-0000-4000-8000-000000000002": [{"name": "FRAME_FILENAME", "value": "frame.jpg", "readonly": false, "optionnal": false}],
|
||||
"c3000003-0000-4000-8000-000000000003": [{"name": "ANALYSIS_FILENAME", "value": "vehicle_meta.json", "readonly": false, "optionnal": false}]
|
||||
},
|
||||
"inputs": {
|
||||
"c3000002-0000-4000-8000-000000000002": [
|
||||
{"name": "TRAFFIC_CAMERA_FEED_SOURCE", "value": "http://plates.openalpr.com/eu-001.jpg", "origin": "c3000001-0000-4000-8000-000000000001", "readonly": true, "optionnal": false},
|
||||
{"name": "IRT_LOCAL_FILE_STORAGE_SOURCE", "value": "/mnt/vol", "origin": "c3000005-0000-4000-8000-000000000005", "readonly": true, "optionnal": false}
|
||||
],
|
||||
"c3000003-0000-4000-8000-000000000003": [
|
||||
{"name": "IRT_LOCAL_FILE_STORAGE_SOURCE", "value": "/mnt/vol", "origin": "c3000005-0000-4000-8000-000000000005", "readonly": true, "optionnal": false},
|
||||
{"name": "ALPINE_FRAME_FILENAME", "value": "frame.jpg", "origin": "c3000002-0000-4000-8000-000000000002", "readonly": true, "optionnal": false}
|
||||
],
|
||||
"c3000004-0000-4000-8000-000000000004": [
|
||||
{"name": "IRT_LOCAL_FILE_STORAGE_SOURCE", "value": "/mnt/vol", "origin": "c3000005-0000-4000-8000-000000000005", "readonly": true, "optionnal": false},
|
||||
{"name": "PYTHON_ANALYSIS_FILENAME", "value": "vehicle_meta.json", "origin": "c3000003-0000-4000-8000-000000000003", "readonly": true, "optionnal": false}
|
||||
]
|
||||
},
|
||||
"args": {
|
||||
"c3000002-0000-4000-8000-000000000002": ["wget", "-O", "$IRT_LOCAL_FILE_STORAGE_SOURCE/$FRAME_FILENAME", "$TRAFFIC_CAMERA_FEED_SOURCE"],
|
||||
"c3000003-0000-4000-8000-000000000003": ["analyze_frame.py", "--input", "$IRT_LOCAL_FILE_STORAGE_SOURCE/$ALPINE_FRAME_FILENAME", "--output", "$IRT_LOCAL_FILE_STORAGE_SOURCE/$ANALYSIS_FILENAME"],
|
||||
"c3000004-0000-4000-8000-000000000004": ["-c", "/mosquitto/config/mosquitto.conf"]
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -1,10 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Load data into node 2's MongoDB (container: mongo2, port 27018)
|
||||
MONGO_CONTAINER=${1:-mongo2}
|
||||
|
||||
docker cp ./datas $MONGO_CONTAINER:.
|
||||
|
||||
for i in $(ls ./datas); do
|
||||
echo "ADD file $i in collection ${i/.json/}"
|
||||
docker exec -it $MONGO_CONTAINER sh -c "mongoimport --jsonArray --db DC_myDC --collection ${i/.json/} --file ./datas/$i"
|
||||
done
|
||||
@@ -1,158 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "ee550005-ee55-4005-8005-eeeeeeeeeeee",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "compute",
|
||||
"abstractobject": {
|
||||
"id": "ee550005-ee55-4005-8005-eeeeeeeeeeee",
|
||||
"name": "Demo Peer2 Server",
|
||||
"is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}]
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "ee550005-ee55-4005-8005-eeeeeeeeeeee", "name": "Demo Peer2 Server Paris", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
},
|
||||
"security_level": "public",
|
||||
"annual_co2_emissions": 500,
|
||||
"power_sources": ["solaire"],
|
||||
"cpus": {"AMD EPYC 9654": {"model": "AMD EPYC 9654", "frequency": 2.4, "cores": 96, "architecture": "x86"}},
|
||||
"gpus": {"RTX 4090": {"cores": {"cuda": 16384, "tensor": 512}, "model": "RTX 4090", "memory": 24000}},
|
||||
"nodes": [
|
||||
{"name": "default", "quantity": 4, "ram": {"size": 65536}, "cpus": {"AMD EPYC 9654": 2}, "gpus": {"RTX 4090": 2}}
|
||||
]
|
||||
}]
|
||||
},
|
||||
"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": {
|
||||
"abstractresource": {
|
||||
"type": "compute",
|
||||
"abstractobject": {
|
||||
"id": "0bb77206-371a-428e-8ae3-ff11575071e2",
|
||||
"name": "VM Target 2",
|
||||
"is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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. Handles CPU-bound steps 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"}]
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "0bb77206-371a-428e-8ae3-ff11575071e2", "name": "VM Proxmox Pierre 2", "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": 0
|
||||
},
|
||||
{
|
||||
"_id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "compute",
|
||||
"abstractobject": {
|
||||
"id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5",
|
||||
"name": "Mundi datacenter",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/Mundi datacenter.png",
|
||||
"description": "Toulouse-based GPU cluster operated by IRT Saint-Exupéry (opencloud-demo-1 / peer-1) under the Mundi Opencloud programme. Node spec: 1× Intel Core i7-14700KF (3.6 GHz, 20 cores), 16 GB DDR5-6000, 8× NVIDIA RTX 3090 FE (24 GB GDDR6X, 10 496 CUDA cores each). Shared with peer-2 for cross-peer workloads that benefit from GPU acceleration or proximity to peer-1 storage (/mnt/vol). Scheduling from peer-2 goes through the Admiralty federation layer; peer-2 has no direct SSH access. Power mix: ~60% solar / ~40% coal. Annual CO₂: ~1 000 kg eqCO₂.",
|
||||
"short_description": "IRT Saint-Exupéry GPU cluster — shared with peer-2 via federation (peer-1 owned)",
|
||||
"owners": [{"name": "IRT Saint Exupery"}]
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "7b989e97-c3e7-49d2-a3a7-f959da4870b5", "name": "Mundi datacenter Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
},
|
||||
"security_level": "public",
|
||||
"annual_co2_emissions": 1000,
|
||||
"power_sources": ["solaire", "charbon"],
|
||||
"cpus": {"Intel Core i7-14700KF": {"model": "Intel Core i7-14700KF", "frequency": 3.6, "cores": 20, "architecture": "x86"}},
|
||||
"gpus": {"RTX 3090 FE": {"cores": {"cuda": 10496, "tensor": 328}, "model": "RTX 3090 FE", "memory": 24000}},
|
||||
"nodes": [{"name": "default", "quantity": 1, "ram": {"size": 16384}, "cpus": {"Intel Core i7-14700KF": 1}, "gpus": {"RTX 3090 FE": 8}}]
|
||||
}]
|
||||
},
|
||||
"architecture": "x86",
|
||||
"infrastructure": 0
|
||||
}
|
||||
]
|
||||
@@ -1,118 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "hh880008-hh88-4008-8008-hhhhhhhhhhhh",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "data",
|
||||
"abstractobject": {
|
||||
"id": "hh880008-hh88-4008-8008-hhhhhhhhhhhh",
|
||||
"name": "Web API Logs",
|
||||
"is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Rolling HTTP access logs collected from the OpenCloud API gateway. Each line is a JSON record with timestamp, method, path, status code and latency. Used by monitoring workflows to detect anomalies.",
|
||||
"short_description": "OpenCloud API gateway HTTP access logs",
|
||||
"owners": [{"name": "opencloud-demo-2"}],
|
||||
"source": "http://localhost:9000/logs/api.log"
|
||||
},
|
||||
"instances": [{
|
||||
"source": "http://localhost:9000/logs/api.log",
|
||||
"resourceinstance": {
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "hh880008-hh88-4008-8008-hhhhhhhhhhhh", "name": "Web API Logs Paris", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"quality": "high",
|
||||
"open_data": false,
|
||||
"static": false,
|
||||
"size": 1.2,
|
||||
"example": "{\"ts\":\"2026-04-10T08:00:00Z\",\"method\":\"GET\",\"path\":\"/workflow\",\"status\":200,\"latency_ms\":45}"
|
||||
},
|
||||
{
|
||||
"_id": "gg770007-gg77-4007-8007-gggggggggggg",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "data",
|
||||
"abstractobject": {
|
||||
"id": "gg770007-gg77-4007-8007-gggggggggggg",
|
||||
"name": "Traffic Camera Feed",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Live JPEG snapshot from a road-side traffic surveillance camera. Updated every 5 seconds. Shared by peer-1 with peer-2.",
|
||||
"short_description": "Road traffic camera snapshot feed (peer-1)",
|
||||
"owners": [{"name": "IRT"}],
|
||||
"source": "http://plates.openalpr.com/eu-001.jpg"
|
||||
},
|
||||
"instances": [{
|
||||
"source": "http://plates.openalpr.com/eu-001.jpg",
|
||||
"resourceinstance": {
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "gg770007-gg77-4007-8007-gggggggggggg", "name": "Traffic Camera Feed Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"quality": "medium",
|
||||
"open_data": false,
|
||||
"static": false,
|
||||
"size": 0.25,
|
||||
"example": "http://plates.openalpr.com/eu-001.jpg"
|
||||
},
|
||||
{
|
||||
"_id": "d573dc63-4de0-4e29-8a4e-c15cbb3aed06",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "data",
|
||||
"abstractobject": {
|
||||
"id": "d573dc63-4de0-4e29-8a4e-c15cbb3aed06",
|
||||
"name": "Red Car",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}]
|
||||
},
|
||||
"instances": [{
|
||||
"source": "http://plates.openalpr.com/h786poj.jpg",
|
||||
"resourceinstance": {
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "d573dc63-4de0-4e29-8a4e-c15cbb3aed06", "name": "Red Car", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"quality": "low",
|
||||
"open_data": false,
|
||||
"static": true,
|
||||
"size": 0.59,
|
||||
"example": "http://plates.openalpr.com/h786poj.jpg"
|
||||
}
|
||||
]
|
||||
@@ -1,68 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"failed_execution": null,
|
||||
"api_url": "http://localhost:9000",
|
||||
"nats_address": "nats://nats:4222",
|
||||
"stream_address": "/ip4/172.40.0.4/tcp/4004/p2p/12D3KooWSzQtBux5GkpdqK8MA9Rmo5W1vTVZhWCbut2k99Ge45GN",
|
||||
"wallet_address": "my-wallet",
|
||||
"public_key": "MCowBQYDK2VwAyEA/ymOIb0sJ0qCWrf3mKz7ACCvsMXLog/EK533JfNXZTM=",
|
||||
"peer_id": "12D3KooWSzQtBux5GkpdqK8MA9Rmo5W1vTVZhWCbut2k99Ge45GN",
|
||||
"relation": 1,
|
||||
"abstractobject": {
|
||||
"id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"name": "opencloud-demo-2",
|
||||
"is_draft": false,
|
||||
"not_in_catalog": false,
|
||||
"creation_date": {"$date": "2025-03-27T09:13:13.230Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"trust_score": 0,
|
||||
"verify": false
|
||||
},
|
||||
{
|
||||
"_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"failed_execution": null,
|
||||
"api_url": "http://localhost:8000",
|
||||
"nats_address": "nats://nats:4222",
|
||||
"stream_address": "/ip4/172.40.0.3/tcp/4003/p2p/12D3KooWBh9kZrekBAE5G33q4jCLNRAzygem3gP1mMdK8mhoCTaw",
|
||||
"wallet_address": "my-wallet",
|
||||
"public_key": "MCowBQYDK2VwAyEAG95Ettl3jTi41HM8le1A9WDmOEq0ANEqpLF7zTZrfXA=",
|
||||
"peer_id": "12D3KooWBh9kZrekBAE5G33q4jCLNRAzygem3gP1mMdK8mhoCTaw",
|
||||
"relation": 2,
|
||||
"abstractobject": {
|
||||
"id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"name": "opencloud-demo-1",
|
||||
"is_draft": false,
|
||||
"not_in_catalog": false,
|
||||
"creation_date": {"$date": "2025-03-27T09:13:13.230Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"trust_score": 0,
|
||||
"verify": false
|
||||
},
|
||||
{
|
||||
"_id": "b97318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"failed_execution": null,
|
||||
"api_url": "http://localhost:10000",
|
||||
"nats_address": "nats://nats:4222",
|
||||
"stream_address": "/ip4/172.40.0.45/tcp/4005/p2p/12D4KooWSzQtBux5GkpdqK8MA9Rmo5W1vTVZhWCbut2k99Ge45GN",
|
||||
"wallet_address": "my-wallet",
|
||||
"public_key": "MCowBQYDK2VwAyEA/ymOIb0sJ0qCWrf3mKz7ACCvsMXLog/EK533JfNXZTM=",
|
||||
"peer_id": "12D4KooWSzQtBux5GkpdqK8MA9Rmo5W1vTVZhWCbut2k99Ge45GN",
|
||||
"relation": 0,
|
||||
"abstractobject": {
|
||||
"id": "b97318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"name": "opencloud-demo-3",
|
||||
"is_draft": false,
|
||||
"not_in_catalog": false,
|
||||
"creation_date": {"$date": "2025-03-27T09:13:13.230Z"},
|
||||
"update_date": {"$date": "2026-04-10T00:00:00.000Z"},
|
||||
"access_mode": 0
|
||||
},
|
||||
"trust_score": 0,
|
||||
"verify": false
|
||||
}
|
||||
]
|
||||
@@ -1,218 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "0d565c87-50ae-4a73-843d-f8b2d4047772",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "0d565c87-50ae-4a73-843d-f8b2d4047772",
|
||||
"name": "CURL",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"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, 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"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "curlimages/curl:8.5.0", "command": "curl"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "0d565c87-50ae-4a73-843d-f8b2d4047772", "name": "CURL Paris", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "MIT",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
},
|
||||
{
|
||||
"_id": "2ce0323f-a85d-4b8b-a783-5280f48d634a",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "2ce0323f-a85d-4b8b-a783-5280f48d634a",
|
||||
"name": "alpine",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Alpine Linux 3.18 Docker image (5.3 MB compressed). musl-libc + BusyBox base exposing: wget, curl, awk, sed, grep, tar, gzip, openssl, jq (via apk). Zero extraneous packages; deterministic sha256 digest per tag. Used in workflows as a lightweight sidecar for tasks that do not justify a heavier runtime: downloading camera frames via wget, renaming and archiving intermediary files, running one-shot POSIX shell scripts, performing pre-run health-check assertions, or post-processing step cleanup. Starts in under 80 ms; memory footprint < 4 MB at idle.",
|
||||
"short_description": "Official Alpine 3.18 — minimal shell environment for scripting sidecars",
|
||||
"owners": [{"name": "IRT"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "alpine:3.18", "command": "sh"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "2ce0323f-a85d-4b8b-a783-5280f48d634a", "name": "alpine Paris", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "MIT",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
},
|
||||
{
|
||||
"_id": "e518d7a4-426a-4900-94e5-300767b1bb31",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "e518d7a4-426a-4900-94e5-300767b1bb31",
|
||||
"name": "Mosquitto server",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/mosquitto-logo.png",
|
||||
"description": "Official Eclipse Mosquitto 2.0.18 Docker image — reference MQTT broker from the Eclipse Foundation. Implements MQTT v5.0, v3.1.1 and v3.1 over TCP (port 1883), WebSocket (port 9001), and optional TLS (port 8883) with X.509 mutual auth. Supports password-file authentication, ACL-based topic access control, QoS 0/1/2 delivery guarantees, persistent sessions, retained messages, shared subscriptions (MQTT 5) and bridge mode for multi-broker topologies. Used as the terminal publish step in the sensor-data-collector workflow: reads vehicle-metadata JSON produced by the upstream Python analysis stage from shared storage and fans it out to subscribed edge consumers on the sensors/camera/vehicle topic.",
|
||||
"short_description": "Official Eclipse Mosquitto 2.0 — MQTT v5/v3 broker with QoS and ACL support",
|
||||
"owners": [{"name": "IRT"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "eclipse-mosquitto:2.0.18", "command": "mosquitto"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "e518d7a4-426a-4900-94e5-300767b1bb31", "name": "Mosquitto server Paris", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "EPL-2.0",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
},
|
||||
{
|
||||
"_id": "aa110001-aa11-4001-8001-aaaaaaaaaaaa",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "aa110001-aa11-4001-8001-aaaaaaaaaaaa",
|
||||
"name": "Python Data Processor",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Python 3.11-slim Docker image (Debian Bookworm base, 45 MB compressed). Provides CPython 3.11 runtime with pip; scientific stack installable at launch: NumPy 1.26, Pillow 10, OpenCV-headless 4.9, scikit-learn 1.4, pandas 2.2, requests 2.31. Shared by peer-1 (opencloud-demo-1). In the sensor-data-collector workflow: receives a camera frame path via ALPINE_FRAME_FILE and storage mount via IRT_LOCAL_FILE_STORAGE_SOURCE, runs vehicle object detection with OpenCV contour detection + background subtraction, extracts bounding boxes and plate candidates, serialises results as vehicle_meta.json to shared storage for the downstream Mosquitto publish step.",
|
||||
"short_description": "Official Python 3.11-slim — frame analysis and sensor data processing runtime (shared by peer-1)",
|
||||
"owners": [{"name": "Python Software Foundation"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "python:3.11-slim", "command": "python"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "aa110001-aa11-4001-8001-aaaaaaaaaaaa", "name": "Python Data Processor Paris", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "PSF-2.0",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
},
|
||||
{
|
||||
"_id": "cc330003-cc33-4003-8003-cccccccccccc",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "cc330003-cc33-4003-8003-cccccccccccc",
|
||||
"name": "Nginx Gateway",
|
||||
"is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Nginx 1.25-alpine Docker image (9 MB compressed) — high-performance asynchronous HTTP/1.1 and HTTP/2 server and reverse proxy. Event-driven architecture handles 50 000+ concurrent connections per worker process. In the api-monitoring-stack workflow it acts as the terminal presentation layer: reads Redis-cached API status JSON objects from MinIO storage and serves them on port 80 as a structured HTTP endpoint consumed by the OpenCloud operator dashboard. Configuration injected via envsubst at container startup. Features: gzip compression (level 6), custom JSON access logging, CORS headers, configurable cache-control directives, graceful hot-reload via SIGHUP without dropping connections. Owned by opencloud-demo-2.",
|
||||
"short_description": "Official Nginx 1.25-alpine — HTTP frontend and static result endpoint (peer-2)",
|
||||
"owners": [{"name": "nginx"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "nginx:1.25-alpine", "command": "nginx"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "cc330003-cc33-4003-8003-cccccccccccc", "name": "Nginx Gateway Paris", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "BSD-2-Clause",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
},
|
||||
{
|
||||
"_id": "dd440004-dd44-4004-8004-dddddddddddd",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "processing",
|
||||
"abstractobject": {
|
||||
"id": "dd440004-dd44-4004-8004-dddddddddddd",
|
||||
"name": "Redis Cache",
|
||||
"is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/alpine-logo.png",
|
||||
"description": "Official Redis 7-alpine Docker image (14 MB compressed) — in-memory key-value store with sub-millisecond read latency. Supports strings, hashes, lists, sorted sets and streams natively. In the api-monitoring-stack workflow, ingests structured API-status objects (status-code distribution per endpoint, p50/p95 latency percentiles) produced by the CURL fetch step, stores them under a configurable CACHE_KEY with a 300-second TTL (default) to decouple the slow log-fetching stage from the fast Nginx serving stage. Configured in ephemeral mode (--save '' --appendonly no) to eliminate disk I/O and maximise throughput. Pub/Sub channel api_status_updates can be subscribed to by external consumers for real-time event streaming. Owned by opencloud-demo-2.",
|
||||
"short_description": "Official Redis 7-alpine — TTL-based API status cache with pub/sub support (peer-2)",
|
||||
"owners": [{"name": "Redis Ltd"}]
|
||||
},
|
||||
"instances": [{
|
||||
"access": {"container": {"image": "redis:7-alpine", "command": "redis-server"}},
|
||||
"resourceinstance": {
|
||||
"abstractobject": {"id": "dd440004-dd44-4004-8004-dddddddddddd", "name": "Redis Cache Paris", "is_draft": false, "access_mode": 0},
|
||||
"origin": {"origin_type": 0, "origin_verified": false},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
}
|
||||
}]
|
||||
},
|
||||
"license": "BSD-3-Clause",
|
||||
"infrastructure": 0,
|
||||
"usage": {"scaling_model": "2"},
|
||||
"open_source": true
|
||||
}
|
||||
]
|
||||
@@ -1,84 +0,0 @@
|
||||
[
|
||||
{
|
||||
"_id": "ff660006-ff66-4006-8006-ffffffffffff",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "storage",
|
||||
"abstractobject": {
|
||||
"id": "ff660006-ff66-4006-8006-ffffffffffff",
|
||||
"name": "Peer2 MinIO Storage",
|
||||
"is_draft": false,
|
||||
"creator_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2026-04-10T00:00:00.000Z",
|
||||
"updater_id": "b87318c9-f5f8-44bb-8d48-913f4ddd6c31",
|
||||
"access_mode": 1
|
||||
},
|
||||
"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"}]
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "ff660006-ff66-4006-8006-ffffffffffff", "name": "Peer2 MinIO Storage Paris", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 48.8566, "longitude": 2.3522},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
},
|
||||
"source": "/mnt/minio",
|
||||
"local": true,
|
||||
"security_level": "public",
|
||||
"size": 1000,
|
||||
"size_type": 0,
|
||||
"encryption": true,
|
||||
"redundancy": "RAID6",
|
||||
"throughput": "r:500,w:400"
|
||||
}]
|
||||
},
|
||||
"storage_type": 5,
|
||||
"acronym": "DC_myDC"
|
||||
},
|
||||
{
|
||||
"_id": "e726020a-b68e-4abc-ab36-c3640ea3f557",
|
||||
"abstractinstanciatedresource": {
|
||||
"abstractresource": {
|
||||
"type": "storage",
|
||||
"abstractobject": {
|
||||
"id": "e726020a-b68e-4abc-ab36-c3640ea3f557",
|
||||
"name": "IRT local file storage",
|
||||
"is_draft": false,
|
||||
"creator_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date": "2021-09-30T14:00:00.000Z",
|
||||
"update_date": "2021-09-30T14:00:00.000Z",
|
||||
"updater_id": "c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode": 1
|
||||
},
|
||||
"logo": "http://localhost:8000/static/images/IRT local file storage.png",
|
||||
"description": "S3-compatible POSIX file storage deployed on peer-1 infrastructure (IRT Saint-Exupéry, Toulouse). Mount point: /mnt/vol. Capacity: 500 GB, SSD RAID-5S array (5 drives + 1 hot spare), sustained throughput read 300 MB/s / write 350 MB/s, IOPS peak 120 k random 4K. AES-256 encryption at rest; TLS 1.3 in transit. Exposed via MinIO S3 gateway: any peer holding a valid default-namespace credential can GET/PUT objects. Acts as the primary shared scratch space across all peer-1 workflows: CURL download outputs, ImageMagick processed intermediates, Python analysis results and ALPR JSON payloads all land here between pipeline stages. Auto-purge policy: objects older than 7 days under the /tmp prefix are deleted by a nightly cron.",
|
||||
"short_description": "IRT RAID-5S SSD scratch store — 500 GB, 300/350 MB/s, AES-256, S3-compatible (peer-1)",
|
||||
"owners": [{"name": "IRT"}]
|
||||
},
|
||||
"instances": [{
|
||||
"resourceinstance": {
|
||||
"env": [{"attr": "source", "readonly": true}],
|
||||
"abstractobject": {"id": "e726020a-b68e-4abc-ab36-c3640ea3f557", "name": "IRT local file storage Toulouse", "is_draft": false, "access_mode": 0},
|
||||
"location": {"latitude": 43.6047, "longitude": 1.4442},
|
||||
"country": 250,
|
||||
"partnerships": [{"namespace": "default", "peer_groups": {"*": ["*"]}}]
|
||||
},
|
||||
"source": "/mnt/vol",
|
||||
"local": false,
|
||||
"security_level": "public",
|
||||
"size": 500,
|
||||
"size_type": 0,
|
||||
"encryption": true,
|
||||
"redundancy": "RAID5S",
|
||||
"throughput": "r:300,w:350"
|
||||
}]
|
||||
},
|
||||
"storage_type": 5,
|
||||
"acronym": "DC_myDC"
|
||||
}
|
||||
]
|
||||
@@ -1,185 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
echo "🧹 Uninstalling existing K3s (if any)..."
|
||||
|
||||
if [ -f /usr/local/bin/k3s-uninstall.sh ]; then
|
||||
sudo /usr/local/bin/k3s-uninstall.sh
|
||||
fi
|
||||
|
||||
if [ -f /usr/local/bin/k3s-agent-uninstall.sh ]; then
|
||||
sudo /usr/local/bin/k3s-agent-uninstall.sh
|
||||
fi
|
||||
|
||||
echo "🧼 Cleaning leftovers..."
|
||||
sudo rm -rf /etc/rancher /var/lib/rancher /var/lib/kubelet /etc/cni /opt/cni
|
||||
sudo ip link delete cni0 2>/dev/null || true
|
||||
sudo ip link delete flannel.1 2>/dev/null || true
|
||||
|
||||
INSTALL_SCRIPT="/tmp/install_k3s.sh"
|
||||
echo "🚀 Installing K3s..."
|
||||
|
||||
if [ ! -f "$INSTALL_SCRIPT" ]; then
|
||||
echo "Téléchargement du script k3s..."
|
||||
curl -sfL https://get.k3s.io -o "$INSTALL_SCRIPT"
|
||||
chmod +x "$INSTALL_SCRIPT"
|
||||
fi
|
||||
|
||||
echo "Installation de k3s..."
|
||||
sh "$INSTALL_SCRIPT"
|
||||
|
||||
echo "📄 Setting kubeconfig..."
|
||||
mkdir -p ~/.kube
|
||||
if [ -f ~/.kube/config ]; then
|
||||
cp ~/.kube/config ~/.kube/old_config || true
|
||||
fi
|
||||
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
|
||||
sudo chown $(whoami):$(whoami) ~/.kube/config && chmod 644 ~/.kube/config
|
||||
export KUBECONFIG=~/.kube/config
|
||||
|
||||
echo "⏳ Waiting for CoreDNS deployment to exist..."
|
||||
|
||||
timeout 120 bash -c '
|
||||
until kubectl get deployment coredns -n kube-system >/dev/null 2>&1; do
|
||||
sleep 2
|
||||
done
|
||||
'
|
||||
|
||||
echo "⏳ Waiting for CoreDNS to be available..."
|
||||
kubectl wait --for=condition=Available deployment/coredns -n kube-system --timeout=120s
|
||||
|
||||
echo "🔄 Restarting CoreDNS..."
|
||||
kubectl -n kube-system rollout restart deployment coredns
|
||||
|
||||
echo "📦 Installing Helm..."
|
||||
if ! command -v helm &>/dev/null; then
|
||||
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
|
||||
fi
|
||||
|
||||
echo "➕ Adding Helm repos..."
|
||||
helm repo add argo https://argoproj.github.io/argo-helm || true
|
||||
helm repo add admiralty https://charts.admiralty.io || true
|
||||
helm repo update
|
||||
|
||||
echo "🧩 Installing Argo..."
|
||||
kubectl create namespace argo || true
|
||||
|
||||
echo "🧩 Installing Argo Workflows..."
|
||||
helm upgrade --install argo-workflows argo/argo-workflows \
|
||||
-n argo \
|
||||
--set server.authMode=server \
|
||||
--wait
|
||||
|
||||
echo "🧩 Installing Admiralty..."
|
||||
|
||||
helm uninstall cert-manager -n cert-manager || true
|
||||
kubectl delete namespace cert-manager --grace-period=0 --force || true
|
||||
|
||||
helm install \
|
||||
cert-manager oci://quay.io/jetstack/charts/cert-manager \
|
||||
--version v1.20.2 \
|
||||
--namespace cert-manager \
|
||||
--create-namespace \
|
||||
--set crds.enabled=true
|
||||
|
||||
kubectl wait --for=condition=Established crd --all --timeout=60s
|
||||
|
||||
helm install admiralty oci://public.ecr.aws/admiralty/admiralty \
|
||||
--namespace admiralty --create-namespace \
|
||||
--version 0.17.0 \
|
||||
--wait
|
||||
|
||||
echo "🌐 Configuring /etc/hosts..."
|
||||
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
|
||||
else
|
||||
echo "$CLUSTER_IP kubernetes.default.svc.cluster.local" | sudo tee -a /etc/hosts
|
||||
fi
|
||||
|
||||
ca=$(kubectl config view --raw --minify -o jsonpath='{.clusters[0].cluster.certificate-authority-data}')
|
||||
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"
|
||||
"mongo-express"
|
||||
"nats"
|
||||
"loki"
|
||||
"hydra"
|
||||
"ldap"
|
||||
"keto"
|
||||
"traefik"
|
||||
"oc-auth"
|
||||
"oc-catalog"
|
||||
"oc-datacenter"
|
||||
"oc-peer"
|
||||
"oc-shared"
|
||||
"oc-scheduler"
|
||||
"oc-schedulerd"
|
||||
"oc-workflow"
|
||||
"oc-workspace"
|
||||
"oc-discovery_1"
|
||||
"oc-discovery_2"
|
||||
"oc-discovery_3"
|
||||
"oc-front"
|
||||
)
|
||||
|
||||
echo "🧩 Installing Node 1..."
|
||||
|
||||
docker network create oc || true
|
||||
|
||||
for i in "${REPOS[@]}"
|
||||
do
|
||||
docker kill $i || true
|
||||
docker rm $i || true
|
||||
done
|
||||
|
||||
docker compose ./docker-compose.dev.yml pull
|
||||
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
|
||||
echo "🧩 Installing Node 2..."
|
||||
|
||||
docker network create oc2 || true
|
||||
|
||||
REPOS2=(
|
||||
"mongo2"
|
||||
"mongo-express2"
|
||||
"nats2"
|
||||
"loki2"
|
||||
"hydra2"
|
||||
"ldap2"
|
||||
"keto2"
|
||||
"traefik2"
|
||||
"oc-auth2"
|
||||
"oc-catalog2"
|
||||
"oc-datacenter2"
|
||||
"oc-peer2"
|
||||
"oc-shared2"
|
||||
"oc-scheduler2"
|
||||
"oc-schedulerd2"
|
||||
"oc-workflow2"
|
||||
"oc-workspace2"
|
||||
"oc-discovery_4"
|
||||
|
||||
)
|
||||
|
||||
for i in "${REPOS2[@]}"
|
||||
do
|
||||
docker kill "$i" || true
|
||||
docker rm "$i" || true
|
||||
done
|
||||
|
||||
docker compose ./docker-compose.dev2.yml pull
|
||||
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 ..
|
||||
|
||||
echo "✅ DONE"
|
||||
@@ -1,415 +0,0 @@
|
||||
version: '3.9'
|
||||
|
||||
services:
|
||||
mongo:
|
||||
image: 'mongo:latest'
|
||||
networks:
|
||||
- oc
|
||||
ports:
|
||||
- 27017:27017
|
||||
container_name: mongo
|
||||
volumes:
|
||||
- oc-data:/data/db
|
||||
- oc-data:/data/configdb
|
||||
|
||||
mongo-express:
|
||||
image: "mongo-express:latest"
|
||||
restart: always
|
||||
depends_on:
|
||||
- mongo
|
||||
networks:
|
||||
- oc
|
||||
ports:
|
||||
- 8081:8081
|
||||
container_name: mongo-express
|
||||
environment:
|
||||
- ME_CONFIG_BASICAUTH_USERNAME=test
|
||||
- ME_CONFIG_BASICAUTH_PASSWORD=test
|
||||
nats:
|
||||
image: 'nats:latest'
|
||||
container_name: nats
|
||||
ports:
|
||||
- 4222:4222
|
||||
command:
|
||||
- "--debug"
|
||||
networks:
|
||||
- oc
|
||||
loki:
|
||||
image: 'grafana/loki'
|
||||
container_name: loki
|
||||
labels:
|
||||
- "traefik.stack=peer1"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.loki.entrypoints=web"
|
||||
- "traefik.http.routers.loki.rule=PathPrefix(`/tools/loki`)"
|
||||
- "traefik.http.services.loki.loadbalancer.server.port=3100"
|
||||
- "traefik.http.middlewares.loki-stripprefix.stripprefix.prefixes=/tools/loki"
|
||||
- "traefik.http.routers.loki.middlewares=loki-stripprefix"
|
||||
- "traefik.http.middlewares.loki.forwardauth.address=http://oc-auth:8080/oc/forward"
|
||||
user: root
|
||||
ports :
|
||||
- "3100:3100"
|
||||
networks:
|
||||
- oc
|
||||
volumes:
|
||||
- ./loki-data:/loki
|
||||
hydra:
|
||||
container_name: hydra
|
||||
image: oryd/hydra:v2.2.0
|
||||
environment:
|
||||
SECRETS_SYSTEM: oc-auth-got-secret
|
||||
LOG_LEAK_SENSITIVE_VALUES: true
|
||||
# OAUTH2_TOKEN_HOOK_URL: http://oc-auth:8080/oc/claims
|
||||
HYDRA_ADMIN_URL: http://hydra:4445
|
||||
URLS_SELF_ISSUER: http://localhost:8000/hydra
|
||||
URLS_SELF_PUBLIC: http://localhost:8000/hydra
|
||||
URLS_LOGIN: http://localhost:8000/auth/login
|
||||
URLS_CONSENT: http://localhost:8000/auth/consent
|
||||
URLS_LOGOUT: http://localhost:8000/auth/logout
|
||||
URLS_ERROR: http://localhost:8000
|
||||
STRATEGIES_ACCESS_TOKEN: jwt
|
||||
WEBFINGER_OIDC_DISCOVERY_SUPPORTED_SCOPES: profile,email,phone,roles
|
||||
WEBFINGER_OIDC_DISCOVERY_SUPPORTED_CLAIMS: name,family_name,given_name,nickname,email,phone_number
|
||||
DSN: memory
|
||||
user: root
|
||||
entrypoint: >
|
||||
sh -c "
|
||||
hydra serve all --dev &
|
||||
echo '⏳ Waiting for Hydra admin API...' &&
|
||||
until wget -q --spider http://localhost:4445/health/ready; do
|
||||
sleep 2;
|
||||
done &&
|
||||
echo '✅ Hydra is ready. Importing clients...' &&
|
||||
hydra import oauth2-client /clients.json -e http://hydra:4445 &&
|
||||
echo '🚀 Clients imported.' &&
|
||||
wait
|
||||
"
|
||||
volumes:
|
||||
- ./clients.json:/clients.json
|
||||
networks:
|
||||
- oc
|
||||
ports:
|
||||
- "4444:4444"
|
||||
- "4445:4445"
|
||||
deploy:
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
labels:
|
||||
- "traefik.stack=peer1"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.hydra.entrypoints=web"
|
||||
- "traefik.http.routers.hydra.rule=PathPrefix(`/hydra`)"
|
||||
- "traefik.http.services.hydra.loadbalancer.server.port=4444"
|
||||
- "traefik.http.middlewares.hydra-stripprefix.stripprefix.prefixes=/hydra"
|
||||
- "traefik.http.routers.hydra.middlewares=hydra-stripprefix"
|
||||
ldap:
|
||||
image: pgarrett/ldap-alpine
|
||||
container_name: ldap
|
||||
volumes:
|
||||
- "./ldap.ldif:/ldif/ldap.ldif"
|
||||
networks:
|
||||
- oc
|
||||
ports:
|
||||
- "390:389"
|
||||
deploy:
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
keto:
|
||||
image: oryd/keto:v0.7.0-alpha.1-sqlite
|
||||
ports:
|
||||
- "4466:4466"
|
||||
- "4467:4467"
|
||||
command: serve -c /home/ory/keto.yml
|
||||
restart: on-failure
|
||||
volumes:
|
||||
- type: bind
|
||||
source: .
|
||||
target: /home/ory
|
||||
container_name: keto
|
||||
networks:
|
||||
- oc
|
||||
traefik:
|
||||
image: traefik:v3.6
|
||||
container_name: traefik
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- oc
|
||||
command:
|
||||
- "--api.insecure=true"
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--providers.docker.network=oc"
|
||||
- "--providers.docker.constraints=Label(`traefik.stack`,`peer1`)"
|
||||
- "--entrypoints.web.address=:8000"
|
||||
user: root
|
||||
ports:
|
||||
- "8000:8000" # Expose Traefik on port 8000
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
oc-datacenter:
|
||||
env_file:
|
||||
- path: ./env.env
|
||||
required: false
|
||||
environment:
|
||||
- OC_MONGO_DATABASE=DC_myDC
|
||||
- OC_KUBE_CA=${KUBE_CA:-}
|
||||
- OC_KUBE_CERT=${KUBE_CERT:-}
|
||||
- OC_KUBE_DATA=${KUBE_DATA:-}
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-datacenter:latest'
|
||||
ports:
|
||||
- 8092:8080
|
||||
labels:
|
||||
- "traefik.stack=peer1"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.datacenter.entrypoints=web"
|
||||
- "traefik.http.routers.datacenter.rule=PathPrefix(`/datacenter`)"
|
||||
- "traefik.http.services.datacenter.loadbalancer.server.port=8080"
|
||||
- "traefik.http.middlewares.datacenter-rewrite.replacepathregex.regex=^/datacenter(.*)"
|
||||
- "traefik.http.middlewares.datacenter-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.routers.datacenter.middlewares=datacenter-rewrite,auth-datacenter"
|
||||
|
||||
- "traefik.http.middlewares.auth-datacenter.forwardauth.address=http://oc-auth:8080/oc/forward"
|
||||
- "traefik.http.middlewares.auth-datacenter.forwardauth.trustForwardHeader=true"
|
||||
- "traefik.http.middlewares.auth-datacenter.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
|
||||
container_name: oc-datacenter
|
||||
networks:
|
||||
- oc
|
||||
oc-scheduler:
|
||||
environment:
|
||||
- OC_MONGO_DATABASE=DC_myDC
|
||||
- OC_KUBE_CA=${KUBE_CA:-}
|
||||
- OC_KUBE_CERT=${KUBE_CERT:-}
|
||||
- OC_KUBE_DATA=${KUBE_DATA:-}
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-scheduler:latest'
|
||||
labels:
|
||||
- "traefik.stack=peer1"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.scheduler.entrypoints=web"
|
||||
- "traefik.http.routers.scheduler.rule=PathPrefix(`/scheduler`)"
|
||||
- "traefik.http.middlewares.scheduler-rewrite.replacepathregex.regex=^/scheduler(.*)"
|
||||
- "traefik.http.middlewares.scheduler-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.routers.scheduler.middlewares=scheduler-rewrite,auth-scheduler"
|
||||
- "traefik.http.services.scheduler.loadbalancer.server.port=8080"
|
||||
|
||||
- "traefik.http.middlewares.auth-scheduler.forwardauth.address=http://oc-auth:8080/oc/forward"
|
||||
- "traefik.http.middlewares.auth-scheduler.forwardauth.trustForwardHeader=true"
|
||||
- "traefik.http.middlewares.auth-scheduler.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
|
||||
ports:
|
||||
- 8090:8080
|
||||
container_name: oc-scheduler
|
||||
networks:
|
||||
- oc
|
||||
|
||||
oc-catalog:
|
||||
environment:
|
||||
- OC_MONGO_DATABASE=DC_myDC
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-catalog:latest'
|
||||
ports:
|
||||
- 8087:8080
|
||||
container_name: oc-catalog
|
||||
networks:
|
||||
- oc
|
||||
labels:
|
||||
- "traefik.stack=peer1"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.catalog.entrypoints=web"
|
||||
- "traefik.http.routers.catalog.rule=PathPrefix(`/catalog`)"
|
||||
- "traefik.http.middlewares.catalog-rewrite.replacepathregex.regex=^/catalog(.*)"
|
||||
- "traefik.http.middlewares.catalog-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.routers.catalog.middlewares=catalog-rewrite,auth-catalog"
|
||||
- "traefik.http.services.catalog.loadbalancer.server.port=8080"
|
||||
|
||||
- "traefik.http.middlewares.auth-catalog.forwardauth.address=http://oc-auth:8080/oc/forward"
|
||||
- "traefik.http.middlewares.auth-catalog.forwardauth.trustForwardHeader=true"
|
||||
- "traefik.http.middlewares.auth-catalog.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
|
||||
oc-workspace:
|
||||
environment:
|
||||
- OC_MONGO_DATABASE=DC_myDC
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-workspace:latest'
|
||||
ports:
|
||||
- 8089:8080
|
||||
labels:
|
||||
- "traefik.stack=peer1"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.workspace.entrypoints=web"
|
||||
- "traefik.http.routers.workspace.rule=PathPrefix(`/workspace`)"
|
||||
- "traefik.http.middlewares.workspace-rewrite.replacepathregex.regex=^/workspace(.*)"
|
||||
- "traefik.http.middlewares.workspace-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.routers.workspace.middlewares=workspace-rewrite,auth-workspace"
|
||||
- "traefik.http.services.workspace.loadbalancer.server.port=8080"
|
||||
|
||||
- "traefik.http.middlewares.auth-workspace.forwardauth.address=http://oc-auth:8080/oc/forward"
|
||||
- "traefik.http.middlewares.auth-workspace.forwardauth.trustForwardHeader=true"
|
||||
- "traefik.http.middlewares.auth-workspace.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
|
||||
container_name: oc-workspace
|
||||
networks:
|
||||
- oc
|
||||
oc-peer:
|
||||
environment:
|
||||
- OC_MONGO_DATABASE=DC_myDC
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-peer:latest'
|
||||
labels:
|
||||
- "traefik.stack=peer1"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.peer.entrypoints=web"
|
||||
- "traefik.http.routers.peer.rule=PathPrefix(`/peer`)"
|
||||
- "traefik.http.middlewares.peer-rewrite.replacepathregex.regex=^/peer(.*)"
|
||||
- "traefik.http.middlewares.peer-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.routers.peer.middlewares=peer-rewrite,auth-peer"
|
||||
- "traefik.http.services.peer.loadbalancer.server.port=8080"
|
||||
|
||||
- "traefik.http.middlewares.auth-peer.forwardauth.address=http://oc-auth:8080/oc/forward"
|
||||
- "traefik.http.middlewares.auth-peer.forwardauth.trustForwardHeader=true"
|
||||
- "traefik.http.middlewares.auth-peer.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
|
||||
ports:
|
||||
- 8093:8080
|
||||
container_name: oc-peer
|
||||
networks:
|
||||
- oc
|
||||
oc-auth:
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-auth:latest'
|
||||
ports:
|
||||
- 8094:8080
|
||||
container_name: oc-auth
|
||||
labels:
|
||||
- "traefik.stack=peer1"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.auth-sec.entrypoints=web"
|
||||
- "traefik.http.routers.auth-sec.rule=PathPrefix(`/auth/`)"
|
||||
- "traefik.http.middlewares.auth-sec-rewrite.replacepathregex.regex=^/auth(.*)"
|
||||
- "traefik.http.middlewares.auth-sec-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.services.auth-sec.loadbalancer.server.port=8080"
|
||||
- "traefik.http.routers.auth-sec.middlewares=auth-sec-rewrite,auth-auth-sec"
|
||||
- "traefik.http.middlewares.auth-auth-sec.forwardauth.address=http://oc-auth:8080/oc/forward"
|
||||
- "traefik.http.middlewares.auth-auth-sec.forwardauth.trustForwardHeader=true"
|
||||
- "traefik.http.middlewares.auth-auth-sec.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
|
||||
environment:
|
||||
LDAP_ENDPOINTS: ldap: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"
|
||||
networks:
|
||||
- oc
|
||||
volumes:
|
||||
- ./pem/private3.pem:/keys/private/private.pem
|
||||
- ./pem/public3.pem:/keys/public/public.pem
|
||||
oc-shared:
|
||||
environment:
|
||||
- MONGO_DATABASE=DC_myDC
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-shared:latest'
|
||||
ports:
|
||||
- 8091:8080
|
||||
container_name: oc-shared
|
||||
labels:
|
||||
- "traefik.stack=peer1"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.shared.entrypoints=web"
|
||||
- "traefik.http.routers.shared.rule=PathPrefix(`/shared`)"
|
||||
- "traefik.http.middlewares.shared-rewrite.replacepathregex.regex=^/shared(.*)"
|
||||
- "traefik.http.middlewares.shared-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.routers.shared.middlewares=shared-rewrite"
|
||||
- "traefik.http.services.shared.loadbalancer.server.port=8080"
|
||||
- "traefik.http.middlewares.shared.forwardauth.address=http://oc-auth:8080/oc/forward"
|
||||
networks:
|
||||
- oc
|
||||
oc-workflow:
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-workflow:latest'
|
||||
ports:
|
||||
- 8088:8080
|
||||
container_name: oc-workflow
|
||||
labels:
|
||||
- "traefik.stack=peer1"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.workflow.entrypoints=web"
|
||||
- "traefik.http.routers.workflow.rule=PathPrefix(`/workflow`)"
|
||||
- "traefik.http.services.workflow.loadbalancer.server.port=8080"
|
||||
- "traefik.http.middlewares.workflow-rewrite.replacepathregex.regex=^/workflow(.*)"
|
||||
- "traefik.http.middlewares.workflow-rewrite.replacepathregex.replacement=/oc$1"
|
||||
- "traefik.http.routers.workflow.middlewares=workflow-rewrite,auth-workflow"
|
||||
|
||||
- "traefik.http.middlewares.auth-workflow.forwardauth.address=http://oc-auth:8080/oc/forward"
|
||||
- "traefik.http.middlewares.auth-workflow.forwardauth.trustForwardHeader=true"
|
||||
- "traefik.http.middlewares.auth-workflow.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
|
||||
networks:
|
||||
- oc
|
||||
oc-discovery_1:
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-discovery_1:latest'
|
||||
ports:
|
||||
- 4005:4005
|
||||
container_name: oc-discovery_1
|
||||
networks:
|
||||
discovery:
|
||||
ipv4_address: 172.40.0.5
|
||||
oc:
|
||||
oc-discovery_2:
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-discovery_2:latest'
|
||||
ports:
|
||||
- 4002:4002
|
||||
container_name: oc-discovery_2
|
||||
networks:
|
||||
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:
|
||||
discovery:
|
||||
ipv4_address: 172.40.0.3
|
||||
oc:
|
||||
oc-schedulerd:
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-schedulerd:latest'
|
||||
ports:
|
||||
- 9006:8080
|
||||
environment:
|
||||
- OC_MONGO_DATABASE=DC_myDC
|
||||
- OC_KUBE_CA=${KUBE_CA:-}
|
||||
- OC_KUBE_CERT=${KUBE_CERT:-}
|
||||
- OC_KUBE_DATA=${KUBE_DATA:-}
|
||||
container_name: oc-schedulerd
|
||||
networks:
|
||||
- oc
|
||||
oc-front:
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-front:latest'
|
||||
container_name: oc-front
|
||||
ports:
|
||||
- 8001:80
|
||||
networks:
|
||||
- oc
|
||||
labels:
|
||||
- "traefik.stack=peer1"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.front.entrypoints=web"
|
||||
- "traefik.http.routers.front.rule=PathPrefix(`/`)"
|
||||
- "traefik.http.services.front.loadbalancer.server.port=80"
|
||||
- "traefik.http.middlewares.front-stripprefix.stripprefix.prefixes=/"
|
||||
- "traefik.http.routers.front.middlewares=front-stripprefix"
|
||||
oc-static:
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-static:latest'
|
||||
ports:
|
||||
- 8098:80
|
||||
labels:
|
||||
- "traefik.stack=peer1"
|
||||
- "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:
|
||||
- oc
|
||||
|
||||
volumes:
|
||||
oc-data:
|
||||
|
||||
networks:
|
||||
oc:
|
||||
external: true
|
||||
discovery:
|
||||
external: true
|
||||
|
||||
@@ -1,413 +0,0 @@
|
||||
version: '3.9'
|
||||
|
||||
services:
|
||||
mongo2:
|
||||
image: 'mongo:latest'
|
||||
container_name: mongo2
|
||||
networks:
|
||||
- oc2
|
||||
ports:
|
||||
- 27018:27017
|
||||
volumes:
|
||||
- oc-data2:/data/db
|
||||
- oc-data2:/data/configdb
|
||||
|
||||
mongo-express2:
|
||||
image: "mongo-express:latest"
|
||||
container_name: mongo-express2
|
||||
restart: always
|
||||
depends_on:
|
||||
- mongo2
|
||||
networks:
|
||||
- oc2
|
||||
ports:
|
||||
- 8082:8081
|
||||
environment:
|
||||
- ME_CONFIG_BASICAUTH_USERNAME=test
|
||||
- ME_CONFIG_BASICAUTH_PASSWORD=test
|
||||
- ME_CONFIG_MONGODB_SERVER=mongo2
|
||||
nats2:
|
||||
image: 'nats:latest'
|
||||
container_name: nats2
|
||||
ports:
|
||||
- 4223:4222
|
||||
command:
|
||||
- "--debug"
|
||||
networks:
|
||||
- oc2
|
||||
loki2:
|
||||
image: 'grafana/loki'
|
||||
container_name: loki2
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.loki2.entrypoints=web"
|
||||
- "traefik.http.routers.loki2.rule=PathPrefix(`/tools/loki`)"
|
||||
- "traefik.http.services.loki2.loadbalancer.server.port=3100"
|
||||
- "traefik.http.middlewares.loki2-stripprefix.stripprefix.prefixes=/tools/loki"
|
||||
- "traefik.http.routers.loki2.middlewares=loki2-stripprefix"
|
||||
- "traefik.http.middlewares.loki2.forwardauth.address=http://oc-auth2:8080/oc/forward"
|
||||
ports :
|
||||
- "3101:3100"
|
||||
networks:
|
||||
- oc2
|
||||
hydra2:
|
||||
container_name: hydra2
|
||||
image: oryd/hydra:v2.2.0
|
||||
environment:
|
||||
SECRETS_SYSTEM: oc-auth-got-secret
|
||||
LOG_LEAK_SENSITIVE_VALUES: true
|
||||
# OAUTH2_TOKEN_HOOK_URL: http://oc-auth2:8080/oc/claims
|
||||
HYDRA_ADMIN_URL: http://hydra2:4445
|
||||
URLS_SELF_ISSUER: http://localhost:9000/hydra
|
||||
URLS_SELF_PUBLIC: http://localhost:9000/hydra
|
||||
URLS_LOGIN: http://localhost:9000/auth/login
|
||||
URLS_CONSENT: http://localhost:9000/auth/consent
|
||||
URLS_LOGOUT: http://localhost:9000/auth/logout
|
||||
URLS_ERROR: http://localhost:9000
|
||||
STRATEGIES_ACCESS_TOKEN: jwt
|
||||
WEBFINGER_OIDC_DISCOVERY_SUPPORTED_SCOPES: profile,email,phone,roles
|
||||
WEBFINGER_OIDC_DISCOVERY_SUPPORTED_CLAIMS: name,family_name,given_name,nickname,email,phone_number
|
||||
DSN: memory
|
||||
user: root
|
||||
entrypoint: >
|
||||
sh -c "
|
||||
hydra serve all --dev &
|
||||
echo '⏳ Waiting for Hydra admin API...' &&
|
||||
until wget -q --spider http://localhost:4445/health/ready; do
|
||||
sleep 2;
|
||||
done &&
|
||||
echo '✅ Hydra is ready. Importing clients...' &&
|
||||
hydra import oauth2-client /clients.json -e http://hydra2:4445 &&
|
||||
echo '🚀 Clients imported.' &&
|
||||
wait
|
||||
"
|
||||
volumes:
|
||||
- ./clients.json:/clients.json
|
||||
networks:
|
||||
- oc2
|
||||
ports:
|
||||
- "4446:4444"
|
||||
- "4447:4445"
|
||||
deploy:
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.hydra2.entrypoints=web"
|
||||
- "traefik.http.routers.hydra2.rule=PathPrefix(`/hydra`)"
|
||||
- "traefik.http.services.hydra2.loadbalancer.server.port=4444"
|
||||
- "traefik.http.middlewares.hydra2-stripprefix.stripprefix.prefixes=/hydra"
|
||||
- "traefik.http.routers.hydra2.middlewares=hydra2-stripprefix"
|
||||
ldap2:
|
||||
image: pgarrett/ldap-alpine
|
||||
container_name: ldap2
|
||||
volumes:
|
||||
- "./ldap.ldif:/ldif/ldap.ldif"
|
||||
networks:
|
||||
- oc2
|
||||
ports:
|
||||
- "391:389"
|
||||
deploy:
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
keto2:
|
||||
image: oryd/keto:v0.7.0-alpha.1-sqlite
|
||||
ports:
|
||||
- "4468:4466"
|
||||
- "4469:4467"
|
||||
command: serve -c /home/ory/keto.yml
|
||||
restart: on-failure
|
||||
volumes:
|
||||
- type: bind
|
||||
source: .
|
||||
target: /home/ory
|
||||
container_name: keto2
|
||||
networks:
|
||||
- oc2
|
||||
traefik2:
|
||||
image: traefik:v3.6
|
||||
container_name: traefik2
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- oc2
|
||||
command:
|
||||
- "--api.insecure=true"
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--providers.docker.network=oc2"
|
||||
- "--providers.docker.constraints=Label(`traefik.stack`,`peer2`)"
|
||||
- "--entrypoints.web.address=:9000"
|
||||
user: root
|
||||
ports:
|
||||
- "9000:9000" # Expose Traefik on port 9000
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
oc-datacenter2:
|
||||
environment:
|
||||
- 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
|
||||
labels:
|
||||
- "traefik.stack=peer2"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.datacenter2.entrypoints=web"
|
||||
- "traefik.http.routers.datacenter2.rule=PathPrefix(`/datacenter`)"
|
||||
- "traefik.http.services.datacenter2.loadbalancer.server.port=8080"
|
||||
- "traefik.http.middlewares.datacenter2-rewrite.replacepathregex.regex=^/datacenter(.*)"
|
||||
- "traefik.http.middlewares.datacenter2-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.routers.datacenter2.middlewares=datacenter2-rewrite,auth-datacenter2"
|
||||
|
||||
- "traefik.http.middlewares.auth-datacenter2.forwardauth.address=http://oc-auth2:8080/oc/forward"
|
||||
- "traefik.http.middlewares.auth-datacenter2.forwardauth.trustForwardHeader=true"
|
||||
- "traefik.http.middlewares.auth-datacenter2.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
|
||||
container_name: oc-datacenter2
|
||||
networks:
|
||||
- oc2
|
||||
oc-scheduler2:
|
||||
environment:
|
||||
- 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"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.scheduler2.entrypoints=web"
|
||||
- "traefik.http.routers.scheduler2.rule=PathPrefix(`/scheduler`)"
|
||||
- "traefik.http.middlewares.scheduler2-rewrite.replacepathregex.regex=^/scheduler(.*)"
|
||||
- "traefik.http.middlewares.scheduler2-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.routers.scheduler2.middlewares=scheduler2-rewrite,auth-scheduler2"
|
||||
- "traefik.http.services.scheduler2.loadbalancer.server.port=8080"
|
||||
|
||||
- "traefik.http.middlewares.auth-scheduler2.forwardauth.address=http://oc-auth2:8080/oc/forward"
|
||||
- "traefik.http.middlewares.auth-scheduler2.forwardauth.trustForwardHeader=true"
|
||||
- "traefik.http.middlewares.auth-scheduler2.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
|
||||
ports:
|
||||
- 9090:8080
|
||||
container_name: oc-scheduler2
|
||||
networks:
|
||||
- oc2
|
||||
oc-catalog2:
|
||||
environment:
|
||||
- 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
|
||||
container_name: oc-catalog2
|
||||
networks:
|
||||
- oc2
|
||||
labels:
|
||||
- "traefik.stack=peer2"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.catalog2.entrypoints=web"
|
||||
- "traefik.http.routers.catalog2.rule=PathPrefix(`/catalog`)"
|
||||
- "traefik.http.middlewares.catalog2-rewrite.replacepathregex.regex=^/catalog(.*)"
|
||||
- "traefik.http.middlewares.catalog2-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.routers.catalog2.middlewares=catalog2-rewrite,auth-catalog2"
|
||||
- "traefik.http.services.catalog2.loadbalancer.server.port=8080"
|
||||
|
||||
- "traefik.http.middlewares.auth-catalog2.forwardauth.address=http://oc-auth2:8080/oc/forward"
|
||||
- "traefik.http.middlewares.auth-catalog2.forwardauth.trustForwardHeader=true"
|
||||
- "traefik.http.middlewares.auth-catalog2.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
|
||||
oc-workspace2:
|
||||
environment:
|
||||
- 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
|
||||
labels:
|
||||
- "traefik.stack=peer2"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.workspace2.entrypoints=web"
|
||||
- "traefik.http.routers.workspace2.rule=PathPrefix(`/workspace`)"
|
||||
- "traefik.http.middlewares.workspace2-rewrite.replacepathregex.regex=^/workspace(.*)"
|
||||
- "traefik.http.middlewares.workspace2-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.routers.workspace2.middlewares=workspace2-rewrite,auth-workspace2"
|
||||
- "traefik.http.services.workspace2.loadbalancer.server.port=8080"
|
||||
|
||||
- "traefik.http.middlewares.auth-workspace2.forwardauth.address=http://oc-auth2:8080/oc/forward"
|
||||
- "traefik.http.middlewares.auth-workspace2.forwardauth.trustForwardHeader=true"
|
||||
- "traefik.http.middlewares.auth-workspace2.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
|
||||
container_name: oc-workspace2
|
||||
networks:
|
||||
- oc2
|
||||
oc-peer2:
|
||||
environment:
|
||||
- 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"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.peer2.entrypoints=web"
|
||||
- "traefik.http.routers.peer2.rule=PathPrefix(`/peer`)"
|
||||
- "traefik.http.middlewares.peer2-rewrite.replacepathregex.regex=^/peer(.*)"
|
||||
- "traefik.http.middlewares.peer2-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.routers.peer2.middlewares=peer2-rewrite,auth-peer2"
|
||||
- "traefik.http.services.peer2.loadbalancer.server.port=8080"
|
||||
|
||||
- "traefik.http.middlewares.auth-peer2.forwardauth.address=http://oc-auth2:8080/oc/forward"
|
||||
- "traefik.http.middlewares.auth-peer2.forwardauth.trustForwardHeader=true"
|
||||
- "traefik.http.middlewares.auth-peer2.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
|
||||
ports:
|
||||
- 9093:8080
|
||||
container_name: oc-peer2
|
||||
networks:
|
||||
- oc2
|
||||
oc-auth2:
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-auth:latest'
|
||||
ports:
|
||||
- 9094:8080
|
||||
container_name: oc-auth2
|
||||
labels:
|
||||
- "traefik.stack=peer2"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.auth-sec2.entrypoints=web"
|
||||
- "traefik.http.routers.auth-sec2.rule=PathPrefix(`/auth/`)"
|
||||
- "traefik.http.middlewares.auth-sec2-rewrite.replacepathregex.regex=^/auth(.*)"
|
||||
- "traefik.http.middlewares.auth-sec2-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.services.auth-sec2.loadbalancer.server.port=8080"
|
||||
- "traefik.http.routers.auth-sec2.middlewares=auth-sec2-rewrite,auth-auth-sec2"
|
||||
- "traefik.http.middlewares.auth-auth-sec2.forwardauth.address=http://oc-auth2:8080/oc/forward"
|
||||
- "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:
|
||||
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:
|
||||
- ./pem/private4.pem:/keys/private/private.pem
|
||||
- ./pem/public4.pem:/keys/public/public.pem
|
||||
oc-shared2:
|
||||
environment:
|
||||
- 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
|
||||
container_name: oc-shared2
|
||||
labels:
|
||||
- "traefik.stack=peer2"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.shared2.entrypoints=web"
|
||||
- "traefik.http.routers.shared2.rule=PathPrefix(`/shared`)"
|
||||
- "traefik.http.middlewares.shared2-rewrite.replacepathregex.regex=^/shared(.*)"
|
||||
- "traefik.http.middlewares.shared2-rewrite.replacepathregex.replacement=/oc$$1"
|
||||
- "traefik.http.routers.shared2.middlewares=shared2-rewrite"
|
||||
- "traefik.http.services.shared2.loadbalancer.server.port=8080"
|
||||
- "traefik.http.middlewares.shared2.forwardauth.address=http://oc-auth2:8080/oc/forward"
|
||||
networks:
|
||||
- oc2
|
||||
oc-workflow2:
|
||||
environment:
|
||||
- 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
|
||||
container_name: oc-workflow2
|
||||
labels:
|
||||
- "traefik.stack=peer2"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.workflow2.entrypoints=web"
|
||||
- "traefik.http.routers.workflow2.rule=PathPrefix(`/workflow`)"
|
||||
- "traefik.http.services.workflow2.loadbalancer.server.port=8080"
|
||||
- "traefik.http.middlewares.workflow2-rewrite.replacepathregex.regex=^/workflow(.*)"
|
||||
- "traefik.http.middlewares.workflow2-rewrite.replacepathregex.replacement=/oc$1"
|
||||
- "traefik.http.routers.workflow2.middlewares=workflow2-rewrite"
|
||||
networks:
|
||||
- oc2
|
||||
oc-discovery_4:
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-discovery_4:latest'
|
||||
ports:
|
||||
- 4004:4004
|
||||
container_name: oc-discovery_4
|
||||
networks:
|
||||
discovery:
|
||||
ipv4_address: 172.40.0.4
|
||||
oc2:
|
||||
oc:
|
||||
oc-schedulerd2:
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-schedulerd:latest'
|
||||
ports:
|
||||
- 10006:8080
|
||||
environment:
|
||||
- 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
|
||||
oc-static2:
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-static:latest'
|
||||
ports:
|
||||
- 9098:8080
|
||||
labels:
|
||||
- "traefik.stack=peer2"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.static2.entrypoints=web"
|
||||
- "traefik.http.routers.static2.rule=PathPrefix(`/static`)"
|
||||
- "traefik.http.services.static2.loadbalancer.server.port=8080"
|
||||
container_name: oc-static2
|
||||
networks:
|
||||
- oc2
|
||||
oc-front2:
|
||||
image: '${REGISTRY:-opencloudregistry/}oc-front:latest'
|
||||
container_name: oc-front2
|
||||
ports:
|
||||
- 8011:80
|
||||
networks:
|
||||
- oc2
|
||||
labels:
|
||||
- "traefik.stack=peer2"
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.front.entrypoints=web"
|
||||
- "traefik.http.routers.front.rule=PathPrefix(`/`)"
|
||||
- "traefik.http.services.front.loadbalancer.server.port=80"
|
||||
- "traefik.http.middlewares.front-stripprefix.stripprefix.prefixes=/"
|
||||
- "traefik.http.routers.front.middlewares=front-stripprefix"
|
||||
|
||||
volumes:
|
||||
oc-data2:
|
||||
|
||||
networks:
|
||||
oc:
|
||||
external: true
|
||||
oc2:
|
||||
external: true
|
||||
discovery:
|
||||
external: true
|
||||
@@ -1,18 +0,0 @@
|
||||
version: v0.6.0-alpha.1
|
||||
|
||||
log:
|
||||
level: debug
|
||||
|
||||
namespaces:
|
||||
- id: 0
|
||||
name: open-cloud
|
||||
|
||||
dsn: memory
|
||||
|
||||
serve:
|
||||
read:
|
||||
host: 0.0.0.0
|
||||
port: 4466
|
||||
write:
|
||||
host: 0.0.0.0
|
||||
port: 4467
|
||||
@@ -1,24 +0,0 @@
|
||||
dn: uid=admin,ou=Users,dc=example,dc=com
|
||||
objectClass: inetOrgPerson
|
||||
cn: Admin
|
||||
sn: Istrator
|
||||
uid: admin
|
||||
userPassword: admin
|
||||
mail: admin@example.com
|
||||
ou: Users
|
||||
|
||||
dn: ou=AppRoles,dc=example,dc=com
|
||||
objectClass: organizationalunit
|
||||
ou: AppRoles
|
||||
description: AppRoles
|
||||
|
||||
dn: ou=App1,ou=AppRoles,dc=example,dc=com
|
||||
objectClass: organizationalunit
|
||||
ou: App1
|
||||
description: App1
|
||||
|
||||
dn: cn=traveler,ou=App1,ou=AppRoles,dc=example,dc=com
|
||||
objectClass: groupofnames
|
||||
cn: traveler
|
||||
description: traveler
|
||||
member: uid=admin,ou=Users,dc=example,dc=com
|
||||
@@ -1,3 +0,0 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MC4CAQAwBQYDK2VwBCIEIAeX4O7ldwehRSnPkbzuE6csyo63vjvqAcNNujENOKUC
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -1,3 +0,0 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MC4CAQAwBQYDK2VwBCIEIEkgqINXDLnxIJZs2LEK9O4vdsqk43dwbULGUE25AWuR
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -1,3 +0,0 @@
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MCowBQYDK2VwAyEAG95Ettl3jTi41HM8le1A9WDmOEq0ANEqpLF7zTZrfXA=
|
||||
-----END PUBLIC KEY-----
|
||||
@@ -1,3 +0,0 @@
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MCowBQYDK2VwAyEA/ymOIb0sJ0qCWrf3mKz7ACCvsMXLog/EK533JfNXZTM=
|
||||
-----END PUBLIC KEY-----
|
||||
4
docker/kube.exemple.env
Normal file
4
docker/kube.exemple.env
Normal file
@@ -0,0 +1,4 @@
|
||||
KUBERNETES_SERVICE_HOST=192.168.47.20
|
||||
KUBE_CA="LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTWpNeE1USXdNell3SGhjTk1qUXdPREE0TVRBeE16VTJXaGNOTXpRd09EQTJNVEF4TXpVMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTWpNeE1USXdNell3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFTVlk3ZHZhNEdYTVdkMy9jMlhLN3JLYjlnWXgyNSthaEE0NmkyNVBkSFAKRktQL2UxSVMyWVF0dzNYZW1TTUQxaStZdzJSaVppNUQrSVZUamNtNHdhcnFvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWtlUVJpNFJiODduME5yRnZaWjZHClc2SU55NnN3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnRXA5ck04WmdNclRZSHYxZjNzOW5DZXZZeWVVa3lZUk4KWjUzazdoaytJS1FDSVFDbk05TnVGKzlTakIzNDFacGZ5ays2NEpWdkpSM3BhcmVaejdMd2lhNm9kdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K"
|
||||
KUBE_CERT="LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJWUxWNkFPQkdrU1F3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOekl6TVRFeU1ETTJNQjRYRFRJME1EZ3dPREV3TVRNMU5sb1hEVEkxTURndwpPREV3TVRNMU5sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJGQ2Q1MFdPeWdlQ2syQzcKV2FrOWY4MVAvSkJieVRIajRWOXBsTEo0ck5HeHFtSjJOb2xROFYxdUx5RjBtOTQ2Nkc0RmRDQ2dqaXFVSk92Swp3NVRPNnd5alNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCVFJkOFI5cXVWK2pjeUVmL0ovT1hQSzMyS09XekFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQTArbThqTDBJVldvUTZ0dnB4cFo4NVlMalF1SmpwdXM0aDdnSXRxS3NmUVVDSUI2M2ZNdzFBMm5OVWU1TgpIUGZOcEQwSEtwcVN0Wnk4djIyVzliYlJUNklZCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzTWpNeE1USXdNell3SGhjTk1qUXdPREE0TVRBeE16VTJXaGNOTXpRd09EQTJNVEF4TXpVMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzTWpNeE1USXdNell3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRc3hXWk9pbnIrcVp4TmFEQjVGMGsvTDF5cE01VHAxOFRaeU92ektJazQKRTFsZWVqUm9STW0zNmhPeVljbnN3d3JoNnhSUnBpMW5RdGhyMzg0S0Z6MlBvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTBYZkVmYXJsZm8zTWhIL3lmemx6Cnl0OWlqbHN3Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQUxJL2dNYnNMT3MvUUpJa3U2WHVpRVMwTEE2cEJHMXgKcnBlTnpGdlZOekZsQWlFQW1wdjBubjZqN3M0MVI0QzFNMEpSL0djNE53MHdldlFmZWdEVGF1R2p3cFk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K"
|
||||
KUBE_DATA="LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSU5ZS1BFb1dhd1NKUzJlRW5oWmlYMk5VZlY1ZlhKV2krSVNnV09TNFE5VTlvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFVUozblJZN0tCNEtUWUx0WnFUMS96VS84a0Z2Sk1lUGhYMm1Vc25pczBiR3FZblkyaVZEeApYVzR2SVhTYjNqcm9iZ1YwSUtDT0twUWs2OHJEbE03ckRBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo="
|
||||
@@ -1,22 +1,13 @@
|
||||
#!/bin/bash
|
||||
server=$(grep 'server:' ~/.kube/config | awk '{print $2}')
|
||||
|
||||
host=$(ip -4 addr show $(ip route | awk '/default/ {print $5}') | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||
port=6443
|
||||
ca=$(kubectl config view --raw --minify -o jsonpath='{.clusters[0].cluster.certificate-authority-data}')
|
||||
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}')
|
||||
|
||||
KUBERNETES_ENV_FILE=$(realpath ${1:-"./kube.exemple.env"})
|
||||
HOST=${2:-"http://localhost:8000"}
|
||||
docker network create oc | true
|
||||
|
||||
docker compose down
|
||||
cd ./tools && docker compose -f ./docker-compose.dev.yml up --force-recreate -d
|
||||
docker compose -f ./docker-compose.traefik.yml up --force-recreate -d && cd ..
|
||||
|
||||
cd ./tools && docker compose -f ./docker-compose.dev.yml down --force-recreate -d && docker compose -f ./docker-compose.traefik.yml down --force-recreate -d
|
||||
docker compose -f ./docker-compose.dev.yml up --force-recreate -d && docker compose -f ./docker-compose.traefik.yml up --force-recreate -d && cd ..
|
||||
|
||||
|
||||
# cd ./db && ./add.sh && cd ..
|
||||
cd ./db && ./add.sh && cd ..
|
||||
|
||||
cd ../..
|
||||
|
||||
@@ -31,6 +22,7 @@ REPOS=(
|
||||
"oc-schedulerd"
|
||||
"oc-workflow"
|
||||
"oc-workspace"
|
||||
"oc-front"
|
||||
)
|
||||
for i in "${REPOS[@]}"
|
||||
do
|
||||
@@ -38,18 +30,7 @@ do
|
||||
docker kill $i | true
|
||||
docker rm $i | true
|
||||
cd ./$i
|
||||
cat <<EOT > ./env.env
|
||||
KUBERNETES_SERVICE_HOST=$host
|
||||
KUBE_CA="$ca"
|
||||
KUBE_CERT="$cert"
|
||||
KUBE_DATA="$key"
|
||||
EOT
|
||||
|
||||
|
||||
docker build . -t $i --build-arg=HOST=$HOST --build-arg=KUBERNETES_SERVICE_HOST=$host \
|
||||
--build-arg=KUBERNETES_SERVICE_PORT=$port --build-arg=KUBE_CA=$ca --build-arg=KUBE_CERT=$cert \
|
||||
--build-arg=KUBE_DATA=$key && docker compose up -d
|
||||
cp $KUBERNETES_ENV_FILE ./env.env
|
||||
docker build . -t $i --build-arg=HOST=$HOST && docker compose up -d
|
||||
cd ..
|
||||
done
|
||||
|
||||
cd ./oc-deploy/docker/tools && docker compose -f ./docker-compose.dev.yml up hydra-client --force-recreate -d
|
||||
done
|
||||
@@ -1,12 +1,5 @@
|
||||
#!/bin/bash
|
||||
server=$(grep 'server:' ~/.kube/config | awk '{print $2}')
|
||||
|
||||
host=$(ip -4 addr show $(ip route | awk '/default/ {print $5}') | awk '/inet / {print $2}' | cut -d/ -f1)
|
||||
port=6443
|
||||
ca=$(kubectl config view --raw --minify -o jsonpath='{.clusters[0].cluster.certificate-authority-data}')
|
||||
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}')
|
||||
|
||||
export KUBERNETES_ENV_FILE=$(realpath ${KUBERNETES_ENV_FILE=:-"./kube.exemple.env"})
|
||||
export HOST=${HOST:-"http://localhost:8000"}
|
||||
docker network create oc | true
|
||||
|
||||
@@ -14,7 +7,6 @@ docker compose down
|
||||
cd ./tools && docker compose -f ./docker-compose.dev.yml up --force-recreate -d
|
||||
docker compose -f ./docker-compose.traefik.yml up --force-recreate -d && cd ..
|
||||
|
||||
|
||||
cd ../..
|
||||
|
||||
REPOS=(
|
||||
@@ -36,15 +28,7 @@ do
|
||||
docker kill $i | true
|
||||
docker rm $i | true
|
||||
cd ./$i
|
||||
cat > ./env.env <<EOF
|
||||
KUBERNETES_SERVICE_HOST=$hostdocker
|
||||
KUBERNETES_SERVICE_PORT=$port
|
||||
KUBE_CA="$ca"
|
||||
KUBE_CERT="$cert"
|
||||
KUBE_DATA="$key"
|
||||
EOF
|
||||
cp $KUBERNETES_ENV_FILE ./env.env
|
||||
make run-docker
|
||||
cd ..
|
||||
done
|
||||
|
||||
cd ./oc-deploy/docker/tools && docker compose -f ./docker-compose.dev.yml up hydra-client --force-recreate -d
|
||||
@@ -1,23 +0,0 @@
|
||||
[
|
||||
{
|
||||
"client_id": "oc-auth",
|
||||
"client_secret": "oc-auth-got-secret",
|
||||
"client_name": "oc-auth",
|
||||
"grant_types": [
|
||||
"implicit",
|
||||
"refresh_token",
|
||||
"authorization_code",
|
||||
"client_credentials"
|
||||
],
|
||||
"response_types": [
|
||||
"id_token",
|
||||
"token",
|
||||
"code"
|
||||
],
|
||||
"scope": "openid profile email roles",
|
||||
"redirect_uris": [
|
||||
"http://localhost:8000"
|
||||
],
|
||||
"token_endpoint_auth_method": "client_secret_post"
|
||||
}
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
apiVersion: v1
|
||||
clusters:
|
||||
- cluster:
|
||||
certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkakNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTnpNeE1qY3dPVFl3SGhjTk1qWXdNekV3TURjeE9ERTJXaGNOTXpZd016QTNNRGN4T0RFMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTnpNeE1qY3dPVFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFReG81cXQ0MGxEekczRHJKTE1wRVBrd0ZBY1FmbC8vVE1iWjZzemMreHAKbmVzVzRTSTdXK1lWdFpRYklmV2xBMTRaazQvRFlDMHc1YlgxZU94RVVuL0pvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVXBLM2pGK25IRlZSbDcwb3ZRVGZnCmZabGNQZE13Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnVnkyaUx0Y0xaYm1vTnVoVHdKbU5sWlo3RVlBYjJKNW0KSjJYbG1UbVF5a2tDSUhLbzczaDBkdEtUZTlSa0NXYTJNdStkS1FzOXRFU0tBV0x1emlnYXBHYysKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
|
||||
server: https://127.0.0.1:6443
|
||||
name: default
|
||||
contexts:
|
||||
- context:
|
||||
cluster: default
|
||||
user: default
|
||||
name: default
|
||||
current-context: default
|
||||
kind: Config
|
||||
users:
|
||||
- name: default
|
||||
user:
|
||||
client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrakNDQVRlZ0F3SUJBZ0lJQUkvSUg2R2Rodm93Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOemN6TVRJM01EazJNQjRYRFRJMk1ETXhNREEzTVRneE5sb1hEVEkzTURNeApNREEzTVRneE5sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJQTTdBVEZQSmFMMjUrdzAKUU1vZUIxV2hBRW4vWnViM0tSRERrYnowOFhwQWJ2akVpdmdnTkdpdG4wVmVsaEZHamRmNHpBT29Nd1J3M21kbgpYSGtHVDB5alNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCUVZLOThaMEMxcFFyVFJSMGVLZHhIa2o0ejFJREFLQmdncWhrak9QUVFEQWdOSkFEQkcKQWlFQXZYWll6Zk9iSUtlWTRtclNsRmt4ZS80a0E4K01ieDc1UDFKRmNlRS8xdGNDSVFDNnM0ZXlZclhQYmNWSgpxZm5EamkrZ1RacGttN0tWSTZTYTlZN2FSRGFabUE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlCZURDQ0FSMmdBd0lCQWdJQkFEQUtCZ2dxaGtqT1BRUURBakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwClpXNTBMV05oUURFM056TXhNamN3T1RZd0hoY05Nall3TXpFd01EY3hPREUyV2hjTk16WXdNekEzTURjeE9ERTIKV2pBak1TRXdId1lEVlFRRERCaHJNM010WTJ4cFpXNTBMV05oUURFM056TXhNamN3T1RZd1dUQVRCZ2NxaGtqTwpQUUlCQmdncWhrak9QUU1CQndOQ0FBUzV1NGVJbStvVnV1SFI0aTZIOU1kVzlyUHdJbFVPNFhIMEJWaDRUTGNlCkNkMnRBbFVXUW5FakxMdlpDWlVaYTlzTlhKOUVtWWt5S0dtQWR2TE9FbUVrbzBJd1FEQU9CZ05WSFE4QkFmOEUKQkFNQ0FxUXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QWRCZ05WSFE0RUZnUVVGU3ZmR2RBdGFVSzAwVWRIaW5jUgo1SStNOVNBd0NnWUlLb1pJemowRUF3SURTUUF3UmdJaEFMY2xtQnR4TnpSVlBvV2hoVEVKSkM1Z3VNSGsvcFZpCjFvYXJ2UVJxTWRKcUFpRUEyR1dNTzlhZFFYTEQwbFZKdHZMVkc1M3I0M0lxMHpEUUQwbTExMVZyL1MwPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
|
||||
client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUVkSTRZN3lRU1ZwRGNrblhsQmJEaXBWZHRMWEVsYVBkN3VBZHdBWFFya2xvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFOHpzQk1VOGxvdmJuN0RSQXloNEhWYUVBU2Y5bTV2Y3BFTU9SdlBUeGVrQnUrTVNLK0NBMAphSzJmUlY2V0VVYU4xL2pNQTZnekJIRGVaMmRjZVFaUFRBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo=
|
||||
@@ -1,4 +1,4 @@
|
||||
version: '3.9'
|
||||
version: '3.4'
|
||||
|
||||
services:
|
||||
mongo:
|
||||
@@ -76,32 +76,12 @@ services:
|
||||
SECRETS_SYSTEM: oc-auth-got-secret
|
||||
LOG_LEAK_SENSITIVE_VALUES: true
|
||||
# OAUTH2_TOKEN_HOOK_URL: http://oc-auth:8080/oc/claims
|
||||
HYDRA_ADMIN_URL: http://hydra:4445
|
||||
URLS_SELF_ISSUER: http://localhost:8000/hydra
|
||||
URLS_SELF_PUBLIC: http://localhost:8000/hydra
|
||||
URLS_LOGIN: http://localhost:8000/auth/login
|
||||
URLS_CONSENT: http://localhost:8000/auth/consent
|
||||
URLS_LOGOUT: http://localhost:8000/auth/logout
|
||||
URLS_ERROR: http://localhost:8000/l
|
||||
STRATEGIES_ACCESS_TOKEN: jwt
|
||||
URLS_SELF_ISSUER: http://hydra:4444
|
||||
URLS_SELF_PUBLIC: http://hydra:4444
|
||||
WEBFINGER_OIDC_DISCOVERY_SUPPORTED_SCOPES: profile,email,phone,roles
|
||||
WEBFINGER_OIDC_DISCOVERY_SUPPORTED_CLAIMS: name,family_name,given_name,nickname,email,phone_number
|
||||
DSN: memory
|
||||
user: root
|
||||
entrypoint: >
|
||||
sh -c "
|
||||
hydra serve all --dev &
|
||||
echo '⏳ Waiting for Hydra admin API...' &&
|
||||
until wget -q --spider http://localhost:4445/health/ready; do
|
||||
sleep 2;
|
||||
done &&
|
||||
echo '✅ Hydra is ready. Importing clients...' &&
|
||||
hydra import oauth2-client /clients.json -e http://hydra:4445 &&
|
||||
echo '🚀 Clients imported.' &&
|
||||
wait
|
||||
"
|
||||
volumes:
|
||||
- ./clients.json:/clients.json
|
||||
command: serve all --dev
|
||||
networks:
|
||||
- oc
|
||||
ports:
|
||||
@@ -110,13 +90,43 @@ services:
|
||||
deploy:
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.hydra.entrypoints=web"
|
||||
- "traefik.http.routers.hydra.rule=PathPrefix(`/hydra`)"
|
||||
- "traefik.http.services.hydra.loadbalancer.server.port=4444"
|
||||
- "traefik.http.middlewares.hydra-stripprefix.stripprefix.prefixes=/hydra"
|
||||
- "traefik.http.routers.hydra.middlewares=hydra-stripprefix"
|
||||
hydra-client:
|
||||
image: oryd/hydra:v2.2.0
|
||||
container_name: hydra-client
|
||||
environment:
|
||||
HYDRA_ADMIN_URL: http://hydra:4445
|
||||
ORY_SDK_URL: http://hydra:4445
|
||||
command:
|
||||
- create
|
||||
- oauth2-client
|
||||
- --skip-tls-verify
|
||||
- --name
|
||||
- test-client
|
||||
- --secret
|
||||
- oc-auth-got-secret
|
||||
- --response-type
|
||||
- id_token,token,code
|
||||
- --grant-type
|
||||
- implicit,refresh_token,authorization_code,client_credentials
|
||||
- --scope
|
||||
- openid,profile,email,roles
|
||||
- --token-endpoint-auth-method
|
||||
- client_secret_post
|
||||
- --redirect-uri
|
||||
- http://localhost:3000
|
||||
|
||||
networks:
|
||||
- oc
|
||||
deploy:
|
||||
restart_policy:
|
||||
condition: none
|
||||
depends_on:
|
||||
- hydra
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://hydra:4445"]
|
||||
interval: 10s
|
||||
timeout: 10s
|
||||
retries: 10
|
||||
ldap:
|
||||
image: pgarrett/ldap-alpine
|
||||
container_name: ldap
|
||||
@@ -143,24 +153,10 @@ services:
|
||||
container_name: keto
|
||||
networks:
|
||||
- oc
|
||||
oc-front:
|
||||
image: 'opencloudregistry/oc-front:latest'
|
||||
container_name: oc-front
|
||||
ports:
|
||||
- 80:80
|
||||
networks:
|
||||
- oc
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.http.routers.front.entrypoints=web"
|
||||
- "traefik.http.routers.front.rule=PathPrefix(`/`)"
|
||||
- "traefik.http.services.front.loadbalancer.server.port=80"
|
||||
- "traefik.http.middlewares.front-stripprefix.stripprefix.prefixes=/"
|
||||
- "traefik.http.routers.front.middlewares=front-stripprefix"
|
||||
|
||||
volumes:
|
||||
oc-data:
|
||||
|
||||
networks:
|
||||
oc:
|
||||
external: true
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
version: '3.9'
|
||||
version: '3.4'
|
||||
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:v3.6
|
||||
image: traefik:v2.10.4
|
||||
container_name: traefik
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
@@ -10,13 +10,11 @@ services:
|
||||
command:
|
||||
- "--api.insecure=true"
|
||||
- "--providers.docker=true"
|
||||
- "--providers.docker.exposedbydefault=false"
|
||||
- "--entrypoints.web.address=:8000"
|
||||
user: root
|
||||
ports:
|
||||
- "8000:8000" # Expose Traefik on port 8000
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
|
||||
volumes:
|
||||
oc-data:
|
||||
@@ -24,4 +22,3 @@ volumes:
|
||||
networks:
|
||||
oc:
|
||||
external: true
|
||||
|
||||
|
||||
@@ -1,117 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Login</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background: #f4f6f9;
|
||||
display: flex;
|
||||
height: 100vh;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.login-container {
|
||||
background: white;
|
||||
padding: 40px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 5px 20px rgba(0,0,0,0.1);
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
input {
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
margin-top: 10px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
button {
|
||||
width: 100%;
|
||||
margin-top: 20px;
|
||||
padding: 10px;
|
||||
background: #007BFF;
|
||||
border: none;
|
||||
color: white;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background: #0056b3;
|
||||
}
|
||||
|
||||
.error {
|
||||
color: red;
|
||||
margin-top: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div class="login-container">
|
||||
<h2>Connexion</h2>
|
||||
|
||||
<form id="loginForm">
|
||||
<input type="text" id="username" placeholder="Username" required />
|
||||
<input type="password" id="password" placeholder="Password" required />
|
||||
<button type="submit">Login</button>
|
||||
<div class="error" id="error"></div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function getLoginChallenge() {
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
return params.get("login_challenge");
|
||||
}
|
||||
|
||||
document.getElementById("loginForm").addEventListener("submit", async function(event) {
|
||||
event.preventDefault();
|
||||
|
||||
const username = document.getElementById("username").value;
|
||||
const password = document.getElementById("password").value;
|
||||
const loginChallenge = getLoginChallenge();
|
||||
|
||||
if (!loginChallenge) {
|
||||
document.getElementById("error").innerText = "Missing login_challenge in URL";
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch("http://localhost:8000/auth/login", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
},
|
||||
body: JSON.stringify({
|
||||
login_challenge: loginChallenge,
|
||||
username: username,
|
||||
password: password
|
||||
})
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error("Login failed");
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
console.log("Success:", data);
|
||||
alert("Login success");
|
||||
|
||||
} catch (err) {
|
||||
document.getElementById("error").innerText = "Login failed";
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
9
env.env
9
env.env
@@ -1,5 +1,4 @@
|
||||
KUBERNETES_SERVICE_HOST=127.0.0.1
|
||||
KUBERNETES_SERVICE_PORT=6443
|
||||
KUBE_CA=""
|
||||
KUBE_CERT=""
|
||||
KUBE_DATA=""
|
||||
KUBERNETES_SERVICE_HOST=192.168.1.169
|
||||
KUBE_CA="LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzTWpNeE1USXdNell3SGhjTk1qUXdPREE0TVRBeE16VTJXaGNOTXpRd09EQTJNVEF4TXpVMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzTWpNeE1USXdNell3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFTVlk3ZHZhNEdYTVdkMy9jMlhLN3JLYjlnWXgyNSthaEE0NmkyNVBkSFAKRktQL2UxSVMyWVF0dzNYZW1TTUQxaStZdzJSaVppNUQrSVZUamNtNHdhcnFvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWtlUVJpNFJiODduME5yRnZaWjZHClc2SU55NnN3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnRXA5ck04WmdNclRZSHYxZjNzOW5DZXZZeWVVa3lZUk4KWjUzazdoaytJS1FDSVFDbk05TnVGKzlTakIzNDFacGZ5ays2NEpWdkpSM3BhcmVaejdMd2lhNm9kdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K"
|
||||
KUBE_CERT="LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJWUxWNkFPQkdrU1F3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOekl6TVRFeU1ETTJNQjRYRFRJME1EZ3dPREV3TVRNMU5sb1hEVEkxTURndwpPREV3TVRNMU5sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJGQ2Q1MFdPeWdlQ2syQzcKV2FrOWY4MVAvSkJieVRIajRWOXBsTEo0ck5HeHFtSjJOb2xROFYxdUx5RjBtOTQ2Nkc0RmRDQ2dqaXFVSk92Swp3NVRPNnd5alNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCVFJkOFI5cXVWK2pjeUVmL0ovT1hQSzMyS09XekFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlFQTArbThqTDBJVldvUTZ0dnB4cFo4NVlMalF1SmpwdXM0aDdnSXRxS3NmUVVDSUI2M2ZNdzFBMm5OVWU1TgpIUGZOcEQwSEtwcVN0Wnk4djIyVzliYlJUNklZCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzTWpNeE1USXdNell3SGhjTk1qUXdPREE0TVRBeE16VTJXaGNOTXpRd09EQTJNVEF4TXpVMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzTWpNeE1USXdNell3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRc3hXWk9pbnIrcVp4TmFEQjVGMGsvTDF5cE01VHAxOFRaeU92ektJazQKRTFsZWVqUm9STW0zNmhPeVljbnN3d3JoNnhSUnBpMW5RdGhyMzg0S0Z6MlBvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVTBYZkVmYXJsZm8zTWhIL3lmemx6Cnl0OWlqbHN3Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQUxJL2dNYnNMT3MvUUpJa3U2WHVpRVMwTEE2cEJHMXgKcnBlTnpGdlZOekZsQWlFQW1wdjBubjZqN3M0MVI0QzFNMEpSL0djNE53MHdldlFmZWdEVGF1R2p3cFk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K"
|
||||
KUBE_DATA="LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSU5ZS1BFb1dhd1NKUzJlRW5oWmlYMk5VZlY1ZlhKV2krSVNnV09TNFE5VTlvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFVUozblJZN0tCNEtUWUx0WnFUMS96VS84a0Z2Sk1lUGhYMm1Vc25pczBiR3FZblkyaVZEeApYVzR2SVhTYjNqcm9iZ1YwSUtDT0twUWs2OHJEbE03ckRBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo="
|
||||
@@ -1,12 +1,3 @@
|
||||
## TO START DEMO
|
||||
|
||||
`./start-demo.sh <num of cluster>`
|
||||
|
||||
To navigate between clusters : `export KUBECONFIG=configCluster<n>`
|
||||
|
||||
After mongodb pod launch on every cluster:
|
||||
|
||||
`./add-datas-demo.sh <num of cluster>`
|
||||
|
||||
## Deploy the opencloud chart
|
||||
|
||||
@@ -16,11 +7,6 @@ After mongodb pod launch on every cluster:
|
||||
|
||||
Feel free to modify/create a new opencloud/dev-values.yaml. Provided setup should work out of the box, but is not suitable for production usage.
|
||||
|
||||
## k8s deployment
|
||||
|
||||
- Pull oc-k8s file put it in /usr/local/bin
|
||||
- oc-k8s create values <namespace>
|
||||
|
||||
## Hostname settings
|
||||
|
||||
Edit your /etc/hosts file, and add following line:
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
start=1
|
||||
end=${1:-1}
|
||||
|
||||
for ((i=start; i<=end; i++)); do
|
||||
export KUBECONFIG=~/.kube/configCluster$i
|
||||
oc-k8s upgrade db -d opencloud -r cluster-$i -n cluster-$i -f ./datas/cluster-$i
|
||||
done
|
||||
@@ -1,656 +0,0 @@
|
||||
env: cluster-1 # For storage class provisioning
|
||||
clusterName: cluster-1
|
||||
hostNetwork: true
|
||||
host: beta.opencloud.com
|
||||
hostPort: 9600
|
||||
registryHost: opencloudregistry
|
||||
scheme: http
|
||||
|
||||
secrets:
|
||||
keys:
|
||||
enabled: true
|
||||
name: libp2p-keys
|
||||
mountPath: ./pem
|
||||
psk:
|
||||
enabled: true
|
||||
name: libp2p-psk
|
||||
mountPath: ./psk
|
||||
|
||||
mongo-express:
|
||||
enabled: true
|
||||
mongodbServer: "cluster-1-mongodb.cluster-1" # TO LOOK AFTER
|
||||
mongodbPort: 27017
|
||||
mongodbEnableAdmin: true
|
||||
mongodbAdminUsername: admin
|
||||
mongodbAdminPassword: admin
|
||||
siteBaseUrl: /mongoexpress
|
||||
basicAuthUsername: admin
|
||||
basicAuthPassword: admin
|
||||
mongodb:
|
||||
enabled: false
|
||||
|
||||
mongodb:
|
||||
enabled: true
|
||||
global:
|
||||
defaultStorageClass: "standard"
|
||||
storageClass: "standard"
|
||||
architecture: standalone
|
||||
useStatefulSet: false
|
||||
auth:
|
||||
enabled: true
|
||||
rootUser: admin
|
||||
rootPassword: admin
|
||||
databases: [ opencloud ]
|
||||
usernames: [ admin ]
|
||||
passwords: [ admin ]
|
||||
resourcesPreset: "small"
|
||||
replicaCount: 1
|
||||
persistence:
|
||||
enabled: true
|
||||
create: false # do not auto-create
|
||||
existingClaim: mongo-pvc
|
||||
storageClassName: "standard"
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
size: 5Gi
|
||||
persistentVolumeClaimRetentionPolicy:
|
||||
enabled: true
|
||||
whenDeleted: Retain
|
||||
whenScaled: Retain
|
||||
arbiter:
|
||||
enabled: false
|
||||
livenessProbe:
|
||||
enabled: true
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
|
||||
nats:
|
||||
enabled: true
|
||||
extraEnv:
|
||||
- name: NATS_MAX_FILE_DESCRIPTORS
|
||||
value: "65536"
|
||||
extraVolumeMounts:
|
||||
- name: nats-config
|
||||
mountPath: /etc/nats
|
||||
config:
|
||||
jetstream:
|
||||
enabled: true
|
||||
fileStore:
|
||||
enabled: true
|
||||
dir: /data/jetstream # mountPath used by template
|
||||
# pvc block must live here
|
||||
pvc:
|
||||
enabled: true
|
||||
# if you already created the claim, set existingClaim:
|
||||
existingClaim: nats-pvc
|
||||
# storageClassName: local-path or standard (use the SC in your cluster)
|
||||
storageClassName: standard
|
||||
size: 50Gi
|
||||
# name is the volume name used in volumeMounts; keep it simple
|
||||
name: nats-jetstream
|
||||
|
||||
openldap:
|
||||
enabled: true
|
||||
test:
|
||||
enabled: false
|
||||
ltb-passwd:
|
||||
enabled: false
|
||||
replicaCount: 1
|
||||
image:
|
||||
repository: osixia/openldap
|
||||
tls:
|
||||
enabled: false
|
||||
env:
|
||||
LDAP_ORGANISATION: Opencloud
|
||||
LDAP_DOMAIN: opencloud.com
|
||||
LDAP_BACKEND: "mdb"
|
||||
LDAP_TLS: "false"
|
||||
LDAP_TLS_ENFORCE: "false"
|
||||
LDAP_REMOVE_CONFIG_AFTER_SETUP: "true"
|
||||
adminPassword: admin
|
||||
configPassword: configadmin
|
||||
phpldapadmin:
|
||||
enabled: false
|
||||
persistence:
|
||||
enabled: true
|
||||
create: false # do not auto-create
|
||||
existingClaim: openldap-pvc
|
||||
accessMode: ReadWriteOnce
|
||||
size: 10Mi
|
||||
storageClassName: ""
|
||||
replication:
|
||||
enabled: false
|
||||
externalLDAP:
|
||||
enabled: false
|
||||
url: 389
|
||||
bindDN: uid=admin,dc=opencloud,dc=com
|
||||
bindPassword: admin
|
||||
customLdifFiles:
|
||||
01-schema.ldif: |-
|
||||
dn: ou=groups,dc=opencloud,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: groups
|
||||
|
||||
dn: ou=users,dc=opencloud,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: users
|
||||
|
||||
dn: cn=lastGID,dc=opencloud,dc=com
|
||||
objectClass: device
|
||||
objectClass: top
|
||||
description: Records the last GID used to create a Posix group. This prevents the re-use of a GID from a deleted group.
|
||||
cn: lastGID
|
||||
serialNumber: 2001
|
||||
|
||||
dn: cn=lastUID,dc=opencloud,dc=com
|
||||
objectClass: device
|
||||
objectClass: top
|
||||
serialNumber: 2001
|
||||
description: Records the last UID used to create a Posix account. This prevents the re-use of a UID from a deleted account.
|
||||
cn: lastUID
|
||||
|
||||
dn: cn=everybody,ou=groups,dc=opencloud,dc=com
|
||||
objectClass: top
|
||||
objectClass: posixGroup
|
||||
cn: everybody
|
||||
memberUid: admin
|
||||
gidNumber: 2003
|
||||
|
||||
02-ldapadmin.ldif : |-
|
||||
dn: cn=ldapadmin,ou=groups,dc=opencloud,dc=com
|
||||
objectClass: top
|
||||
objectClass: posixGroup
|
||||
cn: ldapadmin
|
||||
memberUid: ldapadmin
|
||||
gidNumber: 2001
|
||||
|
||||
dn: uid=ldapadmin,ou=users,dc=opencloud,dc=com
|
||||
givenName: ldap
|
||||
sn: admin
|
||||
uid: ldapadmin
|
||||
cn: ldapadmin
|
||||
mail: ldapadmin@example.com
|
||||
objectClass: person
|
||||
objectClass: inetOrgPerson
|
||||
objectClass: posixAccount
|
||||
userPassword: sai1yeiT
|
||||
uidNumber: 2001
|
||||
gidNumber: 2001
|
||||
loginShell: /bin/bash
|
||||
homeDirectory: /home/ldapadmin
|
||||
|
||||
03-opencloudadmin.ldif : |-
|
||||
dn: uid=admin,ou=users,dc=opencloud,dc=com
|
||||
objectClass: inetOrgPerson
|
||||
cn: Admin
|
||||
sn: Istrator
|
||||
uid: admin
|
||||
userPassword: {SSHA}HMWJO7XCw80he2lqMf0PHzvvF14p6aLE
|
||||
mail: morgane.roques@irt-saintexupery.com
|
||||
ou: users
|
||||
|
||||
dn: ou=AppRoles,dc=opencloud,dc=com
|
||||
objectClass: organizationalunit
|
||||
ou: AppRoles
|
||||
description: AppRoles
|
||||
|
||||
dn: ou=Opencloud,ou=AppRoles,dc=opencloud,dc=com
|
||||
objectClass: organizationalunit
|
||||
ou: Opencloud
|
||||
description: Opencloud
|
||||
|
||||
prometheus:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
server:
|
||||
persistentVolume:
|
||||
enabled: true
|
||||
size: 5Gi
|
||||
service:
|
||||
type: ClusterIP
|
||||
resources:
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
|
||||
# ldap user manager configuration
|
||||
ldapUserManager:
|
||||
enabled: true
|
||||
env:
|
||||
SERVER_HOSTNAME: ldap.opencloud.com
|
||||
LDAP_BASE_DN: dc=opencloud,dc=com
|
||||
LDAP_REQUIRE_STARTTLS: "false"
|
||||
LDAP_ADMINS_GROUP: ldapadmin
|
||||
LDAP_ADMIN_BIND_DN: cn=admin,dc=opencloud,dc=com
|
||||
LDAP_ADMIN_BIND_PWD: "{SSHA}HMWJO7XCw80he2lqMf0PHzvvF14p6aLE"
|
||||
LDAP_IGNORE_CERT_ERRORS: "true"
|
||||
EMAIL_DOMAIN: ""
|
||||
NO_HTTPS: "true"
|
||||
SERVER_PATH: "/users"
|
||||
ORGANISATION_NAME: Opencloud
|
||||
LDAP_USER_OU: users
|
||||
LDAP_GROUP_OU: groups
|
||||
ACCEPT_WEAK_PASSWORDS: "true"
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
|
||||
traefik:
|
||||
enabled: true
|
||||
service:
|
||||
type: NodePort
|
||||
ports:
|
||||
web:
|
||||
port: 80
|
||||
nodePort: 30950
|
||||
websecure:
|
||||
port: 443
|
||||
nodePort: 30951
|
||||
ingressRoute:
|
||||
dashboard:
|
||||
enabled: true
|
||||
matchRule: Host(`localhost`) && PathPrefix(`/api`) || PathPrefix(`/dashboard`)
|
||||
entryPoints: [web]
|
||||
ports:
|
||||
web:
|
||||
port: 80
|
||||
nodePort: 30950
|
||||
websecure:
|
||||
port: 443
|
||||
nodePort: 30951
|
||||
|
||||
hydra:
|
||||
enabled: true
|
||||
maester:
|
||||
enabled: true
|
||||
secret:
|
||||
enabled: false
|
||||
nameOverride: hydra-secret
|
||||
hashSumEnabled: false
|
||||
hydra:
|
||||
dev: true
|
||||
existingSecret: hydra-secret
|
||||
config:
|
||||
dsn: memory
|
||||
urls:
|
||||
# login: https://localhost-login/authentication/login
|
||||
# consent: https://localhost-consent/consent/consent
|
||||
# logout: https://localhost-logout/authentication/logout
|
||||
self:
|
||||
issuer: "http://cluster-1-hydra-public.cluster-1:4444/"
|
||||
|
||||
keto:
|
||||
enabled: true
|
||||
keto:
|
||||
config:
|
||||
serve:
|
||||
read:
|
||||
port: 4466
|
||||
write:
|
||||
port: 4467
|
||||
metrics:
|
||||
port: 4468
|
||||
namespaces:
|
||||
- id: 0
|
||||
name: open-cloud
|
||||
dsn: memory
|
||||
|
||||
|
||||
loki:
|
||||
enabled: true
|
||||
loki:
|
||||
auth_enabled: false
|
||||
commonConfig:
|
||||
replication_factor: 1
|
||||
storage:
|
||||
storageClassName: standard
|
||||
type: filesystem
|
||||
filesystem:
|
||||
chunks_directory: /var/loki/chunks
|
||||
rules_directory: /var/loki/rules
|
||||
admin_api_directory: /var/loki/admin
|
||||
storage_config:
|
||||
boltdb_shipper:
|
||||
active_index_directory: /var/loki/index
|
||||
filesystem:
|
||||
directory: /var/loki/chunks
|
||||
limits_config:
|
||||
allow_structured_metadata: false
|
||||
schemaConfig:
|
||||
configs:
|
||||
- from: "2020-01-01"
|
||||
store: boltdb-shipper
|
||||
object_store: filesystem
|
||||
schema: v11
|
||||
index:
|
||||
prefix: index_
|
||||
period: 24h
|
||||
ingester:
|
||||
chunk_encoding: snappy
|
||||
tracing:
|
||||
enabled: true
|
||||
querier:
|
||||
max_concurrent: 2
|
||||
|
||||
deploymentMode: SingleBinary
|
||||
singleBinary:
|
||||
extraVolumes:
|
||||
- name: loki-storage
|
||||
persistentVolumeClaim:
|
||||
claimName: loki-pvc
|
||||
persistence:
|
||||
enabled: false # Deactivate loki auto provisioning, rely on existing PVC
|
||||
accessMode: ReadWriteOnce
|
||||
size: 1Gi
|
||||
storageClassName: standard
|
||||
create: false
|
||||
claimName: loki-pvc
|
||||
|
||||
extraVolumeMounts:
|
||||
- name: loki-storage
|
||||
mountPath: /var/loki
|
||||
replicas: 1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 3
|
||||
memory: 4Gi
|
||||
requests:
|
||||
cpu: 1
|
||||
memory: 0.5Gi
|
||||
extraEnv:
|
||||
- name: GOMEMLIMIT
|
||||
value: 3750MiB
|
||||
|
||||
chunksCache:
|
||||
# default is 500MB, with limited memory keep this smaller
|
||||
writebackSizeLimit: 10MB
|
||||
|
||||
# Enable minio for storage
|
||||
minio:
|
||||
enabled: false
|
||||
# Zero out replica counts of other deployment modes
|
||||
backend:
|
||||
replicas: 0
|
||||
read:
|
||||
replicas: 0
|
||||
write:
|
||||
replicas: 0
|
||||
ingester:
|
||||
replicas: 0
|
||||
querier:
|
||||
replicas: 0
|
||||
queryFrontend:
|
||||
replicas: 0
|
||||
queryScheduler:
|
||||
replicas: 0
|
||||
distributor:
|
||||
replicas: 0
|
||||
compactor:
|
||||
replicas: 0
|
||||
indexGateway:
|
||||
replicas: 0
|
||||
bloomCompactor:
|
||||
replicas: 0
|
||||
bloomGateway:
|
||||
replicas: 0
|
||||
|
||||
grafana:
|
||||
enabled: true
|
||||
adminUser: admin
|
||||
adminPassword: admin
|
||||
persistence:
|
||||
enabled: true
|
||||
size: 1Gi
|
||||
service:
|
||||
type: ClusterIP
|
||||
|
||||
argo-workflows:
|
||||
enabled: false
|
||||
workflow:
|
||||
serviceAccount:
|
||||
create: false
|
||||
name: argo-workflow
|
||||
rbac:
|
||||
create: false # Manual provisioning
|
||||
controller:
|
||||
workflowNamespaces: [] #All of them
|
||||
controller:
|
||||
workflowDefaults:
|
||||
spec:
|
||||
serviceAccountName: argo-workflow
|
||||
|
||||
ocAuth:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-auth:latest
|
||||
authType: hydra
|
||||
keto:
|
||||
adminRole: admin
|
||||
hydra:
|
||||
openCloudOauth2ClientSecretName: opencloud-oauth2-client-secret
|
||||
ldap:
|
||||
bindDn: cn=admin,dc=opencloud,dc=com
|
||||
binPwd: admin
|
||||
baseDn: dc=opencloud,dc=com
|
||||
userBaseDn: ou=users,dc=opencloud,dc=com
|
||||
roleBaseDn: ou=AppRoles,dc=opencloud,dc=com
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocFront:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-front:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocWorkspace:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-workspace:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
|
||||
ocShared:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-shared:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocWorkflow:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-workflow:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocCatalog:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-catalog:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocPeer:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-peer:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocDatacenter:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-datacenter:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocDiscovery:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-schedulerd:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocSchedulerd:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-schedulerd:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocScheduler:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-scheduler:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
docker-registry-ui:
|
||||
enabled: true
|
||||
ui:
|
||||
title: "opencloud docker registry"
|
||||
proxy: true
|
||||
dockerRegistryUrl: "http://cluster-1-docker-registry-ui-registry-server.cluster-1.svc.cluster.local:5000"
|
||||
registry:
|
||||
secretName: regcred
|
||||
enabled: true
|
||||
dataVolume:
|
||||
persistentVolumeClaim:
|
||||
claimName: docker-registry-pvc
|
||||
persistence:
|
||||
create: false
|
||||
existingClaim: docker-registry-pvc
|
||||
accessMode: ReadWriteOnce
|
||||
storage: 5Gi
|
||||
storageClassName: "standard"
|
||||
@@ -1,656 +0,0 @@
|
||||
env: cluster-2 # For storage class provisioning
|
||||
clusterName: cluster-2
|
||||
hostNetwork: true
|
||||
host: beta.opencloud.com
|
||||
hostPort: 9700
|
||||
registryHost: opencloudregistry
|
||||
scheme: http
|
||||
|
||||
secrets:
|
||||
keys:
|
||||
enabled: true
|
||||
name: libp2p-keys
|
||||
mountPath: ./pem
|
||||
psk:
|
||||
enabled: true
|
||||
name: libp2p-psk
|
||||
mountPath: ./psk
|
||||
|
||||
mongo-express:
|
||||
enabled: true
|
||||
mongodbServer: "cluster-2-mongodb.cluster-2" # TO LOOK AFTER
|
||||
mongodbPort: 27017
|
||||
mongodbEnableAdmin: true
|
||||
mongodbAdminUsername: admin
|
||||
mongodbAdminPassword: admin
|
||||
siteBaseUrl: /mongoexpress
|
||||
basicAuthUsername: admin
|
||||
basicAuthPassword: admin
|
||||
mongodb:
|
||||
enabled: false
|
||||
|
||||
mongodb:
|
||||
enabled: true
|
||||
global:
|
||||
defaultStorageClass: "standard"
|
||||
storageClass: "standard"
|
||||
architecture: standalone
|
||||
useStatefulSet: false
|
||||
auth:
|
||||
enabled: true
|
||||
rootUser: admin
|
||||
rootPassword: admin
|
||||
databases: [ opencloud ]
|
||||
usernames: [ admin ]
|
||||
passwords: [ admin ]
|
||||
resourcesPreset: "small"
|
||||
replicaCount: 1
|
||||
persistence:
|
||||
enabled: true
|
||||
create: false # do not auto-create
|
||||
existingClaim: mongo-pvc
|
||||
storageClassName: "standard"
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
size: 5Gi
|
||||
persistentVolumeClaimRetentionPolicy:
|
||||
enabled: true
|
||||
whenDeleted: Retain
|
||||
whenScaled: Retain
|
||||
arbiter:
|
||||
enabled: false
|
||||
livenessProbe:
|
||||
enabled: true
|
||||
readinessProbe:
|
||||
enabled: true
|
||||
|
||||
nats:
|
||||
enabled: true
|
||||
extraEnv:
|
||||
- name: NATS_MAX_FILE_DESCRIPTORS
|
||||
value: "65536"
|
||||
extraVolumeMounts:
|
||||
- name: nats-config
|
||||
mountPath: /etc/nats
|
||||
config:
|
||||
jetstream:
|
||||
enabled: true
|
||||
fileStore:
|
||||
enabled: true
|
||||
dir: /data/jetstream # mountPath used by template
|
||||
# pvc block must live here
|
||||
pvc:
|
||||
enabled: true
|
||||
# if you already created the claim, set existingClaim:
|
||||
existingClaim: nats-pvc
|
||||
# storageClassName: local-path or standard (use the SC in your cluster)
|
||||
storageClassName: standard
|
||||
size: 50Gi
|
||||
# name is the volume name used in volumeMounts; keep it simple
|
||||
name: nats-jetstream
|
||||
|
||||
openldap:
|
||||
enabled: true
|
||||
test:
|
||||
enabled: false
|
||||
ltb-passwd:
|
||||
enabled: false
|
||||
replicaCount: 1
|
||||
image:
|
||||
repository: osixia/openldap
|
||||
tls:
|
||||
enabled: false
|
||||
env:
|
||||
LDAP_ORGANISATION: Opencloud
|
||||
LDAP_DOMAIN: opencloud.com
|
||||
LDAP_BACKEND: "mdb"
|
||||
LDAP_TLS: "false"
|
||||
LDAP_TLS_ENFORCE: "false"
|
||||
LDAP_REMOVE_CONFIG_AFTER_SETUP: "true"
|
||||
adminPassword: admin
|
||||
configPassword: configadmin
|
||||
phpldapadmin:
|
||||
enabled: false
|
||||
persistence:
|
||||
enabled: true
|
||||
create: false # do not auto-create
|
||||
existingClaim: openldap-pvc
|
||||
accessMode: ReadWriteOnce
|
||||
size: 10Mi
|
||||
storageClassName: ""
|
||||
replication:
|
||||
enabled: false
|
||||
externalLDAP:
|
||||
enabled: false
|
||||
url: 389
|
||||
bindDN: uid=admin,dc=opencloud,dc=com
|
||||
bindPassword: admin
|
||||
customLdifFiles:
|
||||
01-schema.ldif: |-
|
||||
dn: ou=groups,dc=opencloud,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: groups
|
||||
|
||||
dn: ou=users,dc=opencloud,dc=com
|
||||
objectClass: organizationalUnit
|
||||
ou: users
|
||||
|
||||
dn: cn=lastGID,dc=opencloud,dc=com
|
||||
objectClass: device
|
||||
objectClass: top
|
||||
description: Records the last GID used to create a Posix group. This prevents the re-use of a GID from a deleted group.
|
||||
cn: lastGID
|
||||
serialNumber: 2001
|
||||
|
||||
dn: cn=lastUID,dc=opencloud,dc=com
|
||||
objectClass: device
|
||||
objectClass: top
|
||||
serialNumber: 2001
|
||||
description: Records the last UID used to create a Posix account. This prevents the re-use of a UID from a deleted account.
|
||||
cn: lastUID
|
||||
|
||||
dn: cn=everybody,ou=groups,dc=opencloud,dc=com
|
||||
objectClass: top
|
||||
objectClass: posixGroup
|
||||
cn: everybody
|
||||
memberUid: admin
|
||||
gidNumber: 2003
|
||||
|
||||
02-ldapadmin.ldif : |-
|
||||
dn: cn=ldapadmin,ou=groups,dc=opencloud,dc=com
|
||||
objectClass: top
|
||||
objectClass: posixGroup
|
||||
cn: ldapadmin
|
||||
memberUid: ldapadmin
|
||||
gidNumber: 2001
|
||||
|
||||
dn: uid=ldapadmin,ou=users,dc=opencloud,dc=com
|
||||
givenName: ldap
|
||||
sn: admin
|
||||
uid: ldapadmin
|
||||
cn: ldapadmin
|
||||
mail: ldapadmin@example.com
|
||||
objectClass: person
|
||||
objectClass: inetOrgPerson
|
||||
objectClass: posixAccount
|
||||
userPassword: sai1yeiT
|
||||
uidNumber: 2001
|
||||
gidNumber: 2001
|
||||
loginShell: /bin/bash
|
||||
homeDirectory: /home/ldapadmin
|
||||
|
||||
03-opencloudadmin.ldif : |-
|
||||
dn: uid=admin,ou=users,dc=opencloud,dc=com
|
||||
objectClass: inetOrgPerson
|
||||
cn: Admin
|
||||
sn: Istrator
|
||||
uid: admin
|
||||
userPassword: {SSHA}HMWJO7XCw80he2lqMf0PHzvvF14p6aLE
|
||||
mail: morgane.roques@irt-saintexupery.com
|
||||
ou: users
|
||||
|
||||
dn: ou=AppRoles,dc=opencloud,dc=com
|
||||
objectClass: organizationalunit
|
||||
ou: AppRoles
|
||||
description: AppRoles
|
||||
|
||||
dn: ou=Opencloud,ou=AppRoles,dc=opencloud,dc=com
|
||||
objectClass: organizationalunit
|
||||
ou: Opencloud
|
||||
description: Opencloud
|
||||
|
||||
prometheus:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
server:
|
||||
persistentVolume:
|
||||
enabled: true
|
||||
size: 5Gi
|
||||
service:
|
||||
type: ClusterIP
|
||||
resources:
|
||||
limits:
|
||||
cpu: 500m
|
||||
memory: 512Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
|
||||
# ldap user manager configuration
|
||||
ldapUserManager:
|
||||
enabled: true
|
||||
env:
|
||||
SERVER_HOSTNAME: ldap.opencloud.com
|
||||
LDAP_BASE_DN: dc=opencloud,dc=com
|
||||
LDAP_REQUIRE_STARTTLS: "false"
|
||||
LDAP_ADMINS_GROUP: ldapadmin
|
||||
LDAP_ADMIN_BIND_DN: cn=admin,dc=opencloud,dc=com
|
||||
LDAP_ADMIN_BIND_PWD: "{SSHA}HMWJO7XCw80he2lqMf0PHzvvF14p6aLE"
|
||||
LDAP_IGNORE_CERT_ERRORS: "true"
|
||||
EMAIL_DOMAIN: ""
|
||||
NO_HTTPS: "true"
|
||||
SERVER_PATH: "/users"
|
||||
ORGANISATION_NAME: Opencloud
|
||||
LDAP_USER_OU: users
|
||||
LDAP_GROUP_OU: groups
|
||||
ACCEPT_WEAK_PASSWORDS: "true"
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
|
||||
traefik:
|
||||
enabled: true
|
||||
service:
|
||||
type: NodePort
|
||||
ports:
|
||||
web:
|
||||
port: 80
|
||||
nodePort: 30950
|
||||
websecure:
|
||||
port: 443
|
||||
nodePort: 30951
|
||||
ingressRoute:
|
||||
dashboard:
|
||||
enabled: true
|
||||
matchRule: Host(`localhost`) && PathPrefix(`/api`) || PathPrefix(`/dashboard`)
|
||||
entryPoints: [web]
|
||||
ports:
|
||||
web:
|
||||
port: 80
|
||||
nodePort: 30950
|
||||
websecure:
|
||||
port: 443
|
||||
nodePort: 30951
|
||||
|
||||
hydra:
|
||||
enabled: true
|
||||
maester:
|
||||
enabled: true
|
||||
secret:
|
||||
enabled: false
|
||||
nameOverride: hydra-secret
|
||||
hashSumEnabled: false
|
||||
hydra:
|
||||
dev: true
|
||||
existingSecret: hydra-secret
|
||||
config:
|
||||
dsn: memory
|
||||
urls:
|
||||
# login: https://localhost-login/authentication/login
|
||||
# consent: https://localhost-consent/consent/consent
|
||||
# logout: https://localhost-logout/authentication/logout
|
||||
self:
|
||||
issuer: "http://cluster-2-hydra-public.cluster-2:4444/"
|
||||
|
||||
keto:
|
||||
enabled: true
|
||||
keto:
|
||||
config:
|
||||
serve:
|
||||
read:
|
||||
port: 4466
|
||||
write:
|
||||
port: 4467
|
||||
metrics:
|
||||
port: 4468
|
||||
namespaces:
|
||||
- id: 0
|
||||
name: open-cloud
|
||||
dsn: memory
|
||||
|
||||
|
||||
loki:
|
||||
enabled: true
|
||||
loki:
|
||||
auth_enabled: false
|
||||
commonConfig:
|
||||
replication_factor: 1
|
||||
storage:
|
||||
storageClassName: standard
|
||||
type: filesystem
|
||||
filesystem:
|
||||
chunks_directory: /var/loki/chunks
|
||||
rules_directory: /var/loki/rules
|
||||
admin_api_directory: /var/loki/admin
|
||||
storage_config:
|
||||
boltdb_shipper:
|
||||
active_index_directory: /var/loki/index
|
||||
filesystem:
|
||||
directory: /var/loki/chunks
|
||||
limits_config:
|
||||
allow_structured_metadata: false
|
||||
schemaConfig:
|
||||
configs:
|
||||
- from: "2020-01-01"
|
||||
store: boltdb-shipper
|
||||
object_store: filesystem
|
||||
schema: v11
|
||||
index:
|
||||
prefix: index_
|
||||
period: 24h
|
||||
ingester:
|
||||
chunk_encoding: snappy
|
||||
tracing:
|
||||
enabled: true
|
||||
querier:
|
||||
max_concurrent: 2
|
||||
|
||||
deploymentMode: SingleBinary
|
||||
singleBinary:
|
||||
extraVolumes:
|
||||
- name: loki-storage
|
||||
persistentVolumeClaim:
|
||||
claimName: loki-pvc
|
||||
persistence:
|
||||
enabled: false # Deactivate loki auto provisioning, rely on existing PVC
|
||||
accessMode: ReadWriteOnce
|
||||
size: 1Gi
|
||||
storageClassName: standard
|
||||
create: false
|
||||
claimName: loki-pvc
|
||||
|
||||
extraVolumeMounts:
|
||||
- name: loki-storage
|
||||
mountPath: /var/loki
|
||||
replicas: 1
|
||||
resources:
|
||||
limits:
|
||||
cpu: 3
|
||||
memory: 4Gi
|
||||
requests:
|
||||
cpu: 1
|
||||
memory: 0.5Gi
|
||||
extraEnv:
|
||||
- name: GOMEMLIMIT
|
||||
value: 3750MiB
|
||||
|
||||
chunksCache:
|
||||
# default is 500MB, with limited memory keep this smaller
|
||||
writebackSizeLimit: 10MB
|
||||
|
||||
# Enable minio for storage
|
||||
minio:
|
||||
enabled: false
|
||||
# Zero out replica counts of other deployment modes
|
||||
backend:
|
||||
replicas: 0
|
||||
read:
|
||||
replicas: 0
|
||||
write:
|
||||
replicas: 0
|
||||
ingester:
|
||||
replicas: 0
|
||||
querier:
|
||||
replicas: 0
|
||||
queryFrontend:
|
||||
replicas: 0
|
||||
queryScheduler:
|
||||
replicas: 0
|
||||
distributor:
|
||||
replicas: 0
|
||||
compactor:
|
||||
replicas: 0
|
||||
indexGateway:
|
||||
replicas: 0
|
||||
bloomCompactor:
|
||||
replicas: 0
|
||||
bloomGateway:
|
||||
replicas: 0
|
||||
|
||||
grafana:
|
||||
enabled: true
|
||||
adminUser: admin
|
||||
adminPassword: admin
|
||||
persistence:
|
||||
enabled: true
|
||||
size: 1Gi
|
||||
service:
|
||||
type: ClusterIP
|
||||
|
||||
argo-workflows:
|
||||
enabled: false
|
||||
workflow:
|
||||
serviceAccount:
|
||||
create: false
|
||||
name: argo-workflow
|
||||
rbac:
|
||||
create: false # Manual provisioning
|
||||
controller:
|
||||
workflowNamespaces: [] #All of them
|
||||
controller:
|
||||
workflowDefaults:
|
||||
spec:
|
||||
serviceAccountName: argo-workflow
|
||||
|
||||
ocAuth:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-auth:latest
|
||||
authType: hydra
|
||||
keto:
|
||||
adminRole: admin
|
||||
hydra:
|
||||
openCloudOauth2ClientSecretName: opencloud-oauth2-client-secret
|
||||
ldap:
|
||||
bindDn: cn=admin,dc=opencloud,dc=com
|
||||
binPwd: admin
|
||||
baseDn: dc=opencloud,dc=com
|
||||
userBaseDn: ou=users,dc=opencloud,dc=com
|
||||
roleBaseDn: ou=AppRoles,dc=opencloud,dc=com
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocFront:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-front:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocWorkspace:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-workspace:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
|
||||
ocShared:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-shared:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocWorkflow:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-workflow:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocCatalog:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-catalog:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocPeer:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-peer:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocDatacenter:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-datacenter:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocDiscovery:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-schedulerd:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocSchedulerd:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-schedulerd:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
ocScheduler:
|
||||
enabled: true
|
||||
enableTraefikProxyIntegration: true
|
||||
image: opencloudregistry/oc-scheduler:latest
|
||||
resources:
|
||||
limits:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
requests:
|
||||
cpu: 128m
|
||||
memory: 256Mi
|
||||
replicas: 1
|
||||
hpa:
|
||||
enabled: true
|
||||
minReplicas: 1
|
||||
maxReplicas: 5
|
||||
targetCPUUtilizationPercentage: 80
|
||||
|
||||
docker-registry-ui:
|
||||
enabled: true
|
||||
ui:
|
||||
title: "opencloud docker registry"
|
||||
proxy: true
|
||||
dockerRegistryUrl: "http://cluster-2-docker-registry-ui-registry-server.cluster-2.svc.cluster.local:5000"
|
||||
registry:
|
||||
secretName: regcred
|
||||
enabled: true
|
||||
dataVolume:
|
||||
persistentVolumeClaim:
|
||||
claimName: docker-registry-pvc
|
||||
persistence:
|
||||
create: false
|
||||
existingClaim: docker-registry-pvc
|
||||
accessMode: ReadWriteOnce
|
||||
storage: 5Gi
|
||||
storageClassName: "standard"
|
||||
@@ -1,2 +0,0 @@
|
||||
CLUSTER_NAME=cluster-1
|
||||
PORT=9600
|
||||
@@ -1,2 +0,0 @@
|
||||
CLUSTER_NAME=cluster-2
|
||||
PORT=9700
|
||||
@@ -1,91 +0,0 @@
|
||||
[{
|
||||
"_id":"7b989e97-c3e7-49d2-a3a7-f959da4870b5",
|
||||
"abstractinstanciatedresource":{
|
||||
"abstractresource":{
|
||||
"type":"compute",
|
||||
"abstractobject":{
|
||||
"id":"7b989e97-c3e7-49d2-a3a7-f959da4870b5",
|
||||
"name":"Mundi datacenter",
|
||||
"is_draft":false,
|
||||
"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"creation_date":"2021-09-30T14:00:00.000Z",
|
||||
"update_date":"2021-09-30T14:00:00.000Z",
|
||||
"updater_id":"c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode":1
|
||||
},
|
||||
"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Mundi datacenter.png",
|
||||
"description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.",
|
||||
"short_description":"Mundi Opencloud Instance",
|
||||
"owners":[{"name":"IRT Saint Exupery"}]},
|
||||
"instances":[{
|
||||
"resourceinstance":{
|
||||
"abstractobject":{
|
||||
"id":"7b989e97-c3e7-49d2-a3a7-f959da4870b5",
|
||||
"name":"Mundi datacenter Toulouse"},
|
||||
"location":{"latitude":50.62925,"longitude":3.057256},
|
||||
"country":250,
|
||||
"partnerships":[
|
||||
|
||||
]},
|
||||
"security_level":"public",
|
||||
"annual_co2_emissions":1000,
|
||||
"power_sources":["solaire","charbon"],
|
||||
"cpus":{
|
||||
"Intel Core i7-14700KF":{
|
||||
"model":"Intel Core i7-14700KF","frequency":3.6,"cores":16,"architecture":"x86"
|
||||
}},
|
||||
"gpus":{
|
||||
"RTX 3090 FE":{"cores":{"cuda":10496,"tensor":328},"model":"RTX 3090 FE","memory":24000}
|
||||
},
|
||||
"nodes":[
|
||||
{"name":"default","quantity":1,"ram":{"size":16384},"cpus":{"Intel Core i7-14700KF":1},"gpus":{"RTX 3090 FE":8}},{"name":"special","quantity":2,"ram":{"size":16384},"cpus":{"Intel Core i7-14700KF":10},"gpus":{"RTX 3090 FE":10}}
|
||||
]
|
||||
}]
|
||||
},
|
||||
"architecture":"x86",
|
||||
"infrastructure":0
|
||||
},{
|
||||
"_id":"0bb77206-371a-428e-8ae3-ff11575071e2",
|
||||
"abstractinstanciatedresource":{
|
||||
"abstractresource":{
|
||||
"type":"compute",
|
||||
"abstractobject":{
|
||||
"id":"0bb77206-371a-428e-8ae3-ff11575071e2",
|
||||
"name":"VM Target 2",
|
||||
"is_draft":false,
|
||||
"creator_id":"6a3fc74d-8c06-4dbb-ad11-d5c53562775b",
|
||||
"creation_date":"2021-09-30T14:00:00.000Z",
|
||||
"update_date":"2021-09-30T14:00:00.000Z",
|
||||
"updater_id":"c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"access_mode":1
|
||||
},
|
||||
"logo":"https://cloud.o-forge.io/core/deprecated-oc-catalog/raw/branch/main/scripts/local_imgs/vm_logo.png",
|
||||
"description":"IP Address 172.16.0.181",
|
||||
"short_description":"VM created by pierre to test admiralty",
|
||||
"owners":[{"name":"IRT Saint Exupery"}]},
|
||||
"instances":[
|
||||
{"resourceinstance":{
|
||||
"abstractobject":{"id":"0bb77206-371a-428e-8ae3-ff11575071e2","name":"VM Proxmox Pierre 2"},
|
||||
"location":{"latitude":50.62925,"longitude":3.057256},"country":250,"partnerships":[
|
||||
|
||||
]},
|
||||
"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":0},
|
||||
{"_id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","abstractinstanciatedresource":{"abstractresource":{"type":"compute","abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Meteo France datacenter","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Meteo France datacenter.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Meteo France Opencloud Instance","owners":[{"name":"Meteo France"}]},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Meteo France datacenter Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]},"security_level":"sec num cloud","annual_co2_emissions":1000,"power_sources":["solaire","charbon"],"cpus":{"Intel Core i7-14700KF":{"model":"Intel Core i7-14700KF","frequency":3.6,"cores":16,"architecture":"x86"}},"gpus":{"RTX 3090 FE":{"cores":{"cuda":10496,"tensor":328},"model":"RTX 3090 FE","memory":24000}},"nodes":[{"name":"default","quantity":1,"ram":{"size":32786},"cpus":{"Intel Core i7-14700KF":1},"gpus":{"RTX 3090 FE":8}}]}]},"architecture":"x86","infrastructure":0},{"_id":"e22b8d96-d799-4f36-b921-982fc3c6952c","abstractinstanciatedresource":{"abstractresource":{"type":"compute","abstractobject":{"id":"e22b8d96-d799-4f36-b921-982fc3c6952c","name":"CNES datacenter","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/CNES datacenter.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Mundi Opencloud Instance","owners":[{"name":"IRT Saint Exupery"}]},"instances":[{"resourceinstance":{"abstractobject":{"id":"e22b8d96-d799-4f36-b921-982fc3c6952c","name":"CNES datacenter Toulouse"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]},"security_level":"private","annual_co2_emissions":1000,"power_sources":["solaire","charbon"],"cpus":{"Intel Core Ultra 9 285K":{"model":"Intel Core Ultra 9 285K","frequency":3.6,"cores":32,"architecture":"x86"}},"gpus":{"RTX 3090 FE":{"cores":{"cuda":10496,"tensor":328},"model":"RTX 3090 FE","memory":24000}},"nodes":[{"name":"default","quantity":1,"ram":{"size":16384},"cpus":{"Intel Core Ultra 9 285K":1}}]}]},"architecture":"x86","infrastructure":0},{"_id":"979776c3-9ae7-4e02-9138-7b30b25f22cc","abstractinstanciatedresource":{"abstractresource":{"type":"compute","abstractobject":{"id":"979776c3-9ae7-4e02-9138-7b30b25f22cc","name":"VM Target 1","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deprecated-oc-catalog/raw/branch/main/scripts/local_imgs/vm_logo.png","description":"IP Address 172.16.0.181","short_description":"VM created by pierre to test admiralty","owners":[{"name":"IRT Saint Exupery"}]},"instances":[{"resourceinstance":{"abstractobject":{"id":"979776c3-9ae7-4e02-9138-7b30b25f22cc","name":"VM Proxmox Pierre 1"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]},"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":0},{"_id":"4222318f-660c-47ce-9d6b-67a4691a354e","abstractinstanciatedresource":{"abstractresource":{"type":"compute","abstractobject":{"id":"4222318f-660c-47ce-9d6b-67a4691a354e","name":"VM Target 3","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deprecated-oc-catalog/raw/branch/main/scripts/local_imgs/vm_logo.png","description":"IP Address 172.16.0.181","short_description":"VM created by pierre to test admiralty","owners":[{"name":"IRT Saint Exupery"}]},"instances":[{"resourceinstance":{"abstractobject":{"id":"4222318f-660c-47ce-9d6b-67a4691a354e","name":"VM Proxmox Pierre 3"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]},"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":0}]
|
||||
@@ -1,5 +0,0 @@
|
||||
[{"_id":"292fb4c7-1ca8-4423-a969-d533b2ef3734","abstractinstanciatedresource":{"abstractresource":{"type":"data","abstractobject":{"id":"292fb4c7-1ca8-4423-a969-d533b2ef3734","name":"Mundi Sentienl 3 SRAL Images","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Mundi Sentienl 3 SRAL Images.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Mundi Sentinels 3 SAR Altiemter image","owners":[{"name":"Mundi Web"}],"source":"http://www.google.com"},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Mundi Sentienl 3 SRAL Images Paris"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"quality":"low","open_data":false,"static":true,"size":0.59,"example":"tutut"},{"_id":"d573dc63-4de0-4e29-8a4e-c15cbb3aed06","abstractinstanciatedresource":{"abstractresource":{"type":"data","abstractobject":{"id":"d573dc63-4de0-4e29-8a4e-c15cbb3aed06","name":"Red Car","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://images.wondershare.com/repairit/article/guide-on-jpeg-repair-online-01.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"A casual red car","owners":[{"name":"Red Car"}]},"instances":[{"source":"http://plates.openalpr.com/h786poj.jpg","resourceinstance":{"env":[{"attr":"source","readonly":true}],"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Red Car"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"quality":"low","open_data":false,"static":true,"size":0.59,"example":"tutut"},{"_id":"811d4b6d-0170-400f-b4a5-9e1597dc7620","abstractinstanciatedresource":{"abstractresource":{"type":"data","abstractobject":{"id":"811d4b6d-0170-400f-b4a5-9e1597dc7620","name":"Meteo-France forecasts","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Meteo-France forecasts.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Meteo France weather forecasts","owners":[{"name":"Meteo France"}],"source":"http://www.google.com"},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Meteo-France forecasts Paris"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"quality":"medium","open_data":true,"static":true,"size":0.59,"example":"tutut"},{"_id":"fdfd135c-b0c1-4c34-89d5-0189b4b2bf2d","abstractinstanciatedresource":{"abstractresource":{"type":"data","abstractobject":{"id":"fdfd135c-b0c1-4c34-89d5-0189b4b2bf2d","name":"Mundi Sentienl 3 OLCI Images","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Mundi Sentienl 3 OLCI Images.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Mundi Sentinels 3 Ocean and land color Altiemter image","owners":[{"name":"Mundi Web"}],"source":"http://www.google.com"},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Mundi Sentienl 3 OLCI Images Paris"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"quality":"low","open_data":true,"static":true,"size":0.59,"example":"tutut"}]
|
||||
@@ -1,33 +0,0 @@
|
||||
[{
|
||||
"_id":"c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"failed_execution":null,
|
||||
"api_url":"http://beta.opencloud.com:9600",
|
||||
"nats_address": "nats://nats:4222",
|
||||
"stream_address":"/ip4/192.168.1.1/tcp/4001/p2p/QmXkKz9kE7pY3Yw4m6x9FhJ3JY5P2QJpX9C7Yz2T4H8WvA",
|
||||
"wallet_address":"my-wallet",
|
||||
"public_key":"MCowBQYDK2VwAyEAZ2nLJBL8a5opfa8nFeVj0SZToW8pl4+zgcSUkeZFRO4=",
|
||||
"peer_id": "QmXkKz9kE7pY3Yw4m6x9FhJ3JY5P2QJpX9C7Yz2T4H8WvA",
|
||||
"relation": 1,
|
||||
"abstractobject":{
|
||||
"update_date":{"$date":"2025-03-27T09:13:13.230Z"},"access_mode":0,
|
||||
"id":"c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"name":"local","is_draft":false,
|
||||
"creation_date":{"$date":"2025-03-27T09:13:13.230Z"}
|
||||
}
|
||||
}, {
|
||||
"_id":"6a3fc74d-8c06-4dbb-ad11-d5c53562775b",
|
||||
"failed_execution":null,
|
||||
"abstractobject":{
|
||||
"update_date":{"$date":"2025-03-27T09:13:13.230Z"},"access_mode":0,
|
||||
"id":"6a3fc74d-8c06-4dbb-ad11-d5c53562775b",
|
||||
"name":"local","is_draft":false,
|
||||
"creation_date":{"$date":"2025-03-27T09:13:13.230Z"}},
|
||||
"api_url":"http://beta.opencloud.com:9700",
|
||||
"nats_address": "nats://nats:4222",
|
||||
"stream_address":"/ip4/192.168.1.1/tcp/4002/p2p/QmTzQ1NwFz9bYH7Kp8Zs4XyJQk3E6C5R9H1m2A8L7V",
|
||||
"peer_id": "QmTzQ1NwFz9bYH7Kp8Zs4XyJQk3E6C5R9H1m2A8L7V",
|
||||
"wallet_address":"my-wallet",
|
||||
"public_key":"MCowBQYDK2VwAyEAZ2nLJBL8a5opfa8nFeVj0SZToW8pl4+zgcSUkeZFRO4=",
|
||||
"state":1,
|
||||
"relation": 2
|
||||
}]
|
||||
@@ -1,11 +0,0 @@
|
||||
[{"_id":"523c03fe-e2db-475c-93c6-82c5bc85ec3d","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"523c03fe-e2db-475c-93c6-82c5bc85ec3d","name":"SAR High points","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/SAR High points.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"SAR Altimeter High points extraction Software","owners":[{"name":"IRT"}]},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"SAR High points Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv2","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"f463b2fe-0522-4382-b2ec-c82b97b9c8b0","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"f463b2fe-0522-4382-b2ec-c82b97b9c8b0","name":"Environment builder","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Environment builder.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"build simulated environment from real environmental data and fire mitigation rules","owners":[{"name":"Gob.fr"}]},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Environment builder Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv3","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"f3c8346b-3536-4c99-8b11-1be9c01697de","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"f3c8346b-3536-4c99-8b11-1be9c01697de","name":"imagemagic","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/imagemagic-logo.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"ImageMagick® is a free, open-source software suite, used for editing and manipulating digital images.","owners":[{"name":"IRT"}]},"instances":[{"access":{"container":{"image":"dpokidov/imagemagick:7.1.0-62-2"}},"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"imagemagic Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv2","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"1b762b65-479c-45e6-a5de-fe67fd9e0f1b","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"1b762b65-479c-45e6-a5de-fe67fd9e0f1b","name":"Long term fire risk mitigation planner","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Long term fire risk mitigation planner.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Long term fire risk mitigation planner : provides list of actions to be performed to mitigate fire propagation","owners":[{"name":"Gob.fr"}]},"instances":[{"processinginstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Long term fire risk mitigation planner Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv2","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"e518d7a4-426a-4900-94e5-300767b1bb31","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"e518d7a4-426a-4900-94e5-300767b1bb31","name":"Mosquito server","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/mosquitto-logo.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"open source message broker that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1.","owners":[{"name":"IRT"}]},"instances":[{"access":{"container":{"image":"eclipse-mosquitto:2.0.15"}},"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Mosquito server Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv2","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"0d565c87-50ae-4a73-843d-f8b2d4047772","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"0d565c87-50ae-4a73-843d-f8b2d4047772","name":"CURL","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/curl-logo.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Transfer or retrieve information from or to a server","owners":[{"name":"IRT"}]},"instances":[{"access":{"container":{"image":"curlimages/curl:7.88.1"}},"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"CURL Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv2","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"7cf24357-b272-4a4b-b2d8-479887e1c937","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"7cf24357-b272-4a4b-b2d8-479887e1c937","name":"Fire propagation simulator","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Fire propagation simulator.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Fire propagation simulator","owners":[{"name":"Gob.fr"}]},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Fire propagation simulator Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv3","infrastructure":0,"usage":{"storage":3,"scaling_model":"2"}},{"_id":"3041990c-5c5d-40c4-8329-c1df1b812dc3","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"3041990c-5c5d-40c4-8329-c1df1b812dc3","name":"alpr","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/alpr-logo.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Open source Automatic License Plate Recognition library.","owners":[{"name":"IRT"}]},"instances":[{"access":{"container":{"image":"openalpr/openalpr"}},"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"alpr Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv3","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"2ce0323f-a85d-4b8b-a783-5280f48d634a","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"2ce0323f-a85d-4b8b-a783-5280f48d634a","name":"alpine","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/alpine-logo.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"A minimal Docker image","owners":[{"name":"IRT"}]},"instances":[{"access":{"container":{"image":"alpine:3.7"}},"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"alpine Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv2","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"8a78cecc-8222-40ed-9303-04e24d136f49","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"8a78cecc-8222-40ed-9303-04e24d136f49","name":"Flammable vegetation slicer","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Flammable vegetation slicer.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Analyze land cover and define optimum vegetation slices to prevent fire propagation","owners":[{"name":"Gob.fr"}]},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Flammable vegetation slicer Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"Copyright","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}}]
|
||||
@@ -1,3 +0,0 @@
|
||||
[{"_id":"04bc70b5-8d7b-44e6-9015-fadfa0fb102d","abstractinstanciatedresource":{"abstractresource":{"type":"storage","abstractobject":{"id":"04bc70b5-8d7b-44e6-9015-fadfa0fb102d","name":"IRT risk database","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/IRT risk database.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"S3 compliant IRT file storage","owners":[{"name":"IRT"}]},"instances":[{"env":[{"attr":"source","readonly":true}],"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"IRT local file storage Marseille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]},"source":"/mnt/vol","local":false,"security_level":"public","size":50,"size_type":3,"redundancy":"RAID5","throughput":"r:200,w:150"}]},"storage_type":5,"acronym":"DC_myDC"},{"_id":"e726020a-b68e-4abc-ab36-c3640ea3f557","abstractinstanciatedresource":{"abstractresource":{"type":"storage","abstractobject":{"id":"e726020a-b68e-4abc-ab36-c3640ea3f557","name":"IRT local file storage","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/IRT local file storage.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"S3 compliant IRT file storage","owners":[{"name":"IRT"}]},"instances":[{"resourceinstance":{"env":[{"attr":"source","readonly":true}],"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"IRT local file storage Marseille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]},"source":"/mnt/vol","local":true,"security_level":"public","size":500,"size_type":0,"encryption":true,"redundancy":"RAID5S","throughput":"r:300,w:350"}]},"storage_type":5,"acronym":"DC_myDC"}]
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,5 +0,0 @@
|
||||
[{"_id":"292fb4c7-1ca8-4423-a969-d533b2ef3734","abstractinstanciatedresource":{"abstractresource":{"type":"data","abstractobject":{"id":"292fb4c7-1ca8-4423-a969-d533b2ef3734","name":"Mundi Sentienl 3 SRAL Images","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Mundi Sentienl 3 SRAL Images.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Mundi Sentinels 3 SAR Altiemter image","owners":[{"name":"Mundi Web"}],"source":"http://www.google.com"},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Mundi Sentienl 3 SRAL Images Paris"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"quality":"low","open_data":false,"static":true,"size":0.59,"example":"tutut"},{"_id":"d573dc63-4de0-4e29-8a4e-c15cbb3aed06","abstractinstanciatedresource":{"abstractresource":{"type":"data","abstractobject":{"id":"d573dc63-4de0-4e29-8a4e-c15cbb3aed06","name":"Red Car","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://images.wondershare.com/repairit/article/guide-on-jpeg-repair-online-01.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"A casual red car","owners":[{"name":"Red Car"}]},"instances":[{"source":"http://plates.openalpr.com/h786poj.jpg","resourceinstance":{"env":[{"attr":"source","readonly":true}],"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Red Car"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"quality":"low","open_data":false,"static":true,"size":0.59,"example":"tutut"},{"_id":"811d4b6d-0170-400f-b4a5-9e1597dc7620","abstractinstanciatedresource":{"abstractresource":{"type":"data","abstractobject":{"id":"811d4b6d-0170-400f-b4a5-9e1597dc7620","name":"Meteo-France forecasts","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Meteo-France forecasts.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Meteo France weather forecasts","owners":[{"name":"Meteo France"}],"source":"http://www.google.com"},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Meteo-France forecasts Paris"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"quality":"medium","open_data":true,"static":true,"size":0.59,"example":"tutut"},{"_id":"fdfd135c-b0c1-4c34-89d5-0189b4b2bf2d","abstractinstanciatedresource":{"abstractresource":{"type":"data","abstractobject":{"id":"fdfd135c-b0c1-4c34-89d5-0189b4b2bf2d","name":"Mundi Sentienl 3 OLCI Images","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Mundi Sentienl 3 OLCI Images.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Mundi Sentinels 3 Ocean and land color Altiemter image","owners":[{"name":"Mundi Web"}],"source":"http://www.google.com"},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Mundi Sentienl 3 OLCI Images Paris"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"quality":"low","open_data":true,"static":true,"size":0.59,"example":"tutut"}]
|
||||
@@ -1,27 +0,0 @@
|
||||
[{
|
||||
"_id":"c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"failed_execution":null,
|
||||
"abstractobject":{
|
||||
"update_date":{"$date":"2025-03-27T09:13:13.230Z"},"access_mode":0,
|
||||
"id":"c0cece97-7730-4c2a-8c20-a30944564106",
|
||||
"name":"local","is_draft":false,
|
||||
"creation_date":{"$date":"2025-03-27T09:13:13.230Z"}},
|
||||
"url":"http://beta.opencloud.com:9600",
|
||||
"wallet_address":"my-wallet",
|
||||
"public_key":"-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAw2pdG6wMtuLcP0+k1LFvIb0DQo/oHW2uNJaEJK74plXqp4ztz2dR\nb+RQHFLeLuqk4i/zc3b4K3fKPXSlwnVPJCwzPrnyT8jYGOZVlWlETiV9xeJhu6s/\nBh6g1PWz75XjjwV50iv/CEiLNBT23f/3J44wrQzygqNQCiQSALdxWLAEl4l5kHSa\n9oMyV70/Uql94/ayMARZsHgp9ZvqQKbkZPw6yzVMfCBxQozlNlo315OHevudhnhp\nDRjN5I7zWmqYt6rbXJJC7Y3Izdvzn7QI88RqjSRST5I/7Kz3ndCqrOnI+OQUE5NT\nREyQebphvQfTDTKlRPXkdyktdK2DH28Zj6ZF3yjQvN35Q4zhOzlq77dO5IhhopI7\nct8dZH1T1nYkvdyCA/EVMtQsASmBOitH0Y0ACoXQK5Kb6nm/TcM/9ZSJUNiEMuy5\ngBZ3YKE9oa4cpTpPXwcA+S/cU7HPNnQAsvD3iJi8GTW9uJs84pn4/WhpQqmXd4rv\nhKWECCN3fHy01fUs/U0PaSj2jDY/kQVeXoikNMzPUjdZd9m816TIBh3v3aVXCH/0\niTHHAxctvDgMRb2fpvRJ/wwnYjFG9RpamVFDMvC9NffuYzWAA9IRIY4cqgerfHrV\nZ2HHiPTDDvDAIsvImXZc/h7mXN6m3RCQ4Qywy993wd9gUdgg/qnynHcCAwEAAQ==\n-----END RSA PUBLIC KEY-----\n",
|
||||
"state":1,
|
||||
"relation": 2
|
||||
}, {
|
||||
"_id":"6a3fc74d-8c06-4dbb-ad11-d5c53562775b",
|
||||
"failed_execution":null,
|
||||
"abstractobject":{
|
||||
"update_date":{"$date":"2025-03-27T09:13:13.230Z"},"access_mode":0,
|
||||
"id":"6a3fc74d-8c06-4dbb-ad11-d5c53562775b",
|
||||
"name":"local","is_draft":false,
|
||||
"creation_date":{"$date":"2025-03-27T09:13:13.230Z"}},
|
||||
"url":"http://beta.opencloud.com:9700",
|
||||
"wallet_address":"my-wallet",
|
||||
"public_key":"-----BEGIN RSA PUBLIC KEY-----\nMIICCgKCAgEAw2pdG6wMtuLcP0+k1LFvIb0DQo/oHW2uNJaEJK74plXqp4ztz2dR\nb+RQHFLeLuqk4i/zc3b4K3fKPXSlwnVPJCwzPrnyT8jYGOZVlWlETiV9xeJhu6s/\nBh6g1PWz75XjjwV50iv/CEiLNBT23f/3J44wrQzygqNQCiQSALdxWLAEl4l5kHSa\n9oMyV70/Uql94/ayMARZsHgp9ZvqQKbkZPw6yzVMfCBxQozlNlo315OHevudhnhp\nDRjN5I7zWmqYt6rbXJJC7Y3Izdvzn7QI88RqjSRST5I/7Kz3ndCqrOnI+OQUE5NT\nREyQebphvQfTDTKlRPXkdyktdK2DH28Zj6ZF3yjQvN35Q4zhOzlq77dO5IhhopI7\nct8dZH1T1nYkvdyCA/EVMtQsASmBOitH0Y0ACoXQK5Kb6nm/TcM/9ZSJUNiEMuy5\ngBZ3YKE9oa4cpTpPXwcA+S/cU7HPNnQAsvD3iJi8GTW9uJs84pn4/WhpQqmXd4rv\nhKWECCN3fHy01fUs/U0PaSj2jDY/kQVeXoikNMzPUjdZd9m816TIBh3v3aVXCH/0\niTHHAxctvDgMRb2fpvRJ/wwnYjFG9RpamVFDMvC9NffuYzWAA9IRIY4cqgerfHrV\nZ2HHiPTDDvDAIsvImXZc/h7mXN6m3RCQ4Qywy993wd9gUdgg/qnynHcCAwEAAQ==\n-----END RSA PUBLIC KEY-----\n",
|
||||
"state":1,
|
||||
"relation": 1
|
||||
}]
|
||||
@@ -1,11 +0,0 @@
|
||||
[{"_id":"523c03fe-e2db-475c-93c6-82c5bc85ec3d","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"523c03fe-e2db-475c-93c6-82c5bc85ec3d","name":"SAR High points","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/SAR High points.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"SAR Altimeter High points extraction Software","owners":[{"name":"IRT"}]},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"SAR High points Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv2","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"f463b2fe-0522-4382-b2ec-c82b97b9c8b0","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"f463b2fe-0522-4382-b2ec-c82b97b9c8b0","name":"Environment builder","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Environment builder.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"build simulated environment from real environmental data and fire mitigation rules","owners":[{"name":"Gob.fr"}]},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Environment builder Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv3","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"f3c8346b-3536-4c99-8b11-1be9c01697de","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"f3c8346b-3536-4c99-8b11-1be9c01697de","name":"imagemagic","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/imagemagic-logo.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"ImageMagick® is a free, open-source software suite, used for editing and manipulating digital images.","owners":[{"name":"IRT"}]},"instances":[{"access":{"container":{"image":"dpokidov/imagemagick:7.1.0-62-2"}},"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"imagemagic Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv2","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"1b762b65-479c-45e6-a5de-fe67fd9e0f1b","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"1b762b65-479c-45e6-a5de-fe67fd9e0f1b","name":"Long term fire risk mitigation planner","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Long term fire risk mitigation planner.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Long term fire risk mitigation planner : provides list of actions to be performed to mitigate fire propagation","owners":[{"name":"Gob.fr"}]},"instances":[{"processinginstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Long term fire risk mitigation planner Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv2","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"e518d7a4-426a-4900-94e5-300767b1bb31","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"e518d7a4-426a-4900-94e5-300767b1bb31","name":"Mosquito server","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/mosquitto-logo.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"open source message broker that implements the MQTT protocol versions 5.0, 3.1.1 and 3.1.","owners":[{"name":"IRT"}]},"instances":[{"access":{"container":{"image":"eclipse-mosquitto:2.0.15"}},"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Mosquito server Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv2","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"0d565c87-50ae-4a73-843d-f8b2d4047772","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"0d565c87-50ae-4a73-843d-f8b2d4047772","name":"CURL","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/curl-logo.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Transfer or retrieve information from or to a server","owners":[{"name":"IRT"}]},"instances":[{"access":{"container":{"image":"curlimages/curl:7.88.1"}},"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"CURL Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv2","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"7cf24357-b272-4a4b-b2d8-479887e1c937","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"7cf24357-b272-4a4b-b2d8-479887e1c937","name":"Fire propagation simulator","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Fire propagation simulator.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Fire propagation simulator","owners":[{"name":"Gob.fr"}]},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Fire propagation simulator Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv3","infrastructure":0,"usage":{"storage":3,"scaling_model":"2"}},{"_id":"3041990c-5c5d-40c4-8329-c1df1b812dc3","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"3041990c-5c5d-40c4-8329-c1df1b812dc3","name":"alpr","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/alpr-logo.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Open source Automatic License Plate Recognition library.","owners":[{"name":"IRT"}]},"instances":[{"access":{"container":{"image":"openalpr/openalpr"}},"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"alpr Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv3","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"2ce0323f-a85d-4b8b-a783-5280f48d634a","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"2ce0323f-a85d-4b8b-a783-5280f48d634a","name":"alpine","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/alpine-logo.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"A minimal Docker image","owners":[{"name":"IRT"}]},"instances":[{"access":{"container":{"image":"alpine:3.7"}},"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"alpine Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"GPLv2","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}},{"_id":"8a78cecc-8222-40ed-9303-04e24d136f49","abstractinstanciatedresource":{"abstractresource":{"type":"processing","abstractobject":{"id":"8a78cecc-8222-40ed-9303-04e24d136f49","name":"Flammable vegetation slicer","is_draft":false,"creator_id":"c0cece97-7730-4c2a-8c20-a30944564106","creation_date":"2021-09-30T14:00:00.000Z","update_date":"2021-09-30T14:00:00.000Z","updater_id":"c0cece97-7730-4c2a-8c20-a30944564106","access_mode":1},"logo":"https://cloud.o-forge.io/core/deperecated-oc-catalog/raw/branch/main/scripts/local_imgs/Flammable vegetation slicer.png","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.","short_description":"Analyze land cover and define optimum vegetation slices to prevent fire propagation","owners":[{"name":"Gob.fr"}]},"instances":[{"resourceinstance":{"abstractobject":{"id":"7fdccb9c-7090-40a5-bacd-7435bc56c90d","name":"Flammable vegetation slicer Lille"},"location":{"latitude":50.62925,"longitude":3.057256},"country":250,
|
||||
"partnerships":[]}}]},"license":"Copyright","infrastructure":0,"usage":{"storage":0.3,"scaling_model":"2"}}]
|
||||
File diff suppressed because one or more lines are too long
@@ -1,30 +0,0 @@
|
||||
#!/bin/bash
|
||||
mode=${2:-all}
|
||||
branch=${3:-main}
|
||||
path=${4:-.}
|
||||
|
||||
start=1
|
||||
end=${1:-1}
|
||||
|
||||
curl -L -o oc-k8s https://cloud.o-forge.io/core/oc-k8s/raw/branch/main/cmd/oc-k8s
|
||||
sudo cp ./oc-k8s /usr/local/bin
|
||||
|
||||
|
||||
sudo sysctl fs.inotify.max_user_watches=524288
|
||||
sudo sysctl fs.inotify.max_user_instances=512
|
||||
|
||||
echo "Install oc-k8s"
|
||||
|
||||
oc-k8s install
|
||||
|
||||
cp ~/.kube/config ~/.kube/config_past
|
||||
|
||||
for ((i=start; i<=end; i++)); do
|
||||
echo "Run cluster-$i"
|
||||
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
|
||||
|
||||
./start.sh $mode $branch "cluster-$i" $path
|
||||
|
||||
sudo cp ~/.kube/config ~/.kube/configCluster$i
|
||||
sudo chown $(id -u):$(id -g) ~/.kube/configCluster$i
|
||||
done
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user