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