Utiliser l'API REST de Rescale

Avec l'API REST de Rescale, vous pouvez télécharger des fichiers d'entrée, créer des tâches, afficher l'état des tâches existantes, et bien plus encore. Pour la liste complète des points de terminaison de l'API, consultez le Documentation de l'API de redimensionnement.

Une clé API est requise pour authentifier votre compte lors de l'interaction avec l'API. Pour générer une clé API pour votre compte, accédez à API de votre page de paramètres (Profil > Paramètres du profil utilisateur > API), puis cliquez sur le bouton Ajouter une clé API .

image 49 1024x451 1

Il n'y a pas de limite au nombre de clés API que vous pouvez créer, et les supprimer est aussi simple que de les sélectionner et de cliquer sur « Supprimer ». Les clés API sont définies pour ne jamais expirer par défaut, mais si vous devez définir une politique de durée de vie maximale, contactez le support Rescale pour obtenir de l'aide. Une politique de durée de vie maximale inclura une durée de vie de clé API en jours (par exemple 90 jours). Une fois qu'une politique de durée de vie maximale est définie, toutes les nouvelles clés API créées après la date de création de la politique incluront une date d'expiration.

Par exemple : si votre politique de durée de vie maximale est définie sur 90 jours le 1/1/23, toutes les clés API créées après cette heure expireront 90 jours après la création de la clé API. Si je crée une clé API le 2/13/23, la clé API expirera le 5/14/23

Par défaut, la clé API est masquée. Afin de le révéler, cliquez simplement sur la clé API. Vous pouvez copier la clé API en cliquant sur l'icône de copie à droite.

Utilisation des clés API dans le post-traitement des tâches

Cette fonctionnalité est actuellement disponible en version bêta publique. Veuillez contacter votre représentant de compte pour y accéder.

Les tâches de rescale reçoivent automatiquement une clé API unique et de courte durée en tant que variable d'environnement, RESCALE_API_KEY, améliorant la sécurité et l'efficacité opérationnelle. La disponibilité de cette clé API sur le travail rationalise le chaînage des tâches, la diffusion et orchestration en automatisant la gestion des clés API.

La clé API expire une fois la tâche terminée, réduisant ainsi les risques de sécurité dans les environnements de tâches partagés.

Pour utiliser la clé API de travail intégrée, incluez simplement RESCALE_API_KEY dans votre script ou dans la CLI Rescale et il invoquera cette clé API spécifique au travail. Si vous souhaitez valider la clé API sur le terrain, utilisez simplement le echo $RESCALE_API_KEY commande dans la CLI du travail.

Les clés API spécifiques à la tâche seront affichées dans les paramètres du profil utilisateur avec la tâche source liée et expireront une fois la tâche terminée.

Capture d'écran 2024 02 16 à 12.36.36hXNUMXhXNUMX

Lorsque vous utilisez la clé API intégrée à l'aide de cURL, appelez la clé API d'environnement à l'aide de $. Voici un exemple de liste de tous les emplois.

curl -H "Autorisation : jeton $RESCALE_API_KEY" https://platform.rescale.com/api/v2/jobs/

Lorsque vous utilisez la clé API intégrée à l'aide de Python, appelez la clé API d'environnement à l'aide de la bibliothèque os. Voici un exemple de liste de tous les emplois.

importer des requêtes import os api_key = os.getenv("RESCALE_API_KEY") request.get( 'https://platform.rescale.com/api/v2/jobs/', headers={'Authorization': f'Token {api_key} '} ) request.get( 'https://platform.rescale.com/api/v2/jobs/?state=not_completed', headers={'Autorisation': f'Token {api_key}'} )

Exécuter un travail via l'API Rescale

Cet exemple montre comment configurer une tâche LS-DYNA via l'API en utilisant à la fois cURL et python.

Tout d’abord, accédez au répertoire contenant le fichier d’entrée (input.zip) et téléchargez-le à l’aide de la commande :

curl -X POST -H 'Content-Type:multipart/form-data' \-H 'Authorization: Token ' \-F "file=@input.zip" \https://platform.rescale.com/api/v2/files/contents/

La réponse serait similaire à :

{ "pathParts": { "path": "user/user_WrNSdb/input-a2f3d113-6591-461e-a912-57b06166df21.zip", "container": "prod-rescale-platform" }, "typeId": 1, "name": "input.zip", "dateUploaded": "2016-11-11T18:50:54.078468Z", "relativePath": "input.zip", "storage": { "storageType": "S3Storage", "id": "pCTMk", "connectionSettings": { "region": "us-east-1" }, "encryptionType": "default" }, "decryptedSize": 10391660, "downloadUrl": "https://platform.rescale.com/api/v2/files/yMqdxd/contents/", "sharedWith": [], "encodedEncryptionKey": "N1iq48GWyEDkMG1wTHI656hcJZKdSQecuwKhu31Epd0=", "owner": "demo@example.com", "path": "user/user_WrNSdb/input-a2f3d113-6591-461e-a912-57b06166df21.zip", "isUploaded": true, "viewInBrowser": false, "id": "yMqdxd", "isDeleted": false, "md5": "159bb1cdd01987f9122f5ec673958eaf" }

