4438 lines
182 KiB
YAML
4438 lines
182 KiB
YAML
openapi: 3.0.1
|
|
info:
|
|
title: Infrastructure Provisioning OpenApi
|
|
description: 'API for managing infrastructure deployment scripts, including storage,execution triggers and decommission.'
|
|
version: 1.8.0
|
|
contact:
|
|
name: Simpl Programme
|
|
email: cnect-simpl@ec.europa.eu
|
|
url: https://simpl-programme.ec.europa.eu/
|
|
license:
|
|
name: European Union Public License (EUPL) 1.2
|
|
url: https://interoperable-europe.ec.europa.eu/sites/default/files/custom-page/attachment/eupl_v1.2_en.pdf
|
|
servers:
|
|
- url: 'https://localhost:8080/api/infrastructureProvisioning/v1'
|
|
description: Base URL used to access the API in a specific environment (e.g., development, int, preprod)
|
|
security:
|
|
- bearerAuth: []
|
|
paths:
|
|
/scripts:
|
|
get:
|
|
tags:
|
|
- script-controller
|
|
summary: Retrieve a list of deployment scripts.
|
|
description: >
|
|
This endpoint retrieves a list of deployment scripts available in the system.
|
|
Each script in the response contains metadata such as the script title, description,
|
|
associated cloud environment, and creation/update timestamps. The `payload` is an array of
|
|
script objects, each containing identifiers (like `id` and `deploymentScriptId`), an
|
|
encoded YAML file (`file`), and the original filename used during upload. Scripts may
|
|
also be linked to version control (e.g., via a `giteaSha`), and include execution-related
|
|
metadata such as `location`, `active` status, and `scriptIdentify` references.
|
|
operationId: getScriptList
|
|
parameters:
|
|
- name: page
|
|
in: query
|
|
description: The page number to retrieve.
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
default: 0
|
|
- name: size
|
|
in: query
|
|
description: The number of items per page.
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
default: 10
|
|
- name: active
|
|
in: query
|
|
description: Filter by active status.
|
|
required: false
|
|
schema:
|
|
type: boolean
|
|
responses:
|
|
'200':
|
|
description: Script list found successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ScriptListResponse'
|
|
examples:
|
|
success_with_data:
|
|
value:
|
|
success: true
|
|
message: Script list found successfully.
|
|
payload:
|
|
content:
|
|
- id: 1
|
|
scriptIdentify:
|
|
id: 1
|
|
deploymentScriptId: c4745f86-f947-4549-8de4-3ee25d310a3f
|
|
title: vm script
|
|
description: VM Script
|
|
file: >-
|
|
YXBpVmVyc2lvbjogcGxhdGZvcm0uZXhhbXBsZS5vcmcvdjFhbHBoYTEKa2luZDogU2VydmVySW5zdGFuY2UKbWV0YWRhdGE6CiAgbmFtZXNwYWNlOiBpbmZyYXN0cnVjdHVyZQogIG5hbWU6IG9mZmVyaW5nLW5hbWUtbWVkaXVtLWluc3RhbmNlLXtVVUlEfQogIGxhYmVsczoKICAgIHV1aWQ6ICJ7VVVJRH0iCiAgICByZWZlcmVuY2Uta2luZDogeHNlcnZlcnNpbnN0YW5jZXMKc3BlYzoKICBwYXJhbWV0ZXJzOgogICAgZGF0YWNlbnRlck5hbWU6IGNyb3NzcGxhbmVfZGF0YWNlbnRlcl9tZWRpdW0te1VVSUR9CiAgICBkYXRhY2VudGVyRGVzY3JpcHRpb246IHRlc3RFeGFtcGxlRGVzY3JpcHRpb24KICAgIGRhdGFjZW50ZXJMb2NhdGlvbjogZGUvdHhsCiAgICBzZXJ2ZXJOYW1lOiBzZXJ2ZXIKICAgIGNvcmVzOiAyCiAgICByYW06IDIwNDgKICAgIGNwdUZhbWlseTogSU5URUxfSUNFTEFLRQpjbG91ZENvbmZpZzoKaG9zdG5hbWU6IGRlZmF1bHQtc2VydmVyIApzc2hfcHdhdXRoOiB0cnVlCmNocGFzc3dkOgogICAgZXhwaXJlOiBmYWxzZQp1c2VyczoKLSBkZWZhdWx0Ci0gbmFtZToge25hbWV9CiAgcGFzc3dkOiB7cHdkfQogIHNoZWxsOiAvYmluL2Jhc2gKICBsb2NrX3Bhc3N3ZDogZmFsc2UKICBzdWRvOiBBTEw9KEFMTCkgTk9QQVNTV0Q6QUxMCiAgZ3JvdXBzOiB1c2VycywgYWRtaW4sIHN1ZG8KcnVuY21kOgotIGVjaG8gInJlZ2VuZXJhdGluZyBob3N0IGtleXMiCi0gcm0gLWYgL2V0Yy9zc2gvc3NoX2hvc3RfKgotIHNzaC1rZXlnZW4gLUEKLSBlY2hvICJyZXN0YXJ0aW5nIHNzaGQiCi0gc3lzdGVtY3RsIHJlc3RhcnQgc3NoZApkZWJ1ZzogdHJ1ZQpvdXRwdXQ6CiAgYWxsOiAifCB0ZWUgLWEgL3Zhci9sb2cvY2xvdWQtaW5pdC1kZWJ1Zy5sb2ciCmZpbmFsX21lc3NhZ2U6ICJEZWZhdWx0IFZNIENsb3VkaW5pdCBkb25lIgogIA==
|
|
location: path
|
|
active: true
|
|
cloudEnvironment:
|
|
id: 2
|
|
environmentName: Awesome env for data Analysis
|
|
iac: Crossplane
|
|
location: Paris
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: Ionos
|
|
datacenterName: DC_Data1
|
|
active: true
|
|
creationDate: '2025-01-15'
|
|
giteaSha: >-
|
|
522dd886075b8b29eee323f38050901e4cb56247501e538492a10a9bf1773a31
|
|
originalFileName: demoScriptInfra.yaml
|
|
page:
|
|
size: 10
|
|
number: 0
|
|
totalElements: 1
|
|
totalPages: 1
|
|
success_with_no_data:
|
|
value:
|
|
success: true
|
|
message: Script list found successfully.
|
|
payload:
|
|
content: []
|
|
page:
|
|
size: 10
|
|
number: 0
|
|
totalElements: 0
|
|
totalPages: 0
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts"
|
|
post:
|
|
tags:
|
|
- script-controller
|
|
summary: Submit a new deployment script.
|
|
description: >
|
|
This endpoint allows the submission of a new deployment script to the system. The request body must contain:
|
|
|
|
- `script`: a JSON object containing script metadata such as title, description, associated cloud provider, and other identifiers.
|
|
- `file`: the actual YAML-based script file to be encoded and stored; it must be sent as a binary (base64) string.
|
|
|
|
Once successfully processed, the script is saved in the system and stored in version control (Gitea). The response returns the persisted script's metadata including `id`, `deploymentScriptId`, encoded `file`, and version tracking fields like `giteaSha`.
|
|
|
|
The `payload` field in the response wraps the full persisted script data as confirmation of successful storage.
|
|
|
|
operationId: saveScript
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
required:
|
|
- file
|
|
- script
|
|
type: object
|
|
properties:
|
|
script:
|
|
$ref: '#/components/schemas/ScriptRequest'
|
|
file:
|
|
type: string
|
|
format: binary
|
|
responses:
|
|
'201':
|
|
description: Script submitted successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ScriptResponse'
|
|
examples:
|
|
saved_successfully:
|
|
value:
|
|
success: true
|
|
message: Script save successfully
|
|
payload:
|
|
id: 1
|
|
scriptIdentify:
|
|
id: 1
|
|
deploymentScriptId: c4745f86-f947-4549-8de4-3ee25d310a3f
|
|
title: vm script
|
|
description: VM Script
|
|
file: >-
|
|
YXBpVmVyc2lvbjogcGxhdGZvcm0uZXhhbXBsZS5vcmcvdjFhbHBoYTEKa2luZDogU2VydmVySW5zdGFuY2UKbWV0YWRhdGE6CiAgbmFtZXNwYWNlOiBpbmZyYXN0cnVjdHVyZQogIG5hbWU6IG9mZmVyaW5nLW5hbWUtbWVkaXVtLWluc3RhbmNlLXtVVUlEfQogIGxhYmVsczoKICAgIHV1aWQ6ICJ7VVVJRH0iCiAgICByZWZlcmVuY2Uta2luZDogeHNlcnZlcnNpbnN0YW5jZXMKc3BlYzoKICBwYXJhbWV0ZXJzOgogICAgZGF0YWNlbnRlck5hbWU6IGNyb3NzcGxhbmVfZGF0YWNlbnRlcl9tZWRpdW0te1VVSUR9CiAgICBkYXRhY2VudGVyRGVzY3JpcHRpb246IHRlc3RFeGFtcGxlRGVzY3JpcHRpb24KICAgIGRhdGFjZW50ZXJMb2NhdGlvbjogZGUvdHhsCiAgICBzZXJ2ZXJOYW1lOiBzZXJ2ZXIKICAgIGNvcmVzOiAyCiAgICByYW06IDIwNDgKICAgIGNwdUZhbWlseTogSU5URUxfSUNFTEFLRQpjbG91ZENvbmZpZzoKaG9zdG5hbWU6IGRlZmF1bHQtc2VydmVyIApzc2hfcHdhdXRoOiB0cnVlCmNocGFzc3dkOgogICAgZXhwaXJlOiBmYWxzZQp1c2VyczoKLSBkZWZhdWx0Ci0gbmFtZToge25hbWV9CiAgcGFzc3dkOiB7cHdkfQogIHNoZWxsOiAvYmluL2Jhc2gKICBsb2NrX3Bhc3N3ZDogZmFsc2UKICBzdWRvOiBBTEw9KEFMTCkgTk9QQVNTV0Q6QUxMCiAgZ3JvdXBzOiB1c2VycywgYWRtaW4sIHN1ZG8KcnVuY21kOgotIGVjaG8gInJlZ2VuZXJhdGluZyBob3N0IGtleXMiCi0gcm0gLWYgL2V0Yy9zc2gvc3NoX2hvc3RfKgotIHNzaC1rZXlnZW4gLUEKLSBlY2hvICJyZXN0YXJ0aW5nIHNzaGQiCi0gc3lzdGVtY3RsIHJlc3RhcnQgc3NoZApkZWJ1ZzogdHJ1ZQpvdXRwdXQ6CiAgYWxsOiAifCB0ZWUgLWEgL3Zhci9sb2cvY2xvdWQtaW5pdC1kZWJ1Zy5sb2ciCmZpbmFsX21lc3NhZ2U6ICJEZWZhdWx0IFZNIENsb3VkaW5pdCBkb25lIgogIA==
|
|
location: path
|
|
active: true
|
|
cloudEnvironment:
|
|
id: 2
|
|
environmentName: Awesome env for data Analysis
|
|
iac: Crossplane
|
|
location: Paris
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: Ionos
|
|
datacenterName: DC_Data1
|
|
active: true
|
|
creationDate: '2025-01-15'
|
|
giteaSha: >-
|
|
522dd886075b8b29eee323f38050901e4cb56247501e538492a10a9bf1773a31
|
|
originalFileName: demoScriptInfra.yaml
|
|
'400':
|
|
description: Script is invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_invalid:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:unsupportedFileType"
|
|
href: null
|
|
title: "File type is not accepted."
|
|
status: 400
|
|
detail: "The uploaded file has an unsupported file type and cannot be processed."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts"
|
|
/scripts/trigger:
|
|
post:
|
|
tags:
|
|
- script-controller
|
|
summary: Starts the execution of a script based on the provided deployment script id.
|
|
description: >
|
|
This endpoint initiates the execution of a script previously registered in the system.
|
|
The script is identified by the `deploymentScriptId` provided in the request.
|
|
If the script is active and passes checksum validation, it is processed and sent for provisioning
|
|
via Kafka with the appropriate headers and configuration.
|
|
operationId: triggeringScript
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ScriptTriggerRequest'
|
|
required: true
|
|
responses:
|
|
'200':
|
|
description: Script triggering started successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DefaultResponse'
|
|
examples:
|
|
script_triggering_started_successfully:
|
|
value:
|
|
success: true
|
|
message: Script Triggering started successfully.
|
|
payload: null
|
|
'400':
|
|
description: Script is invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_invalid:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:scriptNotValid"
|
|
href: null
|
|
title: "The requested Script id is not valid."
|
|
status: 400
|
|
detail: "The requested script id is not valid and cannot be used."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
'404':
|
|
description: Script not found.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:scriptNotFound"
|
|
href: null
|
|
title: "Script not found."
|
|
status: 404
|
|
detail: "The script with the provided deploymentScriptId does not exist."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
'409':
|
|
description: Script status violation
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
violation:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:scriptViolation"
|
|
href: null
|
|
title: "Script status violation."
|
|
status: 409
|
|
detail: "The request related to this Script id could not be completed due to a conflict with the current state of the target resource."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
callbacks:
|
|
notificationCallback:
|
|
'{$request.body#/callbackUrl}':
|
|
post:
|
|
summary: Notification sent to the callback URL to update request status
|
|
description: >
|
|
This endpoint must be implemented by the client to receive asynchronous updates regarding infrastructure provisioning requests.
|
|
Since the provisioning process can take a significant amount of time to complete, this callback mechanism enables real-time status
|
|
tracking and event-driven integration, ensuring the client is notified as soon as relevant updates occur, without the need manual checks.
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/LongRunProcessRequest'
|
|
responses:
|
|
'200':
|
|
description: Notification successfully received
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DefaultResponse'
|
|
examples:
|
|
script_triggering_started_successfully:
|
|
value:
|
|
success: true
|
|
message: Notification successfully received
|
|
payload: null
|
|
'400':
|
|
description: Invalid input.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_invalid:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:inputNotValid"
|
|
href: null
|
|
title: "Invalid request format"
|
|
status: 400
|
|
detail: "The payload was malformed or missing required fields."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
'404':
|
|
description: Deployment not found.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:deploymentNotFound"
|
|
href: null
|
|
title: "Deployment not found."
|
|
status: 404
|
|
detail: "The deployment with the provided requesterUniqueId does not exist."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
|
|
/scripts/metadata:
|
|
get:
|
|
tags:
|
|
- script-controller
|
|
summary: Retrieve a list of deployment script metadata.
|
|
description: >
|
|
Returns only metadata for deployment scripts (without file content, repository location,
|
|
cloud environment details, triggers or configuration files). Intended for use by the external SD-UI.
|
|
operationId: getScriptMetadataList
|
|
parameters:
|
|
- name: page
|
|
in: query
|
|
description: The page number to retrieve.
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
default: 0
|
|
- name: size
|
|
in: query
|
|
description: The number of items per page.
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
default: 10
|
|
- name: active
|
|
in: query
|
|
description: Filter by active status.
|
|
required: false
|
|
schema:
|
|
type: boolean
|
|
responses:
|
|
'200':
|
|
description: Script metadata list returned successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ScriptListMetadataResponse'
|
|
examples:
|
|
success_with_data:
|
|
value:
|
|
success: true
|
|
message: Script metadata list returned successfully.
|
|
payload:
|
|
content:
|
|
- id: 1
|
|
scriptIdentify:
|
|
id: 1
|
|
deploymentScriptId: c4745f86-f947-4549-8de4-3ee25d310a3f
|
|
title: vm script
|
|
description: VM Script
|
|
active: true
|
|
creationDate: '2025-01-15'
|
|
giteaSha: >-
|
|
522dd886075b8b29eee323f38050901e4cb56247501e538492a10a9bf1773a31
|
|
originalFileName: demoScriptInfra.yaml
|
|
page:
|
|
size: 10
|
|
number: 0
|
|
totalElements: 1
|
|
totalPages: 1
|
|
success_with_no_data:
|
|
value:
|
|
success: true
|
|
message: Script metadata list returned successfully.
|
|
payload:
|
|
content: []
|
|
page:
|
|
size: 10
|
|
number: 0
|
|
totalElements: 0
|
|
totalPages: 0
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/metadata"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/metadata"
|
|
'/scripts/{deploymentScriptId}/configFiles':
|
|
post:
|
|
tags:
|
|
- script-controller
|
|
summary: Upload configuration files for a deployment script
|
|
description: Upload one or more configuration files to be associated with a specific deployment script identified by `deploymentScriptId`. These files will be stored and managed as part of the script's configuration.
|
|
operationId: addConfigFile
|
|
parameters:
|
|
- name: deploymentScriptId
|
|
in: path
|
|
required: true
|
|
description: The unique identifier for the deployment script.
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
configFiles:
|
|
type: array
|
|
items:
|
|
type: string
|
|
format: binary
|
|
responses:
|
|
'200':
|
|
description: Script triggering started successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DefaultResponse'
|
|
examples:
|
|
config_files_saved_successfully:
|
|
value:
|
|
success: true
|
|
message: Config file(s) save successfully.
|
|
payload: null
|
|
'400':
|
|
description: Configuration file not present or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
configuration_file_not_present:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:noConfigFilesProvided"
|
|
href: null
|
|
title: "No configuration files provided."
|
|
status: 400
|
|
detail: "No configuration files were provided in the request. Please upload at least one valid config file before proceeding."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}/configFiles"
|
|
invalid_configuration_file:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:unsupportedConfigFileType"
|
|
href: null
|
|
title: "The Config file extension is not accepted."
|
|
status: 400
|
|
detail: "Only files with yaml extension is accepted for Config file. Please verify the file type and try again."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}/configFiles"
|
|
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}/configFiles"
|
|
'404':
|
|
description: Script not found.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:scriptNotFound"
|
|
href: null
|
|
title: "Script not found."
|
|
status: 404
|
|
detail: "The script with the provided deploymentScriptId does not exist."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}/configFiles"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}/configFiles"
|
|
/status:
|
|
get:
|
|
tags:
|
|
- status-controller
|
|
summary: Retrieve current API health and version information
|
|
description: Returns the current operational status and version of the API, allowing clients to verify that the service is available and working correctly.
|
|
operationId: getStatus
|
|
responses:
|
|
'200':
|
|
description: API is working
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
examples:
|
|
status_ok:
|
|
value:
|
|
version: 1.0.0
|
|
status: ok
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:status:tokenMissingOrInvalid"
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token."
|
|
instance: "/api/infrastructureProvisioning/v1/status"
|
|
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/status"
|
|
'/scripts/{deploymentScriptId}':
|
|
get:
|
|
tags:
|
|
- script-controller
|
|
summary: Retrieve deployment script details by deploymentScriptId
|
|
description: Fetch detailed information about a deployment script identified by the given `deploymentScriptId`. Returns the script metadata and associated data.
|
|
operationId: getScriptByDeploymentScriptId
|
|
parameters:
|
|
- name: deploymentScriptId
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Script found successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ScriptResponse'
|
|
examples:
|
|
script_found:
|
|
value:
|
|
success: true
|
|
message: Script found successfully.
|
|
payload:
|
|
id: 1
|
|
scriptIdentify:
|
|
id: 1
|
|
deploymentScriptId: c4745f86-f947-4549-8de4-3ee25d310a3f
|
|
title: vm script
|
|
description: VM Script
|
|
file: >-
|
|
YXBpVmVyc2lvbjogcGxhdGZvcm0uZXhhbXBsZS5vcmcvdjFhbHBoYTEKa2luZDogU2VydmVySW5zdGFuY2UKbWV0YWRhdGE6CiAgbmFtZXNwYWNlOiBpbmZyYXN0cnVjdHVyZQogIG5hbWU6IG9mZmVyaW5nLW5hbWUtbWVkaXVtLWluc3RhbmNlLXtVVUlEfQogIGxhYmVsczoKICAgIHV1aWQ6ICJ7VVVJRH0iCiAgICByZWZlcmVuY2Uta2luZDogeHNlcnZlcnNpbnN0YW5jZXMKc3BlYzoKICBwYXJhbWV0ZXJzOgogICAgZGF0YWNlbnRlck5hbWU6IGNyb3NzcGxhbmVfZGF0YWNlbnRlcl9tZWRpdW0te1VVSUR9CiAgICBkYXRhY2VudGVyRGVzY3JpcHRpb246IHRlc3RFeGFtcGxlRGVzY3JpcHRpb24KICAgIGRhdGFjZW50ZXJMb2NhdGlvbjogZGUvdHhsCiAgICBzZXJ2ZXJOYW1lOiBzZXJ2ZXIKICAgIGNvcmVzOiAyCiAgICByYW06IDIwNDgKICAgIGNwdUZhbWlseTogSU5URUxfSUNFTEFLRQpjbG91ZENvbmZpZzoKaG9zdG5hbWU6IGRlZmF1bHQtc2VydmVyIApzc2hfcHdhdXRoOiB0cnVlCmNocGFzc3dkOgogICAgZXhwaXJlOiBmYWxzZQp1c2VyczoKLSBkZWZhdWx0Ci0gbmFtZToge25hbWV9CiAgcGFzc3dkOiB7cHdkfQogIHNoZWxsOiAvYmluL2Jhc2gKICBsb2NrX3Bhc3N3ZDogZmFsc2UKICBzdWRvOiBBTEw9KEFMTCkgTk9QQVNTV0Q6QUxMCiAgZ3JvdXBzOiB1c2VycywgYWRtaW4sIHN1ZG8KcnVuY21kOgotIGVjaG8gInJlZ2VuZXJhdGluZyBob3N0IGtleXMiCi0gcm0gLWYgL2V0Yy9zc2gvc3NoX2hvc3RfKgotIHNzaC1rZXlnZW4gLUEKLSBlY2hvICJyZXN0YXJ0aW5nIHNzaGQiCi0gc3lzdGVtY3RsIHJlc3RhcnQgc3NoZApkZWJ1ZzogdHJ1ZQpvdXRwdXQ6CiAgYWxsOiAifCB0ZWUgLWEgL3Zhci9sb2cvY2xvdWQtaW5pdC1kZWJ1Zy5sb2ciCmZpbmFsX21lc3NhZ2U6ICJEZWZhdWx0IFZNIENsb3VkaW5pdCBkb25lIgogIA==
|
|
location: path
|
|
active: true
|
|
cloudEnvironment:
|
|
id: 2
|
|
environmentName: Awesome env for data Analysis
|
|
iac: Crossplane
|
|
location: Paris
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: Ionos
|
|
datacenterName: DC_Data1
|
|
active: true
|
|
creationDate: '2025-01-15'
|
|
giteaSha: >-
|
|
522dd886075b8b29eee323f38050901e4cb56247501e538492a10a9bf1773a31
|
|
originalFileName: demoScriptInfra.yaml
|
|
provisionedResources:
|
|
- resourceProvisionedId: 2
|
|
resourceProvisionedStatus: SENT
|
|
- resourceProvisionedId: 1
|
|
resourceProvisionedStatus: SENT
|
|
configFiles:
|
|
- id: 1
|
|
filename: config_example.yaml
|
|
- id: 2
|
|
filename: config_example_1.yaml
|
|
'400':
|
|
description: Script is not active or checksum validation failed.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_not_active:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:scriptNotActiveOrValid"
|
|
href: null
|
|
title: "The requested Script is not active/valid."
|
|
status: 400
|
|
detail: "The requested script is either inactive or failed checksum validation and cannot be used."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}"
|
|
'404':
|
|
description: Script not found.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:scriptNotFound"
|
|
href: null
|
|
title: "Script not found."
|
|
status: 404
|
|
detail: "The script with the provided deploymentScriptId does not exist."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}"
|
|
delete:
|
|
tags:
|
|
- script-controller
|
|
summary: Script delete operation
|
|
description: >-
|
|
Endpoint to delete one script resulting in the update of the column
|
|
valid (set to false) in the database and remove file from the
|
|
repository.
|
|
operationId: deleteScript
|
|
parameters:
|
|
- name: deploymentScriptId
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'204':
|
|
description: Script deleted successfully. No content is returned.
|
|
'400':
|
|
description: This script is not valid to remove.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_not_valid_to_delete:
|
|
summary: This script is not valid to remove. Already removed before.
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:scriptAlreadyRemoved"
|
|
href: null
|
|
title: "Script already removed."
|
|
status: 400
|
|
detail: "This script cannot be removed because it was already removed previously."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}"
|
|
'404':
|
|
description: Script not found.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_not_found:
|
|
summary: Script not found
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:scriptNotFound"
|
|
href: null
|
|
title: "Script not found."
|
|
status: 404
|
|
detail: "The script with the provided deploymentScriptId does not exist."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/{deploymentScriptId}"
|
|
/scripts/triggerList:
|
|
get:
|
|
tags:
|
|
- script-controller
|
|
summary: Retrieve the list of script triggers
|
|
description: Returns a list of deployment script with triggering process execution, including their metadata, associated files, cloud provider information, and provisioning status.
|
|
operationId: getScriptTriggerList
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DefaultResponse'
|
|
examples:
|
|
success_with_data:
|
|
value:
|
|
success: true
|
|
message: Script list found successfully.
|
|
payload:
|
|
- id: 1
|
|
scriptIdentify:
|
|
id: 1
|
|
deploymentScriptId: c4745f86-f947-4549-8de4-3ee25d310a3f
|
|
title: vm script
|
|
description: VM Script
|
|
file: >-
|
|
YXBpVmVyc2lvbjogcGxhdGZvcm0uZXhhbXBsZS5vcmcvdjFhbHBoYTEKa2luZDogU2VydmVySW5zdGFuY2UKbWV0YWRhdGE6CiAgbmFtZXNwYWNlOiBpbmZyYXN0cnVjdHVyZQogIG5hbWU6IG9mZmVyaW5nLW5hbWUtbWVkaXVtLWluc3RhbmNlLXtVVUlEfQogIGxhYmVsczoKICAgIHV1aWQ6ICJ7VVVJRH0iCiAgICByZWZlcmVuY2Uta2luZDogeHNlcnZlcnNpbnN0YW5jZXMKc3BlYzoKICBwYXJhbWV0ZXJzOgogICAgZGF0YWNlbnRlck5hbWU6IGNyb3NzcGxhbmVfZGF0YWNlbnRlcl9tZWRpdW0te1VVSUR9CiAgICBkYXRhY2VudGVyRGVzY3JpcHRpb246IHRlc3RFeGFtcGxlRGVzY3JpcHRpb24KICAgIGRhdGFjZW50ZXJMb2NhdGlvbjogZGUvdHhsCiAgICBzZXJ2ZXJOYW1lOiBzZXJ2ZXIKICAgIGNvcmVzOiAyCiAgICByYW06IDIwNDgKICAgIGNwdUZhbWlseTogSU5URUxfSUNFTEFLRQpjbG91ZENvbmZpZzoKaG9zdG5hbWU6IGRlZmF1bHQtc2VydmVyIApzc2hfcHdhdXRoOiB0cnVlCmNocGFzc3dkOgogICAgZXhwaXJlOiBmYWxzZQp1c2VyczoKLSBkZWZhdWx0Ci0gbmFtZToge25hbWV9CiAgcGFzc3dkOiB7cHdkfQogIHNoZWxsOiAvYmluL2Jhc2gKICBsb2NrX3Bhc3N3ZDogZmFsc2UKICBzdWRvOiBBTEw9KEFMTCkgTk9QQVNTV0Q6QUxMCiAgZ3JvdXBzOiB1c2VycywgYWRtaW4sIHN1ZG8KcnVuY21kOgotIGVjaG8gInJlZ2VuZXJhdGluZyBob3N0IGtleXMiCi0gcm0gLWYgL2V0Yy9zc2gvc3NoX2hvc3RfKgotIHNzaC1rZXlnZW4gLUEKLSBlY2hvICJyZXN0YXJ0aW5nIHNzaGQiCi0gc3lzdGVtY3RsIHJlc3RhcnQgc3NoZApkZWJ1ZzogdHJ1ZQpvdXRwdXQ6CiAgYWxsOiAifCB0ZWUgLWEgL3Zhci9sb2cvY2xvdWQtaW5pdC1kZWJ1Zy5sb2ciCmZpbmFsX21lc3NhZ2U6ICJEZWZhdWx0IFZNIENsb3VkaW5pdCBkb25lIgogIA==
|
|
location: path
|
|
active: true
|
|
cloudEnvironment:
|
|
id: 2
|
|
environmentName: Awesome env for data Analysis
|
|
iac: Crossplane
|
|
location: Paris
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: Ionos
|
|
datacenterName: DC_Data1
|
|
active: true
|
|
creationDate: '2025-01-15'
|
|
giteaSha: >-
|
|
522dd886075b8b29eee323f38050901e4cb56247501e538492a10a9bf1773a31
|
|
originalFileName: demoScriptInfra.yaml
|
|
provisionedResources:
|
|
- resourceProvisionedId: 2
|
|
resourceProvisionedStatus: SENT
|
|
- resourceProvisionedId: 1
|
|
resourceProvisionedStatus: SENT
|
|
configFiles:
|
|
- id: 1
|
|
filename: config_example.yaml
|
|
- id: 2
|
|
filename: config_example_1.yaml
|
|
success_with_no_data:
|
|
value:
|
|
success: true
|
|
message: Script list found successfully.
|
|
payload: []
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/triggerList"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/triggerList"
|
|
'/cloudProviders':
|
|
get:
|
|
tags:
|
|
- cloud-provider-controller
|
|
summary: Get all Cloud Providers
|
|
operationId: getCloudProviders
|
|
responses:
|
|
'200':
|
|
description: List of Cloud Providers
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CloudProviderListResponse'
|
|
examples:
|
|
success_with_data:
|
|
value:
|
|
success: true
|
|
message: Provider list found successfully.
|
|
payload:
|
|
- id: 1
|
|
cloudProviderName: "Ionos"
|
|
- id: 2
|
|
cloudProviderName: "Aruba"
|
|
- id: 3
|
|
cloudProviderName: "Ovh"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudProviders"
|
|
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudProviders"
|
|
|
|
/cloudEnvironments:
|
|
get:
|
|
tags:
|
|
- cloud-environment-controller
|
|
summary: Retrieve a basic list of Cloud Environments
|
|
description: Returns a simple list of configured cloud environments with their IDs and names.
|
|
operationId: getCloudEnvironmentList
|
|
parameters:
|
|
- name: page
|
|
in: query
|
|
description: Page number (zero-based) to retrieve.
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
default: 0
|
|
- name: size
|
|
in: query
|
|
description: Number of items per page.
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
default: 10
|
|
- name: active
|
|
in: query
|
|
description: Filter results by active status. If not provided, returns both active and inactive environments.
|
|
required: false
|
|
schema:
|
|
type: boolean
|
|
responses:
|
|
'200':
|
|
description: Cloud Environment list found successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CloudEnvironmentListResponse'
|
|
examples:
|
|
success_with_data:
|
|
value:
|
|
success: true
|
|
message: Cloud Environment list found successfully.
|
|
payload:
|
|
content:
|
|
- id: 1
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: Ionos
|
|
iac: iac
|
|
environmentName: environmentName
|
|
environmentDescription: environmentDescription
|
|
datacenterName: datacenterName
|
|
datacenterDescription: datacenterDescription
|
|
location: europe-west3
|
|
active: true
|
|
- id: 2
|
|
cloudProvider:
|
|
id: 2
|
|
cloudProviderName: Ovh
|
|
iac: iac
|
|
environmentName: environmentName
|
|
environmentDescription: environmentDescription
|
|
datacenterName: datacenterName
|
|
datacenterDescription: datacenterDescription
|
|
location: europe-west3
|
|
active: true
|
|
page:
|
|
size: 10
|
|
number: 0
|
|
totalElements: 2
|
|
totalPages: 1
|
|
success_with_no_data:
|
|
value:
|
|
success: true
|
|
message: Provider list found successfully.
|
|
payload:
|
|
content: [ ]
|
|
page:
|
|
size: 0
|
|
number: 0
|
|
totalElements: 0
|
|
totalPages: 0
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments"
|
|
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments"
|
|
post:
|
|
tags:
|
|
- cloud-environment-controller
|
|
summary: Create a new cloud environment
|
|
description: Creates a new cloud environment and stores its token in HashiCorp Vault.
|
|
operationId: createCloudEnvironment
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CloudEnvironmentRequest'
|
|
responses:
|
|
'201':
|
|
description: Cloud Environment created successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DefaultResponse'
|
|
examples:
|
|
saved_successfully:
|
|
value:
|
|
success: true
|
|
message: Cloud Environment saved successfully.
|
|
payload:
|
|
id: 1
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: Ionos
|
|
environmentName: environmentName
|
|
environmentDescription: environmentDescription
|
|
iac: iac
|
|
datacenterName: datacenterName
|
|
datacenterDescription: datacenterDescription
|
|
location: europe-west3
|
|
active: true
|
|
'400':
|
|
description: Invalid input.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
invalid_payload:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:cloudEnvironmentInvalidPayload"
|
|
href: null
|
|
title: "Cloud environment with wrong payload"
|
|
status: 400
|
|
detail: This request payload cannot be used in this operation."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments"
|
|
'409':
|
|
description: Cloud Environment status violation
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
violation:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:cloudEnvironmentViolation"
|
|
href: null
|
|
title: "Cloud Environment status violation."
|
|
status: 409
|
|
detail: "The request related to this Cloud Environment is valid but could not be completed due to a violation conflict with its current state."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments"
|
|
/cloudEnvironments/{cloudEnvironmentId}:
|
|
get:
|
|
tags:
|
|
- cloud-environment-controller
|
|
summary: Retrieve a cloud provider by ID
|
|
description: Returns a specific cloud provider by its identifier.
|
|
operationId: getCloudEnvironmentById
|
|
parameters:
|
|
- name: cloudEnvironmentId
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
- name: active
|
|
in: query
|
|
description: If provided, the endpoint will only return the Cloud Environment when its 'active' status matches this value. If omitted, the resource will be returned regardless of its active status.
|
|
required: false
|
|
schema:
|
|
type: boolean
|
|
responses:
|
|
'200':
|
|
description: Cloud Environment retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CloudEnvironmentResponse'
|
|
examples:
|
|
retrieved_successfully:
|
|
value:
|
|
success: true
|
|
message: Cloud Environment found successfully.
|
|
payload:
|
|
id: 1
|
|
cloudProvider:
|
|
id: 3
|
|
cloudProviderName: "Ovh"
|
|
environmentName: "ovh_1"
|
|
environmentDescription: null
|
|
iac: "terraform"
|
|
datacenterName: "ovh_1"
|
|
datacenterDescription: null
|
|
location: "eua"
|
|
active: true
|
|
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments/{cloudEnvironmentId}"
|
|
|
|
'404':
|
|
description: Cloud Environment not found.
|
|
content:
|
|
application/problem+json:
|
|
examples:
|
|
not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:cloudEnvironmentNotFound"
|
|
href: null
|
|
title: "Cloud Environment not found."
|
|
status: 404
|
|
detail: "This Cloud Environment id not exists in the system with that id and status. Please verify it and try again."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments/{cloudEnvironmentId}"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments/{cloudEnvironmentId}"
|
|
|
|
put:
|
|
tags:
|
|
- cloud-environment-controller
|
|
summary: Update a cloud environment
|
|
description: Updates metadata for an existing cloud environment.
|
|
operationId: updateCloudEnvironment
|
|
parameters:
|
|
- name: cloudEnvironmentId
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CloudEnvironmentRequest'
|
|
responses:
|
|
'200':
|
|
description: Cloud Environment updated successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DefaultResponse'
|
|
examples:
|
|
cloud_environment_updated:
|
|
summary: Provider updated
|
|
value:
|
|
success: true
|
|
message: Cloud Environment updated successfully.
|
|
payload:
|
|
id: 1
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: Ionos
|
|
environmentName: environmentName
|
|
environmentDescription: environmentDescription
|
|
iac: iac
|
|
datacenterName: datacenterName
|
|
datacenterDescription: datacenterDescription
|
|
location: europe-west3
|
|
active: true
|
|
'400':
|
|
description: Invalid input.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
invalid_payload:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:cloudEnvironmentInvalidPayload"
|
|
href: null
|
|
title: "Cloud environment with wrong payload"
|
|
status: 400
|
|
detail: "This request payload cannot be used in this operation."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments/{cloudEnvironmentId}"
|
|
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments/{cloudEnvironmentId}"
|
|
'404':
|
|
description: Cloud Environment not found.
|
|
content:
|
|
application/problem+json:
|
|
examples:
|
|
not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:cloudEnvironmentNotFound"
|
|
href: null
|
|
title: "Cloud Environment not found."
|
|
status: 404
|
|
detail: "This Cloud Environment id not exists in the system. Please verify the id and try again."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments/{cloudEnvironmentId}"
|
|
'409':
|
|
description: Cloud Environment status violation
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
violation:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:cloudEnvironmentViolation"
|
|
href: null
|
|
title: "Cloud Environment status violation."
|
|
status: 409
|
|
detail: "The request related to this Cloud Environment id could not be completed due to a conflict with the current state of the target resource."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments/{cloudEnvironmentId}"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments/{cloudEnvironmentId}"
|
|
|
|
delete:
|
|
tags:
|
|
- cloud-environment-controller
|
|
summary: Delete a cloud environment
|
|
description: Removes an existing cloud environment.
|
|
operationId: deleteCloudEnvironment
|
|
parameters:
|
|
- name: cloudEnvironmentId
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'204':
|
|
description: Cloud Environment deleted successfully. No content is returned.
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments/{cloudEnvironmentId}"
|
|
'404':
|
|
description: Cloud Environment not found.
|
|
content:
|
|
application/problem+json:
|
|
|
|
examples:
|
|
not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:cloudEnvironmentNotFound"
|
|
href: null
|
|
title: "Cloud Environment not found."
|
|
status: 404
|
|
detail: "This Cloud Environment id not exists in the system. Please verify the id and try again."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments/{cloudEnvironmentId}"
|
|
'409':
|
|
description: Cloud Environment status violation
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
violation:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:cloudEnvironmentViolation"
|
|
href: null
|
|
title: "Cloud Environment status violation."
|
|
status: 409
|
|
detail: "The request related to this Cloud Environment id could not be completed due to a conflict with the current state of the target resource."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments/{cloudEnvironmentId}"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudEnvironments/{cloudEnvironmentId}"
|
|
'/requesters':
|
|
get:
|
|
tags:
|
|
- requester-info-controller
|
|
summary: Retrieve a paginated list of requester unique infos
|
|
description: Retrieve a paginated list of requester unique infos with resource status and timestamps.
|
|
operationId: getAllRequesterUniqueInfos
|
|
parameters:
|
|
- name: page
|
|
in: query
|
|
description: Page number (0-based)
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
default: 0
|
|
minimum: 0
|
|
- name: size
|
|
in: query
|
|
description: Page size
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
format: int32
|
|
default: 10
|
|
minimum: 1
|
|
responses:
|
|
'200':
|
|
description: Requester Infos found successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/RequesterInfoListResponse'
|
|
examples:
|
|
success_with_data:
|
|
value:
|
|
success: true
|
|
message: Requester Infos found successfully.
|
|
payload:
|
|
content:
|
|
- requesterUniqueId: e16b5450-c15f-476a-8b42-7de46b4cc8bd
|
|
resourceStatus: DECOMMISSIONED
|
|
provisionedDateTime: null
|
|
decommissionedDateTime: "2026-01-27T12:12:29.542328"
|
|
- requesterUniqueId: 980608e6-b242-4e34-b8f0-c649d086ca52
|
|
resourceStatus: PROVISIONED
|
|
provisionedDateTime: "2026-01-29T13:39:34.936312"
|
|
decommissionedDateTime: null
|
|
page:
|
|
size: 10
|
|
number: 0
|
|
totalElements: 2
|
|
totalPages: 1
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/requesters"
|
|
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/requesters"
|
|
'/resources/deactivation/{requesterUniqueId}':
|
|
delete:
|
|
tags:
|
|
- resource-controller
|
|
summary: Initiate deactivation of provisioned resources by requester ID
|
|
description: Starts the process of deactivating all provisioned resources associated with the specified requester unique ID. The operation is asynchronous and triggers the resource deactivation workflow.
|
|
operationId: deactivateResourceByRequesterUniqueId
|
|
parameters:
|
|
- name: requesterUniqueId
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DefaultResponse'
|
|
examples:
|
|
deactivation_started_successfully:
|
|
value:
|
|
success: true
|
|
message: >-
|
|
The process of deactivating all resources linked to
|
|
requester unique id xpto has been started.
|
|
payload: null
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/resources/deactivation/{requesterUniqueId}"
|
|
'404':
|
|
description: Requester Unique Id not found.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
resource_not_valid_to_remove:
|
|
summary: The requester unique id was not found or is not active.
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:requesterNotFoundOrInactive"
|
|
href: null
|
|
title: "Requester not found or inactive."
|
|
status: 404
|
|
detail: "The requester with the provided unique identifier was not found or is inactive."
|
|
instance: "/api/infrastructureProvisioning/v1/resources/deactivation/{requesterUniqueId}"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/resources/deactivation/{requesterUniqueId}"
|
|
callbacks:
|
|
notificationCallback:
|
|
'{$request.body#/callbackUrl}':
|
|
post:
|
|
summary: Notification sent to the callback URL to update request status
|
|
description: >
|
|
This endpoint must be implemented by the client to receive asynchronous updates regarding infrastructure decommissioning requests.
|
|
Since the decommissioning process can take a significant amount of time to complete, this callback mechanism enables real-time status
|
|
tracking and event-driven integration, ensuring the client is notified as soon as relevant updates occur, without the need manual checks.
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/LongRunProcessRequest'
|
|
responses:
|
|
'200':
|
|
description: Notification successfully received
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DefaultResponse'
|
|
examples:
|
|
script_triggering_started_successfully:
|
|
value:
|
|
success: true
|
|
message: Notification successfully received
|
|
payload: null
|
|
'400':
|
|
description: Invalid input.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_invalid:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:inputNotValid"
|
|
href: null
|
|
title: "Invalid request format"
|
|
status: 400
|
|
detail: "The payload was malformed or missing required fields."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
'404':
|
|
description: Deployment not found.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:deploymentNotFound"
|
|
href: null
|
|
title: "Deployment not found."
|
|
status: 404
|
|
detail: "The deployment with the provided requesterUniqueId does not exist."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/scripts/trigger"
|
|
/templates:
|
|
get:
|
|
tags:
|
|
- template-controller
|
|
summary: Retrieve a list of Templates
|
|
description: Returns a list of configured VM templates with the most relevant data.
|
|
operationId: getTemplateList
|
|
parameters:
|
|
- name: page
|
|
in: query
|
|
description: The page number to retrieve.
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
default: 0
|
|
- name: size
|
|
in: query
|
|
description: The number of items per page.
|
|
required: false
|
|
schema:
|
|
type: integer
|
|
default: 10
|
|
- name: active
|
|
in: query
|
|
description: Filter results by active status. If not provided, returns both active and inactive templates.
|
|
required: false
|
|
schema:
|
|
type: boolean
|
|
responses:
|
|
'200':
|
|
description: VM Template list found successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/TemplateListResponse'
|
|
examples:
|
|
success_with_data:
|
|
value:
|
|
success: true
|
|
message: VM Template list found successfully.
|
|
payload:
|
|
content:
|
|
- id: 1
|
|
cloudEnvironment:
|
|
id: 1
|
|
environmentName: Env for Data Analysis
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: IONOS
|
|
active: true
|
|
cloudProvisionerTemplate:
|
|
id: 2
|
|
fileName: terraform_data_temp_v1
|
|
minCpu: 1
|
|
maxCpu: 4
|
|
minRam: 1024
|
|
maxRam: 2048
|
|
minStorage: 20
|
|
maxStorage: 100
|
|
os:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
templateScript:
|
|
id: 4
|
|
scriptIdentify:
|
|
deploymentScriptId: c4745f86-f947-4549-8de4-3ee25d310a3f
|
|
cpuCores: 2
|
|
ram: 1024
|
|
storage: 98
|
|
os: Ubuntu-22.04
|
|
active: true
|
|
components:
|
|
- id: 12345
|
|
type:
|
|
id: 1
|
|
name: VM Configuration
|
|
name: "Base Cloud-init Script"
|
|
description: "A simple cloud-init script for initial setup."
|
|
content: "#cloud-config\nhostname: ServerApache12"
|
|
active: true
|
|
creationDate: "2025-07-28"
|
|
updateDate: "2025-08-28"
|
|
- id: 12346
|
|
type:
|
|
id: 2
|
|
name: Post Provisioning Operations
|
|
name: "Install Apache"
|
|
description: "Installs and enables the Apache web server."
|
|
content: "#!/bin/bash\nsudo apt-get update\nsudo apt-get install -y apache2"
|
|
active: true
|
|
creationDate: "2024-07-28"
|
|
updateDate: "2024-07-30"
|
|
- id: 2
|
|
cloudEnvironment:
|
|
id: 1
|
|
environmentName: Env for AI/ML
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: OVH
|
|
active: true
|
|
cloudProvisionerTemplate:
|
|
id: 5
|
|
fileName: terraform_ml_temp_v1
|
|
minCpu: 1
|
|
maxCpu: 4
|
|
minRam: 1024
|
|
maxRam: 2048
|
|
minStorage: 20
|
|
maxStorage: 100
|
|
os:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
templateScript:
|
|
id: 5
|
|
scriptIdentify:
|
|
deploymentScriptId: c4745f86-f947-4549-8de4-3ee25d310a8a
|
|
name: Template for AI/ML
|
|
cpuCores: 4
|
|
ram: 2048
|
|
storage: 90
|
|
os: Ubuntu-24.01
|
|
active: true
|
|
components:
|
|
- id: 12345
|
|
type:
|
|
id: 1
|
|
name: VM Configuration
|
|
name: "Base Cloud-init Script"
|
|
description: "A simple cloud-init script for initial setup."
|
|
content: "#cloud-config\nhostname: ServerApache12"
|
|
active: true
|
|
creationDate: "2025-07-28"
|
|
updateDate: "2025-08-28"
|
|
page:
|
|
size: 10
|
|
number: 0
|
|
totalElements: 2
|
|
totalPages: 1
|
|
success_with_no_data:
|
|
value:
|
|
success: true
|
|
message: Provider list found successfully.
|
|
payload:
|
|
content: []
|
|
page:
|
|
size: 10
|
|
number: 0
|
|
totalElements: 0
|
|
totalPages: 0
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/templates"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/templates"
|
|
post:
|
|
tags:
|
|
- template-controller
|
|
summary: Create a new VM Template
|
|
description: >-
|
|
Creates a new VM Template with all the required data. Using this VM template, the Infrastructure Provider
|
|
can create offers in a simple way by creating deployment script based on the VM Template.
|
|
Combining the Cloud Provisioner Template and adding the specific hardware and operative systems for this template,
|
|
the Infrastructure Provider will define an offer to be used on the SIMPL Dataspace.
|
|
operationId: createTemplate
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
oneOf:
|
|
- $ref: '#/components/schemas/IONOSTemplateRequest'
|
|
- $ref: '#/components/schemas/OVHTemplateRequest'
|
|
discriminator:
|
|
propertyName: providerType
|
|
mapping:
|
|
IONOS: '#/components/schemas/IONOSTemplateRequest'
|
|
OVH: '#/components/schemas/OVHTemplateRequest'
|
|
responses:
|
|
'201':
|
|
description: VM Template created successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/TemplateResponse'
|
|
examples:
|
|
saved_successfully:
|
|
value:
|
|
success: true
|
|
message: Vm Template saved successfully.
|
|
payload:
|
|
id: 3
|
|
cloudEnvironment:
|
|
id: 1
|
|
environmentName: Env for AI/ML
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: OVH
|
|
active: true
|
|
cloudProvisionerTemplate:
|
|
id: 2
|
|
fileName: terraform_ai_temp_v1
|
|
minCpu: 1
|
|
maxCpu: 4
|
|
minRam: 1024
|
|
maxRam: 2048
|
|
minStorage: 20
|
|
maxStorage: 100
|
|
os:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
templateScript:
|
|
id: 4
|
|
scriptIdentify:
|
|
deploymentScriptId: c4745f86-f947-4549-8de4-3ee25d310a3f
|
|
name: Template for AI/ML
|
|
cpuCores: 4
|
|
ram: 2048
|
|
storage: 98
|
|
os: Ubuntu-24.01
|
|
components:
|
|
- id: 12345
|
|
type:
|
|
id: 1
|
|
name: VM Configuration
|
|
name: "Base Cloud-init Script"
|
|
description: "A simple cloud-init script for initial setup."
|
|
content: "#cloud-config\nhostname: ServerApache12"
|
|
active: true
|
|
creationDate: "2025-07-28"
|
|
- id: 12346
|
|
type:
|
|
id: 2
|
|
name: Post Provisioning Operations
|
|
name: "Install Apache"
|
|
description: "Installs and enables the Apache web server."
|
|
content: "#!/bin/bash\nsudo apt-get update\nsudo apt-get install -y apache2"
|
|
active: true
|
|
creationDate: "2024-07-28"
|
|
'400':
|
|
description: Invalid input.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
invalid_payload:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateInvalidPayload"
|
|
href: null
|
|
title: "Template with wrong payload"
|
|
status: 400
|
|
detail: "This request payload cannot be used in this operation."
|
|
instance: "/api/infrastructureProvisioning/v1/templates"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/templates"
|
|
'409':
|
|
description: Template status violation
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
violation:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateViolation"
|
|
href: null
|
|
title: "Template status violation."
|
|
status: 409
|
|
detail: "The request related to this VM Template is valid but could not be completed due to a violation conflict with its current state."
|
|
instance: "/api/infrastructureProvisioning/v1/templates"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/templates"
|
|
/templates/{templateId}:
|
|
get:
|
|
tags:
|
|
- template-controller
|
|
summary: Retrieve a template by Id
|
|
description: Returns a specific template by its identifier.
|
|
operationId: getTemplateById
|
|
parameters:
|
|
- name: templateId
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
- name: active
|
|
in: query
|
|
description: If provided, the endpoint will only return the Template when its 'active' status matches this value. If omitted, the resource will be returned regardless of its active status.
|
|
required: false
|
|
schema:
|
|
type: boolean
|
|
responses:
|
|
'200':
|
|
description: Template retrieved successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/TemplateResponse'
|
|
examples:
|
|
retrieved_successfully:
|
|
value:
|
|
success: true
|
|
message: VM Template found successfully.
|
|
payload:
|
|
id: 3
|
|
cloudEnvironment:
|
|
id: 1
|
|
environmentName: Env for Data Analysis
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: IONOS
|
|
active: true
|
|
cloudProvisionerTemplate:
|
|
id: 2
|
|
fileName: terraform_data_temp_v1
|
|
minCpu: 1
|
|
maxCpu: 4
|
|
minRam: 1024
|
|
maxRam: 2048
|
|
minStorage: 20
|
|
maxStorage: 100
|
|
os:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
templateScript:
|
|
id: 4
|
|
scriptIdentify:
|
|
deploymentScriptId: c4745f86-f947-4549-8de4-3ee25d310a3f
|
|
name: Template for Env for Data Analysis
|
|
cpuCores: 2
|
|
ram: 1024
|
|
storage: 98
|
|
os: Ubuntu-22.04
|
|
active: true
|
|
components:
|
|
- id: 12345
|
|
type:
|
|
id: 1
|
|
name: VM Configuration
|
|
name: "Base Cloud-init Script"
|
|
description: "A simple cloud-init script for initial setup."
|
|
content: "#cloud-config\nhostname: ServerApache12"
|
|
active: true
|
|
creationDate: "2025-07-28"
|
|
- id: 12346
|
|
type:
|
|
id: 2
|
|
name: Post Provisioning Operations
|
|
name: "Install Apache"
|
|
description: "Installs and enables the Apache web server."
|
|
content: "#!/bin/bash\nsudo apt-get update\nsudo apt-get install -y apache2"
|
|
active: true
|
|
creationDate: "2024-07-28"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
'404':
|
|
description: Template not found.
|
|
content:
|
|
application/problem+json:
|
|
examples:
|
|
not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateNotFound"
|
|
href: null
|
|
title: "Template not found."
|
|
status: 404
|
|
detail: "This Template id does not exists in the system. Please verify the id and try again."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
put:
|
|
tags:
|
|
- template-controller
|
|
summary: Update a VM Template
|
|
description: Updates metadata for an existing VM template.
|
|
operationId: updateTemplate
|
|
parameters:
|
|
- name: templateId
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
oneOf:
|
|
- $ref: '#/components/schemas/IONOSTemplateRequest'
|
|
- $ref: '#/components/schemas/OVHTemplateRequest'
|
|
discriminator:
|
|
propertyName: providerType
|
|
mapping:
|
|
IONOS: '#/components/schemas/IONOSTemplateRequest'
|
|
OVH: '#/components/schemas/OVHTemplateRequest'
|
|
responses:
|
|
'200':
|
|
description: Template updated successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/TemplateResponse'
|
|
examples:
|
|
template_updated:
|
|
summary: Template updated
|
|
value:
|
|
success: true
|
|
message: Template updated successfully.
|
|
payload:
|
|
id: 3
|
|
cloudEnvironment:
|
|
id: 1
|
|
environmentName: Env for AI/ML
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: OVH
|
|
active: true
|
|
cloudProvisionerTemplate:
|
|
id: 2
|
|
fileName: terraform_ai_temp_v1
|
|
minCpu: 1
|
|
maxCpu: 4
|
|
minRam: 1024
|
|
maxRam: 2048
|
|
minStorage: 20
|
|
maxStorage: 100
|
|
os:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
templateScript:
|
|
id: 4
|
|
scriptIdentify:
|
|
deploymentScriptId: c4745f86-f947-4549-8de4-3ee25d310a3f
|
|
name: Template for AI/ML
|
|
cpuCores: 4
|
|
ram: 2048
|
|
storage: 98
|
|
os: Ubuntu-24.01
|
|
components:
|
|
- id: 12345
|
|
type:
|
|
id: 1
|
|
name: VM Configuration
|
|
name: "Base Cloud-init Script"
|
|
description: "A simple cloud-init script for initial setup."
|
|
content: "#cloud-config\nhostname: ServerApache12"
|
|
active: true
|
|
creationDate: "2025-07-28"
|
|
- id: 12346
|
|
type:
|
|
id: 2
|
|
name: Post Provisioning Operations
|
|
name: "Install Apache"
|
|
description: "Installs and enables the Apache web server."
|
|
content: "#!/bin/bash\nsudo apt-get update\nsudo apt-get install -y apache2"
|
|
active: true
|
|
creationDate: "2024-07-28"
|
|
'400':
|
|
description: Invalid input.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
invalid_payload:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateInvalidPayload"
|
|
href: null
|
|
title: "Template with wrong payload"
|
|
status: 400
|
|
detail: "This request payload cannot be used in this operation."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
'404':
|
|
description: Template not found.
|
|
content:
|
|
application/problem+json:
|
|
examples:
|
|
not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateNotFound"
|
|
href: null
|
|
title: "Template not found."
|
|
status: 404
|
|
detail: "This template id does not exist in the system. Please verify the id and try again."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
'409':
|
|
description: Template status violation
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
violation:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateViolation"
|
|
href: null
|
|
title: "Template status violation."
|
|
status: 409
|
|
detail: "The request related to this VM Template id could not be completed due to a conflict with the current state of the target resource."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
delete:
|
|
tags:
|
|
- template-controller
|
|
summary: Delete a template
|
|
description: Removes an existing template.
|
|
operationId: deleteTemplate
|
|
parameters:
|
|
- name: templateId
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'204':
|
|
description: Template deleted successfully. No content is returned.
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
'404':
|
|
description: Template not found.
|
|
content:
|
|
application/problem+json:
|
|
examples:
|
|
not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateNotFound"
|
|
href: null
|
|
title: "Template not found."
|
|
status: 404
|
|
detail: "This Template id does not exist in the system. Please verify the id and try again."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
'409':
|
|
description: Template status violation
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
violation:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateViolation"
|
|
href: null
|
|
title: "Template status violation."
|
|
status: 409
|
|
detail: "The request related to this VM Template id could not be completed due to a conflict with the current state of the target resource."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
/templates/{templateId}/copy:
|
|
post:
|
|
tags:
|
|
- template-controller
|
|
summary: Creates a new template based on another one.
|
|
description: Creates a new template based on another one based on the id that is provided.
|
|
operationId: copyTemplate
|
|
parameters:
|
|
- in: path
|
|
name: templateId
|
|
schema:
|
|
type: integer
|
|
required: true
|
|
description: The unique identifier of the template whose metadata is to be copied.
|
|
responses:
|
|
'200':
|
|
description: Template copied successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/TemplateResponse'
|
|
examples:
|
|
template_copied:
|
|
summary: Template copied
|
|
value:
|
|
success: true
|
|
message: Template copied successfully.
|
|
payload:
|
|
id: 4
|
|
cloudEnvironment:
|
|
id: 1
|
|
environmentName: Env for AI/ML
|
|
cloudProvider:
|
|
id: 1
|
|
cloudProviderName: OVH
|
|
active: true
|
|
cloudProvisionerTemplate:
|
|
id: 2
|
|
fileName: terraform_ai_temp_v1
|
|
minCpu: 1
|
|
maxCpu: 4
|
|
minRam: 1024
|
|
maxRam: 2048
|
|
minStorage: 20
|
|
maxStorage: 100
|
|
os:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
templateScript:
|
|
id: 4
|
|
scriptIdentify:
|
|
deploymentScriptId: c4745f86-f947-4549-8de4-3ee25d310a33
|
|
name: COPY OF Template for AI/ML
|
|
cpuCores: 4
|
|
ram: 2048
|
|
storage: 98
|
|
os: Ubuntu-24.01
|
|
components:
|
|
- id: 12345
|
|
type:
|
|
id: 1
|
|
name: VM Configuration
|
|
name: "Base Cloud-init Script"
|
|
description: "A simple cloud-init script for initial setup."
|
|
content: "#cloud-config\nhostname: ServerApache12"
|
|
active: true
|
|
creationDate: "2025-07-28"
|
|
- id: 12346
|
|
type:
|
|
id: 2
|
|
name: Post Provisioning Operations
|
|
name: "Install Apache"
|
|
description: "Installs and enables the Apache web server."
|
|
content: "#!/bin/bash\nsudo apt-get update\nsudo apt-get install -y apache2"
|
|
active: true
|
|
creationDate: "2024-07-28"
|
|
'400':
|
|
description: Template is invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
script_invalid:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateInvalidPayload"
|
|
href: null
|
|
title: "Template with wrong payload"
|
|
status: 400
|
|
detail: "This request payload cannot be used in this operation."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}/copy"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}/copy"
|
|
'404':
|
|
description: Template not found.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
template_not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateNotFound"
|
|
href: null
|
|
title: "Template not found."
|
|
status: 404
|
|
detail: "The templateId does not exist."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}/copy"
|
|
'409':
|
|
description: Template status violation
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
violation:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateViolation"
|
|
href: null
|
|
title: "Template status violation."
|
|
status: 409
|
|
detail: "The request related to this VM Template id could not be completed due to a conflict with the current state of the target resource."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/templates/{templateId}/copy"
|
|
/cloudProvisionerTemplates:
|
|
get:
|
|
tags:
|
|
- cloud-provisioner-template-controller
|
|
summary: Retrieve a list of Provisioner Templates
|
|
description: Returns a list of provision templates with their details.
|
|
operationId: getCloudProvisionerTemplateList
|
|
responses:
|
|
'200':
|
|
description: Cloud Provisioner Template list found successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CloudProvisionerTemplateListResponse'
|
|
examples:
|
|
success_with_data:
|
|
value:
|
|
success: true
|
|
message: Cloud Provisioner Template list found successfully.
|
|
payload:
|
|
- id: 1
|
|
fileName: terraform_data_temp_v1
|
|
minCpu: 1
|
|
maxCpu: 4
|
|
minRam: 1024
|
|
maxRam: 2048
|
|
minStorage: 20
|
|
maxStorage: 100
|
|
os:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
providerType: IONOS
|
|
- id: 2
|
|
fileName: terraform_ml_temp_v1
|
|
os:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
projectId: c67c62fb7a574a88ba4cXXXXXXXXXXXX
|
|
region: GRA11
|
|
flavor: d2-2
|
|
providerType: OVH
|
|
success_with_no_data:
|
|
value:
|
|
success: true
|
|
message: Cloud Provisioner Template list found successfully.
|
|
payload: []
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudProvisionerTemplates"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudProvisionerTemplates"
|
|
post:
|
|
tags:
|
|
- cloud-provisioner-template-controller
|
|
summary: Create a new Cloud Provisioner Template
|
|
description: >-
|
|
Creates a new Cloud Provisioner Template with all the required data. This provisioner template will then be used to create
|
|
SIMPL VM templates to support the Infrastructure Provider in the creation of offers that the end user will consume.
|
|
By uploading a provisioning technology like Terraform or Crossplane and adding the hardware and operative systems,
|
|
the Infrastructure Provider will define the rules of creation of the SIMPL VM Template.
|
|
operationId: createCloudProvisionerTemplate
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
required:
|
|
- file
|
|
- cloudProvisionerTemplateRequest
|
|
type: object
|
|
properties:
|
|
cloudProvisionerTemplateRequest:
|
|
oneOf:
|
|
- $ref: '#/components/schemas/IONOSProvisionerTemplateRequest'
|
|
- $ref: '#/components/schemas/OVHProvisionerTemplateRequest'
|
|
discriminator:
|
|
propertyName: providerType
|
|
mapping:
|
|
IONOS: '#/components/schemas/IONOSProvisionerTemplateRequest'
|
|
OVH: '#/components/schemas/OVHProvisionerTemplateRequest'
|
|
file:
|
|
type: string
|
|
format: binary
|
|
responses:
|
|
'201':
|
|
description: Cloud Provisioner Template created successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CloudProvisionerTemplateResponse'
|
|
examples:
|
|
saved_successfully:
|
|
value:
|
|
success: true
|
|
message: Cloud Provisioner Template saved successfully.
|
|
payload:
|
|
id: 3
|
|
fileName: terraform_ai_temp_v1
|
|
minCpu: 1
|
|
maxCpu: 4
|
|
minRam: 1024
|
|
maxRam: 2048
|
|
minStorage: 20
|
|
maxStorage: 100
|
|
os:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
providerType: IONOS
|
|
'400':
|
|
description: Invalid request or duplicate template.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
duplicate_name:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateDuplicatedName"
|
|
href: null
|
|
title: "Template this name already exists."
|
|
status: 400
|
|
detail: "Template with the same name already exists. This name cannot be used in this operation."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudProvisionerTemplates"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudProvisionerTemplates"
|
|
'409':
|
|
description: Cloud Provisioner Template status violation
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
violation:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:cloudProvisionerTemplateViolation"
|
|
href: null
|
|
title: "Cloud Provisioner Template status violation."
|
|
status: 409
|
|
detail: "The request related to this Cloud Provisioner Template is valid but could not be completed due to a violation conflict with its current state."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudProvisionerTemplates"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudProvisionerTemplates"
|
|
/cloudProvisionerTemplates/{cloudProvisionerTemplateId}/componentLimits:
|
|
get:
|
|
tags:
|
|
- cloud-provisioner-template-controller
|
|
summary: Retrieve component limits details
|
|
description: Fetch detailed information about the components limits of the Cloud Provisioner Template id to be used on the creation of the VM template.
|
|
operationId: getComponentLimitsByCloudProvisionerTemplateId
|
|
parameters:
|
|
- name: cloudProvisionerTemplateId
|
|
in: path
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Limits found successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ComponentLimitsResponse'
|
|
examples:
|
|
limits_found:
|
|
value:
|
|
success: true
|
|
message: Range limits found successfully.
|
|
payload:
|
|
id: 1
|
|
minCpu: 1
|
|
maxCpu: 4
|
|
minRam: 1024
|
|
maxRam: 2048
|
|
minStorage: 20
|
|
maxStorage: 100
|
|
os:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
'400':
|
|
description: Limits are invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
limits_not_active:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateNotActiveOrValid"
|
|
href: null
|
|
title: "The requested limits are not active/valid."
|
|
status: 400
|
|
detail: "The requested script are either inactive or not valid."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudProvisionerTemplates/{cloudProvisionerTemplateId}/componentLimits"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudProvisionerTemplates/{cloudProvisionerTemplateId}/componentLimits"
|
|
'404':
|
|
description: Cloud Provisioner Template not found.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
template_not_found:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:templateNotFound"
|
|
href: null
|
|
title: "Template not found."
|
|
status: 404
|
|
detail: "The templateId does not exist."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudProvisionerTemplates/{cloudProvisionerTemplateId}/componentLimits"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/cloudProvisionerTemplates/{cloudProvisionerTemplateId}/componentLimits"
|
|
# --- Endpoints for managing independent VM components ---
|
|
/components:
|
|
get:
|
|
tags:
|
|
- components-controller
|
|
summary: List all components (with optional filtering by type)
|
|
description: Returns a list of all component definitions, optionally filtered by component type.
|
|
operationId: getComponentList
|
|
parameters:
|
|
- name: type
|
|
in: query
|
|
description: Filter components by their type.
|
|
required: false
|
|
schema:
|
|
type: string
|
|
enum:
|
|
- vm-configuration
|
|
- post-provisioning-operations
|
|
- policies
|
|
responses:
|
|
'200':
|
|
description: Components list found successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ComponentListResponse'
|
|
examples:
|
|
success_with_data:
|
|
value:
|
|
success: true
|
|
message: Components list found successfully.
|
|
payload:
|
|
- id: 12345
|
|
type:
|
|
id: 1
|
|
name: VM Configuration
|
|
name: "Base Cloud-init Script"
|
|
description: "A simple cloud-init script for initial setup."
|
|
content: "#cloud-config\nhostname: ServerApache12"
|
|
active: true
|
|
creationDate: "2025-07-28"
|
|
- id: 12346
|
|
type:
|
|
id: 2
|
|
name: Post Provisioning Operations
|
|
name: "Install Apache"
|
|
description: "Installs and enables the Apache web server."
|
|
content: "#!/bin/bash\nsudo apt-get update\nsudo apt-get install -y apache2"
|
|
active: true
|
|
creationDate: "2024-07-28"
|
|
success_with_no_data:
|
|
value:
|
|
success: true
|
|
message: Components list found successfully.
|
|
payload: []
|
|
'400':
|
|
description: Invalid request.
|
|
content:
|
|
application/problem+json:
|
|
examples:
|
|
invalid_filter_type:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:invalidName"
|
|
href: null
|
|
title: "Component type does not exists."
|
|
status: 400
|
|
detail: "Input component type does not exists. This name cannot be used in this operation."
|
|
instance: "/api/infrastructureProvisioning/v1/components"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/components"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/components"
|
|
post:
|
|
tags:
|
|
- components-controller
|
|
summary: Create a new component
|
|
description: Creates a new component definition that can be assigned to a VM template.
|
|
operationId: createComponent
|
|
requestBody:
|
|
description: The component object to create.
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ComponentRequest'
|
|
responses:
|
|
'201':
|
|
description: The component was created successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ComponentResponse'
|
|
examples:
|
|
newComponent:
|
|
value:
|
|
success: true
|
|
message: Vm Component saved successfully.
|
|
payload:
|
|
id: 12347
|
|
type:
|
|
id: 3
|
|
name: Policies
|
|
name: "User Limit Policy"
|
|
description: "Policy that limits the number of users on the VM."
|
|
content: "apt-get remove --purge -y adduser useradd deluser"
|
|
active: true
|
|
creationDate: "2024-03-28"
|
|
'400':
|
|
description: Invalid component.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
invalid_payload:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:componentInvalidPayload"
|
|
href: null
|
|
title: "Component with wrong payload"
|
|
status: 400
|
|
detail: "This request payload cannot be used in this operation."
|
|
instance: "/api/infrastructureProvisioning/v1/components"
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/components"
|
|
'409':
|
|
description: Component status violation
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
violation:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:componentViolation"
|
|
href: null
|
|
title: "Component status violation."
|
|
status: 409
|
|
detail: "The request related to this Component is valid but could not be completed due to a violation conflict with its current state."
|
|
instance: "/api/infrastructureProvisioning/v1/components"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/components"
|
|
|
|
/components/types:
|
|
get:
|
|
tags:
|
|
- components-controller
|
|
summary: Retrieve a list of component types
|
|
description: Returns a list of component types.
|
|
operationId: getComponentTypeList
|
|
responses:
|
|
'200':
|
|
description: Component type list found successfully.
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ComponentTypeListResponse'
|
|
examples:
|
|
success_with_data:
|
|
value:
|
|
success: true
|
|
message: Component type list found successfully.
|
|
payload:
|
|
- id: 1
|
|
name: VM Configuration
|
|
- id: 2
|
|
name: Post Provisioning Operations
|
|
- id: 3
|
|
name: Policies
|
|
success_with_no_data:
|
|
value:
|
|
success: true
|
|
message: Component type list found successfully.
|
|
payload: []
|
|
'401':
|
|
description: Authorization token is missing or invalid.
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
Unauthorized:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:tokenMissingOrInvalid"
|
|
href: null
|
|
title: "Authorization token is missing or invalid."
|
|
status: 401
|
|
detail: "The request requires a valid authorization token, which was either missing or invalid."
|
|
instance: "/api/infrastructureProvisioning/v1/components/types"
|
|
'500':
|
|
description: Internal server error. Couldn't connect to server (API is down).
|
|
content:
|
|
application/problem+json:
|
|
schema:
|
|
$ref: '#/components/schemas/Problem'
|
|
examples:
|
|
service_unavailable:
|
|
value:
|
|
type: "urn:problem-type:simpl:infrastructureProvisioning:internalError"
|
|
href: null
|
|
title: "Internal Server Error"
|
|
status: 500
|
|
detail: "An unexpected error occurred. Please try again later."
|
|
instance: "/api/infrastructureProvisioning/v1/components/types"
|
|
components:
|
|
schemas:
|
|
CloudProviderLimits:
|
|
required:
|
|
- os
|
|
- providerType
|
|
type: object
|
|
properties:
|
|
os:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: OS's allows for the creation of VM's
|
|
example:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
providerType:
|
|
type: string
|
|
description: Discriminator field to identify the cloud provider.
|
|
example: "OVH"
|
|
IONOSProvisionerTemplate:
|
|
allOf:
|
|
- $ref: '#/components/schemas/CloudProvisionerTemplate'
|
|
- type: object
|
|
properties:
|
|
minCpuCore:
|
|
type: integer
|
|
format: int32
|
|
description: Minimum number of cores for the VM
|
|
example: 1
|
|
maxCpuCore:
|
|
type: integer
|
|
format: int32
|
|
description: Maximum number of cores for the VM
|
|
example: 4
|
|
minRam:
|
|
type: integer
|
|
format: int32
|
|
description: Minimum ram size (Mb) for the VM
|
|
example: 1024
|
|
maxRam:
|
|
type: integer
|
|
format: int32
|
|
description: Maximum ram size (Mb) for the VM
|
|
example: 2048
|
|
minStorage:
|
|
type: integer
|
|
format: int32
|
|
description: Minimum storage size (Gb) for the VM
|
|
example: 25
|
|
maxStorage:
|
|
type: integer
|
|
format: int32
|
|
description: Maximum storage size (Gb) for the VM
|
|
example: 100
|
|
IONOSProvisionerTemplateRequest:
|
|
required:
|
|
- minCpuCore
|
|
- maxCpuCore
|
|
- minRam
|
|
- maxRam
|
|
- minStorage
|
|
- maxStorage
|
|
- providerType
|
|
allOf:
|
|
- $ref: '#/components/schemas/CloudProvisionerTemplateRequest'
|
|
- type: object
|
|
properties:
|
|
minCpuCore:
|
|
type: integer
|
|
format: int32
|
|
description: Minimum number of cores for the VM
|
|
example: 1
|
|
maxCpuCore:
|
|
type: integer
|
|
format: int32
|
|
description: Maximum number of cores for the VM
|
|
example: 4
|
|
minRam:
|
|
type: integer
|
|
format: int32
|
|
description: Minimum ram size (Mb) for the VM
|
|
example: 1024
|
|
maxRam:
|
|
type: integer
|
|
format: int32
|
|
description: Maximum ram size (Mb) for the VM
|
|
example: 2048
|
|
minStorage:
|
|
type: integer
|
|
format: int32
|
|
description: Minimum storage size (Gb) for the VM
|
|
example: 25
|
|
maxStorage:
|
|
type: integer
|
|
format: int32
|
|
description: Maximum storage size (Gb) for the VM
|
|
example: 100
|
|
providerType:
|
|
type: string
|
|
description: Discriminator field to identify the cloud provider.
|
|
example: "IONOS"
|
|
IONOSLimits:
|
|
allOf:
|
|
- $ref: '#/components/schemas/CloudProviderLimits'
|
|
- type: object
|
|
properties:
|
|
minCpuCore:
|
|
type: integer
|
|
format: int32
|
|
description: Minimum number of cores for the VM
|
|
example: 1
|
|
maxCpuCore:
|
|
type: integer
|
|
format: int32
|
|
description: Maximum number of cores for the VM
|
|
example: 4
|
|
minRam:
|
|
type: integer
|
|
format: int32
|
|
description: Minimum ram size (Mb) for the VM
|
|
example: 1024
|
|
maxRam:
|
|
type: integer
|
|
format: int32
|
|
description: Maximum ram size (Mb) for the VM
|
|
example: 2048
|
|
minStorage:
|
|
type: integer
|
|
format: int32
|
|
description: Minimum storage size (Gb) for the VM
|
|
example: 25
|
|
maxStorage:
|
|
type: integer
|
|
format: int32
|
|
description: Maximum storage size (Gb) for the VM
|
|
example: 100
|
|
- description: 'IONOS limits sent to the client to IONOS VMs'
|
|
OVHProvisionerTemplate:
|
|
allOf:
|
|
- $ref: '#/components/schemas/CloudProvisionerTemplate'
|
|
- type: object
|
|
properties:
|
|
projectId:
|
|
type: string
|
|
description: Project id related to the environment of the VM
|
|
example: c67c62fb7a574a88ba4cXXXXXXXXXXXX
|
|
region:
|
|
type: string
|
|
description: Region where the VM will be running
|
|
example: GRA11
|
|
flavor:
|
|
type: string
|
|
description: OVH flavor for the VM
|
|
example: d2-2
|
|
OVHProvisionerTemplateRequest:
|
|
required:
|
|
- projectId
|
|
- region
|
|
- flavor
|
|
- providerType
|
|
allOf:
|
|
- $ref: '#/components/schemas/CloudProvisionerTemplateRequest'
|
|
- type: object
|
|
properties:
|
|
projectId:
|
|
type: string
|
|
description: Project id related to the environment of the VM
|
|
example: c67c62fb7a574a88ba4cXXXXXXXXXXXX
|
|
region:
|
|
type: string
|
|
description: Region where the VM will be running
|
|
example: GRA11
|
|
flavor:
|
|
type: string
|
|
description: OVH flavor for the VM
|
|
example: d2-2
|
|
providerType:
|
|
type: string
|
|
description: Discriminator field to identify the cloud provider.
|
|
example: "OVH"
|
|
OVHLimits:
|
|
type: object
|
|
allOf:
|
|
- $ref: '#/components/schemas/CloudProviderLimits'
|
|
- type: object
|
|
- description: 'OVH limits sent to the client to build OVH VMs'
|
|
CloudEnvironment:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
description: 'Auto Increment, Primary Key, unique identifier for each Cloud Environment'
|
|
format: int64
|
|
environmentName:
|
|
maxLength: 100
|
|
minLength: 3
|
|
type: string
|
|
description: Environment name.
|
|
environmentDescription:
|
|
minLength: 3
|
|
type: string
|
|
description: Environment description.
|
|
iac:
|
|
maxLength: 50
|
|
minLength: 5
|
|
type: string
|
|
description: Infrastructure as Code technology to support the deployed resources.
|
|
datacenterName:
|
|
maxLength: 100
|
|
minLength: 3
|
|
type: string
|
|
description: Name of the DataCenter where the resources will be provisioned.
|
|
datacenterDescription:
|
|
minLength: 3
|
|
type: string
|
|
description: Description of the DataCenter.
|
|
location:
|
|
maxLength: 100
|
|
minLength: 3
|
|
type: string
|
|
description: Cloud Environment location identifier (e.g., us-east-1, europe-west3).
|
|
totalCpuCores:
|
|
type: integer
|
|
format: int32
|
|
description: The number of total cores available for the Cloud Environment
|
|
minimum: 1
|
|
example: 200
|
|
usedCpuCores:
|
|
type: integer
|
|
format: int32
|
|
description: The number of cores used by the Cloud Environment
|
|
minimum: 1
|
|
example: 20
|
|
totalRam:
|
|
type: integer
|
|
format: int32
|
|
description: The total amount of memory available for the Cloud Environment
|
|
minimum: 1
|
|
example: 128
|
|
usedRam:
|
|
type: integer
|
|
format: int32
|
|
description: RAM used by the Cloud Environment
|
|
minimum: 1
|
|
example: 20
|
|
totalStorage:
|
|
type: integer
|
|
format: int32
|
|
description: The total amount of storage available for the Cloud Environment
|
|
minimum: 1
|
|
example: 128
|
|
usedStorage:
|
|
type: integer
|
|
format: int32
|
|
description: Storage used by the Cloud Environment
|
|
minimum: 1
|
|
example: 20
|
|
vaultUser:
|
|
type: string
|
|
description: Vault identity or role with permissions to access the cloud environment token.
|
|
vaultKey:
|
|
type: string
|
|
description: Vault path or key where the cloud environment token is securely stored.
|
|
cloudProvider:
|
|
allOf:
|
|
- $ref: '#/components/schemas/CloudProviderResponse'
|
|
description: Cloud Provider where the script will be executed
|
|
active:
|
|
type: boolean
|
|
description: Indicates if the cloud environment is active (True) or inactive (False).
|
|
description: >-
|
|
Cloud Environment entity class. Cloud Environment compatible with the script (e.g.
|
|
Ionos, Aruba, Ovh...).
|
|
CloudProviderResponse:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
description: 'Auto Increment, Primary Key, unique identifier for each Cloud Provider'
|
|
format: int64
|
|
cloudProviderName:
|
|
maxLength: 100
|
|
minLength: 3
|
|
type: string
|
|
description: Cloud Provider name.
|
|
CloudEnvironmentRequest:
|
|
required:
|
|
- cloudProviderId
|
|
- environmentName
|
|
- location
|
|
- iac
|
|
- datacenterName
|
|
- authenticationConfig
|
|
type: object
|
|
properties:
|
|
cloudProviderId:
|
|
type: integer
|
|
format: int64
|
|
description: Cloud Provider id.
|
|
example: 123
|
|
environmentName:
|
|
maxLength: 100
|
|
minLength: 3
|
|
type: string
|
|
description: Environment name.
|
|
example: HealthEnv
|
|
environmentDescription:
|
|
minLength: 3
|
|
type: string
|
|
description: Environment description.
|
|
example: Environment for health data processing
|
|
iac:
|
|
maxLength: 50
|
|
minLength: 5
|
|
type: string
|
|
description: Infrastructure as Code technology to support the deployed resources.
|
|
example: Crossplane
|
|
datacenterName:
|
|
maxLength: 100
|
|
minLength: 3
|
|
type: string
|
|
description: Name of the DataCenter where the resources will be provisioned.
|
|
example: DC1_Health
|
|
datacenterDescription:
|
|
minLength: 3
|
|
type: string
|
|
description: Description of the DataCenter.
|
|
example: Datacenter to provision resources for health data
|
|
location:
|
|
maxLength: 100
|
|
minLength: 3
|
|
type: string
|
|
description: Cloud Environment location identifier (e.g., us-east-1, europe-west3).
|
|
example: Frankfurt
|
|
totalCpuCores:
|
|
type: integer
|
|
format: int32
|
|
description: The number of total cores available for the Cloud Environment
|
|
minimum: 1
|
|
example: 200
|
|
usedCpuCores:
|
|
type: integer
|
|
format: int32
|
|
description: The number of cores used by the Cloud Environment
|
|
minimum: 1
|
|
example: 20
|
|
totalRam:
|
|
type: integer
|
|
format: int32
|
|
description: The total amount of memory available for the Cloud Environment
|
|
minimum: 1
|
|
example: 128
|
|
usedRam:
|
|
type: integer
|
|
format: int32
|
|
description: RAM used by the Cloud Environment
|
|
minimum: 1
|
|
example: 20
|
|
totalStorage:
|
|
type: integer
|
|
format: int32
|
|
description: The total amount of storage available for the Cloud Environment
|
|
minimum: 1
|
|
example: 128
|
|
usedStorage:
|
|
type: integer
|
|
format: int32
|
|
description: Storage used by the Cloud Environment
|
|
minimum: 1
|
|
example: 20
|
|
authenticationConfig:
|
|
type: string
|
|
description: >
|
|
JSON-formatted string containing authentication credentials (e.g., keys, tokens)
|
|
required to interact with the cloud provider API for resource management.
|
|
example: {"IONOS_TOKEN":"abc123-fake-token-456xyz","REFRESH_TOKEN":"refresh-token-789xyz","EXPIRATION":"2025-12-31T23:59:59Z"}
|
|
description: >-
|
|
Object with mandatory parameters to store a Cloud Environment (using API or UI).
|
|
RequesterInfoResponse:
|
|
type: object
|
|
properties:
|
|
requesterUniqueId:
|
|
type: string
|
|
description: Unique identifier field for each requester.
|
|
example: e16b5450-c15f-476a-8b42-7de46b4cc8bd
|
|
resourceStatus:
|
|
type: string
|
|
description: Resource status name.
|
|
example: PROVISIONED
|
|
provisionedDateTime:
|
|
type: string
|
|
format: date-time
|
|
nullable: true
|
|
description: Timestamp when resource was provisioned.
|
|
example: "2026-01-29T13:39:34.936312"
|
|
decommissionedDateTime:
|
|
type: string
|
|
format: date-time
|
|
nullable: true
|
|
description: Timestamp when resource was decommissioned.
|
|
example: "2026-01-29T16:40:48.11922"
|
|
RequesterInfoListResponse:
|
|
description: >-
|
|
List of Requester Info data sent back to the client
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
type: object
|
|
properties:
|
|
content:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/RequesterInfoResponse'
|
|
page:
|
|
type: object
|
|
properties:
|
|
size:
|
|
type: integer
|
|
number:
|
|
type: integer
|
|
totalElements:
|
|
type: integer
|
|
totalPages:
|
|
type: integer
|
|
ScriptRequest:
|
|
required:
|
|
- cloudEnvironmentId
|
|
- description
|
|
- title
|
|
type: object
|
|
properties:
|
|
title:
|
|
maxLength: 100
|
|
minLength: 5
|
|
type: string
|
|
example: Virtual_Machine_Script
|
|
description: Script file title.
|
|
description:
|
|
maxLength: 2147483647
|
|
minLength: 10
|
|
type: string
|
|
example: Script to deploy a virtual machine
|
|
description: Script file description.
|
|
cloudEnvironmentId:
|
|
type: integer
|
|
description: 'Unique identifier for the selected Cloud Environment'
|
|
format: int64
|
|
example: 12345
|
|
description: Object with mandatory parameters to storage a Script (using API or UI).
|
|
ScriptListResponse:
|
|
description: >-
|
|
List of Deployment Scripts sent back to the client
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
type: object
|
|
properties:
|
|
content:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Script'
|
|
page:
|
|
type: object
|
|
properties:
|
|
size:
|
|
type: integer
|
|
number:
|
|
type: integer
|
|
totalElements:
|
|
type: integer
|
|
totalPages:
|
|
type: integer
|
|
ScriptResponse:
|
|
description: >-
|
|
Structure of a Deployment Script sent back to the client
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
$ref: '#/components/schemas/Script'
|
|
ScriptListMetadataResponse:
|
|
description: >-
|
|
List of Deployment Scripts metadata sent back to the client
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
type: object
|
|
properties:
|
|
content:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ScriptMetadata'
|
|
page:
|
|
type: object
|
|
properties:
|
|
size:
|
|
type: integer
|
|
number:
|
|
type: integer
|
|
totalElements:
|
|
type: integer
|
|
totalPages:
|
|
type: integer
|
|
ScriptMetadata:
|
|
type: object
|
|
description: >
|
|
Script metadata (without file content, repository location, cloudEnvironment, scriptTriggers or configFiles).
|
|
properties:
|
|
id:
|
|
type: integer
|
|
format: int64
|
|
description: 'Auto-increment primary key; unique identifier for the Script.'
|
|
scriptIdentify:
|
|
allOf:
|
|
- $ref: '#/components/schemas/ScriptIdentify'
|
|
description: Contains the unique deploymentScriptId and the script hash.
|
|
title:
|
|
type: string
|
|
minLength: 5
|
|
maxLength: 100
|
|
description: Script title.
|
|
description:
|
|
type: string
|
|
minLength: 10
|
|
description: Script description.
|
|
active:
|
|
type: boolean
|
|
description: Indicates whether the script is active (true) or inactive (false).
|
|
creationDate:
|
|
type: string
|
|
format: date
|
|
description: Date when the script was created.
|
|
giteaSha:
|
|
type: string
|
|
description: SHA returned by the Gitea repository after storing the script file.
|
|
originalFileName:
|
|
type: string
|
|
description: Original filename uploaded for the script.
|
|
CloudProviderListResponse:
|
|
description: >-
|
|
Structure of a Cloud Providers list sent back to the client
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/CloudProviderResponse'
|
|
DefaultResponse:
|
|
type: object
|
|
properties:
|
|
success:
|
|
type: boolean
|
|
description: >-
|
|
If true, it means that the request was executed successfully. If
|
|
false, it means that there was an error in processing the request.
|
|
message:
|
|
type: string
|
|
description: Detailed message of the operation result.
|
|
payload:
|
|
type: object
|
|
description: >-
|
|
This field returns an object. This object may vary depending on the
|
|
operation. For example it can be an object of certain type (e.g. Script)
|
|
or an array of specific objects (e.g. array of Scripts).
|
|
description: API Default Response Class
|
|
Problem:
|
|
type: object
|
|
description: API Problem Response Class based on RFC 9457
|
|
properties:
|
|
type:
|
|
type: string
|
|
format: uri
|
|
description: An absolute URI that identifies the problem type.
|
|
default: about:blank
|
|
href:
|
|
type: string
|
|
format: uri
|
|
description: An absolute URI that provides human-readable documentation for the problem type (e.g., using HTML).
|
|
title:
|
|
type: string
|
|
description: A short summary of the problem type, written in English and readable for engineers (not localized).
|
|
example: Service Unavailable
|
|
status:
|
|
type: integer
|
|
format: int32
|
|
description: The HTTP status code generated by the origin server for this occurrence of the problem.
|
|
minimum: 400
|
|
maximum: 599
|
|
example: 503
|
|
detail:
|
|
type: string
|
|
description: A human-readable explanation specific to this occurrence of the problem.
|
|
instance:
|
|
type: string
|
|
format: uri
|
|
description: An absolute URI that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced.
|
|
ScriptTriggerRequest:
|
|
required:
|
|
- deploymentScriptId
|
|
- requesterEmail
|
|
- requesterUniqueId
|
|
type: object
|
|
properties:
|
|
deploymentScriptId:
|
|
maxLength: 50
|
|
minLength: 0
|
|
type: string
|
|
description: Unique identifier field for each script.
|
|
requesterUniqueId:
|
|
maxLength: 50
|
|
minLength: 0
|
|
type: string
|
|
description: Unique identifier field for each requester.
|
|
requesterEmail:
|
|
type: string
|
|
description: Email field for each requester.
|
|
callbackUrl:
|
|
type: string
|
|
format: uri
|
|
description: URL to update async requests.
|
|
example:
|
|
deploymentScriptId: c2468ec1-92fa-462a-b26d-4458a0706316
|
|
requesterUniqueId: 179ee1f3-6afd-4f73-96b0-88eced0f131a
|
|
requesterEmail: john.doe@awesome.com
|
|
callbackUrl: https://client.simpl.com/process-status
|
|
description: Object with mandatory parameters to start triggering the Script.
|
|
ScriptIdentify:
|
|
type: object
|
|
description: >-
|
|
Script Identify entity class. To store the UniqueID and Hash of the
|
|
script.
|
|
properties:
|
|
id:
|
|
type: integer
|
|
format: int64
|
|
description: >-
|
|
Auto Increment, Primary Key, unique identifier for each Script
|
|
Identify data.
|
|
deploymentScriptId:
|
|
type: string
|
|
maxLength: 50
|
|
description: Unique identifier field for each script.
|
|
hash:
|
|
type: string
|
|
maxLength: 64
|
|
description: Hash value generated from the deployment script.
|
|
nullable: false
|
|
required:
|
|
- deploymentScriptId
|
|
- hash
|
|
Script:
|
|
type: object
|
|
description: Script entity class
|
|
properties:
|
|
id:
|
|
type: integer
|
|
format: int64
|
|
description: 'Auto Increment, Primary Key, unique identifier for each Script.'
|
|
scriptIdentify:
|
|
allOf:
|
|
- $ref: '#/components/schemas/ScriptIdentify'
|
|
description: To store the UniqueID and Hash of the script.
|
|
title:
|
|
type: string
|
|
minLength: 5
|
|
maxLength: 100
|
|
description: Script file title.
|
|
description:
|
|
type: string
|
|
minLength: 10
|
|
description: Script file description.
|
|
file:
|
|
type: string
|
|
description: Contains the deployment script sanitized via stored procedure.
|
|
location:
|
|
type: string
|
|
minLength: 5
|
|
maxLength: 255
|
|
description: Link to the script in the repository.
|
|
active:
|
|
type: boolean
|
|
description: Indicates if the script is active (True) or inactive (False).
|
|
cloudEnvironment:
|
|
allOf:
|
|
- $ref: '#/components/schemas/CloudEnvironment'
|
|
description: >-
|
|
Cloud Environment where the script will be executed
|
|
creationDate:
|
|
type: string
|
|
format: date
|
|
description: Date when script was stored.
|
|
giteaSha:
|
|
type: string
|
|
description: SHA provided by Gitea repo after storing script file.
|
|
originalFileName:
|
|
type: string
|
|
description: Original script filename.
|
|
scriptTriggers:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ScriptTrigger'
|
|
description: List of script trigger events.
|
|
configFiles:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ConfigFile'
|
|
description: List of configuration files associated with the script.
|
|
ScriptTrigger:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
description: >-
|
|
Auto Increment, Primary Key, unique identifier for each Script
|
|
Trigger.
|
|
requesterUniqueId:
|
|
type: string
|
|
description: Unique identifier field for each requester.
|
|
maxLength: 50
|
|
requesterEmail:
|
|
type: string
|
|
description: >-
|
|
Requester Email field to answer the asynchronous request after
|
|
finish.
|
|
script:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Script'
|
|
description: Identified Script to be executed
|
|
status:
|
|
type: string
|
|
description: Script Trigger status name.
|
|
resourceStatus:
|
|
type: string
|
|
description: Resource status name.
|
|
decommissionedDateTime:
|
|
type: string
|
|
format: date-time
|
|
description: Resource decommission dateTime.
|
|
callbackUrl:
|
|
type: string
|
|
format: uri
|
|
description: URL to update async requests.
|
|
required:
|
|
- requesterUniqueId
|
|
- requesterEmail
|
|
- script
|
|
- status
|
|
- resourceStatus
|
|
LongRunProcessRequest:
|
|
type: object
|
|
properties:
|
|
requesterUniqueId:
|
|
type: string
|
|
description: Unique identifier field that identifies the infrastructure commissioning request.
|
|
maxLength: 50
|
|
processType:
|
|
type: string
|
|
description: Operation type.
|
|
maxLength: 50
|
|
processStatus:
|
|
type: string
|
|
description: State of the infrastructure provider's process execution.
|
|
enum: [started, processing, waiting, finished, failed, cancelled]
|
|
processStatusMessage:
|
|
type: string
|
|
description: Message of the resulting infrastructure provider execution.
|
|
statusDateTime:
|
|
type: string
|
|
format: date-time
|
|
description: Timestamp of this payload.
|
|
example:
|
|
requesterUniqueId: 179ee1f3-6afd-4f73-96b0-88eced0f131a
|
|
processType: "Long Run Task"
|
|
resourceStatus: "finished"
|
|
resourceStatusMessage: "The process has been completed on the Infrastructure Provider"
|
|
statusDateTime: "20250624_120000"
|
|
required:
|
|
- requesterUniqueId
|
|
- processType
|
|
- processStatus
|
|
- statusDateTime
|
|
ComponentLimitsResponse:
|
|
description: >-
|
|
Structure of components limits sent back to the client, to be used in a VM Template.
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
type: object
|
|
oneOf:
|
|
- $ref: '#/components/schemas/IONOSLimits'
|
|
- $ref: '#/components/schemas/OVHLimits'
|
|
discriminator:
|
|
propertyName: providerType
|
|
mapping:
|
|
IONOS: '#/components/schemas/IONOSLimits'
|
|
OVH: '#/components/schemas/OVHLimits'
|
|
CloudEnvironmentListResponse:
|
|
description: >-
|
|
Paginated list of Cloud Environment data sent back to the client.
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
type: object
|
|
properties:
|
|
content:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/CloudEnvironment'
|
|
page:
|
|
type: object
|
|
properties:
|
|
size:
|
|
type: integer
|
|
number:
|
|
type: integer
|
|
totalElements:
|
|
type: integer
|
|
totalPages:
|
|
type: integer
|
|
CloudEnvironmentResponse:
|
|
description: >-
|
|
Cloud Environment response structure returned to the client.
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
$ref: '#/components/schemas/CloudEnvironment'
|
|
CloudProvisionerTemplateListResponse:
|
|
description: >-
|
|
List of Cloud Provisioner Templates sent back to the client
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
type: array
|
|
items:
|
|
oneOf:
|
|
- $ref: '#/components/schemas/IONOSProvisionerTemplate'
|
|
- $ref: '#/components/schemas/OVHProvisionerTemplate'
|
|
discriminator:
|
|
propertyName: providerType
|
|
mapping:
|
|
IONOS: '#/components/schemas/IONOSProvisionerTemplate'
|
|
OVH: '#/components/schemas/OVHProvisionerTemplate'
|
|
CloudProvisionerTemplateResponse:
|
|
description: >-
|
|
Structure of a Cloud Provisioner Template sent back to the client
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
oneOf:
|
|
- $ref: '#/components/schemas/IONOSProvisionerTemplate'
|
|
- $ref: '#/components/schemas/OVHProvisionerTemplate'
|
|
discriminator:
|
|
propertyName: providerType
|
|
mapping:
|
|
IONOS: '#/components/schemas/IONOSProvisionerTemplate'
|
|
OVH: '#/components/schemas/OVHProvisionerTemplate'
|
|
CloudProvisionerTemplate:
|
|
type: object
|
|
required:
|
|
- providerType
|
|
properties:
|
|
id:
|
|
type: integer
|
|
description: >-
|
|
Auto Increment, Primary Key, unique identifier for each Cloud Provisioner Template.
|
|
fileName:
|
|
type: string
|
|
description: "Template file title."
|
|
maxLength: 100
|
|
minLength: 5
|
|
file:
|
|
type: string
|
|
format: binary
|
|
description: "File content of the Cloud Provisioner Template (Terraform/Crossplane)"
|
|
os:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: OS's allows for the creation of VM's
|
|
example:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
providerType:
|
|
type: string
|
|
description: Discriminator field to identify the cloud provider.
|
|
example: "IONOS"
|
|
CloudProvisionerTemplateRequest:
|
|
required:
|
|
- fileName
|
|
- os
|
|
- providerType
|
|
type: object
|
|
properties:
|
|
fileName:
|
|
type: string
|
|
description: "Template file title."
|
|
maxLength: 100
|
|
minLength: 5
|
|
example: Terraform_Provisioning_Template_File
|
|
os:
|
|
type: array
|
|
items:
|
|
type: string
|
|
description: OS's allows for the creation of VM's
|
|
example:
|
|
- "Ubuntu-22.04"
|
|
- "Ubuntu-24.01"
|
|
- "Ubuntu-24.02"
|
|
- "Ubuntu-24.03"
|
|
- "Centos 6"
|
|
providerType:
|
|
type: string
|
|
description: Discriminator field to identify the cloud provider.
|
|
example: "IONOS"
|
|
description: >-
|
|
Object with mandatory parameters to store a Cloud Provisioner Template.
|
|
TemplateListResponse:
|
|
description: >-
|
|
List of VM Templates sent back to the client
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Template'
|
|
TemplateResponse:
|
|
description: >-
|
|
Structure of a VM Template sent back to the client
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
$ref: '#/components/schemas/Template'
|
|
Template:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
description: 'Auto Increment, Primary Key, unique identifier for each templates'
|
|
format: int64
|
|
cloudEnvironment:
|
|
allOf:
|
|
- $ref: '#/components/schemas/CloudEnvironment'
|
|
description: Cloud Environment where the template will be running.
|
|
cloudProvisionerTemplate:
|
|
allOf:
|
|
- $ref: '#/components/schemas/CloudProvisionerTemplate'
|
|
description: Cloud Provider Template file and description of VM limits.
|
|
name:
|
|
maxLength: 100
|
|
minLength: 3
|
|
type: string
|
|
description: Template name.
|
|
example: Template for AI/ML processing
|
|
description:
|
|
type: string
|
|
minLength: 10
|
|
description: Template description.
|
|
cpuCore:
|
|
type: integer
|
|
format: int32
|
|
description: The number of cores of the VM
|
|
minimum: 1
|
|
maximum: 20
|
|
example: 2
|
|
ram:
|
|
type: integer
|
|
format: int32
|
|
description: The amount (Mb) of memory to be assign to the VM.
|
|
minimum: 1024
|
|
maximum: 102400
|
|
example: 2048
|
|
storage:
|
|
type: integer
|
|
format: int32
|
|
description: The storage (Gb) size of the VM.
|
|
minimum: 5
|
|
maximum: 250
|
|
example: 204
|
|
os:
|
|
maxLength: 50
|
|
minLength: 3
|
|
type: string
|
|
description: Name of the Operative System do be installed.
|
|
example: Ubuntu-22.04
|
|
components:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Component'
|
|
description: Related components (vm-configuration, post-provisioning and policies)
|
|
active:
|
|
type: boolean
|
|
description: Indicates if the template is active (True) or inactive (False).
|
|
example: True
|
|
creationDate:
|
|
type: string
|
|
format: date
|
|
description: Date when template was stored.
|
|
templateScript:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Script'
|
|
description: Deployment script created based on this template.
|
|
description: >-
|
|
Template entity class.
|
|
TemplateRequest:
|
|
required:
|
|
- cloudEnvironmentId
|
|
- cloudProvisionerTemplateId
|
|
- name
|
|
- components
|
|
- os
|
|
- providerType
|
|
type: object
|
|
properties:
|
|
cloudEnvironmentId:
|
|
type: integer
|
|
format: int64
|
|
description: Cloud Environment id.
|
|
example: 123
|
|
cloudProvisionerTemplateId:
|
|
type: integer
|
|
format: int64
|
|
description: Cloud provider template file id that contains the Terraform/Crossplane structure to be used.
|
|
example: 123
|
|
name:
|
|
maxLength: 100
|
|
minLength: 3
|
|
type: string
|
|
description: Template name.
|
|
example: Template for AI/ML processing
|
|
description:
|
|
type: string
|
|
minLength: 10
|
|
description: Template description.
|
|
example: VM Template to create VM for AI processing.
|
|
components:
|
|
type: array
|
|
description: A list of component IDs associated with this VM Template.
|
|
items:
|
|
type: integer
|
|
format: int64
|
|
example:
|
|
- 12345
|
|
- 12346
|
|
os:
|
|
maxLength: 50
|
|
minLength: 3
|
|
type: string
|
|
description: Name of the Operative System do be installed.
|
|
example: Ubuntu-22.04
|
|
providerType:
|
|
type: string
|
|
description: Discriminator field to identify the cloud provider.
|
|
example: "OVH"
|
|
description: >-
|
|
Object with mandatory parameters to store a VM Template (using API or UI).
|
|
IONOSTemplateRequest:
|
|
required:
|
|
- cpuCore
|
|
- ram
|
|
- storage
|
|
allOf:
|
|
- $ref: '#/components/schemas/TemplateRequest'
|
|
- type: object
|
|
properties:
|
|
cpuCore:
|
|
type: integer
|
|
format: int32
|
|
description: The number of cores of the VM
|
|
minimum: 1
|
|
maximum: 20
|
|
example: 2
|
|
ram:
|
|
type: integer
|
|
format: int32
|
|
description: The amount (Mb) of memory to be assign to the VM.
|
|
minimum: 1024
|
|
maximum: 102400
|
|
example: 2048
|
|
storage:
|
|
type: integer
|
|
format: int32
|
|
description: The storage (Gb) size of the VM.
|
|
minimum: 5
|
|
maximum: 250
|
|
example: 204
|
|
description: >-
|
|
Object with mandatory parameters for IONOS VM Template (using API or UI).
|
|
OVHTemplateRequest:
|
|
allOf:
|
|
- $ref: '#/components/schemas/TemplateRequest'
|
|
- type: object
|
|
description: >-
|
|
Object with mandatory parameters for OVH VM Template (using API or UI).
|
|
ComponentResponse:
|
|
description: >-
|
|
Structure of a Component sent back to the client
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
$ref: '#/components/schemas/Component'
|
|
Component:
|
|
type: object
|
|
required:
|
|
- id
|
|
- type
|
|
- name
|
|
- description
|
|
- content
|
|
properties:
|
|
id:
|
|
type: integer
|
|
description: 'Auto Increment, Primary Key, unique identifier for each component'
|
|
format: int64
|
|
type:
|
|
$ref: '#/components/schemas/ComponentType'
|
|
description: The type of the component.
|
|
name:
|
|
maxLength: 50
|
|
minLength: 3
|
|
type: string
|
|
description: A user-friendly name for the component.
|
|
description:
|
|
maxLength: 100
|
|
minLength: 3
|
|
type: string
|
|
description: A detailed description of the component's purpose.
|
|
content:
|
|
type: string
|
|
description: The actual content of the component (e.g., a cloud-init script, a shell command, or policy data).
|
|
active:
|
|
type: boolean
|
|
description: Indicates if the component is active (True) or inactive (False).
|
|
creationDate:
|
|
type: string
|
|
format: date
|
|
description: Date when component was stored.
|
|
ComponentType:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
format: int64
|
|
description: The unique ID of the component type.
|
|
name:
|
|
type: string
|
|
description: The human-readable name of the component type.
|
|
enum:
|
|
- vm-configuration
|
|
- post-provisioning-operations
|
|
- policies
|
|
ComponentTypeListResponse:
|
|
description: >-
|
|
List of component types sent back to the client
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ComponentType'
|
|
ComponentListResponse:
|
|
description: >-
|
|
List of VM Templates components sent back to the client
|
|
allOf:
|
|
- $ref: '#/components/schemas/DefaultResponse'
|
|
- type: object
|
|
properties:
|
|
payload:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Component'
|
|
ComponentRequest:
|
|
type: object
|
|
required:
|
|
- typeId
|
|
- name
|
|
- content
|
|
properties:
|
|
typeId:
|
|
type: integer
|
|
format: int64
|
|
description: The unique ID of the component type.
|
|
example: 1234
|
|
name:
|
|
type: string
|
|
description: A user-friendly name for the component.
|
|
example: "Script to install awesome app"
|
|
description:
|
|
type: string
|
|
description: A detailed description of the component's purpose in the creation of VM Templates.
|
|
example: "This post provisioning operation will install an application that will help end users to find insights."
|
|
content:
|
|
type: string
|
|
description: The actual content of the component.
|
|
example: "apt install mariadb-server mariadb-client -y\nsudo cp /path/to/iot_data.csv /var/lib/mysql-files/"
|
|
ConfigFile:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
description: >-
|
|
Auto Increment, Primary Key, unique identifier for each Config file.
|
|
fileName:
|
|
type: string
|
|
description: "Config file title."
|
|
maxLength: 100
|
|
minLength: 5
|
|
file:
|
|
type: string
|
|
format: binary
|
|
description: "Configuration file content."
|
|
script:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Script'
|
|
description: "The associated script for this configuration file."
|
|
securitySchemes:
|
|
bearerAuth:
|
|
type: http
|
|
description: Use the bearer token to authenticate
|
|
scheme: bearer
|