Ensuite, nous devons choisir un logiciel d'analyse. La liste complète des analyses peut être obtenue en appelant curl -H "Authorization: Token <api-token>" https://platform.rescale.com/api/v2/analyses/. L'information importante à extraire est le code du Logiciel que vous souhaitez utiliser, indiqué sous "code":"...".

Vous aurez également besoin du coretype informations, qui peuvent être trouvées en utilisant curl -H "Authorization: Token <api-token>" https://platform.rescale.com/api/v2/coretypes/. Le nom des coretypes tel qu'affiché sur l'interface utilisateur Web est capturé sous "name":"..." dans chaque entrée. De même, vous devez extraire le code du coretype, affiché sous "code":"...".

Dans le même répertoire que celui dans lequel vous vous trouvez actuellement, créez un fichier de données contenant un JSON des paramètres et des informations de la tâche. L'ID du fichier d'entrée peut être trouvé dans la réponse lorsque le fichier d'entrée a été téléchargé. Par exemple:

cat <<EOF > data.json{  "name": "LS-DYNA cURL API Setup", "billingPriorityValue": "INSTANT", "jobanalyses": [    {      "useRescaleLicense":true,      "command": "ls-dyna -n 2 -i neon.refined.rev01.k -p single",      "analysis": {        "code": "ls_dyna",        "version": "9.0.0"      },      "hardware": {        "coresPerSlot": 2,        "slots": 1,        "coreType": "hpc-3"      },      "inputFiles": [        {          "id": "yMqdxd"        }      ]    }  ]}EOF

La liste complète des options de commande et ses valeurs par défaut peuvent être trouvées ici.

Ensuite, exécutez la commande pour configurer votre tâche Rescale en fonction du fichier de données qui vient d'être créé :

curl -X POST --data @data.json \-H "Autorisation : jeton " \-H "Type de contenu : application/json" \https://platform.rescale.com/api/v2/jobs/

La réponse serait similaire à :

{   "monteCarloIterations":null,   "paramFile":null,   "name":"LS-DYNA cURL API Setup",  "billingPriorityValue": "INSTANT", "includeNominalRun":false,   "jobanalyses":[      {         "envVars":{          },         "preProcessScriptCommand":"",         "postProcessScriptCommand":"",         "postProcessScript":null,         "useRescaleLicense":true,         "templateTasks":[          ],         "analysis":{            "version":"9.0.0",            "code":"ls_dyna",            "name":"LS-DYNA",            "versionName":"R9.0.0"         },         "hardware":{            "coresPerSlot":2,            "coreType":"hpc-3",            "coreSummary":{               "storagePerNode":80000,               "gpusPerNode":0,               "numberOfNodes":1.0,               "memoryPerNode":7500            },            "slots":1,            "type":"compute",            "walltime":750         },         "command":"ls-dyna -n 2 -i neon.refined.rev01.k -p single",         "preProcessScript":null,         "flags":{          },         "inputFiles":[            {               "pathParts":{                  "path":"user/user_WrNSdb/input-a2f3d113-6591-461e-a912-57b06166df21.zip",                  "container":"prod-rescale-platform"               },               "typeId":1,               "name":"input.zip",               "dateUploaded":"2016-11-11T18:50:54.078468Z",               "relativePath":"input.zip",               "storage":{                  "storageType":"S3Storage",                  "id":"pCTMk",                  "connectionSettings":{                     "region":"us-east-1"                  },                  "encryptionType":"default"               },               "decryptedSize":10391660,               "downloadUrl":"https://platform.rescale.com/api/v2/files/yMqdxd/contents/",               "sharedWith":[                ],               "encodedEncryptionKey":"N1iq48GWyEDkMG1wTHI656hcJZKdSQecuwKhu31Epd0=",               "owner":"demo@rescale.com",               "path":"user/user_WrNSdb/input-a2f3d113-6591-461e-a912-57b06166df21.zip",               "isUploaded":true,               "viewInBrowser":false,               "id":"yMqdxd",               "isDeleted":false,               "md5":"159bb1cdd01987f9122f5ec673958eaf"            }         ]      }   ],   "projectId":null,   "resourceFilters":[    ],   "remoteVizConfig":null,   "jobvariables":[    ],   "sshPort":22,   "expectedRuns":null,   "caseFile":null,   "isLowPriority":false,   "owner":"demo@rescale.com",   "isTemplateDryRun":false,   "autoTerminateCluster":true,   "id":"RcAFeb",   "archiveFilters":[]}

La tâche est maintenant enregistrée et apparaîtra dans l'interface utilisateur Web de Rescale. Enfin, vous devez soumettre le travail à l'aide de la commande :

curl -X POST -H 'Autorisation : jeton ' \https://platform.rescale.com/api/v2/jobs/RcAFeb/submit/

Remarque : L'ID de tâche peut être trouvé dans la réponse précédente.

Si vous souhaitez surveiller l'état de votre travail, utilisez la commande :

curl -H 'Autorisation : jeton ' \https://platform.rescale.com/api/v2/jobs/RcAFeb/statuses/

La réponse serait similaire à :

{   "count":6,   "previous":null,   "results":[      {         "status":"Completed",         "statusDate":"2016-11-15T19:01:13.948641Z",         "id":"KNwnm",         "statusReason":"Completed successfully"      },      {         "status":"Executing",         "statusDate":"2016-11-15T18:47:05.530000Z",         "id":"ePisa",         "statusReason":null      },      {         "status":"Validated",         "statusDate":"2016-11-15T18:41:23.929000Z",         "id":"Yfcem",         "statusReason":null      },      {         "status":"Started",         "statusDate":"2016-11-15T18:41:23.629000Z",         "id":"KDisa",         "statusReason":null      },      {         "status":"Queued",         "statusDate":"2016-11-15T18:41:21.577545Z",         "id":"ircem",         "statusReason":null      },      {         "status":"Pending",         "statusDate":"2016-11-15T18:40:56.465755Z",         "id":"UOisa",         "statusReason":null      }   ],   "next":null}

Un travail peut également être configuré via un script Python. Cet exemple fournit des morceaux d'exemple de code Python qui peuvent être utilisés pour configurer et exécuter une tâche LS-DYNA.

Remarque : Cette méthode utilise le requests bibliothèque, vous devez donc exécuter import requests au début de votre code.

Commencez par compresser le fichier, puis téléchargez-le sur Rescale en utilisant :

file_upload = request.post( 'https://platform.rescale.com/api/v2/files/contents/', data=None, files={'file' : open('input.zip','rb') }, headers={'Autorisation' : 'Jeton '} )imprimer file_upload.content

Notez que le fichier (input.zip) doit se trouver dans le même répertoire que le script.

La sortie serait similaire à:

{   "pathParts":{      "path":"user/user_WrNSdb/input-69b6c9bd-e4d8-4291-9c79-487ac21a0c7c.zip",      "container":"prod-rescale-platform"   },   "typeId":1,   "name":"input.zip",   "dateUploaded":"2016-11-14T22:58:35.729270Z",   "relativePath":"input.zip",   "storage":{      "storageType":"S3Storage",      "id":"pCTMk",      "connectionSettings":{         "region":"us-east-1"      },      "encryptionType":"default"   },   "decryptedSize":10391660,   "downloadUrl":"https://platform.rescale.com/api/v2/files/FDXpJd/contents/",   "sharedWith":[    ],   "encodedEncryptionKey":"ixay5gbPcYHnSwKNhPHldhzCZXEpN/rpD9Q8tskoavo=",   "owner":"demo@rescale.com",   "path":"user/user_WrNSdb/input-69b6c9bd-e4d8-4291-9c79-487ac21a0c7c.zip",   "isUploaded":true,   "viewInBrowser":false,   "id":"FDXpJd",   "isDeleted":false,   "md5":"159bb1cdd01987f9122f5ec673958eaf"}

Ensuite, vous devrez configurer le travail. Pour cela, vous devrez obtenir les informations sur le logiciel et le matériel d'analyse.

Pour les analyses :

request.get( 'https://platform.rescale.com/api/v2/analyses/', headers={'Autorisation': 'Jeton '} )

Pour le type de base :

request.get( 'https://platform.rescale.com/api/v2/coretypes/', headers={'Autorisation': 'Jeton '} )

Dans les deux cas, vous devez récupérer le code affiché sous "code":"...".

Un exemple de création d'un emploi serait :

job_setup = requests.post(    'https://platform.rescale.com/api/v2/jobs/',    json = {         "name": "LS-DYNA Python API Setup",         "jobanalyses": [             {                 "useRescaleLicense":True,                 "command": "ls-dyna -n 2 -i neon.refined.rev01.k -p single",                 "analysis": {                     "code": "ls_dyna",                     "version": "9.0.0"                    },                 "hardware": {                     "coresPerSlot": 2,                     "slots": 1,                     "coreType": "hpc-3"                    },                 "inputFiles": [                     {                         "id": "FDXpJd"                        }                    ]                }            ]        },  headers={'Authorization': 'Token <api-token>'} )print job_setup.content

Remarque : Vous pouvez trouver l'ID du fichier d'entrée à partir de la sortie précédente (téléchargement de fichier)

La sortie serait similaire à:

{   "monteCarloIterations":null,   "paramFile":null,   "name":"LS-DYNA Python API Setup",   "includeNominalRun":false,   "jobanalyses":[      {         "envVars":{          },         "preProcessScriptCommand":"",         "postProcessScriptCommand":"",         "postProcessScript":null,         "useRescaleLicense":true,         "templateTasks":[          ],         "analysis":{            "version":"9.0.0",            "code":"ls_dyna",            "name":"LS-DYNA",            "versionName":"R9.0.0"         },         "hardware":{            "coresPerSlot":2,            "coreType":"hpc-3",            "coreSummary":{               "storagePerNode":80000,               "gpusPerNode":0,               "numberOfNodes":1.0,               "memoryPerNode":7500            },            "slots":1,            "type":"compute",            "walltime":750         },         "command":"ls-dyna -n 2 -i neon.refined.rev01.k -p single",         "preProcessScript":null,         "flags":{          },         "inputFiles":[            {               "pathParts":{                  "path":"user/user_WrNSdb/input-69b6c9bd-e4d8-4291-9c79-487ac21a0c7c.zip",                  "container":"prod-rescale-platform"               },               "typeId":1,               "name":"input.zip",               "dateUploaded":"2016-11-14T22:58:35.729270Z",               "relativePath":"input.zip",               "storage":{                  "storageType":"S3Storage",                  "id":"pCTMk",                  "connectionSettings":{                     "region":"us-east-1"                  },                  "encryptionType":"default"               },               "decryptedSize":10391660,               "downloadUrl":"https://platform.rescale.com/api/v2/files/FDXpJd/contents/",               "sharedWith":[                ],               "encodedEncryptionKey":"ixay5gbPcYHnSwKNhPHldhzCZXEpN/rpD9Q8tskoavo=",               "owner":"demo@rescale.com",               "path":"user/user_WrNSdb/input-69b6c9bd-e4d8-4291-9c79-487ac21a0c7c.zip",               "isUploaded":true,               "viewInBrowser":false,               "id":"FDXpJd",               "isDeleted":false,               "md5":"159bb1cdd01987f9122f5ec673958eaf"            }         ]      }   ],   "projectId":null,   "resourceFilters":[    ],   "remoteVizConfig":null,   "jobvariables":[    ],   "sshPort":22,   "expectedRuns":null,   "caseFile":null,   "isLowPriority":false,   "owner":"demo@rescale.com",   "isTemplateDryRun":false,   "autoTerminateCluster":true,   "id":"ASwPT",   "archiveFilters":[    ]}

La tâche est maintenant enregistrée et apparaîtra dans l'interface utilisateur Web de Rescale. Enfin, vous devez soumettre le travail à l'aide de la commande :

request.post( 'https://platform.rescale.com/api/v2/jobs/ASwPT/submit/', headers={'Authorization': 'Jeton '} )

Si vous souhaitez surveiller votre travail, vous pouvez exécuter la commande :

job_status = requêtes.get( 'https://platform.rescale.com/api/v2/jobs/ASwPT/statuses/', headers={'Autorisation' : 'Jeton '} )imprimer job_status.content

FAQ sur les clés API

Q : Puis-je définir la politique de durée de vie maximale de l'API au niveau de l'utilisateur ?
R. Non, les politiques de durée de vie maximale de l'API sont définies uniquement au niveau de l'organisation.

Q. Que se passe-t-il lorsqu'une clé API expire ?
R. Lorsqu'une clé API expire, la date devient rouge, mais la clé API continue d'exister. Lorsque vous tentez d’utiliser la clé API, une erreur sera générée indiquant « La clé API n’est plus active ». Il appartient à l'utilisateur de supprimer les clés API lorsqu'elles expirent.

Q. Existe-t-il des alertes liées à la date d'expiration ?
R. Non, il n’y a aucune alerte liée à la date d’expiration aujourd’hui. Si cela vous intéresse, veuillez contacter Rescale pour exprimer votre besoin.

Q. Est-il possible d'ajouter des autorisations au niveau de la clé ?
R. Non, toutes les clés auront des autorisations complètes sur tout ce à quoi l'utilisateur a accès.

Q. Qu'arrive-t-il à la clé API si un utilisateur est désactivé ?
A. Si vous désactivez un utilisateur et essayez d'utiliser l'une des clés, vous obtenez le message : User inactive or deleted.